Name: series-workflowgmz6q Phase: Running StartedAt: 2026-07-01 23:19:27 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmz6q[0] Phase: Running StartedAt: 2026-07-01 23:19:27 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmz6q[0].run-triage Phase: Running StartedAt: 2026-07-01 23:19:27 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmz6q[0].run-triage(0) Phase: Running StartedAt: 2026-07-01 23:19:27 +0000 UTC FinishedAt: 0001-01-01 00:00: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+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgRE1BLUJVRiBoZWFwIGZvciBOVklESUEgVGVncmEgVmlkZW8tUHJvdGVjdGlvbi1SZWdpb24gKFZQUikuIFRoZSBkcml2ZXIgKHRlZ3JhLXZwci5jKSBvbmx5IGluaXRpYWxpemVzIGlmIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZSAoJiMzOTtudmlkaWEsdGVncmEtdmlkZW8tcHJvdGVjdGlvbi1yZWdpb24mIzM5OykgaXMgcHJlc2VudCwgd2hpY2ggaXMgbm90IHRoZSBjYXNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEZ1cnRoZXJtb3JlLCB0aGUgZHJpdmVyIHJlbGllcyBvbiBUZWdyYS1zcGVjaWZpYyBTTUMgY2FsbHMgdG8gYSBzZWN1cmUgbW9uaXRvci4gVGhlIGNoYW5nZXMgdG8gY29yZSBDTUEgbG9naWMgKG1tL2NtYS5jKSBhcmUgZWl0aGVyIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIGVhcmx5IGJvb3Qgb3IgYXJlIGRlYWQgY29kZSAoZS5nLiwgY21hX2Zvcl9lYWNoX2FyZWEgaGFzIG5vIGNhbGxlcnMpLiBUaGVyZWZvcmUsIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiMzBkNjk1NzZhMWRhNjI0MTAzMGNiNGVkYjMyZTAxOTc5NDNlMWI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAyMzozNTowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmExMjQtdmljLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmExMjQtdmljLnlhbWxcbmluZGV4IDcyMDAwOTVlZjE5ZTNjLi4xZTI3YTczMWFkOWFkMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTEyNC12aWMueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdGVncmEvbnZpZGlhLHRlZ3JhMTI0LXZpYy55YW1sXG5AQCAtNjcsNiAmIzQzOzY3LDE0IEBAIHByb3BlcnRpZXM6XG4gICAgICAgLSBjb25zdDogZG1hLW1lbSAjIHJlYWRcbiAgICAgICAtIGNvbnN0OiB3cml0ZVxuIFxuJiM0MzsgIG1lbW9yeS1yZWdpb246XG4mIzQzOyAgICBpdGVtczpcbiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogcmVmZXJlbmNlIHRvIHRoZSB2aWRlbyBwcm90ZWN0aW9uIG1lbW9yeSByZWdpb25cbiYjNDM7XG4mIzQzOyAgbWVtb3J5LXJlZ2lvbi1uYW1lczpcbiYjNDM7ICAgIGl0ZW1zOlxuJiM0MzsgICAgICAtIGNvbnN0OiBwcm90ZWN0ZWRcbiYjNDM7XG4gICBkbWEtY29oZXJlbnQ6IHRydWVcbiBcbiBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmExODYtZGMueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTE4Ni1kYy55YW1sXG5pbmRleCBjZTQ1ODk0NjZhMTg2Yi4uODgxYmZiZjQ3NjRkZmEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmExODYtZGMueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdGVncmEvbnZpZGlhLHRlZ3JhMTg2LWRjLnlhbWxcbkBAIC01Nyw2ICYjNDM7NTcsMTYgQEAgcHJvcGVydGllczpcbiAgICAgICAtIGNvbnN0OiBkbWEtbWVtICMgcmVhZC0wXG4gICAgICAgLSBjb25zdDogcmVhZC0xXG4gXG4mIzQzOyAgbWVtb3J5LXJlZ2lvbjpcbiYjNDM7ICAgIG1pbkl0ZW1zOiAxXG4mIzQzOyAgICBtYXhJdGVtczogMlxuJiM0MztcbiYjNDM7ICBtZW1vcnktcmVnaW9uLW5hbWVzOlxuJiM0MzsgICAgaXRlbXM6XG4mIzQzOyAgICAgIGVudW06IFsgZnJhbWVidWZmZXIsIHByb3RlY3RlZCBdXG4mIzQzOyAgICBtaW5JdGVtczogMVxuJiM0MzsgICAgbWF4SXRlbXM6IDJcbiYjNDM7XG4gICBudmlkaWEsb3V0cHV0czpcbiAgICAgZGVzY3JpcHRpb246IEEgbGlzdCBvZiBwaGFuZGxlcyBvZiBvdXRwdXRzIHRoYXQgdGhpcyBkaXNwbGF5XG4gICAgICAgY29udHJvbGxlciBjYW4gZHJpdmUuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdGVncmEvbnZpZGlhLHRlZ3JhMjAtZGMueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTIwLWRjLnlhbWxcbmluZGV4IDY5YmU5NWFmZDU2Mjc3Li5hMDEyNjQ0ZWViN2Q3YSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTIwLWRjLnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTIwLWRjLnlhbWxcbkBAIC02NSw3ICYjNDM7NjUsMTUgQEAgcHJvcGVydGllczpcbiAgICAgaXRlbXM6XG4gICAgICAgLSBkZXNjcmlwdGlvbjogcGhhbmRsZSB0byB0aGUgY29yZSBwb3dlciBkb21haW5cbiBcbi0gIG1lbW9yeS1yZWdpb246IHRydWVcbiYjNDM7ICBtZW1vcnktcmVnaW9uOlxuJiM0MzsgICAgbWluSXRlbXM6IDFcbiYjNDM7ICAgIG1heEl0ZW1zOiAyXG4mIzQzO1xuJiM0MzsgIG1lbW9yeS1yZWdpb24tbmFtZXM6XG4mIzQzOyAgICBpdGVtczpcbiYjNDM7ICAgICAgZW51bTogWyBmcmFtZWJ1ZmZlciwgcHJvdGVjdGVkIF1cbiYjNDM7ICAgIG1pbkl0ZW1zOiAxXG4mIzQzOyAgICBtYXhpdGVtczogMlxuIFxuICAgbnZpZGlhLGhlYWQ6XG4gICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTIwLWhvc3QxeC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdGVncmEvbnZpZGlhLHRlZ3JhMjAtaG9zdDF4LnlhbWxcbmluZGV4IDM1NjMzNzhhMDFhZjQ3Li5mNDViZTMwODM1YThiMyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTIwLWhvc3QxeC55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmEyMC1ob3N0MXgueWFtbFxuQEAgLTk2LDYgJiM0Mzs5NiwxMyBAQCBwcm9wZXJ0aWVzOlxuICAgICBpdGVtczpcbiAgICAgICAtIGRlc2NyaXB0aW9uOiBwaGFuZGxlIHRvIHRoZSBIRUcgb3IgY29yZSBwb3dlciBkb21haW5cbiBcbiYjNDM7ICBtZW1vcnktcmVnaW9uOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7XG4mIzQzOyAgbWVtb3J5LXJlZ2lvbi1uYW1lczpcbiYjNDM7ICAgIGl0ZW1zOlxuJiM0MzsgICAgICAtIGNvbnN0OiBwcm90ZWN0ZWRcbiYjNDM7XG4gcmVxdWlyZWQ6XG4gICAtIGNvbXBhdGlibGVcbiAgIC0gaW50ZXJydXB0c1xuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncHUvaG9zdDF4L252aWRpYSx0ZWdyYTIzNC1udmRlYy55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwdS9ob3N0MXgvbnZpZGlhLHRlZ3JhMjM0LW52ZGVjLnlhbWxcbmluZGV4IDBiNzU2MWM4YjliYjJjLi43MjMxM2Y3NzZkYmQ4ZiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncHUvaG9zdDF4L252aWRpYSx0ZWdyYTIzNC1udmRlYy55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3B1L2hvc3QxeC9udmlkaWEsdGVncmEyMzQtbnZkZWMueWFtbFxuQEAgLTYwLDYgJiM0Mzs2MCwxNCBAQCBwcm9wZXJ0aWVzOlxuICAgICAgIC0gY29uc3Q6IGRtYS1tZW1cbiAgICAgICAtIGNvbnN0OiB3cml0ZVxuIFxuJiM0MzsgIG1lbW9yeS1yZWdpb246XG4mIzQzOyAgICBpdGVtczpcbiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogcmVmZXJlbmNlIHRvIHRoZSB2aWRlbyBwcm90ZWN0aW9uIG1lbW9yeSByZWdpb25cbiYjNDM7XG4mIzQzOyAgbWVtb3J5LXJlZ2lvbi1uYW1lczpcbiYjNDM7ICAgIGl0ZW1zOlxuJiM0MzsgICAgICAtIGNvbnN0OiBwcm90ZWN0ZWRcbiYjNDM7XG4gICBudmlkaWEsbWVtb3J5LWNvbnRyb2xsZXI6XG4gICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcbiAgICAgZGVzY3JpcHRpb246XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Jlc2VydmVkLW1lbW9yeS9udmlkaWEsdGVncmEtdmlkZW8tcHJvdGVjdGlvbi1yZWdpb24ueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZXNlcnZlZC1tZW1vcnkvbnZpZGlhLHRlZ3JhLXZpZGVvLXByb3RlY3Rpb24tcmVnaW9uLnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMWM1MjRiYWU5Y2UzMjBcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZXNlcnZlZC1tZW1vcnkvbnZpZGlhLHRlZ3JhLXZpZGVvLXByb3RlY3Rpb24tcmVnaW9uLnlhbWxcbkBAIC0wLDAgJiM0MzsxLDc2IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wIE9SIEJTRC0yLUNsYXVzZSlcbiYjNDM7JVlBTUwgMS4yXG4mIzQzOy0tLVxuJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL3Jlc2VydmVkLW1lbW9yeS9udmlkaWEsdGVncmEtdmlkZW8tcHJvdGVjdGlvbi1yZWdpb24ueWFtbCNcbiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4mIzQzO1xuJiM0Mzt0aXRsZTogTlZJRElBIFRlZ3JhIFZpZGVvIFByb3RlY3Rpb24gUmVnaW9uIChWUFIpXG4mIzQzO1xuJiM0MzttYWludGFpbmVyczpcbiYjNDM7ICAtIFRoaWVycnkgUmVkaW5nIFx1MDAzY3RoaWVycnkucmVkaW5nQGdtYWlsLmNvbVx1MDAzZVxuJiM0MzsgIC0gSm9uIEh1bnRlciBcdTAwM2Nqb25hdGhhbmhAbnZpZGlhLmNvbVx1MDAzZVxuJiM0MztcbiYjNDM7ZGVzY3JpcHRpb246IHxcbiYjNDM7ICBOVklESUEgVGVncmEgY2hpcHMgaGF2ZSBsb25nIHN1cHBvcnRlZCBhIG1lY2hhbmlzbSB0byBwcm90ZWN0IGEgc2luZ2xlLFxuJiM0MzsgIGNvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbiBmcm9tIG5vbi1zZWN1cmUgbWVtb3J5IGFjY2Vzc2VzLiBUeXBpY2FsbHkgdGhpc1xuJiM0MzsgIHJlZ2lvbiBpcyB1c2VkIGZvciBkZWNvZGluZyBhbmQgcGxheWJhY2sgb2YgRFJNIHByb3RlY3RlZCBjb250ZW50LiBWYXJpb3VzXG4mIzQzOyAgZGV2aWNlcywgc3VjaCBhcyB0aGUgZGlzcGxheSBjb250cm9sbGVyIGFuZCBtdWx0aW1lZGlhIGVuZ2luZXMgKHZpZGVvXG4mIzQzOyAgZGVjb2RlcikgY2FuIGFjY2VzcyB0aGlzIHJlZ2lvbiBpbiBhIHNlY3VyZSB3YXkuIEFjY2VzcyBmcm9tIHRoZSBDUFUgaXNcbiYjNDM7ICBnZW5lcmFsbHkgZm9yYmlkZGVuLlxuJiM0MztcbiYjNDM7ICBUd28gdmFyaWFudHMgZXhpc3QgZm9yIFZQUjogb25lIGlzIGZpeGVkIGluIGJvdGggdGhlIGJhc2UgYWRkcmVzcyBhbmQgc2l6ZSxcbiYjNDM7ICB3aGlsZSB0aGUgb3RoZXIgaXMgcmVzaXphYmxlLiBGaXhlZCBWUFIgY2FuIGJlIGRlc2NyaWJlZCBieSBqdXN0IGEgXCYjMzQ7cmVnXCYjMzQ7XG4mIzQzOyAgcHJvcGVydHkgc3BlY2lmeWluZyB0aGUgYmFzZSBhZGRyZXNzIGFuZCBzaXplLCB3aGVyZWFzIHRoZSByZXNpemFibGUgVlBSXG4mIzQzOyAgaXMgZGVmaW5lZCBieSBhIHNpemUvYWxpZ25tZW50IHBhaXIgb2YgcHJvcGVydGllcy4gRm9yIHJlc2l6YWJsZSBWUFIgdGhlXG4mIzQzOyAgbWVtb3J5IGlzIHJldXNhYmxlIGJ5IHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0gd2hlbiBpdCYjMzk7cyB1bnVzZWQgZm9yIFZQUiBhbmRcbiYjNDM7ICB0aGVyZWZvcmUgdGhlIFwmIzM0O3JldXNhYmxlXCYjMzQ7IHByb3BlcnR5IG11c3QgYmUgc3BlY2lmaWVkIGFsb25nIHdpdGggaXQuIEZvciBhXG4mIzQzOyAgZml4ZWQgVlBSLCB0aGUgbWVtb3J5IGlzIHBlcm1hbmVudGx5IHByb3RlY3RlZCwgYW5kIHRoZXJlZm9yZSBpdCYjMzk7cyBub3RcbiYjNDM7ICByZXVzYWJsZSBhbmQgbXVzdCBhbHNvIGJlIG1hcmtlZCBhcyBcJiMzNDtuby1tYXBcJiMzNDsgdG8gcHJldmVudCBhbnkgKGluY2x1ZGluZ1xuJiM0MzsgIHNwZWN1bGF0aXZlKSBhY2Nlc3NlcyB0byBpdC5cbiYjNDM7XG4mIzQzO2FsbE9mOlxuJiM0MzsgIC0gJHJlZjogcmVzZXJ2ZWQtbWVtb3J5LnlhbWxcbiYjNDM7XG4mIzQzO3Byb3BlcnRpZXM6XG4mIzQzOyAgY29tcGF0aWJsZTpcbiYjNDM7ICAgIGNvbnN0OiBudmlkaWEsdGVncmEtdmlkZW8tcHJvdGVjdGlvbi1yZWdpb25cbiYjNDM7XG4mIzQzO2RlcGVuZGVuY2llczpcbiYjNDM7ICBzaXplOiBbYWxpZ25tZW50LCByZXVzYWJsZV1cbiYjNDM7ICBhbGlnbm1lbnQ6IFtzaXplLCByZXVzYWJsZV1cbiYjNDM7ICByZXVzYWJsZTogW2FsaWdubWVudCwgc2l6ZV1cbiYjNDM7XG4mIzQzOyAgcmVnOiBbbm8tbWFwXVxuJiM0MzsgIG5vLW1hcDogW3JlZ11cbiYjNDM7XG4mIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO29uZU9mOlxuJiM0MzsgIC0gcmVxdWlyZWQ6XG4mIzQzOyAgICAgIC0gY29tcGF0aWJsZVxuJiM0MzsgICAgICAtIHJlZ1xuJiM0MztcbiYjNDM7ICAtIHJlcXVpcmVkOlxuJiM0MzsgICAgICAtIGNvbXBhdGlibGVcbiYjNDM7ICAgICAgLSBzaXplXG4mIzQzO1xuJiM0MztleGFtcGxlczpcbiYjNDM7ICAtIHxcbiYjNDM7ICAgIC8qIHJlc2l6YWJsZSBWUFIgKi9cbiYjNDM7ICAgIHByb3RlY3RlZCB7XG4mIzQzOyAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtudmlkaWEsdGVncmEtdmlkZW8tcHJvdGVjdGlvbi1yZWdpb25cJiMzNDs7XG4mIzQzO1xuJiM0MzsgICAgICBzaXplID0gXHUwMDNjMHgwIDB4NzAwMDAwMDBcdTAwM2U7XG4mIzQzOyAgICAgIGFsaWdubWVudCA9IFx1MDAzYzB4MCAweDEwMDAwMFx1MDAzZTtcbiYjNDM7ICAgICAgcmV1c2FibGU7XG4mIzQzOyAgICB9O1xuJiM0MztcbiYjNDM7ICAtIHxcbiYjNDM7ICAgIC8qIGZpeGVkIFZQUiAqL1xuJiM0MzsgICAgcHJvdGVjdGVkQDJhODAwMDAwMCB7XG4mIzQzOyAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtudmlkaWEsdGVncmEtdmlkZW8tcHJvdGVjdGlvbi1yZWdpb25cJiMzNDs7XG4mIzQzO1xuJiM0MzsgICAgICAvKiBmaXhlZCBWUFIgKi9cbiYjNDM7ICAgICAgcmVnID0gXHUwMDNjMHgyIDB4YTgwMDAwMDAgMHgwIDB4NzAwMDAwMDBcdTAwM2U7XG4mIzQzOyAgICAgIG5vLW1hcDtcbiYjNDM7ICAgIH07XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYyBiL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmNcbmluZGV4IGY5YmM1M2I2MGY5OTc0Li45MzQ5NTJhYjIxMDI3NSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmNcbkBAIC0yNTQsNyAmIzQzOzI1NCw3IEBAIHN0cnVjdCBkbWFfY29udGlnX2Vhcmx5X3Jlc2VydmUge1xuIFx0dW5zaWduZWQgbG9uZyBzaXplO1xuIH07XG4gXG4tc3RhdGljIHN0cnVjdCBkbWFfY29udGlnX2Vhcmx5X3Jlc2VydmUgZG1hX21tdV9yZW1hcFtNQVhfQ01BX0FSRUFTXSBfX2luaXRkYXRhO1xuJiM0MztzdGF0aWMgc3RydWN0IGRtYV9jb250aWdfZWFybHlfcmVzZXJ2ZSBkbWFfbW11X3JlbWFwW01BWF9FQVJMWV9DTUFfQVJFQVNdIF9faW5pdGRhdGE7XG4gXG4gc3RhdGljIGludCBkbWFfbW11X3JlbWFwX251bSBfX2luaXRkYXRhO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvbnZpZGlhL3RlZ3JhMjM0LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL252aWRpYS90ZWdyYTIzNC5kdHNpXG5pbmRleCA4ZTBjNTFlNDk2ZTIwZC4uMzg2MzdlOGU2ZmM5MmMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL252aWRpYS90ZWdyYTIzNC5kdHNpXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL252aWRpYS90ZWdyYTIzNC5kdHNpXG5AQCAtMjksNiAmIzQzOzI5LDQ1IEBAIGFsaWFzZXMge1xuIFx0XHRpMmM4ID0gXHUwMDI2ZHBfYXV4X2NoM19pMmM7XG4gXHR9O1xuIFxuJiM0MztcdHJlc2VydmVkLW1lbW9yeSB7XG4mIzQzO1x0XHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzJcdTAwM2U7XG4mIzQzO1x0XHQjc2l6ZS1jZWxscyA9IFx1MDAzYzJcdTAwM2U7XG4mIzQzO1x0XHRyYW5nZXM7XG4mIzQzO1xuJiM0MztcdFx0dnByOiBwcm90ZWN0ZWQge1xuJiM0MztcdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7bnZpZGlhLHRlZ3JhLXZpZGVvLXByb3RlY3Rpb24tcmVnaW9uXCYjMzQ7O1xuJiM0MztcdFx0XHRzdGF0dXMgPSBcJiMzNDtkaXNhYmxlZFwmIzM0OztcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFR3byB2YXJpYW50cyBleGlzdCBmb3IgdGhpcy4gRm9yIGZpeGVkIFZQUiwgdGhlXG4mIzQzO1x0XHRcdCAqIGZpcm13YXJlIGlzIHN1cHBvc2VkIHRvIHVwZGF0ZSB0aGUgXCYjMzQ7cmVnXCYjMzQ7IHByb3BlcnR5XG4mIzQzO1x0XHRcdCAqIHdpdGggdGhlIGZpeGVkIG1lbW9yeSByZWdpb24gY29uZmlndXJlZCBhcyBWUFIuXG4mIzQzO1x0XHRcdCAqXG4mIzQzO1x0XHRcdCAqIEZvciByZXNpemFibGUgVlBSIHdlIGRvbiYjMzk7dCBjYXJlIGFib3V0IHRoZSBleGFjdFxuJiM0MztcdFx0XHQgKiBhZGRyZXNzIGFuZCBpbnN0ZWFkIHdhbnQgYSByZXNlcnZlZCByZWdpb24gdG8gYmVcbiYjNDM7XHRcdFx0ICogYWxsb2NhdGVkIHdpdGggYSBjZXJ0YWluIHNpemUgYW5kIGFsaWdubWVudCBhdFxuJiM0MztcdFx0XHQgKiBib290IHRpbWUuXG4mIzQzO1x0XHRcdCAqXG4mIzQzO1x0XHRcdCAqIFRoZSBiZWxvdyBhc3N1bWVzIHJlc2l6YWJsZSBWUFIgYnkgZGVmYXVsdC4gSWYgdGhlXG4mIzQzO1x0XHRcdCAqIGZpcm13YXJlcyBzZXRzIHVwIGZpeGVkIFZQUiwgaXQgaXMgcmVzcG9uc2libGUgZm9yXG4mIzQzO1x0XHRcdCAqIGFkZGluZyB0aGUgbWlzc2luZyBcJiMzNDtyZWdcJiMzNDsgcHJvcGVydHksIHJlbW92aW5nIGFueSBvZlxuJiM0MztcdFx0XHQgKiB0aGUgdW51c2VkIHByb3BlcnRpZXMsIGFzIHdlbGwgYXMgYWRkaW5nIGEgdW5pdC1cbiYjNDM7XHRcdFx0ICogYWRkcmVzcyBtYXRjaGluZyB0aGUgXCYjMzQ7cmVnXCYjMzQ7IHByb3BlcnR5LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XG4mIzQzO1x0XHRcdC8qIGZpeGVkIFZQUiAqL1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHRyZWcgPSBcdTAwM2MweDAgMHgwIDB4MCAweDBcdTAwM2U7XG4mIzQzO1x0XHRcdG5vLW1hcDtcbiYjNDM7XHRcdFx0Ki9cbiYjNDM7XG4mIzQzO1x0XHRcdC8qIHJlc2l6YWJsZSBWUFIgKi9cbiYjNDM7XHRcdFx0c2l6ZSA9IFx1MDAzYzB4MCAweDcwMDAwMDAwXHUwMDNlO1xuJiM0MztcdFx0XHRhbGlnbm1lbnQgPSBcdTAwM2MweDAgMHgxMDAwMDBcdTAwM2U7XG4mIzQzO1x0XHRcdHJldXNhYmxlO1xuJiM0MztcdFx0fTtcbiYjNDM7XHR9O1xuJiM0MztcbiBcdGJ1c0AwIHtcbiBcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3NpbXBsZS1idXNcJiMzNDs7XG4gXG5AQCAtNDQ0MCw2ICYjNDM7NDQ3OSw5IEBAIHZpY0AxNTM0MDAwMCB7XG4gXHRcdFx0XHRpbnRlcmNvbm5lY3QtbmFtZXMgPSBcJiMzNDtkbWEtbWVtXCYjMzQ7LCBcJiMzNDt3cml0ZVwmIzM0OztcbiBcdFx0XHRcdGlvbW11cyA9IFx1MDAzY1x1MDAyNnNtbXVfbmlzbzEgVEVHUkEyMzRfU0lEX1ZJQ1x1MDAzZTtcbiBcdFx0XHRcdGRtYS1jb2hlcmVudDtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0bWVtb3J5LXJlZ2lvbiA9IFx1MDAzY1x1MDAyNnZwclx1MDAzZTtcbiYjNDM7XHRcdFx0XHRtZW1vcnktcmVnaW9uLW5hbWVzID0gXCYjMzQ7cHJvdGVjdGVkXCYjMzQ7O1xuIFx0XHRcdH07XG4gXG4gXHRcdFx0bnZkZWNAMTU0ODAwMDAge1xuQEAgLTQ0NTgsNiAmIzQzOzQ1MDAsOSBAQCBudmRlY0AxNTQ4MDAwMCB7XG4gXHRcdFx0XHRpb21tdXMgPSBcdTAwM2NcdTAwMjZzbW11X25pc28xIFRFR1JBMjM0X1NJRF9OVkRFQ1x1MDAzZTtcbiBcdFx0XHRcdGRtYS1jb2hlcmVudDtcbiBcbiYjNDM7XHRcdFx0XHRtZW1vcnktcmVnaW9uID0gXHUwMDNjXHUwMDI2dnByXHUwMDNlO1xuJiM0MztcdFx0XHRcdG1lbW9yeS1yZWdpb24tbmFtZXMgPSBcJiMzNDtwcm90ZWN0ZWRcJiMzNDs7XG4mIzQzO1xuIFx0XHRcdFx0bnZpZGlhLG1lbW9yeS1jb250cm9sbGVyID0gXHUwMDNjXHUwMDI2bWNcdTAwM2U7XG4gXG4gXHRcdFx0XHQvKlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvbnZpZGlhL3RlZ3JhMjY0LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL252aWRpYS90ZWdyYTI2NC5kdHNpXG5pbmRleCAyZDhlN2UzNzgzMGZmMi4uY2M5M2M2ODIyYTczOTcgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL252aWRpYS90ZWdyYTI2NC5kdHNpXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL252aWRpYS90ZWdyYTI2NC5kdHNpXG5AQCAtMjMsNiAmIzQzOzIzLDM5IEBAIHNobWVtX2JwbXA6IHNobWVtQDg2MDcwMDAwIHtcbiBcdFx0XHRyZWcgPSBcdTAwM2MweDAgMHg4NjA3MDAwMCAweDAgMHgyMDAwXHUwMDNlO1xuIFx0XHRcdG5vLW1hcDtcbiBcdFx0fTtcbiYjNDM7XG4mIzQzO1x0XHR2cHI6IHByb3RlY3RlZCB7XG4mIzQzO1x0XHRcdGNvbXBhdGlibGUgPSBcJiMzNDtudmlkaWEsdGVncmEtdmlkZW8tcHJvdGVjdGlvbi1yZWdpb25cJiMzNDs7XG4mIzQzO1x0XHRcdHN0YXR1cyA9IFwmIzM0O2Rpc2FibGVkXCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogVHdvIHZhcmlhbnRzIGV4aXN0IGZvciB0aGlzLiBGb3IgZml4ZWQgVlBSLCB0aGVcbiYjNDM7XHRcdFx0ICogZmlybXdhcmUgaXMgc3VwcG9zZWQgdG8gdXBkYXRlIHRoZSBcJiMzNDtyZWdcJiMzNDsgcHJvcGVydHlcbiYjNDM7XHRcdFx0ICogd2l0aCB0aGUgZml4ZWQgbWVtb3J5IHJlZ2lvbiBjb25maWd1cmVkIGFzIFZQUi5cbiYjNDM7XHRcdFx0ICpcbiYjNDM7XHRcdFx0ICogRm9yIHJlc2l6YWJsZSBWUFIgd2UgZG9uJiMzOTt0IGNhcmUgYWJvdXQgdGhlIGV4YWN0XG4mIzQzO1x0XHRcdCAqIGFkZHJlc3MgYW5kIGluc3RlYWQgd2FudCBhIHJlc2VydmVkIHJlZ2lvbiB0byBiZVxuJiM0MztcdFx0XHQgKiBhbGxvY2F0ZWQgd2l0aCBhIGNlcnRhaW4gc2l6ZSBhbmQgYWxpZ25tZW50IGF0XG4mIzQzO1x0XHRcdCAqIGJvb3QgdGltZS5cbiYjNDM7XHRcdFx0ICpcbiYjNDM7XHRcdFx0ICogVGhlIGJlbG93IGFzc3VtZXMgcmVzaXphYmxlIFZQUiBieSBkZWZhdWx0LiBJZiB0aGVcbiYjNDM7XHRcdFx0ICogZmlybXdhcmVzIHNldHMgdXAgZml4ZWQgVlBSLCBpdCBpcyByZXNwb25zaWJsZSBmb3JcbiYjNDM7XHRcdFx0ICogYWRkaW5nIHRoZSBtaXNzaW5nIFwmIzM0O3JlZ1wmIzM0OyBwcm9wZXJ0eSwgcmVtb3ZpbmcgYW55IG9mXG4mIzQzO1x0XHRcdCAqIHRoZSB1bnVzZWQgcHJvcGVydGllcywgYXMgd2VsbCBhcyBhZGRpbmcgYSB1bml0LVxuJiM0MztcdFx0XHQgKiBhZGRyZXNzIG1hdGNoaW5nIHRoZSBcJiMzNDtyZWdcJiMzNDsgcHJvcGVydHkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcbiYjNDM7XHRcdFx0LyogZml4ZWQgVlBSICovXG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdHJlZyA9IFx1MDAzYzB4MCAweDAgMHgwIDB4MFx1MDAzZTtcbiYjNDM7XHRcdFx0bm8tbWFwO1xuJiM0MztcdFx0XHQqL1xuJiM0MztcbiYjNDM7XHRcdFx0LyogcmVzaXphYmxlIFZQUiAqL1xuJiM0MztcdFx0XHRzaXplID0gXHUwMDNjMHgwIDB4NzAwMDAwMDBcdTAwM2U7XG4mIzQzO1x0XHRcdGFsaWdubWVudCA9IFx1MDAzYzB4MCAweDEwMDAwMFx1MDAzZTtcbiYjNDM7XHRcdFx0cmV1c2FibGU7XG4mIzQzO1x0XHR9O1xuIFx0fTtcbiBcbiBcdC8qIFNZU1RFTSBNTUlPICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxuaW5kZXggOTBmNjFiMTcyNzVlMWIuLjZhNzAzMDYwOTc4OWJiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXG5AQCAtMTAsNiAmIzQzOzEwLDggQEAgYm9vbCBjYW5fc2V0X2RpcmVjdF9tYXAodm9pZCk7XG4gI2RlZmluZSBjYW5fc2V0X2RpcmVjdF9tYXAgY2FuX3NldF9kaXJlY3RfbWFwXG4gXG4gaW50IHNldF9tZW1vcnlfdmFsaWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpO1xuJiM0MztpbnQgc2V0X21lbW9yeV9kZXZpY2UodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuJiM0MztpbnQgc2V0X21lbW9yeV9ub3JtYWwodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuIFxuIGludCBzZXRfZGlyZWN0X21hcF9pbnZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpO1xuIGludCBzZXRfZGlyZWN0X21hcF9kZWZhdWx0X25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuaW5kZXggYmJlOThhYzlhZDhjNjcuLjg3MWI1OWE2YzllYWYzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmNcbkBAIC0yNTEsNiAmIzQzOzI1MSwyMiBAQCBpbnQgc2V0X21lbW9yeV92YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSlcbiBcdFx0XHRcdFx0X19wZ3Byb3QoUFRFX1BSRVNFTlRfVkFMSURfS0VSTkVMKSk7XG4gfVxuIFxuJiM0MztpbnQgc2V0X21lbW9yeV9kZXZpY2UodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19jaGFuZ2VfbWVtb3J5X2NvbW1vbihhZGRyLCBQQUdFX1NJWkUgKiBudW1wYWdlcyxcbiYjNDM7XHRcdFx0XHRfX3BncHJvdChQUk9UX0RFVklDRV9uR25SbkUpLFxuJiM0MztcdFx0XHRcdF9fcGdwcm90KFBST1RfTk9STUFMKSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoc2V0X21lbW9yeV9kZXZpY2UpO1xuJiM0MztcbiYjNDM7aW50IHNldF9tZW1vcnlfbm9ybWFsKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fY2hhbmdlX21lbW9yeV9jb21tb24oYWRkciwgUEFHRV9TSVpFICogbnVtcGFnZXMsXG4mIzQzO1x0XHRcdFx0X19wZ3Byb3QoUFJPVF9OT1JNQUwpLFxuJiM0MztcdFx0XHRcdF9fcGdwcm90KFBST1RfREVWSUNFX25HblJuRSkpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHNldF9tZW1vcnlfbm9ybWFsKTtcbiYjNDM7XG4gaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4gXHRwZ3Byb3RfdCBjbGVhcl9tYXNrID0gX19wZ3Byb3QoUFRFX1BSRVNFTlRfVkFMSURfS0VSTkVMKTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vaW5pdC5jIGIvYXJjaC9zMzkwL21tL2luaXQuY1xuaW5kZXggZjA3MTY4YTBkM2RkMzQuLmY4Zjc4ZjE0MzRlYWZiIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL21tL2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL21tL2luaXQuY1xuQEAgLTI0MSw3ICYjNDM7MjQxLDcgQEAgc3RhdGljIGludCBzMzkwX2NtYV9tZW1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiBcdG1lbV9kYXRhLnN0YXJ0ID0gYXJnLVx1MDAzZXN0YXJ0X3BmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiBcdG1lbV9kYXRhLmVuZCA9IG1lbV9kYXRhLnN0YXJ0ICYjNDM7IChhcmctXHUwMDNlbnJfcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpO1xuIFx0aWYgKGFjdGlvbiA9PSBNRU1fR09JTkdfT0ZGTElORSlcbi1cdFx0cmMgPSBjbWFfZm9yX2VhY2hfYXJlYShzMzkwX2NtYV9jaGVja19yYW5nZSwgXHUwMDI2bWVtX2RhdGEpO1xuJiM0MztcdFx0cmMgPSBjbWFfZm9yX2VhY2hfZWFybHlfYXJlYShzMzkwX2NtYV9jaGVja19yYW5nZSwgXHUwMDI2bWVtX2RhdGEpO1xuIFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8ocmMpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvZG1hLWhlYXAuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtaGVhcC5jXG5pbmRleCBhNzZiZjNmOGIwNzFhMy4uMWNlYjZlZThjMDVhMjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RtYS1idWYvZG1hLWhlYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kbWEtYnVmL2RtYS1oZWFwLmNcbkBAIC03LDYgJiM0Mzs3LDcgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jZGV2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtYnVmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtaGVhcC5oXHUwMDNlXG5AQCAtMjI0LDYgJiM0MzsyMjUsNDYgQEAgY29uc3QgY2hhciAqZG1hX2hlYXBfZ2V0X25hbWUoc3RydWN0IGRtYV9oZWFwICpoZWFwKVxuIH1cbiBFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfaGVhcF9nZXRfbmFtZSwgXCYjMzQ7RE1BX0JVRl9IRUFQXCYjMzQ7KTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19ERUJVR19GU1xuJiM0MztzdGF0aWMgaW50IGRtYV9oZWFwX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZG1hX2hlYXAgKmhlYXAgPSBzLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChoZWFwLVx1MDAzZW9wcyBcdTAwMjZcdTAwMjYgaGVhcC1cdTAwM2VvcHMtXHUwMDNlc2hvdylcbiYjNDM7XHRcdGVyciA9IGhlYXAtXHUwMDNlb3BzLVx1MDAzZXNob3cocywgaGVhcCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7REVGSU5FX1NIT1dfQVRUUklCVVRFKGRtYV9oZWFwX2RlYnVnKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkbWFfaGVhcF9kZWJ1Z2ZzX2RpcjtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRtYV9oZWFwX2luaXRfZGVidWdmcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRlbnRyeSAqZGlyO1xuJiM0MztcbiYjNDM7XHRkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXCYjMzQ7ZG1hX2hlYXBcJiMzNDssIE5VTEwpO1xuJiM0MztcdGlmIChJU19FUlIoZGlyKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZG1hX2hlYXBfZGVidWdmc19kaXIgPSBkaXI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRtYV9oZWFwX2V4aXRfZGVidWdmcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRtYV9oZWFwX2RlYnVnZnNfZGlyKTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgdm9pZCBkbWFfaGVhcF9pbml0X2RlYnVnZnModm9pZClcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkbWFfaGVhcF9leGl0X2RlYnVnZnModm9pZClcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAvKipcbiAgKiBkbWFfaGVhcF9hZGQgLSBhZGRzIGEgaGVhcCB0byBkbWFidWYgaGVhcHNcbiAgKiBAZXhwX2luZm86IGluZm9ybWF0aW9uIG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGhlYXBcbkBAIC0yOTgsNiAmIzQzOzMzOSwxMyBAQCBzdHJ1Y3QgZG1hX2hlYXAgKmRtYV9oZWFwX2FkZChjb25zdCBzdHJ1Y3QgZG1hX2hlYXBfZXhwb3J0X2luZm8gKmV4cF9pbmZvKVxuIFxuIFx0LyogQWRkIGhlYXAgdG8gdGhlIGxpc3QgKi9cbiBcdGxpc3RfYWRkKFx1MDAyNmhlYXAtXHUwMDNlbGlzdCwgXHUwMDI2aGVhcF9saXN0KTtcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfREVCVUdfRlNcbiYjNDM7XHRpZiAoaGVhcC1cdTAwM2VvcHMgXHUwMDI2XHUwMDI2IGhlYXAtXHUwMDNlb3BzLVx1MDAzZXNob3cpXG4mIzQzO1x0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGhlYXAtXHUwMDNlbmFtZSwgMDQ0NCwgZG1hX2hlYXBfZGVidWdmc19kaXIsXG4mIzQzO1x0XHRcdFx0ICAgIGhlYXAsIFx1MDAyNmRtYV9oZWFwX2RlYnVnX2ZvcHMpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2aGVhcF9saXN0X2xvY2spO1xuIFxuIFx0cmV0dXJuIGhlYXA7XG5AQCAtMzM0LDYgJiM0MzszODIsMTQgQEAgc3RhdGljIGludCBkbWFfaGVhcF9pbml0KHZvaWQpXG4gXHR9XG4gXHRkbWFfaGVhcF9jbGFzcy1cdTAwM2VkZXZub2RlID0gZG1hX2hlYXBfZGV2bm9kZTtcbiBcbiYjNDM7XHRkbWFfaGVhcF9pbml0X2RlYnVnZnMoKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gc3Vic3lzX2luaXRjYWxsKGRtYV9oZWFwX2luaXQpO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19leGl0IGRtYV9oZWFwX2V4aXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGRtYV9oZWFwX2V4aXRfZGVidWdmcygpO1xuJiM0Mzt9XG4mIzQzO19fZXhpdGNhbGwoZG1hX2hlYXBfZXhpdCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWcgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZ1xuaW5kZXggYmI3MjllOTE1NDVjNDAuLmRkNjAzNTU5OGQwMjg4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnXG5AQCAtMjAsMyAmIzQzOzIwLDEwIEBAIGNvbmZpZyBETUFCVUZfSEVBUFNfQ01BXG4gXHQgIENob29zZSB0aGlzIG9wdGlvbiB0byBlbmFibGUgZG1hLWJ1ZiBDTUEgaGVhcC4gVGhpcyBoZWFwIGlzIGJhY2tlZFxuIFx0ICBieSB0aGUgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yIChDTUEpLiBJZiB5b3VyIHN5c3RlbSBoYXMgdGhlc2VcbiBcdCAgcmVnaW9ucywgeW91IHNob3VsZCBzYXkgWSBoZXJlLlxuJiM0MztcbiYjNDM7Y29uZmlnIERNQUJVRl9IRUFQU19URUdSQV9WUFJcbiYjNDM7XHRib29sIFwmIzM0O05WSURJQSBUZWdyYSBWaWRlby1Qcm90ZWN0ZWQtUmVnaW9uIERNQS1CVUYgSGVhcFwmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gRE1BQlVGX0hFQVBTIFx1MDAyNlx1MDAyNiBETUFfQ01BXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBWaWRlby1Qcm90ZWN0ZWQtUmVnaW9uIChWUFIpIHN1cHBvcnQgb25cbiYjNDM7XHQgIGEgcmFuZ2Ugb2YgTlZJRElBIFRlZ3JhIGRldmljZXMuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlIGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlXG5pbmRleCA5NzQ0Njc3OTEwMzJmZi4uMjY1Yjc3YTdiODg5OTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RtYS1idWYvaGVhcHMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9NYWtlZmlsZVxuQEAgLTEsMyAmIzQzOzEsNCBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiBvYmotJChDT05GSUdfRE1BQlVGX0hFQVBTX1NZU1RFTSlcdCYjNDM7PSBzeXN0ZW1faGVhcC5vXG4gb2JqLSQoQ09ORklHX0RNQUJVRl9IRUFQU19DTUEpXHRcdCYjNDM7PSBjbWFfaGVhcC5vXG4mIzQzO29iai0kKENPTkZJR19ETUFCVUZfSEVBUFNfVEVHUkFfVlBSKVx0JiM0Mzs9IHRlZ3JhLXZwci5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2hlYXBzL3RlZ3JhLXZwci5jIGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL3RlZ3JhLXZwci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkxOGNmNjZlYzIyMmM5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmNcbkBAIC0wLDAgJiM0MzsxLDEyNDIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogRE1BLUJVRiByZXN0cmljdGVkIGhlYXAgZXhwb3J0ZXIgZm9yIE5WSURJQSBWaWRlby1Qcm90ZWN0aW9uLVJlZ2lvbiAoVlBSKVxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNiBOVklESUEgQ29ycG9yYXRpb25cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O3RlZ3JhLXZwcjogXCYjMzQ7IGZtdFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYXJtLXNtY2NjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY21hLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtaGVhcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbmQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9yZXNlcnZlZF9tZW0uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmVzZXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZyZWV6ZXIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy90ZWdyYV92cHIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBURUdSQV9WUFJfTUFYX0NIVU5LUyA2NFxuJiM0MztcbiYjNDM7c3RydWN0IHRlZ3JhX3ZwcjtcbiYjNDM7XG4mIzQzO3N0cnVjdCB0ZWdyYV92cHJfZGV2aWNlIHtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHRlZ3JhX3Zwcl9jaHVuayB7XG4mIzQzO1x0cGh5c19hZGRyX3Qgc3RhcnQ7XG4mIzQzO1x0cGh5c19hZGRyX3QgbGltaXQ7XG4mIzQzO1x0c2l6ZV90IHNpemU7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCB0ZWdyYV92cHIgKnZwcjtcbiYjNDM7XHRzdHJ1Y3QgY21hICpjbWE7XG4mIzQzO1x0Ym9vbCBhY3RpdmU7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCBwYWdlICpzdGFydF9wYWdlO1xuJiM0MztcdHVuc2lnbmVkIGludCBvZmZzZXQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB2aXJ0O1xuJiM0MztcdHBnb2ZmX3QgbnVtX3BhZ2VzO1xuJiM0MztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnVtX2J1ZmZlcnM7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgdGVncmFfdnByIHtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldl9ub2RlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYWxpZ247XG4mIzQzO1x0cGh5c19hZGRyX3QgYmFzZTtcbiYjNDM7XHRwaHlzX2FkZHJfdCBzaXplO1xuJiM0MztcdGJvb2wgdXNlX2ZyZWV6ZXI7XG4mIzQzO1x0Ym9vbCByZXNpemFibGU7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgYnVmZmVycztcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqc3RhcnRfcGFnZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nICpiaXRtYXA7XG4mIzQzO1x0cGdvZmZfdCBudW1fcGFnZXM7XG4mIzQzO1xuJiM0MztcdC8qIHJlc2l6YWJsZSBWUFIgKi9cbiYjNDM7XHRERUNMQVJFX0JJVE1BUChhY3RpdmUsIFRFR1JBX1ZQUl9NQVhfQ0hVTktTKTtcbiYjNDM7XHRzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVua3M7XG4mIzQzO1x0dW5zaWduZWQgaW50IG51bV9jaHVua3M7XG4mIzQzO1xuJiM0MztcdHVuc2lnbmVkIGludCBmaXJzdDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbGFzdDtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBkZXZpY2VzO1xuJiM0MztcdHN0cnVjdCBtdXRleCBsb2NrO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIge1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgYXR0YWNobWVudHM7XG4mIzQzO1x0c3RydWN0IHRlZ3JhX3ZwciAqdnByO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggbG9jaztcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnN0YXJ0X3BhZ2U7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKipwYWdlcztcbiYjNDM7XHRwZ29mZl90IG51bV9wYWdlcztcbiYjNDM7XHRwaHlzX2FkZHJfdCBzdGFydDtcbiYjNDM7XHRwaHlzX2FkZHJfdCBsaW1pdDtcbiYjNDM7XHRzaXplX3Qgc2l6ZTtcbiYjNDM7XHRpbnQgcGFnZW5vO1xuJiM0MztcdGludCBvcmRlcjtcbiYjNDM7XG4mIzQzO1x0REVDTEFSRV9CSVRNQVAoY2h1bmtzLCBURUdSQV9WUFJfTUFYX0NIVU5LUyk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgdGVncmFfdnByX2F0dGFjaG1lbnQge1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiYjNDM7XHRzdHJ1Y3Qgc2dfdGFibGUgc2d0O1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQVJNX1NNQ0NDX1RFX0ZVTkNfUFJPR1JBTV9WUFIgMHgzXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFSTV9TTUNDQ19WRU5ET1JfU0lQX1RFX1BST0dSQU1fVlBSX0ZVTkNfSURcdFx0XFxcbiYjNDM7XHRBUk1fU01DQ0NfQ0FMTF9WQUwoQVJNX1NNQ0NDX0ZBU1RfQ0FMTCxcdFx0XHRcXFxuJiM0MztcdFx0XHQgICBBUk1fU01DQ0NfU01DXzMyLFx0XHRcdFxcXG4mIzQzO1x0XHRcdCAgIEFSTV9TTUNDQ19PV05FUl9TSVAsXHRcdFx0XFxcbiYjNDM7XHRcdFx0ICAgQVJNX1NNQ0NDX1RFX0ZVTkNfUFJPR1JBTV9WUFIpXG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRlZ3JhX3Zwcl9zZXQocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhcm1fc21jY2NfcmVzIHJlcztcbiYjNDM7XG4mIzQzO1x0YXJtX3NtY2NjX3NtYyhBUk1fU01DQ0NfVkVORE9SX1NJUF9URV9QUk9HUkFNX1ZQUl9GVU5DX0lELCBiYXNlLCBzaXplLFxuJiM0MztcdFx0ICAgICAgMCwgMCwgMCwgMCwgMCwgXHUwMDI2cmVzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcy5hMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0ZWdyYV92cHJfZ2V0X2V4dGVudHMoc3RydWN0IHRlZ3JhX3ZwciAqdnByLCBwaHlzX2FkZHJfdCAqYmFzZSxcbiYjNDM7XHRcdFx0XHQgcGh5c19hZGRyX3QgKnNpemUpXG4mIzQzO3tcbiYjNDM7XHRwaHlzX2FkZHJfdCBzdGFydCA9IH4wLCBsaW1pdCA9IDA7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHZwci1cdTAwM2VudW1fY2h1bmtzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHRlZ3JhX3Zwcl9jaHVuayAqY2h1bmsgPSBcdTAwMjZ2cHItXHUwMDNlY2h1bmtzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjaHVuay1cdTAwM2VhY3RpdmUpIHtcbiYjNDM7XHRcdFx0aWYgKGNodW5rLVx1MDAzZXN0YXJ0IFx1MDAzYyBzdGFydClcbiYjNDM7XHRcdFx0XHRzdGFydCA9IGNodW5rLVx1MDAzZXN0YXJ0O1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGNodW5rLVx1MDAzZWxpbWl0IFx1MDAzZSBsaW1pdClcbiYjNDM7XHRcdFx0XHRsaW1pdCA9IGNodW5rLVx1MDAzZWxpbWl0O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGxpbWl0IFx1MDAzZSBzdGFydCkge1xuJiM0MztcdFx0KnNpemUgPSBsaW1pdCAtIHN0YXJ0O1xuJiM0MztcdFx0KmJhc2UgPSBzdGFydDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0KmJhc2UgPSAqc2l6ZSA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0ZWdyYV92cHJfcmVzaXplKHN0cnVjdCB0ZWdyYV92cHIgKnZwcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZWdyYV92cHJfZGV2aWNlICpub2RlO1xuJiM0MztcdHBoeXNfYWRkcl90IGJhc2UsIHNpemU7XG4mIzQzO1x0aW50IGVyciwgc3RhdHVzID0gMDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gdGVncmFfdnByX2dldF9leHRlbnRzKHZwciwgXHUwMDI2YmFzZSwgXHUwMDI2c2l6ZSk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMCkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0OyVzKCk6IGZhaWxlZCB0byBnZXQgVlBSIGV4dGVudHM6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgZXJyKTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodnByLVx1MDAzZXVzZV9mcmVlemVyKSB7XG4mIzQzO1x0XHRlcnIgPSBmcmVlemVfcHJvY2Vzc2VzKCk7XG4mIzQzO1x0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDslcygpOiBmYWlsZWQgdG8gZnJlZXplIHByb2Nlc3NlczogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBfX2Z1bmNfXywgZXJyKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXHUwMDI2dnByLVx1MDAzZWRldmljZXMsIG5vZGUpIHtcbiYjNDM7XHRcdGVyciA9IHBtX2dlbmVyaWNfZnJlZXplKG5vZGUtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBydW50aW1lIHN1c3BlbmQgJXM6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgZGV2X25hbWUobm9kZS1cdTAwM2VkZXYpLCBlcnIpO1xuJiM0MztcdFx0XHRnb3RvIHRoYXc7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0cmFjZV90ZWdyYV92cHJfc2V0KGJhc2UsIHNpemUpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSB0ZWdyYV92cHJfc2V0KGJhc2UsIHNpemUpO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gc2VjdXJlIFZQUjogJWRcXG5cJiMzNDssIGVycik7XG4mIzQzO1x0XHRzdGF0dXMgPSBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7dGhhdzpcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JldmVyc2Uobm9kZSwgXHUwMDI2dnByLVx1MDAzZWRldmljZXMsIG5vZGUpIHtcbiYjNDM7XHRcdGVyciA9IHBtX2dlbmVyaWNfdGhhdyhub2RlLVx1MDAzZWRldik7XG4mIzQzO1x0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gcnVudGltZSByZXN1bWUgJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBkZXZfbmFtZShub2RlLVx1MDAzZWRldikpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh2cHItXHUwMDNldXNlX2ZyZWV6ZXIpXG4mIzQzO1x0XHR0aGF3X3Byb2Nlc3NlcygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3RhdHVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCB0ZWdyYV92cHJfY2h1bmtfaW5pdChzdHJ1Y3QgdGVncmFfdnByICp2cHIsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rLFxuJiM0MztcdFx0XHRcdCAgICAgICBwaHlzX2FkZHJfdCBzdGFydCwgc2l6ZV90IHNpemUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBvcmRlciwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdGNodW5rLVx1MDAzZXN0YXJ0ID0gc3RhcnQ7XG4mIzQzO1x0Y2h1bmstXHUwMDNlbGltaXQgPSBzdGFydCAmIzQzOyBzaXplO1xuJiM0MztcdGNodW5rLVx1MDAzZXNpemUgPSBzaXplO1xuJiM0MztcdGNodW5rLVx1MDAzZXZwciA9IHZwcjtcbiYjNDM7XG4mIzQzO1x0Y2h1bmstXHUwMDNlY21hID0gY21hX2NyZWF0ZShzdGFydCwgc2l6ZSwgb3JkZXIsIG5hbWUpO1xuJiM0MztcdGlmIChJU19FUlIoY2h1bmstXHUwMDNlY21hKSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O2NtYV9jcmVhdGUoKSBmYWlsZWQ6ICVsZFxcblwmIzM0OywgUFRSX0VSUihjaHVuay1cdTAwM2VjbWEpKTtcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGNodW5rLVx1MDAzZWNtYSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjaHVuay1cdTAwM2VvZmZzZXQgPSAoc3RhcnQgLSB2cHItXHUwMDNlYmFzZSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0Y2h1bmstXHUwMDNlbnVtX3BhZ2VzID0gc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XHRjaHVuay1cdTAwM2VudW1fYnVmZmVycyA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIENNQSBhcmVhIGlzIG5vdCByZXNlcnZlZCB5ZXQgKi9cbiYjNDM7XHRjaHVuay1cdTAwM2VzdGFydF9wYWdlID0gTlVMTDtcbiYjNDM7XHRjaHVuay1cdTAwM2V2aXJ0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlZ3JhX3Zwcl9jaHVua19mcmVlKHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rKVxuJiM0Mzt7XG4mIzQzO1x0Y21hX2ZyZWUoY2h1bmstXHUwMDNlY21hKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHRlZ3JhX3Zwcl9jaHVua19pc19sYXN0KGNvbnN0IHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rKVxuJiM0Mzt7XG4mIzQzO1x0cGh5c19hZGRyX3QgbGltaXQgPSBjaHVuay1cdTAwM2V2cHItXHUwMDNlYmFzZSAmIzQzOyBjaHVuay1cdTAwM2V2cHItXHUwMDNlc2l6ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNodW5rLVx1MDAzZWxpbWl0ID09IGxpbWl0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdGVncmFfdnByX2NodW5rX2lzX2xlYWYoY29uc3Qgc3RydWN0IHRlZ3JhX3Zwcl9jaHVuayAqY2h1bmspXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpuZXh0ID0gY2h1bmsgJiM0MzsgMTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlZ3JhX3Zwcl9jaHVua19pc19sYXN0KGNodW5rKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gIW5leHQtXHUwMDNlYWN0aXZlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRlZ3JhX3Zwcl9jaHVua19hY3RpdmF0ZShzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuaylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYWxpZ24gPSBnZXRfb3JkZXIoY2h1bmstXHUwMDNldnByLVx1MDAzZWFsaWduKTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHR0cmFjZV90ZWdyYV92cHJfY2h1bmtfYWN0aXZhdGUoY2h1bmstXHUwMDNlc3RhcnQsIGNodW5rLVx1MDAzZWxpbWl0KTtcbiYjNDM7XG4mIzQzO1x0Y2h1bmstXHUwMDNlc3RhcnRfcGFnZSA9IGNtYV9hbGxvYyhjaHVuay1cdTAwM2VjbWEsIGNodW5rLVx1MDAzZW51bV9wYWdlcywgYWxpZ24sXG4mIzQzO1x0XHRcdFx0ICAgICAgZmFsc2UpO1xuJiM0MztcdGlmICghY2h1bmstXHUwMDNlc3RhcnRfcGFnZSkge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNodW5rLVx1MDAzZXZpcnQgPSAodW5zaWduZWQgbG9uZylwYWdlX3RvX3ZpcnQoY2h1bmstXHUwMDNlc3RhcnRfcGFnZSk7XG4mIzQzO1xuJiM0MztcdGVyciA9IHNldF9tZW1vcnlfZGV2aWNlKGNodW5rLVx1MDAzZXZpcnQsIGNodW5rLVx1MDAzZW51bV9wYWdlcyk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZnJlZTtcbiYjNDM7XG4mIzQzO1x0Y2h1bmstXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztmcmVlOlxuJiM0MztcdGNtYV9yZWxlYXNlKGNodW5rLVx1MDAzZWNtYSwgY2h1bmstXHUwMDNlc3RhcnRfcGFnZSwgY2h1bmstXHUwMDNlbnVtX3BhZ2VzKTtcbiYjNDM7ZmFpbDpcbiYjNDM7XHRjaHVuay1cdTAwM2VzdGFydF9wYWdlID0gTlVMTDtcbiYjNDM7XHRjaHVuay1cdTAwM2V2aXJ0ID0gMDtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRlZ3JhX3Zwcl9jaHVua19kZWFjdGl2YXRlKHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjaHVuay1cdTAwM2VhY3RpdmUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogZG8gbm90IGRlYWN0aXZhdGUgaWYgdGhlcmUgYXJlIGJ1ZmZlcnMgbGVmdCBpbiB0aGlzIGNodW5rICovXG4mIzQzO1x0aWYgKFdBUk5fT04oY2h1bmstXHUwMDNlbnVtX2J1ZmZlcnMgXHUwMDNlIDApKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0dHJhY2VfdGVncmFfdnByX2NodW5rX2RlYWN0aXZhdGUoY2h1bmstXHUwMDNlc3RhcnQsIGNodW5rLVx1MDAzZWxpbWl0KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gc2V0X21lbW9yeV9ub3JtYWwoY2h1bmstXHUwMDNldmlydCwgY2h1bmstXHUwMDNlbnVtX3BhZ2VzKTtcbiYjNDM7XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0Y2h1bmstXHUwMDNlYWN0aXZlID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGNtYV9yZWxlYXNlKGNodW5rLVx1MDAzZWNtYSwgY2h1bmstXHUwMDNlc3RhcnRfcGFnZSwgY2h1bmstXHUwMDNlbnVtX3BhZ2VzKTtcbiYjNDM7XHRjaHVuay1cdTAwM2VzdGFydF9wYWdlID0gTlVMTDtcbiYjNDM7XHRjaHVuay1cdTAwM2V2aXJ0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHRlZ3JhX3Zwcl9jaHVua19vdmVybGFwcyhzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuayxcbiYjNDM7XHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGxpbWl0KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGZpcnN0ID0gY2h1bmstXHUwMDNlb2Zmc2V0O1xuJiM0MztcdHVuc2lnbmVkIGludCBsYXN0ID0gY2h1bmstXHUwMDNlb2Zmc2V0ICYjNDM7IGNodW5rLVx1MDAzZW51bV9wYWdlcyAtIDE7XG4mIzQzO1xuJiM0MztcdGlmIChsYXN0IFx1MDAzYyBzdGFydCB8fCBmaXJzdCBcdTAwM2U9IGxpbWl0KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0ZWdyYV92cHJfYWN0aXZhdGVfY2h1bmtzKHN0cnVjdCB0ZWdyYV92cHIgKnZwcixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCB0ZWdyYV92cHJfYnVmZmVyICpidWZmZXIpXG4mIzQzO3tcbiYjNDM7XHRERUNMQVJFX0JJVE1BUChkaXJ0eSwgdnByLVx1MDAzZW51bV9jaHVua3MpO1xuJiM0MztcdHVuc2lnbmVkIGludCBpLCBib3R0b20sIHRvcDtcbiYjNDM7XHRpbnQgZXJyID0gMCwgcmV0O1xuJiM0MztcbiYjNDM7XHRiaXRtYXBfemVybyhkaXJ0eSwgdnByLVx1MDAzZW51bV9jaHVua3MpO1xuJiM0MztcbiYjNDM7XHQvKiBhY3RpdmF0ZSBhbnkgaW5hY3RpdmUgY2h1bmtzIHRoYXQgb3ZlcmxhcCB0aGlzIGJ1ZmZlciAqL1xuJiM0MztcdGZvcl9lYWNoX3NldF9iaXQoaSwgYnVmZmVyLVx1MDAzZWNodW5rcywgdnByLVx1MDAzZW51bV9jaHVua3MpIHtcbiYjNDM7XHRcdHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rID0gXHUwMDI2dnByLVx1MDAzZWNodW5rc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY2h1bmstXHUwMDNlYWN0aXZlKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSB0ZWdyYV92cHJfY2h1bmtfYWN0aXZhdGUoY2h1bmspO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBkZWFjdGl2YXRlO1xuJiM0MztcbiYjNDM7XHRcdHNldF9iaXQoaSwgdnByLVx1MDAzZWFjdGl2ZSk7XG4mIzQzO1x0XHRzZXRfYml0KGksIGRpcnR5KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQWN0aXZhdGluZyBjaHVua3MgYWJvdmUgbWF5IGhhdmUgY3JlYXRlZCBob2xlcywgYnV0IHNpbmNlIHRoZSBWUFJcbiYjNDM7XHQgKiBjYW4gb25seSBldmVyIGJlIGEgc2luZ2xlIGNvbnRpZ3VvdXMgcmVnaW9uLCBtYWtlIHN1cmUgdG8gYWN0aXZhdGVcbiYjNDM7XHQgKiBhbnkgbWlzc2luZyBjaHVua3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yX2VhY2hfY2xlYXJfYml0cmFuZ2UoYm90dG9tLCB0b3AsIHZwci1cdTAwM2VhY3RpdmUsIHZwci1cdTAwM2VudW1fY2h1bmtzKSB7XG4mIzQzO1x0XHQvKiBpbmFjdGl2ZSBjaHVua3MgYXQgdGhlIGJvdHRvbSBvciB0aGUgdG9wIGFyZSBoYXJtbGVzcyAqL1xuJiM0MztcdFx0aWYgKGJvdHRvbSA9PSAwIHx8IHRvcCA9PSB2cHItXHUwMDNlbnVtX2NodW5rcylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChpID0gYm90dG9tOyBpIFx1MDAzYyB0b3A7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rID0gXHUwMDI2dnByLVx1MDAzZWNodW5rc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRcdGVyciA9IHRlZ3JhX3Zwcl9jaHVua19hY3RpdmF0ZShjaHVuayk7XG4mIzQzO1x0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBkZWFjdGl2YXRlO1xuJiM0MztcbiYjNDM7XHRcdFx0c2V0X2JpdChpLCB2cHItXHUwMDNlYWN0aXZlKTtcbiYjNDM7XHRcdFx0c2V0X2JpdChpLCBkaXJ0eSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBpZiBhbnkgY2h1bmtzIGhhdmUgYmVlbiBhY3RpdmF0ZWQsIFZQUiBuZWVkcyB0byBiZSByZXNpemVkICovXG4mIzQzO1x0aWYgKCFiaXRtYXBfZW1wdHkoZGlydHksIHZwci1cdTAwM2VudW1fY2h1bmtzKSkge1xuJiM0MztcdFx0ZXJyID0gdGVncmFfdnByX3Jlc2l6ZSh2cHIpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7ZmFpbGVkIHRvIGdyb3cgVlBSOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdFx0Z290byBkZWFjdGl2YXRlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogaW5jcmVtZW50IGJ1ZmZlciBjb3VudCBmb3IgZWFjaCBjaHVuayAqL1xuJiM0MztcdGZvcl9lYWNoX3NldF9iaXQoaSwgYnVmZmVyLVx1MDAzZWNodW5rcywgdnByLVx1MDAzZW51bV9jaHVua3MpXG4mIzQzO1x0XHR2cHItXHUwMDNlY2h1bmtzW2ldLm51bV9idWZmZXJzJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztkZWFjdGl2YXRlOlxuJiM0MztcdC8qIGRlYWN0aXZhdGUgYW55IG9mIHRoZSBwcmV2aW91c2x5IGluYWN0aXZlIGNodW5rcyBvbiBmYWlsdXJlICovXG4mIzQzO1x0Zm9yX2VhY2hfc2V0X2JpdChpLCBkaXJ0eSwgdnByLVx1MDAzZW51bV9jaHVua3MpIHtcbiYjNDM7XHRcdHJldCA9IHRlZ3JhX3Zwcl9jaHVua19kZWFjdGl2YXRlKFx1MDAyNnZwci1cdTAwM2VjaHVua3NbaV0pO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0V0FSTigxLCBcJiMzNDtmYWlsZWQgdG8gZGVhY3RpdmF0ZSBjaHVuayAjJXU6ICVkXFxuXCYjMzQ7LCBpLCByZXQpO1xuJiM0MztcbiYjNDM7XHRcdGNsZWFyX2JpdChpLCB2cHItXHUwMDNlYWN0aXZlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJldHJpZXZlIHRoZSByYW5nZSBvZiBwYWdlcyB3aXRoaW4gdGhlIGFjdGl2YXRlIHJlZ2lvbiBvZiB0aGUgVlBSLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgdGVncmFfdnByX2dldF9hY3RpdmVfcmFuZ2Uoc3RydWN0IHRlZ3JhX3ZwciAqdnByLFxuJiM0MztcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgKmZpcnN0LFxuJiM0MztcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgKmxhc3QpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGksIGo7XG4mIzQzO1xuJiM0MztcdGkgPSBmaW5kX2ZpcnN0X2JpdCh2cHItXHUwMDNlYWN0aXZlLCB2cHItXHUwMDNlbnVtX2NodW5rcyk7XG4mIzQzO1x0aWYgKGkgXHUwMDNlPSB2cHItXHUwMDNlbnVtX2NodW5rcylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aiA9IGZpbmRfbGFzdF9iaXQodnByLVx1MDAzZWFjdGl2ZSwgdnByLVx1MDAzZW51bV9jaHVua3MpO1xuJiM0MztcdGlmIChqIFx1MDAzZT0gdnByLVx1MDAzZW51bV9jaHVua3MpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdCpmaXJzdCA9IHZwci1cdTAwM2VjaHVua3NbaV0ub2Zmc2V0O1xuJiM0MztcdCpsYXN0ID0gdnByLVx1MDAzZWNodW5rc1tqXS5vZmZzZXQgJiM0MzsgdnByLVx1MDAzZWNodW5rc1tqXS5udW1fcGFnZXM7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUcnkgdG8gZmluZCBhbmQgYWxsb2NhdGUgYSBmcmVlIHJlZ2lvbiB3aXRoaW4gYSBzcGVjaWZpYyBwYWdlIHJhbmdlLlxuJiM0MzsgKiBSZXR1cm5zIHRoZSBwYWdlIG51bWJlciBpZiBzdWNjZXNzZnVsLCAtRU5PU1BDIG90aGVyd2lzZS5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBtaW1pY3MgYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24oKSBidXQgcmVzdHJpY3RzIHRoZSBzZWFyY2hcbiYjNDM7ICogdG8gYSBzcGVjaWZpYyByYW5nZSB0byBlbmFibGUgYWxsb2NhdGlvbiB3aXRoaW4gaW5kaXZpZHVhbCBjaHVua3MuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHRlZ3JhX3Zwcl9maW5kX2ZyZWVfcmVnaW9uX2luX3JhbmdlKHN0cnVjdCB0ZWdyYV92cHIgKnZwcixcbiYjNDM7XHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgc3RhcnRfcGFnZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZW5kX3BhZ2UsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9wYWdlcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgYWxpZ24pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcG9zLCBuZXh0ID0gQUxJR04oc3RhcnRfcGFnZSwgYWxpZ24pO1xuJiM0MztcbiYjNDM7XHQvKiBTY2FuIHRocm91Z2ggYWxpZ25lZCBwb3NpdGlvbnMsIHRyeWluZyB0byBhbGxvY2F0ZSBhdCBlYWNoIG9uZSAqL1xuJiM0MztcdGZvciAocG9zID0gbmV4dDsgcG9zICYjNDM7IG51bV9wYWdlcyBcdTAwM2M9IGVuZF9wYWdlOyBwb3MgPSBuZXh0KSB7XG4mIzQzO1x0XHRuZXh0ID0gZmluZF9uZXh0X2JpdCh2cHItXHUwMDNlYml0bWFwLCBwb3MgJiM0MzsgbnVtX3BhZ2VzLCBwb3MpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChuZXh0IFx1MDAzZT0gcG9zICYjNDM7IG51bV9wYWdlcykge1xuJiM0MztcdFx0XHRiaXRtYXBfc2V0KHZwci1cdTAwM2ViaXRtYXAsIHBvcywgbnVtX3BhZ2VzKTtcbiYjNDM7XHRcdFx0cmV0dXJuIHBvcztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRuZXh0ID0gZmluZF9uZXh0X3plcm9fYml0KHZwci1cdTAwM2ViaXRtYXAsIHZwci1cdTAwM2VudW1fcGFnZXMsIG5leHQpO1xuJiM0MztcdFx0bmV4dCA9IEFMSUdOKG5leHQsIGFsaWduKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU5PU1BDO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRlZ3JhX3Zwcl9maW5kX2ZyZWVfcmVnaW9uKHN0cnVjdCB0ZWdyYV92cHIgKnZwcixcbiYjNDM7XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgbnVtX3BhZ2VzLFxuJiM0MztcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdGVncmFfdnByX2ZpbmRfZnJlZV9yZWdpb25faW5fcmFuZ2UodnByLCAwLCB2cHItXHUwMDNlbnVtX3BhZ2VzIC0gMSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgbnVtX3BhZ2VzLCBhbGlnbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdGVncmFfdnByX2ZpbmRfZnJlZV9yZWdpb25fY2x1c3RlcmVkKHN0cnVjdCB0ZWdyYV92cHIgKnZwcixcbiYjNDM7XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IG51bV9wYWdlcyxcbiYjNDM7XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IGFsaWduKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IHRhcmdldCwgZmlyc3QsIGxhc3Q7XG4mIzQzO1x0aW50IHBhZ2VubztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiB0aGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMsIGFib3J0IHRoZSBjbHVzdGVyZWQgYWxsb2NhdGlvbiBzY2hlbWVcbiYjNDM7XHQgKiBhbmQgdXNlIHRoZSBnZW5lcmljIGFsbG9jYXRpb24gc2NoZW1lIGluc3RlYWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHZwci1cdTAwM2VmaXJzdCBcdTAwM2UgdnByLVx1MDAzZWxhc3QpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT1NQQztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGaXJzdCwgdHJ5IHRvIGFsbG9jYXRlIHdpdGhpbiB0aGUgY3VycmVudGx5IGFsbG9jYXRlZCByZWdpb24uIFRoaXNcbiYjNDM7XHQgKiBrZWVwcyBhbGxvY2F0aW9ucyB0aWdodGx5IHBhY2tlZCBhbmQgbWluaW1pemVzIHRoZSBWUFIgc2l6ZSBuZWVkZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cGFnZW5vID0gdGVncmFfdnByX2ZpbmRfZnJlZV9yZWdpb25faW5fcmFuZ2UodnByLCB2cHItXHUwMDNlZmlyc3QsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgdnByLVx1MDAzZWxhc3QgJiM0MzsgMSwgbnVtX3BhZ2VzLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGFsaWduKTtcbiYjNDM7XHRpZiAocGFnZW5vIFx1MDAzZT0gMClcbiYjNDM7XHRcdHJldHVybiBwYWdlbm87XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgbm90IGVub3VnaCBmcmVlIHNwYWNlIGV4aXN0cyB3aXRoaW4gdGhlIGN1cnJlbnRseSBhbGxvY2F0ZWRcbiYjNDM7XHQgKiByZWdpb24sIGNoZWNrIHRvIHNlZSBpZiB0aGUgYWxsb2NhdGlvbiBmaXRzIGFueXdoZXJlIHdpdGhpbiB0aGVcbiYjNDM7XHQgKiBhY3RpdmUgcmVnaW9uLCBhdm9pZGluZyB0aGUgbmVlZCB0byByZXNpemUgdGhlIFZQUi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodGVncmFfdnByX2dldF9hY3RpdmVfcmFuZ2UodnByLCBcdTAwMjZmaXJzdCwgXHUwMDI2bGFzdCkpIHtcbiYjNDM7XHRcdHBhZ2VubyA9IHRlZ3JhX3Zwcl9maW5kX2ZyZWVfcmVnaW9uX2luX3JhbmdlKHZwciwgZmlyc3QsIGxhc3QsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBudW1fcGFnZXMsIGFsaWduKTtcbiYjNDM7XHRcdGlmIChwYWdlbm8gXHUwMDNlPSAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcGFnZW5vO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiBub3QgZW5vdWdoIGZyZWUgc3BhY2UgZXhpc3RzIHdpdGhpbiB0aGUgY3VycmVudGx5IGFjdGl2ZSByZWdpb24sXG4mIzQzO1x0ICogdHJ5IHRvIGFsbG9jYXRlIGFkamFjZW50IHRvIGl0IHRvIGdyb3cgaXQgY29udGlndW91c2x5IGFuZCBlbnN1cmVcbiYjNDM7XHQgKiBvcHRpbWFsIHBhY2tpbmcuXG4mIzQzO1x0ICovXG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2FsY3VsYXRlIHdoZXJlIHRoZSBhbGxvY2F0aW9uIHNob3VsZCBzdGFydCB0byBlbmQgcmlnaHQgYXQgdGhlXG4mIzQzO1x0ICogZmlyc3QgYWxsb2NhdGVkIHBhZ2UsIHdpdGggcHJvcGVyIGFsaWdubWVudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodnByLVx1MDAzZWZpcnN0IFx1MDAzZT0gbnVtX3BhZ2VzKSB7XG4mIzQzO1x0XHR0YXJnZXQgPSBBTElHTl9ET1dOKHZwci1cdTAwM2VmaXJzdCAtIG51bV9wYWdlcywgYWxpZ24pO1xuJiM0MztcbiYjNDM7XHRcdGlmICghYml0bWFwX2FsbG9jYXRlKHZwci1cdTAwM2ViaXRtYXAsIHRhcmdldCwgbnVtX3BhZ2VzKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRhcmdldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRyeSBhZnRlciB0aGUgbGFzdCBhbGxvY2F0aW9uICovXG4mIzQzO1x0dGFyZ2V0ID0gQUxJR04odnByLVx1MDAzZWxhc3QgJiM0MzsgMSwgYWxpZ24pO1xuJiM0MztcbiYjNDM7XHRpZiAodGFyZ2V0ICYjNDM7IG51bV9wYWdlcyBcdTAwM2M9IHZwci1cdTAwM2VudW1fcGFnZXMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFiaXRtYXBfYWxsb2NhdGUodnByLVx1MDAzZWJpdG1hcCwgdGFyZ2V0LCBudW1fcGFnZXMpKVxuJiM0MztcdFx0cmV0dXJuIHRhcmdldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDb3VsZG4mIzM5O3QgYWxsb2NhdGUgYXQgdGhlIGlkZWFsIGFkamFjZW50IHBvc2l0aW9uLCBzZWFyY2ggZm9yIGFueVxuJiM0MztcdCAqIGF2YWlsYWJsZSBzcGFjZSBiZWZvcmUgdGhlIGZpcnN0IGFsbG9jYXRlZCBwYWdlLlxuJiM0MztcdCAqL1xuJiM0MztcdHBhZ2VubyA9IHRlZ3JhX3Zwcl9maW5kX2ZyZWVfcmVnaW9uX2luX3JhbmdlKHZwciwgMCwgdnByLVx1MDAzZWZpcnN0LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIG51bV9wYWdlcywgYWxpZ24pO1xuJiM0MztcdGlmIChwYWdlbm8gXHUwMDNlPSAwKVxuJiM0MztcdFx0cmV0dXJuIHBhZ2VubztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDb3VsZG4mIzM5O3QgYWxsb2NhdGUgYXQgdGhlIGlkZWFsIGFkamFjZW50IHBvc2l0aW9uLCBzZWFyY2hcbiYjNDM7XHQgKiBmb3IgYW55IGF2YWlsYWJsZSBzcGFjZSBhZnRlciB0aGUgbGFzdCBhbGxvY2F0ZWQgcGFnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwYWdlbm8gPSB0ZWdyYV92cHJfZmluZF9mcmVlX3JlZ2lvbl9pbl9yYW5nZSh2cHIsIHZwci1cdTAwM2VsYXN0ICYjNDM7IDEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgdnByLVx1MDAzZW51bV9wYWdlcywgbnVtX3BhZ2VzLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGFsaWduKTtcbiYjNDM7XHRpZiAocGFnZW5vIFx1MDAzZT0gMClcbiYjNDM7XHRcdHJldHVybiBwYWdlbm87XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU5PU1BDO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBGaW5kIGEgZnJlZSByZWdpb24sIHByZWZlcnJpbmcgbG9jYXRpb25zIG5lYXIgZXhpc3RpbmcgYWxsb2NhdGlvbnMgdG9cbiYjNDM7ICogbWluaW1pemUgVlBSIGZyYWdtZW50YXRpb24uIFRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIHRvIGZpcnN0IGFsbG9jYXRlXG4mIzQzOyAqIHdpdGhpbiBvciBhZGphY2VudCB0byB0aGUgZXhpc3RpbmcgcmVnaW9uIHRvIGtlZXAgYWxsb2NhdGlvbnMgY2x1c3RlcmVkLlxuJiM0MzsgKiBPdGhlcndpc2UgZmFsbCBiYWNrIHRvIGEgZ2VuZXJpYyBhbGxvY2F0aW9uIHVzaW5nIHRoZSBmaXJzdCBhdmFpbGFibGVcbiYjNDM7ICogc3BhY2UuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgYXBwcm9hY2ggZm9jdXNlcyBvbiBwYWdlLWxldmVsIGFsbG9jYXRpb24gZmlyc3QsIHRoZW4gdGhlIGNodW5rXG4mIzQzOyAqIHN5c3RlbSBkZXRlcm1pbmVzIHdoaWNoIGNodW5rcyBuZWVkIHRvIGJlIGFjdGl2YXRlZCBiYXNlZCBvbiB3aGVyZSB0aGVcbiYjNDM7ICogcGFnZXMgZW5kZWQgdXAuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHRlZ3JhX3Zwcl9hbGxvY2F0ZV9yZWdpb24oc3RydWN0IHRlZ3JhX3ZwciAqdnByLFxuJiM0MztcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IG51bV9wYWdlcyxcbiYjNDM7XHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBhbGlnbilcbiYjNDM7e1xuJiM0MztcdGludCBwYWdlbm87XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRm9yIG5vbi1yZXNpemFibGUgVlBSIChubyBjaHVua3MpLCB1c2Ugc2ltcGxlIGZpcnN0LWZpdCBhbGxvY2F0aW9uLlxuJiM0MztcdCAqIENsdXN0ZXJpbmcgb3B0aW1pemF0aW9uIGlzIG9ubHkgYmVuZWZpY2lhbCBmb3IgcmVzaXphYmxlIFZQUiB3aGVyZVxuJiM0MztcdCAqIGtlZXBpbmcgYWxsb2NhdGlvbnMgdG9nZXRoZXIgbWluaW1pemVzIHRoZSBhY3RpdmUgVlBSIHNpemUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHZwci1cdTAwM2VudW1fY2h1bmtzID09IDApXG4mIzQzO1x0XHRyZXR1cm4gdGVncmFfdnByX2ZpbmRfZnJlZV9yZWdpb24odnByLCBudW1fcGFnZXMsIGFsaWduKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IGV4aXN0aW5nIGFsbG9jYXRpb25zIGluIHRoZSBiaXRtYXAuIElmIHNvLFxuJiM0MztcdCAqIHRyeSB0byBhbGxvY2F0ZSBuZWFyIHRoZW0gdG8gbWluaW1pemUgZnJhZ21lbnRhdGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwYWdlbm8gPSB0ZWdyYV92cHJfZmluZF9mcmVlX3JlZ2lvbl9jbHVzdGVyZWQodnByLCBudW1fcGFnZXMsIGFsaWduKTtcbiYjNDM7XHRpZiAocGFnZW5vIFx1MDAzZT0gMClcbiYjNDM7XHRcdHJldHVybiBwYWdlbm87XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhlcmUgYXJlIG5vIGV4aXN0aW5nIGFsbG9jYXRpb25zLCBvciBubyBzcGFjZSBhZGphY2VudCB0byB0aGVtLFxuJiM0MztcdCAqIGZhbGwgYmFjayB0byB0aGUgZmlyc3QgYXZhaWxhYmxlIHNwYWNlIGFueXdoZXJlIGluIHRoZSBWUFIuXG4mIzQzO1x0ICovXG4mIzQzO1x0cGFnZW5vID0gdGVncmFfdnByX2ZpbmRfZnJlZV9yZWdpb24odnByLCBudW1fcGFnZXMsIGFsaWduKTtcbiYjNDM7XHRpZiAocGFnZW5vIFx1MDAzZT0gMClcbiYjNDM7XHRcdHJldHVybiBwYWdlbm87XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU5PU1BDO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKlxuJiM0Mzt0ZWdyYV92cHJfYnVmZmVyX2FsbG9jYXRlKHN0cnVjdCB0ZWdyYV92cHIgKnZwciwgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnVtX3BhZ2VzID0gc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7XG4mIzQzO1x0c3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKmJ1ZmZlcjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZpcnN0LCBsYXN0O1xuJiM0MztcdGludCBwYWdlbm8sIGVycjtcbiYjNDM7XHRwZ29mZl90IGk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogXCYjMzQ7b3JkZXJcJiMzNDsgZGVmaW5lcyB0aGUgYWxpZ25tZW50IGFuZCBzaXplLCBzbyB0aGlzIG1heSByZXN1bHQgaW5cbiYjNDM7XHQgKiBmcmFnbWVudGVkIG1lbW9yeSBkZXBlbmRpbmcgb24gdGhlIGFsbG9jYXRpb24gcGF0dGVybnMuIEhvd2V2ZXIsXG4mIzQzO1x0ICogc2luY2UgdGhpcyBpcyB1c2VkIHByaW1hcmlseSBmb3IgdmlkZW8gZnJhbWVzLCBpdCBpcyBleHBlY3RlZCB0aGF0XG4mIzQzO1x0ICogYSBudW1iZXIgb2YgYnVmZmVycyBvZiB0aGUgc2FtZSBzaXplIHdpbGwgYmUgYWxsb2NhdGVkLCBzb1xuJiM0MztcdCAqIGZyYWdtZW50YXRpb24gc2hvdWxkIGJlIG5lZ2xpZ2libGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cGFnZW5vID0gdGVncmFfdnByX2FsbG9jYXRlX3JlZ2lvbih2cHIsIG51bV9wYWdlcywgMSk7XG4mIzQzO1x0aWYgKHBhZ2VubyBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHBhZ2Vubyk7XG4mIzQzO1xuJiM0MztcdGZpcnN0ID0gZmluZF9maXJzdF9iaXQodnByLVx1MDAzZWJpdG1hcCwgdnByLVx1MDAzZW51bV9wYWdlcyk7XG4mIzQzO1x0bGFzdCA9IGZpbmRfbGFzdF9iaXQodnByLVx1MDAzZWJpdG1hcCwgdnByLVx1MDAzZW51bV9wYWdlcyk7XG4mIzQzO1xuJiM0MztcdGJ1ZmZlciA9IGt6YWxsb2Nfb2JqKCpidWZmZXIsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghYnVmZmVyKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byByZWxlYXNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2YnVmZmVyLVx1MDAzZWF0dGFjaG1lbnRzKTtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZidWZmZXItXHUwMDNlbGlzdCk7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZidWZmZXItXHUwMDNlbG9jayk7XG4mIzQzO1x0YnVmZmVyLVx1MDAzZXN0YXJ0ID0gdnByLVx1MDAzZWJhc2UgJiM0MzsgKHBhZ2VubyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4mIzQzO1x0YnVmZmVyLVx1MDAzZWxpbWl0ID0gYnVmZmVyLVx1MDAzZXN0YXJ0ICYjNDM7IHNpemU7XG4mIzQzO1x0YnVmZmVyLVx1MDAzZXNpemUgPSBzaXplO1xuJiM0MztcdGJ1ZmZlci1cdTAwM2VudW1fcGFnZXMgPSBudW1fcGFnZXM7XG4mIzQzO1x0YnVmZmVyLVx1MDAzZXBhZ2VubyA9IHBhZ2VubztcbiYjNDM7XHRidWZmZXItXHUwMDNlb3JkZXIgPSBvcmRlcjtcbiYjNDM7XG4mIzQzO1x0YnVmZmVyLVx1MDAzZXBhZ2VzID0ga21hbGxvY19hcnJheShidWZmZXItXHUwMDNlbnVtX3BhZ2VzLFxuJiM0MztcdFx0XHRcdCAgICAgIHNpemVvZigqYnVmZmVyLVx1MDAzZXBhZ2VzKSxcbiYjNDM7XHRcdFx0XHQgICAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWJ1ZmZlci1cdTAwM2VwYWdlcykge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZnJlZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIHRyYWNrIHdoaWNoIGNodW5rcyB0aGlzIGJ1ZmZlciBvdmVybGFwcyAqL1xuJiM0MztcdGlmICh2cHItXHUwMDNlbnVtX2NodW5rcyBcdTAwM2UgMCkge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGxpbWl0ID0gYnVmZmVyLVx1MDAzZXBhZ2VubyAmIzQzOyBidWZmZXItXHUwMDNlbnVtX3BhZ2VzLCBpO1xuJiM0MztcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHZwci1cdTAwM2VudW1fY2h1bmtzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuayA9IFx1MDAyNnZwci1cdTAwM2VjaHVua3NbaV07XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAodGVncmFfdnByX2NodW5rX292ZXJsYXBzKGNodW5rLCBwYWdlbm8sIGxpbWl0KSlcbiYjNDM7XHRcdFx0XHRzZXRfYml0KGksIGJ1ZmZlci1cdTAwM2VjaHVua3MpO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIGFjdGl2YXRlIGNodW5rcyBpZiBuZWNlc3NhcnkgKi9cbiYjNDM7XHRcdGVyciA9IHRlZ3JhX3Zwcl9hY3RpdmF0ZV9jaHVua3ModnByLCBidWZmZXIpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBmcmVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIHRyYWNrIGZpcnN0IGFuZCBsYXN0IGFsbG9jYXRlZCBwYWdlcyAqL1xuJiM0MztcdFx0aWYgKGJ1ZmZlci1cdTAwM2VwYWdlbm8gXHUwMDNjIHZwci1cdTAwM2VmaXJzdClcbiYjNDM7XHRcdFx0dnByLVx1MDAzZWZpcnN0ID0gYnVmZmVyLVx1MDAzZXBhZ2VubztcbiYjNDM7XG4mIzQzO1x0XHRpZiAobGltaXQgLSAxIFx1MDAzZSB2cHItXHUwMDNlbGFzdClcbiYjNDM7XHRcdFx0dnByLVx1MDAzZWxhc3QgPSBsaW1pdCAtIDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBidWZmZXItXHUwMDNlbnVtX3BhZ2VzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGJ1ZmZlci1cdTAwM2VwYWdlc1tpXSA9IFx1MDAyNnZwci1cdTAwM2VzdGFydF9wYWdlW3BhZ2VubyAmIzQzOyBpXTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJ1ZmZlcjtcbiYjNDM7XG4mIzQzO2ZyZWU6XG4mIzQzO1x0a2ZyZWUoYnVmZmVyLVx1MDAzZXBhZ2VzKTtcbiYjNDM7XHRrZnJlZShidWZmZXIpO1xuJiM0MztyZWxlYXNlOlxuJiM0MztcdGJpdG1hcF9yZWxlYXNlX3JlZ2lvbih2cHItXHUwMDNlYml0bWFwLCBwYWdlbm8sIG9yZGVyKTtcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZWdyYV92cHJfYnVmZmVyX3JlbGVhc2Uoc3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKmJ1ZmZlcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZWdyYV92cHIgKnZwciA9IGJ1ZmZlci1cdTAwM2V2cHI7XG4mIzQzO1x0c3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKmVudHJ5O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmlyc3QsIGxhc3Q7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRGVjcmVtZW50IGJ1ZmZlciBjb3VudCBmb3IgZWFjaCBvdmVybGFwcGluZyBjaHVuay4gTm90ZSB0aGF0IGNodW5rc1xuJiM0MztcdCAqIGFyZSBub3QgZGVhY3RpdmF0ZWQgaGVyZSB5ZXQsIHRoYXQmIzM5O3MgZG9uZSBpbiB0ZWdyYV92cHJfcmVjeWNsZSgpXG4mIzQzO1x0ICogaW5zdGVhZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3JfZWFjaF9zZXRfYml0KGksIGJ1ZmZlci1cdTAwM2VjaHVua3MsIHZwci1cdTAwM2VudW1fY2h1bmtzKSB7XG4mIzQzO1x0XHRpZiAoIVdBUk5fT04odnByLVx1MDAzZWNodW5rc1tpXS5udW1fYnVmZmVycyA9PSAwKSlcbiYjNDM7XHRcdFx0dnByLVx1MDAzZWNodW5rc1tpXS5udW1fYnVmZmVycy0tO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogdHJhY2sgZmlyc3QgYW5kIGxhc3QgYWxsb2NhdGVkIHBhZ2VzICovXG4mIzQzO1x0aWYgKGxpc3RfaXNfZmlyc3QoXHUwMDI2YnVmZmVyLVx1MDAzZWxpc3QsIFx1MDAyNnZwci1cdTAwM2VidWZmZXJzKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbGlzdF9pc19sYXN0KFx1MDAyNmJ1ZmZlci1cdTAwM2VsaXN0LCBcdTAwMjZ2cHItXHUwMDNlYnVmZmVycykpIHtcbiYjNDM7XHRcdC8qIGlmIHRoZXJlIGFyZSBubyByZW1haW5pbmcgYnVmZmVycyBhZnRlciB0aGlzLCByZXNldCAqL1xuJiM0MztcdFx0dnByLVx1MDAzZWZpcnN0ID0gfjBVO1xuJiM0MztcdFx0dnByLVx1MDAzZWxhc3QgPSAwVTtcbiYjNDM7XHR9IGVsc2UgaWYgKGxpc3RfaXNfZmlyc3QoXHUwMDI2YnVmZmVyLVx1MDAzZWxpc3QsIFx1MDAyNnZwci1cdTAwM2VidWZmZXJzKSkge1xuJiM0MztcdFx0ZW50cnkgPSBsaXN0X25leHRfZW50cnkoYnVmZmVyLCBsaXN0KTtcbiYjNDM7XHRcdHZwci1cdTAwM2VmaXJzdCA9IGVudHJ5LVx1MDAzZXBhZ2VubztcbiYjNDM7XHR9IGVsc2UgaWYgKGxpc3RfaXNfbGFzdChcdTAwMjZidWZmZXItXHUwMDNlbGlzdCwgXHUwMDI2dnByLVx1MDAzZWJ1ZmZlcnMpKSB7XG4mIzQzO1x0XHRlbnRyeSA9IGxpc3RfcHJldl9lbnRyeShidWZmZXIsIGxpc3QpO1xuJiM0MztcdFx0dnByLVx1MDAzZWxhc3QgPSBlbnRyeS1cdTAwM2VwYWdlbm8gJiM0MzsgZW50cnktXHUwMDNlbnVtX3BhZ2VzIC0gMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJpdG1hcF9yZWxlYXNlX3JlZ2lvbih2cHItXHUwMDNlYml0bWFwLCBidWZmZXItXHUwMDNlcGFnZW5vLCBidWZmZXItXHUwMDNlb3JkZXIpO1xuJiM0MztcdGxpc3RfZGVsKFx1MDAyNmJ1ZmZlci1cdTAwM2VsaXN0KTtcbiYjNDM7XHRrZnJlZShidWZmZXItXHUwMDNlcGFnZXMpO1xuJiM0MztcdGtmcmVlKGJ1ZmZlcik7XG4mIzQzO1xuJiM0MztcdGZpcnN0ID0gZmluZF9maXJzdF9iaXQodnByLVx1MDAzZWJpdG1hcCwgdnByLVx1MDAzZW51bV9wYWdlcyk7XG4mIzQzO1x0bGFzdCA9IGZpbmRfbGFzdF9iaXQodnByLVx1MDAzZWJpdG1hcCwgdnByLVx1MDAzZW51bV9wYWdlcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdGVncmFfdnByX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqYnVmLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZWdyYV92cHJfYnVmZmVyICpidWZmZXIgPSBidWYtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgdGVncmFfdnByX2F0dGFjaG1lbnQgKmF0dGFjaDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRhdHRhY2ggPSBremFsbG9jX29iaigqYXR0YWNoLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWF0dGFjaClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBzZ19hbGxvY190YWJsZV9mcm9tX3BhZ2VzKFx1MDAyNmF0dGFjaC1cdTAwM2VzZ3QsIGJ1ZmZlci1cdTAwM2VwYWdlcyxcbiYjNDM7XHRcdFx0XHRcdGJ1ZmZlci1cdTAwM2VudW1fcGFnZXMsIDAsIGJ1ZmZlci1cdTAwM2VzaXplLFxuJiM0MztcdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZnJlZTtcbiYjNDM7XG4mIzQzO1x0YXR0YWNoLVx1MDAzZWRldiA9IGF0dGFjaC1cdTAwM2VkZXY7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2YXR0YWNoLVx1MDAzZWxpc3QpO1xuJiM0MztcdGF0dGFjaG1lbnQtXHUwMDNlcHJpdiA9IGF0dGFjaDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZidWZmZXItXHUwMDNlbG9jayk7XG4mIzQzO1x0bGlzdF9hZGQoXHUwMDI2YXR0YWNoLVx1MDAzZWxpc3QsIFx1MDAyNmJ1ZmZlci1cdTAwM2VhdHRhY2htZW50cyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1ZmZlci1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztmcmVlOlxuJiM0MztcdGtmcmVlKGF0dGFjaCk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVncmFfdnByX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqYnVmLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGVncmFfdnByX2J1ZmZlciAqYnVmZmVyID0gYnVmLVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IHRlZ3JhX3Zwcl9hdHRhY2htZW50ICphdHRhY2ggPSBhdHRhY2htZW50LVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2YnVmZmVyLVx1MDAzZWxvY2spO1xuJiM0MztcdGxpc3RfZGVsKFx1MDAyNmF0dGFjaC1cdTAwM2VsaXN0KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2YnVmZmVyLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRzZ19mcmVlX3RhYmxlKFx1MDAyNmF0dGFjaC1cdTAwM2VzZ3QpO1xuJiM0MztcdGtmcmVlKGF0dGFjaCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKlxuJiM0Mzt0ZWdyYV92cHJfbWFwX2RtYV9idWYoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcbiYjNDM7XHRcdCAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZWdyYV92cHJfYXR0YWNobWVudCAqYXR0YWNoID0gYXR0YWNobWVudC1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBzZ190YWJsZSAqc2d0ID0gXHUwMDI2YXR0YWNoLVx1MDAzZXNndDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBkbWFfbWFwX3NndGFibGUoYXR0YWNobWVudC1cdTAwM2VkZXYsIHNndCwgZGlyZWN0aW9uLFxuJiM0MztcdFx0XHQgICAgICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DKTtcbiYjNDM7XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNndDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVncmFfdnByX3VubWFwX2RtYV9idWYoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IHNnX3RhYmxlICpzZ3QsXG4mIzQzO1x0XHRcdFx0ICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbilcbiYjNDM7e1xuJiM0MztcdGRtYV91bm1hcF9zZ3RhYmxlKGF0dGFjaG1lbnQtXHUwMDNlZGV2LCBzZ3QsIGRpcmVjdGlvbixcbiYjNDM7XHRcdFx0ICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVncmFfdnByX3JlY3ljbGUoc3RydWN0IHRlZ3JhX3ZwciAqdnByKVxuJiM0Mzt7XG4mIzQzO1x0REVDTEFSRV9CSVRNQVAoZGlydHksIHZwci1cdTAwM2VudW1fY2h1bmtzKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRiaXRtYXBfemVybyhkaXJ0eSwgdnByLVx1MDAzZW51bV9jaHVua3MpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERlYWN0aXZhdGUgYW55IHVudXNlZCBjaHVua3MgZnJvbSB0aGUgYm90dG9tLi4uXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdnByLVx1MDAzZW51bV9jaHVua3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuayA9IFx1MDAyNnZwci1cdTAwM2VjaHVua3NbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFjaHVuay1cdTAwM2VhY3RpdmUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjaHVuay1cdTAwM2VudW1fYnVmZmVycyBcdTAwM2UgMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gdGVncmFfdnByX2NodW5rX2RlYWN0aXZhdGUoY2h1bmspO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBkZWFjdGl2YXRlIGNodW5rICMldVxcblwmIzM0OywgaSk7XG4mIzQzO1x0XHRlbHNlIHtcbiYjNDM7XHRcdFx0Y2xlYXJfYml0KGksIHZwci1cdTAwM2VhY3RpdmUpO1xuJiM0MztcdFx0XHRzZXRfYml0KGksIGRpcnR5KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogLi4uIGFuZCB0aGUgdG9wLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHZwci1cdTAwM2VudW1fY2h1bmtzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGluZGV4ID0gdnByLVx1MDAzZW51bV9jaHVua3MgLSBpIC0gMTtcbiYjNDM7XHRcdHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rID0gXHUwMDI2dnByLVx1MDAzZWNodW5rc1tpbmRleF07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFjaHVuay1cdTAwM2VhY3RpdmUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjaHVuay1cdTAwM2VudW1fYnVmZmVycyBcdTAwM2UgMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gdGVncmFfdnByX2NodW5rX2RlYWN0aXZhdGUoY2h1bmspO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBkZWFjdGl2YXRlIGNodW5rICMldVxcblwmIzM0OywgaW5kZXgpO1xuJiM0MztcdFx0ZWxzZSB7XG4mIzQzO1x0XHRcdGNsZWFyX2JpdChpLCB2cHItXHUwMDNlYWN0aXZlKTtcbiYjNDM7XHRcdFx0c2V0X2JpdChpLCBkaXJ0eSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWJpdG1hcF9lbXB0eShkaXJ0eSwgdnByLVx1MDAzZW51bV9jaHVua3MpKSB7XG4mIzQzO1x0XHRlcnIgPSB0ZWdyYV92cHJfcmVzaXplKHZwcik7XG4mIzQzO1x0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gc2hyaW5rIFZQUjogJWRcXG5cJiMzNDssIGVycik7XG4mIzQzO1x0XHRcdGdvdG8gYWN0aXZhdGU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm47XG4mIzQzO1xuJiM0MzthY3RpdmF0ZTpcbiYjNDM7XHRmb3JfZWFjaF9zZXRfYml0KGksIGRpcnR5LCB2cHItXHUwMDNlbnVtX2NodW5rcykge1xuJiM0MztcdFx0ZXJyID0gdGVncmFfdnByX2NodW5rX2FjdGl2YXRlKFx1MDAyNnZwci1cdTAwM2VjaHVua3NbaV0pO1xuJiM0MztcdFx0aWYgKFdBUk5fT04oZXJyIFx1MDAzYyAwKSlcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBhY3RpdmF0ZSBjaHVuayAjJXU6ICVkXFxuXCYjMzQ7LCBpLCBlcnIpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVncmFfdnByX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmJ1ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZWdyYV92cHJfYnVmZmVyICpidWZmZXIgPSBidWYtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgdGVncmFfdnByICp2cHIgPSBidWZmZXItXHUwMDNldnByO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnZwci1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0dGVncmFfdnByX2J1ZmZlcl9yZWxlYXNlKGJ1ZmZlcik7XG4mIzQzO1xuJiM0MztcdGlmICh2cHItXHUwMDNlbnVtX2NodW5rcyBcdTAwM2UgMClcbiYjNDM7XHRcdHRlZ3JhX3Zwcl9yZWN5Y2xlKHZwcik7XG4mIzQzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZ2cHItXHUwMDNlbG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFByb2hpYml0IHVzZXJzcGFjZSBtYXBwaW5nIGJlY2F1c2UgdGhlIENQVSBjYW5ub3QgYWNjZXNzIHRoaXMgbWVtb3J5XG4mIzQzOyAqIGFueXdheS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgdGVncmFfdnByX2JlZ2luX2NwdV9hY2Nlc3Moc3RydWN0IGRtYV9idWYgKmJ1ZixcbiYjNDM7XHRcdFx0XHQgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVQRVJNO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRlZ3JhX3Zwcl9lbmRfY3B1X2FjY2VzcyhzdHJ1Y3QgZG1hX2J1ZiAqYnVmLFxuJiM0MztcdFx0XHRcdCAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVQRVJNO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRlZ3JhX3Zwcl9tbWFwKHN0cnVjdCBkbWFfYnVmICpidWYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FUEVSTTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyB0ZWdyYV92cHJfYnVmX29wcyA9IHtcbiYjNDM7XHQuYXR0YWNoID0gdGVncmFfdnByX2F0dGFjaCxcbiYjNDM7XHQuZGV0YWNoID0gdGVncmFfdnByX2RldGFjaCxcbiYjNDM7XHQubWFwX2RtYV9idWYgPSB0ZWdyYV92cHJfbWFwX2RtYV9idWYsXG4mIzQzO1x0LnVubWFwX2RtYV9idWYgPSB0ZWdyYV92cHJfdW5tYXBfZG1hX2J1ZixcbiYjNDM7XHQucmVsZWFzZSA9IHRlZ3JhX3Zwcl9yZWxlYXNlLFxuJiM0MztcdC5iZWdpbl9jcHVfYWNjZXNzID0gdGVncmFfdnByX2JlZ2luX2NwdV9hY2Nlc3MsXG4mIzQzO1x0LmVuZF9jcHVfYWNjZXNzID0gdGVncmFfdnByX2VuZF9jcHVfYWNjZXNzLFxuJiM0MztcdC5tbWFwID0gdGVncmFfdnByX21tYXAsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGRtYV9idWYgKnRlZ3JhX3Zwcl9hbGxvY2F0ZShzdHJ1Y3QgZG1hX2hlYXAgKmhlYXAsXG4mIzQzO1x0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1MzIgZmRfZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHQgIHU2NCBoZWFwX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRlZ3JhX3ZwciAqdnByID0gZG1hX2hlYXBfZ2V0X2RydmRhdGEoaGVhcCk7XG4mIzQzO1x0c3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKmJ1ZmZlciwgKmVudHJ5O1xuJiM0MztcdHNpemVfdCBzaXplID0gQUxJR04obGVuLCB2cHItXHUwMDNlYWxpZ24pO1xuJiM0MztcdERFRklORV9ETUFfQlVGX0VYUE9SVF9JTkZPKGV4cG9ydCk7XG4mIzQzO1x0c3RydWN0IGRtYV9idWYgKmJ1ZjtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZ2cHItXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGJ1ZmZlciA9IHRlZ3JhX3Zwcl9idWZmZXJfYWxsb2NhdGUodnByLCBzaXplKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGJ1ZmZlcikpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cHItXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX0NBU1QoYnVmZmVyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIGluc2VydCBpbiB0aGUgY29ycmVjdCBvcmRlciAqL1xuJiM0MztcdGlmICghbGlzdF9lbXB0eShcdTAwMjZ2cHItXHUwMDNlYnVmZmVycykpIHtcbiYjNDM7XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNnZwci1cdTAwM2VidWZmZXJzLCBsaXN0KSB7XG4mIzQzO1x0XHRcdGlmIChidWZmZXItXHUwMDNlcGFnZW5vIFx1MDAzYyBlbnRyeS1cdTAwM2VwYWdlbm8pIHtcbiYjNDM7XHRcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmJ1ZmZlci1cdTAwM2VsaXN0LCBcdTAwMjZlbnRyeS1cdTAwM2VsaXN0KTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2YnVmZmVyLVx1MDAzZWxpc3QpKVxuJiM0MztcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZidWZmZXItXHUwMDNlbGlzdCwgXHUwMDI2dnByLVx1MDAzZWJ1ZmZlcnMpO1xuJiM0MztcbiYjNDM7XHRidWZmZXItXHUwMDNldnByID0gdnByO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIGEgdmFsaWQgYnVmZmVyIHdhcyBhbGxvY2F0ZWQsIHdyYXAgaXQgaW4gYSBkbWFfYnVmXG4mIzQzO1x0ICogYW5kIHJldHVybiBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRleHBvcnQuZXhwX25hbWUgPSBkbWFfaGVhcF9nZXRfbmFtZShoZWFwKTtcbiYjNDM7XHRleHBvcnQub3BzID0gXHUwMDI2dGVncmFfdnByX2J1Zl9vcHM7XG4mIzQzO1x0ZXhwb3J0LnNpemUgPSBidWZmZXItXHUwMDNlc2l6ZTtcbiYjNDM7XHRleHBvcnQuZmxhZ3MgPSBmZF9mbGFncztcbiYjNDM7XHRleHBvcnQucHJpdiA9IGJ1ZmZlcjtcbiYjNDM7XG4mIzQzO1x0YnVmID0gZG1hX2J1Zl9leHBvcnQoXHUwMDI2ZXhwb3J0KTtcbiYjNDM7XHRpZiAoSVNfRVJSKGJ1ZikpXG4mIzQzO1x0XHR0ZWdyYV92cHJfYnVmZmVyX3JlbGVhc2UoYnVmZmVyKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnZwci1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXR1cm4gYnVmO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZWdyYV92cHJfZGVidWdmc19zaG93X2J1ZmZlcnMoc3RydWN0IHRlZ3JhX3ZwciAqdnByLFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IHNlcV9maWxlICpzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKmJ1ZmZlcjtcbiYjNDM7XHRjaGFyIGJ1ZlsxNl07XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkoYnVmZmVyLCBcdTAwMjZ2cHItXHUwMDNlYnVmZmVycywgbGlzdCkge1xuJiM0MztcdFx0c3RyaW5nX2dldF9zaXplKGJ1ZmZlci1cdTAwM2VzaXplLCAxLCBTVFJJTkdfVU5JVFNfMiwgYnVmLFxuJiM0MztcdFx0XHRcdHNpemVvZihidWYpKTtcbiYjNDM7XHRcdHNlcV9wcmludGYocywgXCYjMzQ7ICAlcGFwLSVwYXAgKCVzKVxcblwmIzM0OywgXHUwMDI2YnVmZmVyLVx1MDAzZXN0YXJ0LFxuJiM0MztcdFx0XHQgICBcdTAwMjZidWZmZXItXHUwMDNlbGltaXQsIGJ1Zik7XG4mIzQzO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVncmFfdnByX2RlYnVnZnNfc2hvd19jaHVua3Moc3RydWN0IHRlZ3JhX3ZwciAqdnByLFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGVncmFfdnByX2J1ZmZlciAqYnVmZmVyO1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcdGNoYXIgYnVmWzE2XTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdnByLVx1MDAzZW51bV9jaHVua3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuayA9IFx1MDAyNnZwci1cdTAwM2VjaHVua3NbaV07XG4mIzQzO1xuJiM0MztcdFx0c3RyaW5nX2dldF9zaXplKGNodW5rLVx1MDAzZXNpemUsIDEsIFNUUklOR19VTklUU18yLCBidWYsXG4mIzQzO1x0XHRcdFx0c2l6ZW9mKGJ1ZikpO1xuJiM0MztcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDsgICVwYXAtJXBhcCAoJXMpICglcywgJXUgYnVmZmVycylcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIFx1MDAyNmNodW5rLVx1MDAzZXN0YXJ0LCBcdTAwMjZjaHVuay1cdTAwM2VsaW1pdCwgYnVmLFxuJiM0MztcdFx0XHQgICBjaHVuay1cdTAwM2VhY3RpdmUgPyBcJiMzNDthY3RpdmVcJiMzNDsgOiBcJiMzNDtpbmFjdGl2ZVwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgY2h1bmstXHUwMDNlbnVtX2J1ZmZlcnMpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShidWZmZXIsIFx1MDAyNnZwci1cdTAwM2VidWZmZXJzLCBsaXN0KSB7XG4mIzQzO1x0XHRzdHJpbmdfZ2V0X3NpemUoYnVmZmVyLVx1MDAzZXNpemUsIDEsIFNUUklOR19VTklUU18yLCBidWYsXG4mIzQzO1x0XHRcdFx0c2l6ZW9mKGJ1ZikpO1xuJiM0MztcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslcGFwLSVwYXAgKCVzLCBjaHVua3M6ICUqcGJsKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgXHUwMDI2YnVmZmVyLVx1MDAzZXN0YXJ0LCBcdTAwMjZidWZmZXItXHUwMDNlbGltaXQsIGJ1ZixcbiYjNDM7XHRcdFx0ICAgdnByLVx1MDAzZW51bV9jaHVua3MsIGJ1ZmZlci1cdTAwM2VjaHVua3MpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0ZWdyYV92cHJfZGVidWdmc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGRtYV9oZWFwICpoZWFwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRlZ3JhX3ZwciAqdnByID0gZG1hX2hlYXBfZ2V0X2RydmRhdGEoaGVhcCk7XG4mIzQzO1x0cGh5c19hZGRyX3QgbGltaXQgPSB2cHItXHUwMDNlYmFzZSAmIzQzOyB2cHItXHUwMDNlc2l6ZTtcbiYjNDM7XHRjaGFyIGJ1ZlsxNl07XG4mIzQzO1xuJiM0MztcdHN0cmluZ19nZXRfc2l6ZSh2cHItXHUwMDNlc2l6ZSwgMSwgU1RSSU5HX1VOSVRTXzIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JXBhcC0lcGFwICglcylcXG5cJiMzNDssIFx1MDAyNnZwci1cdTAwM2ViYXNlLCBcdTAwMjZsaW1pdCwgYnVmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHZwci1cdTAwM2VudW1fY2h1bmtzID09IDApXG4mIzQzO1x0XHR0ZWdyYV92cHJfZGVidWdmc19zaG93X2J1ZmZlcnModnByLCBzKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR0ZWdyYV92cHJfZGVidWdmc19zaG93X2NodW5rcyh2cHIsIHMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfaGVhcF9vcHMgdGVncmFfdnByX2hlYXBfb3BzID0ge1xuJiM0MztcdC5hbGxvY2F0ZSA9IHRlZ3JhX3Zwcl9hbGxvY2F0ZSxcbiYjNDM7XHQuc2hvdyA9IHRlZ3JhX3Zwcl9kZWJ1Z2ZzX3Nob3csXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRlZ3JhX3Zwcl9zZXR1cF9jaHVua3Moc3RydWN0IHRlZ3JhX3ZwciAqdnByLCBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0cGh5c19hZGRyX3Qgc3RhcnQsIGxpbWl0O1xuJiM0MztcdHVuc2lnbmVkIGludCBvcmRlciwgaTtcbiYjNDM7XHRzaXplX3QgbWF4X3NpemU7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0LyogVGhpcyBzZWVtcyBhIHJlYXNvbmFibGUgdmFsdWUsIHNvIGhhcmQtY29kZSB0aGlzIGZvciBub3cuICovXG4mIzQzO1x0dnByLVx1MDAzZW51bV9jaHVua3MgPSA0O1xuJiM0MztcbiYjNDM7XHR2cHItXHUwMDNlY2h1bmtzID0ga2NhbGxvYyh2cHItXHUwMDNlbnVtX2NodW5rcywgc2l6ZW9mKCp2cHItXHUwMDNlY2h1bmtzKSxcbiYjNDM7XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCF2cHItXHUwMDNlY2h1bmtzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdG1heF9zaXplID0gUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyAoZ2V0X29yZGVyKHZwci1cdTAwM2VzaXplKSAtIGlsb2cyKHZwci1cdTAwM2VudW1fY2h1bmtzKSk7XG4mIzQzO1x0b3JkZXIgPSBnZXRfb3JkZXIodnByLVx1MDAzZWFsaWduKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBbGxvY2F0ZSBDTUEgYXJlYXMgZm9yIFZQUi4gQWxsIGFyZWFzIHdpbGwgYmUgcm91Z2h0bHkgdGhlIHNhbWVcbiYjNDM7XHQgKiBzaXplLCB3aXRoIHRoZSBsYXN0IGFyZWEgdGFraW5nIHVwIHRoZSByZXN0LlxuJiM0MztcdCAqL1xuJiM0MztcdHN0YXJ0ID0gdnByLVx1MDAzZWJhc2U7XG4mIzQzO1x0bGltaXQgPSB2cHItXHUwMDNlYmFzZSAmIzQzOyB2cHItXHUwMDNlc2l6ZTtcbiYjNDM7XG4mIzQzO1x0cHJfZGVidWcoXCYjMzQ7VlBSOiAlcGFwLSVwYXAgKCVsdSBwYWdlcywgJXUgY2h1bmtzLCAlbHUgTWlCKVxcblwmIzM0OywgXHUwMDI2c3RhcnQsXG4mIzQzO1x0XHQgXHUwMDI2bGltaXQsIHZwci1cdTAwM2VudW1fcGFnZXMsIHZwci1cdTAwM2VudW1fY2h1bmtzLFxuJiM0MztcdFx0ICh1bnNpZ25lZCBsb25nKXZwci1cdTAwM2VzaXplIC8gMTAyNCAvIDEwMjQpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2cHItXHUwMDNlbnVtX2NodW5rczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHNpemVfdCBzaXplID0gbGltaXQgLSBzdGFydDtcbiYjNDM7XHRcdHBoeXNfYWRkcl90IGVuZDtcbiYjNDM7XG4mIzQzO1x0XHRzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBtYXhfc2l6ZSk7XG4mIzQzO1x0XHRlbmQgPSBzdGFydCAmIzQzOyBzaXplIC0gMTtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSB0ZWdyYV92cHJfY2h1bmtfaW5pdCh2cHIsIFx1MDAyNnZwci1cdTAwM2VjaHVua3NbaV0sIHN0YXJ0LCBzaXplLFxuJiM0MztcdFx0XHRcdFx0ICAgb3JkZXIsIG5hbWUpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBWUFIgY2h1bms6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0MztcdFx0XHRnb3RvIGZyZWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7ICAlMnU6ICVwYXAtJXBhcCAoJWx1IE1pQilcXG5cJiMzNDssIGksIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQsXG4mIzQzO1x0XHRcdCBzaXplIC8gMTAyNCAvIDEwMjQpO1xuJiM0MztcdFx0c3RhcnQgJiM0Mzs9IHNpemU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR2cHItXHUwMDNlZmlyc3QgPSB+MFU7XG4mIzQzO1x0dnByLVx1MDAzZWxhc3QgPSAwVTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztmcmVlOlxuJiM0MztcdHdoaWxlIChpLS0pXG4mIzQzO1x0XHR0ZWdyYV92cHJfY2h1bmtfZnJlZShcdTAwMjZ2cHItXHUwMDNlY2h1bmtzW2ldKTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUodnByLVx1MDAzZWNodW5rcyk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVncmFfdnByX2ZyZWVfY2h1bmtzKHN0cnVjdCB0ZWdyYV92cHIgKnZwcilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2cHItXHUwMDNlbnVtX2NodW5rczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHR0ZWdyYV92cHJfY2h1bmtfZnJlZShcdTAwMjZ2cHItXHUwMDNlY2h1bmtzW2ldKTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUodnByLVx1MDAzZWNodW5rcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdGVncmFfdnByX3NldHVwX3N0YXRpYyhzdHJ1Y3QgdGVncmFfdnByICp2cHIpXG4mIzQzO3tcbiYjNDM7XHRwaHlzX2FkZHJfdCBzdGFydCwgbGltaXQ7XG4mIzQzO1xuJiM0MztcdHN0YXJ0ID0gdnByLVx1MDAzZWJhc2U7XG4mIzQzO1x0bGltaXQgPSB2cHItXHUwMDNlYmFzZSAmIzQzOyB2cHItXHUwMDNlc2l6ZTtcbiYjNDM7XG4mIzQzO1x0cHJfZGVidWcoXCYjMzQ7VlBSOiAlcGFwLSVwYXAgKCVsdSBwYWdlcywgJWx1IE1pQilcXG5cJiMzNDssIFx1MDAyNnN0YXJ0LCBcdTAwMjZsaW1pdCxcbiYjNDM7XHRcdCB2cHItXHUwMDNlbnVtX3BhZ2VzLCAodW5zaWduZWQgbG9uZyl2cHItXHUwMDNlc2l6ZSAvIDEwMjQgLyAxMDI0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IHRlZ3JhX3Zwcl9hZGRfaGVhcChzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpybWVtLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGRldmljZV9ub2RlICpucClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfaGVhcF9leHBvcnRfaW5mbyBpbmZvID0ge307XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmaXJzdCwgbGFzdDtcbiYjNDM7XHRzdHJ1Y3QgZG1hX2hlYXAgKmhlYXA7XG4mIzQzO1x0c3RydWN0IHRlZ3JhX3ZwciAqdnByO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHZwciA9IGt6YWxsb2Nfb2JqKCp2cHIsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghdnByKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnZwci1cdTAwM2VidWZmZXJzKTtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ2cHItXHUwMDNlZGV2aWNlcyk7XG4mIzQzO1x0dnByLVx1MDAzZXJlc2l6YWJsZSA9ICFvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsIFwmIzM0O25vLW1hcFwmIzM0Oyk7XG4mIzQzO1x0dnByLVx1MDAzZXVzZV9mcmVlemVyID0gdHJ1ZTtcbiYjNDM7XHR2cHItXHUwMDNlZGV2X25vZGUgPSBucDtcbiYjNDM7XHR2cHItXHUwMDNlYWxpZ24gPSBQQUdFX1NJWkU7XG4mIzQzO1x0dnByLVx1MDAzZWJhc2UgPSBybWVtLVx1MDAzZWJhc2U7XG4mIzQzO1x0dnByLVx1MDAzZXNpemUgPSBybWVtLVx1MDAzZXNpemU7XG4mIzQzO1xuJiM0MztcdC8qIGNvbW1vbiBzZXR1cCAqL1xuJiM0MztcdHZwci1cdTAwM2VzdGFydF9wYWdlID0gcGh5c190b19wYWdlKHZwci1cdTAwM2ViYXNlKTtcbiYjNDM7XHR2cHItXHUwMDNlbnVtX3BhZ2VzID0gdnByLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1xuJiM0MztcdHZwci1cdTAwM2ViaXRtYXAgPSBiaXRtYXBfemFsbG9jKHZwci1cdTAwM2VudW1fcGFnZXMsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghdnByLVx1MDAzZWJpdG1hcCkge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZnJlZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZpcnN0ID0gZmluZF9maXJzdF9iaXQodnByLVx1MDAzZWJpdG1hcCwgdnByLVx1MDAzZW51bV9wYWdlcyk7XG4mIzQzO1x0bGFzdCA9IGZpbmRfbGFzdF9iaXQodnByLVx1MDAzZWJpdG1hcCwgdnByLVx1MDAzZW51bV9wYWdlcyk7XG4mIzQzO1xuJiM0MztcdGlmICh2cHItXHUwMDNlcmVzaXphYmxlKVxuJiM0MztcdFx0ZXJyID0gdGVncmFfdnByX3NldHVwX2NodW5rcyh2cHIsIHJtZW0tXHUwMDNlbmFtZSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZXJyID0gdGVncmFfdnByX3NldHVwX3N0YXRpYyh2cHIpO1xuJiM0MztcbiYjNDM7XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBmcmVlO1xuJiM0MztcbiYjNDM7XHRpbmZvLm5hbWUgPSB2cHItXHUwMDNlZGV2X25vZGUtXHUwMDNlbmFtZTtcbiYjNDM7XHRpbmZvLm9wcyA9IFx1MDAyNnRlZ3JhX3Zwcl9oZWFwX29wcztcbiYjNDM7XHRpbmZvLnByaXYgPSB2cHI7XG4mIzQzO1xuJiM0MztcdGhlYXAgPSBkbWFfaGVhcF9hZGQoXHUwMDI2aW5mbyk7XG4mIzQzO1x0aWYgKElTX0VSUihoZWFwKSkge1xuJiM0MztcdFx0ZXJyID0gUFRSX0VSUihoZWFwKTtcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJtZW0tXHUwMDNlcHJpdiA9IGhlYXA7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRpZiAodnByLVx1MDAzZXJlc2l6YWJsZSlcbiYjNDM7XHRcdHRlZ3JhX3Zwcl9mcmVlX2NodW5rcyh2cHIpO1xuJiM0MztmcmVlOlxuJiM0MztcdGJpdG1hcF9mcmVlKHZwci1cdTAwM2ViaXRtYXApO1xuJiM0MztcdGtmcmVlKHZwcik7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgdGVncmFfdnByX2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKmNvbXBhdGlibGUgPSBcJiMzNDtudmlkaWEsdGVncmEtdmlkZW8tcHJvdGVjdGlvbi1yZWdpb25cJiMzNDs7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7XG4mIzQzO1x0c3RydWN0IHJlc2VydmVkX21lbSAqcm1lbTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRwYXJlbnQgPSBvZl9maW5kX25vZGVfYnlfcGF0aChcJiMzNDsvcmVzZXJ2ZWQtbWVtb3J5XCYjMzQ7KTtcbiYjNDM7XHRpZiAoIXBhcmVudClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChwYXJlbnQsIGNoaWxkKSB7XG4mIzQzO1x0XHRpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKGNoaWxkLCBjb21wYXRpYmxlKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0cm1lbSA9IG9mX3Jlc2VydmVkX21lbV9sb29rdXAoY2hpbGQpO1xuJiM0MztcdFx0aWYgKCFybWVtKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSB0ZWdyYV92cHJfYWRkX2hlYXAocm1lbSwgY2hpbGQpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBhZGQgVlBSIGhlYXAgZm9yICVwT0Y6ICVkXFxuXCYjMzQ7LCBjaGlsZCxcbiYjNDM7XHRcdFx0ICAgICAgIGVycik7XG4mIzQzO1xuJiM0MztcdFx0Lyogb25seSBhIHNpbmdsZSBWUFIgaGVhcCBpcyBzdXBwb3J0ZWQgKi9cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7bW9kdWxlX2luaXQodGVncmFfdnByX2luaXQpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCB0ZWdyYV92cHJfbm9kZV9pbml0KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpybWVtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdGVncmFfdnByX2RldmljZV9pbml0KHN0cnVjdCByZXNlcnZlZF9tZW0gKnJtZW0sIHN0cnVjdCBkZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfaGVhcCAqaGVhcCA9IHJtZW0tXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgdGVncmFfdnByICp2cHIgPSBkbWFfaGVhcF9nZXRfZHJ2ZGF0YShoZWFwKTtcbiYjNDM7XHRzdHJ1Y3QgdGVncmFfdnByX2RldmljZSAqbm9kZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlZHJpdmVyLVx1MDAzZXBtLVx1MDAzZWZyZWV6ZSB8fCAhZGV2LVx1MDAzZWRyaXZlci1cdTAwM2VwbS1cdTAwM2V0aGF3KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG5vZGUgPSBremFsbG9jX29iaigqbm9kZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFub2RlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5vZGUtXHUwMDNlbm9kZSk7XG4mIzQzO1x0bm9kZS1cdTAwM2VkZXYgPSBkZXY7XG4mIzQzO1xuJiM0MztcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlLCBcdTAwMjZ2cHItXHUwMDNlZGV2aWNlcyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZWdyYV92cHJfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IHJlc2VydmVkX21lbSAqcm1lbSxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBkZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfaGVhcCAqaGVhcCA9IHJtZW0tXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgdGVncmFfdnByICp2cHIgPSBkbWFfaGVhcF9nZXRfZHJ2ZGF0YShoZWFwKTtcbiYjNDM7XHRzdHJ1Y3QgdGVncmFfdnByX2RldmljZSAqbm9kZSwgKnRtcDtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIHRtcCwgXHUwMDI2dnByLVx1MDAzZWRldmljZXMsIG5vZGUpIHtcbiYjNDM7XHRcdGlmIChub2RlLVx1MDAzZWRldiA9PSBkZXYpIHtcbiYjNDM7XHRcdFx0bGlzdF9kZWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbiYjNDM7XHRcdFx0a2ZyZWUobm9kZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJlc2VydmVkX21lbV9vcHMgdGVncmFfdnByX3JtZW1fb3BzID0ge1xuJiM0MztcdC5ub2RlX2luaXQgPSB0ZWdyYV92cHJfbm9kZV9pbml0LFxuJiM0MztcdC5kZXZpY2VfaW5pdCA9IHRlZ3JhX3Zwcl9kZXZpY2VfaW5pdCxcbiYjNDM7XHQuZGV2aWNlX3JlbGVhc2UgPSB0ZWdyYV92cHJfZGV2aWNlX3JlbGVhc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MztSRVNFUlZFRE1FTV9PRl9ERUNMQVJFKHRlZ3JhX3ZwciwgXCYjMzQ7bnZpZGlhLHRlZ3JhLXZpZGVvLXByb3RlY3Rpb24tcmVnaW9uXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIFx1MDAyNnRlZ3JhX3Zwcl9ybWVtX29wcyk7XG4mIzQzO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TlZJRElBIFRlZ3JhIFZpZGVvLVByb3RlY3Rpb24tUmVnaW9uIERNQS1CVUYgaGVhcCBkcml2ZXJcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYml0bWFwLmggYi9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oXG5pbmRleCBiMDA3ZDU0YTkwMzZhNS4uZGNjODFkYzA4MmVkYzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oXG5AQCAtNzIxLDEwICYjNDM7NzIxLDEwIEBAIHZvaWQgYml0bWFwX3JlbGVhc2VfcmVnaW9uKHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgdW5zaWduZWQgaW50IHBvcywgaW50IG9yZGVyKVxuIH1cbiBcbiAvKipcbi0gKiBiaXRtYXBfYWxsb2NhdGVfcmVnaW9uIC0gYWxsb2NhdGUgYml0bWFwIHJlZ2lvblxuJiM0MzsgKiBiaXRtYXBfYWxsb2NhdGUgLSBhbGxvY2F0ZSBiaXRtYXAgcmVnaW9uXG4gICpcdEBiaXRtYXA6IGFycmF5IG9mIHVuc2lnbmVkIGxvbmdzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJpdG1hcFxuICAqXHRAcG9zOiBiZWdpbm5pbmcgb2YgYml0IHJlZ2lvbiB0byBhbGxvY2F0ZVxuLSAqXHRAb3JkZXI6IHJlZ2lvbiBzaXplIChsb2cgYmFzZSAyIG9mIG51bWJlciBvZiBiaXRzKSB0byBhbGxvY2F0ZVxuJiM0MzsgKlx0QGxlbjogbnVtYmVyIG9mIGJpdHMgdG8gYWxsb2NhdGVcbiAgKlxuICAqIEFsbG9jYXRlIChzZXQgYml0cyBpbikgYSBzcGVjaWZpZWQgcmVnaW9uIG9mIGEgYml0bWFwLlxuICAqXG5AQCAtNzMyLDE2ICYjNDM7NzMyLDMxIEBAIHZvaWQgYml0bWFwX3JlbGVhc2VfcmVnaW9uKHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgdW5zaWduZWQgaW50IHBvcywgaW50IG9yZGVyKVxuICAqIGZyZWUgKG5vdCBhbGwgYml0cyB3ZXJlIHplcm8pLlxuICAqL1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbi1pbnQgYml0bWFwX2FsbG9jYXRlX3JlZ2lvbih1bnNpZ25lZCBsb25nICpiaXRtYXAsIHVuc2lnbmVkIGludCBwb3MsIGludCBvcmRlcilcbiYjNDM7aW50IGJpdG1hcF9hbGxvY2F0ZSh1bnNpZ25lZCBsb25nICpiaXRtYXAsIHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBsZW4pXG4ge1xuLVx0dW5zaWduZWQgaW50IGxlbiA9IEJJVChvcmRlcik7XG4tXG4gXHRpZiAoZmluZF9uZXh0X2JpdChiaXRtYXAsIHBvcyAmIzQzOyBsZW4sIHBvcykgXHUwMDNjIHBvcyAmIzQzOyBsZW4pXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXHRiaXRtYXBfc2V0KGJpdG1hcCwgcG9zLCBsZW4pO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogYml0bWFwX2FsbG9jYXRlX3JlZ2lvbiAtIGFsbG9jYXRlIGJpdG1hcCByZWdpb25cbiYjNDM7ICpcdEBiaXRtYXA6IGFycmF5IG9mIHVuc2lnbmVkIGxvbmdzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJpdG1hcFxuJiM0MzsgKlx0QHBvczogYmVnaW5uaW5nIG9mIGJpdCByZWdpb24gdG8gYWxsb2NhdGVcbiYjNDM7ICpcdEBvcmRlcjogcmVnaW9uIHNpemUgKGxvZyBiYXNlIDIgb2YgbnVtYmVyIG9mIGJpdHMpIHRvIGFsbG9jYXRlXG4mIzQzOyAqXG4mIzQzOyAqIEFsbG9jYXRlIChzZXQgYml0cyBpbikgYSBzcGVjaWZpZWQgcmVnaW9uIG9mIGEgYml0bWFwLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG9yICUtRUJVU1kgaWYgc3BlY2lmaWVkIHJlZ2lvbiB3YXNuJiMzOTt0XG4mIzQzOyAqIGZyZWUgKG5vdCBhbGwgYml0cyB3ZXJlIHplcm8pLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZVxuJiM0MztpbnQgYml0bWFwX2FsbG9jYXRlX3JlZ2lvbih1bnNpZ25lZCBsb25nICpiaXRtYXAsIHVuc2lnbmVkIGludCBwb3MsIGludCBvcmRlcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBiaXRtYXBfYWxsb2NhdGUoYml0bWFwLCBwb3MsIEJJVChvcmRlcikpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGJpdG1hcF9maW5kX2ZyZWVfcmVnaW9uIC0gZmluZCBhIGNvbnRpZ3VvdXMgYWxpZ25lZCBtZW0gcmVnaW9uXG4gICpcdEBiaXRtYXA6IGFycmF5IG9mIHVuc2lnbmVkIGxvbmdzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJpdG1hcFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY21hLmggYi9pbmNsdWRlL2xpbnV4L2NtYS5oXG5pbmRleCA4NTU1ZDM4YTk3YjFhNS4uZmI3YTQ5MjNjM2JhOWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2NtYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2NtYS5oXG5AQCAtNyw3ICYjNDM7Nyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbnVtYS5oXHUwMDNlXG4gXG4gI2lmZGVmIENPTkZJR19DTUFfQVJFQVNcbi0jZGVmaW5lIE1BWF9DTUFfQVJFQVNcdENPTkZJR19DTUFfQVJFQVNcbiYjNDM7I2RlZmluZSBNQVhfRUFSTFlfQ01BX0FSRUFTXHRDT05GSUdfQ01BX0FSRUFTXG4gI2VuZGlmXG4gXG4gI2RlZmluZSBDTUFfTUFYX05BTUUgNjRcbkBAIC01Nyw4ICYjNDM7NTcsMTQgQEAgc3RydWN0IHBhZ2UgKmNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuIGJvb2wgY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLFxuIFx0XHR1bnNpZ25lZCBsb25nIGNvdW50KTtcbiBcbiYjNDM7ZXh0ZXJuIGludCBjbWFfZm9yX2VhY2hfZWFybHlfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7XG4gZXh0ZXJuIGludCBjbWFfZm9yX2VhY2hfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7XG4gZXh0ZXJuIGJvb2wgY21hX2ludGVyc2VjdHMoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XG4gXG4gZXh0ZXJuIHZvaWQgY21hX3Jlc2VydmVfcGFnZXNfb25fZXJyb3Ioc3RydWN0IGNtYSAqY21hKTtcbiYjNDM7XG4mIzQzO2V4dGVybiBzdHJ1Y3QgY21hICpjbWFfY3JlYXRlKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXG4mIzQzO1x0XHRcdCAgICAgIHVuc2lnbmVkIGludCBvcmRlcl9wZXJfYml0LCBjb25zdCBjaGFyICpuYW1lKTtcbiYjNDM7ZXh0ZXJuIHZvaWQgY21hX2ZyZWUoc3RydWN0IGNtYSAqY21hKTtcbiYjNDM7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtaGVhcC5oIGIvaW5jbHVkZS9saW51eC9kbWEtaGVhcC5oXG5pbmRleCA2NDgzMjhhNjRiMjdlYS4uMWM5YmVkMWY0ZGRlZjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1oZWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZG1hLWhlYXAuaFxuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuIHN0cnVjdCBkbWFfaGVhcDtcbiYjNDM7c3RydWN0IHNlcV9maWxlO1xuIFxuIC8qKlxuICAqIHN0cnVjdCBkbWFfaGVhcF9vcHMgLSBvcHMgdG8gb3BlcmF0ZSBvbiBhIGdpdmVuIGhlYXBcbkBAIC0yNCw2ICYjNDM7MjUsNyBAQCBzdHJ1Y3QgZG1hX2hlYXBfb3BzIHtcbiBcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGxlbixcbiBcdFx0XHRcdCAgICB1MzIgZmRfZmxhZ3MsXG4gXHRcdFx0XHQgICAgdTY0IGhlYXBfZmxhZ3MpO1xuJiM0MztcdGludCAoKnNob3cpKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGRtYV9oZWFwICpoZWFwKTtcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmhcbmluZGV4IDMwMzBkOTI0NWY1YWM4Li5hYmNiMTEzNzhmZGJkOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaFxuQEAgLTcyLDYgJiM0Mzs3MiwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBjbGVhcl9tY2Vfbm9zcGVjKHVuc2lnbmVkIGxvbmcgcGZuKVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7I2lmbmRlZiBDT05GSUdfQVJNNjRcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2V0X21lbW9yeV9kZXZpY2UodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZXRfbWVtb3J5X25vcm1hbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAjaWZuZGVmIENPTkZJR19BUkNIX0hBU19NRU1fRU5DUllQVFxuIHN0YXRpYyBpbmxpbmUgaW50IHNldF9tZW1vcnlfZW5jcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy90ZWdyYV92cHIuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3RlZ3JhX3Zwci5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY4Y2ViMTc2NzlmZTBhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy90ZWdyYV92cHIuaFxuQEAgLTAsMCAmIzQzOzEsNTcgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7XG4mIzQzOyNpZiAhZGVmaW5lZChfVFJBQ0VfVEVHUkFfVlBSX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpXG4mIzQzOyNkZWZpbmUgX1RSQUNFX1RFR1JBX1ZQUl9IXG4mIzQzO1xuJiM0MzsjdW5kZWYgVFJBQ0VfU1lTVEVNXG4mIzQzOyNkZWZpbmUgVFJBQ0VfU1lTVEVNIHRlZ3JhX3ZwclxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHJhY2Vwb2ludC5oXHUwMDNlXG4mIzQzO1xuJiM0MztUUkFDRV9FVkVOVCh0ZWdyYV92cHJfY2h1bmtfYWN0aXZhdGUsXG4mIzQzO1x0VFBfUFJPVE8ocGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IGxpbWl0KSxcbiYjNDM7XHRUUF9BUkdTKHN0YXJ0LCBsaW1pdCksXG4mIzQzO1x0VFBfU1RSVUNUX19lbnRyeShcbiYjNDM7XHRcdF9fZmllbGQocGh5c19hZGRyX3QsIHN0YXJ0KVxuJiM0MztcdFx0X19maWVsZChwaHlzX2FkZHJfdCwgbGltaXQpXG4mIzQzO1x0KSxcbiYjNDM7XHRUUF9mYXN0X2Fzc2lnbihcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlc3RhcnQgPSBzdGFydDtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbGltaXQgPSBsaW1pdDtcbiYjNDM7XHQpLFxuJiM0MztcdFRQX3ByaW50ayhcJiMzNDslcGFwLSVwYXBcJiMzNDssIFx1MDAyNl9fZW50cnktXHUwMDNlc3RhcnQsXG4mIzQzO1x0XHQgIFx1MDAyNl9fZW50cnktXHUwMDNlbGltaXQpXG4mIzQzOyk7XG4mIzQzO1xuJiM0MztUUkFDRV9FVkVOVCh0ZWdyYV92cHJfY2h1bmtfZGVhY3RpdmF0ZSxcbiYjNDM7XHRUUF9QUk9UTyhwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgbGltaXQpLFxuJiM0MztcdFRQX0FSR1Moc3RhcnQsIGxpbWl0KSxcbiYjNDM7XHRUUF9TVFJVQ1RfX2VudHJ5KFxuJiM0MztcdFx0X19maWVsZChwaHlzX2FkZHJfdCwgc3RhcnQpXG4mIzQzO1x0XHRfX2ZpZWxkKHBoeXNfYWRkcl90LCBsaW1pdClcbiYjNDM7XHQpLFxuJiM0MztcdFRQX2Zhc3RfYXNzaWduKFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VzdGFydCA9IHN0YXJ0O1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VsaW1pdCA9IGxpbWl0O1xuJiM0MztcdCksXG4mIzQzO1x0VFBfcHJpbnRrKFwmIzM0OyVwYXAtJXBhcFwmIzM0OywgXHUwMDI2X19lbnRyeS1cdTAwM2VzdGFydCxcbiYjNDM7XHRcdCAgXHUwMDI2X19lbnRyeS1cdTAwM2VsaW1pdClcbiYjNDM7KTtcbiYjNDM7XG4mIzQzO1RSQUNFX0VWRU5UKHRlZ3JhX3Zwcl9zZXQsXG4mIzQzO1x0VFBfUFJPVE8ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSksXG4mIzQzO1x0VFBfQVJHUyhiYXNlLCBzaXplKSxcbiYjNDM7XHRUUF9TVFJVQ1RfX2VudHJ5KFxuJiM0MztcdFx0X19maWVsZChwaHlzX2FkZHJfdCwgc3RhcnQpXG4mIzQzO1x0XHRfX2ZpZWxkKHBoeXNfYWRkcl90LCBsaW1pdClcbiYjNDM7XHQpLFxuJiM0MztcdFRQX2Zhc3RfYXNzaWduKFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VzdGFydCA9IGJhc2U7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWxpbWl0ID0gYmFzZSAmIzQzOyBzaXplO1xuJiM0MztcdCksXG4mIzQzO1x0VFBfcHJpbnRrKFwmIzM0OyVwYXAtJXBhcFwmIzM0OywgXHUwMDI2X19lbnRyeS1cdTAwM2VzdGFydCwgXHUwMDI2X19lbnRyeS1cdTAwM2VsaW1pdClcbiYjNDM7KTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfVFJBQ0VfVEVHUkFfVlBSX0ggKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3RyYWNlL2RlZmluZV90cmFjZS5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9jb250aWd1b3VzLmMgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xuaW5kZXggZjc1NDA3OWEyODdkNjEuLjc5NzU1NTFmNjliM2Q5IDEwMDY0NFxuLS0tIGEva2VybmVsL2RtYS9jb250aWd1b3VzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvY29udGlndW91cy5jXG5AQCAtNTIsNyAmIzQzOzUyLDcgQEBcbiAjZGVmaW5lIENNQV9TSVpFX01CWVRFUyAwXG4gI2VuZGlmXG4gXG4tc3RhdGljIHN0cnVjdCBjbWEgKmRtYV9jb250aWd1b3VzX2FyZWFzW01BWF9DTUFfQVJFQVNdO1xuJiM0MztzdGF0aWMgc3RydWN0IGNtYSAqZG1hX2NvbnRpZ3VvdXNfYXJlYXNbTUFYX0VBUkxZX0NNQV9BUkVBU107XG4gc3RhdGljIHVuc2lnbmVkIGludCBkbWFfY29udGlndW91c19hcmVhc19udW07XG4gXG4gc3RhdGljIGludCBkbWFfY29udGlndW91c19pbnNlcnRfYXJlYShzdHJ1Y3QgY21hICpjbWEpXG5kaWZmIC0tZ2l0IGEvbW0vY21hLmMgYi9tbS9jbWEuY1xuaW5kZXggYTEzY2U0OTk5YjM5ZjYuLmY5ODllMmU5ODU5NGZiIDEwMDY0NFxuLS0tIGEvbW0vY21hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2NtYS5jXG5AQCAtMzQsNyAmIzQzOzM0LDEyIEBAXG4gI2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2NtYS5oXCYjMzQ7XG4gXG4tc3RydWN0IGNtYSBjbWFfYXJlYXNbTUFYX0NNQV9BUkVBU107XG4mIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoY21hX2xvY2spO1xuJiM0MztcbiYjNDM7c3RydWN0IGNtYSBjbWFfZWFybHlfYXJlYXNbTUFYX0VBUkxZX0NNQV9BUkVBU107XG4mIzQzO3Vuc2lnbmVkIGludCBjbWFfZWFybHlfYXJlYV9jb3VudDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBMSVNUX0hFQUQoY21hX2FyZWFzKTtcbiB1bnNpZ25lZCBpbnQgY21hX2FyZWFfY291bnQ7XG4gXG4gcGh5c19hZGRyX3QgY21hX2dldF9iYXNlKGNvbnN0IHN0cnVjdCBjbWEgKmNtYSlcbkBAIC0xOTgsNyAmIzQzOzIwMyw2IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBjbWFfYWN0aXZhdGVfYXJlYShzdHJ1Y3QgY21hICpjbWEpXG4gXHRcdFx0XHRmcmVlX3Jlc2VydmVkX3BhZ2UocGZuX3RvX3BhZ2UocGZuKSk7XG4gXHRcdH1cbiBcdH1cbi1cdHRvdGFsY21hX3BhZ2VzIC09IGNtYS1cdTAwM2Vjb3VudDtcbiBcdGNtYS1cdTAwM2VhdmFpbGFibGVfY291bnQgPSBjbWEtXHUwMDNlY291bnQgPSAwO1xuIFx0cHJfZXJyKFwmIzM0O0NNQSBhcmVhICVzIGNvdWxkIG5vdCBiZSBhY3RpdmF0ZWRcXG5cJiMzNDssIGNtYS1cdTAwM2VuYW1lKTtcbiB9XG5AQCAtMjA3LDggJiM0MzsyMTEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBjbWFfaW5pdF9yZXNlcnZlZF9hcmVhcyh2b2lkKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY21hX2FyZWFfY291bnQ7IGkmIzQzOyYjNDM7KVxuLVx0XHRjbWFfYWN0aXZhdGVfYXJlYShcdTAwMjZjbWFfYXJlYXNbaV0pO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNtYV9lYXJseV9hcmVhX2NvdW50OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGNtYV9hY3RpdmF0ZV9hcmVhKFx1MDAyNmNtYV9lYXJseV9hcmVhc1tpXSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMjE5LDQxICYjNDM7MjIzLDc3IEBAIHZvaWQgX19pbml0IGNtYV9yZXNlcnZlX3BhZ2VzX29uX2Vycm9yKHN0cnVjdCBjbWEgKmNtYSlcbiBcdHNldF9iaXQoQ01BX1JFU0VSVkVfUEFHRVNfT05fRVJST1IsIFx1MDAyNmNtYS1cdTAwM2VmbGFncyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgY21hX2luaXRfYXJlYShzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IGNoYXIgKm5hbWUsXG4mIzQzO1x0XHRcdFx0IHBoeXNfYWRkcl90IHNpemUsIHVuc2lnbmVkIGludCBvcmRlcl9wZXJfYml0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKG5hbWUpXG4mIzQzO1x0XHRzdHJzY3B5KGNtYS1cdTAwM2VuYW1lLCBuYW1lKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRzbnByaW50ZihjbWEtXHUwMDNlbmFtZSwgQ01BX01BWF9OQU1FLCAgXCYjMzQ7Y21hJWRcXG5cJiMzNDssIGNtYV9hcmVhX2NvdW50KTtcbiYjNDM7XG4mIzQzO1x0Y21hLVx1MDAzZWF2YWlsYWJsZV9jb3VudCA9IGNtYS1cdTAwM2Vjb3VudCA9IHNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0Y21hLVx1MDAzZW9yZGVyX3Blcl9iaXQgPSBvcmRlcl9wZXJfYml0O1xuJiM0MztcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZjbWEtXHUwMDNlbm9kZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBfX2luaXQgY21hX25ld19hcmVhKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90IHNpemUsXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBvcmRlcl9wZXJfYml0LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgY21hICoqcmVzX2NtYSlcbiB7XG4gXHRzdHJ1Y3QgY21hICpjbWE7XG4gXG4tXHRpZiAoY21hX2FyZWFfY291bnQgPT0gQVJSQVlfU0laRShjbWFfYXJlYXMpKSB7XG4mIzQzO1x0aWYgKGNtYV9lYXJseV9hcmVhX2NvdW50ID09IEFSUkFZX1NJWkUoY21hX2Vhcmx5X2FyZWFzKSkge1xuIFx0XHRwcl9lcnIoXCYjMzQ7Tm90IGVub3VnaCBzbG90cyBmb3IgQ01BIHJlc2VydmVkIHJlZ2lvbnMhXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FTk9TUEM7XG4gXHR9XG4gXG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZjbWFfbG9jayk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEVhY2ggcmVzZXJ2ZWQgYXJlYSBtdXN0IGJlIGluaXRpYWxpc2VkIGxhdGVyLCB3aGVuIG1vcmUga2VybmVsXG4gXHQgKiBzdWJzeXN0ZW1zIChsaWtlIHNsYWIgYWxsb2NhdG9yKSBhcmUgYXZhaWxhYmxlLlxuIFx0ICovXG4tXHRjbWEgPSBcdTAwMjZjbWFfYXJlYXNbY21hX2FyZWFfY291bnRdO1xuLVx0Y21hX2FyZWFfY291bnQmIzQzOyYjNDM7O1xuJiM0MztcdGNtYSA9IFx1MDAyNmNtYV9lYXJseV9hcmVhc1tjbWFfZWFybHlfYXJlYV9jb3VudF07XG4mIzQzO1x0Y21hX2Vhcmx5X2FyZWFfY291bnQmIzQzOyYjNDM7O1xuIFxuLVx0aWYgKG5hbWUpXG4tXHRcdHN0cnNjcHkoY21hLVx1MDAzZW5hbWUsIG5hbWUpO1xuLVx0ZWxzZVxuLVx0XHRzbnByaW50ZihjbWEtXHUwMDNlbmFtZSwgQ01BX01BWF9OQU1FLCAgXCYjMzQ7Y21hJWRcXG5cJiMzNDssIGNtYV9hcmVhX2NvdW50KTtcbiYjNDM7XHRjbWFfaW5pdF9hcmVhKGNtYSwgbmFtZSwgc2l6ZSwgb3JkZXJfcGVyX2JpdCk7XG4gXG4tXHRjbWEtXHUwMDNlYXZhaWxhYmxlX2NvdW50ID0gY21hLVx1MDAzZWNvdW50ID0gc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cdGNtYS1cdTAwM2VvcmRlcl9wZXJfYml0ID0gb3JkZXJfcGVyX2JpdDtcbi1cdCpyZXNfY21hID0gY21hO1xuIFx0dG90YWxjbWFfcGFnZXMgJiM0Mzs9IGNtYS1cdTAwM2Vjb3VudDtcbiYjNDM7XHQqcmVzX2NtYSA9IGNtYTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmNtYV9sb2NrKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2luaXQgY21hX2Ryb3BfYXJlYShzdHJ1Y3QgY21hICpjbWEpXG4ge1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2Y21hX2xvY2spO1xuIFx0dG90YWxjbWFfcGFnZXMgLT0gY21hLVx1MDAzZWNvdW50O1xuLVx0Y21hX2FyZWFfY291bnQtLTtcbiYjNDM7XHRjbWFfZWFybHlfYXJlYV9jb3VudC0tO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZjbWFfbG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGNtYV9jaGVja19tZW1vcnkocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdGlmICghc2l6ZSB8fCAhbWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ01BIHVzZXMgQ01BX01JTl9BTElHTk1FTlRfQllURVMgYXMgYWxpZ25tZW50IHJlcXVpcmVtZW50IHdoaWNoXG4mIzQzO1x0ICogbmVlZHMgcGFnZWJsb2NrX29yZGVyIHRvIGJlIGluaXRpYWxpemVkLiBMZXQmIzM5O3MgZW5mb3JjZSBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXBhZ2VibG9ja19vcmRlcikge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O3BhZ2VibG9ja19vcmRlciBub3QgeWV0IGluaXRpYWxpemVkLiBDYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3Q/XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogZW5zdXJlIG1pbmltYWwgYWxpZ25tZW50IHJlcXVpcmVkIGJ5IG1tIGNvcmUgKi9cbiYjNDM7XHRpZiAoIUlTX0FMSUdORUQoYmFzZSB8IHNpemUsIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtMjc2LDIyICYjNDM7MzE2LDkgQEAgaW50IF9faW5pdCBjbWFfaW5pdF9yZXNlcnZlZF9tZW0ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcbiBcdHN0cnVjdCBjbWEgKmNtYTtcbiBcdGludCByZXQ7XG4gXG4tXHQvKiBTYW5pdHkgY2hlY2tzICovXG4tXHRpZiAoIXNpemUgfHwgIW1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHQvKlxuLVx0ICogQ01BIHVzZXMgQ01BX01JTl9BTElHTk1FTlRfQllURVMgYXMgYWxpZ25tZW50IHJlcXVpcmVtZW50IHdoaWNoXG4tXHQgKiBuZWVkcyBwYWdlYmxvY2tfb3JkZXIgdG8gYmUgaW5pdGlhbGl6ZWQuIExldCYjMzk7cyBlbmZvcmNlIGl0LlxuLVx0ICovXG4tXHRpZiAoIXBhZ2VibG9ja19vcmRlcikge1xuLVx0XHRwcl9lcnIoXCYjMzQ7cGFnZWJsb2NrX29yZGVyIG5vdCB5ZXQgaW5pdGlhbGl6ZWQuIENhbGxlZCBkdXJpbmcgZWFybHkgYm9vdD9cXG5cJiMzNDspO1xuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdH1cbi1cbi1cdC8qIGVuc3VyZSBtaW5pbWFsIGFsaWdubWVudCByZXF1aXJlZCBieSBtbSBjb3JlICovXG4tXHRpZiAoIUlTX0FMSUdORUQoYmFzZSB8IHNpemUsIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0cmV0ID0gY21hX2NoZWNrX21lbW9yeShiYXNlLCBzaXplKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IGNtYV9uZXdfYXJlYShuYW1lLCBzaXplLCBvcmRlcl9wZXJfYml0LCBcdTAwMjZjbWEpO1xuIFx0aWYgKHJldCAhPSAwKVxuQEAgLTQ0NCw3ICYjNDM7NDcxLDcgQEAgc3RhdGljIGludCBfX2luaXQgX19jbWFfZGVjbGFyZV9jb250aWd1b3VzX25pZChwaHlzX2FkZHJfdCAqYmFzZXAsXG4gXHRwcl9kZWJ1ZyhcJiMzNDslcyhzaXplICVwYSwgYmFzZSAlcGEsIGxpbWl0ICVwYSBhbGlnbm1lbnQgJXBhKVxcblwmIzM0OyxcbiBcdFx0X19mdW5jX18sIFx1MDAyNnNpemUsIFx1MDAyNmJhc2UsIFx1MDAyNmxpbWl0LCBcdTAwMjZhbGlnbm1lbnQpO1xuIFxuLVx0aWYgKGNtYV9hcmVhX2NvdW50ID09IEFSUkFZX1NJWkUoY21hX2FyZWFzKSkge1xuJiM0MztcdGlmIChjbWFfZWFybHlfYXJlYV9jb3VudCA9PSBBUlJBWV9TSVpFKGNtYV9lYXJseV9hcmVhcykpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O05vdCBlbm91Z2ggc2xvdHMgZm9yIENNQSByZXNlcnZlZCByZWdpb25zIVxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRU5PU1BDO1xuIFx0fVxuQEAgLTEwNTEsMTIgJiM0MzsxMDc4LDEyIEBAIGJvb2wgY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLWludCBjbWFfZm9yX2VhY2hfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSlcbiYjNDM7aW50IGNtYV9mb3JfZWFjaF9lYXJseV9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY21hX2FyZWFfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGludCByZXQgPSBpdChcdTAwMjZjbWFfYXJlYXNbaV0sIGRhdGEpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNtYV9lYXJseV9hcmVhX2NvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aW50IHJldCA9IGl0KFx1MDAyNmNtYV9lYXJseV9hcmVhc1tpXSwgZGF0YSk7XG4gXG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbkBAIC0xMDY1LDYgJiM0MzsxMDkyLDI1IEBAIGludCBjbWFfZm9yX2VhY2hfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7aW50IGNtYV9mb3JfZWFjaF9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNtYSAqY21hO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmNtYV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShjbWEsIFx1MDAyNmNtYV9hcmVhcywgbm9kZSkge1xuJiM0MztcdFx0aW50IHJldCA9IGl0KGNtYSwgZGF0YSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2Y21hX2xvY2spO1xuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmNtYV9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBib29sIGNtYV9pbnRlcnNlY3RzKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4ge1xuIFx0aW50IHI7XG5AQCAtMTE0NywzICYjNDM7MTE5Myw3NCBAQCB2b2lkIF9faW5pdCAqY21hX3Jlc2VydmVfZWFybHkoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIHNpemUpXG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiYjNDM7XG4mIzQzO3N0cnVjdCBjbWEgKl9faW5pdCBjbWFfY3JlYXRlKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXG4mIzQzO1x0XHRcdCAgICAgIHVuc2lnbmVkIGludCBvcmRlcl9wZXJfYml0LCBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNtYSAqY21hO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGNtYV9jaGVja19tZW1vcnkoYmFzZSwgc2l6ZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1xuJiM0MztcdGNtYSA9IGt6YWxsb2Nfb2JqKCpjbWEsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghY21hKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1xuJiM0MztcdGNtYV9pbml0X2FyZWEoY21hLCBuYW1lLCBzaXplLCBvcmRlcl9wZXJfYml0KTtcbiYjNDM7XHRjbWEtXHUwMDNlcmFuZ2VzWzBdLmJhc2VfcGZuID0gUEZOX0RPV04oYmFzZSk7XG4mIzQzO1x0Y21hLVx1MDAzZXJhbmdlc1swXS5lYXJseV9wZm4gPSBQRk5fRE9XTihiYXNlKTtcbiYjNDM7XHRjbWEtXHUwMDNlcmFuZ2VzWzBdLmNvdW50ID0gY21hLVx1MDAzZWNvdW50O1xuJiM0MztcdGNtYS1cdTAwM2VucmFuZ2VzID0gMTtcbiYjNDM7XG4mIzQzO1x0Y21hX2FjdGl2YXRlX2FyZWEoY21hKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZjbWFfbG9jayk7XG4mIzQzO1x0bGlzdF9hZGRfdGFpbChcdTAwMjZjbWEtXHUwMDNlbm9kZSwgXHUwMDI2Y21hX2FyZWFzKTtcbiYjNDM7XHR0b3RhbGNtYV9wYWdlcyAmIzQzOz0gY21hLVx1MDAzZWNvdW50O1xuJiM0MztcdGNtYV9hcmVhX2NvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2Y21hX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY21hO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGNtYV9mcmVlKHN0cnVjdCBjbWEgKmNtYSlcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNhZmV0eSBjaGVjayB0byBwcmV2ZW50IGEgQ01BIHdpdGggYWN0aXZlIGFsbG9jYXRpb25zIGZyb20gYmVpbmdcbiYjNDM7XHQgKiByZWxlYXNlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbWEtXHUwMDNlbnJhbmdlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbmJpdHMgPSBjbWFfYml0bWFwX21heG5vKGNtYSwgXHUwMDI2Y21hLVx1MDAzZXJhbmdlc1tpXSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFiaXRtYXBfZW1wdHkoY21hLVx1MDAzZXJhbmdlc1tpXS5iaXRtYXAsIG5iaXRzKSkge1xuJiM0MztcdFx0XHRXQVJOKDEsIFwmIzM0OyVzOiByYW5nZSAldSBub3QgZW1wdHlcXG5cJiMzNDssIGNtYS1cdTAwM2VuYW1lLCBpKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogZnJlZSByZXNlcnZlZCBwYWdlcyBhbmQgdGhlIGJpdG1hcCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNtYS1cdTAwM2VucmFuZ2VzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGNtYV9tZW1yYW5nZSAqY21yID0gXHUwMDI2Y21hLVx1MDAzZXJhbmdlc1tpXTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgZW5kX3BmbiwgcGZuO1xuJiM0MztcbiYjNDM7XHRcdGVuZF9wZm4gPSBjbXItXHUwMDNlYmFzZV9wZm4gJiM0MzsgY21yLVx1MDAzZWNvdW50O1xuJiM0MztcdFx0Zm9yIChwZm4gPSBjbXItXHUwMDNlYmFzZV9wZm47IHBmbiBcdTAwM2MgZW5kX3BmbjsgcGZuJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0ZnJlZV9yZXNlcnZlZF9wYWdlKHBmbl90b19wYWdlKHBmbikpO1xuJiM0MztcbiYjNDM7XHRcdGJpdG1hcF9mcmVlKGNtci1cdTAwM2ViaXRtYXApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfZGVzdHJveShcdTAwMjZjbWEtXHUwMDNlYWxsb2NfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmNtYV9sb2NrKTtcbiYjNDM7XHR0b3RhbGNtYV9wYWdlcyAtPSBjbWEtXHUwMDNlY291bnQ7XG4mIzQzO1x0bGlzdF9kZWwoXHUwMDI2Y21hLVx1MDAzZW5vZGUpO1xuJiM0MztcdGNtYV9hcmVhX2NvdW50LS07XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmNtYV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUoY21hKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL21tL2NtYS5oIGIvbW0vY21hLmhcbmluZGV4IGM3MDE4MGMzNjU1OWMyLi5hZTRkYjk4MTllMzhkYiAxMDA2NDRcbi0tLSBhL21tL2NtYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9jbWEuaFxuQEAgLTQxLDYgJiM0Mzs0MSw3IEBAIHN0cnVjdCBjbWEge1xuIFx0dW5zaWduZWQgbG9uZ1x0YXZhaWxhYmxlX2NvdW50O1xuIFx0dW5zaWduZWQgaW50IG9yZGVyX3Blcl9iaXQ7IC8qIE9yZGVyIG9mIHBhZ2VzIHJlcHJlc2VudGVkIGJ5IG9uZSBiaXQgKi9cbiBcdHNwaW5sb2NrX3RcdGxvY2s7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBub2RlO1xuIFx0c3RydWN0IG11dGV4IGFsbG9jX211dGV4O1xuICNpZmRlZiBDT05GSUdfQ01BX0RFQlVHRlNcbiBcdHN0cnVjdCBobGlzdF9oZWFkIG1lbV9oZWFkO1xuQEAgLTcxLDggJiM0Mzs3Miw4IEBAIGVudW0gY21hX2ZsYWdzIHtcbiBcdENNQV9BQ1RJVkFURUQsXG4gfTtcbiBcbi1leHRlcm4gc3RydWN0IGNtYSBjbWFfYXJlYXNbTUFYX0NNQV9BUkVBU107XG4tZXh0ZXJuIHVuc2lnbmVkIGludCBjbWFfYXJlYV9jb3VudDtcbiYjNDM7ZXh0ZXJuIHN0cnVjdCBjbWEgY21hX2Vhcmx5X2FyZWFzW01BWF9FQVJMWV9DTUFfQVJFQVNdO1xuJiM0MztleHRlcm4gdW5zaWduZWQgaW50IGNtYV9lYXJseV9hcmVhX2NvdW50O1xuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjbWFfYml0bWFwX21heG5vKHN0cnVjdCBjbWEgKmNtYSxcbiBcdFx0c3RydWN0IGNtYV9tZW1yYW5nZSAqY21yKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgRE1BLUJVRiBoZWFwIGZvciBOVklESUEgVGVncmEgVmlkZW8tUHJvdGVjdGlvbi1SZWdpb24gKFZQUikuIFRoZSBkcml2ZXIgKHRlZ3JhLXZwci5jKSBvbmx5IGluaXRpYWxpemVzIGlmIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZSAoJiMzOTtudmlkaWEsdGVncmEtdmlkZW8tcHJvdGVjdGlvbi1yZWdpb24mIzM5OykgaXMgcHJlc2VudCwgd2hpY2ggaXMgbm90IHRoZSBjYXNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEZ1cnRoZXJtb3JlLCB0aGUgZHJpdmVyIHJlbGllcyBvbiBUZWdyYS1zcGVjaWZpYyBTTUMgY2FsbHMgdG8gYSBzZWN1cmUgbW9uaXRvci4gVGhlIGNoYW5nZXMgdG8gY29yZSBDTUEgbG9naWMgKG1tL2NtYS5jKSBhcmUgZWl0aGVyIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIGVhcmx5IGJvb3Qgb3IgYXJlIGRlYWQgY29kZSAoZS5nLiwgY21hX2Zvcl9lYWNoX2FyZWEgaGFzIG5vIGNhbGxlcnMpLiBUaGVyZWZvcmUsIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIzMGQ2OTU3NmExZGE2MjQxMDMwY2I0ZWRiMzJlMDE5Nzk0M2UxYjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxIDIzOjM1OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdGVncmEvbnZpZGlhLHRlZ3JhMTI0LXZpYy55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdGVncmEvbnZpZGlhLHRlZ3JhMTI0LXZpYy55YW1sCmluZGV4IDcyMDAwOTVlZjE5ZTNjLi4xZTI3YTczMWFkOWFkMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdGVncmEvbnZpZGlhLHRlZ3JhMTI0LXZpYy55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTEyNC12aWMueWFtbApAQCAtNjcsNiAmIzQzOzY3LDE0IEBAIHByb3BlcnRpZXM6CiAgICAgICAtIGNvbnN0OiBkbWEtbWVtICMgcmVhZAogICAgICAgLSBjb25zdDogd3JpdGUKIAomIzQzOyAgbWVtb3J5LXJlZ2lvbjoKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogcmVmZXJlbmNlIHRvIHRoZSB2aWRlbyBwcm90ZWN0aW9uIG1lbW9yeSByZWdpb24KJiM0MzsKJiM0MzsgIG1lbW9yeS1yZWdpb24tbmFtZXM6CiYjNDM7ICAgIGl0ZW1zOgomIzQzOyAgICAgIC0gY29uc3Q6IHByb3RlY3RlZAomIzQzOwogICBkbWEtY29oZXJlbnQ6IHRydWUKIAogYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmExODYtZGMueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTE4Ni1kYy55YW1sCmluZGV4IGNlNDU4OTQ2NmExODZiLi44ODFiZmJmNDc2NGRmYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdGVncmEvbnZpZGlhLHRlZ3JhMTg2LWRjLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdGVncmEvbnZpZGlhLHRlZ3JhMTg2LWRjLnlhbWwKQEAgLTU3LDYgJiM0Mzs1NywxNiBAQCBwcm9wZXJ0aWVzOgogICAgICAgLSBjb25zdDogZG1hLW1lbSAjIHJlYWQtMAogICAgICAgLSBjb25zdDogcmVhZC0xCiAKJiM0MzsgIG1lbW9yeS1yZWdpb246CiYjNDM7ICAgIG1pbkl0ZW1zOiAxCiYjNDM7ICAgIG1heEl0ZW1zOiAyCiYjNDM7CiYjNDM7ICBtZW1vcnktcmVnaW9uLW5hbWVzOgomIzQzOyAgICBpdGVtczoKJiM0MzsgICAgICBlbnVtOiBbIGZyYW1lYnVmZmVyLCBwcm90ZWN0ZWQgXQomIzQzOyAgICBtaW5JdGVtczogMQomIzQzOyAgICBtYXhJdGVtczogMgomIzQzOwogICBudmlkaWEsb3V0cHV0czoKICAgICBkZXNjcmlwdGlvbjogQSBsaXN0IG9mIHBoYW5kbGVzIG9mIG91dHB1dHMgdGhhdCB0aGlzIGRpc3BsYXkKICAgICAgIGNvbnRyb2xsZXIgY2FuIGRyaXZlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdGVncmEvbnZpZGlhLHRlZ3JhMjAtZGMueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTIwLWRjLnlhbWwKaW5kZXggNjliZTk1YWZkNTYyNzcuLmEwMTI2NDRlZWI3ZDdhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmEyMC1kYy55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTIwLWRjLnlhbWwKQEAgLTY1LDcgJiM0Mzs2NSwxNSBAQCBwcm9wZXJ0aWVzOgogICAgIGl0ZW1zOgogICAgICAgLSBkZXNjcmlwdGlvbjogcGhhbmRsZSB0byB0aGUgY29yZSBwb3dlciBkb21haW4KIAotICBtZW1vcnktcmVnaW9uOiB0cnVlCiYjNDM7ICBtZW1vcnktcmVnaW9uOgomIzQzOyAgICBtaW5JdGVtczogMQomIzQzOyAgICBtYXhJdGVtczogMgomIzQzOwomIzQzOyAgbWVtb3J5LXJlZ2lvbi1uYW1lczoKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgZW51bTogWyBmcmFtZWJ1ZmZlciwgcHJvdGVjdGVkIF0KJiM0MzsgICAgbWluSXRlbXM6IDEKJiM0MzsgICAgbWF4aXRlbXM6IDIKIAogICBudmlkaWEsaGVhZDoKICAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy91aW50MzIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTIwLWhvc3QxeC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdGVncmEvbnZpZGlhLHRlZ3JhMjAtaG9zdDF4LnlhbWwKaW5kZXggMzU2MzM3OGEwMWFmNDcuLmY0NWJlMzA4MzVhOGIzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmEyMC1ob3N0MXgueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmEyMC1ob3N0MXgueWFtbApAQCAtOTYsNiAmIzQzOzk2LDEzIEBAIHByb3BlcnRpZXM6CiAgICAgaXRlbXM6CiAgICAgICAtIGRlc2NyaXB0aW9uOiBwaGFuZGxlIHRvIHRoZSBIRUcgb3IgY29yZSBwb3dlciBkb21haW4KIAomIzQzOyAgbWVtb3J5LXJlZ2lvbjoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsKJiM0MzsgIG1lbW9yeS1yZWdpb24tbmFtZXM6CiYjNDM7ICAgIGl0ZW1zOgomIzQzOyAgICAgIC0gY29uc3Q6IHByb3RlY3RlZAomIzQzOwogcmVxdWlyZWQ6CiAgIC0gY29tcGF0aWJsZQogICAtIGludGVycnVwdHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncHUvaG9zdDF4L252aWRpYSx0ZWdyYTIzNC1udmRlYy55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwdS9ob3N0MXgvbnZpZGlhLHRlZ3JhMjM0LW52ZGVjLnlhbWwKaW5kZXggMGI3NTYxYzhiOWJiMmMuLjcyMzEzZjc3NmRiZDhmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3B1L2hvc3QxeC9udmlkaWEsdGVncmEyMzQtbnZkZWMueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3B1L2hvc3QxeC9udmlkaWEsdGVncmEyMzQtbnZkZWMueWFtbApAQCAtNjAsNiAmIzQzOzYwLDE0IEBAIHByb3BlcnRpZXM6CiAgICAgICAtIGNvbnN0OiBkbWEtbWVtCiAgICAgICAtIGNvbnN0OiB3cml0ZQogCiYjNDM7ICBtZW1vcnktcmVnaW9uOgomIzQzOyAgICBpdGVtczoKJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiByZWZlcmVuY2UgdG8gdGhlIHZpZGVvIHByb3RlY3Rpb24gbWVtb3J5IHJlZ2lvbgomIzQzOwomIzQzOyAgbWVtb3J5LXJlZ2lvbi1uYW1lczoKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgLSBjb25zdDogcHJvdGVjdGVkCiYjNDM7CiAgIG52aWRpYSxtZW1vcnktY29udHJvbGxlcjoKICAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9waGFuZGxlCiAgICAgZGVzY3JpcHRpb246CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVzZXJ2ZWQtbWVtb3J5L252aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvbi55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Jlc2VydmVkLW1lbW9yeS9udmlkaWEsdGVncmEtdmlkZW8tcHJvdGVjdGlvbi1yZWdpb24ueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMWM1MjRiYWU5Y2UzMjAKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVzZXJ2ZWQtbWVtb3J5L252aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvbi55YW1sCkBAIC0wLDAgJiM0MzsxLDc2IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAgT1IgQlNELTItQ2xhdXNlKQomIzQzOyVZQU1MIDEuMgomIzQzOy0tLQomIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvcmVzZXJ2ZWQtbWVtb3J5L252aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvbi55YW1sIwomIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sIwomIzQzOwomIzQzO3RpdGxlOiBOVklESUEgVGVncmEgVmlkZW8gUHJvdGVjdGlvbiBSZWdpb24gKFZQUikKJiM0MzsKJiM0MzttYWludGFpbmVyczoKJiM0MzsgIC0gVGhpZXJyeSBSZWRpbmcgJmx0O3RoaWVycnkucmVkaW5nQGdtYWlsLmNvbSZndDsKJiM0MzsgIC0gSm9uIEh1bnRlciAmbHQ7am9uYXRoYW5oQG52aWRpYS5jb20mZ3Q7CiYjNDM7CiYjNDM7ZGVzY3JpcHRpb246IHwKJiM0MzsgIE5WSURJQSBUZWdyYSBjaGlwcyBoYXZlIGxvbmcgc3VwcG9ydGVkIGEgbWVjaGFuaXNtIHRvIHByb3RlY3QgYSBzaW5nbGUsCiYjNDM7ICBjb250aWd1b3VzIG1lbW9yeSByZWdpb24gZnJvbSBub24tc2VjdXJlIG1lbW9yeSBhY2Nlc3Nlcy4gVHlwaWNhbGx5IHRoaXMKJiM0MzsgIHJlZ2lvbiBpcyB1c2VkIGZvciBkZWNvZGluZyBhbmQgcGxheWJhY2sgb2YgRFJNIHByb3RlY3RlZCBjb250ZW50LiBWYXJpb3VzCiYjNDM7ICBkZXZpY2VzLCBzdWNoIGFzIHRoZSBkaXNwbGF5IGNvbnRyb2xsZXIgYW5kIG11bHRpbWVkaWEgZW5naW5lcyAodmlkZW8KJiM0MzsgIGRlY29kZXIpIGNhbiBhY2Nlc3MgdGhpcyByZWdpb24gaW4gYSBzZWN1cmUgd2F5LiBBY2Nlc3MgZnJvbSB0aGUgQ1BVIGlzCiYjNDM7ICBnZW5lcmFsbHkgZm9yYmlkZGVuLgomIzQzOwomIzQzOyAgVHdvIHZhcmlhbnRzIGV4aXN0IGZvciBWUFI6IG9uZSBpcyBmaXhlZCBpbiBib3RoIHRoZSBiYXNlIGFkZHJlc3MgYW5kIHNpemUsCiYjNDM7ICB3aGlsZSB0aGUgb3RoZXIgaXMgcmVzaXphYmxlLiBGaXhlZCBWUFIgY2FuIGJlIGRlc2NyaWJlZCBieSBqdXN0IGEgJiMzNDtyZWcmIzM0OwomIzQzOyAgcHJvcGVydHkgc3BlY2lmeWluZyB0aGUgYmFzZSBhZGRyZXNzIGFuZCBzaXplLCB3aGVyZWFzIHRoZSByZXNpemFibGUgVlBSCiYjNDM7ICBpcyBkZWZpbmVkIGJ5IGEgc2l6ZS9hbGlnbm1lbnQgcGFpciBvZiBwcm9wZXJ0aWVzLiBGb3IgcmVzaXphYmxlIFZQUiB0aGUKJiM0MzsgIG1lbW9yeSBpcyByZXVzYWJsZSBieSB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtIHdoZW4gaXQmIzM5O3MgdW51c2VkIGZvciBWUFIgYW5kCiYjNDM7ICB0aGVyZWZvcmUgdGhlICYjMzQ7cmV1c2FibGUmIzM0OyBwcm9wZXJ0eSBtdXN0IGJlIHNwZWNpZmllZCBhbG9uZyB3aXRoIGl0LiBGb3IgYQomIzQzOyAgZml4ZWQgVlBSLCB0aGUgbWVtb3J5IGlzIHBlcm1hbmVudGx5IHByb3RlY3RlZCwgYW5kIHRoZXJlZm9yZSBpdCYjMzk7cyBub3QKJiM0MzsgIHJldXNhYmxlIGFuZCBtdXN0IGFsc28gYmUgbWFya2VkIGFzICYjMzQ7bm8tbWFwJiMzNDsgdG8gcHJldmVudCBhbnkgKGluY2x1ZGluZwomIzQzOyAgc3BlY3VsYXRpdmUpIGFjY2Vzc2VzIHRvIGl0LgomIzQzOwomIzQzO2FsbE9mOgomIzQzOyAgLSAkcmVmOiByZXNlcnZlZC1tZW1vcnkueWFtbAomIzQzOwomIzQzO3Byb3BlcnRpZXM6CiYjNDM7ICBjb21wYXRpYmxlOgomIzQzOyAgICBjb25zdDogbnZpZGlhLHRlZ3JhLXZpZGVvLXByb3RlY3Rpb24tcmVnaW9uCiYjNDM7CiYjNDM7ZGVwZW5kZW5jaWVzOgomIzQzOyAgc2l6ZTogW2FsaWdubWVudCwgcmV1c2FibGVdCiYjNDM7ICBhbGlnbm1lbnQ6IFtzaXplLCByZXVzYWJsZV0KJiM0MzsgIHJldXNhYmxlOiBbYWxpZ25tZW50LCBzaXplXQomIzQzOwomIzQzOyAgcmVnOiBbbm8tbWFwXQomIzQzOyAgbm8tbWFwOiBbcmVnXQomIzQzOwomIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2UKJiM0MzsKJiM0MztvbmVPZjoKJiM0MzsgIC0gcmVxdWlyZWQ6CiYjNDM7ICAgICAgLSBjb21wYXRpYmxlCiYjNDM7ICAgICAgLSByZWcKJiM0MzsKJiM0MzsgIC0gcmVxdWlyZWQ6CiYjNDM7ICAgICAgLSBjb21wYXRpYmxlCiYjNDM7ICAgICAgLSBzaXplCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgLyogcmVzaXphYmxlIFZQUiAqLwomIzQzOyAgICBwcm90ZWN0ZWQgewomIzQzOyAgICAgIGNvbXBhdGlibGUgPSAmIzM0O252aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvbiYjMzQ7OwomIzQzOwomIzQzOyAgICAgIHNpemUgPSAmbHQ7MHgwIDB4NzAwMDAwMDAmZ3Q7OwomIzQzOyAgICAgIGFsaWdubWVudCA9ICZsdDsweDAgMHgxMDAwMDAmZ3Q7OwomIzQzOyAgICAgIHJldXNhYmxlOwomIzQzOyAgICB9OwomIzQzOwomIzQzOyAgLSB8CiYjNDM7ICAgIC8qIGZpeGVkIFZQUiAqLwomIzQzOyAgICBwcm90ZWN0ZWRAMmE4MDAwMDAwIHsKJiM0MzsgICAgICBjb21wYXRpYmxlID0gJiMzNDtudmlkaWEsdGVncmEtdmlkZW8tcHJvdGVjdGlvbi1yZWdpb24mIzM0OzsKJiM0MzsKJiM0MzsgICAgICAvKiBmaXhlZCBWUFIgKi8KJiM0MzsgICAgICByZWcgPSAmbHQ7MHgyIDB4YTgwMDAwMDAgMHgwIDB4NzAwMDAwMDAmZ3Q7OwomIzQzOyAgICAgIG5vLW1hcDsKJiM0MzsgICAgfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCmluZGV4IGY5YmM1M2I2MGY5OTc0Li45MzQ5NTJhYjIxMDI3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCkBAIC0yNTQsNyAmIzQzOzI1NCw3IEBAIHN0cnVjdCBkbWFfY29udGlnX2Vhcmx5X3Jlc2VydmUgewogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZG1hX2NvbnRpZ19lYXJseV9yZXNlcnZlIGRtYV9tbXVfcmVtYXBbTUFYX0NNQV9BUkVBU10gX19pbml0ZGF0YTsKJiM0MztzdGF0aWMgc3RydWN0IGRtYV9jb250aWdfZWFybHlfcmVzZXJ2ZSBkbWFfbW11X3JlbWFwW01BWF9FQVJMWV9DTUFfQVJFQVNdIF9faW5pdGRhdGE7CiAKIHN0YXRpYyBpbnQgZG1hX21tdV9yZW1hcF9udW0gX19pbml0ZGF0YTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9udmlkaWEvdGVncmEyMzQuZHRzaSBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvbnZpZGlhL3RlZ3JhMjM0LmR0c2kKaW5kZXggOGUwYzUxZTQ5NmUyMGQuLjM4NjM3ZThlNmZjOTJjIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL252aWRpYS90ZWdyYTIzNC5kdHNpCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvbnZpZGlhL3RlZ3JhMjM0LmR0c2kKQEAgLTI5LDYgJiM0MzsyOSw0NSBAQCBhbGlhc2VzIHsKIAkJaTJjOCA9ICZhbXA7ZHBfYXV4X2NoM19pMmM7CiAJfTsKIAomIzQzOwlyZXNlcnZlZC1tZW1vcnkgewomIzQzOwkJI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MiZndDs7CiYjNDM7CQkjc2l6ZS1jZWxscyA9ICZsdDsyJmd0OzsKJiM0MzsJCXJhbmdlczsKJiM0MzsKJiM0MzsJCXZwcjogcHJvdGVjdGVkIHsKJiM0MzsJCQljb21wYXRpYmxlID0gJiMzNDtudmlkaWEsdGVncmEtdmlkZW8tcHJvdGVjdGlvbi1yZWdpb24mIzM0OzsKJiM0MzsJCQlzdGF0dXMgPSAmIzM0O2Rpc2FibGVkJiMzNDs7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBUd28gdmFyaWFudHMgZXhpc3QgZm9yIHRoaXMuIEZvciBmaXhlZCBWUFIsIHRoZQomIzQzOwkJCSAqIGZpcm13YXJlIGlzIHN1cHBvc2VkIHRvIHVwZGF0ZSB0aGUgJiMzNDtyZWcmIzM0OyBwcm9wZXJ0eQomIzQzOwkJCSAqIHdpdGggdGhlIGZpeGVkIG1lbW9yeSByZWdpb24gY29uZmlndXJlZCBhcyBWUFIuCiYjNDM7CQkJICoKJiM0MzsJCQkgKiBGb3IgcmVzaXphYmxlIFZQUiB3ZSBkb24mIzM5O3QgY2FyZSBhYm91dCB0aGUgZXhhY3QKJiM0MzsJCQkgKiBhZGRyZXNzIGFuZCBpbnN0ZWFkIHdhbnQgYSByZXNlcnZlZCByZWdpb24gdG8gYmUKJiM0MzsJCQkgKiBhbGxvY2F0ZWQgd2l0aCBhIGNlcnRhaW4gc2l6ZSBhbmQgYWxpZ25tZW50IGF0CiYjNDM7CQkJICogYm9vdCB0aW1lLgomIzQzOwkJCSAqCiYjNDM7CQkJICogVGhlIGJlbG93IGFzc3VtZXMgcmVzaXphYmxlIFZQUiBieSBkZWZhdWx0LiBJZiB0aGUKJiM0MzsJCQkgKiBmaXJtd2FyZXMgc2V0cyB1cCBmaXhlZCBWUFIsIGl0IGlzIHJlc3BvbnNpYmxlIGZvcgomIzQzOwkJCSAqIGFkZGluZyB0aGUgbWlzc2luZyAmIzM0O3JlZyYjMzQ7IHByb3BlcnR5LCByZW1vdmluZyBhbnkgb2YKJiM0MzsJCQkgKiB0aGUgdW51c2VkIHByb3BlcnRpZXMsIGFzIHdlbGwgYXMgYWRkaW5nIGEgdW5pdC0KJiM0MzsJCQkgKiBhZGRyZXNzIG1hdGNoaW5nIHRoZSAmIzM0O3JlZyYjMzQ7IHByb3BlcnR5LgomIzQzOwkJCSAqLwomIzQzOwomIzQzOwkJCS8qIGZpeGVkIFZQUiAqLwomIzQzOwkJCS8qCiYjNDM7CQkJcmVnID0gJmx0OzB4MCAweDAgMHgwIDB4MCZndDs7CiYjNDM7CQkJbm8tbWFwOwomIzQzOwkJCSovCiYjNDM7CiYjNDM7CQkJLyogcmVzaXphYmxlIFZQUiAqLwomIzQzOwkJCXNpemUgPSAmbHQ7MHgwIDB4NzAwMDAwMDAmZ3Q7OwomIzQzOwkJCWFsaWdubWVudCA9ICZsdDsweDAgMHgxMDAwMDAmZ3Q7OwomIzQzOwkJCXJldXNhYmxlOwomIzQzOwkJfTsKJiM0MzsJfTsKJiM0MzsKIAlidXNAMCB7CiAJCWNvbXBhdGlibGUgPSAmIzM0O3NpbXBsZS1idXMmIzM0OzsKIApAQCAtNDQ0MCw2ICYjNDM7NDQ3OSw5IEBAIHZpY0AxNTM0MDAwMCB7CiAJCQkJaW50ZXJjb25uZWN0LW5hbWVzID0gJiMzNDtkbWEtbWVtJiMzNDssICYjMzQ7d3JpdGUmIzM0OzsKIAkJCQlpb21tdXMgPSAmbHQ7JmFtcDtzbW11X25pc28xIFRFR1JBMjM0X1NJRF9WSUMmZ3Q7OwogCQkJCWRtYS1jb2hlcmVudDsKJiM0MzsKJiM0MzsJCQkJbWVtb3J5LXJlZ2lvbiA9ICZsdDsmYW1wO3ZwciZndDs7CiYjNDM7CQkJCW1lbW9yeS1yZWdpb24tbmFtZXMgPSAmIzM0O3Byb3RlY3RlZCYjMzQ7OwogCQkJfTsKIAogCQkJbnZkZWNAMTU0ODAwMDAgewpAQCAtNDQ1OCw2ICYjNDM7NDUwMCw5IEBAIG52ZGVjQDE1NDgwMDAwIHsKIAkJCQlpb21tdXMgPSAmbHQ7JmFtcDtzbW11X25pc28xIFRFR1JBMjM0X1NJRF9OVkRFQyZndDs7CiAJCQkJZG1hLWNvaGVyZW50OwogCiYjNDM7CQkJCW1lbW9yeS1yZWdpb24gPSAmbHQ7JmFtcDt2cHImZ3Q7OwomIzQzOwkJCQltZW1vcnktcmVnaW9uLW5hbWVzID0gJiMzNDtwcm90ZWN0ZWQmIzM0OzsKJiM0MzsKIAkJCQludmlkaWEsbWVtb3J5LWNvbnRyb2xsZXIgPSAmbHQ7JmFtcDttYyZndDs7CiAKIAkJCQkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9udmlkaWEvdGVncmEyNjQuZHRzaSBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvbnZpZGlhL3RlZ3JhMjY0LmR0c2kKaW5kZXggMmQ4ZTdlMzc4MzBmZjIuLmNjOTNjNjgyMmE3Mzk3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL252aWRpYS90ZWdyYTI2NC5kdHNpCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvbnZpZGlhL3RlZ3JhMjY0LmR0c2kKQEAgLTIzLDYgJiM0MzsyMywzOSBAQCBzaG1lbV9icG1wOiBzaG1lbUA4NjA3MDAwMCB7CiAJCQlyZWcgPSAmbHQ7MHgwIDB4ODYwNzAwMDAgMHgwIDB4MjAwMCZndDs7CiAJCQluby1tYXA7CiAJCX07CiYjNDM7CiYjNDM7CQl2cHI6IHByb3RlY3RlZCB7CiYjNDM7CQkJY29tcGF0aWJsZSA9ICYjMzQ7bnZpZGlhLHRlZ3JhLXZpZGVvLXByb3RlY3Rpb24tcmVnaW9uJiMzNDs7CiYjNDM7CQkJc3RhdHVzID0gJiMzNDtkaXNhYmxlZCYjMzQ7OwomIzQzOwomIzQzOwkJCS8qCiYjNDM7CQkJICogVHdvIHZhcmlhbnRzIGV4aXN0IGZvciB0aGlzLiBGb3IgZml4ZWQgVlBSLCB0aGUKJiM0MzsJCQkgKiBmaXJtd2FyZSBpcyBzdXBwb3NlZCB0byB1cGRhdGUgdGhlICYjMzQ7cmVnJiMzNDsgcHJvcGVydHkKJiM0MzsJCQkgKiB3aXRoIHRoZSBmaXhlZCBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyZWQgYXMgVlBSLgomIzQzOwkJCSAqCiYjNDM7CQkJICogRm9yIHJlc2l6YWJsZSBWUFIgd2UgZG9uJiMzOTt0IGNhcmUgYWJvdXQgdGhlIGV4YWN0CiYjNDM7CQkJICogYWRkcmVzcyBhbmQgaW5zdGVhZCB3YW50IGEgcmVzZXJ2ZWQgcmVnaW9uIHRvIGJlCiYjNDM7CQkJICogYWxsb2NhdGVkIHdpdGggYSBjZXJ0YWluIHNpemUgYW5kIGFsaWdubWVudCBhdAomIzQzOwkJCSAqIGJvb3QgdGltZS4KJiM0MzsJCQkgKgomIzQzOwkJCSAqIFRoZSBiZWxvdyBhc3N1bWVzIHJlc2l6YWJsZSBWUFIgYnkgZGVmYXVsdC4gSWYgdGhlCiYjNDM7CQkJICogZmlybXdhcmVzIHNldHMgdXAgZml4ZWQgVlBSLCBpdCBpcyByZXNwb25zaWJsZSBmb3IKJiM0MzsJCQkgKiBhZGRpbmcgdGhlIG1pc3NpbmcgJiMzNDtyZWcmIzM0OyBwcm9wZXJ0eSwgcmVtb3ZpbmcgYW55IG9mCiYjNDM7CQkJICogdGhlIHVudXNlZCBwcm9wZXJ0aWVzLCBhcyB3ZWxsIGFzIGFkZGluZyBhIHVuaXQtCiYjNDM7CQkJICogYWRkcmVzcyBtYXRjaGluZyB0aGUgJiMzNDtyZWcmIzM0OyBwcm9wZXJ0eS4KJiM0MzsJCQkgKi8KJiM0MzsKJiM0MzsJCQkvKiBmaXhlZCBWUFIgKi8KJiM0MzsJCQkvKgomIzQzOwkJCXJlZyA9ICZsdDsweDAgMHgwIDB4MCAweDAmZ3Q7OwomIzQzOwkJCW5vLW1hcDsKJiM0MzsJCQkqLwomIzQzOwomIzQzOwkJCS8qIHJlc2l6YWJsZSBWUFIgKi8KJiM0MzsJCQlzaXplID0gJmx0OzB4MCAweDcwMDAwMDAwJmd0OzsKJiM0MzsJCQlhbGlnbm1lbnQgPSAmbHQ7MHgwIDB4MTAwMDAwJmd0OzsKJiM0MzsJCQlyZXVzYWJsZTsKJiM0MzsJCX07CiAJfTsKIAogCS8qIFNZU1RFTSBNTUlPICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oCmluZGV4IDkwZjYxYjE3Mjc1ZTFiLi42YTcwMzA2MDk3ODliYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgKQEAgLTEwLDYgJiM0MzsxMCw4IEBAIGJvb2wgY2FuX3NldF9kaXJlY3RfbWFwKHZvaWQpOwogI2RlZmluZSBjYW5fc2V0X2RpcmVjdF9tYXAgY2FuX3NldF9kaXJlY3RfbWFwCiAKIGludCBzZXRfbWVtb3J5X3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKTsKJiM0MztpbnQgc2V0X21lbW9yeV9kZXZpY2UodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpOwomIzQzO2ludCBzZXRfbWVtb3J5X25vcm1hbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7CiAKIGludCBzZXRfZGlyZWN0X21hcF9pbnZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpOwogaW50IHNldF9kaXJlY3RfbWFwX2RlZmF1bHRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMKaW5kZXggYmJlOThhYzlhZDhjNjcuLjg3MWI1OWE2YzllYWYzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jCkBAIC0yNTEsNiAmIzQzOzI1MSwyMiBAQCBpbnQgc2V0X21lbW9yeV92YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSkKIAkJCQkJX19wZ3Byb3QoUFRFX1BSRVNFTlRfVkFMSURfS0VSTkVMKSk7CiB9CiAKJiM0MztpbnQgc2V0X21lbW9yeV9kZXZpY2UodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19jaGFuZ2VfbWVtb3J5X2NvbW1vbihhZGRyLCBQQUdFX1NJWkUgKiBudW1wYWdlcywKJiM0MzsJCQkJX19wZ3Byb3QoUFJPVF9ERVZJQ0VfbkduUm5FKSwKJiM0MzsJCQkJX19wZ3Byb3QoUFJPVF9OT1JNQUwpKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoc2V0X21lbW9yeV9kZXZpY2UpOwomIzQzOwomIzQzO2ludCBzZXRfbWVtb3J5X25vcm1hbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2NoYW5nZV9tZW1vcnlfY29tbW9uKGFkZHIsIFBBR0VfU0laRSAqIG51bXBhZ2VzLAomIzQzOwkJCQlfX3BncHJvdChQUk9UX05PUk1BTCksCiYjNDM7CQkJCV9fcGdwcm90KFBST1RfREVWSUNFX25HblJuRSkpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChzZXRfbWVtb3J5X25vcm1hbCk7CiYjNDM7CiBpbnQgc2V0X2RpcmVjdF9tYXBfaW52YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKQogewogCXBncHJvdF90IGNsZWFyX21hc2sgPSBfX3BncHJvdChQVEVfUFJFU0VOVF9WQUxJRF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2luaXQuYyBiL2FyY2gvczM5MC9tbS9pbml0LmMKaW5kZXggZjA3MTY4YTBkM2RkMzQuLmY4Zjc4ZjE0MzRlYWZiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vaW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9pbml0LmMKQEAgLTI0MSw3ICYjNDM7MjQxLDcgQEAgc3RhdGljIGludCBzMzkwX2NtYV9tZW1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKIAltZW1fZGF0YS5zdGFydCA9IGFyZy0mZ3Q7c3RhcnRfcGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQ7CiAJbWVtX2RhdGEuZW5kID0gbWVtX2RhdGEuc3RhcnQgJiM0MzsgKGFyZy0mZ3Q7bnJfcGFnZXMgJmx0OyZsdDsgUEFHRV9TSElGVCk7CiAJaWYgKGFjdGlvbiA9PSBNRU1fR09JTkdfT0ZGTElORSkKLQkJcmMgPSBjbWFfZm9yX2VhY2hfYXJlYShzMzkwX2NtYV9jaGVja19yYW5nZSwgJmFtcDttZW1fZGF0YSk7CiYjNDM7CQlyYyA9IGNtYV9mb3JfZWFjaF9lYXJseV9hcmVhKHMzOTBfY21hX2NoZWNrX3JhbmdlLCAmYW1wO21lbV9kYXRhKTsKIAlyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhyYyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtaGVhcC5jIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1oZWFwLmMKaW5kZXggYTc2YmYzZjhiMDcxYTMuLjFjZWI2ZWU4YzA1YTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS1idWYvZG1hLWhlYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWhlYXAuYwpAQCAtNyw2ICYjNDM7Nyw3IEBACiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2NkZXYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGVidWdmcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1idWYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kbWEtaGVhcC5oJmd0OwpAQCAtMjI0LDYgJiM0MzsyMjUsNDYgQEAgY29uc3QgY2hhciAqZG1hX2hlYXBfZ2V0X25hbWUoc3RydWN0IGRtYV9oZWFwICpoZWFwKQogfQogRVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2hlYXBfZ2V0X25hbWUsICYjMzQ7RE1BX0JVRl9IRUFQJiMzNDspOwogCiYjNDM7I2lmZGVmIENPTkZJR19ERUJVR19GUwomIzQzO3N0YXRpYyBpbnQgZG1hX2hlYXBfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfaGVhcCAqaGVhcCA9IHMtJmd0O3ByaXZhdGU7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlpZiAoaGVhcC0mZ3Q7b3BzICZhbXA7JmFtcDsgaGVhcC0mZ3Q7b3BzLSZndDtzaG93KQomIzQzOwkJZXJyID0gaGVhcC0mZ3Q7b3BzLSZndDtzaG93KHMsIGhlYXApOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MztERUZJTkVfU0hPV19BVFRSSUJVVEUoZG1hX2hlYXBfZGVidWcpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkbWFfaGVhcF9kZWJ1Z2ZzX2RpcjsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkbWFfaGVhcF9pbml0X2RlYnVnZnModm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZW50cnkgKmRpcjsKJiM0MzsKJiM0MzsJZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCYjMzQ7ZG1hX2hlYXAmIzM0OywgTlVMTCk7CiYjNDM7CWlmIChJU19FUlIoZGlyKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZG1hX2hlYXBfZGVidWdmc19kaXIgPSBkaXI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRtYV9oZWFwX2V4aXRfZGVidWdmcyh2b2lkKQomIzQzO3sKJiM0MzsJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRtYV9oZWFwX2RlYnVnZnNfZGlyKTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgdm9pZCBkbWFfaGVhcF9pbml0X2RlYnVnZnModm9pZCkKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRtYV9oZWFwX2V4aXRfZGVidWdmcyh2b2lkKQomIzQzO3sKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAvKioKICAqIGRtYV9oZWFwX2FkZCAtIGFkZHMgYSBoZWFwIHRvIGRtYWJ1ZiBoZWFwcwogICogQGV4cF9pbmZvOiBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gcmVnaXN0ZXIgdGhpcyBoZWFwCkBAIC0yOTgsNiAmIzQzOzMzOSwxMyBAQCBzdHJ1Y3QgZG1hX2hlYXAgKmRtYV9oZWFwX2FkZChjb25zdCBzdHJ1Y3QgZG1hX2hlYXBfZXhwb3J0X2luZm8gKmV4cF9pbmZvKQogCiAJLyogQWRkIGhlYXAgdG8gdGhlIGxpc3QgKi8KIAlsaXN0X2FkZCgmYW1wO2hlYXAtJmd0O2xpc3QsICZhbXA7aGVhcF9saXN0KTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiYjNDM7CWlmIChoZWFwLSZndDtvcHMgJmFtcDsmYW1wOyBoZWFwLSZndDtvcHMtJmd0O3Nob3cpCiYjNDM7CQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGhlYXAtJmd0O25hbWUsIDA0NDQsIGRtYV9oZWFwX2RlYnVnZnNfZGlyLAomIzQzOwkJCQkgICAgaGVhcCwgJmFtcDtkbWFfaGVhcF9kZWJ1Z19mb3BzKTsKJiM0MzsjZW5kaWYKJiM0MzsKIAltdXRleF91bmxvY2soJmFtcDtoZWFwX2xpc3RfbG9jayk7CiAKIAlyZXR1cm4gaGVhcDsKQEAgLTMzNCw2ICYjNDM7MzgyLDE0IEBAIHN0YXRpYyBpbnQgZG1hX2hlYXBfaW5pdCh2b2lkKQogCX0KIAlkbWFfaGVhcF9jbGFzcy0mZ3Q7ZGV2bm9kZSA9IGRtYV9oZWFwX2Rldm5vZGU7CiAKJiM0MzsJZG1hX2hlYXBfaW5pdF9kZWJ1Z2ZzKCk7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiBzdWJzeXNfaW5pdGNhbGwoZG1hX2hlYXBfaW5pdCk7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19leGl0IGRtYV9oZWFwX2V4aXQodm9pZCkKJiM0Mzt7CiYjNDM7CWRtYV9oZWFwX2V4aXRfZGVidWdmcygpOwomIzQzO30KJiM0MztfX2V4aXRjYWxsKGRtYV9oZWFwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWcgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZwppbmRleCBiYjcyOWU5MTU0NWM0MC4uZGQ2MDM1NTk4ZDAyODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnCkBAIC0yMCwzICYjNDM7MjAsMTAgQEAgY29uZmlnIERNQUJVRl9IRUFQU19DTUEKIAkgIENob29zZSB0aGlzIG9wdGlvbiB0byBlbmFibGUgZG1hLWJ1ZiBDTUEgaGVhcC4gVGhpcyBoZWFwIGlzIGJhY2tlZAogCSAgYnkgdGhlIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvciAoQ01BKS4gSWYgeW91ciBzeXN0ZW0gaGFzIHRoZXNlCiAJICByZWdpb25zLCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUuCiYjNDM7CiYjNDM7Y29uZmlnIERNQUJVRl9IRUFQU19URUdSQV9WUFIKJiM0MzsJYm9vbCAmIzM0O05WSURJQSBUZWdyYSBWaWRlby1Qcm90ZWN0ZWQtUmVnaW9uIERNQS1CVUYgSGVhcCYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gRE1BQlVGX0hFQVBTICZhbXA7JmFtcDsgRE1BX0NNQQomIzQzOwloZWxwCiYjNDM7CSAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBWaWRlby1Qcm90ZWN0ZWQtUmVnaW9uIChWUFIpIHN1cHBvcnQgb24KJiM0MzsJICBhIHJhbmdlIG9mIE5WSURJQSBUZWdyYSBkZXZpY2VzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlIGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlCmluZGV4IDk3NDQ2Nzc5MTAzMmZmLi4yNjViNzdhN2I4ODk5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9NYWtlZmlsZQpAQCAtMSwzICYjNDM7MSw0IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiBvYmotJChDT05GSUdfRE1BQlVGX0hFQVBTX1NZU1RFTSkJJiM0Mzs9IHN5c3RlbV9oZWFwLm8KIG9iai0kKENPTkZJR19ETUFCVUZfSEVBUFNfQ01BKQkJJiM0Mzs9IGNtYV9oZWFwLm8KJiM0MztvYmotJChDT05GSUdfRE1BQlVGX0hFQVBTX1RFR1JBX1ZQUikJJiM0Mzs9IHRlZ3JhLXZwci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmMgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkxOGNmNjZlYzIyMmM5Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL3RlZ3JhLXZwci5jCkBAIC0wLDAgJiM0MzsxLDEyNDIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogRE1BLUJVRiByZXN0cmljdGVkIGhlYXAgZXhwb3J0ZXIgZm9yIE5WSURJQSBWaWRlby1Qcm90ZWN0aW9uLVJlZ2lvbiAoVlBSKQomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjYgTlZJRElBIENvcnBvcmF0aW9uCiYjNDM7ICovCiYjNDM7CiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSAmIzM0O3RlZ3JhLXZwcjogJiMzNDsgZm10CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2FybS1zbWNjYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbWEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGVidWdmcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kbWEtYnVmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1oZWFwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZpbmQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2ZfcmVzZXJ2ZWRfbWVtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wbV9ydW50aW1lLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3Jlc2V0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NldF9tZW1vcnkuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnJlZXplci5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwomIzQzOyNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvdGVncmFfdnByLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBURUdSQV9WUFJfTUFYX0NIVU5LUyA2NAomIzQzOwomIzQzO3N0cnVjdCB0ZWdyYV92cHI7CiYjNDM7CiYjNDM7c3RydWN0IHRlZ3JhX3Zwcl9kZXZpY2UgewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldjsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCB0ZWdyYV92cHJfY2h1bmsgewomIzQzOwlwaHlzX2FkZHJfdCBzdGFydDsKJiM0MzsJcGh5c19hZGRyX3QgbGltaXQ7CiYjNDM7CXNpemVfdCBzaXplOwomIzQzOwomIzQzOwlzdHJ1Y3QgdGVncmFfdnByICp2cHI7CiYjNDM7CXN0cnVjdCBjbWEgKmNtYTsKJiM0MzsJYm9vbCBhY3RpdmU7CiYjNDM7CiYjNDM7CXN0cnVjdCBwYWdlICpzdGFydF9wYWdlOwomIzQzOwl1bnNpZ25lZCBpbnQgb2Zmc2V0OwomIzQzOwl1bnNpZ25lZCBsb25nIHZpcnQ7CiYjNDM7CXBnb2ZmX3QgbnVtX3BhZ2VzOwomIzQzOwomIzQzOwl1bnNpZ25lZCBpbnQgbnVtX2J1ZmZlcnM7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgdGVncmFfdnByIHsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpkZXZfbm9kZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBhbGlnbjsKJiM0MzsJcGh5c19hZGRyX3QgYmFzZTsKJiM0MzsJcGh5c19hZGRyX3Qgc2l6ZTsKJiM0MzsJYm9vbCB1c2VfZnJlZXplcjsKJiM0MzsJYm9vbCByZXNpemFibGU7CiYjNDM7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgYnVmZmVyczsKJiM0MzsJc3RydWN0IHBhZ2UgKnN0YXJ0X3BhZ2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgKmJpdG1hcDsKJiM0MzsJcGdvZmZfdCBudW1fcGFnZXM7CiYjNDM7CiYjNDM7CS8qIHJlc2l6YWJsZSBWUFIgKi8KJiM0MzsJREVDTEFSRV9CSVRNQVAoYWN0aXZlLCBURUdSQV9WUFJfTUFYX0NIVU5LUyk7CiYjNDM7CXN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rczsKJiM0MzsJdW5zaWduZWQgaW50IG51bV9jaHVua3M7CiYjNDM7CiYjNDM7CXVuc2lnbmVkIGludCBmaXJzdDsKJiM0MzsJdW5zaWduZWQgaW50IGxhc3Q7CiYjNDM7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlczsKJiM0MzsJc3RydWN0IG11dGV4IGxvY2s7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgdGVncmFfdnByX2J1ZmZlciB7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgYXR0YWNobWVudHM7CiYjNDM7CXN0cnVjdCB0ZWdyYV92cHIgKnZwcjsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzOwlzdHJ1Y3QgbXV0ZXggbG9jazsKJiM0MzsKJiM0MzsJc3RydWN0IHBhZ2UgKnN0YXJ0X3BhZ2U7CiYjNDM7CXN0cnVjdCBwYWdlICoqcGFnZXM7CiYjNDM7CXBnb2ZmX3QgbnVtX3BhZ2VzOwomIzQzOwlwaHlzX2FkZHJfdCBzdGFydDsKJiM0MzsJcGh5c19hZGRyX3QgbGltaXQ7CiYjNDM7CXNpemVfdCBzaXplOwomIzQzOwlpbnQgcGFnZW5vOwomIzQzOwlpbnQgb3JkZXI7CiYjNDM7CiYjNDM7CURFQ0xBUkVfQklUTUFQKGNodW5rcywgVEVHUkFfVlBSX01BWF9DSFVOS1MpOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHRlZ3JhX3Zwcl9hdHRhY2htZW50IHsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2OwomIzQzOwlzdHJ1Y3Qgc2dfdGFibGUgc2d0OwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIEFSTV9TTUNDQ19URV9GVU5DX1BST0dSQU1fVlBSIDB4MwomIzQzOwomIzQzOyNkZWZpbmUgQVJNX1NNQ0NDX1ZFTkRPUl9TSVBfVEVfUFJPR1JBTV9WUFJfRlVOQ19JRAkJXAomIzQzOwlBUk1fU01DQ0NfQ0FMTF9WQUwoQVJNX1NNQ0NDX0ZBU1RfQ0FMTCwJCQlcCiYjNDM7CQkJICAgQVJNX1NNQ0NDX1NNQ18zMiwJCQlcCiYjNDM7CQkJICAgQVJNX1NNQ0NDX09XTkVSX1NJUCwJCQlcCiYjNDM7CQkJICAgQVJNX1NNQ0NDX1RFX0ZVTkNfUFJPR1JBTV9WUFIpCiYjNDM7CiYjNDM7c3RhdGljIGludCB0ZWdyYV92cHJfc2V0KHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYXJtX3NtY2NjX3JlcyByZXM7CiYjNDM7CiYjNDM7CWFybV9zbWNjY19zbWMoQVJNX1NNQ0NDX1ZFTkRPUl9TSVBfVEVfUFJPR1JBTV9WUFJfRlVOQ19JRCwgYmFzZSwgc2l6ZSwKJiM0MzsJCSAgICAgIDAsIDAsIDAsIDAsIDAsICZhbXA7cmVzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlcy5hMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0ZWdyYV92cHJfZ2V0X2V4dGVudHMoc3RydWN0IHRlZ3JhX3ZwciAqdnByLCBwaHlzX2FkZHJfdCAqYmFzZSwKJiM0MzsJCQkJIHBoeXNfYWRkcl90ICpzaXplKQomIzQzO3sKJiM0MzsJcGh5c19hZGRyX3Qgc3RhcnQgPSB+MCwgbGltaXQgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHZwci0mZ3Q7bnVtX2NodW5rczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rID0gJmFtcDt2cHItJmd0O2NodW5rc1tpXTsKJiM0MzsKJiM0MzsJCWlmIChjaHVuay0mZ3Q7YWN0aXZlKSB7CiYjNDM7CQkJaWYgKGNodW5rLSZndDtzdGFydCAmbHQ7IHN0YXJ0KQomIzQzOwkJCQlzdGFydCA9IGNodW5rLSZndDtzdGFydDsKJiM0MzsKJiM0MzsJCQlpZiAoY2h1bmstJmd0O2xpbWl0ICZndDsgbGltaXQpCiYjNDM7CQkJCWxpbWl0ID0gY2h1bmstJmd0O2xpbWl0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChsaW1pdCAmZ3Q7IHN0YXJ0KSB7CiYjNDM7CQkqc2l6ZSA9IGxpbWl0IC0gc3RhcnQ7CiYjNDM7CQkqYmFzZSA9IHN0YXJ0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJKmJhc2UgPSAqc2l6ZSA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGVncmFfdnByX3Jlc2l6ZShzdHJ1Y3QgdGVncmFfdnByICp2cHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVncmFfdnByX2RldmljZSAqbm9kZTsKJiM0MzsJcGh5c19hZGRyX3QgYmFzZSwgc2l6ZTsKJiM0MzsJaW50IGVyciwgc3RhdHVzID0gMDsKJiM0MzsKJiM0MzsJZXJyID0gdGVncmFfdnByX2dldF9leHRlbnRzKHZwciwgJmFtcDtiYXNlLCAmYW1wO3NpemUpOwomIzQzOwlpZiAoZXJyICZsdDsgMCkgewomIzQzOwkJcHJfZXJyKCYjMzQ7JXMoKTogZmFpbGVkIHRvIGdldCBWUFIgZXh0ZW50czogJWRcbiYjMzQ7LCBfX2Z1bmNfXywgZXJyKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZwci0mZ3Q7dXNlX2ZyZWV6ZXIpIHsKJiM0MzsJCWVyciA9IGZyZWV6ZV9wcm9jZXNzZXMoKTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7JXMoKTogZmFpbGVkIHRvIGZyZWV6ZSBwcm9jZXNzZXM6ICVkXG4mIzM0OywKJiM0MzsJCQkgICAgICAgX19mdW5jX18sIGVycik7CiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZhbXA7dnByLSZndDtkZXZpY2VzLCBub2RlKSB7CiYjNDM7CQllcnIgPSBwbV9nZW5lcmljX2ZyZWV6ZShub2RlLSZndDtkZXYpOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gcnVudGltZSBzdXNwZW5kICVzOiAlZFxuJiMzNDssCiYjNDM7CQkJICAgICAgIGRldl9uYW1lKG5vZGUtJmd0O2RldiksIGVycik7CiYjNDM7CQkJZ290byB0aGF3OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXRyYWNlX3RlZ3JhX3Zwcl9zZXQoYmFzZSwgc2l6ZSk7CiYjNDM7CiYjNDM7CWVyciA9IHRlZ3JhX3Zwcl9zZXQoYmFzZSwgc2l6ZSk7CiYjNDM7CWlmIChlcnIgJmx0OyAwKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gc2VjdXJlIFZQUjogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJc3RhdHVzID0gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7dGhhdzoKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKG5vZGUsICZhbXA7dnByLSZndDtkZXZpY2VzLCBub2RlKSB7CiYjNDM7CQllcnIgPSBwbV9nZW5lcmljX3RoYXcobm9kZS0mZ3Q7ZGV2KTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIHJ1bnRpbWUgcmVzdW1lICVzXG4mIzM0OywKJiM0MzsJCQkgICAgICAgZGV2X25hbWUobm9kZS0mZ3Q7ZGV2KSk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZwci0mZ3Q7dXNlX2ZyZWV6ZXIpCiYjNDM7CQl0aGF3X3Byb2Nlc3NlcygpOwomIzQzOwomIzQzOwlyZXR1cm4gc3RhdHVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCB0ZWdyYV92cHJfY2h1bmtfaW5pdChzdHJ1Y3QgdGVncmFfdnByICp2cHIsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuaywKJiM0MzsJCQkJICAgICAgIHBoeXNfYWRkcl90IHN0YXJ0LCBzaXplX3Qgc2l6ZSwKJiM0MzsJCQkJICAgICAgIHVuc2lnbmVkIGludCBvcmRlciwgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWNodW5rLSZndDtzdGFydCA9IHN0YXJ0OwomIzQzOwljaHVuay0mZ3Q7bGltaXQgPSBzdGFydCAmIzQzOyBzaXplOwomIzQzOwljaHVuay0mZ3Q7c2l6ZSA9IHNpemU7CiYjNDM7CWNodW5rLSZndDt2cHIgPSB2cHI7CiYjNDM7CiYjNDM7CWNodW5rLSZndDtjbWEgPSBjbWFfY3JlYXRlKHN0YXJ0LCBzaXplLCBvcmRlciwgbmFtZSk7CiYjNDM7CWlmIChJU19FUlIoY2h1bmstJmd0O2NtYSkpIHsKJiM0MzsJCXByX2VycigmIzM0O2NtYV9jcmVhdGUoKSBmYWlsZWQ6ICVsZFxuJiMzNDssIFBUUl9FUlIoY2h1bmstJmd0O2NtYSkpOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIoY2h1bmstJmd0O2NtYSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2h1bmstJmd0O29mZnNldCA9IChzdGFydCAtIHZwci0mZ3Q7YmFzZSkgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsJY2h1bmstJmd0O251bV9wYWdlcyA9IHNpemUgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsJY2h1bmstJmd0O251bV9idWZmZXJzID0gMDsKJiM0MzsKJiM0MzsJLyogQ01BIGFyZWEgaXMgbm90IHJlc2VydmVkIHlldCAqLwomIzQzOwljaHVuay0mZ3Q7c3RhcnRfcGFnZSA9IE5VTEw7CiYjNDM7CWNodW5rLSZndDt2aXJ0ID0gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlZ3JhX3Zwcl9jaHVua19mcmVlKHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rKQomIzQzO3sKJiM0MzsJY21hX2ZyZWUoY2h1bmstJmd0O2NtYSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB0ZWdyYV92cHJfY2h1bmtfaXNfbGFzdChjb25zdCBzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuaykKJiM0Mzt7CiYjNDM7CXBoeXNfYWRkcl90IGxpbWl0ID0gY2h1bmstJmd0O3Zwci0mZ3Q7YmFzZSAmIzQzOyBjaHVuay0mZ3Q7dnByLSZndDtzaXplOwomIzQzOwomIzQzOwlyZXR1cm4gY2h1bmstJmd0O2xpbWl0ID09IGxpbWl0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdGVncmFfdnByX2NodW5rX2lzX2xlYWYoY29uc3Qgc3RydWN0IHRlZ3JhX3Zwcl9jaHVuayAqY2h1bmspCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpuZXh0ID0gY2h1bmsgJiM0MzsgMTsKJiM0MzsKJiM0MzsJaWYgKHRlZ3JhX3Zwcl9jaHVua19pc19sYXN0KGNodW5rKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gIW5leHQtJmd0O2FjdGl2ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0ZWdyYV92cHJfY2h1bmtfYWN0aXZhdGUoc3RydWN0IHRlZ3JhX3Zwcl9jaHVuayAqY2h1bmspCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGFsaWduID0gZ2V0X29yZGVyKGNodW5rLSZndDt2cHItJmd0O2FsaWduKTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJdHJhY2VfdGVncmFfdnByX2NodW5rX2FjdGl2YXRlKGNodW5rLSZndDtzdGFydCwgY2h1bmstJmd0O2xpbWl0KTsKJiM0MzsKJiM0MzsJY2h1bmstJmd0O3N0YXJ0X3BhZ2UgPSBjbWFfYWxsb2MoY2h1bmstJmd0O2NtYSwgY2h1bmstJmd0O251bV9wYWdlcywgYWxpZ24sCiYjNDM7CQkJCSAgICAgIGZhbHNlKTsKJiM0MzsJaWYgKCFjaHVuay0mZ3Q7c3RhcnRfcGFnZSkgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJfQomIzQzOwomIzQzOwljaHVuay0mZ3Q7dmlydCA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfdG9fdmlydChjaHVuay0mZ3Q7c3RhcnRfcGFnZSk7CiYjNDM7CiYjNDM7CWVyciA9IHNldF9tZW1vcnlfZGV2aWNlKGNodW5rLSZndDt2aXJ0LCBjaHVuay0mZ3Q7bnVtX3BhZ2VzKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlnb3RvIGZyZWU7CiYjNDM7CiYjNDM7CWNodW5rLSZndDthY3RpdmUgPSB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztmcmVlOgomIzQzOwljbWFfcmVsZWFzZShjaHVuay0mZ3Q7Y21hLCBjaHVuay0mZ3Q7c3RhcnRfcGFnZSwgY2h1bmstJmd0O251bV9wYWdlcyk7CiYjNDM7ZmFpbDoKJiM0MzsJY2h1bmstJmd0O3N0YXJ0X3BhZ2UgPSBOVUxMOwomIzQzOwljaHVuay0mZ3Q7dmlydCA9IDA7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGVncmFfdnByX2NodW5rX2RlYWN0aXZhdGUoc3RydWN0IHRlZ3JhX3Zwcl9jaHVuayAqY2h1bmspCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAoIWNodW5rLSZndDthY3RpdmUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogZG8gbm90IGRlYWN0aXZhdGUgaWYgdGhlcmUgYXJlIGJ1ZmZlcnMgbGVmdCBpbiB0aGlzIGNodW5rICovCiYjNDM7CWlmIChXQVJOX09OKGNodW5rLSZndDtudW1fYnVmZmVycyAmZ3Q7IDApKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJdHJhY2VfdGVncmFfdnByX2NodW5rX2RlYWN0aXZhdGUoY2h1bmstJmd0O3N0YXJ0LCBjaHVuay0mZ3Q7bGltaXQpOwomIzQzOwomIzQzOwllcnIgPSBzZXRfbWVtb3J5X25vcm1hbChjaHVuay0mZ3Q7dmlydCwgY2h1bmstJmd0O251bV9wYWdlcyk7CiYjNDM7CWlmIChlcnIgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJY2h1bmstJmd0O2FjdGl2ZSA9IGZhbHNlOwomIzQzOwomIzQzOwljbWFfcmVsZWFzZShjaHVuay0mZ3Q7Y21hLCBjaHVuay0mZ3Q7c3RhcnRfcGFnZSwgY2h1bmstJmd0O251bV9wYWdlcyk7CiYjNDM7CWNodW5rLSZndDtzdGFydF9wYWdlID0gTlVMTDsKJiM0MzsJY2h1bmstJmd0O3ZpcnQgPSAwOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgdGVncmFfdnByX2NodW5rX292ZXJsYXBzKHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rLAomIzQzOwkJCQkgICAgIHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGxpbWl0KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGZpcnN0ID0gY2h1bmstJmd0O29mZnNldDsKJiM0MzsJdW5zaWduZWQgaW50IGxhc3QgPSBjaHVuay0mZ3Q7b2Zmc2V0ICYjNDM7IGNodW5rLSZndDtudW1fcGFnZXMgLSAxOwomIzQzOwomIzQzOwlpZiAobGFzdCAmbHQ7IHN0YXJ0IHx8IGZpcnN0ICZndDs9IGxpbWl0KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0ZWdyYV92cHJfYWN0aXZhdGVfY2h1bmtzKHN0cnVjdCB0ZWdyYV92cHIgKnZwciwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgdGVncmFfdnByX2J1ZmZlciAqYnVmZmVyKQomIzQzO3sKJiM0MzsJREVDTEFSRV9CSVRNQVAoZGlydHksIHZwci0mZ3Q7bnVtX2NodW5rcyk7CiYjNDM7CXVuc2lnbmVkIGludCBpLCBib3R0b20sIHRvcDsKJiM0MzsJaW50IGVyciA9IDAsIHJldDsKJiM0MzsKJiM0MzsJYml0bWFwX3plcm8oZGlydHksIHZwci0mZ3Q7bnVtX2NodW5rcyk7CiYjNDM7CiYjNDM7CS8qIGFjdGl2YXRlIGFueSBpbmFjdGl2ZSBjaHVua3MgdGhhdCBvdmVybGFwIHRoaXMgYnVmZmVyICovCiYjNDM7CWZvcl9lYWNoX3NldF9iaXQoaSwgYnVmZmVyLSZndDtjaHVua3MsIHZwci0mZ3Q7bnVtX2NodW5rcykgewomIzQzOwkJc3RydWN0IHRlZ3JhX3Zwcl9jaHVuayAqY2h1bmsgPSAmYW1wO3Zwci0mZ3Q7Y2h1bmtzW2ldOwomIzQzOwomIzQzOwkJaWYgKGNodW5rLSZndDthY3RpdmUpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQllcnIgPSB0ZWdyYV92cHJfY2h1bmtfYWN0aXZhdGUoY2h1bmspOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJZ290byBkZWFjdGl2YXRlOwomIzQzOwomIzQzOwkJc2V0X2JpdChpLCB2cHItJmd0O2FjdGl2ZSk7CiYjNDM7CQlzZXRfYml0KGksIGRpcnR5KTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBY3RpdmF0aW5nIGNodW5rcyBhYm92ZSBtYXkgaGF2ZSBjcmVhdGVkIGhvbGVzLCBidXQgc2luY2UgdGhlIFZQUgomIzQzOwkgKiBjYW4gb25seSBldmVyIGJlIGEgc2luZ2xlIGNvbnRpZ3VvdXMgcmVnaW9uLCBtYWtlIHN1cmUgdG8gYWN0aXZhdGUKJiM0MzsJICogYW55IG1pc3NpbmcgY2h1bmtzLgomIzQzOwkgKi8KJiM0MzsJZm9yX2VhY2hfY2xlYXJfYml0cmFuZ2UoYm90dG9tLCB0b3AsIHZwci0mZ3Q7YWN0aXZlLCB2cHItJmd0O251bV9jaHVua3MpIHsKJiM0MzsJCS8qIGluYWN0aXZlIGNodW5rcyBhdCB0aGUgYm90dG9tIG9yIHRoZSB0b3AgYXJlIGhhcm1sZXNzICovCiYjNDM7CQlpZiAoYm90dG9tID09IDAgfHwgdG9wID09IHZwci0mZ3Q7bnVtX2NodW5rcykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWZvciAoaSA9IGJvdHRvbTsgaSAmbHQ7IHRvcDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuayA9ICZhbXA7dnByLSZndDtjaHVua3NbaV07CiYjNDM7CiYjNDM7CQkJZXJyID0gdGVncmFfdnByX2NodW5rX2FjdGl2YXRlKGNodW5rKTsKJiM0MzsJCQlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCQkJZ290byBkZWFjdGl2YXRlOwomIzQzOwomIzQzOwkJCXNldF9iaXQoaSwgdnByLSZndDthY3RpdmUpOwomIzQzOwkJCXNldF9iaXQoaSwgZGlydHkpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGlmIGFueSBjaHVua3MgaGF2ZSBiZWVuIGFjdGl2YXRlZCwgVlBSIG5lZWRzIHRvIGJlIHJlc2l6ZWQgKi8KJiM0MzsJaWYgKCFiaXRtYXBfZW1wdHkoZGlydHksIHZwci0mZ3Q7bnVtX2NodW5rcykpIHsKJiM0MzsJCWVyciA9IHRlZ3JhX3Zwcl9yZXNpemUodnByKTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIGdyb3cgVlBSOiAlZFxuJiMzNDssIGVycik7CiYjNDM7CQkJZ290byBkZWFjdGl2YXRlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGluY3JlbWVudCBidWZmZXIgY291bnQgZm9yIGVhY2ggY2h1bmsgKi8KJiM0MzsJZm9yX2VhY2hfc2V0X2JpdChpLCBidWZmZXItJmd0O2NodW5rcywgdnByLSZndDtudW1fY2h1bmtzKQomIzQzOwkJdnByLSZndDtjaHVua3NbaV0ubnVtX2J1ZmZlcnMmIzQzOyYjNDM7OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztkZWFjdGl2YXRlOgomIzQzOwkvKiBkZWFjdGl2YXRlIGFueSBvZiB0aGUgcHJldmlvdXNseSBpbmFjdGl2ZSBjaHVua3Mgb24gZmFpbHVyZSAqLwomIzQzOwlmb3JfZWFjaF9zZXRfYml0KGksIGRpcnR5LCB2cHItJmd0O251bV9jaHVua3MpIHsKJiM0MzsJCXJldCA9IHRlZ3JhX3Zwcl9jaHVua19kZWFjdGl2YXRlKCZhbXA7dnByLSZndDtjaHVua3NbaV0pOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJV0FSTigxLCAmIzM0O2ZhaWxlZCB0byBkZWFjdGl2YXRlIGNodW5rICMldTogJWRcbiYjMzQ7LCBpLCByZXQpOwomIzQzOwomIzQzOwkJY2xlYXJfYml0KGksIHZwci0mZ3Q7YWN0aXZlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJldHJpZXZlIHRoZSByYW5nZSBvZiBwYWdlcyB3aXRoaW4gdGhlIGFjdGl2YXRlIHJlZ2lvbiBvZiB0aGUgVlBSLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIHRlZ3JhX3Zwcl9nZXRfYWN0aXZlX3JhbmdlKHN0cnVjdCB0ZWdyYV92cHIgKnZwciwKJiM0MzsJCQkJICAgICAgIHVuc2lnbmVkIGludCAqZmlyc3QsCiYjNDM7CQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmxhc3QpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGksIGo7CiYjNDM7CiYjNDM7CWkgPSBmaW5kX2ZpcnN0X2JpdCh2cHItJmd0O2FjdGl2ZSwgdnByLSZndDtudW1fY2h1bmtzKTsKJiM0MzsJaWYgKGkgJmd0Oz0gdnByLSZndDtudW1fY2h1bmtzKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlqID0gZmluZF9sYXN0X2JpdCh2cHItJmd0O2FjdGl2ZSwgdnByLSZndDtudW1fY2h1bmtzKTsKJiM0MzsJaWYgKGogJmd0Oz0gdnByLSZndDtudW1fY2h1bmtzKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkqZmlyc3QgPSB2cHItJmd0O2NodW5rc1tpXS5vZmZzZXQ7CiYjNDM7CSpsYXN0ID0gdnByLSZndDtjaHVua3Nbal0ub2Zmc2V0ICYjNDM7IHZwci0mZ3Q7Y2h1bmtzW2pdLm51bV9wYWdlczsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVHJ5IHRvIGZpbmQgYW5kIGFsbG9jYXRlIGEgZnJlZSByZWdpb24gd2l0aGluIGEgc3BlY2lmaWMgcGFnZSByYW5nZS4KJiM0MzsgKiBSZXR1cm5zIHRoZSBwYWdlIG51bWJlciBpZiBzdWNjZXNzZnVsLCAtRU5PU1BDIG90aGVyd2lzZS4KJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gbWltaWNzIGJpdG1hcF9maW5kX2ZyZWVfcmVnaW9uKCkgYnV0IHJlc3RyaWN0cyB0aGUgc2VhcmNoCiYjNDM7ICogdG8gYSBzcGVjaWZpYyByYW5nZSB0byBlbmFibGUgYWxsb2NhdGlvbiB3aXRoaW4gaW5kaXZpZHVhbCBjaHVua3MuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB0ZWdyYV92cHJfZmluZF9mcmVlX3JlZ2lvbl9pbl9yYW5nZShzdHJ1Y3QgdGVncmFfdnByICp2cHIsCiYjNDM7CQkJCQkgICAgICAgdW5zaWduZWQgaW50IHN0YXJ0X3BhZ2UsCiYjNDM7CQkJCQkgICAgICAgdW5zaWduZWQgaW50IGVuZF9wYWdlLAomIzQzOwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBudW1fcGFnZXMsCiYjNDM7CQkJCQkgICAgICAgdW5zaWduZWQgaW50IGFsaWduKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHBvcywgbmV4dCA9IEFMSUdOKHN0YXJ0X3BhZ2UsIGFsaWduKTsKJiM0MzsKJiM0MzsJLyogU2NhbiB0aHJvdWdoIGFsaWduZWQgcG9zaXRpb25zLCB0cnlpbmcgdG8gYWxsb2NhdGUgYXQgZWFjaCBvbmUgKi8KJiM0MzsJZm9yIChwb3MgPSBuZXh0OyBwb3MgJiM0MzsgbnVtX3BhZ2VzICZsdDs9IGVuZF9wYWdlOyBwb3MgPSBuZXh0KSB7CiYjNDM7CQluZXh0ID0gZmluZF9uZXh0X2JpdCh2cHItJmd0O2JpdG1hcCwgcG9zICYjNDM7IG51bV9wYWdlcywgcG9zKTsKJiM0MzsKJiM0MzsJCWlmIChuZXh0ICZndDs9IHBvcyAmIzQzOyBudW1fcGFnZXMpIHsKJiM0MzsJCQliaXRtYXBfc2V0KHZwci0mZ3Q7Yml0bWFwLCBwb3MsIG51bV9wYWdlcyk7CiYjNDM7CQkJcmV0dXJuIHBvczsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW5leHQgPSBmaW5kX25leHRfemVyb19iaXQodnByLSZndDtiaXRtYXAsIHZwci0mZ3Q7bnVtX3BhZ2VzLCBuZXh0KTsKJiM0MzsJCW5leHQgPSBBTElHTihuZXh0LCBhbGlnbik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FTk9TUEM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGVncmFfdnByX2ZpbmRfZnJlZV9yZWdpb24oc3RydWN0IHRlZ3JhX3ZwciAqdnByLAomIzQzOwkJCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtX3BhZ2VzLAomIzQzOwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFsaWduKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRlZ3JhX3Zwcl9maW5kX2ZyZWVfcmVnaW9uX2luX3JhbmdlKHZwciwgMCwgdnByLSZndDtudW1fcGFnZXMgLSAxLAomIzQzOwkJCQkJCSAgIG51bV9wYWdlcywgYWxpZ24pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlZ3JhX3Zwcl9maW5kX2ZyZWVfcmVnaW9uX2NsdXN0ZXJlZChzdHJ1Y3QgdGVncmFfdnByICp2cHIsCiYjNDM7CQkJCQkJdW5zaWduZWQgaW50IG51bV9wYWdlcywKJiM0MzsJCQkJCQl1bnNpZ25lZCBpbnQgYWxpZ24pCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgdGFyZ2V0LCBmaXJzdCwgbGFzdDsKJiM0MzsJaW50IHBhZ2VubzsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCBhYm9ydCB0aGUgY2x1c3RlcmVkIGFsbG9jYXRpb24gc2NoZW1lCiYjNDM7CSAqIGFuZCB1c2UgdGhlIGdlbmVyaWMgYWxsb2NhdGlvbiBzY2hlbWUgaW5zdGVhZC4KJiM0MzsJICovCiYjNDM7CWlmICh2cHItJmd0O2ZpcnN0ICZndDsgdnByLSZndDtsYXN0KQomIzQzOwkJcmV0dXJuIC1FTk9TUEM7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZpcnN0LCB0cnkgdG8gYWxsb2NhdGUgd2l0aGluIHRoZSBjdXJyZW50bHkgYWxsb2NhdGVkIHJlZ2lvbi4gVGhpcwomIzQzOwkgKiBrZWVwcyBhbGxvY2F0aW9ucyB0aWdodGx5IHBhY2tlZCBhbmQgbWluaW1pemVzIHRoZSBWUFIgc2l6ZSBuZWVkZWQuCiYjNDM7CSAqLwomIzQzOwlwYWdlbm8gPSB0ZWdyYV92cHJfZmluZF9mcmVlX3JlZ2lvbl9pbl9yYW5nZSh2cHIsIHZwci0mZ3Q7Zmlyc3QsCiYjNDM7CQkJCQkJICAgICB2cHItJmd0O2xhc3QgJiM0MzsgMSwgbnVtX3BhZ2VzLAomIzQzOwkJCQkJCSAgICAgYWxpZ24pOwomIzQzOwlpZiAocGFnZW5vICZndDs9IDApCiYjNDM7CQlyZXR1cm4gcGFnZW5vOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJZiBub3QgZW5vdWdoIGZyZWUgc3BhY2UgZXhpc3RzIHdpdGhpbiB0aGUgY3VycmVudGx5IGFsbG9jYXRlZAomIzQzOwkgKiByZWdpb24sIGNoZWNrIHRvIHNlZSBpZiB0aGUgYWxsb2NhdGlvbiBmaXRzIGFueXdoZXJlIHdpdGhpbiB0aGUKJiM0MzsJICogYWN0aXZlIHJlZ2lvbiwgYXZvaWRpbmcgdGhlIG5lZWQgdG8gcmVzaXplIHRoZSBWUFIuCiYjNDM7CSAqLwomIzQzOwlpZiAodGVncmFfdnByX2dldF9hY3RpdmVfcmFuZ2UodnByLCAmYW1wO2ZpcnN0LCAmYW1wO2xhc3QpKSB7CiYjNDM7CQlwYWdlbm8gPSB0ZWdyYV92cHJfZmluZF9mcmVlX3JlZ2lvbl9pbl9yYW5nZSh2cHIsIGZpcnN0LCBsYXN0LAomIzQzOwkJCQkJCQkgICAgIG51bV9wYWdlcywgYWxpZ24pOwomIzQzOwkJaWYgKHBhZ2VubyAmZ3Q7PSAwKQomIzQzOwkJCXJldHVybiBwYWdlbm87CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgbm90IGVub3VnaCBmcmVlIHNwYWNlIGV4aXN0cyB3aXRoaW4gdGhlIGN1cnJlbnRseSBhY3RpdmUgcmVnaW9uLAomIzQzOwkgKiB0cnkgdG8gYWxsb2NhdGUgYWRqYWNlbnQgdG8gaXQgdG8gZ3JvdyBpdCBjb250aWd1b3VzbHkgYW5kIGVuc3VyZQomIzQzOwkgKiBvcHRpbWFsIHBhY2tpbmcuCiYjNDM7CSAqLwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBDYWxjdWxhdGUgd2hlcmUgdGhlIGFsbG9jYXRpb24gc2hvdWxkIHN0YXJ0IHRvIGVuZCByaWdodCBhdCB0aGUKJiM0MzsJICogZmlyc3QgYWxsb2NhdGVkIHBhZ2UsIHdpdGggcHJvcGVyIGFsaWdubWVudC4KJiM0MzsJICovCiYjNDM7CWlmICh2cHItJmd0O2ZpcnN0ICZndDs9IG51bV9wYWdlcykgewomIzQzOwkJdGFyZ2V0ID0gQUxJR05fRE9XTih2cHItJmd0O2ZpcnN0IC0gbnVtX3BhZ2VzLCBhbGlnbik7CiYjNDM7CiYjNDM7CQlpZiAoIWJpdG1hcF9hbGxvY2F0ZSh2cHItJmd0O2JpdG1hcCwgdGFyZ2V0LCBudW1fcGFnZXMpKQomIzQzOwkJCXJldHVybiB0YXJnZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVHJ5IGFmdGVyIHRoZSBsYXN0IGFsbG9jYXRpb24gKi8KJiM0MzsJdGFyZ2V0ID0gQUxJR04odnByLSZndDtsYXN0ICYjNDM7IDEsIGFsaWduKTsKJiM0MzsKJiM0MzsJaWYgKHRhcmdldCAmIzQzOyBudW1fcGFnZXMgJmx0Oz0gdnByLSZndDtudW1fcGFnZXMgJmFtcDsmYW1wOwomIzQzOwkgICAgIWJpdG1hcF9hbGxvY2F0ZSh2cHItJmd0O2JpdG1hcCwgdGFyZ2V0LCBudW1fcGFnZXMpKQomIzQzOwkJcmV0dXJuIHRhcmdldDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ291bGRuJiMzOTt0IGFsbG9jYXRlIGF0IHRoZSBpZGVhbCBhZGphY2VudCBwb3NpdGlvbiwgc2VhcmNoIGZvciBhbnkKJiM0MzsJICogYXZhaWxhYmxlIHNwYWNlIGJlZm9yZSB0aGUgZmlyc3QgYWxsb2NhdGVkIHBhZ2UuCiYjNDM7CSAqLwomIzQzOwlwYWdlbm8gPSB0ZWdyYV92cHJfZmluZF9mcmVlX3JlZ2lvbl9pbl9yYW5nZSh2cHIsIDAsIHZwci0mZ3Q7Zmlyc3QsCiYjNDM7CQkJCQkJICAgICBudW1fcGFnZXMsIGFsaWduKTsKJiM0MzsJaWYgKHBhZ2VubyAmZ3Q7PSAwKQomIzQzOwkJcmV0dXJuIHBhZ2VubzsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ291bGRuJiMzOTt0IGFsbG9jYXRlIGF0IHRoZSBpZGVhbCBhZGphY2VudCBwb3NpdGlvbiwgc2VhcmNoCiYjNDM7CSAqIGZvciBhbnkgYXZhaWxhYmxlIHNwYWNlIGFmdGVyIHRoZSBsYXN0IGFsbG9jYXRlZCBwYWdlLgomIzQzOwkgKi8KJiM0MzsJcGFnZW5vID0gdGVncmFfdnByX2ZpbmRfZnJlZV9yZWdpb25faW5fcmFuZ2UodnByLCB2cHItJmd0O2xhc3QgJiM0MzsgMSwKJiM0MzsJCQkJCQkgICAgIHZwci0mZ3Q7bnVtX3BhZ2VzLCBudW1fcGFnZXMsCiYjNDM7CQkJCQkJICAgICBhbGlnbik7CiYjNDM7CWlmIChwYWdlbm8gJmd0Oz0gMCkKJiM0MzsJCXJldHVybiBwYWdlbm87CiYjNDM7CiYjNDM7CXJldHVybiAtRU5PU1BDOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEZpbmQgYSBmcmVlIHJlZ2lvbiwgcHJlZmVycmluZyBsb2NhdGlvbnMgbmVhciBleGlzdGluZyBhbGxvY2F0aW9ucyB0bwomIzQzOyAqIG1pbmltaXplIFZQUiBmcmFnbWVudGF0aW9uLiBUaGUgYWxsb2NhdGlvbiBzdHJhdGVneSBpcyB0byBmaXJzdCBhbGxvY2F0ZQomIzQzOyAqIHdpdGhpbiBvciBhZGphY2VudCB0byB0aGUgZXhpc3RpbmcgcmVnaW9uIHRvIGtlZXAgYWxsb2NhdGlvbnMgY2x1c3RlcmVkLgomIzQzOyAqIE90aGVyd2lzZSBmYWxsIGJhY2sgdG8gYSBnZW5lcmljIGFsbG9jYXRpb24gdXNpbmcgdGhlIGZpcnN0IGF2YWlsYWJsZQomIzQzOyAqIHNwYWNlLgomIzQzOyAqCiYjNDM7ICogVGhpcyBhcHByb2FjaCBmb2N1c2VzIG9uIHBhZ2UtbGV2ZWwgYWxsb2NhdGlvbiBmaXJzdCwgdGhlbiB0aGUgY2h1bmsKJiM0MzsgKiBzeXN0ZW0gZGV0ZXJtaW5lcyB3aGljaCBjaHVua3MgbmVlZCB0byBiZSBhY3RpdmF0ZWQgYmFzZWQgb24gd2hlcmUgdGhlCiYjNDM7ICogcGFnZXMgZW5kZWQgdXAuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB0ZWdyYV92cHJfYWxsb2NhdGVfcmVnaW9uKHN0cnVjdCB0ZWdyYV92cHIgKnZwciwKJiM0MzsJCQkJICAgICB1bnNpZ25lZCBpbnQgbnVtX3BhZ2VzLAomIzQzOwkJCQkgICAgIHVuc2lnbmVkIGludCBhbGlnbikKJiM0Mzt7CiYjNDM7CWludCBwYWdlbm87CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZvciBub24tcmVzaXphYmxlIFZQUiAobm8gY2h1bmtzKSwgdXNlIHNpbXBsZSBmaXJzdC1maXQgYWxsb2NhdGlvbi4KJiM0MzsJICogQ2x1c3RlcmluZyBvcHRpbWl6YXRpb24gaXMgb25seSBiZW5lZmljaWFsIGZvciByZXNpemFibGUgVlBSIHdoZXJlCiYjNDM7CSAqIGtlZXBpbmcgYWxsb2NhdGlvbnMgdG9nZXRoZXIgbWluaW1pemVzIHRoZSBhY3RpdmUgVlBSIHNpemUuCiYjNDM7CSAqLwomIzQzOwlpZiAodnByLSZndDtudW1fY2h1bmtzID09IDApCiYjNDM7CQlyZXR1cm4gdGVncmFfdnByX2ZpbmRfZnJlZV9yZWdpb24odnByLCBudW1fcGFnZXMsIGFsaWduKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBleGlzdGluZyBhbGxvY2F0aW9ucyBpbiB0aGUgYml0bWFwLiBJZiBzbywKJiM0MzsJICogdHJ5IHRvIGFsbG9jYXRlIG5lYXIgdGhlbSB0byBtaW5pbWl6ZSBmcmFnbWVudGF0aW9uLgomIzQzOwkgKi8KJiM0MzsJcGFnZW5vID0gdGVncmFfdnByX2ZpbmRfZnJlZV9yZWdpb25fY2x1c3RlcmVkKHZwciwgbnVtX3BhZ2VzLCBhbGlnbik7CiYjNDM7CWlmIChwYWdlbm8gJmd0Oz0gMCkKJiM0MzsJCXJldHVybiBwYWdlbm87CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIElmIHRoZXJlIGFyZSBubyBleGlzdGluZyBhbGxvY2F0aW9ucywgb3Igbm8gc3BhY2UgYWRqYWNlbnQgdG8gdGhlbSwKJiM0MzsJICogZmFsbCBiYWNrIHRvIHRoZSBmaXJzdCBhdmFpbGFibGUgc3BhY2UgYW55d2hlcmUgaW4gdGhlIFZQUi4KJiM0MzsJICovCiYjNDM7CXBhZ2VubyA9IHRlZ3JhX3Zwcl9maW5kX2ZyZWVfcmVnaW9uKHZwciwgbnVtX3BhZ2VzLCBhbGlnbik7CiYjNDM7CWlmIChwYWdlbm8gJmd0Oz0gMCkKJiM0MzsJCXJldHVybiBwYWdlbm87CiYjNDM7CiYjNDM7CXJldHVybiAtRU5PU1BDOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKgomIzQzO3RlZ3JhX3Zwcl9idWZmZXJfYWxsb2NhdGUoc3RydWN0IHRlZ3JhX3ZwciAqdnByLCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBudW1fcGFnZXMgPSBzaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CXVuc2lnbmVkIGludCBvcmRlciA9IGdldF9vcmRlcihzaXplKTsKJiM0MzsJc3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKmJ1ZmZlcjsKJiM0MzsJdW5zaWduZWQgbG9uZyBmaXJzdCwgbGFzdDsKJiM0MzsJaW50IHBhZ2VubywgZXJyOwomIzQzOwlwZ29mZl90IGk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqICYjMzQ7b3JkZXImIzM0OyBkZWZpbmVzIHRoZSBhbGlnbm1lbnQgYW5kIHNpemUsIHNvIHRoaXMgbWF5IHJlc3VsdCBpbgomIzQzOwkgKiBmcmFnbWVudGVkIG1lbW9yeSBkZXBlbmRpbmcgb24gdGhlIGFsbG9jYXRpb24gcGF0dGVybnMuIEhvd2V2ZXIsCiYjNDM7CSAqIHNpbmNlIHRoaXMgaXMgdXNlZCBwcmltYXJpbHkgZm9yIHZpZGVvIGZyYW1lcywgaXQgaXMgZXhwZWN0ZWQgdGhhdAomIzQzOwkgKiBhIG51bWJlciBvZiBidWZmZXJzIG9mIHRoZSBzYW1lIHNpemUgd2lsbCBiZSBhbGxvY2F0ZWQsIHNvCiYjNDM7CSAqIGZyYWdtZW50YXRpb24gc2hvdWxkIGJlIG5lZ2xpZ2libGUuCiYjNDM7CSAqLwomIzQzOwlwYWdlbm8gPSB0ZWdyYV92cHJfYWxsb2NhdGVfcmVnaW9uKHZwciwgbnVtX3BhZ2VzLCAxKTsKJiM0MzsJaWYgKHBhZ2VubyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihwYWdlbm8pOwomIzQzOwomIzQzOwlmaXJzdCA9IGZpbmRfZmlyc3RfYml0KHZwci0mZ3Q7Yml0bWFwLCB2cHItJmd0O251bV9wYWdlcyk7CiYjNDM7CWxhc3QgPSBmaW5kX2xhc3RfYml0KHZwci0mZ3Q7Yml0bWFwLCB2cHItJmd0O251bV9wYWdlcyk7CiYjNDM7CiYjNDM7CWJ1ZmZlciA9IGt6YWxsb2Nfb2JqKCpidWZmZXIsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWJ1ZmZlcikgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gcmVsZWFzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO2J1ZmZlci0mZ3Q7YXR0YWNobWVudHMpOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO2J1ZmZlci0mZ3Q7bGlzdCk7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtidWZmZXItJmd0O2xvY2spOwomIzQzOwlidWZmZXItJmd0O3N0YXJ0ID0gdnByLSZndDtiYXNlICYjNDM7IChwYWdlbm8gJmx0OyZsdDsgUEFHRV9TSElGVCk7CiYjNDM7CWJ1ZmZlci0mZ3Q7bGltaXQgPSBidWZmZXItJmd0O3N0YXJ0ICYjNDM7IHNpemU7CiYjNDM7CWJ1ZmZlci0mZ3Q7c2l6ZSA9IHNpemU7CiYjNDM7CWJ1ZmZlci0mZ3Q7bnVtX3BhZ2VzID0gbnVtX3BhZ2VzOwomIzQzOwlidWZmZXItJmd0O3BhZ2VubyA9IHBhZ2VubzsKJiM0MzsJYnVmZmVyLSZndDtvcmRlciA9IG9yZGVyOwomIzQzOwomIzQzOwlidWZmZXItJmd0O3BhZ2VzID0ga21hbGxvY19hcnJheShidWZmZXItJmd0O251bV9wYWdlcywKJiM0MzsJCQkJICAgICAgc2l6ZW9mKCpidWZmZXItJmd0O3BhZ2VzKSwKJiM0MzsJCQkJICAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghYnVmZmVyLSZndDtwYWdlcykgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZnJlZTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiB0cmFjayB3aGljaCBjaHVua3MgdGhpcyBidWZmZXIgb3ZlcmxhcHMgKi8KJiM0MzsJaWYgKHZwci0mZ3Q7bnVtX2NodW5rcyAmZ3Q7IDApIHsKJiM0MzsJCXVuc2lnbmVkIGludCBsaW1pdCA9IGJ1ZmZlci0mZ3Q7cGFnZW5vICYjNDM7IGJ1ZmZlci0mZ3Q7bnVtX3BhZ2VzLCBpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHZwci0mZ3Q7bnVtX2NodW5rczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuayA9ICZhbXA7dnByLSZndDtjaHVua3NbaV07CiYjNDM7CiYjNDM7CQkJaWYgKHRlZ3JhX3Zwcl9jaHVua19vdmVybGFwcyhjaHVuaywgcGFnZW5vLCBsaW1pdCkpCiYjNDM7CQkJCXNldF9iaXQoaSwgYnVmZmVyLSZndDtjaHVua3MpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogYWN0aXZhdGUgY2h1bmtzIGlmIG5lY2Vzc2FyeSAqLwomIzQzOwkJZXJyID0gdGVncmFfdnByX2FjdGl2YXRlX2NodW5rcyh2cHIsIGJ1ZmZlcik7CiYjNDM7CQlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCQlnb3RvIGZyZWU7CiYjNDM7CiYjNDM7CQkvKiB0cmFjayBmaXJzdCBhbmQgbGFzdCBhbGxvY2F0ZWQgcGFnZXMgKi8KJiM0MzsJCWlmIChidWZmZXItJmd0O3BhZ2VubyAmbHQ7IHZwci0mZ3Q7Zmlyc3QpCiYjNDM7CQkJdnByLSZndDtmaXJzdCA9IGJ1ZmZlci0mZ3Q7cGFnZW5vOwomIzQzOwomIzQzOwkJaWYgKGxpbWl0IC0gMSAmZ3Q7IHZwci0mZ3Q7bGFzdCkKJiM0MzsJCQl2cHItJmd0O2xhc3QgPSBsaW1pdCAtIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGJ1ZmZlci0mZ3Q7bnVtX3BhZ2VzOyBpJiM0MzsmIzQzOykKJiM0MzsJCWJ1ZmZlci0mZ3Q7cGFnZXNbaV0gPSAmYW1wO3Zwci0mZ3Q7c3RhcnRfcGFnZVtwYWdlbm8gJiM0MzsgaV07CiYjNDM7CiYjNDM7CXJldHVybiBidWZmZXI7CiYjNDM7CiYjNDM7ZnJlZToKJiM0MzsJa2ZyZWUoYnVmZmVyLSZndDtwYWdlcyk7CiYjNDM7CWtmcmVlKGJ1ZmZlcik7CiYjNDM7cmVsZWFzZToKJiM0MzsJYml0bWFwX3JlbGVhc2VfcmVnaW9uKHZwci0mZ3Q7Yml0bWFwLCBwYWdlbm8sIG9yZGVyKTsKJiM0MzsJcmV0dXJuIEVSUl9QVFIoZXJyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVncmFfdnByX2J1ZmZlcl9yZWxlYXNlKHN0cnVjdCB0ZWdyYV92cHJfYnVmZmVyICpidWZmZXIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVncmFfdnByICp2cHIgPSBidWZmZXItJmd0O3ZwcjsKJiM0MzsJc3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKmVudHJ5OwomIzQzOwl1bnNpZ25lZCBsb25nIGZpcnN0LCBsYXN0OwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRGVjcmVtZW50IGJ1ZmZlciBjb3VudCBmb3IgZWFjaCBvdmVybGFwcGluZyBjaHVuay4gTm90ZSB0aGF0IGNodW5rcwomIzQzOwkgKiBhcmUgbm90IGRlYWN0aXZhdGVkIGhlcmUgeWV0LCB0aGF0JiMzOTtzIGRvbmUgaW4gdGVncmFfdnByX3JlY3ljbGUoKQomIzQzOwkgKiBpbnN0ZWFkLgomIzQzOwkgKi8KJiM0MzsJZm9yX2VhY2hfc2V0X2JpdChpLCBidWZmZXItJmd0O2NodW5rcywgdnByLSZndDtudW1fY2h1bmtzKSB7CiYjNDM7CQlpZiAoIVdBUk5fT04odnByLSZndDtjaHVua3NbaV0ubnVtX2J1ZmZlcnMgPT0gMCkpCiYjNDM7CQkJdnByLSZndDtjaHVua3NbaV0ubnVtX2J1ZmZlcnMtLTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiB0cmFjayBmaXJzdCBhbmQgbGFzdCBhbGxvY2F0ZWQgcGFnZXMgKi8KJiM0MzsJaWYgKGxpc3RfaXNfZmlyc3QoJmFtcDtidWZmZXItJmd0O2xpc3QsICZhbXA7dnByLSZndDtidWZmZXJzKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBsaXN0X2lzX2xhc3QoJmFtcDtidWZmZXItJmd0O2xpc3QsICZhbXA7dnByLSZndDtidWZmZXJzKSkgewomIzQzOwkJLyogaWYgdGhlcmUgYXJlIG5vIHJlbWFpbmluZyBidWZmZXJzIGFmdGVyIHRoaXMsIHJlc2V0ICovCiYjNDM7CQl2cHItJmd0O2ZpcnN0ID0gfjBVOwomIzQzOwkJdnByLSZndDtsYXN0ID0gMFU7CiYjNDM7CX0gZWxzZSBpZiAobGlzdF9pc19maXJzdCgmYW1wO2J1ZmZlci0mZ3Q7bGlzdCwgJmFtcDt2cHItJmd0O2J1ZmZlcnMpKSB7CiYjNDM7CQllbnRyeSA9IGxpc3RfbmV4dF9lbnRyeShidWZmZXIsIGxpc3QpOwomIzQzOwkJdnByLSZndDtmaXJzdCA9IGVudHJ5LSZndDtwYWdlbm87CiYjNDM7CX0gZWxzZSBpZiAobGlzdF9pc19sYXN0KCZhbXA7YnVmZmVyLSZndDtsaXN0LCAmYW1wO3Zwci0mZ3Q7YnVmZmVycykpIHsKJiM0MzsJCWVudHJ5ID0gbGlzdF9wcmV2X2VudHJ5KGJ1ZmZlciwgbGlzdCk7CiYjNDM7CQl2cHItJmd0O2xhc3QgPSBlbnRyeS0mZ3Q7cGFnZW5vICYjNDM7IGVudHJ5LSZndDtudW1fcGFnZXMgLSAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJpdG1hcF9yZWxlYXNlX3JlZ2lvbih2cHItJmd0O2JpdG1hcCwgYnVmZmVyLSZndDtwYWdlbm8sIGJ1ZmZlci0mZ3Q7b3JkZXIpOwomIzQzOwlsaXN0X2RlbCgmYW1wO2J1ZmZlci0mZ3Q7bGlzdCk7CiYjNDM7CWtmcmVlKGJ1ZmZlci0mZ3Q7cGFnZXMpOwomIzQzOwlrZnJlZShidWZmZXIpOwomIzQzOwomIzQzOwlmaXJzdCA9IGZpbmRfZmlyc3RfYml0KHZwci0mZ3Q7Yml0bWFwLCB2cHItJmd0O251bV9wYWdlcyk7CiYjNDM7CWxhc3QgPSBmaW5kX2xhc3RfYml0KHZwci0mZ3Q7Yml0bWFwLCB2cHItJmd0O251bV9wYWdlcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGVncmFfdnByX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqYnVmLAomIzQzOwkJCSAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50KQomIzQzO3sKJiM0MzsJc3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKmJ1ZmZlciA9IGJ1Zi0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHRlZ3JhX3Zwcl9hdHRhY2htZW50ICphdHRhY2g7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWF0dGFjaCA9IGt6YWxsb2Nfb2JqKCphdHRhY2gsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWF0dGFjaCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwllcnIgPSBzZ19hbGxvY190YWJsZV9mcm9tX3BhZ2VzKCZhbXA7YXR0YWNoLSZndDtzZ3QsIGJ1ZmZlci0mZ3Q7cGFnZXMsCiYjNDM7CQkJCQlidWZmZXItJmd0O251bV9wYWdlcywgMCwgYnVmZmVyLSZndDtzaXplLAomIzQzOwkJCQkJR0ZQX0tFUk5FTCk7CiYjNDM7CWlmIChlcnIgJmx0OyAwKQomIzQzOwkJZ290byBmcmVlOwomIzQzOwomIzQzOwlhdHRhY2gtJmd0O2RldiA9IGF0dGFjaC0mZ3Q7ZGV2OwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO2F0dGFjaC0mZ3Q7bGlzdCk7CiYjNDM7CWF0dGFjaG1lbnQtJmd0O3ByaXYgPSBhdHRhY2g7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtidWZmZXItJmd0O2xvY2spOwomIzQzOwlsaXN0X2FkZCgmYW1wO2F0dGFjaC0mZ3Q7bGlzdCwgJmFtcDtidWZmZXItJmd0O2F0dGFjaG1lbnRzKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnVmZmVyLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZnJlZToKJiM0MzsJa2ZyZWUoYXR0YWNoKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVncmFfdnByX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqYnVmLAomIzQzOwkJCSAgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZWdyYV92cHJfYnVmZmVyICpidWZmZXIgPSBidWYtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCB0ZWdyYV92cHJfYXR0YWNobWVudCAqYXR0YWNoID0gYXR0YWNobWVudC0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2J1ZmZlci0mZ3Q7bG9jayk7CiYjNDM7CWxpc3RfZGVsKCZhbXA7YXR0YWNoLSZndDtsaXN0KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnVmZmVyLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJc2dfZnJlZV90YWJsZSgmYW1wO2F0dGFjaC0mZ3Q7c2d0KTsKJiM0MzsJa2ZyZWUoYXR0YWNoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBzZ190YWJsZSAqCiYjNDM7dGVncmFfdnByX21hcF9kbWFfYnVmKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsCiYjNDM7CQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVncmFfdnByX2F0dGFjaG1lbnQgKmF0dGFjaCA9IGF0dGFjaG1lbnQtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCBzZ190YWJsZSAqc2d0ID0gJmFtcDthdHRhY2gtJmd0O3NndDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gZG1hX21hcF9zZ3RhYmxlKGF0dGFjaG1lbnQtJmd0O2Rldiwgc2d0LCBkaXJlY3Rpb24sCiYjNDM7CQkJICAgICAgRE1BX0FUVFJfU0tJUF9DUFVfU1lOQyk7CiYjNDM7CWlmIChlcnIgJmx0OyAwKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNndDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVncmFfdnByX3VubWFwX2RtYV9idWYoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCwKJiM0MzsJCQkJICAgIHN0cnVjdCBzZ190YWJsZSAqc2d0LAomIzQzOwkJCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQomIzQzO3sKJiM0MzsJZG1hX3VubWFwX3NndGFibGUoYXR0YWNobWVudC0mZ3Q7ZGV2LCBzZ3QsIGRpcmVjdGlvbiwKJiM0MzsJCQkgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZWdyYV92cHJfcmVjeWNsZShzdHJ1Y3QgdGVncmFfdnByICp2cHIpCiYjNDM7ewomIzQzOwlERUNMQVJFX0JJVE1BUChkaXJ0eSwgdnByLSZndDtudW1fY2h1bmtzKTsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWJpdG1hcF96ZXJvKGRpcnR5LCB2cHItJmd0O251bV9jaHVua3MpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEZWFjdGl2YXRlIGFueSB1bnVzZWQgY2h1bmtzIGZyb20gdGhlIGJvdHRvbS4uLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHZwci0mZ3Q7bnVtX2NodW5rczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rID0gJmFtcDt2cHItJmd0O2NodW5rc1tpXTsKJiM0MzsKJiM0MzsJCWlmICghY2h1bmstJmd0O2FjdGl2ZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmIChjaHVuay0mZ3Q7bnVtX2J1ZmZlcnMgJmd0OyAwKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJZXJyID0gdGVncmFfdnByX2NodW5rX2RlYWN0aXZhdGUoY2h1bmspOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIGRlYWN0aXZhdGUgY2h1bmsgIyV1XG4mIzM0OywgaSk7CiYjNDM7CQllbHNlIHsKJiM0MzsJCQljbGVhcl9iaXQoaSwgdnByLSZndDthY3RpdmUpOwomIzQzOwkJCXNldF9iaXQoaSwgZGlydHkpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIC4uLiBhbmQgdGhlIHRvcC4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB2cHItJmd0O251bV9jaHVua3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgaW5kZXggPSB2cHItJmd0O251bV9jaHVua3MgLSBpIC0gMTsKJiM0MzsJCXN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rID0gJmFtcDt2cHItJmd0O2NodW5rc1tpbmRleF07CiYjNDM7CiYjNDM7CQlpZiAoIWNodW5rLSZndDthY3RpdmUpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoY2h1bmstJmd0O251bV9idWZmZXJzICZndDsgMCkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWVyciA9IHRlZ3JhX3Zwcl9jaHVua19kZWFjdGl2YXRlKGNodW5rKTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKQomIzQzOwkJCXByX2VycigmIzM0O2ZhaWxlZCB0byBkZWFjdGl2YXRlIGNodW5rICMldVxuJiMzNDssIGluZGV4KTsKJiM0MzsJCWVsc2UgewomIzQzOwkJCWNsZWFyX2JpdChpLCB2cHItJmd0O2FjdGl2ZSk7CiYjNDM7CQkJc2V0X2JpdChpLCBkaXJ0eSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFiaXRtYXBfZW1wdHkoZGlydHksIHZwci0mZ3Q7bnVtX2NodW5rcykpIHsKJiM0MzsJCWVyciA9IHRlZ3JhX3Zwcl9yZXNpemUodnByKTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIHNocmluayBWUFI6ICVkXG4mIzM0OywgZXJyKTsKJiM0MzsJCQlnb3RvIGFjdGl2YXRlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybjsKJiM0MzsKJiM0MzthY3RpdmF0ZToKJiM0MzsJZm9yX2VhY2hfc2V0X2JpdChpLCBkaXJ0eSwgdnByLSZndDtudW1fY2h1bmtzKSB7CiYjNDM7CQllcnIgPSB0ZWdyYV92cHJfY2h1bmtfYWN0aXZhdGUoJmFtcDt2cHItJmd0O2NodW5rc1tpXSk7CiYjNDM7CQlpZiAoV0FSTl9PTihlcnIgJmx0OyAwKSkKJiM0MzsJCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gYWN0aXZhdGUgY2h1bmsgIyV1OiAlZFxuJiMzNDssIGksIGVycik7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVncmFfdnByX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmJ1ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZWdyYV92cHJfYnVmZmVyICpidWZmZXIgPSBidWYtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCB0ZWdyYV92cHIgKnZwciA9IGJ1ZmZlci0mZ3Q7dnByOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7dnByLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJdGVncmFfdnByX2J1ZmZlcl9yZWxlYXNlKGJ1ZmZlcik7CiYjNDM7CiYjNDM7CWlmICh2cHItJmd0O251bV9jaHVua3MgJmd0OyAwKQomIzQzOwkJdGVncmFfdnByX3JlY3ljbGUodnByKTsKJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7dnByLSZndDtsb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQcm9oaWJpdCB1c2Vyc3BhY2UgbWFwcGluZyBiZWNhdXNlIHRoZSBDUFUgY2Fubm90IGFjY2VzcyB0aGlzIG1lbW9yeQomIzQzOyAqIGFueXdheS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHRlZ3JhX3Zwcl9iZWdpbl9jcHVfYWNjZXNzKHN0cnVjdCBkbWFfYnVmICpidWYsCiYjNDM7CQkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKJiM0Mzt7CiYjNDM7CXJldHVybiAtRVBFUk07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGVncmFfdnByX2VuZF9jcHVfYWNjZXNzKHN0cnVjdCBkbWFfYnVmICpidWYsCiYjNDM7CQkJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVQRVJNOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlZ3JhX3Zwcl9tbWFwKHN0cnVjdCBkbWFfYnVmICpidWYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FUEVSTTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyB0ZWdyYV92cHJfYnVmX29wcyA9IHsKJiM0MzsJLmF0dGFjaCA9IHRlZ3JhX3Zwcl9hdHRhY2gsCiYjNDM7CS5kZXRhY2ggPSB0ZWdyYV92cHJfZGV0YWNoLAomIzQzOwkubWFwX2RtYV9idWYgPSB0ZWdyYV92cHJfbWFwX2RtYV9idWYsCiYjNDM7CS51bm1hcF9kbWFfYnVmID0gdGVncmFfdnByX3VubWFwX2RtYV9idWYsCiYjNDM7CS5yZWxlYXNlID0gdGVncmFfdnByX3JlbGVhc2UsCiYjNDM7CS5iZWdpbl9jcHVfYWNjZXNzID0gdGVncmFfdnByX2JlZ2luX2NwdV9hY2Nlc3MsCiYjNDM7CS5lbmRfY3B1X2FjY2VzcyA9IHRlZ3JhX3Zwcl9lbmRfY3B1X2FjY2VzcywKJiM0MzsJLm1tYXAgPSB0ZWdyYV92cHJfbW1hcCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZG1hX2J1ZiAqdGVncmFfdnByX2FsbG9jYXRlKHN0cnVjdCBkbWFfaGVhcCAqaGVhcCwKJiM0MzsJCQkJCSAgdW5zaWduZWQgbG9uZyBsZW4sIHUzMiBmZF9mbGFncywKJiM0MzsJCQkJCSAgdTY0IGhlYXBfZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVncmFfdnByICp2cHIgPSBkbWFfaGVhcF9nZXRfZHJ2ZGF0YShoZWFwKTsKJiM0MzsJc3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKmJ1ZmZlciwgKmVudHJ5OwomIzQzOwlzaXplX3Qgc2l6ZSA9IEFMSUdOKGxlbiwgdnByLSZndDthbGlnbik7CiYjNDM7CURFRklORV9ETUFfQlVGX0VYUE9SVF9JTkZPKGV4cG9ydCk7CiYjNDM7CXN0cnVjdCBkbWFfYnVmICpidWY7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDt2cHItJmd0O2xvY2spOwomIzQzOwomIzQzOwlidWZmZXIgPSB0ZWdyYV92cHJfYnVmZmVyX2FsbG9jYXRlKHZwciwgc2l6ZSk7CiYjNDM7CWlmIChJU19FUlIoYnVmZmVyKSkgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7dnByLSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiBFUlJfQ0FTVChidWZmZXIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGluc2VydCBpbiB0aGUgY29ycmVjdCBvcmRlciAqLwomIzQzOwlpZiAoIWxpc3RfZW1wdHkoJmFtcDt2cHItJmd0O2J1ZmZlcnMpKSB7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmYW1wO3Zwci0mZ3Q7YnVmZmVycywgbGlzdCkgewomIzQzOwkJCWlmIChidWZmZXItJmd0O3BhZ2VubyAmbHQ7IGVudHJ5LSZndDtwYWdlbm8pIHsKJiM0MzsJCQkJbGlzdF9hZGRfdGFpbCgmYW1wO2J1ZmZlci0mZ3Q7bGlzdCwgJmFtcDtlbnRyeS0mZ3Q7bGlzdCk7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO2J1ZmZlci0mZ3Q7bGlzdCkpCiYjNDM7CQlsaXN0X2FkZF90YWlsKCZhbXA7YnVmZmVyLSZndDtsaXN0LCAmYW1wO3Zwci0mZ3Q7YnVmZmVycyk7CiYjNDM7CiYjNDM7CWJ1ZmZlci0mZ3Q7dnByID0gdnByOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJZiBhIHZhbGlkIGJ1ZmZlciB3YXMgYWxsb2NhdGVkLCB3cmFwIGl0IGluIGEgZG1hX2J1ZgomIzQzOwkgKiBhbmQgcmV0dXJuIGl0LgomIzQzOwkgKi8KJiM0MzsJZXhwb3J0LmV4cF9uYW1lID0gZG1hX2hlYXBfZ2V0X25hbWUoaGVhcCk7CiYjNDM7CWV4cG9ydC5vcHMgPSAmYW1wO3RlZ3JhX3Zwcl9idWZfb3BzOwomIzQzOwlleHBvcnQuc2l6ZSA9IGJ1ZmZlci0mZ3Q7c2l6ZTsKJiM0MzsJZXhwb3J0LmZsYWdzID0gZmRfZmxhZ3M7CiYjNDM7CWV4cG9ydC5wcml2ID0gYnVmZmVyOwomIzQzOwomIzQzOwlidWYgPSBkbWFfYnVmX2V4cG9ydCgmYW1wO2V4cG9ydCk7CiYjNDM7CWlmIChJU19FUlIoYnVmKSkKJiM0MzsJCXRlZ3JhX3Zwcl9idWZmZXJfcmVsZWFzZShidWZmZXIpOwomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt2cHItJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gYnVmOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZWdyYV92cHJfZGVidWdmc19zaG93X2J1ZmZlcnMoc3RydWN0IHRlZ3JhX3ZwciAqdnByLAomIzQzOwkJCQkJICAgc3RydWN0IHNlcV9maWxlICpzKQomIzQzO3sKJiM0MzsJc3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKmJ1ZmZlcjsKJiM0MzsJY2hhciBidWZbMTZdOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1ZmZlciwgJmFtcDt2cHItJmd0O2J1ZmZlcnMsIGxpc3QpIHsKJiM0MzsJCXN0cmluZ19nZXRfc2l6ZShidWZmZXItJmd0O3NpemUsIDEsIFNUUklOR19VTklUU18yLCBidWYsCiYjNDM7CQkJCXNpemVvZihidWYpKTsKJiM0MzsJCXNlcV9wcmludGYocywgJiMzNDsgICVwYXAtJXBhcCAoJXMpXG4mIzM0OywgJmFtcDtidWZmZXItJmd0O3N0YXJ0LAomIzQzOwkJCSAgICZhbXA7YnVmZmVyLSZndDtsaW1pdCwgYnVmKTsKJiM0MzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZWdyYV92cHJfZGVidWdmc19zaG93X2NodW5rcyhzdHJ1Y3QgdGVncmFfdnByICp2cHIsCiYjNDM7CQkJCQkgIHN0cnVjdCBzZXFfZmlsZSAqcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZWdyYV92cHJfYnVmZmVyICpidWZmZXI7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwljaGFyIGJ1ZlsxNl07CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB2cHItJmd0O251bV9jaHVua3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuayA9ICZhbXA7dnByLSZndDtjaHVua3NbaV07CiYjNDM7CiYjNDM7CQlzdHJpbmdfZ2V0X3NpemUoY2h1bmstJmd0O3NpemUsIDEsIFNUUklOR19VTklUU18yLCBidWYsCiYjNDM7CQkJCXNpemVvZihidWYpKTsKJiM0MzsJCXNlcV9wcmludGYocywgJiMzNDsgICVwYXAtJXBhcCAoJXMpICglcywgJXUgYnVmZmVycylcbiYjMzQ7LAomIzQzOwkJCSAgICZhbXA7Y2h1bmstJmd0O3N0YXJ0LCAmYW1wO2NodW5rLSZndDtsaW1pdCwgYnVmLAomIzQzOwkJCSAgIGNodW5rLSZndDthY3RpdmUgPyAmIzM0O2FjdGl2ZSYjMzQ7IDogJiMzNDtpbmFjdGl2ZSYjMzQ7LAomIzQzOwkJCSAgIGNodW5rLSZndDtudW1fYnVmZmVycyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShidWZmZXIsICZhbXA7dnByLSZndDtidWZmZXJzLCBsaXN0KSB7CiYjNDM7CQlzdHJpbmdfZ2V0X3NpemUoYnVmZmVyLSZndDtzaXplLCAxLCBTVFJJTkdfVU5JVFNfMiwgYnVmLAomIzQzOwkJCQlzaXplb2YoYnVmKSk7CiYjNDM7CQlzZXFfcHJpbnRmKHMsICYjMzQ7JXBhcC0lcGFwICglcywgY2h1bmtzOiAlKnBibClcbiYjMzQ7LAomIzQzOwkJCSAgICZhbXA7YnVmZmVyLSZndDtzdGFydCwgJmFtcDtidWZmZXItJmd0O2xpbWl0LCBidWYsCiYjNDM7CQkJICAgdnByLSZndDtudW1fY2h1bmtzLCBidWZmZXItJmd0O2NodW5rcyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0ZWdyYV92cHJfZGVidWdmc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGRtYV9oZWFwICpoZWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IHRlZ3JhX3ZwciAqdnByID0gZG1hX2hlYXBfZ2V0X2RydmRhdGEoaGVhcCk7CiYjNDM7CXBoeXNfYWRkcl90IGxpbWl0ID0gdnByLSZndDtiYXNlICYjNDM7IHZwci0mZ3Q7c2l6ZTsKJiM0MzsJY2hhciBidWZbMTZdOwomIzQzOwomIzQzOwlzdHJpbmdfZ2V0X3NpemUodnByLSZndDtzaXplLCAxLCBTVFJJTkdfVU5JVFNfMiwgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslcGFwLSVwYXAgKCVzKVxuJiMzNDssICZhbXA7dnByLSZndDtiYXNlLCAmYW1wO2xpbWl0LCBidWYpOwomIzQzOwomIzQzOwlpZiAodnByLSZndDtudW1fY2h1bmtzID09IDApCiYjNDM7CQl0ZWdyYV92cHJfZGVidWdmc19zaG93X2J1ZmZlcnModnByLCBzKTsKJiM0MzsJZWxzZQomIzQzOwkJdGVncmFfdnByX2RlYnVnZnNfc2hvd19jaHVua3ModnByLCBzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2hlYXBfb3BzIHRlZ3JhX3Zwcl9oZWFwX29wcyA9IHsKJiM0MzsJLmFsbG9jYXRlID0gdGVncmFfdnByX2FsbG9jYXRlLAomIzQzOwkuc2hvdyA9IHRlZ3JhX3Zwcl9kZWJ1Z2ZzX3Nob3csCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlZ3JhX3Zwcl9zZXR1cF9jaHVua3Moc3RydWN0IHRlZ3JhX3ZwciAqdnByLCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJcGh5c19hZGRyX3Qgc3RhcnQsIGxpbWl0OwomIzQzOwl1bnNpZ25lZCBpbnQgb3JkZXIsIGk7CiYjNDM7CXNpemVfdCBtYXhfc2l6ZTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJLyogVGhpcyBzZWVtcyBhIHJlYXNvbmFibGUgdmFsdWUsIHNvIGhhcmQtY29kZSB0aGlzIGZvciBub3cuICovCiYjNDM7CXZwci0mZ3Q7bnVtX2NodW5rcyA9IDQ7CiYjNDM7CiYjNDM7CXZwci0mZ3Q7Y2h1bmtzID0ga2NhbGxvYyh2cHItJmd0O251bV9jaHVua3MsIHNpemVvZigqdnByLSZndDtjaHVua3MpLAomIzQzOwkJCSAgICAgIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXZwci0mZ3Q7Y2h1bmtzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CW1heF9zaXplID0gUEFHRV9TSVpFICZsdDsmbHQ7IChnZXRfb3JkZXIodnByLSZndDtzaXplKSAtIGlsb2cyKHZwci0mZ3Q7bnVtX2NodW5rcykpOwomIzQzOwlvcmRlciA9IGdldF9vcmRlcih2cHItJmd0O2FsaWduKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQWxsb2NhdGUgQ01BIGFyZWFzIGZvciBWUFIuIEFsbCBhcmVhcyB3aWxsIGJlIHJvdWdodGx5IHRoZSBzYW1lCiYjNDM7CSAqIHNpemUsIHdpdGggdGhlIGxhc3QgYXJlYSB0YWtpbmcgdXAgdGhlIHJlc3QuCiYjNDM7CSAqLwomIzQzOwlzdGFydCA9IHZwci0mZ3Q7YmFzZTsKJiM0MzsJbGltaXQgPSB2cHItJmd0O2Jhc2UgJiM0MzsgdnByLSZndDtzaXplOwomIzQzOwomIzQzOwlwcl9kZWJ1ZygmIzM0O1ZQUjogJXBhcC0lcGFwICglbHUgcGFnZXMsICV1IGNodW5rcywgJWx1IE1pQilcbiYjMzQ7LCAmYW1wO3N0YXJ0LAomIzQzOwkJICZhbXA7bGltaXQsIHZwci0mZ3Q7bnVtX3BhZ2VzLCB2cHItJmd0O251bV9jaHVua3MsCiYjNDM7CQkgKHVuc2lnbmVkIGxvbmcpdnByLSZndDtzaXplIC8gMTAyNCAvIDEwMjQpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdnByLSZndDtudW1fY2h1bmtzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc2l6ZV90IHNpemUgPSBsaW1pdCAtIHN0YXJ0OwomIzQzOwkJcGh5c19hZGRyX3QgZW5kOwomIzQzOwomIzQzOwkJc2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgbWF4X3NpemUpOwomIzQzOwkJZW5kID0gc3RhcnQgJiM0Mzsgc2l6ZSAtIDE7CiYjNDM7CiYjNDM7CQllcnIgPSB0ZWdyYV92cHJfY2h1bmtfaW5pdCh2cHIsICZhbXA7dnByLSZndDtjaHVua3NbaV0sIHN0YXJ0LCBzaXplLAomIzQzOwkJCQkJICAgb3JkZXIsIG5hbWUpOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gY3JlYXRlIFZQUiBjaHVuazogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJCWdvdG8gZnJlZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXByX2RlYnVnKCYjMzQ7ICAlMnU6ICVwYXAtJXBhcCAoJWx1IE1pQilcbiYjMzQ7LCBpLCAmYW1wO3N0YXJ0LCAmYW1wO2VuZCwKJiM0MzsJCQkgc2l6ZSAvIDEwMjQgLyAxMDI0KTsKJiM0MzsJCXN0YXJ0ICYjNDM7PSBzaXplOwomIzQzOwl9CiYjNDM7CiYjNDM7CXZwci0mZ3Q7Zmlyc3QgPSB+MFU7CiYjNDM7CXZwci0mZ3Q7bGFzdCA9IDBVOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztmcmVlOgomIzQzOwl3aGlsZSAoaS0tKQomIzQzOwkJdGVncmFfdnByX2NodW5rX2ZyZWUoJmFtcDt2cHItJmd0O2NodW5rc1tpXSk7CiYjNDM7CiYjNDM7CWtmcmVlKHZwci0mZ3Q7Y2h1bmtzKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVncmFfdnByX2ZyZWVfY2h1bmtzKHN0cnVjdCB0ZWdyYV92cHIgKnZwcikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdnByLSZndDtudW1fY2h1bmtzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXRlZ3JhX3Zwcl9jaHVua19mcmVlKCZhbXA7dnByLSZndDtjaHVua3NbaV0pOwomIzQzOwomIzQzOwlrZnJlZSh2cHItJmd0O2NodW5rcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGVncmFfdnByX3NldHVwX3N0YXRpYyhzdHJ1Y3QgdGVncmFfdnByICp2cHIpCiYjNDM7ewomIzQzOwlwaHlzX2FkZHJfdCBzdGFydCwgbGltaXQ7CiYjNDM7CiYjNDM7CXN0YXJ0ID0gdnByLSZndDtiYXNlOwomIzQzOwlsaW1pdCA9IHZwci0mZ3Q7YmFzZSAmIzQzOyB2cHItJmd0O3NpemU7CiYjNDM7CiYjNDM7CXByX2RlYnVnKCYjMzQ7VlBSOiAlcGFwLSVwYXAgKCVsdSBwYWdlcywgJWx1IE1pQilcbiYjMzQ7LCAmYW1wO3N0YXJ0LCAmYW1wO2xpbWl0LAomIzQzOwkJIHZwci0mZ3Q7bnVtX3BhZ2VzLCAodW5zaWduZWQgbG9uZyl2cHItJmd0O3NpemUgLyAxMDI0IC8gMTAyNCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCB0ZWdyYV92cHJfYWRkX2hlYXAoc3RydWN0IHJlc2VydmVkX21lbSAqcm1lbSwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9oZWFwX2V4cG9ydF9pbmZvIGluZm8gPSB7fTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmaXJzdCwgbGFzdDsKJiM0MzsJc3RydWN0IGRtYV9oZWFwICpoZWFwOwomIzQzOwlzdHJ1Y3QgdGVncmFfdnByICp2cHI7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXZwciA9IGt6YWxsb2Nfb2JqKCp2cHIsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXZwcikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO3Zwci0mZ3Q7YnVmZmVycyk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7dnByLSZndDtkZXZpY2VzKTsKJiM0MzsJdnByLSZndDtyZXNpemFibGUgPSAhb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAmIzM0O25vLW1hcCYjMzQ7KTsKJiM0MzsJdnByLSZndDt1c2VfZnJlZXplciA9IHRydWU7CiYjNDM7CXZwci0mZ3Q7ZGV2X25vZGUgPSBucDsKJiM0MzsJdnByLSZndDthbGlnbiA9IFBBR0VfU0laRTsKJiM0MzsJdnByLSZndDtiYXNlID0gcm1lbS0mZ3Q7YmFzZTsKJiM0MzsJdnByLSZndDtzaXplID0gcm1lbS0mZ3Q7c2l6ZTsKJiM0MzsKJiM0MzsJLyogY29tbW9uIHNldHVwICovCiYjNDM7CXZwci0mZ3Q7c3RhcnRfcGFnZSA9IHBoeXNfdG9fcGFnZSh2cHItJmd0O2Jhc2UpOwomIzQzOwl2cHItJmd0O251bV9wYWdlcyA9IHZwci0mZ3Q7c2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwomIzQzOwl2cHItJmd0O2JpdG1hcCA9IGJpdG1hcF96YWxsb2ModnByLSZndDtudW1fcGFnZXMsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXZwci0mZ3Q7Yml0bWFwKSB7CiYjNDM7CQllcnIgPSAtRU5PTUVNOwomIzQzOwkJZ290byBmcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZpcnN0ID0gZmluZF9maXJzdF9iaXQodnByLSZndDtiaXRtYXAsIHZwci0mZ3Q7bnVtX3BhZ2VzKTsKJiM0MzsJbGFzdCA9IGZpbmRfbGFzdF9iaXQodnByLSZndDtiaXRtYXAsIHZwci0mZ3Q7bnVtX3BhZ2VzKTsKJiM0MzsKJiM0MzsJaWYgKHZwci0mZ3Q7cmVzaXphYmxlKQomIzQzOwkJZXJyID0gdGVncmFfdnByX3NldHVwX2NodW5rcyh2cHIsIHJtZW0tJmd0O25hbWUpOwomIzQzOwllbHNlCiYjNDM7CQllcnIgPSB0ZWdyYV92cHJfc2V0dXBfc3RhdGljKHZwcik7CiYjNDM7CiYjNDM7CWlmIChlcnIgJmx0OyAwKQomIzQzOwkJZ290byBmcmVlOwomIzQzOwomIzQzOwlpbmZvLm5hbWUgPSB2cHItJmd0O2Rldl9ub2RlLSZndDtuYW1lOwomIzQzOwlpbmZvLm9wcyA9ICZhbXA7dGVncmFfdnByX2hlYXBfb3BzOwomIzQzOwlpbmZvLnByaXYgPSB2cHI7CiYjNDM7CiYjNDM7CWhlYXAgPSBkbWFfaGVhcF9hZGQoJmFtcDtpbmZvKTsKJiM0MzsJaWYgKElTX0VSUihoZWFwKSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihoZWFwKTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwlybWVtLSZndDtwcml2ID0gaGVhcDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKHZwci0mZ3Q7cmVzaXphYmxlKQomIzQzOwkJdGVncmFfdnByX2ZyZWVfY2h1bmtzKHZwcik7CiYjNDM7ZnJlZToKJiM0MzsJYml0bWFwX2ZyZWUodnByLSZndDtiaXRtYXApOwomIzQzOwlrZnJlZSh2cHIpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCB0ZWdyYV92cHJfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqY29tcGF0aWJsZSA9ICYjMzQ7bnZpZGlhLHRlZ3JhLXZpZGVvLXByb3RlY3Rpb24tcmVnaW9uJiMzNDs7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50OwomIzQzOwlzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpybWVtOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlwYXJlbnQgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgmIzM0Oy9yZXNlcnZlZC1tZW1vcnkmIzM0Oyk7CiYjNDM7CWlmICghcGFyZW50KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKHBhcmVudCwgY2hpbGQpIHsKJiM0MzsJCWlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoY2hpbGQsIGNvbXBhdGlibGUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJcm1lbSA9IG9mX3Jlc2VydmVkX21lbV9sb29rdXAoY2hpbGQpOwomIzQzOwkJaWYgKCFybWVtKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gdGVncmFfdnByX2FkZF9oZWFwKHJtZW0sIGNoaWxkKTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKQomIzQzOwkJCXByX2VycigmIzM0O2ZhaWxlZCB0byBhZGQgVlBSIGhlYXAgZm9yICVwT0Y6ICVkXG4mIzM0OywgY2hpbGQsCiYjNDM7CQkJICAgICAgIGVycik7CiYjNDM7CiYjNDM7CQkvKiBvbmx5IGEgc2luZ2xlIFZQUiBoZWFwIGlzIHN1cHBvcnRlZCAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO21vZHVsZV9pbml0KHRlZ3JhX3Zwcl9pbml0KTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlZ3JhX3Zwcl9ub2RlX2luaXQodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCByZXNlcnZlZF9tZW0gKnJtZW0pCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0ZWdyYV92cHJfZGV2aWNlX2luaXQoc3RydWN0IHJlc2VydmVkX21lbSAqcm1lbSwgc3RydWN0IGRldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9oZWFwICpoZWFwID0gcm1lbS0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHRlZ3JhX3ZwciAqdnByID0gZG1hX2hlYXBfZ2V0X2RydmRhdGEoaGVhcCk7CiYjNDM7CXN0cnVjdCB0ZWdyYV92cHJfZGV2aWNlICpub2RlOwomIzQzOwomIzQzOwlpZiAoIWRldi0mZ3Q7ZHJpdmVyLSZndDtwbS0mZ3Q7ZnJlZXplIHx8ICFkZXYtJmd0O2RyaXZlci0mZ3Q7cG0tJmd0O3RoYXcpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbm9kZSA9IGt6YWxsb2Nfb2JqKCpub2RlLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFub2RlKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7bm9kZS0mZ3Q7bm9kZSk7CiYjNDM7CW5vZGUtJmd0O2RldiA9IGRldjsKJiM0MzsKJiM0MzsJbGlzdF9hZGRfdGFpbCgmYW1wO25vZGUtJmd0O25vZGUsICZhbXA7dnByLSZndDtkZXZpY2VzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlZ3JhX3Zwcl9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpybWVtLAomIzQzOwkJCQkgICAgIHN0cnVjdCBkZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfaGVhcCAqaGVhcCA9IHJtZW0tJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCB0ZWdyYV92cHIgKnZwciA9IGRtYV9oZWFwX2dldF9kcnZkYXRhKGhlYXApOwomIzQzOwlzdHJ1Y3QgdGVncmFfdnByX2RldmljZSAqbm9kZSwgKnRtcDsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIHRtcCwgJmFtcDt2cHItJmd0O2RldmljZXMsIG5vZGUpIHsKJiM0MzsJCWlmIChub2RlLSZndDtkZXYgPT0gZGV2KSB7CiYjNDM7CQkJbGlzdF9kZWwoJmFtcDtub2RlLSZndDtub2RlKTsKJiM0MzsJCQlrZnJlZShub2RlKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJlc2VydmVkX21lbV9vcHMgdGVncmFfdnByX3JtZW1fb3BzID0gewomIzQzOwkubm9kZV9pbml0ID0gdGVncmFfdnByX25vZGVfaW5pdCwKJiM0MzsJLmRldmljZV9pbml0ID0gdGVncmFfdnByX2RldmljZV9pbml0LAomIzQzOwkuZGV2aWNlX3JlbGVhc2UgPSB0ZWdyYV92cHJfZGV2aWNlX3JlbGVhc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztSRVNFUlZFRE1FTV9PRl9ERUNMQVJFKHRlZ3JhX3ZwciwgJiMzNDtudmlkaWEsdGVncmEtdmlkZW8tcHJvdGVjdGlvbi1yZWdpb24mIzM0OywKJiM0MzsJCSAgICAgICAmYW1wO3RlZ3JhX3Zwcl9ybWVtX29wcyk7CiYjNDM7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TlZJRElBIFRlZ3JhIFZpZGVvLVByb3RlY3Rpb24tUmVnaW9uIERNQS1CVUYgaGVhcCBkcml2ZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oIGIvaW5jbHVkZS9saW51eC9iaXRtYXAuaAppbmRleCBiMDA3ZDU0YTkwMzZhNS4uZGNjODFkYzA4MmVkYzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYml0bWFwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9iaXRtYXAuaApAQCAtNzIxLDEwICYjNDM7NzIxLDEwIEBAIHZvaWQgYml0bWFwX3JlbGVhc2VfcmVnaW9uKHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgdW5zaWduZWQgaW50IHBvcywgaW50IG9yZGVyKQogfQogCiAvKioKLSAqIGJpdG1hcF9hbGxvY2F0ZV9yZWdpb24gLSBhbGxvY2F0ZSBiaXRtYXAgcmVnaW9uCiYjNDM7ICogYml0bWFwX2FsbG9jYXRlIC0gYWxsb2NhdGUgYml0bWFwIHJlZ2lvbgogICoJQGJpdG1hcDogYXJyYXkgb2YgdW5zaWduZWQgbG9uZ3MgY29ycmVzcG9uZGluZyB0byB0aGUgYml0bWFwCiAgKglAcG9zOiBiZWdpbm5pbmcgb2YgYml0IHJlZ2lvbiB0byBhbGxvY2F0ZQotICoJQG9yZGVyOiByZWdpb24gc2l6ZSAobG9nIGJhc2UgMiBvZiBudW1iZXIgb2YgYml0cykgdG8gYWxsb2NhdGUKJiM0MzsgKglAbGVuOiBudW1iZXIgb2YgYml0cyB0byBhbGxvY2F0ZQogICoKICAqIEFsbG9jYXRlIChzZXQgYml0cyBpbikgYSBzcGVjaWZpZWQgcmVnaW9uIG9mIGEgYml0bWFwLgogICoKQEAgLTczMiwxNiAmIzQzOzczMiwzMSBAQCB2b2lkIGJpdG1hcF9yZWxlYXNlX3JlZ2lvbih1bnNpZ25lZCBsb25nICpiaXRtYXAsIHVuc2lnbmVkIGludCBwb3MsIGludCBvcmRlcikKICAqIGZyZWUgKG5vdCBhbGwgYml0cyB3ZXJlIHplcm8pLgogICovCiBzdGF0aWMgX19hbHdheXNfaW5saW5lCi1pbnQgYml0bWFwX2FsbG9jYXRlX3JlZ2lvbih1bnNpZ25lZCBsb25nICpiaXRtYXAsIHVuc2lnbmVkIGludCBwb3MsIGludCBvcmRlcikKJiM0MztpbnQgYml0bWFwX2FsbG9jYXRlKHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGxlbikKIHsKLQl1bnNpZ25lZCBpbnQgbGVuID0gQklUKG9yZGVyKTsKLQogCWlmIChmaW5kX25leHRfYml0KGJpdG1hcCwgcG9zICYjNDM7IGxlbiwgcG9zKSAmbHQ7IHBvcyAmIzQzOyBsZW4pCiAJCXJldHVybiAtRUJVU1k7CiAJYml0bWFwX3NldChiaXRtYXAsIHBvcywgbGVuKTsKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGJpdG1hcF9hbGxvY2F0ZV9yZWdpb24gLSBhbGxvY2F0ZSBiaXRtYXAgcmVnaW9uCiYjNDM7ICoJQGJpdG1hcDogYXJyYXkgb2YgdW5zaWduZWQgbG9uZ3MgY29ycmVzcG9uZGluZyB0byB0aGUgYml0bWFwCiYjNDM7ICoJQHBvczogYmVnaW5uaW5nIG9mIGJpdCByZWdpb24gdG8gYWxsb2NhdGUKJiM0MzsgKglAb3JkZXI6IHJlZ2lvbiBzaXplIChsb2cgYmFzZSAyIG9mIG51bWJlciBvZiBiaXRzKSB0byBhbGxvY2F0ZQomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGUgKHNldCBiaXRzIGluKSBhIHNwZWNpZmllZCByZWdpb24gb2YgYSBiaXRtYXAuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG9yICUtRUJVU1kgaWYgc3BlY2lmaWVkIHJlZ2lvbiB3YXNuJiMzOTt0CiYjNDM7ICogZnJlZSAobm90IGFsbCBiaXRzIHdlcmUgemVybykuCiYjNDM7ICovCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZQomIzQzO2ludCBiaXRtYXBfYWxsb2NhdGVfcmVnaW9uKHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgdW5zaWduZWQgaW50IHBvcywgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJpdG1hcF9hbGxvY2F0ZShiaXRtYXAsIHBvcywgQklUKG9yZGVyKSk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbiAtIGZpbmQgYSBjb250aWd1b3VzIGFsaWduZWQgbWVtIHJlZ2lvbgogICoJQGJpdG1hcDogYXJyYXkgb2YgdW5zaWduZWQgbG9uZ3MgY29ycmVzcG9uZGluZyB0byB0aGUgYml0bWFwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NtYS5oIGIvaW5jbHVkZS9saW51eC9jbWEuaAppbmRleCA4NTU1ZDM4YTk3YjFhNS4uZmI3YTQ5MjNjM2JhOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY21hLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jbWEuaApAQCAtNyw3ICYjNDM7Nyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbnVtYS5oJmd0OwogCiAjaWZkZWYgQ09ORklHX0NNQV9BUkVBUwotI2RlZmluZSBNQVhfQ01BX0FSRUFTCUNPTkZJR19DTUFfQVJFQVMKJiM0MzsjZGVmaW5lIE1BWF9FQVJMWV9DTUFfQVJFQVMJQ09ORklHX0NNQV9BUkVBUwogI2VuZGlmCiAKICNkZWZpbmUgQ01BX01BWF9OQU1FIDY0CkBAIC01Nyw4ICYjNDM7NTcsMTQgQEAgc3RydWN0IHBhZ2UgKmNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwogYm9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsCiAJCXVuc2lnbmVkIGxvbmcgY291bnQpOwogCiYjNDM7ZXh0ZXJuIGludCBjbWFfZm9yX2VhY2hfZWFybHlfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7CiBleHRlcm4gaW50IGNtYV9mb3JfZWFjaF9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKTsKIGV4dGVybiBib29sIGNtYV9pbnRlcnNlY3RzKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwogCiBleHRlcm4gdm9pZCBjbWFfcmVzZXJ2ZV9wYWdlc19vbl9lcnJvcihzdHJ1Y3QgY21hICpjbWEpOwomIzQzOwomIzQzO2V4dGVybiBzdHJ1Y3QgY21hICpjbWFfY3JlYXRlKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsCiYjNDM7CQkJICAgICAgdW5zaWduZWQgaW50IG9yZGVyX3Blcl9iaXQsIGNvbnN0IGNoYXIgKm5hbWUpOwomIzQzO2V4dGVybiB2b2lkIGNtYV9mcmVlKHN0cnVjdCBjbWEgKmNtYSk7CiYjNDM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLWhlYXAuaCBiL2luY2x1ZGUvbGludXgvZG1hLWhlYXAuaAppbmRleCA2NDgzMjhhNjRiMjdlYS4uMWM5YmVkMWY0ZGRlZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWhlYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RtYS1oZWFwLmgKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKIAogc3RydWN0IGRtYV9oZWFwOwomIzQzO3N0cnVjdCBzZXFfZmlsZTsKIAogLyoqCiAgKiBzdHJ1Y3QgZG1hX2hlYXBfb3BzIC0gb3BzIHRvIG9wZXJhdGUgb24gYSBnaXZlbiBoZWFwCkBAIC0yNCw2ICYjNDM7MjUsNyBAQCBzdHJ1Y3QgZG1hX2hlYXBfb3BzIHsKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBsZW4sCiAJCQkJICAgIHUzMiBmZF9mbGFncywKIAkJCQkgICAgdTY0IGhlYXBfZmxhZ3MpOwomIzQzOwlpbnQgKCpzaG93KShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBkbWFfaGVhcCAqaGVhcCk7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgKaW5kZXggMzAzMGQ5MjQ1ZjVhYzguLmFiY2IxMTM3OGZkYmQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaApAQCAtNzIsNiAmIzQzOzcyLDE3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGNsZWFyX21jZV9ub3NwZWModW5zaWduZWQgbG9uZyBwZm4pCiB9CiAjZW5kaWYKIAomIzQzOyNpZm5kZWYgQ09ORklHX0FSTTY0CiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2V0X21lbW9yeV9kZXZpY2UodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2V0X21lbW9yeV9ub3JtYWwodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAjaWZuZGVmIENPTkZJR19BUkNIX0hBU19NRU1fRU5DUllQVAogc3RhdGljIGlubGluZSBpbnQgc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy90ZWdyYV92cHIuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3RlZ3JhX3Zwci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mOGNlYjE3Njc5ZmUwYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3RlZ3JhX3Zwci5oCkBAIC0wLDAgJiM0MzsxLDU3IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsKJiM0MzsjaWYgIWRlZmluZWQoX1RSQUNFX1RFR1JBX1ZQUl9IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKQomIzQzOyNkZWZpbmUgX1RSQUNFX1RFR1JBX1ZQUl9ICiYjNDM7CiYjNDM7I3VuZGVmIFRSQUNFX1NZU1RFTQomIzQzOyNkZWZpbmUgVFJBQ0VfU1lTVEVNIHRlZ3JhX3ZwcgomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90cmFjZXBvaW50LmgmZ3Q7CiYjNDM7CiYjNDM7VFJBQ0VfRVZFTlQodGVncmFfdnByX2NodW5rX2FjdGl2YXRlLAomIzQzOwlUUF9QUk9UTyhwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgbGltaXQpLAomIzQzOwlUUF9BUkdTKHN0YXJ0LCBsaW1pdCksCiYjNDM7CVRQX1NUUlVDVF9fZW50cnkoCiYjNDM7CQlfX2ZpZWxkKHBoeXNfYWRkcl90LCBzdGFydCkKJiM0MzsJCV9fZmllbGQocGh5c19hZGRyX3QsIGxpbWl0KQomIzQzOwkpLAomIzQzOwlUUF9mYXN0X2Fzc2lnbigKJiM0MzsJCV9fZW50cnktJmd0O3N0YXJ0ID0gc3RhcnQ7CiYjNDM7CQlfX2VudHJ5LSZndDtsaW1pdCA9IGxpbWl0OwomIzQzOwkpLAomIzQzOwlUUF9wcmludGsoJiMzNDslcGFwLSVwYXAmIzM0OywgJmFtcDtfX2VudHJ5LSZndDtzdGFydCwKJiM0MzsJCSAgJmFtcDtfX2VudHJ5LSZndDtsaW1pdCkKJiM0MzspOwomIzQzOwomIzQzO1RSQUNFX0VWRU5UKHRlZ3JhX3Zwcl9jaHVua19kZWFjdGl2YXRlLAomIzQzOwlUUF9QUk9UTyhwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgbGltaXQpLAomIzQzOwlUUF9BUkdTKHN0YXJ0LCBsaW1pdCksCiYjNDM7CVRQX1NUUlVDVF9fZW50cnkoCiYjNDM7CQlfX2ZpZWxkKHBoeXNfYWRkcl90LCBzdGFydCkKJiM0MzsJCV9fZmllbGQocGh5c19hZGRyX3QsIGxpbWl0KQomIzQzOwkpLAomIzQzOwlUUF9mYXN0X2Fzc2lnbigKJiM0MzsJCV9fZW50cnktJmd0O3N0YXJ0ID0gc3RhcnQ7CiYjNDM7CQlfX2VudHJ5LSZndDtsaW1pdCA9IGxpbWl0OwomIzQzOwkpLAomIzQzOwlUUF9wcmludGsoJiMzNDslcGFwLSVwYXAmIzM0OywgJmFtcDtfX2VudHJ5LSZndDtzdGFydCwKJiM0MzsJCSAgJmFtcDtfX2VudHJ5LSZndDtsaW1pdCkKJiM0MzspOwomIzQzOwomIzQzO1RSQUNFX0VWRU5UKHRlZ3JhX3Zwcl9zZXQsCiYjNDM7CVRQX1BST1RPKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpLAomIzQzOwlUUF9BUkdTKGJhc2UsIHNpemUpLAomIzQzOwlUUF9TVFJVQ1RfX2VudHJ5KAomIzQzOwkJX19maWVsZChwaHlzX2FkZHJfdCwgc3RhcnQpCiYjNDM7CQlfX2ZpZWxkKHBoeXNfYWRkcl90LCBsaW1pdCkKJiM0MzsJKSwKJiM0MzsJVFBfZmFzdF9hc3NpZ24oCiYjNDM7CQlfX2VudHJ5LSZndDtzdGFydCA9IGJhc2U7CiYjNDM7CQlfX2VudHJ5LSZndDtsaW1pdCA9IGJhc2UgJiM0Mzsgc2l6ZTsKJiM0MzsJKSwKJiM0MzsJVFBfcHJpbnRrKCYjMzQ7JXBhcC0lcGFwJiMzNDssICZhbXA7X19lbnRyeS0mZ3Q7c3RhcnQsICZhbXA7X19lbnRyeS0mZ3Q7bGltaXQpCiYjNDM7KTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX1RSQUNFX1RFR1JBX1ZQUl9IICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3RyYWNlL2RlZmluZV90cmFjZS5oJmd0OwpkaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9jb250aWd1b3VzLmMgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYwppbmRleCBmNzU0MDc5YTI4N2Q2MS4uNzk3NTU1MWY2OWIzZDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kbWEvY29udGlndW91cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvY29udGlndW91cy5jCkBAIC01Miw3ICYjNDM7NTIsNyBAQAogI2RlZmluZSBDTUFfU0laRV9NQllURVMgMAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgY21hICpkbWFfY29udGlndW91c19hcmVhc1tNQVhfQ01BX0FSRUFTXTsKJiM0MztzdGF0aWMgc3RydWN0IGNtYSAqZG1hX2NvbnRpZ3VvdXNfYXJlYXNbTUFYX0VBUkxZX0NNQV9BUkVBU107CiBzdGF0aWMgdW5zaWduZWQgaW50IGRtYV9jb250aWd1b3VzX2FyZWFzX251bTsKIAogc3RhdGljIGludCBkbWFfY29udGlndW91c19pbnNlcnRfYXJlYShzdHJ1Y3QgY21hICpjbWEpCmRpZmYgLS1naXQgYS9tbS9jbWEuYyBiL21tL2NtYS5jCmluZGV4IGExM2NlNDk5OWIzOWY2Li5mOTg5ZTJlOTg1OTRmYiAxMDA2NDQKLS0tIGEvbW0vY21hLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vY21hLmMKQEAgLTM0LDcgJiM0MzszNCwxMiBAQAogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Y21hLmgmIzM0OwogCi1zdHJ1Y3QgY21hIGNtYV9hcmVhc1tNQVhfQ01BX0FSRUFTXTsKJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKGNtYV9sb2NrKTsKJiM0MzsKJiM0MztzdHJ1Y3QgY21hIGNtYV9lYXJseV9hcmVhc1tNQVhfRUFSTFlfQ01BX0FSRUFTXTsKJiM0Mzt1bnNpZ25lZCBpbnQgY21hX2Vhcmx5X2FyZWFfY291bnQ7CiYjNDM7CiYjNDM7c3RhdGljIExJU1RfSEVBRChjbWFfYXJlYXMpOwogdW5zaWduZWQgaW50IGNtYV9hcmVhX2NvdW50OwogCiBwaHlzX2FkZHJfdCBjbWFfZ2V0X2Jhc2UoY29uc3Qgc3RydWN0IGNtYSAqY21hKQpAQCAtMTk4LDcgJiM0MzsyMDMsNiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgY21hX2FjdGl2YXRlX2FyZWEoc3RydWN0IGNtYSAqY21hKQogCQkJCWZyZWVfcmVzZXJ2ZWRfcGFnZShwZm5fdG9fcGFnZShwZm4pKTsKIAkJfQogCX0KLQl0b3RhbGNtYV9wYWdlcyAtPSBjbWEtJmd0O2NvdW50OwogCWNtYS0mZ3Q7YXZhaWxhYmxlX2NvdW50ID0gY21hLSZndDtjb3VudCA9IDA7CiAJcHJfZXJyKCYjMzQ7Q01BIGFyZWEgJXMgY291bGQgbm90IGJlIGFjdGl2YXRlZFxuJiMzNDssIGNtYS0mZ3Q7bmFtZSk7CiB9CkBAIC0yMDcsOCAmIzQzOzIxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGNtYV9pbml0X3Jlc2VydmVkX2FyZWFzKHZvaWQpCiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgY21hX2FyZWFfY291bnQ7IGkmIzQzOyYjNDM7KQotCQljbWFfYWN0aXZhdGVfYXJlYSgmYW1wO2NtYV9hcmVhc1tpXSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjbWFfZWFybHlfYXJlYV9jb3VudDsgaSYjNDM7JiM0MzspCiYjNDM7CQljbWFfYWN0aXZhdGVfYXJlYSgmYW1wO2NtYV9lYXJseV9hcmVhc1tpXSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxOSw0MSAmIzQzOzIyMyw3NyBAQCB2b2lkIF9faW5pdCBjbWFfcmVzZXJ2ZV9wYWdlc19vbl9lcnJvcihzdHJ1Y3QgY21hICpjbWEpCiAJc2V0X2JpdChDTUFfUkVTRVJWRV9QQUdFU19PTl9FUlJPUiwgJmFtcDtjbWEtJmd0O2ZsYWdzKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBjbWFfaW5pdF9hcmVhKHN0cnVjdCBjbWEgKmNtYSwgY29uc3QgY2hhciAqbmFtZSwKJiM0MzsJCQkJIHBoeXNfYWRkcl90IHNpemUsIHVuc2lnbmVkIGludCBvcmRlcl9wZXJfYml0KQomIzQzO3sKJiM0MzsJaWYgKG5hbWUpCiYjNDM7CQlzdHJzY3B5KGNtYS0mZ3Q7bmFtZSwgbmFtZSk7CiYjNDM7CWVsc2UKJiM0MzsJCXNucHJpbnRmKGNtYS0mZ3Q7bmFtZSwgQ01BX01BWF9OQU1FLCAgJiMzNDtjbWElZFxuJiMzNDssIGNtYV9hcmVhX2NvdW50KTsKJiM0MzsKJiM0MzsJY21hLSZndDthdmFpbGFibGVfY291bnQgPSBjbWEtJmd0O2NvdW50ID0gc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwljbWEtJmd0O29yZGVyX3Blcl9iaXQgPSBvcmRlcl9wZXJfYml0OwomIzQzOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO2NtYS0mZ3Q7bm9kZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBfX2luaXQgY21hX25ld19hcmVhKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90IHNpemUsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IG9yZGVyX3Blcl9iaXQsCiAJCQkgICAgICAgc3RydWN0IGNtYSAqKnJlc19jbWEpCiB7CiAJc3RydWN0IGNtYSAqY21hOwogCi0JaWYgKGNtYV9hcmVhX2NvdW50ID09IEFSUkFZX1NJWkUoY21hX2FyZWFzKSkgewomIzQzOwlpZiAoY21hX2Vhcmx5X2FyZWFfY291bnQgPT0gQVJSQVlfU0laRShjbWFfZWFybHlfYXJlYXMpKSB7CiAJCXByX2VycigmIzM0O05vdCBlbm91Z2ggc2xvdHMgZm9yIENNQSByZXNlcnZlZCByZWdpb25zIVxuJiMzNDspOwogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2NtYV9sb2NrKTsKJiM0MzsKIAkvKgogCSAqIEVhY2ggcmVzZXJ2ZWQgYXJlYSBtdXN0IGJlIGluaXRpYWxpc2VkIGxhdGVyLCB3aGVuIG1vcmUga2VybmVsCiAJICogc3Vic3lzdGVtcyAobGlrZSBzbGFiIGFsbG9jYXRvcikgYXJlIGF2YWlsYWJsZS4KIAkgKi8KLQljbWEgPSAmYW1wO2NtYV9hcmVhc1tjbWFfYXJlYV9jb3VudF07Ci0JY21hX2FyZWFfY291bnQmIzQzOyYjNDM7OwomIzQzOwljbWEgPSAmYW1wO2NtYV9lYXJseV9hcmVhc1tjbWFfZWFybHlfYXJlYV9jb3VudF07CiYjNDM7CWNtYV9lYXJseV9hcmVhX2NvdW50JiM0MzsmIzQzOzsKIAotCWlmIChuYW1lKQotCQlzdHJzY3B5KGNtYS0mZ3Q7bmFtZSwgbmFtZSk7Ci0JZWxzZQotCQlzbnByaW50ZihjbWEtJmd0O25hbWUsIENNQV9NQVhfTkFNRSwgICYjMzQ7Y21hJWRcbiYjMzQ7LCBjbWFfYXJlYV9jb3VudCk7CiYjNDM7CWNtYV9pbml0X2FyZWEoY21hLCBuYW1lLCBzaXplLCBvcmRlcl9wZXJfYml0KTsKIAotCWNtYS0mZ3Q7YXZhaWxhYmxlX2NvdW50ID0gY21hLSZndDtjb3VudCA9IHNpemUgJmd0OyZndDsgUEFHRV9TSElGVDsKLQljbWEtJmd0O29yZGVyX3Blcl9iaXQgPSBvcmRlcl9wZXJfYml0OwotCSpyZXNfY21hID0gY21hOwogCXRvdGFsY21hX3BhZ2VzICYjNDM7PSBjbWEtJmd0O2NvdW50OwomIzQzOwkqcmVzX2NtYSA9IGNtYTsKJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7Y21hX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBjbWFfZHJvcF9hcmVhKHN0cnVjdCBjbWEgKmNtYSkKIHsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2NtYV9sb2NrKTsKIAl0b3RhbGNtYV9wYWdlcyAtPSBjbWEtJmd0O2NvdW50OwotCWNtYV9hcmVhX2NvdW50LS07CiYjNDM7CWNtYV9lYXJseV9hcmVhX2NvdW50LS07CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2NtYV9sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgY21hX2NoZWNrX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKQomIzQzO3sKJiM0MzsJaWYgKCFzaXplIHx8ICFtZW1ibG9ja19pc19yZWdpb25fcmVzZXJ2ZWQoYmFzZSwgc2l6ZSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ01BIHVzZXMgQ01BX01JTl9BTElHTk1FTlRfQllURVMgYXMgYWxpZ25tZW50IHJlcXVpcmVtZW50IHdoaWNoCiYjNDM7CSAqIG5lZWRzIHBhZ2VibG9ja19vcmRlciB0byBiZSBpbml0aWFsaXplZC4gTGV0JiMzOTtzIGVuZm9yY2UgaXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXBhZ2VibG9ja19vcmRlcikgewomIzQzOwkJcHJfZXJyKCYjMzQ7cGFnZWJsb2NrX29yZGVyIG5vdCB5ZXQgaW5pdGlhbGl6ZWQuIENhbGxlZCBkdXJpbmcgZWFybHkgYm9vdD9cbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGVuc3VyZSBtaW5pbWFsIGFsaWdubWVudCByZXF1aXJlZCBieSBtbSBjb3JlICovCiYjNDM7CWlmICghSVNfQUxJR05FRChiYXNlIHwgc2l6ZSwgQ01BX01JTl9BTElHTk1FTlRfQllURVMpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiAvKioKQEAgLTI3NiwyMiAmIzQzOzMxNiw5IEBAIGludCBfX2luaXQgY21hX2luaXRfcmVzZXJ2ZWRfbWVtKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsCiAJc3RydWN0IGNtYSAqY21hOwogCWludCByZXQ7CiAKLQkvKiBTYW5pdHkgY2hlY2tzICovCi0JaWYgKCFzaXplIHx8ICFtZW1ibG9ja19pc19yZWdpb25fcmVzZXJ2ZWQoYmFzZSwgc2l6ZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyoKLQkgKiBDTUEgdXNlcyBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyBhcyBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgd2hpY2gKLQkgKiBuZWVkcyBwYWdlYmxvY2tfb3JkZXIgdG8gYmUgaW5pdGlhbGl6ZWQuIExldCYjMzk7cyBlbmZvcmNlIGl0LgotCSAqLwotCWlmICghcGFnZWJsb2NrX29yZGVyKSB7Ci0JCXByX2VycigmIzM0O3BhZ2VibG9ja19vcmRlciBub3QgeWV0IGluaXRpYWxpemVkLiBDYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3Q/XG4mIzM0Oyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIGVuc3VyZSBtaW5pbWFsIGFsaWdubWVudCByZXF1aXJlZCBieSBtbSBjb3JlICovCi0JaWYgKCFJU19BTElHTkVEKGJhc2UgfCBzaXplLCBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUykpCi0JCXJldHVybiAtRUlOVkFMOwomIzQzOwlyZXQgPSBjbWFfY2hlY2tfbWVtb3J5KGJhc2UsIHNpemUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBjbWFfbmV3X2FyZWEobmFtZSwgc2l6ZSwgb3JkZXJfcGVyX2JpdCwgJmFtcDtjbWEpOwogCWlmIChyZXQgIT0gMCkKQEAgLTQ0NCw3ICYjNDM7NDcxLDcgQEAgc3RhdGljIGludCBfX2luaXQgX19jbWFfZGVjbGFyZV9jb250aWd1b3VzX25pZChwaHlzX2FkZHJfdCAqYmFzZXAsCiAJcHJfZGVidWcoJiMzNDslcyhzaXplICVwYSwgYmFzZSAlcGEsIGxpbWl0ICVwYSBhbGlnbm1lbnQgJXBhKVxuJiMzNDssCiAJCV9fZnVuY19fLCAmYW1wO3NpemUsICZhbXA7YmFzZSwgJmFtcDtsaW1pdCwgJmFtcDthbGlnbm1lbnQpOwogCi0JaWYgKGNtYV9hcmVhX2NvdW50ID09IEFSUkFZX1NJWkUoY21hX2FyZWFzKSkgewomIzQzOwlpZiAoY21hX2Vhcmx5X2FyZWFfY291bnQgPT0gQVJSQVlfU0laRShjbWFfZWFybHlfYXJlYXMpKSB7CiAJCXByX2VycigmIzM0O05vdCBlbm91Z2ggc2xvdHMgZm9yIENNQSByZXNlcnZlZCByZWdpb25zIVxuJiMzNDspOwogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CkBAIC0xMDUxLDEyICYjNDM7MTA3OCwxMiBAQCBib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcywKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotaW50IGNtYV9mb3JfZWFjaF9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKQomIzQzO2ludCBjbWFfZm9yX2VhY2hfZWFybHlfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSkKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBjbWFfYXJlYV9jb3VudDsgaSYjNDM7JiM0MzspIHsKLQkJaW50IHJldCA9IGl0KCZhbXA7Y21hX2FyZWFzW2ldLCBkYXRhKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNtYV9lYXJseV9hcmVhX2NvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJaW50IHJldCA9IGl0KCZhbXA7Y21hX2Vhcmx5X2FyZWFzW2ldLCBkYXRhKTsKIAogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKQEAgLTEwNjUsNiAmIzQzOzEwOTIsMjUgQEAgaW50IGNtYV9mb3JfZWFjaF9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKQogCXJldHVybiAwOwogfQogCiYjNDM7aW50IGNtYV9mb3JfZWFjaF9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGNtYSAqY21hOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7Y21hX2xvY2spOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNtYSwgJmFtcDtjbWFfYXJlYXMsIG5vZGUpIHsKJiM0MzsJCWludCByZXQgPSBpdChjbWEsIGRhdGEpOwomIzQzOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCW11dGV4X3VubG9jaygmYW1wO2NtYV9sb2NrKTsKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2NtYV9sb2NrKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogYm9vbCBjbWFfaW50ZXJzZWN0cyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCWludCByOwpAQCAtMTE0NywzICYjNDM7MTE5Myw3NCBAQCB2b2lkIF9faW5pdCAqY21hX3Jlc2VydmVfZWFybHkoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIHNpemUpCiAKIAlyZXR1cm4gcmV0OwogfQomIzQzOwomIzQzO3N0cnVjdCBjbWEgKl9faW5pdCBjbWFfY3JlYXRlKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsCiYjNDM7CQkJICAgICAgdW5zaWduZWQgaW50IG9yZGVyX3Blcl9iaXQsIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgY21hICpjbWE7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGNtYV9jaGVja19tZW1vcnkoYmFzZSwgc2l6ZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKJiM0MzsKJiM0MzsJY21hID0ga3phbGxvY19vYmooKmNtYSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghY21hKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CWNtYV9pbml0X2FyZWEoY21hLCBuYW1lLCBzaXplLCBvcmRlcl9wZXJfYml0KTsKJiM0MzsJY21hLSZndDtyYW5nZXNbMF0uYmFzZV9wZm4gPSBQRk5fRE9XTihiYXNlKTsKJiM0MzsJY21hLSZndDtyYW5nZXNbMF0uZWFybHlfcGZuID0gUEZOX0RPV04oYmFzZSk7CiYjNDM7CWNtYS0mZ3Q7cmFuZ2VzWzBdLmNvdW50ID0gY21hLSZndDtjb3VudDsKJiM0MzsJY21hLSZndDtucmFuZ2VzID0gMTsKJiM0MzsKJiM0MzsJY21hX2FjdGl2YXRlX2FyZWEoY21hKTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2NtYV9sb2NrKTsKJiM0MzsJbGlzdF9hZGRfdGFpbCgmYW1wO2NtYS0mZ3Q7bm9kZSwgJmFtcDtjbWFfYXJlYXMpOwomIzQzOwl0b3RhbGNtYV9wYWdlcyAmIzQzOz0gY21hLSZndDtjb3VudDsKJiM0MzsJY21hX2FyZWFfY291bnQmIzQzOyYjNDM7OwomIzQzOwltdXRleF91bmxvY2soJmFtcDtjbWFfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBjbWE7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgY21hX2ZyZWUoc3RydWN0IGNtYSAqY21hKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNhZmV0eSBjaGVjayB0byBwcmV2ZW50IGEgQ01BIHdpdGggYWN0aXZlIGFsbG9jYXRpb25zIGZyb20gYmVpbmcKJiM0MzsJICogcmVsZWFzZWQuCiYjNDM7CSAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY21hLSZndDtucmFuZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdW5zaWduZWQgbG9uZyBuYml0cyA9IGNtYV9iaXRtYXBfbWF4bm8oY21hLCAmYW1wO2NtYS0mZ3Q7cmFuZ2VzW2ldKTsKJiM0MzsKJiM0MzsJCWlmICghYml0bWFwX2VtcHR5KGNtYS0mZ3Q7cmFuZ2VzW2ldLmJpdG1hcCwgbmJpdHMpKSB7CiYjNDM7CQkJV0FSTigxLCAmIzM0OyVzOiByYW5nZSAldSBub3QgZW1wdHlcbiYjMzQ7LCBjbWEtJmd0O25hbWUsIGkpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBmcmVlIHJlc2VydmVkIHBhZ2VzIGFuZCB0aGUgYml0bWFwICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjbWEtJmd0O25yYW5nZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXIgPSAmYW1wO2NtYS0mZ3Q7cmFuZ2VzW2ldOwomIzQzOwkJdW5zaWduZWQgbG9uZyBlbmRfcGZuLCBwZm47CiYjNDM7CiYjNDM7CQllbmRfcGZuID0gY21yLSZndDtiYXNlX3BmbiAmIzQzOyBjbXItJmd0O2NvdW50OwomIzQzOwkJZm9yIChwZm4gPSBjbXItJmd0O2Jhc2VfcGZuOyBwZm4gJmx0OyBlbmRfcGZuOyBwZm4mIzQzOyYjNDM7KQomIzQzOwkJCWZyZWVfcmVzZXJ2ZWRfcGFnZShwZm5fdG9fcGFnZShwZm4pKTsKJiM0MzsKJiM0MzsJCWJpdG1hcF9mcmVlKGNtci0mZ3Q7Yml0bWFwKTsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7Y21hLSZndDthbGxvY19tdXRleCk7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtjbWFfbG9jayk7CiYjNDM7CXRvdGFsY21hX3BhZ2VzIC09IGNtYS0mZ3Q7Y291bnQ7CiYjNDM7CWxpc3RfZGVsKCZhbXA7Y21hLSZndDtub2RlKTsKJiM0MzsJY21hX2FyZWFfY291bnQtLTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7Y21hX2xvY2spOwomIzQzOwomIzQzOwlrZnJlZShjbWEpOwomIzQzO30KZGlmZiAtLWdpdCBhL21tL2NtYS5oIGIvbW0vY21hLmgKaW5kZXggYzcwMTgwYzM2NTU5YzIuLmFlNGRiOTgxOWUzOGRiIDEwMDY0NAotLS0gYS9tbS9jbWEuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9jbWEuaApAQCAtNDEsNiAmIzQzOzQxLDcgQEAgc3RydWN0IGNtYSB7CiAJdW5zaWduZWQgbG9uZwlhdmFpbGFibGVfY291bnQ7CiAJdW5zaWduZWQgaW50IG9yZGVyX3Blcl9iaXQ7IC8qIE9yZGVyIG9mIHBhZ2VzIHJlcHJlc2VudGVkIGJ5IG9uZSBiaXQgKi8KIAlzcGlubG9ja190CWxvY2s7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAlzdHJ1Y3QgbXV0ZXggYWxsb2NfbXV0ZXg7CiAjaWZkZWYgQ09ORklHX0NNQV9ERUJVR0ZTCiAJc3RydWN0IGhsaXN0X2hlYWQgbWVtX2hlYWQ7CkBAIC03MSw4ICYjNDM7NzIsOCBAQCBlbnVtIGNtYV9mbGFncyB7CiAJQ01BX0FDVElWQVRFRCwKIH07CiAKLWV4dGVybiBzdHJ1Y3QgY21hIGNtYV9hcmVhc1tNQVhfQ01BX0FSRUFTXTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgY21hX2FyZWFfY291bnQ7CiYjNDM7ZXh0ZXJuIHN0cnVjdCBjbWEgY21hX2Vhcmx5X2FyZWFzW01BWF9FQVJMWV9DTUFfQVJFQVNdOwomIzQzO2V4dGVybiB1bnNpZ25lZCBpbnQgY21hX2Vhcmx5X2FyZWFfY291bnQ7CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjbWFfYml0bWFwX21heG5vKHN0cnVjdCBjbWEgKmNtYSwKIAkJc3RydWN0IGNtYV9tZW1yYW5nZSAqY21yKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjI5NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBETUEtQlVGIGFuZCBDTUEgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBpbnRyb2R1Y2luZyBhIERNQS1CVUYgaGVhcCBmb3IgTlZJRElBIFRlZ3JhIFZpZGVvLVByb3RlY3Rpb24tUmVnaW9uIChWUFIpLiBUaGUgcHJpbWFyeSBmaWxlIGlzIGB0ZWdyYS12cHIuY2AsIGFuZCBpdCYjMzk7cyBndWFyZGVkIGJ5IGBDT05GSUdfRE1BQlVGX0hFQVBTX1RFR1JBX1ZQUmAuIFRoaXMgaXMgcGxhdGZvcm0tc3BlY2lmaWMsIGJ1dCB0aGUgY2hhbmdlcyB0byBDTUEgKGBtbS9jbWEuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2NtYS5oYCkgYXJlIGNvbmNlcm5pbmcgYmVjYXVzZSB0aGV5IGFwcGVhciBtb3JlIGJyb2FkbHkgaW1wYWN0ZnVsLiBJdCBzZWVtcyB0aGV5IGFyZSBpbnRyb2R1Y2luZyBhIGR5bmFtaWMgQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpIG1hbmFnZW1lbnQuIExldCYjMzk7cyBkaWcgZGVlcGVyLgoKRmlyc3QsIHRoZSBWUFIgaGVhcC4gIFRoZSBjb2RlIGluIGB0ZWdyYV92cHJfaW5pdGAgc3VnZ2VzdHMgdGhpcyBoZWFwIGlzIGluaXRpYWxpemVkIHZpYSBhIGRldmljZSB0cmVlIG5vZGUgd2l0aCB0aGUgY29tcGF0aWJsZSBzdHJpbmcgJiMzNDtudmlkaWEsdGVncmEtdmlkZW8tcHJvdGVjdGlvbi1yZWdpb24uJiMzNDsgSXQmIzM5O3MgYSBgbW9kdWxlX2luaXRgLCBzbyBpdCYjMzk7bGwgcnVuIGVhcmx5LiAgQ3J1Y2lhbGx5LCBpdCBzZWFyY2hlcyBgL3Jlc2VydmVkLW1lbW9yeWAuIElmIG5vIERUIG5vZGUgaXMgcHJlc2VudCwgdGhlIGhlYXAgKmlzbiYjMzk7dCogaW5pdGlhbGl6ZWQuICBUaGlzIGlzIGEgcHJvYmxlbSBmb3Igc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gYW5kIGZ1enppbmcgYmVjYXVzZSB3ZSBkb24mIzM5O3QgdXN1YWxseSBoYXZlIHN1Y2ggYSBkZXZpY2UgdHJlZSBub2RlIGluIFFFTVUuICBXaGlsZSBzeXprYWxsZXIgY2FuIHVzZSBvdmVybGF5cywgSSBkb24mIzM5O3QgdGhpbmsgaXQgaXMgc2V0IHVwIHRvIGF1dG9tYXRpY2FsbHkgYWRkIHRoaXMgbm9kZSwgYW5kIG1hbnVhbGx5IGFkZGluZyBhIERUIG92ZXJsYXkgaXMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdXN1YWwgYXV0b21hdGVkIGZ1enppbmcgc2V0dXBzLgoKVGhlIENNQSBjaGFuZ2VzLCB0aG91Z2gsIGxvb2sgc2lnbmlmaWNhbnQuIFRoZSBwYXRjaCBpcyByZW5hbWluZyBgY21hX2FyZWFzYCB0byBgY21hX2Vhcmx5X2FyZWFzYCBhbmQgY3JlYXRpbmcgYSBkeW5hbWljIGxpc3QgYGNtYV9hcmVhc2AuICBJdCYjMzk7cyBpbnRyb2R1Y2luZyBhIG11dGV4IChgY21hX2xvY2tgKSBhbmQgY2hhbmdpbmcgYGNtYV9mb3JfZWFjaF9hcmVhYCB0byBpdGVyYXRlIG92ZXIgdGhpcyBsaXN0LiBJdCBhbHNvIGFkZHMgYGNtYV9jcmVhdGVgIGFuZCBgY21hX2ZyZWVgLiBUaGlzIGlzIGNvcmUgQ01BIGNvZGUhIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMuICBgY21hX2Zvcl9lYWNoX2FyZWFgIGlzIHVzZWQgaW4gYSBsb3Qgb2YgcGxhY2VzIOKAkyAgYG1tL2NtYV9kZWJ1Zy5jYCwgYGtlcm5lbC9kbWEvY29udGlndW91cy5jYCwgYGFyY2gvczM5MC9tbS9pbml0LmNgLCB3aGljaCBtYWtlcyBtZSB0aGluayB0aGVzZSBjaGFuZ2VzIGFmZmVjdCBldmVyeXRoaW5nIHVzaW5nIENNQS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGF0dGVudGlvbiBmb3IgZnV6emluZy4KClRoZSByZWZhY3RvcmluZyBvZiBgYml0bWFwX2FsbG9jYXRlX3JlZ2lvbmAgaW4gYGluY2x1ZGUvbGludXgvYml0bWFwLmhgIHRvIHVzZSBgYml0bWFwX2FsbG9jYXRlYCBpcyBsZXNzIG9mIGEgY29uY2Vybi4gSXQmIzM5O3MgYSByZWZhY3RvcmluZywgYW5kIGl0JiMzOTtzIHByb2JhYmx5IG9ubHkgdXNlZCBpbiB0aGUgbmV3IGhlYXAgY29kZS4KCk5vdyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgQ01BIGluaXRpYWxpemF0aW9uLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgY21hX2Vhcmx5X2FyZWFzYCwgYnV0LCBiYXNlZCBvbiB0aGUgZGlmZiwgaXQgc2VlbXMgdGhhdCB0aGUgQ01BIGFyZWFzIGNyZWF0ZWQgZWFybHkgKHVzaW5nIGBjbWFfZWFybHlfYXJlYXNgKSBkb24mIzM5O3QgZ2V0IGFkZGVkIHRvIHRoZSBgY21hX2FyZWFzYCBsaXN0IGZvciBsYXRlciB1c2UuIEl0IHNlZW1zIHRoaXMgb3ZlcnNpZ2h0IGlzIHZlcnkgdmVyeSBwcm9ibGVtYXRpYyEKCkxldCYjMzk7cyBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGUgY29kZS4uLiAgQWgsIEkgc2VlIGEgbWlzdGFrZSBpbiBteSBpbml0aWFsIGFzc2Vzc21lbnQ6IGBjbWFfbmV3X2FyZWFgIGFjdHVhbGx5IHBvcHVsYXRlcyBgY21hX2Vhcmx5X2FyZWFzYCwgbm90IGBjbWFfYXJlYXNgLiBOb3cgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGVhcmx5IGFyZWFzIGFyZSBjb252ZXJ0ZWQgdG8gbGlzdCBlbnRyaWVzLiAgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgaW5pdGlhbCBDTUEgcmVnaW9ucyBpbiBgY21hX2Vhcmx5X2FyZWFzYCBnZXQgYWRkZWQgdG8gYGNtYV9hcmVhc2AgdG8gYmUgYWN0dWFsbHkgdXNhYmxlLiBUaGUgaW5pdGlhbGl6YXRpb24gbG9naWMgbXVzdCBiZSByZXNwb25zaWJsZSBmb3IgdGhpcywgYW5kIGl0IGxvb2tzIGxpa2UgYSBidWcgaXMgcHJlc2VudCBpbiB0aGUgcGF0Y2guIFRoZXJlIGlzIG5vIGNhbGwgdG8gYWRkIHRoZSBgY21hX2Vhcmx5X2FyZWFzYCB0byBgY21hX2FyZWFzYC4gVGhpcyByZXF1aXJlcyBpbW1lZGlhdGUgYXR0ZW50aW9uIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xpc3RfYWRkLipjbWFfYXJlYXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9jbWEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9jbWEuYz0xMTk3PXN0cnVjdCBjbWEgKl9faW5pdCBjbWFfY3JlYXRlKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXG4tLVxubW0vY21hLmMtMTIxOS1cdG11dGV4X2xvY2soXHUwMDI2Y21hX2xvY2spO1xubW0vY21hLmM6MTIyMDpcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y21hLVx1MDAzZW5vZGUsIFx1MDAyNmNtYV9hcmVhcyk7XG5tbS9jbWEuYy0xMjIxLVx0dG90YWxjbWFfcGFnZXMgJiM0Mzs9IGNtYS1cdTAwM2Vjb3VudDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQyOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBcmVhIE1hbmFnZW1lbnQgQ29udW5kcnVtKioKClJpZ2h0LCBzbyBgY21hX2NyZWF0ZWAgKmRlZmluaXRlbHkqIGFkZHMgdG8gYGNtYV9hcmVhc2AuIFRoYXQmIzM5O3MgdW5kZXJzdG9vZC4gQnV0IGEgbmFnZ2luZyBxdWVzdGlvbiBrZWVwcyBwb3BwaW5nIHVwOiB3aGF0IGFib3V0IGBjbWFfZWFybHlfYXJlYXNgPyBBcmUgdGhvc2UgZWFybHktc3RhZ2UgYXJlYXMgZXZlciBhY3R1YWxseSAqbWlncmF0ZWQqIG92ZXIgdG8gdGhlIG1haW4gYGNtYV9hcmVhc2AgcG9vbD8gSXQgZmVlbHMgbGlrZSBzb21ldGhpbmcgaXMgbWlzc2luZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlIHR3byBsaXN0cy4KCkkmIzM5O20gdGhpbmtpbmcgbXkgYmVzdCBiZXQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgY21hX2luaXRfYXJlYWAgb3IgYGNtYV9hY3RpdmF0ZV9hcmVhYC4gRWl0aGVyIG9mIHRob3NlIGZ1bmN0aW9ucyBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHdoZXJlIGFuIGFyZWEgbWlnaHQgdHJhbnNpdGlvbiwgb3Igd2hlcmUgYSBjb25uZWN0aW9uIHdvdWxkIGJlIG1hZGUsIGlmIGl0IGV4aXN0cywgYmV0d2VlbiB0aGVzZSB0d28gYXJlYSBsaXN0cy4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZWlyIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGlzIGZsb3cuIEdvdHRhIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMgYXJlYSBtYW5hZ2VtZW50IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NtYV9hcmVhcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2NtYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NtYS5jPTQwPXVuc2lnbmVkIGludCBjbWFfZWFybHlfYXJlYV9jb3VudDtcbm1tL2NtYS5jLTQxLVxubW0vY21hLmM6NDI6c3RhdGljIExJU1RfSEVBRChjbWFfYXJlYXMpO1xubW0vY21hLmMtNDMtdW5zaWduZWQgaW50IGNtYV9hcmVhX2NvdW50O1xuLS1cbm1tL2NtYS5jPTEwOTU9aW50IGNtYV9mb3JfZWFjaF9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKVxuLS1cbm1tL2NtYS5jLTExMDAtXG5tbS9jbWEuYzoxMTAxOlx0bGlzdF9mb3JfZWFjaF9lbnRyeShjbWEsIFx1MDAyNmNtYV9hcmVhcywgbm9kZSkge1xubW0vY21hLmMtMTEwMi1cdFx0aW50IHJldCA9IGl0KGNtYSwgZGF0YSk7XG4tLVxubW0vY21hLmM9MTE5Nz1zdHJ1Y3QgY21hICpfX2luaXQgY21hX2NyZWF0ZShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuLS1cbm1tL2NtYS5jLTEyMTktXHRtdXRleF9sb2NrKFx1MDAyNmNtYV9sb2NrKTtcbm1tL2NtYS5jOjEyMjA6XHRsaXN0X2FkZF90YWlsKFx1MDAyNmNtYS1cdTAwM2Vub2RlLCBcdTAwMjZjbWFfYXJlYXMpO1xubW0vY21hLmMtMTIyMS1cdHRvdGFsY21hX3BhZ2VzICYjNDM7PSBjbWEtXHUwMDNlY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwNDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENNQSBBcmVhIEl0ZXJhdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJZiBJJiMzOTttIHVuZGVyc3RhbmRpbmcgdGhpcyBjb3JyZWN0bHksIHRoZSBgY21hX2Vhcmx5X2FyZWFzYCBsaXN0ICpuZXZlciogZ2V0cyBtZXJnZWQgaW50byB0aGUgbWFpbiBgY21hX2FyZWFzYCBsaXN0LiBUaGF0IG1lYW5zIHRoZSBgY21hX2Zvcl9lYWNoX2FyZWFgIG1hY3JvLCB0aGUgb25lIHdlJiMzOTtyZSB1c2luZyB0byBpdGVyYXRlLCB3b3VsZCAqb25seSogaGl0IHRoZSBDTUFzIHRoYXQgd2VyZSBjcmVhdGVkIGR5bmFtaWNhbGx5IHVzaW5nIGBjbWFfY3JlYXRlYC4KCkJ1dC4uLiBpc24mIzM5O3QgYGNtYV9mb3JfZWFjaF9hcmVhYCBhbHNvIGNydWNpYWwgZm9yIGBkbWFfY29udGlndW91c19hcmVhc2A/IEFuZCBJIGNvdWxkIGhhdmUgc3dvcm4gdGhlcmUgd2FzIGFuIGludGVyYWN0aW9uIHRoZXJlLiBBaCEgV2FpdCwgSSB0aGluayBJJiMzOTttIHJlbWVtYmVyaW5nIHRoaXMgd3JvbmcsIHdhc24mIzM5O3QgYGRtYV9jb250aWd1b3VzLmNgIG1vZGlmaWVkIHRvIHVzZSBgY21hX2Vhcmx5X2FyZWFzYCBkaXJlY3RseT8gVGhhdCB3b3VsZCBtYWtlIHNlbnNlLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2sgYGtlcm5lbC9kbWEvY29udGlndW91cy5jYCB0byBiZSBjb21wbGV0ZWx5IGNlcnRhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoaXMgc3RyYWlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbWFfZm9yX2VhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0MDIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgY21hX2Zvcl9lYWNoX2FyZWFgIFVzYWdlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBga2VybmVsL2RtYS9jb250aWd1b3VzLmNgIGFuZCBpbW1lZGlhdGVseSBub3RpY2luZyBpdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGxldmVyYWdpbmcgYGNtYV9mb3JfZWFjaF9hcmVhYC4gVGhhdCYjMzk7cyBhIGJpdCBzdXJwcmlzaW5nLCBnaXZlbiBpdHMgbGlrZWx5IHB1cnBvc2UgcmVsYXRlZCB0byBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvcikuIEhtbSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBQZXJoYXBzIGl0JiMzOTtzIGltcGxlbWVudGluZyBpdHMgb3duIGl0ZXJhdGlvbiBsb2dpYywgb3IgbWF5YmUgaXQmIzM5O3MgdXNpbmcgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBtZXRob2QuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGRlZXBlciBhbmQgc2VlIHdoYXQgKmRvZXMqIHV0aWxpemUgYGNtYV9mb3JfZWFjaF9hcmVhYC4gVW5kZXJzdGFuZGluZyB0aGUgZXhpc3RpbmcgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBjb250ZXh0LiBUaGlzIHNob3VsZCBoZWxwIHRvIHVuZGVyc3RhbmQgdGhlIGRlc2lnbiBkZWNpc2lvbnMgYW5kIHBvdGVudGlhbCByYXRpb25hbGUgYmVoaW5kIHRoZSBhcHByb2FjaCBlbXBsb3llZCBieSBgY29udGlndW91cy5jYC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGVsc2V3aGVyZSBpbiB0aGUgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NtYV9mb3JfZWFjaF9hcmVhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY21hLmg9NjA9ZXh0ZXJuIGludCBjbWFfZm9yX2VhY2hfZWFybHlfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7XG5pbmNsdWRlL2xpbnV4L2NtYS5oOjYxOmV4dGVybiBpbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpO1xuaW5jbHVkZS9saW51eC9jbWEuaC02Mi1leHRlcm4gYm9vbCBjbWFfaW50ZXJzZWN0cyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcbi0tXG5tbS9jbWEuYz0xMDgxPWludCBjbWFfZm9yX2VhY2hfZWFybHlfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSlcbi0tXG5tbS9jbWEuYy0xMDk0LVxubW0vY21hLmM6MTA5NTppbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpXG5tbS9jbWEuYy0xMDk2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MTUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgY21hX2Zvcl9lYWNoX2FyZWFgKioKCkhtbSwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgYGNtYV9mb3JfZWFjaF9hcmVhYC4gUmlnaHQsIHNvIGl0JiMzOTtzIGRlZmluZWQgc29sZWx5IHdpdGhpbiBgbW0vY21hLmNgIGFuZCBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9jbWEuaGAuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIE5vdyB0aGUgcmVhbCBxdWVzdGlvbiBpczogaXMgdGhpcyBmdW5jdGlvbiAqYWN0dWFsbHkqIHV0aWxpemVkIG91dHNpZGUgb2YgdGhvc2UgZmlsZXM/IE9yIGlzIGl0IHB1cmVseSBhIGxvY2FsIGhlbHBlciBmdW5jdGlvbiB3aXRoaW4gdGhlIENNQSBzdWJzeXN0ZW0gaXRzZWxmPyBJdCYjMzk7cyBwcmV0dHkgaW1wb3J0YW50IEkgZmlndXJlIHRoaXMgb3V0LiBJZiBpdCYjMzk7cyB1c2VkIGVsc2V3aGVyZSwgdGhhdCBpbXBsaWVzIHNvbWUgc29ydCBvZiBicm9hZGVyIGRlcGVuZGVuY3kgb3IgaW50ZWdyYXRpb24gdGhhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBiZXR0ZXIuIEJ1dCBpZiBpdCBpcyBvbmx5IHVzZWQgbG9jYWxseSwgaXQgZ2l2ZXMgbWUgc29tZSBhZGRpdGlvbmFsIGNvbnRleHQgdGhhdCBJIGNhbiBpbmZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y21hX2Zvcl9lYWNoX2FyZWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vY21hLmM9MTA4MT1pbnQgY21hX2Zvcl9lYWNoX2Vhcmx5X2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpXG4tLVxubW0vY21hLmMtMTA5NC1cbm1tL2NtYS5jOjEwOTU6aW50IGNtYV9mb3JfZWFjaF9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKVxubW0vY21hLmMtMTA5Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjk0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYSBDTUEgRGVidWcvU3lzZnMgSXNzdWUqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgQ01BIGNvZGUgYWdhaW4uIEl0JiMzOTtzIGEgY29tbW9uIGFyZWEgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHByb2JsZW1zIHRvIHN1cmZhY2UuIE15IGd1dCBmZWVsaW5nIGlzIHRoaXMgaXMgcHJvYmFibHkgYSBkZWJ1Z2dpbmcgb3Igc3lzZnMtcmVsYXRlZCBpc3N1ZSBnaXZlbiB0aGUgY29udGV4dC4gV2hlcmUgdG8gc3RhcnQ/IExldCYjMzk7cyBub3Qgd2FzdGUgYW55IHRpbWUuIEkgdGhpbmsgdGhlIHR3byBtb3N0IGxpa2VseSBwbGFjZXMgdG8gZmluZCB0aGUgcm9vdCBjYXVzZSBvZiB0aGlzIGFyZSBlaXRoZXIgYG1tL2NtYV9kZWJ1Zy5jYCBvciBgbW0vY21hX3N5c2ZzLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvbmUgaXMgbW9yZSByZWxldmFudCwgb3IgcGVyaGFwcywgY2hlY2sgYm90aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y21hX2Zvcl9lYWNoX2FyZWEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9jbWEuaD02MD1leHRlcm4gaW50IGNtYV9mb3JfZWFjaF9lYXJseV9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKTtcbmluY2x1ZGUvbGludXgvY21hLmg6NjE6ZXh0ZXJuIGludCBjbWFfZm9yX2VhY2hfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7XG5pbmNsdWRlL2xpbnV4L2NtYS5oLTYyLWV4dGVybiBib29sIGNtYV9pbnRlcnNlY3RzKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xuLS1cbm1tL2NtYS5jPTEwODE9aW50IGNtYV9mb3JfZWFjaF9lYXJseV9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKVxuLS1cbm1tL2NtYS5jLTEwOTQtXG5tbS9jbWEuYzoxMDk1OmludCBjbWFfZm9yX2VhY2hfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSlcbm1tL2NtYS5jLTEwOTYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTczOQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkEgTW9tZW50IG9mIEtlcm5lbCBDb25mdXNpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMganVzdCByZXZpZXdpbmcgdGhlIENNQSBjb2RlLCBhbmQgSSBjb3VsZCBoYXZlIHN3b3JuIGBjbWFfZm9yX2VhY2hfYXJlYWAgd2FzIHN1cHBvc2VkIHRvIGJlIGEgY3J1Y2lhbCBmdW5jdGlvbiwgYnV0IG5vdyBJJiMzOTttIHRoaW5raW5nLCB3aGVyZSBpcyBpdCBhY3R1YWxseSAqdXNlZCo/IFRoaXMgaXMgc3RyYW5nZSwgSSYjMzk7bSBkcmF3aW5nIGEgYmxhbmsuIEl0JiMzOTtzIGFsbW9zdCBsaWtlIGl0JiMzOTtzIGEgZm9yZ290dGVuIGZ1bmN0aW9uIHRoYXQgc29tZW9uZSBsZWZ0IGluIGFuZCBuZXZlciBob29rZWQgdXAuLi4KCkFscmlnaHQsIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGRvdWJsZS1jaGVjaywgbXkgbWVtb3J5IGlzbiYjMzk7dCBhbHdheXMgcGVyZmVjdC4gTWF5YmUgSSYjMzk7bSBqdXN0IG1pc3JlbWVtYmVyaW5nIHRoZSBleGFjdCBuYW1lLiBNYXliZSBpdCYjMzk7cyBhIHJlbGF0ZWQgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWluZyB1c2VkLiBMZXQmIzM5O3Mgbm90IGp1bXAgdG8gYW55IHdpbGQgY29uY2x1c2lvbnMsIG5vdCB5ZXQgYXQgbGVhc3QuCgpBIGxpa2VseSBhbHRlcm5hdGl2ZSBpcyB0byBjaGVjayBgY21hX2Zvcl9lYWNoX2Vhcmx5X2FyZWFgLiBJJiMzOTtsbCB2ZXJpZnkgaWYgdGhhdCYjMzk7cyB0aGUgb25lIEkmIzM5O20gbG9va2luZyBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NtYV9mb3JfZWFjaF9lYXJseV9hcmVhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9tbS9pbml0LmM9MjMzPXN0YXRpYyBpbnQgczM5MF9jbWFfbWVtX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tLVxuYXJjaC9zMzkwL21tL2luaXQuYy0yNDMtXHRpZiAoYWN0aW9uID09IE1FTV9HT0lOR19PRkZMSU5FKVxuYXJjaC9zMzkwL21tL2luaXQuYzoyNDQ6XHRcdHJjID0gY21hX2Zvcl9lYWNoX2Vhcmx5X2FyZWEoczM5MF9jbWFfY2hlY2tfcmFuZ2UsIFx1MDAyNm1lbV9kYXRhKTtcbmFyY2gvczM5MC9tbS9pbml0LmMtMjQ1LVx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8ocmMpO1xuLS1cbmluY2x1ZGUvbGludXgvY21hLmg9NTc9Ym9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4tLVxuaW5jbHVkZS9saW51eC9jbWEuaC01OS1cbmluY2x1ZGUvbGludXgvY21hLmg6NjA6ZXh0ZXJuIGludCBjbWFfZm9yX2VhY2hfZWFybHlfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7XG5pbmNsdWRlL2xpbnV4L2NtYS5oLTYxLWV4dGVybiBpbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpO1xuLS1cbm1tL2NtYS5jPTEwNjc9Ym9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4tLVxubW0vY21hLmMtMTA4MC1cbm1tL2NtYS5jOjEwODE6aW50IGNtYV9mb3JfZWFjaF9lYXJseV9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKVxubW0vY21hLmMtMTA4Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMzk2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgcXVpY2sgdGFrZSBvbiB0aGlzLgoKKipJbnZlc3RpZ2F0aW5nIGEgQ01BIFBhdGNoKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBMb29rcyBsaWtlIHRoZXkmIzM5O3ZlIHN3YXBwZWQgb3V0IGBjbWFfZm9yX2VhY2hfYXJlYWAgZm9yIGBjbWFfZm9yX2VhY2hfZWFybHlfYXJlYWAgaW4gYGFyY2gvczM5MC9tbS9pbml0LmNgLiBJbnRlcmVzdGluZy4gVGhlIGluaXRpYWwgY2FsbCB3YXMgYSBzdGFuZGFyZCBgY21hX2Zvcl9lYWNoX2FyZWFgIGNhbGwsIGJ1dCBub3cgaXQmIzM5O3MgYmVlbiByZXBsYWNlZCB3aXRoIHRoZSAmIzM0O2Vhcmx5JiMzNDsgdmVyc2lvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBNYWtlcyBzZW5zZSwgYXNzdW1pbmcgdGhpcyBpcyBoYXBwZW5pbmcgZHVyaW5nIGVhcmx5IGJvb3QuCgpCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBXaGF0IGFib3V0IG90aGVyIENNQSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnM/IFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgY21hX2RlYnVnZnNfaW5pdGAgYW5kIGBjbWFfc3lzZnNfaW5pdGAgYmVjYXVzZSBJIGtub3cgdGhvc2UgYXJlIHJlbGF0ZWQgYW5kIG5lZWQgdG8gYmUgaW4gc3luYy4gSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRob3NlLgoKTGV0IG1lIHRha2UgYSBxdWljayBsb29rIGF0IGBtbS9jbWFfZGVidWcuY2AgdG8gc2VlIGlmIHRob3NlIG90aGVyIENNQSBpbml0aWFsaXphdGlvbiBjYWxscyBoYXZlIGJlZW4gdG91Y2hlZCwgYW5kIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIG92ZXJhbGwgQ01BIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJIHN1c3BlY3QgdGhlcmUmIzM5O3MgYSByZWFzb24gZm9yIHRoaXMgY2hhbmdlLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y21hX2FyZWFzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vY21hX2RlYnVnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vY21hX2RlYnVnLmM9MjAwPXN0YXRpYyBpbnQgX19pbml0IGNtYV9kZWJ1Z2ZzX2luaXQodm9pZClcbi0tXG5tbS9jbWFfZGVidWcuYy0yMDctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbWFfYXJlYV9jb3VudDsgaSYjNDM7JiM0MzspXG5tbS9jbWFfZGVidWcuYzoyMDg6XHRcdGlmICh0ZXN0X2JpdChDTUFfQUNUSVZBVEVELCBcdTAwMjZjbWFfYXJlYXNbaV0uZmxhZ3MpKVxubW0vY21hX2RlYnVnLmM6MjA5Olx0XHRcdGNtYV9kZWJ1Z2ZzX2FkZF9vbmUoXHUwMDI2Y21hX2FyZWFzW2ldLCBjbWFfZGVidWdmc19yb290KTtcbm1tL2NtYV9kZWJ1Zy5jLTIxMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5NDIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDTUEgQXJlYSBDaGFuZ2UqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSXQganVzdCBoaXQgbWU6IGBtbS9jbWFfZGVidWcuY2AgZGlyZWN0bHkgcmVmZXJlbmNlcyBgY21hX2FyZWFzYCEgQnV0LCB0aGlzIHBhdGNoICpjb21wbGV0ZWx5KiBjaGFuZ2VzIGBjbWFfYXJlYXNgIHRvIGEgYExJU1RfSEVBRGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1RoaXMgKmhhcyogdG8gY2F1c2UgYSBjb21waWxlIGZhaWx1cmUuJiMzNDsgSWYgYG1tL2NtYV9kZWJ1Zy5jYCB3YXMgZXhwZWN0aW5nIGFuIGFycmF5IGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUsIGFuZCBub3cgaXQmIzM5O3MgZ2V0dGluZyBhIGxpbmtlZCBsaXN0IGhlYWQsIHRyeWluZyB0byB1c2UgYXJyYXkgaW5kZXhpbmcgbGlrZSBgY21hX2FyZWFzW2ldYCBpcyBnb2luZyB0byBiZSBhIGZhdGFsIHN5bnRheCBlcnJvci4KCkxldCYjMzk7cyBxdWlja2x5IHJlLWV4YW1pbmUgdGhhdCBwYXRjaCBzbmlwcGV0OgoKYGBgYwotc3RydWN0IGNtYSBjbWFfYXJlYXNbTUFYX0NNQV9BUkVBU107CiYjNDM7c3RhdGljIERFRklORV9NVVRFWChjbWFfbG9jayk7CiYjNDM7CiYjNDM7c3RydWN0IGNtYSBjbWFfZWFybHlfYXJlYXNbTUFYX0VBUkxZX0NNQV9BUkVBU107CiYjNDM7dW5zaWduZWQgaW50IGNtYV9lYXJseV9hcmVhX2NvdW50OwomIzQzOwomIzQzO3N0YXRpYyBMSVNUX0hFQUQoY21hX2FyZWFzKTsKIHVuc2lnbmVkIGludCBjbWFfYXJlYV9jb3VudDsKYGBgCgpZdXAsIGl0JiMzOTtzIGNsZWFyIGFzIGRheS4gSWYgYGNtYV9hcmVhc2AgaXMgbm93IGEgYExJU1RfSEVBRGAsIHRoZSBkaXJlY3QgaW5kZXhpbmcgbGlrZSBgY21hX2FyZWFzW2ldYCBpcyBkZWZpbml0ZWx5IGludmFsaWQgaW4gYG1tL2NtYV9kZWJ1Zy5jYC4gU28sIHRoZSBxdWVzdGlvbiBpc24mIzM5O3QgKmlmKiBpdCBmYWlscywgYnV0ICpob3cqIGl0JiMzOTtzIGhhbmRsZWQuIFdlIG5lZWQgdG8gY2hlY2sgaWYgYG1tL2NtYV9kZWJ1Zy5jYCBoYXMgYmVlbiB0b3VjaGVkIGFueXdoZXJlIGVsc2UgaW4gdGhlIHRyZWUgdG8gYWNjb3VudCBmb3IgdGhpcyBjaGFuZ2UsIG9yIGlmIHRoaXMgaXMgYSBnbGFyaW5nIG9taXNzaW9uLiBUaGUgbGlrZWxpaG9vZCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgaW5jb21wbGV0ZSBhbmQgd2lsbCByZXN1bHQgaW4gY29tcGlsZSBlcnJvcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NtYV9hcmVhcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2NtYV9kZWJ1Zy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NtYV9kZWJ1Zy5jPTIwMD1zdGF0aWMgaW50IF9faW5pdCBjbWFfZGVidWdmc19pbml0KHZvaWQpXG4tLVxubW0vY21hX2RlYnVnLmMtMjA3LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY21hX2FyZWFfY291bnQ7IGkmIzQzOyYjNDM7KVxubW0vY21hX2RlYnVnLmM6MjA4Olx0XHRpZiAodGVzdF9iaXQoQ01BX0FDVElWQVRFRCwgXHUwMDI2Y21hX2FyZWFzW2ldLmZsYWdzKSlcbm1tL2NtYV9kZWJ1Zy5jOjIwOTpcdFx0XHRjbWFfZGVidWdmc19hZGRfb25lKFx1MDAyNmNtYV9hcmVhc1tpXSwgY21hX2RlYnVnZnNfcm9vdCk7XG5tbS9jbWFfZGVidWcuYy0yMTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNzcxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQ2hlY2tpbmcgQ01BIEFyZWEgTWFuYWdlbWVudCoqCgpIb2xkIG9uIGEgc2Vjb25kLCBJIHRob3VnaHQgd2UmIzM5O2QgY2xlYW5lZCB1cCB0aGUgYGNtYV9hcmVhc2AgYXJyYXkgaW4gdGhlIGNvbnRleHQgb2YgQ01BLCBidXQgaGVyZSBpdCBpcyBhZ2Fpbiwgc3RpbGwgbHVya2luZyBpbiBgbW0vY21hX2RlYnVnLmNgLiBUaGF0JiMzOTtzIHVuZXhwZWN0ZWQsIGFuZCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYy4gSXQgbWVhbnMgSSBuZWVkIHRvIHJlLWV2YWx1YXRlIHdoZXJlIHRoaXMgZ2xvYmFsIGFycmF5IGlzIGJlaW5nIHVzZWQuIFBlcmhhcHMgSSBtaXNzZWQgc29tZXRoaW5nIGluIG15IGVhcmxpZXIgcmV2aWV3LiBMZXQgbWUgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIHRoZSBzeXNmcyBpbnRlcmFjdGlvbiwgc28gSSYjMzk7bGwgY2hlY2sgYG1tL2NtYV9zeXNmcy5jYCBub3cgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IGludHJvZHVjZSBhIHJlZ3Jlc3Npb24gaW4gQ01BIHN5c2ZzIGludGVyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y21hX2FyZWFzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vY21hX3N5c2ZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vY21hX3N5c2ZzLmM9MTA4PXN0YXRpYyBpbnQgX19pbml0IGNtYV9zeXNmc19pbml0KHZvaWQpXG4tLVxubW0vY21hX3N5c2ZzLmMtMTE5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY21hX2FyZWFfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG5tbS9jbWFfc3lzZnMuYzoxMjA6XHRcdGNtYSA9IFx1MDAyNmNtYV9hcmVhc1tpXTtcbm1tL2NtYV9zeXNmcy5jLTEyMS1cdFx0aWYgKCF0ZXN0X2JpdChDTUFfQUNUSVZBVEVELCBcdTAwMjZjbWEtXHUwMDNlZmxhZ3MpKVxuLS1cbm1tL2NtYV9zeXNmcy5jLTE0Mi1cdHdoaWxlICgtLWkgXHUwMDNlPSAwKSB7XG5tbS9jbWFfc3lzZnMuYzoxNDM6XHRcdGNtYSA9IFx1MDAyNmNtYV9hcmVhc1tpXTtcbm1tL2NtYV9zeXNmcy5jLTE0NC1cdFx0aWYgKGNtYS1cdTAwM2VjbWFfa29iailcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyMDMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFsaXppbmcgdGhlIEluZGV4aW5nIElzc3VlKioKCk9rYXksIGhvbGQgb24gYSBtaW51dGUuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGNvZGUsIGFuZCBzb21ldGhpbmcmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBJZiBgY21hX2FyZWFzYCBpcyBkZWZpbmVkIGFzIGEgYExJU1RfSEVBRGAsIHRoZW4gZGlyZWN0bHkgaW5kZXhpbmcgaXQgd2l0aCBzb21ldGhpbmcgbGlrZSBgY21hX2FyZWFzW2ldYCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIHRocm93IGEgY29tcGlsYXRpb24gZXJyb3IuIFRoYXQmIzM5O3MganVzdCBub3QgaG93IHlvdSBpbnRlcmFjdCB3aXRoIGEgbGlua2VkIGxpc3QuIFlvdSBjYW4mIzM5O3QgdHJlYXQgaXQgbGlrZSBhIHJlZ3VsYXIgYXJyYXkgaW4gdGhhdCBzZW5zZS4gSSBoYXZlIHRvIGFjY2VzcyB0aGUgbGlzdCBlbGVtZW50cyB0aHJvdWdoIHRoZSBkZWZpbmVkIGxpc3QgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBsaWtlIGBsaXN0X2Zvcl9lYWNoX2VudHJ5YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl04oCZcyBtZWFudCB0byBiZSBpdGVyYXRlZCBvbi4KCkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IG15IHVuZGVyc3RhbmRpbmcuIEl0JiMzOTtzIGJlc3QgdG8gY29uZmlybSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIG1lYW50IHRvIGJlIHVzZWQuIEkgd2lsbCBxdWlja2x5IGNoZWNrIGlmIGBjbWFfYXJlYXNgIGlzIGluZGVlZCBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9jbWEuaGAuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRvIGNvbmZpcm0gYW5kIHJ1bGUgb3V0IHRoYXQgYXNzdW1wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbWFfYXJlYXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2NtYS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1MTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBhIENNQSBIZWFkZXIgQ2hhbmdlKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgc2VlIGEgbW9kaWZpY2F0aW9uIHRvIGBpbmNsdWRlL2xpbnV4L2NtYS5oYC4gU3BlY2lmaWNhbGx5LCB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBgY21hX2FyZWFzYCBhbmQgYGNtYV9hcmVhX2NvdW50YCBhcmUgbm8gbG9uZ2VyIGV4cG9ydGVkLiBUaGV5JiMzOTt2ZSBiZWVuIHJlcGxhY2VkIHdpdGggYGNtYV9lYXJseV9hcmVhc2AgYW5kIGBjbWFfZWFybHlfYXJlYV9jb3VudGAuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIE15IGZpcnN0IHRob3VnaHQgaXMgYWJvdXQgaG93IHRoaXMgaW1wYWN0cyB0aGUgcmVzdCBvZiB0aGUgQ01BIGNvZGUuIFNpbmNlIGBjbWFfYXJlYXNgIGlzIG5vIGxvbmdlciBhIHB1YmxpYyBzeW1ib2wgaW4gdGhlIGluY2x1ZGUgZmlsZSwgYG1tL2NtYV9kZWJ1Zy5jYCBhbmQgYG1tL2NtYV9zeXNmcy5jYCBhcmUgZ29pbmcgdG8gaGF2ZSBhIHByb2JsZW0uIFRob3NlIGZpbGVzIGluIGBtbS9gIHdpbGwgY2hva2Ugb24gdGhvc2UgbWlzc2luZyBzeW1ib2xzIGlmIHRoZXkmIzM5O3JlIGluY2x1ZGluZyBgaW5jbHVkZS9saW51eC9jbWEuaGAuIFdhaXTigKYgYXJlIHRoZXk/IE1heWJlIHRoZXkgaW5jbHVkZSBhIGxvY2FsIGBjbWEuaGA/IExldCBtZSBxdWlja2x5IHZlcmlmeSB0aGF0LiBJIG5lZWQgdG8gY2hlY2sgYG1tL2NtYS5oYCB0byBzZWUgaG93IHRob3NlIHN5bWJvbHMgYXJlIG5vdyBoYW5kbGVkLiBUaGlzIGZlZWxzIGxpa2UgaXQgY291bGQgYnJlYWsgc29tZSBleGlzdGluZyBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NtYV9hcmVhcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2NtYS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwMjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQ01BIENoYW5nZXMqKgoKT2theSwgc28gdGhlIGRpZmYgc2hvd3MgdGhhdCBgbW0vY21hLmhgIGhhcyBiZWVuIGFsdGVyZWQuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBgY21hX2FyZWFzYCBoYXMgYmVlbiByZW1vdmVkIGFuZCByZXBsYWNlZCB3aXRoIGBjbWFfZWFybHlfYXJlYXNgLiBJbnRlcmVzdGluZy4gU28sIGBjbWFfYXJlYXNgIGlzICpubyBsb25nZXIqIGRlY2xhcmVkIGluIHRoZSBoZWFkZXIuIFRoYXTigJlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBob3cgZG9lcyBgbW0vY21hX2RlYnVnLmNgIHN0aWxsIGNvbXBpbGU/IEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoYXQgZmlsZSBpcyBub3cgdXNpbmcgYGNtYV9lYXJseV9hcmVhc2Agb3Igd2hldGhlciBpdCYjMzk7cyBzb21laG93IGFjY2Vzc2luZyBhIHZhcmlhYmxlIHRoYXQgaGFzIG5vdyBnb25lIGF3YXkuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGF0IGZpbGUmIzM5O3MgdXNhZ2Ugb2YgdGhlIENNQSBzdHJ1Y3R1cmVzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHJlZmFjdG9yaW5nLiBUaGlzIGZlZWxzIGxpa2UgaXQgbWlnaHQgaW1wYWN0IHNvbWUgZGVidWdnaW5nLCBvciBldmVuIGFmZmVjdCB0aGUgQ01BIGluaXRpYWxpemF0aW9uIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y21hX2Vhcmx5X2FyZWFzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vY21hX2RlYnVnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTM5OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIENNQSBDb21waWxhdGlvbiBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkganVzdCByYW4gYSBgZ3JlcGAgZm9yIGBjbWFfYXJlYXNgIHdpdGhpbiBgbW0vY21hX2RlYnVnLmNgLCBhbmQgaXQgcG9wcGVkIHVwIGluIGEgZmV3IHBsYWNlczoKCmBgYAptbS9jbWFfZGVidWcuYy0yMDctCWZvciAoaSA9IDA7IGkgJmx0OyBjbWFfYXJlYV9jb3VudDsgaSYjNDM7JiM0MzspCm1tL2NtYV9kZWJ1Zy5jOjIwODoJCWlmICh0ZXN0X2JpdChDTUFfQUNUSVZBVEVELCAmYW1wO2NtYV9hcmVhc1tpXS5mbGFncykpCm1tL2NtYV9kZWJ1Zy5jOjIwOToJCQljbWFfZGVidWdmc19hZGRfb25lKCZhbXA7Y21hX2FyZWFzW2ldLCBjbWFfZGVidWdmc19yb290KTsKYGBgCgpOb3csIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIElmIGBjbWFfYXJlYXNgIGlzbiYjMzk7dCBwcm9wZXJseSBkZWNsYXJlZCBpbiBlaXRoZXIgYG1tL2NtYS5oYCBvciB3aXRoaW4gdGhlIHN0YW5kYXJkIGluY2x1ZGUgYGluY2x1ZGUvbGludXgvY21hLmhgLCB0aGVuIHdlIGFyZSBnb2luZyB0byBoYXZlIGEgKm1ham9yKiBjb21waWxhdGlvbiBwcm9ibGVtIHdpdGggYG1tL2NtYV9kZWJ1Zy5jYC4gVGhlIGNvbXBpbGVyIGlzIGdvaW5nIHRvIGNob2tlIG9uIGFuIHVuZGVjbGFyZWQgc3ltYm9sLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZGVjbGFyYXRpb24gdG8gZW5zdXJlIHRoaXMgZG9lc24mIzM5O3QgYml0ZSB1cyBkb3duIHRoZSBsaW5lLiBXZSBuZWVkIHRvIHByZXZlbnQgYW55IG5hc3R5IHN1cnByaXNlcy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgdmVyaWZ5IHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NtYV9hcmVhcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2NtYV9kZWJ1Zy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NtYV9kZWJ1Zy5jPTIwMD1zdGF0aWMgaW50IF9faW5pdCBjbWFfZGVidWdmc19pbml0KHZvaWQpXG4tLVxubW0vY21hX2RlYnVnLmMtMjA3LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY21hX2FyZWFfY291bnQ7IGkmIzQzOyYjNDM7KVxubW0vY21hX2RlYnVnLmM6MjA4Olx0XHRpZiAodGVzdF9iaXQoQ01BX0FDVElWQVRFRCwgXHUwMDI2Y21hX2FyZWFzW2ldLmZsYWdzKSlcbm1tL2NtYV9kZWJ1Zy5jOjIwOTpcdFx0XHRjbWFfZGVidWdmc19hZGRfb25lKFx1MDAyNmNtYV9hcmVhc1tpXSwgY21hX2RlYnVnZnNfcm9vdCk7XG5tbS9jbWFfZGVidWcuYy0yMTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MDY5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWxseSBPYnNvbGV0ZSBWYXJpYWJsZSBBY2Nlc3MqKgoKQWxyaWdodCwgc28gSSBzZWUgYSByZWZlcmVuY2UgaGVyZSDigJMgc3BlY2lmaWNhbGx5IGBjbWFfYXJlYXNbaV1gLiBJdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBhcnJheSBpbmRleGluZyBvcGVyYXRpb24sIG5vdGhpbmcgaW5oZXJlbnRseSBzdXNwaWNpb3VzLiBIb3dldmVyLCBhIHJlZCBmbGFnIGltbWVkaWF0ZWx5IGdvZXMgdXAuIEkmIzM5O20gdXNlZCB0byBzZWVpbmcgdGhlIGRlY2xhcmF0aW9uIGZvciBgY21hX2FyZWFzYCByaWdodCBoZXJlLCBidXQgSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nLiBUaGUgY29udGV4dCBpcyBgbW0vY21hX2RlYnVnLmNgLCBzbyBJJiMzOTtkICpleHBlY3QqIHRvIGZpbmQgaXRzIGRlY2xhcmF0aW9uIHdpdGhpbiB0aGlzIGZpbGUgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhbiBgZXh0ZXJuYCBkZWNsYXJhdGlvbiByZWZlcmVuY2luZyBpdC4KCkl0JiMzOTtzIGdvdCBtZSB3b25kZXJpbmc6IGlzIHRoaXMgYSBzdGFsZSByZWZlcmVuY2U/IEhhcyB0aGUgYGNtYV9hcmVhc2AgdmFyaWFibGUgYmVlbiByZW1vdmVkIG9yIHJlbmFtZWQgc29tZXdoZXJlIHVwc3RyZWFtIGR1cmluZyBhIHJlZmFjdG9yPyBPciBtYXliZSB0aGlzIGNvZGUgaXMgcmVseWluZyBvbiBhbiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvciBhIGRlY2xhcmF0aW9uIGRlZmluZWQgaW4gYSBoZWFkZXIgZmlsZSBJJiMzOTttIG5vdCBpbW1lZGlhdGVseSBzZWVpbmc/IFRoaXMgaXMgc3RhcnRpbmcgdG8gc21lbGwgbGlrZSBhIHBvdGVudGlhbCBidWcsIGVpdGhlciBhIGNvbXBpbGUtdGltZSBlcnJvciB3YWl0aW5nIHRvIGhhcHBlbiBvciBhIHN1YnRsZSBydW50aW1lIGlzc3VlLgoKTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBpbmNsdWRlZCBoZWFkZXJzIGFuZCBnbG9iYWwgc2NvcGUsIGp1c3QgdG8gY29uZmlybSB0aGF0IHRoaXMgaXNuJiMzOTt0IGp1c3QgYSBzaW1wbGUgb3ZlcnNpZ2h0IG9uIG15IHBhcnQuIEkgbmVlZCB0byBiZSBzdXJlIGJlZm9yZSBJIHN0YXJ0IHRvIG1ha2UgYW55IGFzc3VtcHRpb25zLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBoYXJkLXRvLWRlYnVnIG1lbW9yeSBjb3JydXB0aW9uIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y21hX2FyZWFzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NtYS5jPTQwPXVuc2lnbmVkIGludCBjbWFfZWFybHlfYXJlYV9jb3VudDtcbm1tL2NtYS5jLTQxLVxubW0vY21hLmM6NDI6c3RhdGljIExJU1RfSEVBRChjbWFfYXJlYXMpO1xubW0vY21hLmMtNDMtdW5zaWduZWQgaW50IGNtYV9hcmVhX2NvdW50O1xuLS1cbm1tL2NtYS5jPTEwOTU9aW50IGNtYV9mb3JfZWFjaF9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKVxuLS1cbm1tL2NtYS5jLTExMDAtXG5tbS9jbWEuYzoxMTAxOlx0bGlzdF9mb3JfZWFjaF9lbnRyeShjbWEsIFx1MDAyNmNtYV9hcmVhcywgbm9kZSkge1xubW0vY21hLmMtMTEwMi1cdFx0aW50IHJldCA9IGl0KGNtYSwgZGF0YSk7XG4tLVxubW0vY21hLmM9MTE5Nz1zdHJ1Y3QgY21hICpfX2luaXQgY21hX2NyZWF0ZShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuLS1cbm1tL2NtYS5jLTEyMTktXHRtdXRleF9sb2NrKFx1MDAyNmNtYV9sb2NrKTtcbm1tL2NtYS5jOjEyMjA6XHRsaXN0X2FkZF90YWlsKFx1MDAyNmNtYS1cdTAwM2Vub2RlLCBcdTAwMjZjbWFfYXJlYXMpO1xubW0vY21hLmMtMTIyMS1cdHRvdGFsY21hX3BhZ2VzICYjNDM7PSBjbWEtXHUwMDNlY291bnQ7XG4tLVxubW0vY21hX2RlYnVnLmM9MjAwPXN0YXRpYyBpbnQgX19pbml0IGNtYV9kZWJ1Z2ZzX2luaXQodm9pZClcbi0tXG5tbS9jbWFfZGVidWcuYy0yMDctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbWFfYXJlYV9jb3VudDsgaSYjNDM7JiM0MzspXG5tbS9jbWFfZGVidWcuYzoyMDg6XHRcdGlmICh0ZXN0X2JpdChDTUFfQUNUSVZBVEVELCBcdTAwMjZjbWFfYXJlYXNbaV0uZmxhZ3MpKVxubW0vY21hX2RlYnVnLmM6MjA5Olx0XHRcdGNtYV9kZWJ1Z2ZzX2FkZF9vbmUoXHUwMDI2Y21hX2FyZWFzW2ldLCBjbWFfZGVidWdmc19yb290KTtcbm1tL2NtYV9kZWJ1Zy5jLTIxMC1cbi0tXG5tbS9jbWFfc3lzZnMuYz0xMDg9c3RhdGljIGludCBfX2luaXQgY21hX3N5c2ZzX2luaXQodm9pZClcbi0tXG5tbS9jbWFfc3lzZnMuYy0xMTktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbWFfYXJlYV9jb3VudDsgaSYjNDM7JiM0MzspIHtcbm1tL2NtYV9zeXNmcy5jOjEyMDpcdFx0Y21hID0gXHUwMDI2Y21hX2FyZWFzW2ldO1xubW0vY21hX3N5c2ZzLmMtMTIxLVx0XHRpZiAoIXRlc3RfYml0KENNQV9BQ1RJVkFURUQsIFx1MDAyNmNtYS1cdTAwM2VmbGFncykpXG4tLVxubW0vY21hX3N5c2ZzLmMtMTQyLVx0d2hpbGUgKC0taSBcdTAwM2U9IDApIHtcbm1tL2NtYV9zeXNmcy5jOjE0MzpcdFx0Y21hID0gXHUwMDI2Y21hX2FyZWFzW2ldO1xubW0vY21hX3N5c2ZzLmMtMTQ0LVx0XHRpZiAoY21hLVx1MDAzZWNtYV9rb2JqKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzEyNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENNQSBDaGFuZ2VzIGZvciBTeXprYWxsZXIgQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSB1c2Ugb2YgYGNtYV9hcmVhc2AgaW4gYG1tL2NtYV9kZWJ1Zy5jYCBhbmQgYG1tL2NtYV9zeXNmcy5jYC4gIEkgaW1tZWRpYXRlbHkgdGhpbmsgJiMzNDt3YWl0LCBob3cgZG9lcyB0aGF0IGV2ZW4gY29tcGlsZT8mIzM0OyAgVGhlIHBhdGNoIG11c3QgYmUgaW5jb21wbGV0ZSBvciBzaW1wbHkgYnJva2VuLCBidXQgbGV0JiMzOTtzIGJyZWFrIGl0IGRvd24gZnVydGhlci4gIFdpdGggYENPTkZJR19DTUFfREVCVUdGU2AgYW5kIGBDT05GSUdfQ01BX1NZU0ZTYCBlbmFibGVkLCBpdCAqc2hvdWxkKiBmYWlsLiBIb3dldmVyLCB3aGF0IGFib3V0IGBjbWFfZWFybHlfYXJlYXNgPwoKTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYGNtYV9kZWJ1Z2ZzX2luaXRgIGhhc24mIzM5O3QgYmVlbiBjaGFuZ2VkIGluIHRoZSBwYXRjaDsgbm9wZSwgaXQgaGFzbiYjMzk7dC4gU28sIGVuYWJsaW5nIGVpdGhlciBgQ09ORklHX0NNQV9ERUJVR0ZTYCBvciBgQ09ORklHX0NNQV9TWVNGU2Agd2lsbCBkZWZpbml0ZWx5IGJyZWFrIHRoZSBidWlsZC4gVGhlIHBhdGNoIGNoYW5nZXMgYGNtYV9hcmVhc2AgdG8gYHN0YXRpYyBMSVNUX0hFQUQoY21hX2FyZWFzKTtgIGluIGBtbS9jbWEuY2AsIGFuZCBJIHNlZSBub3cgdGhhdCBgY21hX2FyZWFfY291bnRgIGlzIG5vIGxvbmdlciBleHBvcnRlZC4gIExvb2tpbmcgYXQgYG1tL2NtYS5oYCwgSSBzZWUgdGhhdCB0aGUgcGF0Y2ggYWxzbyByZW5hbWVzIGBjbWFfYXJlYXNgIGFuZCBgY21hX2FyZWFfY291bnRgIHRvIGBjbWFfZWFybHlfYXJlYXNgIGFuZCBgY21hX2Vhcmx5X2FyZWFfY291bnRgIHJlc3BlY3RpdmVseS4gVGhpcyBtZWFucyBgbW0vY21hX2RlYnVnLmNgIHdpbGwgYWxzbyBmYWlsIHRvIGNvbXBpbGUgb24gYGNtYV9hcmVhX2NvdW50YCBhcyB3ZWxsLgoKVGhlcmVmb3JlLCBgQ09ORklHX0NNQV9ERUJVR0ZTYCBhbmQgYENPTkZJR19DTUFfU1lTRlNgIG11c3QgYmUgZGlzYWJsZWQgZm9yIHRoaXMgdG8gY29tcGlsZSwgb3IgdGhlIHBhdGNoIGlzIGluZGVlZCBicm9rZW4uIElmIHRoZSBwYXRjaCBpcyBicm9rZW4sIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2Ugc3l6a2FsbGVyIHdvbiYjMzk7dCBiZSBhYmxlIHRvIGNvbXBpbGUgdGhlIGtlcm5lbC4gTXkgam9iIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIHdvcnRoIGZ1enppbmcgYW5kIHRvIHByb3ZpZGUgYEVuYWJsZUNvbmZpZ3NgLiBJZiBJIHByb3ZpZGUgYENNQV9ERUJVR0ZTYCwgaXQmIzM5O3MgZ29pbmcgdG8gZmFpbC4gIEkgc2hvdWxkIGJlIG1vcmUgcHJvZHVjdGl2ZTsgSSBzaG91bGQgZm9jdXMgb24gYERNQUJVRl9IRUFQU19URUdSQV9WUFJgIGFuZCBgRE1BX0NNQWAuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcyBpbiBgZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWdgOiBPa2F5LCBzbyBgY29uZmlnIERNQUJVRl9IRUFQU19URUdSQV9WUFJgIGlzIHRoZSBjb25maWcgdG8gZW5hYmxlLCBhbmQgaXQgZGVwZW5kcyBvbiBgRE1BQlVGX0hFQVBTICZhbXA7JmFtcDsgRE1BX0NNQWAuCgpOb3csIHdhaXQsIGB0ZWdyYS12cHIuY2AgdXNlcyBgY21hX2NyZWF0ZWAgYW5kIGBjbWFfZnJlZWAgLSBpcyB0aGF0IGNvZGUgcmVhY2hhYmxlPyAgSXQgcmVnaXN0ZXJzIGEgRE1BLUJVRiBoZWFwLiAgSXQgY2FsbHMgYGRtYV9oZWFwX2FkZGAgYnV0IG9ubHkgaWYgdGhlIERUIG5vZGUgYG52aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvbmAgaXMgcHJlc2VudC4gQW5kIHN5emthbGxlciBkb2VzbiYjMzk7dCBhZGQgdGhhdCBkeW5hbWljYWxseSwgc28gbm8gaGVhcC4gIFNvIHN5emthbGxlciBjYW4gb25seSBmdXp6IGRtYS1idWYgaGVhcHMgaWYgdGhleSYjMzk7cmUgY3JlYXRlZC4KCkxldCBtZSBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IG90aGVyIHdheSB0byByZWFjaCBgdGVncmEtdnByLmNgLiBOb3BlLCBgdGVncmFfdnByX2luaXRgIGlzIHRoZSBvbmx5IGVudHJ5IHBvaW50LiBOb3csIHdoYXQgYWJvdXQgdGhlIGNoYW5nZXMgdG8gYG1tL2NtYS5jYD8gIFRob3NlIGFyZSByZWFjaGFibGUgYmVjYXVzZSBDTUEgaXMgdXNlZCBieSBtYW55IHRoaW5ncy4gQnV0LCBob2xkIG9uLi4uIGBjbWFfY3JlYXRlYCBhbmQgYGNtYV9mcmVlYCBhcmUgb25seSBjYWxsZWQgYnkgYHRlZ3JhLXZwci5jYC4gU28gdGhlIGNoYW5nZXMgdG8gYGNtYV9mb3JfZWFjaF9hcmVhYCBhbmQgYGNtYV9uZXdfYXJlYWAgYXJlIHJlYWNoYWJsZS4KCkJ1dCB3YWl0LCBpZiBgY21hX2FyZWFzYCBpcyBub3cgYSBsaXN0IGFuZCBgY21hX2Vhcmx5X2FyZWFzYCBpcyBhbiBhcnJheSwgd2hhdCBoYXBwZW5zIHRvIHRoZSBlYXJseSBhcmVhcz8gIGBjbWFfbmV3X2FyZWFgIGFkZHMgdG8gYGNtYV9lYXJseV9hcmVhc2AuIEFuZCB0aGVuIGBjbWFfaW5pdF9yZXNlcnZlZF9hcmVhc2AgY2FsbHMgYGNtYV9hY3RpdmF0ZV9hcmVhYCBmb3IgZWFjaCBgY21hX2Vhcmx5X2FyZWFzYCwgYnV0IGl0IE5FVkVSIGFkZHMgdGhlbSB0byB0aGUgYGNtYV9hcmVhc2AgbGlzdCEgU28gYGNtYV9hcmVhc2AgZG9lc24mIzM5O3QgaW5jbHVkZSB0aGUgZWFybHkgYWxsb2NhdGVkIGFyZWFzLiBOb3cgSSBuZWVkIHRvIGNoZWNrIGBjbWFfYWN0aXZhdGVfYXJlYWAgaW4gYG1tL2NtYS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y21hX2FjdGl2YXRlX2FyZWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9jbWEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9jbWEuYz0xMDg9Ym9vbCBjbWFfdmFsaWRhdGVfem9uZXMoc3RydWN0IGNtYSAqY21hKVxuLS1cbm1tL2NtYS5jLTE0NS1cbm1tL2NtYS5jOjE0NjpzdGF0aWMgdm9pZCBfX2luaXQgY21hX2FjdGl2YXRlX2FyZWEoc3RydWN0IGNtYSAqY21hKVxubW0vY21hLmMtMTQ3LXtcbi0tXG5tbS9jbWEuYz0yMTA9c3RhdGljIGludCBfX2luaXQgY21hX2luaXRfcmVzZXJ2ZWRfYXJlYXModm9pZClcbi0tXG5tbS9jbWEuYy0yMTQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbWFfZWFybHlfYXJlYV9jb3VudDsgaSYjNDM7JiM0MzspXG5tbS9jbWEuYzoyMTU6XHRcdGNtYV9hY3RpdmF0ZV9hcmVhKFx1MDAyNmNtYV9lYXJseV9hcmVhc1tpXSk7XG5tbS9jbWEuYy0yMTYtXG4tLVxubW0vY21hLmM9MTE5Nz1zdHJ1Y3QgY21hICpfX2luaXQgY21hX2NyZWF0ZShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuLS1cbm1tL2NtYS5jLTEyMTYtXG5tbS9jbWEuYzoxMjE3Olx0Y21hX2FjdGl2YXRlX2FyZWEoY21hKTtcbm1tL2NtYS5jLTEyMTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MzQ2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEltbWVkaWF0ZSBDb25jZXJucyBSZWdhcmRpbmcgQ01BIEluaXRpYWxpemF0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20ganVzdCBsb29raW5nIG92ZXIgdGhpcyBDTUEgY29kZSwgYW5kIHNvbWV0aGluZyYjMzk7cyBub3Qgc2l0dGluZyByaWdodCB3aXRoIG1lLiBJJiMzOTttIHNlZWluZyB0aGF0IGBjbWFfYWN0aXZhdGVfYXJlYWAgKmRvZXNuJiMzOTt0KiBhY3R1YWxseSBtb2RpZnkgdGhlIGBjbWFfYXJlYXNgIGxpc3QuIFRoYXTigJlzIGEgcmVkIGZsYWcuIFNvLCB0aGF0IG1lYW5zIGBjbWFfZWFybHlfYXJlYXNgIGFyZSAqbmV2ZXIqIGluY29ycG9yYXRlZCBpbnRvIGBjbWFfYXJlYXNgISBUaGlzIGhhcyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMuCgpJZiB0aGF0JiMzOTtzIHRydWUsIHRoZW4gYGNtYV9mb3JfZWFjaF9hcmVhYCBpcyBvbmx5IGdvaW5nIHRvIGl0ZXJhdGUgb3ZlciBDTUFzIGNyZWF0ZWQgZXhwbGljaXRseSBieSBgY21hX2NyZWF0ZWAuIFRoYXTigJlzIGEgbWFqb3IgbGltaXRhdGlvbiwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkLiBCdXTigKYgd2FpdCwgd2FzbiYjMzk7dCBgY21hX2Zvcl9lYWNoX2FyZWFgIHVzZWQgd2l0aGluIGBkbWFfY29udGlndW91c19hcmVhc2A/IEFuZCB3YXNu4oCZdCB0aGVyZSBzb21lIGNoYW5nZT8gWWVzISBJdCBqdXN0IGNhbWUgdG8gbWUhIEl0IGxvb2tzIGxpa2UgYGRtYV9jb250aWd1b3VzLmNgIHdhcyB1cGRhdGVkIHRvIHVzZSBgY21hX2Vhcmx5X2FyZWFzYCBkaXJlY3RseS4KCk9rYXksIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gSSYjMzk7bSBnb2luZyB0byBnbyBzdHJhaWdodCB0byBga2VybmVsL2RtYS9jb250aWd1b3VzLmNgIGFuZCBtYWtlIGFic29sdXRlbHkgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gYmUgY2VydGFpbiB0aGF0IHRoZSBsb2dpYyBpcyBjb3JyZWN0IGFuZCB0aGF0IHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmZvcmVzZWVuIGlzc3VlcyBpbiBtZW1vcnkgYWxsb2NhdGlvbiwgZXNwZWNpYWxseSBkdXJpbmcgZWFybHkgYm9vdC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZXNlIENNQSBsaXN0cyBpbnRlcmFjdCBhbmQgd2hhdCB0aGUgcmFtaWZpY2F0aW9ucyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y21hX2Vhcmx5X2FyZWFzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2RtYS9jb250aWd1b3VzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTg0NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBjbWFfZWFybHlfYXJlYXNgIEFic2VuY2UgaW4gYGNvbnRpZ3VvdXMuY2AqKgoKT2theSwgc28gSSBqdXN0IHJhbiBhIGBncmVwYCBmb3IgYGNtYV9lYXJseV9hcmVhc2Agd2l0aGluIGBrZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY2AsIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY29udGV4dCBhcm91bmQgZWFybHkgQ01BIGFsbG9jYXRpb24sIGFuZC4uLiBub3RoaW5nLiBUaGF0JiMzOTtzIGEgYml0IG9kZC4gSSB3YXMgc3VyZSB0aGF0IHRlcm0sIG9yIHNvbWV0aGluZyByZWxhdGVkIHRvIGl0LCB3b3VsZCBiZSBwcmVzZW50LCBnaXZlbiB0aGUgc3ViamVjdCBtYXR0ZXIuCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIuIElmIHRoZSBzeW1ib2wgaXNuJiMzOTt0IGRpcmVjdGx5IHJlZmVyZW5jZWQgaW4gdGhhdCBmaWxlLCB0aGVuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiAqY2hhbmdlZCogdGhlcmUgcmVjZW50bHkuIEkgbmVlZCB0byBzZWUgaWYgdGhlIGltcGxlbWVudGF0aW9uIGxvZ2ljIGhhcyBiZWVuIHJlZmFjdG9yZWQsIG1vdmVkIGVsc2V3aGVyZSwgb3IgcG9zc2libHkgcmVwbGFjZWQgYnkgYSBuZXcgc3lzdGVtLiBQZXJoYXBzIGl0JiMzOTtzIHVuZGVyIGEgZGlmZmVyZW50IG5hbWUsIG9yIHRoZSBmdW5jdGlvbmFsaXR5IGlzIG5vdyBoYW5kbGVkIGJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgc3Vic3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNoYW5nZSBoaXN0b3J5IGluIGBrZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY2AgcmV2ZWFscy4gVGhhdCB3aWxsIGdpdmUgbWUgYSBkaXJlY3Rpb24gdG8gZm9sbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNQVhfRUFSTFlfQ01BX0FSRUFTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2RtYS9jb250aWd1b3VzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2RtYS9jb250aWd1b3VzLmMtNTQtXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYzo1NTpzdGF0aWMgc3RydWN0IGNtYSAqZG1hX2NvbnRpZ3VvdXNfYXJlYXNbTUFYX0VBUkxZX0NNQV9BUkVBU107XG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy01Ni1zdGF0aWMgdW5zaWduZWQgaW50IGRtYV9jb250aWd1b3VzX2FyZWFzX251bTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAyMjUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBhIFJlY2VudCBLZXJuZWwgQ2hhbmdlKioKCk9rYXksIHNvIGBrZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY2AganVzdCBoYWQgYSBzdWJ0bGUgY2hhbmdlIOKAkyBgTUFYX0NNQV9BUkVBU2AgaXMgbm93IGBNQVhfRUFSTFlfQ01BX0FSRUFTYC4gSW50ZXJlc3RpbmcuIEl0JiMzOTtzIHN0aWxsIHVzaW5nIHRoZSBgZG1hX2NvbnRpZ3VvdXNfYXJlYXNgIGFycmF5LCB3aGljaCBtYWtlcyBzZW5zZS4gSSB3YXMgY3VyaW91cyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZS4KCldhaXQsIGxvb2tpbmcgY2xvc2VyLCBgY21hX2Zvcl9lYWNoX2FyZWFgIGlzbiYjMzk7dCBldmVuICp1c2VkKiB3aXRoaW4gYGtlcm5lbC9kbWEvY29udGlndW91cy5jYCEgSSBoYWQgYXNzdW1lZCBhIHJlbGF0aW9uc2hpcCB0aGVyZSwgYnV0IHRoYXQgY2xlYXJseSBpc24mIzM5O3QgdGhlIGNhc2UuIE9rYXksIHdoZXJlICppcyogYGNtYV9mb3JfZWFjaF9hcmVhYCBhY3R1YWxseSB1c2VkIHRoZW4/IEkmIzM5O20gcHJldHR5IHN1cmUgSSBhbHJlYWR5IGdyZXBwZWQgdGhlIGNvZGUsIGJ1dCBsZXQgbWUgY29uZmlybSwgaXQmIzM5O3MgT05MWSBpbiBgaW5jbHVkZS9saW51eC9jbWEuaGAgYW5kIGBtbS9jbWEuY2AuIFNvIGl0JiMzOTtzIGEgQ01BLXNwZWNpZmljIHRoaW5nLCBub3QgYSBnZW5lcmFsIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24gdG9vbC4KClRoYXQmIzM5O3MgYSByZWxpZWYsIGl0JiMzOTtzIG5vdCBhZmZlY3RpbmcgYSBicm9hZGVyIHNlY3Rpb24gb2YgdGhlIGtlcm5lbCB0aGFuIGluaXRpYWxseSB0aG91Z2h0LiBTdGlsbCwgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRvIGVuc3VyZSB0aGVyZSYjMzk7cyBubyBzdWJ0bGUgY3Jvc3MtZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8ga25vdyBpZiBhbnkgb3RoZXIgZHJpdmVycyBhY3R1YWxseSBsZXZlcmFnZSB0aGF0IGBjbWFfZm9yX2VhY2hfYXJlYWAgbWFjcm8gaW4gYSBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyB3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NtYV9mb3JfZWFjaF9hcmVhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY21hLmg9NjA9ZXh0ZXJuIGludCBjbWFfZm9yX2VhY2hfZWFybHlfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7XG5pbmNsdWRlL2xpbnV4L2NtYS5oOjYxOmV4dGVybiBpbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpO1xuaW5jbHVkZS9saW51eC9jbWEuaC02Mi1leHRlcm4gYm9vbCBjbWFfaW50ZXJzZWN0cyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcbi0tXG5tbS9jbWEuYz0xMDgxPWludCBjbWFfZm9yX2VhY2hfZWFybHlfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSlcbi0tXG5tbS9jbWEuYy0xMDk0LVxubW0vY21hLmM6MTA5NTppbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpXG5tbS9jbWEuYy0xMDk2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA5MTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgY21hX2Zvcl9lYWNoX2FyZWFgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGNtYV9mb3JfZWFjaF9hcmVhYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzLi4uIGl0JiMzOTtzIHByYWN0aWNhbGx5IG9ycGhhbmVkLiBJIGNhbiYjMzk7dCBmaW5kIGFueSBvdGhlciB1c2Ugb2YgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhlIGN1cnJlbnQgY29kZWJhc2UuIFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gSXMgaXQganVzdCBkZWFkIGNvZGUsIHRha2luZyB1cCBzcGFjZSBhbmQgcG90ZW50aWFsbHkgY2F1c2luZyBjb25mdXNpb24/IE9yIHBlcmhhcHMgaXQmIzM5O3MgbHVya2luZyBzb21ld2hlcmUsIGJlaW5nIHVzZWQgYnkgYW4gZXh0ZXJuYWwsIG91dC1vZi10cmVlIG1vZHVsZT8gSSBuZWVkIHRvIHZlcmlmeSBpdHMgcHVycG9zZS4KCldhaXQgYSBzZWNvbmQsIGxldCBtZSBjaGVjayByZWxhdGVkIGZ1bmN0aW9ucywganVzdCB0byBiZSB0aG9yb3VnaC4gV2hhdCBhYm91dCBgY21hX3JlbGVhc2VfZnJvemVuYD8gVGhhdCBvbmUgaGFzbiYjMzk7dCBiZWVuIHRvdWNoZWQsIGhhcyBpdD8gQW5kIHdoYXQgYWJvdXQgYGNtYV9pbnRlcnNlY3RzYD8gQXJlIHRoZXkgbGlua2VkPyBJIG5lZWQgdG8gY29uc2lkZXIgdGhlaXIgY29udGV4dCBiZWZvcmUgSSBtYWtlIGFueSBqdWRnZW1lbnRzIG9uIHRoZSBvdmVyYWxsIGhlYWx0aCBvZiB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUuIFRoaXMgbGFjayBvZiB1c2UgcmFpc2VzIGNvbmNlcm5zIGFib3V0IG1haW50ZW5hbmNlIGFuZCBwb3RlbnRpYWwgZnV0dXJlIGlzc3Vlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZCwgYW5kIGlmIG5vdCwgd2h5IGl0IHdhcyBuZXZlciByZW1vdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbWFfaW50ZXJzZWN0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2NtYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NtYS5jPTEwOTU9aW50IGNtYV9mb3JfZWFjaF9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKVxuLS1cbm1tL2NtYS5jLTExMTMtXG5tbS9jbWEuYzoxMTE0OmJvb2wgY21hX2ludGVyc2VjdHMoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbm1tL2NtYS5jLTExMTUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTM2NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipJbnZlc3RpZ2F0aW5nIGBjbWFfaW50ZXJzZWN0c2AgVXNhZ2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgZm9jdXNlZCBvbiBhIHNwZWNpZmljIGZ1bmN0aW9uLCBgY21hX2ludGVyc2VjdHNgLiBJJiMzOTttIGltbWVkaWF0ZWx5IHF1ZXN0aW9uaW5nIGl0cyB1c2FnZS4gKklzKiB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGJlaW5nIGNhbGxlZCBhbnl3aGVyZSBpbiB0aGUgY29kZWJhc2U/IEl0JiMzOTtzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJlbGV2YW5jZSwgcG90ZW50aWFsIGltcGFjdCwgYW5kIGV2ZW4gaWYgaXQgY2FuIGJlIHNhZmVseSByZW1vdmVkIG9yIHJlZmFjdG9yZWQuIFdlIGFsbCBrbm93IGhvdyBjb2RlYmFzZXMgZ3JvdywgYW5kIHVudXNlZCBmdW5jdGlvbnMgYXJlIGp1c3QgdGVjaG5pY2FsIGRlYnQgaW4gZGlzZ3Vpc2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gbGl2ZXMgd2l0aGluIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gQW0gSSBnb2luZyB0byBoYXZlIHRvIHJ1biBhIGNvZGUgc2VhcmNoLCBvciBjYW4gSSBxdWlja2x5IGRldGVybWluZSB0aGlzIHRocm91Z2ggc29tZSBtZWFucyB3aXRoaW4gb3VyIElERT8gSXQmIzM5O3MgYSBxdWljayBhbmFseXNpcyBJIG5lZWQgdG8gcGVyZm9ybSBpbW1lZGlhdGVseS4gSWYgbm90IHVzZWQsIEkmIzM5O20gdGhpbmtpbmcgd2hldGhlciBJIGNhbiByZW1vdmUgaXQsIHNpbXBsaWZ5IHRoZSBhcmNoaXRlY3R1cmUsIGFuZCByZWR1Y2UgdGhlIGNoYW5jZSBvZiBlcnJvcnMuIFNvLCBsZXQmIzM5O3MgZGV0ZXJtaW5lIHRoZSBhbnN3ZXIgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y21hX2ludGVyc2VjdHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL21tL2luaXQuYz0yMjE9c3RhdGljIGludCBzMzkwX2NtYV9jaGVja19yYW5nZShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpXG4tLVxuYXJjaC9zMzkwL21tL2luaXQuYy0yMjYtXG5hcmNoL3MzOTAvbW0vaW5pdC5jOjIyNzpcdGlmIChjbWFfaW50ZXJzZWN0cyhjbWEsIG1lbV9kYXRhLVx1MDAzZXN0YXJ0LCBtZW1fZGF0YS1cdTAwM2VlbmQpKVxuYXJjaC9zMzkwL21tL2luaXQuYy0yMjgtXHRcdHJldHVybiAtRUJVU1k7XG4tLVxuaW5jbHVkZS9saW51eC9jbWEuaD02MT1leHRlcm4gaW50IGNtYV9mb3JfZWFjaF9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKTtcbmluY2x1ZGUvbGludXgvY21hLmg6NjI6ZXh0ZXJuIGJvb2wgY21hX2ludGVyc2VjdHMoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XG5pbmNsdWRlL2xpbnV4L2NtYS5oLTYzLVxuLS1cbm1tL2NtYS5jPTEwOTU9aW50IGNtYV9mb3JfZWFjaF9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKVxuLS1cbm1tL2NtYS5jLTExMTMtXG5tbS9jbWEuYzoxMTE0OmJvb2wgY21hX2ludGVyc2VjdHMoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbm1tL2NtYS5jLTExMTUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTk0NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDTUEgSW5pdGlhbGl6YXRpb24gYW5kIERlYnVnZ2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSBpbml0aWFsaXphdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSSBrbm93IHRoYXQgYGFyY2gvczM5MC9tbS9pbml0LmNgIGlzIHRoZSBwbGFjZSB0byBzdGFydC4gQnV0IGhvbGQgb24sIEkgcmVtZW1iZXIgdGhhdCBmaWxlIHV0aWxpemVzIGBjbWFfZm9yX2VhY2hfZWFybHlfYXJlYWAuIExldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBgczM5MF9jbWFfbWVtX25vdGlmaWVyYCBmdW5jdGlvbi4gSSBzZWUgaXQgdXNlcyBgY21hX2Zvcl9lYWNoX2Vhcmx5X2FyZWFgIHRvIGl0ZXJhdGUgb3ZlciB0aGUgYGNtYV9lYXJseV9hcmVhc2AgbGlzdC4gV2l0aGluIHRoZSBsb29wLCBpdCBjYWxscyBgczM5MF9jbWFfY2hlY2tfcmFuZ2VgLCB3aGljaCBJJiMzOTttIHByZXR0eSBzdXJlIGNhbGxzIGBjbWFfaW50ZXJzZWN0c2AuIFRoYXQgYWxsIGNoZWNrcyBvdXQsIHNvIGZhciwgc28gZ29vZC4gTm8gcmVkIGZsYWdzIHRoZXJlLgoKTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgYGNtYV9kZWJ1Z2ZzX2luaXRgIGFuZCBgY21hX3N5c2ZzX2luaXRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXkmIzM5O3JlIHN0aWxsIGxvY2F0ZWQgd2hlcmUgSSBleHBlY3QgdGhlbSB0byBiZSwgaW4gYG1tL2NtYV9kZWJ1Zy5jYCBhbmQgYG1tL2NtYV9zeXNmcy5jYCwgcmVzcGVjdGl2ZWx5LiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbW0vY21hX2RlYnVnLmNgIHRvIG1ha2Ugc3VyZSBpdCBjb21waWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9jbWFfZGVidWcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0XHRcdFx0XHRcdTAwMjZjbXItXHUwMDNlZGZzX2JpdG1hcCk7XG4gMTkxOlx0XHR9XG4gMTkyOlx0XG4gMTkzOlx0XHQvKlxuIDE5NDpcdFx0ICogQmFja3dhcmQgY29tcGF0aWJsZSBzeW1saW5rcyB0byByYW5nZSAwIGZvciBiYXNlX3BmbiBhbmQgYml0bWFwLlxuIDE5NTpcdFx0ICovXG4gMTk2Olx0XHRkZWJ1Z2ZzX2NyZWF0ZV9zeW1saW5rKFwmIzM0O2Jhc2VfcGZuXCYjMzQ7LCB0bXAsIFwmIzM0O3Jhbmdlcy8wL2Jhc2VfcGZuXCYjMzQ7KTtcbiAxOTc6XHRcdGRlYnVnZnNfY3JlYXRlX3N5bWxpbmsoXCYjMzQ7Yml0bWFwXCYjMzQ7LCB0bXAsIFwmIzM0O3Jhbmdlcy8wL2JpdG1hcFwmIzM0Oyk7XG4gMTk4Olx0fVxuIDE5OTpcdFxuIDIwMDpcdHN0YXRpYyBpbnQgX19pbml0IGNtYV9kZWJ1Z2ZzX2luaXQodm9pZClcbiAyMDE6XHR7XG4gMjAyOlx0XHRzdHJ1Y3QgZGVudHJ5ICpjbWFfZGVidWdmc19yb290O1xuIDIwMzpcdFx0aW50IGk7XG4gMjA0Olx0XG4gMjA1Olx0XHRjbWFfZGVidWdmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKFwmIzM0O2NtYVwmIzM0OywgTlVMTCk7XG4gMjA2Olx0XG4gMjA3Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbWFfYXJlYV9jb3VudDsgaSYjNDM7JiM0MzspXG4gMjA4Olx0XHRcdGlmICh0ZXN0X2JpdChDTUFfQUNUSVZBVEVELCBcdTAwMjZjbWFfYXJlYXNbaV0uZmxhZ3MpKVxuIDIwOTpcdFx0XHRcdGNtYV9kZWJ1Z2ZzX2FkZF9vbmUoXHUwMDI2Y21hX2FyZWFzW2ldLCBjbWFfZGVidWdmc19yb290KTtcbiAyMTA6XHRcbiAyMTE6XHRcdHJldHVybiAwO1xuIDIxMjpcdH1cbiAyMTM6XHRsYXRlX2luaXRjYWxsKGNtYV9kZWJ1Z2ZzX2luaXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mjk5MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCBhc3N1bWluZyBJJiMzOTttIHRoZSBleHBlcnQgYW5kIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zOgoKKipDTUEgQXJlYSBNeXN0ZXJ5KioKCkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBzZWVpbmcgYGNtYV9hcmVhc1tpXWAgYmVpbmcgcmVmZXJlbmNlZCBoZXJlLiBUaGF0JiMzOTtzIGEgbGl0dGxlIHVudXN1YWwuIFRoZSBpc3N1ZSBpbW1lZGlhdGVseSBqdW1wcyBvdXQ6IEkgZG9uJiMzOTt0IHNlZSBgY21hX2FyZWFzYCBkZWNsYXJlZCBhbnl3aGVyZSBvYnZpb3VzIHdpdGhpbiB0aGlzIGBtbS9jbWFfZGVidWcuY2AgZmlsZS4gVGhpcyByYWlzZXMgYSByZWQgZmxhZzsgaG93IGlzIHRoaXMgdmFyaWFibGUgZ2V0dGluZyBpdHMgZGVmaW5pdGlvbj8gVGhpcyBjb3VsZCBiZSBhIHNuZWFreSBnbG9iYWwsIHdoaWNoIGlzIG5ldmVyIGlkZWFsLCBidXQgdGhlIGxhY2sgb2YgYW4gZXhwbGljaXQgZGVjbGFyYXRpb24gaXMgbW9yZSBsaWtlbHkgYSBtaXNzaW5nIGluY2x1ZGUgb3IgYSBkZWNsYXJhdGlvbiBlbHNld2hlcmUuCgpBbHJpZ2h0LCBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGZvciBvYnNjdXJlIGNvbXBpbGVyIGZsYWdzIG9yIGhlYWRlciBmaWxlIGd5bW5hc3RpY3MsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gY2hlY2sgYG1tL2NtYS5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCBhbnkgcmVsYXRlZCBzdHJ1Y3R1cmVzIG9yIHZhcmlhYmxlcyB0byBiZSBkZWNsYXJlZCwgZXNwZWNpYWxseSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIGluIHRoYXQgaGVhZGVyIGFuZCBjb25maXJtIG9yIGRlYnVuayBteSBzdXNwaWNpb25zLiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQgZGVjbGFyYXRpb24gaXMgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9jbWEuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuICAgMjpcdCNpZm5kZWYgX19NTV9DTUFfSF9fXG4gICAzOlx0I2RlZmluZSBfX01NX0NNQV9IX19cbiAgIDQ6XHRcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rb2JqZWN0LmhcdTAwM2VcbiAgIDc6XHRcbiAgIDg6XHRzdHJ1Y3QgY21hX2tvYmplY3Qge1xuICAgOTpcdFx0c3RydWN0IGtvYmplY3Qga29iajtcbiAgMTA6XHRcdHN0cnVjdCBjbWEgKmNtYTtcbiAgMTE6XHR9O1xuICAxMjpcdFxuICAxMzpcdC8qXG4gIDE0Olx0ICogTXVsdGktcmFuZ2Ugc3VwcG9ydC4gVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHRoZSBzaXplIG9mIHRoZSBhbGxvY2F0aW9uXG4gIDE1Olx0ICogaXMgbm90IGV4cGVjdGVkIHRvIGJlIGxhcmdlciB0aGFuIHRoZSBhbGlnbm1lbnQgKGxpa2Ugd2l0aCBodWdldGxiX2NtYSksXG4gIDE2Olx0ICogYW5kIHRoZSB0b3RhbCBhbW91bnQgb2YgbWVtb3J5IHJlcXVlc3RlZCwgd2hpbGUgc21hbGxlciB0aGFuIHRoZSB0b3RhbFxuICAxNzpcdCAqIGFtb3VudCBvZiBtZW1vcnkgYXZhaWxhYmxlLCBpcyBsYXJnZSBlbm91Z2ggdGhhdCBpdCBkb2VzbiYjMzk7dCBmaXQgaW4gYVxuICAxODpcdCAqIHNpbmdsZSBwaHlzaWNhbCBtZW1vcnkgcmFuZ2UgYmVjYXVzZSBvZiBtZW1vcnkgaG9sZXMuXG4gIDE5Olx0ICpcbiAgMjA6XHQgKiBGaWVsZHM6XG4gIDIxOlx0ICogICBAYmFzZV9wZm46IHBoeXNpY2FsIGFkZHJlc3Mgb2YgcmFuZ2VcbiAgMjI6XHQgKiAgIEBlYXJseV9wZm46IGZpcnN0IFBGTiBub3QgcmVzZXJ2ZWQgdGhyb3VnaCBjbWFfcmVzZXJ2ZV9lYXJseVxuICAyMzpcdCAqICAgQGNvdW50OiBzaXplIG9mIHJhbmdlXG4gIDI0Olx0ICogICBAYml0bWFwOiBiaXRtYXAgb2YgYWxsb2NhdGVkICgxIFx1MDAzY1x1MDAzYyBvcmRlcl9wZXJfYml0KS1zaXplZCBjaHVua3MuXG4gIDI1Olx0ICovXG4gIDI2Olx0c3RydWN0IGNtYV9tZW1yYW5nZSB7XG4gIDI3Olx0XHR1bnNpZ25lZCBsb25nIGJhc2VfcGZuO1xuICAyODpcdFx0dW5zaWduZWQgbG9uZyBjb3VudDtcbiAgMjk6XHRcdHVuaW9uIHtcbiAgMzA6XHRcdFx0dW5zaWduZWQgbG9uZyBlYXJseV9wZm47XG4gIDMxOlx0XHRcdHVuc2lnbmVkIGxvbmcgKmJpdG1hcDtcbiAgMzI6XHRcdH07XG4gIDMzOlx0I2lmZGVmIENPTkZJR19DTUFfREVCVUdGU1xuICAzNDpcdFx0c3RydWN0IGRlYnVnZnNfdTMyX2FycmF5IGRmc19iaXRtYXA7XG4gIDM1Olx0I2VuZGlmXG4gIDM2Olx0fTtcbiAgMzc6XHQjZGVmaW5lIENNQV9NQVhfUkFOR0VTIDhcbiAgMzg6XHRcbiAgMzk6XHRzdHJ1Y3QgY21hIHtcbiAgNDA6XHRcdHVuc2lnbmVkIGxvbmcgICBjb3VudDtcbiAgNDE6XHRcdHVuc2lnbmVkIGxvbmdcdGF2YWlsYWJsZV9jb3VudDtcbiAgNDI6XHRcdHVuc2lnbmVkIGludCBvcmRlcl9wZXJfYml0OyAvKiBPcmRlciBvZiBwYWdlcyByZXByZXNlbnRlZCBieSBvbmUgYml0ICovXG4gIDQzOlx0XHRzcGlubG9ja190XHRsb2NrO1xuICA0NDpcdFx0c3RydWN0IGxpc3RfaGVhZCBub2RlO1xuICA0NTpcdFx0c3RydWN0IG11dGV4IGFsbG9jX211dGV4O1xuICA0NjpcdCNpZmRlZiBDT05GSUdfQ01BX0RFQlVHRlNcbiAgNDc6XHRcdHN0cnVjdCBobGlzdF9oZWFkIG1lbV9oZWFkO1xuICA0ODpcdFx0c3BpbmxvY2tfdCBtZW1faGVhZF9sb2NrO1xuICA0OTpcdCNlbmRpZlxuICA1MDpcdFx0Y2hhciBuYW1lW0NNQV9NQVhfTkFNRV07XG4gIDUxOlx0XHRpbnQgbnJhbmdlcztcbiAgNTI6XHRcdHN0cnVjdCBjbWFfbWVtcmFuZ2UgcmFuZ2VzW0NNQV9NQVhfUkFOR0VTXTtcbiAgNTM6XHQjaWZkZWYgQ09ORklHX0NNQV9TWVNGU1xuICA1NDpcdFx0LyogdGhlIG51bWJlciBvZiBDTUEgcGFnZSBzdWNjZXNzZnVsIGFsbG9jYXRpb25zICovXG4gIDU1Olx0XHRhdG9taWM2NF90IG5yX3BhZ2VzX3N1Y2NlZWRlZDtcbiAgNTY6XHRcdC8qIHRoZSBudW1iZXIgb2YgQ01BIHBhZ2UgYWxsb2NhdGlvbiBmYWlsdXJlcyAqL1xuICA1NzpcdFx0YXRvbWljNjRfdCBucl9wYWdlc19mYWlsZWQ7XG4gIDU4Olx0XHQvKiB0aGUgbnVtYmVyIG9mIENNQSBwYWdlIHJlbGVhc2VkICovXG4gIDU5Olx0XHRhdG9taWM2NF90IG5yX3BhZ2VzX3JlbGVhc2VkO1xuICA2MDpcdFx0Lyoga29iamVjdCByZXF1aXJlcyBkeW5hbWljIG9iamVjdCAqL1xuICA2MTpcdFx0c3RydWN0IGNtYV9rb2JqZWN0ICpjbWFfa29iajtcbiAgNjI6XHQjZW5kaWZcbiAgNjM6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gIDY0Olx0XHQvKiBOVU1BIG5vZGUgKE5VTUFfTk9fTk9ERSBpZiB1bnNwZWNpZmllZCkgKi9cbiAgNjU6XHRcdGludCBuaWQ7XG4gIDY2Olx0fTtcbiAgNjc6XHRcbiAgNjg6XHRlbnVtIGNtYV9mbGFncyB7XG4gIDY5Olx0XHRDTUFfUkVTRVJWRV9QQUdFU19PTl9FUlJPUixcbiAgNzA6XHRcdENNQV9aT05FU19WQUxJRCxcbiAgNzE6XHRcdENNQV9aT05FU19JTlZBTElELFxuICA3MjpcdFx0Q01BX0FDVElWQVRFRCxcbiAgNzM6XHR9O1xuICA3NDpcdFxuICA3NTpcdGV4dGVybiBzdHJ1Y3QgY21hIGNtYV9lYXJseV9hcmVhc1tNQVhfRUFSTFlfQ01BX0FSRUFTXTtcbiAgNzY6XHRleHRlcm4gdW5zaWduZWQgaW50IGNtYV9lYXJseV9hcmVhX2NvdW50O1xuICA3NzpcdFxuICA3ODpcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjbWFfYml0bWFwX21heG5vKHN0cnVjdCBjbWEgKmNtYSxcbiAgNzk6XHRcdFx0c3RydWN0IGNtYV9tZW1yYW5nZSAqY21yKVxuICA4MDpcdHtcbiAgODE6XHRcdHJldHVybiBjbXItXHUwMDNlY291bnQgXHUwMDNlXHUwMDNlIGNtYS1cdTAwM2VvcmRlcl9wZXJfYml0O1xuICA4MjpcdH1cbiAgODM6XHRcbiAgODQ6XHQjaWZkZWYgQ09ORklHX0NNQV9TWVNGU1xuICA4NTpcdHZvaWQgY21hX3N5c2ZzX2FjY291bnRfc3VjY2Vzc19wYWdlcyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuICA4NjpcdHZvaWQgY21hX3N5c2ZzX2FjY291bnRfZmFpbF9wYWdlcyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuICA4NzpcdHZvaWQgY21hX3N5c2ZzX2FjY291bnRfcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuICA4ODpcdCNlbHNlXG4gIDg5Olx0c3RhdGljIGlubGluZSB2b2lkIGNtYV9zeXNmc19hY2NvdW50X3N1Y2Nlc3NfcGFnZXMoc3RydWN0IGNtYSAqY21hLFxuICA5MDpcdFx0XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpIHt9O1xuICA5MTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBjbWFfc3lzZnNfYWNjb3VudF9mYWlsX3BhZ2VzKHN0cnVjdCBjbWEgKmNtYSxcbiAgOTI6XHRcdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKSB7fTtcbiAgOTM6XHRzdGF0aWMgaW5saW5lIHZvaWQgY21hX3N5c2ZzX2FjY291bnRfcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgY21hICpjbWEsXG4gIDk0Olx0XHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcykge307XG4gIDk1Olx0I2VuZGlmXG4gIDk2Olx0I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0Njk3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBhIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgcHJvYmxlbS4gSXQgc2VlbXMgbGlrZSB0aGUgZGVmaW5pdGlvbnMgZm9yIGBjbWFfYXJlYXNgIGFuZCBgY21hX2FyZWFfY291bnRgIGFyZSBubyBsb25nZXIgaW4gYG1tL2NtYS5oYC4gVGhhdCYjMzk7cyBhIGh1Z2UgcmVkIGZsYWchIEl0IG1lYW5zIGlmIGBDT05GSUdfQ01BX0RFQlVHRlNgIG9yIGBDT05GSUdfQ01BX1NZU0ZTYCBhcmUgZW5hYmxlZCwgYG1tL2NtYV9kZWJ1Zy5jYCBhbmQgYG1tL2NtYV9zeXNmcy5jYCBhcmUgZ29pbmcgdG8gY29tcGxldGVseSBmYWlsIHRvIGNvbXBpbGUuIFRoaXMgcGF0Y2ggbG9va3MgYnJva2VuLgoKQnV0IHdhaXQsIEkgbmVlZCB0byB0YWtlIGEgZGVlcCBicmVhdGggYW5kIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhpcyBpcyBmcm9tIHN5emthbGxlciwgcmlnaHQ/IFN5emthbGxlciB0ZXN0cyBhcHBsaWVkIHBhdGNoZXMsIGRvZXNuJiMzOTt0IGl0PyBJZiB0aGUgdGVzdHMgcGFzc2VkLCB0aGUgY29kZSBtdXN0IGhhdmUgY29tcGlsZWQuIFNvLCBtYXliZSwganVzdCBtYXliZSwgdGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uIGRpc2FibGVzIGBDT05GSUdfQ01BX0RFQlVHRlNgIGFuZCBgQ09ORklHX0NNQV9TWVNGU2A/IE9yIHBlcmhhcHMgdGhpcyBwYXRjaCBJIHJlY2VpdmVkIGlzIG9ubHkgYSBkaWZmIGFuZCB0aGUgY29tcGxldGUgc291cmNlIGNvZGUgY29udGFpbnMgY2hhbmdlcyB0byB0aG9zZSBmaWxlcy4KCkFoLCBJIGp1c3QgZ290IHRoaXMgbm90ZTogJiMzNDtUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluIHlvdXIgd29ya3NwYWNlLiYjMzQ7IFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBidXQgc3RpbGwsIHRoaXMgZGlzY3JlcGFuY3kgaXMgdHJvdWJsaW5nLiBMZXQmIzM5O3Mgbm90IGFzc3VtZSBhbnl0aGluZy4gVGhlIGJlc3QgdGhpbmcgdG8gZG8gaXMgcXVpY2tseSBkb3VibGUtY2hlY2sgbXkgbG9jYWwgd29ya3NwYWNlLiBJIG5lZWQgdG8gdmVyaWZ5IGlmIGBtbS9jbWFfZGVidWcuY2Agc3RpbGwgaW5jbHVkZXMgdGhhdCB2YXJpYWJsZS4gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSByZXBlYXRpbmcgdGhlIHNhbWUgdG9vbCBjYWxsIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzLiBQbGVhc2Ugc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSBpbnN0ZWFkIG9mIHJlcGVhdGluZyBxdWVyaWVzLjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbWFfYXJlYXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9jbWFfZGVidWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O1lvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy4gUGxlYXNlIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUgaW5zdGVhZCBvZiByZXBlYXRpbmcgcXVlcmllcy4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MzI4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIHF1aWNrbHkgY29uZmlybWVkIHRoZSBncmVwIHJlc3VsdCBwb2ludHMgdG8gYSBwcm9ibGVtIGluIGBtbS9jbWFfZGVidWcuY2AsIHNwZWNpZmljYWxseSByZWZlcmVuY2luZyBgY21hX2FyZWFzW2ldYC4gUmlnaHQsIHNvIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgb3IgbW9kaWZ5aW5nIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMsIHNvIGZ1enppbmcgaXMgY2VydGFpbmx5IHdhcnJhbnRlZC4gSSAqbXVzdCogYXZvaWQgZW5hYmxpbmcgYENPTkZJR19DTUFfREVCVUdGU2AgYW5kIGBDT05GSUdfQ01BX1NZU0ZTYCB3aGVuIHRlc3RpbmcgdGhpcy4gTHVja2lseSwgc3l6a2FsbGVyIGhhcyBhIGNvbmZpZyBmb3IgdGhpcywgc28gSSB3aWxsIHJlbHkgb24gdGhhdCwgYW5kIGlmIGl0IGZhaWxzIHRvIGJ1aWxkLCB0aGF0IHdpbGwgYmUgcmVwb3J0ZWQuCgpNeSBqb2IgaGVyZSBpcyB0byBnZW5lcmF0ZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgZnV6emluZyB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIGFuZCBwcm92aWRlIGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2AuIFRoZSBwYXRjaCBhZGRzIGBDT05GSUdfRE1BQlVGX0hFQVBTX1RFR1JBX1ZQUmAsIGFuZCBvYnZpb3VzbHksIEkgaGF2ZSB0byBpbmNsdWRlIHRoYXQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBJdCBkZXBlbmRzIG9uIGBETUFfQ01BYCBhbmQgYERNQUJVRl9IRUFQU2AgYXMgd2VsbCwgc28gSSBuZWVkIHRvIGFkZCB0aG9zZSB0byBgRW5hYmxlQ29uZmlnc2AgYXMgd2VsbC4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBjaGFuZ2VzIGluIGBtbS9jbWEuY2AuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSB3b3J0aCBmb2N1c2luZyBvbi4gYGNtYV9jcmVhdGVgIGFuZCBgY21hX2ZyZWVgIHNlZW0gdGllZCB0byBgdGVncmEtdnByYCBpbml0aWFsaXphdGlvbiwgd2hpY2ggcmVxdWlyZXMgYSBEVCBub2RlLiBTaW5jZSB3ZSBwcm9iYWJseSB3b24mIzM5O3QgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgRFQgbm9kZSBpbiBhIHN0YW5kYXJkIHN5emthbGxlciBzZXR1cCwgdGhlc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgdW5yZWFjaGFibGUuIExldCBtZSB2ZXJpZnkuIFllcywgdGhlIHBhdGggdG8gYGNtYV9jcmVhdGVgIGlzIHRocm91Z2ggYHRlZ3JhX3Zwcl9jaHVua19pbml0YCwgYHRlZ3JhX3Zwcl9zZXR1cF9jaHVua3NgLCBgdGVncmFfdnByX2FkZF9oZWFwYCwgYW5kIGZpbmFsbHkgYHRlZ3JhX3Zwcl9pbml0YCwgYWxsIGNsZWFybHkgdGllZCB0byB0aGUgVGVncmEgVlBSIGhhcmR3YXJlLiBUaGlzIG1ha2VzIHRoZW0gKm5vdCogYSBnb29kIHRhcmdldC4KCldoYXQgYWJvdXQgYGNtYV9uZXdfYXJlYWAsIGBjbWFfaW5pdF9yZXNlcnZlZF9hcmVhc2AsIGFuZCBgY21hX2Ryb3BfYXJlYWA/IFRoZXNlIGFyZSBjYWxsZWQgZHVyaW5nIGJvb3QsIGJ1dCBzeXprYWxsZXIgdXN1YWxseSBmb2N1c2VzIG9uIHN5c2NhbGxzLCBzbyBlYXJseSBib290IGNvZGUgaXMgbm90IHdoYXQgaXQgdXN1YWxseSBmb2N1c2VzIG9uLgoKSXMgdGhlcmUgYW55IHN5c2NhbGwtcmVhY2hhYmxlIGNvZGUgY2hhbmdlZCBpbiBgbW0vY21hLmNgPyBgY21hX2Zvcl9lYWNoX2FyZWFgIGlzIGNoYW5nZWQgdG8gaXRlcmF0ZSBvdmVyIGEgbGlzdC4gSG93ZXZlciwgaXQgbG9va3MgbGlrZSBpdCBpc24mIzM5O3QgdXNlZCBhbnl3aGVyZSEgV2FpdCwgaXQgSVMgZXhwb3J0ZWQuIENvdWxkIHNvbWUgbW9kdWxlIHVzZSBpdD8gTm9wZSwgYSBncmVwIHJldHVybmVkIG5vIHVzZXJzLiBPa2F5LCBob3cgYWJvdXQgYGNtYV9mb3JfZWFjaF9lYXJseV9hcmVhYD8gQWgsIGl0JiMzOTtzIHVzZWQgaW4gYGFyY2gvczM5MC9tbS9pbml0LmNgLiBUaGF0JiMzOTtzIG5vdCBhIGNvbW1vbiBhcmNoaXRlY3R1cmUgZm9yIHN5emthbGxlci4KClNvLCB0aGUgY2hhbmdlcyBpbiBgbW0vY21hLmNgIGFwcGVhciB0byBiZSBtb3N0bHkgdW5yZWFjaGFibGUgb3IgZGVhZCBjb2RlLCBleGNlcHQgZm9yIGVhcmx5IGJvb3QgaW5pdGlhbGl6YXRpb24uIFdhaXQsIHdhaXQsIHRoZXJlJiMzOTtzIGBiaXRtYXBfYWxsb2NhdGVgIGFkZGVkIHRvIGBpbmNsdWRlL2xpbnV4L2JpdG1hcC5oYC4gSXQgaXMgdXNlZCBieSBgYml0bWFwX2FsbG9jYXRlX3JlZ2lvbmAsIGFuZCBgYml0bWFwX2FsbG9jYXRlX3JlZ2lvbmAgaXMgaW4gdHVybiB1c2VkIGJ5IGBjbWFfYWxsb2NgIGluIGBtbS9jbWEuY2AuIE9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgY21hX2FsbG9jYCBtb3JlIGNsb3NlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Yml0bWFwX2FsbG9jYXRlX3JlZ2lvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2NtYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY4NDcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIENNQSBBbGxvY2F0aW9uIERldGFpbHMqKgoKT2theSwgc28gYGNtYV9hbGxvY2AgaXMgdXNpbmcgYGJpdG1hcF9maW5kX2ZyZWVfcmVnaW9uYC4uLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGhhZG4mIzM5O3QgaW1tZWRpYXRlbHkgY29ubmVjdGVkIHRob3NlIGRvdHMuIEl0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoYXQgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaXMgYmFzZWQgb24gYSBiaXRtYXAsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCwgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIENNQSBpbXBsZW1lbnRhdGlvbi4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBzb3VyY2UgY29kZS4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byBgbW0vY21hLmNgIGFuZCBzZWFyY2ggc3BlY2lmaWNhbGx5IGZvciB0aGUgYGJpdG1hcF9gIGZ1bmN0aW9ucy4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGV5IGFyZSBpbnRlZ3JhdGVkIGFuZCBob3cgdGhlIENNQSBhbGxvY2F0b3IgbGV2ZXJhZ2VzIHRoZSBiaXRtYXAgdG8gbWFuYWdlIGl0cyBjb250aWd1b3VzIG1lbW9yeSByZWdpb25zLiBUaGlzIHNob3VsZCBzaGVkIGxpZ2h0IG9uIHRoZSBhbGxvY2F0aW9uIGFsZ29yaXRobSwgZnJhZ21lbnRhdGlvbiBoYW5kbGluZywgYW5kIGFueSBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIENNQSBmcmFtZXdvcmsuIEkgc3VzcGVjdCBJIG1pZ2h0IGZpbmQgc29tZSBzdWJ0bGUgZGV0YWlscyBhYm91dCBob3cgaXQgaGFuZGxlcyBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlcywgb3IgcGVyaGFwcyBzb21lIGNsZXZlciB0cmlja3MgZm9yIGNvYWxlc2NpbmcgZnJlZSBibG9ja3MuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaXRtYXBfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vY21hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vY21hLmM9NjA9RVhQT1JUX1NZTUJPTF9HUEwoY21hX2dldF9uYW1lKTtcbm1tL2NtYS5jLTYxLVxubW0vY21hLmM6NjI6c3RhdGljIHVuc2lnbmVkIGxvbmcgY21hX2JpdG1hcF9hbGlnbmVkX21hc2soY29uc3Qgc3RydWN0IGNtYSAqY21hLFxubW0vY21hLmMtNjMtXHRcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IGFsaWduX29yZGVyKVxuLS1cbm1tL2NtYS5jLTczLSAqL1xubW0vY21hLmM6NzQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgY21hX2JpdG1hcF9hbGlnbmVkX29mZnNldChjb25zdCBzdHJ1Y3QgY21hICpjbWEsXG5tbS9jbWEuYy03NS1cdFx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmNtcixcbi0tXG5tbS9jbWEuYy04MS1cbm1tL2NtYS5jOjgyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGNtYV9iaXRtYXBfcGFnZXNfdG9fYml0cyhjb25zdCBzdHJ1Y3QgY21hICpjbWEsXG5tbS9jbWEuYy04My1cdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBwYWdlcylcbi0tXG5tbS9jbWEuYz04OD1zdGF0aWMgdm9pZCBjbWFfY2xlYXJfYml0bWFwKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IGNtYV9tZW1yYW5nZSAqY21yLFxuLS1cbm1tL2NtYS5jLTkwLXtcbm1tL2NtYS5jOjkxOlx0dW5zaWduZWQgbG9uZyBiaXRtYXBfbm8sIGJpdG1hcF9jb3VudDtcbm1tL2NtYS5jLTkyLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbm1tL2NtYS5jLTkzLVxubW0vY21hLmM6OTQ6XHRiaXRtYXBfbm8gPSAocGZuIC0gY21yLVx1MDAzZWJhc2VfcGZuKSBcdTAwM2VcdTAwM2UgY21hLVx1MDAzZW9yZGVyX3Blcl9iaXQ7XG5tbS9jbWEuYzo5NTpcdGJpdG1hcF9jb3VudCA9IGNtYV9iaXRtYXBfcGFnZXNfdG9fYml0cyhjbWEsIGNvdW50KTtcbm1tL2NtYS5jLTk2LVxubW0vY21hLmMtOTctXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZjbWEtXHUwMDNlbG9jaywgZmxhZ3MpO1xubW0vY21hLmM6OTg6XHRiaXRtYXBfY2xlYXIoY21yLVx1MDAzZWJpdG1hcCwgYml0bWFwX25vLCBiaXRtYXBfY291bnQpO1xubW0vY21hLmMtOTktXHRjbWEtXHUwMDNlYXZhaWxhYmxlX2NvdW50ICYjNDM7PSBjb3VudDtcbi0tXG5tbS9jbWEuYz0xNDY9c3RhdGljIHZvaWQgX19pbml0IGNtYV9hY3RpdmF0ZV9hcmVhKHN0cnVjdCBjbWEgKmNtYSlcbi0tXG5tbS9jbWEuYy0xNTAtXHRzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXI7XG5tbS9jbWEuYzoxNTE6XHR1bnNpZ25lZCBsb25nIGJpdG1hcF9jb3VudCwgY291bnQ7XG5tbS9jbWEuYy0xNTItXG4tLVxubW0vY21hLmMtMTU1LVx0XHRlYXJseV9wZm5bYWxsb2NyYW5nZV0gPSBjbXItXHUwMDNlZWFybHlfcGZuO1xubW0vY21hLmM6MTU2Olx0XHRjbXItXHUwMDNlYml0bWFwID0gYml0bWFwX3phbGxvYyhjbWFfYml0bWFwX21heG5vKGNtYSwgY21yKSxcbm1tL2NtYS5jLTE1Ny1cdFx0XHRcdFx0ICAgIEdGUF9LRVJORUwpO1xuLS1cbm1tL2NtYS5jLTE2OC1cdFx0XHRjb3VudCA9IGVhcmx5X3BmbltyXSAtIGNtci1cdTAwM2ViYXNlX3Bmbjtcbm1tL2NtYS5jOjE2OTpcdFx0XHRiaXRtYXBfY291bnQgPSBjbWFfYml0bWFwX3BhZ2VzX3RvX2JpdHMoY21hLCBjb3VudCk7XG5tbS9jbWEuYzoxNzA6XHRcdFx0Yml0bWFwX3NldChjbXItXHUwMDNlYml0bWFwLCAwLCBiaXRtYXBfY291bnQpO1xubW0vY21hLmMtMTcxLVx0XHR9XG4tLVxubW0vY21hLmMtMTkxLVx0Zm9yIChyID0gMDsgciBcdTAwM2MgYWxsb2NyYW5nZTsgciYjNDM7JiM0MzspXG5tbS9jbWEuYzoxOTI6XHRcdGJpdG1hcF9mcmVlKGNtYS1cdTAwM2VyYW5nZXNbcl0uYml0bWFwKTtcbm1tL2NtYS5jLTE5My1cbi0tXG5tbS9jbWEuYz03ODQ9c3RhdGljIHZvaWQgY21hX2RlYnVnX3Nob3dfYXJlYXMoc3RydWN0IGNtYSAqY21hKVxuLS1cbm1tL2NtYS5jLTc5Ni1cbm1tL2NtYS5jOjc5NzpcdFx0bmJpdHMgPSBjbWFfYml0bWFwX21heG5vKGNtYSwgY21yKTtcbm1tL2NtYS5jLTc5OC1cbi0tXG5tbS9jbWEuYz04MTE9c3RhdGljIGludCBjbWFfcmFuZ2VfYWxsb2Moc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXIsXG4tLVxubW0vY21hLmMtODE0LXtcbm1tL2NtYS5jOjgxNTpcdHVuc2lnbmVkIGxvbmcgYml0bWFwX21heG5vLCBiaXRtYXBfbm8sIGJpdG1hcF9jb3VudDtcbm1tL2NtYS5jLTgxNi1cdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHBmbiwgbWFzaywgb2Zmc2V0O1xuLS1cbm1tL2NtYS5jLTgxOS1cbm1tL2NtYS5jOjgyMDpcdG1hc2sgPSBjbWFfYml0bWFwX2FsaWduZWRfbWFzayhjbWEsIGFsaWduKTtcbm1tL2NtYS5jOjgyMTpcdG9mZnNldCA9IGNtYV9iaXRtYXBfYWxpZ25lZF9vZmZzZXQoY21hLCBjbXIsIGFsaWduKTtcbm1tL2NtYS5jOjgyMjpcdGJpdG1hcF9tYXhubyA9IGNtYV9iaXRtYXBfbWF4bm8oY21hLCBjbXIpO1xubW0vY21hLmM6ODIzOlx0Yml0bWFwX2NvdW50ID0gY21hX2JpdG1hcF9wYWdlc190b19iaXRzKGNtYSwgY291bnQpO1xubW0vY21hLmMtODI0LVxubW0vY21hLmM6ODI1Olx0aWYgKGJpdG1hcF9jb3VudCBcdTAwM2UgYml0bWFwX21heG5vKVxubW0vY21hLmMtODI2LVx0XHRnb3RvIG91dDtcbm1tL2NtYS5jLTgyNy1cbm1tL2NtYS5jOjgyODpcdGZvciAoc3RhcnQgPSAwOyA7IHN0YXJ0ID0gYml0bWFwX25vICYjNDM7IG1hc2sgJiM0MzsgMSkge1xubW0vY21hLmMtODI5LVx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNtYS1cdTAwM2Vsb2NrKTtcbi0tXG5tbS9jbWEuYy04MzctXHRcdH1cbm1tL2NtYS5jOjgzODpcdFx0Yml0bWFwX25vID0gYml0bWFwX2ZpbmRfbmV4dF96ZXJvX2FyZWFfb2ZmKGNtci1cdTAwM2ViaXRtYXAsXG5tbS9jbWEuYzo4Mzk6XHRcdFx0XHRiaXRtYXBfbWF4bm8sIHN0YXJ0LCBiaXRtYXBfY291bnQsIG1hc2ssXG5tbS9jbWEuYy04NDAtXHRcdFx0XHRvZmZzZXQpO1xubW0vY21hLmM6ODQxOlx0XHRpZiAoYml0bWFwX25vIFx1MDAzZT0gYml0bWFwX21heG5vKSB7XG5tbS9jbWEuYy04NDItXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmNtYS1cdTAwM2Vsb2NrKTtcbi0tXG5tbS9jbWEuYy04NDUtXG5tbS9jbWEuYzo4NDY6XHRcdHBmbiA9IGNtci1cdTAwM2ViYXNlX3BmbiAmIzQzOyAoYml0bWFwX25vIFx1MDAzY1x1MDAzYyBjbWEtXHUwMDNlb3JkZXJfcGVyX2JpdCk7XG5tbS9jbWEuYy04NDctXHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuLS1cbm1tL2NtYS5jLTg2MC1cbm1tL2NtYS5jOjg2MTpcdFx0Yml0bWFwX3NldChjbXItXHUwMDNlYml0bWFwLCBiaXRtYXBfbm8sIGJpdG1hcF9jb3VudCk7XG5tbS9jbWEuYy04NjItXHRcdGNtYS1cdTAwM2VhdmFpbGFibGVfY291bnQgLT0gY291bnQ7XG4tLVxubW0vY21hLmM9MTIyOD12b2lkIGNtYV9mcmVlKHN0cnVjdCBjbWEgKmNtYSlcbi0tXG5tbS9jbWEuYy0xMjM2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY21hLVx1MDAzZW5yYW5nZXM7IGkmIzQzOyYjNDM7KSB7XG5tbS9jbWEuYzoxMjM3Olx0XHR1bnNpZ25lZCBsb25nIG5iaXRzID0gY21hX2JpdG1hcF9tYXhubyhjbWEsIFx1MDAyNmNtYS1cdTAwM2VyYW5nZXNbaV0pO1xubW0vY21hLmMtMTIzOC1cbm1tL2NtYS5jOjEyMzk6XHRcdGlmICghYml0bWFwX2VtcHR5KGNtYS1cdTAwM2VyYW5nZXNbaV0uYml0bWFwLCBuYml0cykpIHtcbm1tL2NtYS5jLTEyNDAtXHRcdFx0V0FSTigxLCBcJiMzNDslczogcmFuZ2UgJXUgbm90IGVtcHR5XFxuXCYjMzQ7LCBjbWEtXHUwMDNlbmFtZSwgaSk7XG4tLVxubW0vY21hLmMtMTI1My1cbm1tL2NtYS5jOjEyNTQ6XHRcdGJpdG1hcF9mcmVlKGNtci1cdTAwM2ViaXRtYXApO1xubW0vY21hLmMtMTI1NS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg5NDAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEJpdG1hcCBBbGxvY2F0aW9uIGluIENNQSBDb250ZXh0KioKCk9rYXksIHNvIGl0IHNlZW1zIGBiaXRtYXBfYWxsb2NhdGVgIGlzbiYjMzk7dCBhY3R1YWxseSBlbXBsb3llZCB3aXRoaW4gdGhlIGBtbS9jbWEuY2AgZmlsZSBpdHNlbGYuIFRoYXQmIzM5O3MgYSBsaXR0bGUgdW5leHBlY3RlZCwgSSYjMzk7ZCBhc3N1bWVkIGl0IHdvdWxkIGJlIGNlbnRyYWwgdG8gdGhlIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvciBpbXBsZW1lbnRhdGlvbi4gU28sIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0ICp3aGVyZSogdGhpcyBmdW5jdGlvbiAqaXMqIHVzZWQuIExldCYjMzk7cyB0cmFjZSBpdCBkb3duLiBMZXQmIzM5O3Mgc2VlLi4uIGEgcXVpY2sgZ3JlcCB0aHJvdWdoIHRoZSBjb2RlLi4uIGFoLCBoZXJlIHdlIGdvLCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmNgIGZpbGUuIEhvcGVmdWxseSwgdGhpcyB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGJpdG1hcCBhbGxvY2F0aW9uIG1lY2hhbmlzbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JpdG1hcF9hbGxvY2F0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy90ZWdyYS12cHIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmM9NDU3PXN0YXRpYyBpbnQgdGVncmFfdnByX2ZpbmRfZnJlZV9yZWdpb25fY2x1c3RlcmVkKHN0cnVjdCB0ZWdyYV92cHIgKnZwcixcbi0tXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmMtNTA1LVxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL3RlZ3JhLXZwci5jOjUwNjpcdFx0aWYgKCFiaXRtYXBfYWxsb2NhdGUodnByLVx1MDAzZWJpdG1hcCwgdGFyZ2V0LCBudW1fcGFnZXMpKVxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL3RlZ3JhLXZwci5jLTUwNy1cdFx0XHRyZXR1cm4gdGFyZ2V0O1xuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy90ZWdyYS12cHIuYy01MTMtXHRpZiAodGFyZ2V0ICYjNDM7IG51bV9wYWdlcyBcdTAwM2M9IHZwci1cdTAwM2VudW1fcGFnZXMgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmM6NTE0Olx0ICAgICFiaXRtYXBfYWxsb2NhdGUodnByLVx1MDAzZWJpdG1hcCwgdGFyZ2V0LCBudW1fcGFnZXMpKVxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL3RlZ3JhLXZwci5jLTUxNS1cdFx0cmV0dXJuIHRhcmdldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk0NTQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBBbmFseXNpczogVGVncmEgVlBSIERyaXZlciBhbmQgQ01BIFJlZmFjdG9yaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBiaXRtYXBfYWxsb2NhdGVgIGlzIGluZGVlZCB1c2VkIGluIGB0ZWdyYS12cHIuY2AuIFRoZSBjb3JlIGNoYW5nZXMgYXJlIGluIHRocmVlIGFyZWFzOiB0aGUgYHRlZ3JhLXZwci5jYCBkcml2ZXIsIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSBtYW5hZ2VtZW50IChgbW0vY21hLmNgKSwgYW5kIHNvbWUgcGFnZSBhdHRyaWJ1dGUgYWRqdXN0bWVudHMgKGBhcmNoL2FybTY0L21tL3BhZ2VhdHRyLmNgKS4KClRoZSBgdGVncmEtdnByLmNgIGRyaXZlciBpdHNlbGYgaXMgY29uZGl0aW9uYWwsIG9ubHkgaW5pdGlhbGl6aW5nIGlmIGl0cyBEZXZpY2UgVHJlZSBub2RlIGlzIHByZXNlbnQuIFNpbmNlIHN5emthbGxlciBkb2VzbiYjMzk7dCBpbmplY3QgRFQgbm9kZXMsIHRoYXQgY29kZSBwYXRoIGlzIGVzc2VudGlhbGx5IHVucmVhY2hhYmxlIGluIGEgc3l6a2FsbGVyIGNvbnRleHQuIEhvd2V2ZXIsIHRoZSBDTUEgY2hhbmdlcyBpbiBgbW0vY21hLmNgIOKAkyBzcGVjaWZpY2FsbHksIHJlZmFjdG9yaW5nIGBjbWFfYXJlYXNgIHRvIGEgbGlzdCBhbmQgZWFybHkgYm9vdCBpbml0aWFsaXphdGlvbiDigJMgKmFyZSogcmVhY2hlZCBkdXJpbmcgYm9vdC4gQnV0IEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZXNlIGNoYW5nZXMgYXJlIHJlbGV2YW50IHRvIGZ1enppbmcuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYGNtYV9jcmVhdGVgIGFuZCBgY21hX2ZyZWVgIHdlcmUgdGhlIGtleSBhcmVhcywgYnV0IHRob3NlIGFyZSAqb25seSogY2FsbGVkIGJ5IGB0ZWdyYS12cHIuY2AsIHNvIGFnYWluLCB1bmludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUgcmVmYWN0b3Jpbmcgb2YgYGNtYV9hcmVhc2AgYW5kIHRoZSBlYXJseSBib290IGluaXQsIHdoaWxlIGV4ZWN1dGVkLCBhcmVuJiMzOTt0IGZ1enplZCBkaXJlY3RseSBieSBzeXprYWxsZXIgd2hpY2ggcHJpbWFyaWx5IHRhcmdldHMgc3lzY2FsbHMuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBhbnkgKnN5c2NhbGwqLXJlYWNoYWJsZSBjb2RlIGhhcyBjaGFuZ2VkLiBgY21hX2FsbG9jYCBhbmQgYGNtYV9yZWxlYXNlYCBzZWVtIHVudG91Y2hlZCwgc28gdGhhdCYjMzk7cyBhIGRlYWQgZW5kLiBPa2F5LCBgY21hX2Zvcl9lYWNoX2FyZWFgIGlzIG1vZGlmaWVkLCBidXQgdGhhdCYjMzk7cyBub3QgdXNlZCBpbiBhbnkgc3lzY2FsbCBwYXRoIGVpdGhlciwgZXhjZXB0IGZvciBhIGNvdXBsZSBvZiBuaWNoZSBjYXNlcyBpbiBgYXJjaC9zMzkwL21tL2luaXQuY2AgYW5kIGBtbS9jbWFfZGVidWcuY2AsIHdoaWNoIGFyZSBub3QgcmVsZXZhbnQuIFRoaXMgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBmcm9tIGEgc3lzY2FsbC1yZWFjaGFibGUgcGF0aC4KClNvLCBpcyB0aGlzIHBhdGNoIHdvcnRoIGZ1enppbmc/IFRoZSBuZXcgYHRlZ3JhLXZwci5jYCBkcml2ZXIgaXRzZWxmIGlzIG9mZi1saW1pdHM7IHdpdGhvdXQgYSBEVCBub2RlLCBzeXprYWxsZXIgaXMgZ29pbmcgbm93aGVyZSB3aXRoIHRoYXQuIFRoZSBxdWVzdGlvbiBub3cgYmVjb21lczogY2FuIHN5emthbGxlciBiZSBjb25maWd1cmVkIHRvIHVzZSBEVCBvdmVybGF5cz8gSXQmIzM5O3Mgbm90IGRlZmF1bHQgYmVoYXZpb3IuIEJ1dCBldmVuIGlmIGl0IGNvdWxkLCBnaXZlbiB0aGF0IHN5emthbGxlciB1c3VhbGx5IHJ1bnMgb24gZ2VuZXJpYyBRRU1VIChgdmlydGAgbWFjaGluZSksIGFuZCBgdGVncmEtdnByYCByZXF1aXJlcyBhIHNwZWNpZmljIERUIG5vZGUsIGl0JiMzOTtzIHZpcnR1YWxseSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHRoaXMgc2V0dXAuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGNvbnNpZGVyIFFFTVUgYXMgYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aGVyZSB0aGlzIGlzIGltcG9zc2libGUsIHNvIGl0IGlzIGltcG9zc2libGUgdG8gcmVhY2guCgpIb3dldmVyLCB0aGVyZSYjMzk7cyBhbHNvIHRoZSBDTUEgcmVmYWN0b3JpbmcuIEFyZSB0aGUgY2hhbmdlcyBpbiBgbW0vY21hLmNgIHJlYWNoYWJsZT8gWWVzLCBgY21hX25ld19hcmVhYCBhbmQgYGNtYV9pbml0X3Jlc2VydmVkX2FyZWFzYCBhcmUgZXhlY3V0ZWQgZHVyaW5nIGJvb3QsIGJ1dCBub3QgdGhyb3VnaCBzeXNjYWxscywgd2hpY2ggbWVhbnMgbm8gZnV6emluZy4gQnV0IHdoYXQgYWJvdXQgYGNtYV9mb3JfZWFjaF9hcmVhYCwgd2hpY2ggaXMgZXhwb3J0ZWQ/IEkgaGF2ZSB0byBsb29rIGZvciBjYWxsZXJzLCBzbyBJJiMzOTtsbCBncmVwIHRoZSBjb2RlLiBObyBsdWNrLCB0aGUgY29kZSBpcyBkZWFkIGFuZCB1bnJlYWNoYWJsZS4gT2theSwgSSB3YXMgd3JvbmcsIGBjbWFfY3JlYXRlYCBhbmQgYGNtYV9mcmVlYCBhcmUgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0IHNob3VsZCBiZSB1c2VkIGluIHNvbWUgY29kZS4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byBgbW0vY21hLmNgIHRvIHNlZSBob3cgaXQgd29ya3MuIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGV2YWx1YXRlIHRoZXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmNtYV9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9jbWEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMTM3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQSBRdWljayBQYW5pYywgRm9sbG93ZWQgYnkgYSBOZWVkIGZvciBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzICpjZXJ0YWluKiB0aGF0IGBjbWFfY3JlYXRlYCB3YXMgcGFydCBvZiB0aGUgc3RhbmRhcmQgQVBJLiBXaHkgaXNuJiMzOTt0IGl0IGV4cG9ydGluZz8gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCB3aGF0IEkgZXhwZWN0ZWQuIFRoaXMgaXMgYSBiaXQgdW5zZXR0bGluZzsgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiBpbW1lZGlhdGVseS4KClJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIExldCYjMzk7cyB0cmFjZSBiYWNrIHRoZSBkZWZpbml0aW9uIG9mIGBjbWFfY3JlYXRlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGl0JiMzOTtzIG5vdCBiZWluZyBleHBvc2VkIHdoZXJlIEkgdGhvdWdodCBpdCB3b3VsZCBiZS4gSXMgaXQgYSBuYW1pbmcgaXNzdWU/IEEgc2NvcGUgcHJvYmxlbT8gT3IgaGFzIHNvbWV0aGluZyBjaGFuZ2VkIGluIHRoZSBsaWJyYXJ5IEkmIzM5O20gd29ya2luZyB3aXRoPyBUaGlzIHJlcXVpcmVzIGEgZGVlcCBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBoYXBwZW5pbmcgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y21hX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2NtYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NtYS5jPTExNTc9dm9pZCBfX2luaXQgKmNtYV9yZXNlcnZlX2Vhcmx5KHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbm1tL2NtYS5jLTExOTYtXG5tbS9jbWEuYzoxMTk3OnN0cnVjdCBjbWEgKl9faW5pdCBjbWFfY3JlYXRlKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXG5tbS9jbWEuYy0xMTk4LVx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBvcmRlcl9wZXJfYml0LCBjb25zdCBjaGFyICpuYW1lKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTQ4NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENNQSBNZW1vcnkgQWxsb2NhdGlvbiBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIGp1c3QgbG9va2luZyB0aHJvdWdoIHRoaXMgY29kZSBhbmQgc29tZXRoaW5nJiMzOTtzIHBpbmdpbmcgbXkgcmFkYXIuIEkgc2VlIHRoYXQgYGNtYV9jcmVhdGVgIGlzIGZsYWdnZWQgYXMgYF9faW5pdGAsIHdoaWNoIGlzIHVzdWFsbHkgYSBwcmV0dHkgc3Ryb25nIGluZGljYXRvciB0aGF0IGl0JiMzOTtzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBvbmx5IGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiBCdXQgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLi4uIEkmIzM5O20gdHJhY2luZyB0aGUgY2FsbHMsIGFuZCBpdCBsb29rcyBsaWtlIGB0ZWdyYS12cHIuY2AgaW52b2tlcyBgY21hX2NyZWF0ZWAgZnJvbSBgdGVncmFfdnByX3NldHVwX2NodW5rc2AuIFRoYXQgZnVuY3Rpb24gaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgdGVncmFfdnByX2FkZF9oZWFwYCwgd2hpY2ggaXMgKmFsc28qIGNhbGxlZCBieSBgdGVncmFfdnByX2luaXRgLiBBbmQgKnRoYXQqIG9uZSBpcyBkZWZpbml0ZWx5IG1hcmtlZCBgX19pbml0YC4gU28sIHRoZSBlbnRpcmUgY2hhaW4gaXMgdGllZCB0byB0aGUgZWFybHkgaW5pdGlhbGl6YXRpb24gc3RhZ2VzLCBjb25maXJtaW5nIG15IGluaXRpYWwgaHVuY2ggYWJvdXQgYGNtYV9jcmVhdGVgIGJlaW5nIGEgYm9vdC10aW1lIGZ1bmN0aW9uLgoKQnV0IHdhaXQgYSBtaW51dGUuLi4gSSBhbHNvIHNlZSBgdGVncmEtdnByLmNgIGNhbGxpbmcgYGNtYV9mcmVlYCBhcyB3ZWxsLiBUaGF0IGlzIGEgZnVuY3Rpb24gdGhhdCB1c3VhbGx5IGlzIGNhbGxlZCBkdXJpbmcgdGhlIHNodXRkb3duIG9mIGEgc3lzdGVtLCBub3QganVzdCBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQgYW5kIHNlZSB3aGF0IHRoYXQmIzM5O3MgYWxsIGFib3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbWFfZnJlZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy90ZWdyYS12cHIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmM9MjI5PXN0YXRpYyB2b2lkIHRlZ3JhX3Zwcl9jaHVua19mcmVlKHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rKVxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL3RlZ3JhLXZwci5jLTIzMC17XG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmM6MjMxOlx0Y21hX2ZyZWUoY2h1bmstXHUwMDNlY21hKTtcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy90ZWdyYS12cHIuYy0yMzItfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjAzMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgaW4gdGhlIE5WSURJQSBUZWdyYSBWUFIgRHJpdmVyKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIFRlZ3JhIFZQUiBkcml2ZXIgaGFuZGxlcyBtZW1vcnkuIFRoZSBmdW5jdGlvbiBgdGVncmFfdnByX2NodW5rX2ZyZWVgIGlzIGRlZmluaXRlbHkgY2VudHJhbCBoZXJlLiBJdCYjMzk7cyBjYWxsZWQgaW4gdHdvIHBsYWNlczogb25jZSBkdXJpbmcgdGhlIGluaXRpYWwgc2V0dXAgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdGVncmFfdnByX3NldHVwX2NodW5rc2AgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuIFRoZW4sIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGB0ZWdyYV92cHJfZnJlZV9jaHVua3NgLCBhbmQgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBgdGVncmFfdnByX2FkZF9oZWFwYCBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aC4gVGhlIGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXNlIGFyZSBhbGwgaGFwcGVuaW5nIGR1cmluZyB0aGUgbW9kdWxlJiMzOTtzIGluaXRpYWxpemF0aW9uIHBoYXNlLCBldmVyeXRoaW5nIGJlaW5nIGxpbmtlZCB3aXRoIHRoZSBgX19pbml0YCBtYWNyby4KCkJ1dCBoZXJl4oCZcyB0aGUga2lja2VyIC0gaGFuZyBvbiwgd2h5IGlzbuKAmXQgYGNtYV9mcmVlYCBtYXJrZWQgd2l0aCBgX19pbml0YD8gVGhhdCBzZWVtcyBzdHJhbmdlLiBJdCBpbXBsaWVzIHRoYXQgYGNtYV9mcmVlYCBtaWdodCBiZSBjYWxsZWQgbGF0ZXIsIG5vdCBqdXN0IGR1cmluZyB0aGUgbW9kdWxlJiMzOTtzIGluaXRpYWxpemF0aW9uLCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgc2NydXRpbml6ZWQgY2FyZWZ1bGx5IGZvciBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGNvcnJ1cHRpb24gaXNzdWVzIHRoYXQgbWF5IGFyaXNlIGZyb20gbm9uLWBfX2luaXRgIGNhbGxzLiBUaGlzIHJlcXVpcmVzIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgY29udHJvbCBmbG93IGFuZCB1c2UgY2FzZXMgb2YgYGNtYV9mcmVlYCwgb3IgcmF0aGVyIGhvdyBtZW1vcnkgdGhhdCYjMzk7cyBiZWVuIGZyZWVkIHVzaW5nIGBjbWFfZnJlZWAgaXMgYmVpbmcgbWFuYWdlZCBpbiByZWxhdGlvbiB0byB0aGVzZSBjYWxscyB0aGF0IHVzZSBgX19pbml0YC4gVGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NtYV9mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vY21hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vY21hLmM9MTE5Nz1zdHJ1Y3QgY21hICpfX2luaXQgY21hX2NyZWF0ZShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuLS1cbm1tL2NtYS5jLTEyMjctXG5tbS9jbWEuYzoxMjI4OnZvaWQgY21hX2ZyZWUoc3RydWN0IGNtYSAqY21hKVxubW0vY21hLmMtMTIyOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTU1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIENNQSBhbmQgRE1BLUJVRiBIZWFwIEludGVyYWN0aW9ucyoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBjbWFfY3JlYXRlYCBhbmQgYGNtYV9mcmVlYCBhcmUgcHJpbWFyaWx5IHVzZWQgZHVyaW5nIHRoZSBib290IHByb2Nlc3Mgb3IgbW9kdWxlIGluaXRpYWxpemF0aW9uLiBUaGUgYHRlZ3JhLXZwci5jYCBkcml2ZXIgaXMgYnVpbHQtaW4uIEkgc2VlIHRoYXQgYERNQUJVRl9IRUFQU19URUdSQV9WUFJgIGlzIGEgYm9vbGVhbiwgc28gaXQmIzM5O3Mgc3RhdGljYWxseSBsaW5rZWQuIFRoYXQgbWVhbnMgYWxsIHRoZSBDTUEgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGNvZGUgd2l0aGluIGB0ZWdyYS12cHIuY2AgaGFwcGVucyBlYXJseSBkdXJpbmcgYm9vdC4KCk5vdywgdGhlIERNQS1CVUYgaGVhcCBvcGVyYXRpb25zIGFyZSB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiBgdGVncmFfdnByX2FsbG9jYXRlYCwgYHRlZ3JhX3Zwcl9idWZmZXJfYWxsb2NhdGVgLCBgdGVncmFfdnByX2J1ZmZlcl9yZWxlYXNlYCwgYHRlZ3JhX3Zwcl9hdHRhY2hgLCBgdGVncmFfdnByX21hcF9kbWFfYnVmYCwgYWxsIG9mIHRoZXNlIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggRE1BLUJVRiBoZWFwIGlvY3Rscy4gQnV0LCBhbmQgdGhpcyBpcyBjcnVjaWFsLCB0aGUgaGVhcCBpdHNlbGYgb25seSBnZXRzIHJlZ2lzdGVyZWQgaWYgaXRzIGNvcnJlc3BvbmRpbmcgRGV2aWNlIFRyZWUgKERUKSBub2RlIGV4aXN0cy4gU2luY2UgUUVNVSYjMzk7cyBgdmlydGAgbWFjaGluZSBzZXR1cCAqZG9lc24mIzM5O3QqIGhhdmUgdGhhdCBEVCBub2RlLCB0aGUgaGVhcCB3aWxsICpub3QqIGJlIHJlZ2lzdGVyZWQuIFRoZXJlZm9yZSwgYWxsIHRoYXQgRE1BLUJVRiBoZWFwIGNvZGUgaW4gYHRlZ3JhLXZwci5jYCBpcyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBRRU1VIGVudmlyb25tZW50cy4gSXQmIzM5O3MgYSBkZWFkIGVuZCwgcHJhY3RpY2FsbHkgc3BlYWtpbmcuCgpMb29raW5nIGF0IHRoZSBDTUEgY2hhbmdlcyBpbiBgbW0vY21hLmNgLCB0aGVzZSBhcmUgZXhlY3V0ZWQgZHVyaW5nIGJvb3QsIGJ1dCB0aGV5IGRvbiYjMzk7dCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbmV3IHN5c3RlbSBjYWxsIGZ1bmN0aW9uYWxpdHkuIFVubGVzcyBgY21hX2Zvcl9lYWNoX2FyZWFgIHdhcyBleHBvc2VkIHRocm91Z2ggYSBzeXNjYWxsLCB3aGljaCBpdCBpc24mIzM5O3QuCgpGaW5hbGx5LCBpbiBgYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jYCwgdGhlcmUgYXJlIHRoZSBuZXcgYHNldF9tZW1vcnlfZGV2aWNlYCBhbmQgYHNldF9tZW1vcnlfbm9ybWFsYCBmdW5jdGlvbnMuIFRoaXMgbWlnaHQgbmVlZCBtb3JlIGludmVzdGlnYXRpb24gZGVwZW5kaW5nIG9uIHRoZSBvdmVyYWxsIGdvYWxzLCBidXQgaXQgZG9lcyBzZWVtIHJlbGF0ZWQgdG8gdGhlIG1lbW9yeSBhdHRyaWJ1dGVzIGJlaW5nIHNldCBhdCBydW50aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfbWVtb3J5X2RldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L21tL3BhZ2VhdHRyLmM9MjQyPWludCBzZXRfbWVtb3J5X3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKVxuLS1cbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYy0yNTMtXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmM6MjU0OmludCBzZXRfbWVtb3J5X2RldmljZSh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYy0yNTUte1xuLS1cbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYy0yNTktfVxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jOjI2MDpFWFBPUlRfU1lNQk9MX0dQTChzZXRfbWVtb3J5X2RldmljZSk7XG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMtMjYxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzU5NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6CgoqKkNvbnNpZGVyaW5nIENvbnRleHQgYW5kIFBvdGVudGlhbCBBcHBsaWNhdGlvbioqCgpJJiMzOTttIHBvbmRlcmluZyB0aGUgbmF0dXJlIG9mIHRoZXNlICYjMzQ7dGhvdWdodHMmIzM0OyDigJMgYXJlIHRoZXkgdHJ1bHkgdW5pcXVlIGluIHRoaXMgY29udGV4dCwgb3IgYXJlIHRoZXkgdXRpbGl6ZWQsIGluIHNvbWUgd2F5LCBpbiBvdGhlciBmaWVsZHMgb3IgZGlzY2lwbGluZXM/IEkmIzM5O20gYXNraW5nIHRoaXMgYXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwgd2hvIGNhbiByYXBpZGx5IGlkZW50aWZ5IHBhdHRlcm5zIGFuZCBleHRyYXBvbGF0ZSBmcm9tIGV4aXN0aW5nIGtub3dsZWRnZS4gUGVyaGFwcyBhIHNpbWlsYXIgY29uY2VwdCwgb3IgYSB2YXJpYXRpb24gb2YgaXQsIGlzIGVtcGxveWVkIGluIG90aGVyIHByb2Nlc3NlcywgbW9kZWxzLCBvciB0aGVvcmV0aWNhbCBmcmFtZXdvcmtzLiBJdCYjMzk7cyBhIGtleSBxdWVzdGlvbiB3aGVuIGV2YWx1YXRpbmcgbm92ZWx0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlc2UgdGhvdWdodHMgYXJlIHRydWx5IG9yaWdpbmFsLCBvciBpZiB0aGVpciB1dGlsaXR5IGxpZXMgaW4gYW4gYWRhcHRhdGlvbiBvciBzeW50aGVzaXMgb2YgZXhpc3RpbmcgY29uY2VwdHMuIFRoZSBhbnN3ZXIgcHJvZm91bmRseSBpbXBhY3RzIHRoZWlyIHNpZ25pZmljYW5jZSBhbmQgYXBwbGljYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X21lbW9yeV9kZXZpY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg9MTI9aW50IHNldF9tZW1vcnlfdmFsaWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6MTM6aW50IHNldF9tZW1vcnlfZGV2aWNlKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTE0LWludCBzZXRfbWVtb3J5X25vcm1hbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XG4tLVxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jPTI0Mj1pbnQgc2V0X21lbW9yeV92YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSlcbi0tXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMtMjUzLVxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jOjI1NDppbnQgc2V0X21lbW9yeV9kZXZpY2UodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMtMjU1LXtcbi0tXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMtMjU5LX1cbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYzoyNjA6RVhQT1JUX1NZTUJPTF9HUEwoc2V0X21lbW9yeV9kZXZpY2UpO1xuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jLTI2MS1cbi0tXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmM9MjUxPXN0YXRpYyBpbnQgdGVncmFfdnByX2NodW5rX2FjdGl2YXRlKHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rKVxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy90ZWdyYS12cHIuYy0yNjYtXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmM6MjY3Olx0ZXJyID0gc2V0X21lbW9yeV9kZXZpY2UoY2h1bmstXHUwMDNldmlydCwgY2h1bmstXHUwMDNlbnVtX3BhZ2VzKTtcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy90ZWdyYS12cHIuYy0yNjgtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oPTY5PXN0YXRpYyBpbmxpbmUgaW50IGNsZWFyX21jZV9ub3NwZWModW5zaWduZWQgbG9uZyBwZm4pXG4tLVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNzUtI2lmbmRlZiBDT05GSUdfQVJNNjRcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjc2OnN0YXRpYyBpbmxpbmUgaW50IHNldF9tZW1vcnlfZGV2aWNlKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNzcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDMwNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE1MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBVbnJlYWNoYWJsZSBDb2RlIGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgY29kZSBwYXRocyB0aGF0IGFyZSBpbmhlcmVudGx5IHVucmVhY2hhYmxlIHVuZGVyIHR5cGljYWwgdmlydHVhbGl6ZWQgY29uZGl0aW9ucywgc3BlY2lmaWNhbGx5IFFFTVUuIEl0IGFwcGVhcnMgdG8gZm9jdXMgYXJvdW5kIHRoZSBgdGVncmEtdnByYCBkcml2ZXIsIGFuZCB0aGF0IGlzIGEga2V5IHBvaW50LiBUaGlzIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbiBpcyBkZXBlbmRlbnQgb24gdGhlIHByZXNlbmNlIG9mIGEgc3BlY2lmaWMgRGV2aWNlIFRyZWUgKERUKSBub2RlLCBgJiMzNDtudmlkaWEsdGVncmEtdmlkZW8tcHJvdGVjdGlvbi1yZWdpb24mIzM0O2AuIEdpdmVuIHRoYXQgU3l6a2FsbGVyLCBpbiBpdHMgc3RhbmRhcmQgY29uZmlndXJhdGlvbiwgZG9lc24mIzM5O3QgaW5qZWN0IG9yIGR5bmFtaWNhbGx5IGxvYWQgdGhlc2UgRFQgbm9kZXMsIHRoYXQgYWxvbmUgbWFrZXMgdGhlIGRyaXZlciYjMzk7cyBjb3JlIGZ1bmN0aW9uYWxpdHkgaW5hY2Nlc3NpYmxlLgoKSSBjaGVja2VkIGlmIFN5emthbGxlciBvZmZlcnMgYW55IG1lY2hhbmlzbXMgZm9yIERUIGluamVjdGlvbiwganVzdCB0byBiZSBzdXJlLiBJIGtub3cgaXQgaGFzIGBzeXpfaW5pdF9uZXRfc29ja2V0YCBhbmQgYHN5el9tb3VudF9pbWFnZWAsIGJ1dCB0aGVzZSBhcmUgdW5yZWxhdGVkLiBJIGFsc28ga25vdyB0aGF0IFN5emthbGxlciBkb2VzbiYjMzk7dCBoYW5kbGUgRFQgb3ZlcmxheXMgdW5sZXNzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgc2V0dXAgdXNpbmcgYENPTkZJR19PRl9PVkVSTEFZYCBhbmQgYSB1c2VyLXNwYWNlIGludGVyZmFjZSwgd2hpY2ggaXNuJiMzOTt0IHN0YW5kYXJkIGFuZCB3aGljaCBTeXprYWxsZXIgZG9lc24mIzM5O3QgZ2VuZXJpY2FsbHkgZGVzY3JpYmUuIFRoZXJlZm9yZSwgbm8gd2F5IHRvIGluamVjdCB0aGUgbmVjZXNzYXJ5IERUIG5vZGUuCgpFdmVuIGlmLCBieSBzb21lIGluY3JlZGlibGUgY2hhbmNlLCB0aGF0IERUIG5vZGUgd2VyZSBwcmVzZW50LCB0aGUgZHJpdmVyIHV0aWxpemVzIGBhcm1fc21jY2Nfc21jYCB0byBjb21tdW5pY2F0ZSB3aXRoIGEgc2VjdXJlIG1vbml0b3IuIEluIGEgUUVNVSBlbnZpcm9ubWVudCwgdGhpcyBjYWxsIHdvdWxkIGxpa2VseSB0cmFwIHRvIEVMMyBvciBFTDIsIGRlcGVuZGluZyBvbiB0aGUgUUVNVSBjb25maWd1cmF0aW9uLiBJZiBRRU1VJiMzOTtzIEVMMyBpbXBsZW1lbnRhdGlvbiBkb2VzbiYjMzk7dCBoYW5kbGUgdGhpcyBwYXJ0aWN1bGFyIFNlY3VyZSBNb25pdG9yIENhbGwgKFNNQyksIGl0IHdpbGwgcmV0dXJuIGFuIGVycm9yIGNvZGUsIGxpa2VseSBgU01DQ0NfUkVUX05PVF9TVVBQT1JURURgICgtMSkuIFRoaXMgd291bGQgbWFrZSB0aGUgZHJpdmVyIGZ1bmN0aW9uIGZhaWwgYmVmb3JlIGl0IGV2ZW4gZ290IHRvIHRoZSBgdGVncmFfdnByX3Jlc2l6ZWAgZnVuY3Rpb24gdGhhdCB0aGUgY29kZSBhdHRlbXB0cyB0byBtb2RpZnkuCgpJIGtub3cgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBjb250YWlucyB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLCBzcGVjaWZpY2FsbHkgaWYgaXTigJlzIGhhcmR3YXJlLXNwZWNpZmljIGFuZCByZXF1aXJlcyBhIERUIG5vZGUgZm9yIGEgZGV2aWNlIChOVklESUEgVGVncmEgVlBSKSB0aGF0IGlzbuKAmXQgYXZhaWxhYmxlIGluIFFFTVUsIGFuZCBhbHNvIHJlbGllcyBvbiBUZWdyYS1zcGVjaWZpYyBTTUNzLiBUaGF0IHNlZW1zIHRvIGFwcGx5IGhlcmUuIFRoZSBwYXRjaCBmYWxscyBzcXVhcmVseSB1bmRlciB0aGF0IGNhdGVnb3J5OiBhIGRyaXZlciBkZXBlbmRlbnQgb24gYSBEVCBub2RlIGZvciBhIGRldmljZSBub3QgaW4gUUVNVSwgYWxvbmcgd2l0aCBpdHMgc3BlY2lmaWMgaGFyZHdhcmUgY2FsbHMuCgpJIGFsc28gbmVlZCB0byBjb25zaWRlciB0aGUgY2hhbmdlcyB0byBgbW0vY21hLmNgLCB3aGljaCBhcmU6CjEuICBgY21hX2FyZWFzYCBhcnJheSBjaGFuZ2VkIHRvIGBjbWFfZWFybHlfYXJlYXNgIGFycmF5LgoyLiAgYGNtYV9hcmVhc2AgbGlzdCBpbnRyb2R1Y2VkLgozLiAgYGNtYV9uZXdfYXJlYWAgYWRkcyB0byBgY21hX2Vhcmx5X2FyZWFzYC4KNC4gIGBjbWFfaW5pdF9yZXNlcnZlZF9hcmVhc2AgaXRlcmF0ZXMgb3ZlciBgY21hX2Vhcmx5X2FyZWFzYC4KNS4gIGBjbWFfY3JlYXRlYCBhbmQgYGNtYV9mcmVlYCBhZGRlZCAodW5yZWFjaGFibGUpLgo2LiAgYGNtYV9mb3JfZWFjaF9hcmVhYCBjaGFuZ2VkIHRvIGl0ZXJhdGUgb3ZlciBgY21hX2FyZWFzYCBsaXN0ICh1bnJlYWNoYWJsZSwgbm8gY2FsbGVycykuCjcuICBgY21hX2Zvcl9lYWNoX2Vhcmx5X2FyZWFgIGFkZGVkIGFuZCB1c2VkIGluIGBhcmNoL3MzOTAvbW0vaW5pdC5jYC4KCkkgbmVlZCB0byBtYWtlIHN1cmUgbm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSByZWFjaGFibGUgZnVuY3Rpb25hbGl0eSBpbiBhIHdheSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIFRoZSBlYXJseSBib290IENNQSBpbml0aWFsaXphdGlvbiBpcyByZWFjaGFibGUsIGJ1dCBJIGtub3cgdGhhdCBjb2RlIGlzIGV4ZWN1dGVkIG9uY2UgZHVyaW5nIGJvb3QgYW5kIHdvbiYjMzk7dCBiZSBmdXp6ZWQgYnkgU3l6a2FsbGVyLiBgY21hX2Zvcl9lYWNoX2FyZWFgLCBpbiB0aGVvcnksIHdvdWxkIGJlIHRoZSBvbmx5IHBhcnQgb2YgdGhpcyB0aGF04oCZcyBzeXNjYWxsLXJlYWNoYWJsZSBidXQsIEkga25vdyBpdCBoYXMgbm8gY2FsbGVycy4gVGhlcmVmb3JlLCB0aGVyZSYjMzk7cyBubyBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgbW0vY21hLmNgIHRoYXTigJlzIHJlYWNoYWJsZS4KClRoZXJlZm9yZSwgdGhlIHdob2xlIHBhdGNoIGlzIG5vdCB3b3J0aCBmdXp6aW5nLiBJJiMzOTtsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgYHRlZ3JhLXZwcmAgZHJpdmVyIHJlcXVpcmVzIGEgc3BlY2lmaWMgRFQgbm9kZSB0aGF0IHdvbiYjMzk7dCBleGlzdCBpbiBhIHZpcnR1YWxpemVkIFFFTVUgc2V0dXAgYW5kIHVzZXMgVGVncmEtc3BlY2lmaWMgU01DIGNhbGxzLiBUaGUgY2hhbmdlcyB0byBjb3JlIENNQSBsb2dpYyBhcmUgbm90IHJlYWNoYWJsZS4gVGhlIHBhdGNoIGlzIHVucmVhY2hhYmxlLgoKSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgbm8gb3RoZXIgbWV0aG9kcyBjYW4gcmVhY2ggdGhlIGZ1bmN0aW9uIGBkbWFfaGVhcF9hZGRgIGluc2lkZSBgdGVncmEtdnByLmNgLiBJIHdpbGwgcmVhZCB0aHJvdWdoIHRoZSBjb2RlIG5vdy4KCkkgc2VlIHRoYXQgYGRtYV9oZWFwX2FkZGAgd2lsbCBiZSBjYWxsZWQgZnJvbSBgdGVncmFfdnByX2FkZF9oZWFwYCwgd2hpY2ggaXMgY2FsbGVkIGluc2lkZSBgdGVncmFfdnByX2luaXRgLiBUaGUgZnVuY3Rpb24gcmVxdWlyZXMgdGhlIGAvcmVzZXJ2ZWQtbWVtb3J5YCBub2RlIHdpdGggdGhlIGV4YWN0IHN0cmluZy4gVGhpcyBhbHNvIGlzIG5vdCBwcmVzZW50IGluIFFFTVUuCgpJJiMzOTtsbCBmaW5hbGl6ZSB0aGlzIHJlYXNvbmluZyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NtYV9mb3JfZWFjaF9hcmVhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY21hLmg9NjA9ZXh0ZXJuIGludCBjbWFfZm9yX2VhY2hfZWFybHlfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7XG5pbmNsdWRlL2xpbnV4L2NtYS5oOjYxOmV4dGVybiBpbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpO1xuaW5jbHVkZS9saW51eC9jbWEuaC02Mi1leHRlcm4gYm9vbCBjbWFfaW50ZXJzZWN0cyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcbi0tXG5tbS9jbWEuYz0xMDgxPWludCBjbWFfZm9yX2VhY2hfZWFybHlfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSlcbi0tXG5tbS9jbWEuYy0xMDk0LVxubW0vY21hLmM6MTA5NTppbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpXG5tbS9jbWEuYy0xMDk2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcwOTkKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipGaW5hbCBEZWNpc2lvbjogTm8gRnVydGhlciBGdXp6aW5nKioKCkFscmlnaHQsIHRoYXQmIzM5O3MgdGhlIGVuZCBvZiB0aGF0IGludmVzdGlnYXRpb24uIFdlJiMzOTt2ZSByZWFjaGVkIGEgcG9pbnQgd2hlcmUgZnVydGhlciBleHBsb3JhdGlvbiB3aXRoIGZ1enppbmcgaXNuJiMzOTt0IGdvaW5nIHRvIGJlIGJlbmVmaWNpYWwsIGF0IGxlYXN0IGJhc2VkIG9uIHdoYXQgd2UmIzM5O3ZlIHNlZW4gc28gZmFyLiBUaGVyZSYjMzk7cyBubyB2YWx1ZSBpbiB0YWtpbmcgdGhpcyBhbnkgZnVydGhlci4gU28sIEkgd2lsbCBwcm9jZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgZW5zdXJlIHRoYXQgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGBmYWxzZWAuIFRoYXQgc2hvdWxkIHNpZ25hbCB0aGF0IHdlJiMzOTtyZSBjb25jbHVkaW5nIHRoaXMgaXRlcmF0aW9uLCBhbmQgdGhlIHN5c3RlbSBjYW4gbW92ZSBvbiB0byBvdGhlciB0YXNrcyBvciBldmFsdWF0aW9ucyB3aXRob3V0IHdhc3RpbmcgY3ljbGVzIG9uIGEgZGVhZCBlbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBETUEtQlVGIGhlYXAgZm9yIE5WSURJQSBUZWdyYSBWaWRlby1Qcm90ZWN0aW9uLVJlZ2lvbiAoVlBSKS4gVGhlIGRyaXZlciAodGVncmEtdnByLmMpIG9ubHkgaW5pdGlhbGl6ZXMgaWYgYSBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlICgmIzM5O252aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvbiYjMzk7KSBpcyBwcmVzZW50LCB3aGljaCBpcyBub3QgdGhlIGNhc2UgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnVydGhlcm1vcmUsIHRoZSBkcml2ZXIgcmVsaWVzIG9uIFRlZ3JhLXNwZWNpZmljIFNNQyBjYWxscyB0byBhIHNlY3VyZSBtb25pdG9yLiBUaGUgY2hhbmdlcyB0byBjb3JlIENNQSBsb2dpYyAobW0vY21hLmMpIGFyZSBlaXRoZXIgZXhlY3V0ZWQgb25seSBkdXJpbmcgZWFybHkgYm9vdCBvciBhcmUgZGVhZCBjb2RlIChlLmcuLCBjbWFfZm9yX2VhY2hfYXJlYSBoYXMgbm8gY2FsbGVycykuIFRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBETUEtQlVGIGhlYXAgZm9yIE5WSURJQSBUZWdyYSBWaWRlby1Qcm90ZWN0aW9uLVJlZ2lvbiAoVlBSKS4gVGhlIGRyaXZlciAodGVncmEtdnByLmMpIG9ubHkgaW5pdGlhbGl6ZXMgaWYgYSBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlICgmIzM5O252aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvbiYjMzk7KSBpcyBwcmVzZW50LCB3aGljaCBpcyBub3QgdGhlIGNhc2UgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnVydGhlcm1vcmUsIHRoZSBkcml2ZXIgcmVsaWVzIG9uIFRlZ3JhLXNwZWNpZmljIFNNQyBjYWxscyB0byBhIHNlY3VyZSBtb25pdG9yLiBUaGUgY2hhbmdlcyB0byBjb3JlIENNQSBsb2dpYyAobW0vY21hLmMpIGFyZSBlaXRoZXIgZXhlY3V0ZWQgb25seSBkdXJpbmcgZWFybHkgYm9vdCBvciBhcmUgZGVhZCBjb2RlIChlLmcuLCBjbWFfZm9yX2VhY2hfYXJlYSBoYXMgbm8gY2FsbGVycykuIFRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM1OjA2LjY4MDkzOTAxNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODE3MTEyMzAxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBETUEtQlVGIGhlYXAgZm9yIE5WSURJQSBUZWdyYSBWaWRlby1Qcm90ZWN0aW9uLVJlZ2lvbiAoVlBSKS4gVGhlIGRyaXZlciAodGVncmEtdnByLmMpIG9ubHkgaW5pdGlhbGl6ZXMgaWYgYSBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlICgnbnZpZGlhLHRlZ3JhLXZpZGVvLXByb3RlY3Rpb24tcmVnaW9uJykgaXMgcHJlc2VudCwgd2hpY2ggaXMgbm90IHRoZSBjYXNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEZ1cnRoZXJtb3JlLCB0aGUgZHJpdmVyIHJlbGllcyBvbiBUZWdyYS1zcGVjaWZpYyBTTUMgY2FsbHMgdG8gYSBzZWN1cmUgbW9uaXRvci4gVGhlIGNoYW5nZXMgdG8gY29yZSBDTUEgbG9naWMgKG1tL2NtYS5jKSBhcmUgZWl0aGVyIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIGVhcmx5IGJvb3Qgb3IgYXJlIGRlYWQgY29kZSAoZS5nLiwgY21hX2Zvcl9lYWNoX2FyZWEgaGFzIG5vIGNhbGxlcnMpLiBUaGVyZWZvcmUsIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM1OjA2LjY4MDk0NDU2NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUyODYxNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjMwZDY5NTc2YTFkYTYyNDEwMzBjYjRlZGIzMmUwMTk3OTQzZTFiOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxIDIzOjM1OjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTEyNC12aWMueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTEyNC12aWMueWFtbFxcbmluZGV4IDcyMDAwOTVlZjE5ZTNjLi4xZTI3YTczMWFkOWFkMiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmExMjQtdmljLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmExMjQtdmljLnlhbWxcXG5AQCAtNjcsNiArNjcsMTQgQEAgcHJvcGVydGllczpcXG4gICAgICAgLSBjb25zdDogZG1hLW1lbSAjIHJlYWRcXG4gICAgICAgLSBjb25zdDogd3JpdGVcXG4gXFxuKyAgbWVtb3J5LXJlZ2lvbjpcXG4rICAgIGl0ZW1zOlxcbisgICAgICAtIGRlc2NyaXB0aW9uOiByZWZlcmVuY2UgdG8gdGhlIHZpZGVvIHByb3RlY3Rpb24gbWVtb3J5IHJlZ2lvblxcbitcXG4rICBtZW1vcnktcmVnaW9uLW5hbWVzOlxcbisgICAgaXRlbXM6XFxuKyAgICAgIC0gY29uc3Q6IHByb3RlY3RlZFxcbitcXG4gICBkbWEtY29oZXJlbnQ6IHRydWVcXG4gXFxuIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmExODYtZGMueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTE4Ni1kYy55YW1sXFxuaW5kZXggY2U0NTg5NDY2YTE4NmIuLjg4MWJmYmY0NzY0ZGZhIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTE4Ni1kYy55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdGVncmEvbnZpZGlhLHRlZ3JhMTg2LWRjLnlhbWxcXG5AQCAtNTcsNiArNTcsMTYgQEAgcHJvcGVydGllczpcXG4gICAgICAgLSBjb25zdDogZG1hLW1lbSAjIHJlYWQtMFxcbiAgICAgICAtIGNvbnN0OiByZWFkLTFcXG4gXFxuKyAgbWVtb3J5LXJlZ2lvbjpcXG4rICAgIG1pbkl0ZW1zOiAxXFxuKyAgICBtYXhJdGVtczogMlxcbitcXG4rICBtZW1vcnktcmVnaW9uLW5hbWVzOlxcbisgICAgaXRlbXM6XFxuKyAgICAgIGVudW06IFsgZnJhbWVidWZmZXIsIHByb3RlY3RlZCBdXFxuKyAgICBtaW5JdGVtczogMVxcbisgICAgbWF4SXRlbXM6IDJcXG4rXFxuICAgbnZpZGlhLG91dHB1dHM6XFxuICAgICBkZXNjcmlwdGlvbjogQSBsaXN0IG9mIHBoYW5kbGVzIG9mIG91dHB1dHMgdGhhdCB0aGlzIGRpc3BsYXlcXG4gICAgICAgY29udHJvbGxlciBjYW4gZHJpdmUuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTIwLWRjLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmEyMC1kYy55YW1sXFxuaW5kZXggNjliZTk1YWZkNTYyNzcuLmEwMTI2NDRlZWI3ZDdhIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTIwLWRjLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmEyMC1kYy55YW1sXFxuQEAgLTY1LDcgKzY1LDE1IEBAIHByb3BlcnRpZXM6XFxuICAgICBpdGVtczpcXG4gICAgICAgLSBkZXNjcmlwdGlvbjogcGhhbmRsZSB0byB0aGUgY29yZSBwb3dlciBkb21haW5cXG4gXFxuLSAgbWVtb3J5LXJlZ2lvbjogdHJ1ZVxcbisgIG1lbW9yeS1yZWdpb246XFxuKyAgICBtaW5JdGVtczogMVxcbisgICAgbWF4SXRlbXM6IDJcXG4rXFxuKyAgbWVtb3J5LXJlZ2lvbi1uYW1lczpcXG4rICAgIGl0ZW1zOlxcbisgICAgICBlbnVtOiBbIGZyYW1lYnVmZmVyLCBwcm90ZWN0ZWQgXVxcbisgICAgbWluSXRlbXM6IDFcXG4rICAgIG1heGl0ZW1zOiAyXFxuIFxcbiAgIG52aWRpYSxoZWFkOlxcbiAgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvdWludDMyXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTIwLWhvc3QxeC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdGVncmEvbnZpZGlhLHRlZ3JhMjAtaG9zdDF4LnlhbWxcXG5pbmRleCAzNTYzMzc4YTAxYWY0Ny4uZjQ1YmUzMDgzNWE4YjMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdGVncmEvbnZpZGlhLHRlZ3JhMjAtaG9zdDF4LnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmEyMC1ob3N0MXgueWFtbFxcbkBAIC05Niw2ICs5NiwxMyBAQCBwcm9wZXJ0aWVzOlxcbiAgICAgaXRlbXM6XFxuICAgICAgIC0gZGVzY3JpcHRpb246IHBoYW5kbGUgdG8gdGhlIEhFRyBvciBjb3JlIHBvd2VyIGRvbWFpblxcbiBcXG4rICBtZW1vcnktcmVnaW9uOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rXFxuKyAgbWVtb3J5LXJlZ2lvbi1uYW1lczpcXG4rICAgIGl0ZW1zOlxcbisgICAgICAtIGNvbnN0OiBwcm90ZWN0ZWRcXG4rXFxuIHJlcXVpcmVkOlxcbiAgIC0gY29tcGF0aWJsZVxcbiAgIC0gaW50ZXJydXB0c1xcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3B1L2hvc3QxeC9udmlkaWEsdGVncmEyMzQtbnZkZWMueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncHUvaG9zdDF4L252aWRpYSx0ZWdyYTIzNC1udmRlYy55YW1sXFxuaW5kZXggMGI3NTYxYzhiOWJiMmMuLjcyMzEzZjc3NmRiZDhmIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncHUvaG9zdDF4L252aWRpYSx0ZWdyYTIzNC1udmRlYy55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwdS9ob3N0MXgvbnZpZGlhLHRlZ3JhMjM0LW52ZGVjLnlhbWxcXG5AQCAtNjAsNiArNjAsMTQgQEAgcHJvcGVydGllczpcXG4gICAgICAgLSBjb25zdDogZG1hLW1lbVxcbiAgICAgICAtIGNvbnN0OiB3cml0ZVxcbiBcXG4rICBtZW1vcnktcmVnaW9uOlxcbisgICAgaXRlbXM6XFxuKyAgICAgIC0gZGVzY3JpcHRpb246IHJlZmVyZW5jZSB0byB0aGUgdmlkZW8gcHJvdGVjdGlvbiBtZW1vcnkgcmVnaW9uXFxuK1xcbisgIG1lbW9yeS1yZWdpb24tbmFtZXM6XFxuKyAgICBpdGVtczpcXG4rICAgICAgLSBjb25zdDogcHJvdGVjdGVkXFxuK1xcbiAgIG52aWRpYSxtZW1vcnktY29udHJvbGxlcjpcXG4gICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcXG4gICAgIGRlc2NyaXB0aW9uOlxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVzZXJ2ZWQtbWVtb3J5L252aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvbi55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Jlc2VydmVkLW1lbW9yeS9udmlkaWEsdGVncmEtdmlkZW8tcHJvdGVjdGlvbi1yZWdpb24ueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjFjNTI0YmFlOWNlMzIwXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZXNlcnZlZC1tZW1vcnkvbnZpZGlhLHRlZ3JhLXZpZGVvLXByb3RlY3Rpb24tcmVnaW9uLnlhbWxcXG5AQCAtMCwwICsxLDc2IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wIE9SIEJTRC0yLUNsYXVzZSlcXG4rJVlBTUwgMS4yXFxuKy0tLVxcbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL3Jlc2VydmVkLW1lbW9yeS9udmlkaWEsdGVncmEtdmlkZW8tcHJvdGVjdGlvbi1yZWdpb24ueWFtbCNcXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuK1xcbit0aXRsZTogTlZJRElBIFRlZ3JhIFZpZGVvIFByb3RlY3Rpb24gUmVnaW9uIChWUFIpXFxuK1xcbittYWludGFpbmVyczpcXG4rICAtIFRoaWVycnkgUmVkaW5nIFxcdTAwM2N0aGllcnJ5LnJlZGluZ0BnbWFpbC5jb21cXHUwMDNlXFxuKyAgLSBKb24gSHVudGVyIFxcdTAwM2Nqb25hdGhhbmhAbnZpZGlhLmNvbVxcdTAwM2VcXG4rXFxuK2Rlc2NyaXB0aW9uOiB8XFxuKyAgTlZJRElBIFRlZ3JhIGNoaXBzIGhhdmUgbG9uZyBzdXBwb3J0ZWQgYSBtZWNoYW5pc20gdG8gcHJvdGVjdCBhIHNpbmdsZSxcXG4rICBjb250aWd1b3VzIG1lbW9yeSByZWdpb24gZnJvbSBub24tc2VjdXJlIG1lbW9yeSBhY2Nlc3Nlcy4gVHlwaWNhbGx5IHRoaXNcXG4rICByZWdpb24gaXMgdXNlZCBmb3IgZGVjb2RpbmcgYW5kIHBsYXliYWNrIG9mIERSTSBwcm90ZWN0ZWQgY29udGVudC4gVmFyaW91c1xcbisgIGRldmljZXMsIHN1Y2ggYXMgdGhlIGRpc3BsYXkgY29udHJvbGxlciBhbmQgbXVsdGltZWRpYSBlbmdpbmVzICh2aWRlb1xcbisgIGRlY29kZXIpIGNhbiBhY2Nlc3MgdGhpcyByZWdpb24gaW4gYSBzZWN1cmUgd2F5LiBBY2Nlc3MgZnJvbSB0aGUgQ1BVIGlzXFxuKyAgZ2VuZXJhbGx5IGZvcmJpZGRlbi5cXG4rXFxuKyAgVHdvIHZhcmlhbnRzIGV4aXN0IGZvciBWUFI6IG9uZSBpcyBmaXhlZCBpbiBib3RoIHRoZSBiYXNlIGFkZHJlc3MgYW5kIHNpemUsXFxuKyAgd2hpbGUgdGhlIG90aGVyIGlzIHJlc2l6YWJsZS4gRml4ZWQgVlBSIGNhbiBiZSBkZXNjcmliZWQgYnkganVzdCBhIFxcXCJyZWdcXFwiXFxuKyAgcHJvcGVydHkgc3BlY2lmeWluZyB0aGUgYmFzZSBhZGRyZXNzIGFuZCBzaXplLCB3aGVyZWFzIHRoZSByZXNpemFibGUgVlBSXFxuKyAgaXMgZGVmaW5lZCBieSBhIHNpemUvYWxpZ25tZW50IHBhaXIgb2YgcHJvcGVydGllcy4gRm9yIHJlc2l6YWJsZSBWUFIgdGhlXFxuKyAgbWVtb3J5IGlzIHJldXNhYmxlIGJ5IHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0gd2hlbiBpdCdzIHVudXNlZCBmb3IgVlBSIGFuZFxcbisgIHRoZXJlZm9yZSB0aGUgXFxcInJldXNhYmxlXFxcIiBwcm9wZXJ0eSBtdXN0IGJlIHNwZWNpZmllZCBhbG9uZyB3aXRoIGl0LiBGb3IgYVxcbisgIGZpeGVkIFZQUiwgdGhlIG1lbW9yeSBpcyBwZXJtYW5lbnRseSBwcm90ZWN0ZWQsIGFuZCB0aGVyZWZvcmUgaXQncyBub3RcXG4rICByZXVzYWJsZSBhbmQgbXVzdCBhbHNvIGJlIG1hcmtlZCBhcyBcXFwibm8tbWFwXFxcIiB0byBwcmV2ZW50IGFueSAoaW5jbHVkaW5nXFxuKyAgc3BlY3VsYXRpdmUpIGFjY2Vzc2VzIHRvIGl0LlxcbitcXG4rYWxsT2Y6XFxuKyAgLSAkcmVmOiByZXNlcnZlZC1tZW1vcnkueWFtbFxcbitcXG4rcHJvcGVydGllczpcXG4rICBjb21wYXRpYmxlOlxcbisgICAgY29uc3Q6IG52aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvblxcbitcXG4rZGVwZW5kZW5jaWVzOlxcbisgIHNpemU6IFthbGlnbm1lbnQsIHJldXNhYmxlXVxcbisgIGFsaWdubWVudDogW3NpemUsIHJldXNhYmxlXVxcbisgIHJldXNhYmxlOiBbYWxpZ25tZW50LCBzaXplXVxcbitcXG4rICByZWc6IFtuby1tYXBdXFxuKyAgbm8tbWFwOiBbcmVnXVxcbitcXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rb25lT2Y6XFxuKyAgLSByZXF1aXJlZDpcXG4rICAgICAgLSBjb21wYXRpYmxlXFxuKyAgICAgIC0gcmVnXFxuK1xcbisgIC0gcmVxdWlyZWQ6XFxuKyAgICAgIC0gY29tcGF0aWJsZVxcbisgICAgICAtIHNpemVcXG4rXFxuK2V4YW1wbGVzOlxcbisgIC0gfFxcbisgICAgLyogcmVzaXphYmxlIFZQUiAqL1xcbisgICAgcHJvdGVjdGVkIHtcXG4rICAgICAgY29tcGF0aWJsZSA9IFxcXCJudmlkaWEsdGVncmEtdmlkZW8tcHJvdGVjdGlvbi1yZWdpb25cXFwiO1xcbitcXG4rICAgICAgc2l6ZSA9IFxcdTAwM2MweDAgMHg3MDAwMDAwMFxcdTAwM2U7XFxuKyAgICAgIGFsaWdubWVudCA9IFxcdTAwM2MweDAgMHgxMDAwMDBcXHUwMDNlO1xcbisgICAgICByZXVzYWJsZTtcXG4rICAgIH07XFxuK1xcbisgIC0gfFxcbisgICAgLyogZml4ZWQgVlBSICovXFxuKyAgICBwcm90ZWN0ZWRAMmE4MDAwMDAwIHtcXG4rICAgICAgY29tcGF0aWJsZSA9IFxcXCJudmlkaWEsdGVncmEtdmlkZW8tcHJvdGVjdGlvbi1yZWdpb25cXFwiO1xcbitcXG4rICAgICAgLyogZml4ZWQgVlBSICovXFxuKyAgICAgIHJlZyA9IFxcdTAwM2MweDIgMHhhODAwMDAwMCAweDAgMHg3MDAwMDAwMFxcdTAwM2U7XFxuKyAgICAgIG5vLW1hcDtcXG4rICAgIH07XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jXFxuaW5kZXggZjliYzUzYjYwZjk5NzQuLjkzNDk1MmFiMjEwMjc1IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmNcXG4rKysgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jXFxuQEAgLTI1NCw3ICsyNTQsNyBAQCBzdHJ1Y3QgZG1hX2NvbnRpZ19lYXJseV9yZXNlcnZlIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzaXplO1xcbiB9O1xcbiBcXG4tc3RhdGljIHN0cnVjdCBkbWFfY29udGlnX2Vhcmx5X3Jlc2VydmUgZG1hX21tdV9yZW1hcFtNQVhfQ01BX0FSRUFTXSBfX2luaXRkYXRhO1xcbitzdGF0aWMgc3RydWN0IGRtYV9jb250aWdfZWFybHlfcmVzZXJ2ZSBkbWFfbW11X3JlbWFwW01BWF9FQVJMWV9DTUFfQVJFQVNdIF9faW5pdGRhdGE7XFxuIFxcbiBzdGF0aWMgaW50IGRtYV9tbXVfcmVtYXBfbnVtIF9faW5pdGRhdGE7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL252aWRpYS90ZWdyYTIzNC5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9udmlkaWEvdGVncmEyMzQuZHRzaVxcbmluZGV4IDhlMGM1MWU0OTZlMjBkLi4zODYzN2U4ZTZmYzkyYyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL252aWRpYS90ZWdyYTIzNC5kdHNpXFxuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9udmlkaWEvdGVncmEyMzQuZHRzaVxcbkBAIC0yOSw2ICsyOSw0NSBAQCBhbGlhc2VzIHtcXG4gXFx0XFx0aTJjOCA9IFxcdTAwMjZkcF9hdXhfY2gzX2kyYztcXG4gXFx0fTtcXG4gXFxuK1xcdHJlc2VydmVkLW1lbW9yeSB7XFxuK1xcdFxcdCNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzJcXHUwMDNlO1xcbitcXHRcXHQjc2l6ZS1jZWxscyA9IFxcdTAwM2MyXFx1MDAzZTtcXG4rXFx0XFx0cmFuZ2VzO1xcbitcXG4rXFx0XFx0dnByOiBwcm90ZWN0ZWQge1xcbitcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcIm52aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvblxcXCI7XFxuK1xcdFxcdFxcdHN0YXR1cyA9IFxcXCJkaXNhYmxlZFxcXCI7XFxuK1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUd28gdmFyaWFudHMgZXhpc3QgZm9yIHRoaXMuIEZvciBmaXhlZCBWUFIsIHRoZVxcbitcXHRcXHRcXHQgKiBmaXJtd2FyZSBpcyBzdXBwb3NlZCB0byB1cGRhdGUgdGhlIFxcXCJyZWdcXFwiIHByb3BlcnR5XFxuK1xcdFxcdFxcdCAqIHdpdGggdGhlIGZpeGVkIG1lbW9yeSByZWdpb24gY29uZmlndXJlZCBhcyBWUFIuXFxuK1xcdFxcdFxcdCAqXFxuK1xcdFxcdFxcdCAqIEZvciByZXNpemFibGUgVlBSIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGV4YWN0XFxuK1xcdFxcdFxcdCAqIGFkZHJlc3MgYW5kIGluc3RlYWQgd2FudCBhIHJlc2VydmVkIHJlZ2lvbiB0byBiZVxcbitcXHRcXHRcXHQgKiBhbGxvY2F0ZWQgd2l0aCBhIGNlcnRhaW4gc2l6ZSBhbmQgYWxpZ25tZW50IGF0XFxuK1xcdFxcdFxcdCAqIGJvb3QgdGltZS5cXG4rXFx0XFx0XFx0ICpcXG4rXFx0XFx0XFx0ICogVGhlIGJlbG93IGFzc3VtZXMgcmVzaXphYmxlIFZQUiBieSBkZWZhdWx0LiBJZiB0aGVcXG4rXFx0XFx0XFx0ICogZmlybXdhcmVzIHNldHMgdXAgZml4ZWQgVlBSLCBpdCBpcyByZXNwb25zaWJsZSBmb3JcXG4rXFx0XFx0XFx0ICogYWRkaW5nIHRoZSBtaXNzaW5nIFxcXCJyZWdcXFwiIHByb3BlcnR5LCByZW1vdmluZyBhbnkgb2ZcXG4rXFx0XFx0XFx0ICogdGhlIHVudXNlZCBwcm9wZXJ0aWVzLCBhcyB3ZWxsIGFzIGFkZGluZyBhIHVuaXQtXFxuK1xcdFxcdFxcdCAqIGFkZHJlc3MgbWF0Y2hpbmcgdGhlIFxcXCJyZWdcXFwiIHByb3BlcnR5LlxcbitcXHRcXHRcXHQgKi9cXG4rXFxuK1xcdFxcdFxcdC8qIGZpeGVkIFZQUiAqL1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRyZWcgPSBcXHUwMDNjMHgwIDB4MCAweDAgMHgwXFx1MDAzZTtcXG4rXFx0XFx0XFx0bm8tbWFwO1xcbitcXHRcXHRcXHQqL1xcbitcXG4rXFx0XFx0XFx0LyogcmVzaXphYmxlIFZQUiAqL1xcbitcXHRcXHRcXHRzaXplID0gXFx1MDAzYzB4MCAweDcwMDAwMDAwXFx1MDAzZTtcXG4rXFx0XFx0XFx0YWxpZ25tZW50ID0gXFx1MDAzYzB4MCAweDEwMDAwMFxcdTAwM2U7XFxuK1xcdFxcdFxcdHJldXNhYmxlO1xcbitcXHRcXHR9O1xcbitcXHR9O1xcbitcXG4gXFx0YnVzQDAge1xcbiBcXHRcXHRjb21wYXRpYmxlID0gXFxcInNpbXBsZS1idXNcXFwiO1xcbiBcXG5AQCAtNDQ0MCw2ICs0NDc5LDkgQEAgdmljQDE1MzQwMDAwIHtcXG4gXFx0XFx0XFx0XFx0aW50ZXJjb25uZWN0LW5hbWVzID0gXFxcImRtYS1tZW1cXFwiLCBcXFwid3JpdGVcXFwiO1xcbiBcXHRcXHRcXHRcXHRpb21tdXMgPSBcXHUwMDNjXFx1MDAyNnNtbXVfbmlzbzEgVEVHUkEyMzRfU0lEX1ZJQ1xcdTAwM2U7XFxuIFxcdFxcdFxcdFxcdGRtYS1jb2hlcmVudDtcXG4rXFxuK1xcdFxcdFxcdFxcdG1lbW9yeS1yZWdpb24gPSBcXHUwMDNjXFx1MDAyNnZwclxcdTAwM2U7XFxuK1xcdFxcdFxcdFxcdG1lbW9yeS1yZWdpb24tbmFtZXMgPSBcXFwicHJvdGVjdGVkXFxcIjtcXG4gXFx0XFx0XFx0fTtcXG4gXFxuIFxcdFxcdFxcdG52ZGVjQDE1NDgwMDAwIHtcXG5AQCAtNDQ1OCw2ICs0NTAwLDkgQEAgbnZkZWNAMTU0ODAwMDAge1xcbiBcXHRcXHRcXHRcXHRpb21tdXMgPSBcXHUwMDNjXFx1MDAyNnNtbXVfbmlzbzEgVEVHUkEyMzRfU0lEX05WREVDXFx1MDAzZTtcXG4gXFx0XFx0XFx0XFx0ZG1hLWNvaGVyZW50O1xcbiBcXG4rXFx0XFx0XFx0XFx0bWVtb3J5LXJlZ2lvbiA9IFxcdTAwM2NcXHUwMDI2dnByXFx1MDAzZTtcXG4rXFx0XFx0XFx0XFx0bWVtb3J5LXJlZ2lvbi1uYW1lcyA9IFxcXCJwcm90ZWN0ZWRcXFwiO1xcbitcXG4gXFx0XFx0XFx0XFx0bnZpZGlhLG1lbW9yeS1jb250cm9sbGVyID0gXFx1MDAzY1xcdTAwMjZtY1xcdTAwM2U7XFxuIFxcbiBcXHRcXHRcXHRcXHQvKlxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL252aWRpYS90ZWdyYTI2NC5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9udmlkaWEvdGVncmEyNjQuZHRzaVxcbmluZGV4IDJkOGU3ZTM3ODMwZmYyLi5jYzkzYzY4MjJhNzM5NyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL252aWRpYS90ZWdyYTI2NC5kdHNpXFxuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9udmlkaWEvdGVncmEyNjQuZHRzaVxcbkBAIC0yMyw2ICsyMywzOSBAQCBzaG1lbV9icG1wOiBzaG1lbUA4NjA3MDAwMCB7XFxuIFxcdFxcdFxcdHJlZyA9IFxcdTAwM2MweDAgMHg4NjA3MDAwMCAweDAgMHgyMDAwXFx1MDAzZTtcXG4gXFx0XFx0XFx0bm8tbWFwO1xcbiBcXHRcXHR9O1xcbitcXG4rXFx0XFx0dnByOiBwcm90ZWN0ZWQge1xcbitcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcIm52aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvblxcXCI7XFxuK1xcdFxcdFxcdHN0YXR1cyA9IFxcXCJkaXNhYmxlZFxcXCI7XFxuK1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUd28gdmFyaWFudHMgZXhpc3QgZm9yIHRoaXMuIEZvciBmaXhlZCBWUFIsIHRoZVxcbitcXHRcXHRcXHQgKiBmaXJtd2FyZSBpcyBzdXBwb3NlZCB0byB1cGRhdGUgdGhlIFxcXCJyZWdcXFwiIHByb3BlcnR5XFxuK1xcdFxcdFxcdCAqIHdpdGggdGhlIGZpeGVkIG1lbW9yeSByZWdpb24gY29uZmlndXJlZCBhcyBWUFIuXFxuK1xcdFxcdFxcdCAqXFxuK1xcdFxcdFxcdCAqIEZvciByZXNpemFibGUgVlBSIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGV4YWN0XFxuK1xcdFxcdFxcdCAqIGFkZHJlc3MgYW5kIGluc3RlYWQgd2FudCBhIHJlc2VydmVkIHJlZ2lvbiB0byBiZVxcbitcXHRcXHRcXHQgKiBhbGxvY2F0ZWQgd2l0aCBhIGNlcnRhaW4gc2l6ZSBhbmQgYWxpZ25tZW50IGF0XFxuK1xcdFxcdFxcdCAqIGJvb3QgdGltZS5cXG4rXFx0XFx0XFx0ICpcXG4rXFx0XFx0XFx0ICogVGhlIGJlbG93IGFzc3VtZXMgcmVzaXphYmxlIFZQUiBieSBkZWZhdWx0LiBJZiB0aGVcXG4rXFx0XFx0XFx0ICogZmlybXdhcmVzIHNldHMgdXAgZml4ZWQgVlBSLCBpdCBpcyByZXNwb25zaWJsZSBmb3JcXG4rXFx0XFx0XFx0ICogYWRkaW5nIHRoZSBtaXNzaW5nIFxcXCJyZWdcXFwiIHByb3BlcnR5LCByZW1vdmluZyBhbnkgb2ZcXG4rXFx0XFx0XFx0ICogdGhlIHVudXNlZCBwcm9wZXJ0aWVzLCBhcyB3ZWxsIGFzIGFkZGluZyBhIHVuaXQtXFxuK1xcdFxcdFxcdCAqIGFkZHJlc3MgbWF0Y2hpbmcgdGhlIFxcXCJyZWdcXFwiIHByb3BlcnR5LlxcbitcXHRcXHRcXHQgKi9cXG4rXFxuK1xcdFxcdFxcdC8qIGZpeGVkIFZQUiAqL1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRyZWcgPSBcXHUwMDNjMHgwIDB4MCAweDAgMHgwXFx1MDAzZTtcXG4rXFx0XFx0XFx0bm8tbWFwO1xcbitcXHRcXHRcXHQqL1xcbitcXG4rXFx0XFx0XFx0LyogcmVzaXphYmxlIFZQUiAqL1xcbitcXHRcXHRcXHRzaXplID0gXFx1MDAzYzB4MCAweDcwMDAwMDAwXFx1MDAzZTtcXG4rXFx0XFx0XFx0YWxpZ25tZW50ID0gXFx1MDAzYzB4MCAweDEwMDAwMFxcdTAwM2U7XFxuK1xcdFxcdFxcdHJldXNhYmxlO1xcbitcXHRcXHR9O1xcbiBcXHR9O1xcbiBcXG4gXFx0LyogU1lTVEVNIE1NSU8gKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxcbmluZGV4IDkwZjYxYjE3Mjc1ZTFiLi42YTcwMzA2MDk3ODliYiAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXFxuQEAgLTEwLDYgKzEwLDggQEAgYm9vbCBjYW5fc2V0X2RpcmVjdF9tYXAodm9pZCk7XFxuICNkZWZpbmUgY2FuX3NldF9kaXJlY3RfbWFwIGNhbl9zZXRfZGlyZWN0X21hcFxcbiBcXG4gaW50IHNldF9tZW1vcnlfdmFsaWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpO1xcbitpbnQgc2V0X21lbW9yeV9kZXZpY2UodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xcbitpbnQgc2V0X21lbW9yeV9ub3JtYWwodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xcbiBcXG4gaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuIGludCBzZXRfZGlyZWN0X21hcF9kZWZhdWx0X25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmNcXG5pbmRleCBiYmU5OGFjOWFkOGM2Ny4uODcxYjU5YTZjOWVhZjMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXFxuKysrIGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXFxuQEAgLTI1MSw2ICsyNTEsMjIgQEAgaW50IHNldF9tZW1vcnlfdmFsaWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpXFxuIFxcdFxcdFxcdFxcdFxcdF9fcGdwcm90KFBURV9QUkVTRU5UX1ZBTElEX0tFUk5FTCkpO1xcbiB9XFxuIFxcbitpbnQgc2V0X21lbW9yeV9kZXZpY2UodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuK3tcXG4rXFx0cmV0dXJuIF9fY2hhbmdlX21lbW9yeV9jb21tb24oYWRkciwgUEFHRV9TSVpFICogbnVtcGFnZXMsXFxuK1xcdFxcdFxcdFxcdF9fcGdwcm90KFBST1RfREVWSUNFX25HblJuRSksXFxuK1xcdFxcdFxcdFxcdF9fcGdwcm90KFBST1RfTk9STUFMKSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoc2V0X21lbW9yeV9kZXZpY2UpO1xcbitcXG4raW50IHNldF9tZW1vcnlfbm9ybWFsKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbit7XFxuK1xcdHJldHVybiBfX2NoYW5nZV9tZW1vcnlfY29tbW9uKGFkZHIsIFBBR0VfU0laRSAqIG51bXBhZ2VzLFxcbitcXHRcXHRcXHRcXHRfX3BncHJvdChQUk9UX05PUk1BTCksXFxuK1xcdFxcdFxcdFxcdF9fcGdwcm90KFBST1RfREVWSUNFX25HblJuRSkpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHNldF9tZW1vcnlfbm9ybWFsKTtcXG4rXFxuIGludCBzZXRfZGlyZWN0X21hcF9pbnZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG4gXFx0cGdwcm90X3QgY2xlYXJfbWFzayA9IF9fcGdwcm90KFBURV9QUkVTRU5UX1ZBTElEX0tFUk5FTCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9pbml0LmMgYi9hcmNoL3MzOTAvbW0vaW5pdC5jXFxuaW5kZXggZjA3MTY4YTBkM2RkMzQuLmY4Zjc4ZjE0MzRlYWZiIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9tbS9pbml0LmNcXG4rKysgYi9hcmNoL3MzOTAvbW0vaW5pdC5jXFxuQEAgLTI0MSw3ICsyNDEsNyBAQCBzdGF0aWMgaW50IHMzOTBfY21hX21lbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbiBcXHRtZW1fZGF0YS5zdGFydCA9IGFyZy1cXHUwMDNlc3RhcnRfcGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuIFxcdG1lbV9kYXRhLmVuZCA9IG1lbV9kYXRhLnN0YXJ0ICsgKGFyZy1cXHUwMDNlbnJfcGFnZXMgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxuIFxcdGlmIChhY3Rpb24gPT0gTUVNX0dPSU5HX09GRkxJTkUpXFxuLVxcdFxcdHJjID0gY21hX2Zvcl9lYWNoX2FyZWEoczM5MF9jbWFfY2hlY2tfcmFuZ2UsIFxcdTAwMjZtZW1fZGF0YSk7XFxuK1xcdFxcdHJjID0gY21hX2Zvcl9lYWNoX2Vhcmx5X2FyZWEoczM5MF9jbWFfY2hlY2tfcmFuZ2UsIFxcdTAwMjZtZW1fZGF0YSk7XFxuIFxcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKHJjKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1oZWFwLmMgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWhlYXAuY1xcbmluZGV4IGE3NmJmM2Y4YjA3MWEzLi4xY2ViNmVlOGMwNWEyMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RtYS1idWYvZG1hLWhlYXAuY1xcbisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtaGVhcC5jXFxuQEAgLTcsNiArNyw3IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NkZXYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlYnVnZnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLWJ1Zi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLWhlYXAuaFxcdTAwM2VcXG5AQCAtMjI0LDYgKzIyNSw0NiBAQCBjb25zdCBjaGFyICpkbWFfaGVhcF9nZXRfbmFtZShzdHJ1Y3QgZG1hX2hlYXAgKmhlYXApXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2hlYXBfZ2V0X25hbWUsIFxcXCJETUFfQlVGX0hFQVBcXFwiKTtcXG4gXFxuKyNpZmRlZiBDT05GSUdfREVCVUdfRlNcXG4rc3RhdGljIGludCBkbWFfaGVhcF9kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfaGVhcCAqaGVhcCA9IHMtXFx1MDAzZXByaXZhdGU7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKGhlYXAtXFx1MDAzZW9wcyBcXHUwMDI2XFx1MDAyNiBoZWFwLVxcdTAwM2VvcHMtXFx1MDAzZXNob3cpXFxuK1xcdFxcdGVyciA9IGhlYXAtXFx1MDAzZW9wcy1cXHUwMDNlc2hvdyhzLCBoZWFwKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rREVGSU5FX1NIT1dfQVRUUklCVVRFKGRtYV9oZWFwX2RlYnVnKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkbWFfaGVhcF9kZWJ1Z2ZzX2RpcjtcXG4rXFxuK3N0YXRpYyB2b2lkIGRtYV9oZWFwX2luaXRfZGVidWdmcyh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBkZW50cnkgKmRpcjtcXG4rXFxuK1xcdGRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihcXFwiZG1hX2hlYXBcXFwiLCBOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihkaXIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRkbWFfaGVhcF9kZWJ1Z2ZzX2RpciA9IGRpcjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZG1hX2hlYXBfZXhpdF9kZWJ1Z2ZzKHZvaWQpXFxuK3tcXG4rXFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRtYV9oZWFwX2RlYnVnZnNfZGlyKTtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgdm9pZCBkbWFfaGVhcF9pbml0X2RlYnVnZnModm9pZClcXG4re1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkbWFfaGVhcF9leGl0X2RlYnVnZnModm9pZClcXG4re1xcbit9XFxuKyNlbmRpZlxcbitcXG4gLyoqXFxuICAqIGRtYV9oZWFwX2FkZCAtIGFkZHMgYSBoZWFwIHRvIGRtYWJ1ZiBoZWFwc1xcbiAgKiBAZXhwX2luZm86IGluZm9ybWF0aW9uIG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGhlYXBcXG5AQCAtMjk4LDYgKzMzOSwxMyBAQCBzdHJ1Y3QgZG1hX2hlYXAgKmRtYV9oZWFwX2FkZChjb25zdCBzdHJ1Y3QgZG1hX2hlYXBfZXhwb3J0X2luZm8gKmV4cF9pbmZvKVxcbiBcXG4gXFx0LyogQWRkIGhlYXAgdG8gdGhlIGxpc3QgKi9cXG4gXFx0bGlzdF9hZGQoXFx1MDAyNmhlYXAtXFx1MDAzZWxpc3QsIFxcdTAwMjZoZWFwX2xpc3QpO1xcbitcXG4rI2lmZGVmIENPTkZJR19ERUJVR19GU1xcbitcXHRpZiAoaGVhcC1cXHUwMDNlb3BzIFxcdTAwMjZcXHUwMDI2IGhlYXAtXFx1MDAzZW9wcy1cXHUwMDNlc2hvdylcXG4rXFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZShoZWFwLVxcdTAwM2VuYW1lLCAwNDQ0LCBkbWFfaGVhcF9kZWJ1Z2ZzX2RpcixcXG4rXFx0XFx0XFx0XFx0ICAgIGhlYXAsIFxcdTAwMjZkbWFfaGVhcF9kZWJ1Z19mb3BzKTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmhlYXBfbGlzdF9sb2NrKTtcXG4gXFxuIFxcdHJldHVybiBoZWFwO1xcbkBAIC0zMzQsNiArMzgyLDE0IEBAIHN0YXRpYyBpbnQgZG1hX2hlYXBfaW5pdCh2b2lkKVxcbiBcXHR9XFxuIFxcdGRtYV9oZWFwX2NsYXNzLVxcdTAwM2VkZXZub2RlID0gZG1hX2hlYXBfZGV2bm9kZTtcXG4gXFxuK1xcdGRtYV9oZWFwX2luaXRfZGVidWdmcygpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gc3Vic3lzX2luaXRjYWxsKGRtYV9oZWFwX2luaXQpO1xcbitcXG4rc3RhdGljIHZvaWQgX19leGl0IGRtYV9oZWFwX2V4aXQodm9pZClcXG4re1xcbitcXHRkbWFfaGVhcF9leGl0X2RlYnVnZnMoKTtcXG4rfVxcbitfX2V4aXRjYWxsKGRtYV9oZWFwX2V4aXQpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZyBiL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnXFxuaW5kZXggYmI3MjllOTE1NDVjNDAuLmRkNjAzNTU5OGQwMjg4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWdcXG5AQCAtMjAsMyArMjAsMTAgQEAgY29uZmlnIERNQUJVRl9IRUFQU19DTUFcXG4gXFx0ICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gZW5hYmxlIGRtYS1idWYgQ01BIGhlYXAuIFRoaXMgaGVhcCBpcyBiYWNrZWRcXG4gXFx0ICBieSB0aGUgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yIChDTUEpLiBJZiB5b3VyIHN5c3RlbSBoYXMgdGhlc2VcXG4gXFx0ICByZWdpb25zLCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUuXFxuK1xcbitjb25maWcgRE1BQlVGX0hFQVBTX1RFR1JBX1ZQUlxcbitcXHRib29sIFxcXCJOVklESUEgVGVncmEgVmlkZW8tUHJvdGVjdGVkLVJlZ2lvbiBETUEtQlVGIEhlYXBcXFwiXFxuK1xcdGRlcGVuZHMgb24gRE1BQlVGX0hFQVBTIFxcdTAwMjZcXHUwMDI2IERNQV9DTUFcXG4rXFx0aGVscFxcbitcXHQgIENob29zZSB0aGlzIG9wdGlvbiB0byBlbmFibGUgVmlkZW8tUHJvdGVjdGVkLVJlZ2lvbiAoVlBSKSBzdXBwb3J0IG9uXFxuK1xcdCAgYSByYW5nZSBvZiBOVklESUEgVGVncmEgZGV2aWNlcy5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlIGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlXFxuaW5kZXggOTc0NDY3NzkxMDMyZmYuLjI2NWI3N2E3Yjg4OTk4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9NYWtlZmlsZVxcbkBAIC0xLDMgKzEsNCBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuIG9iai0kKENPTkZJR19ETUFCVUZfSEVBUFNfU1lTVEVNKVxcdCs9IHN5c3RlbV9oZWFwLm9cXG4gb2JqLSQoQ09ORklHX0RNQUJVRl9IRUFQU19DTUEpXFx0XFx0Kz0gY21hX2hlYXAub1xcbitvYmotJChDT05GSUdfRE1BQlVGX0hFQVBTX1RFR1JBX1ZQUilcXHQrPSB0ZWdyYS12cHIub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmMgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MThjZjY2ZWMyMjJjOVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmNcXG5AQCAtMCwwICsxLDEyNDIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogRE1BLUJVRiByZXN0cmljdGVkIGhlYXAgZXhwb3J0ZXIgZm9yIE5WSURJQSBWaWRlby1Qcm90ZWN0aW9uLVJlZ2lvbiAoVlBSKVxcbisgKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNiBOVklESUEgQ29ycG9yYXRpb25cXG4rICovXFxuK1xcbisjZGVmaW5lIHByX2ZtdChmbXQpIFxcXCJ0ZWdyYS12cHI6IFxcXCIgZm10XFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYXJtLXNtY2NjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbWEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlYnVnZnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1idWYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1oZWFwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9maW5kLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9yZXNlcnZlZF9tZW0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcG1fcnVudGltZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVzZXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcmVlemVyLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcXG4rI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy90ZWdyYV92cHIuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgVEVHUkFfVlBSX01BWF9DSFVOS1MgNjRcXG4rXFxuK3N0cnVjdCB0ZWdyYV92cHI7XFxuK1xcbitzdHJ1Y3QgdGVncmFfdnByX2RldmljZSB7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgbm9kZTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbit9O1xcbitcXG4rc3RydWN0IHRlZ3JhX3Zwcl9jaHVuayB7XFxuK1xcdHBoeXNfYWRkcl90IHN0YXJ0O1xcbitcXHRwaHlzX2FkZHJfdCBsaW1pdDtcXG4rXFx0c2l6ZV90IHNpemU7XFxuK1xcbitcXHRzdHJ1Y3QgdGVncmFfdnByICp2cHI7XFxuK1xcdHN0cnVjdCBjbWEgKmNtYTtcXG4rXFx0Ym9vbCBhY3RpdmU7XFxuK1xcbitcXHRzdHJ1Y3QgcGFnZSAqc3RhcnRfcGFnZTtcXG4rXFx0dW5zaWduZWQgaW50IG9mZnNldDtcXG4rXFx0dW5zaWduZWQgbG9uZyB2aXJ0O1xcbitcXHRwZ29mZl90IG51bV9wYWdlcztcXG4rXFxuK1xcdHVuc2lnbmVkIGludCBudW1fYnVmZmVycztcXG4rfTtcXG4rXFxuK3N0cnVjdCB0ZWdyYV92cHIge1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldl9ub2RlO1xcbitcXHR1bnNpZ25lZCBsb25nIGFsaWduO1xcbitcXHRwaHlzX2FkZHJfdCBiYXNlO1xcbitcXHRwaHlzX2FkZHJfdCBzaXplO1xcbitcXHRib29sIHVzZV9mcmVlemVyO1xcbitcXHRib29sIHJlc2l6YWJsZTtcXG4rXFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgYnVmZmVycztcXG4rXFx0c3RydWN0IHBhZ2UgKnN0YXJ0X3BhZ2U7XFxuK1xcdHVuc2lnbmVkIGxvbmcgKmJpdG1hcDtcXG4rXFx0cGdvZmZfdCBudW1fcGFnZXM7XFxuK1xcbitcXHQvKiByZXNpemFibGUgVlBSICovXFxuK1xcdERFQ0xBUkVfQklUTUFQKGFjdGl2ZSwgVEVHUkFfVlBSX01BWF9DSFVOS1MpO1xcbitcXHRzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVua3M7XFxuK1xcdHVuc2lnbmVkIGludCBudW1fY2h1bmtzO1xcbitcXG4rXFx0dW5zaWduZWQgaW50IGZpcnN0O1xcbitcXHR1bnNpZ25lZCBpbnQgbGFzdDtcXG4rXFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlcztcXG4rXFx0c3RydWN0IG11dGV4IGxvY2s7XFxuK307XFxuK1xcbitzdHJ1Y3QgdGVncmFfdnByX2J1ZmZlciB7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgYXR0YWNobWVudHM7XFxuK1xcdHN0cnVjdCB0ZWdyYV92cHIgKnZwcjtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbitcXHRzdHJ1Y3QgbXV0ZXggbG9jaztcXG4rXFxuK1xcdHN0cnVjdCBwYWdlICpzdGFydF9wYWdlO1xcbitcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzO1xcbitcXHRwZ29mZl90IG51bV9wYWdlcztcXG4rXFx0cGh5c19hZGRyX3Qgc3RhcnQ7XFxuK1xcdHBoeXNfYWRkcl90IGxpbWl0O1xcbitcXHRzaXplX3Qgc2l6ZTtcXG4rXFx0aW50IHBhZ2VubztcXG4rXFx0aW50IG9yZGVyO1xcbitcXG4rXFx0REVDTEFSRV9CSVRNQVAoY2h1bmtzLCBURUdSQV9WUFJfTUFYX0NIVU5LUyk7XFxuK307XFxuK1xcbitzdHJ1Y3QgdGVncmFfdnByX2F0dGFjaG1lbnQge1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuK1xcdHN0cnVjdCBzZ190YWJsZSBzZ3Q7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4rfTtcXG4rXFxuKyNkZWZpbmUgQVJNX1NNQ0NDX1RFX0ZVTkNfUFJPR1JBTV9WUFIgMHgzXFxuK1xcbisjZGVmaW5lIEFSTV9TTUNDQ19WRU5ET1JfU0lQX1RFX1BST0dSQU1fVlBSX0ZVTkNfSURcXHRcXHRcXFxcXFxuK1xcdEFSTV9TTUNDQ19DQUxMX1ZBTChBUk1fU01DQ0NfRkFTVF9DQUxMLFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0ICAgQVJNX1NNQ0NDX1NNQ18zMixcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdCAgIEFSTV9TTUNDQ19PV05FUl9TSVAsXFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICBBUk1fU01DQ0NfVEVfRlVOQ19QUk9HUkFNX1ZQUilcXG4rXFxuK3N0YXRpYyBpbnQgdGVncmFfdnByX3NldChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxcbit7XFxuK1xcdHN0cnVjdCBhcm1fc21jY2NfcmVzIHJlcztcXG4rXFxuK1xcdGFybV9zbWNjY19zbWMoQVJNX1NNQ0NDX1ZFTkRPUl9TSVBfVEVfUFJPR1JBTV9WUFJfRlVOQ19JRCwgYmFzZSwgc2l6ZSxcXG4rXFx0XFx0ICAgICAgMCwgMCwgMCwgMCwgMCwgXFx1MDAyNnJlcyk7XFxuK1xcbitcXHRyZXR1cm4gcmVzLmEwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHRlZ3JhX3Zwcl9nZXRfZXh0ZW50cyhzdHJ1Y3QgdGVncmFfdnByICp2cHIsIHBoeXNfYWRkcl90ICpiYXNlLFxcbitcXHRcXHRcXHRcXHQgcGh5c19hZGRyX3QgKnNpemUpXFxuK3tcXG4rXFx0cGh5c19hZGRyX3Qgc3RhcnQgPSB+MCwgbGltaXQgPSAwO1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB2cHItXFx1MDAzZW51bV9jaHVua3M7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuayA9IFxcdTAwMjZ2cHItXFx1MDAzZWNodW5rc1tpXTtcXG4rXFxuK1xcdFxcdGlmIChjaHVuay1cXHUwMDNlYWN0aXZlKSB7XFxuK1xcdFxcdFxcdGlmIChjaHVuay1cXHUwMDNlc3RhcnQgXFx1MDAzYyBzdGFydClcXG4rXFx0XFx0XFx0XFx0c3RhcnQgPSBjaHVuay1cXHUwMDNlc3RhcnQ7XFxuK1xcbitcXHRcXHRcXHRpZiAoY2h1bmstXFx1MDAzZWxpbWl0IFxcdTAwM2UgbGltaXQpXFxuK1xcdFxcdFxcdFxcdGxpbWl0ID0gY2h1bmstXFx1MDAzZWxpbWl0O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChsaW1pdCBcXHUwMDNlIHN0YXJ0KSB7XFxuK1xcdFxcdCpzaXplID0gbGltaXQgLSBzdGFydDtcXG4rXFx0XFx0KmJhc2UgPSBzdGFydDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0KmJhc2UgPSAqc2l6ZSA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHRlZ3JhX3Zwcl9yZXNpemUoc3RydWN0IHRlZ3JhX3ZwciAqdnByKVxcbit7XFxuK1xcdHN0cnVjdCB0ZWdyYV92cHJfZGV2aWNlICpub2RlO1xcbitcXHRwaHlzX2FkZHJfdCBiYXNlLCBzaXplO1xcbitcXHRpbnQgZXJyLCBzdGF0dXMgPSAwO1xcbitcXG4rXFx0ZXJyID0gdGVncmFfdnByX2dldF9leHRlbnRzKHZwciwgXFx1MDAyNmJhc2UsIFxcdTAwMjZzaXplKTtcXG4rXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCIlcygpOiBmYWlsZWQgdG8gZ2V0IFZQUiBleHRlbnRzOiAlZFxcXFxuXFxcIiwgX19mdW5jX18sIGVycik7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2cHItXFx1MDAzZXVzZV9mcmVlemVyKSB7XFxuK1xcdFxcdGVyciA9IGZyZWV6ZV9wcm9jZXNzZXMoKTtcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCIlcygpOiBmYWlsZWQgdG8gZnJlZXplIHByb2Nlc3NlczogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBfX2Z1bmNfXywgZXJyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIFxcdTAwMjZ2cHItXFx1MDAzZWRldmljZXMsIG5vZGUpIHtcXG4rXFx0XFx0ZXJyID0gcG1fZ2VuZXJpY19mcmVlemUobm9kZS1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gcnVudGltZSBzdXNwZW5kICVzOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIGRldl9uYW1lKG5vZGUtXFx1MDAzZWRldiksIGVycik7XFxuK1xcdFxcdFxcdGdvdG8gdGhhdztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHR0cmFjZV90ZWdyYV92cHJfc2V0KGJhc2UsIHNpemUpO1xcbitcXG4rXFx0ZXJyID0gdGVncmFfdnByX3NldChiYXNlLCBzaXplKTtcXG4rXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gc2VjdXJlIFZQUjogJWRcXFxcblxcXCIsIGVycik7XFxuK1xcdFxcdHN0YXR1cyA9IGVycjtcXG4rXFx0fVxcbitcXG4rdGhhdzpcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKG5vZGUsIFxcdTAwMjZ2cHItXFx1MDAzZWRldmljZXMsIG5vZGUpIHtcXG4rXFx0XFx0ZXJyID0gcG1fZ2VuZXJpY190aGF3KG5vZGUtXFx1MDAzZWRldik7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIHJ1bnRpbWUgcmVzdW1lICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgZGV2X25hbWUobm9kZS1cXHUwMDNlZGV2KSk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2cHItXFx1MDAzZXVzZV9mcmVlemVyKVxcbitcXHRcXHR0aGF3X3Byb2Nlc3NlcygpO1xcbitcXG4rXFx0cmV0dXJuIHN0YXR1cztcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX2luaXQgdGVncmFfdnByX2NodW5rX2luaXQoc3RydWN0IHRlZ3JhX3ZwciAqdnByLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHRlZ3JhX3Zwcl9jaHVuayAqY2h1bmssXFxuK1xcdFxcdFxcdFxcdCAgICAgICBwaHlzX2FkZHJfdCBzdGFydCwgc2l6ZV90IHNpemUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0Y2h1bmstXFx1MDAzZXN0YXJ0ID0gc3RhcnQ7XFxuK1xcdGNodW5rLVxcdTAwM2VsaW1pdCA9IHN0YXJ0ICsgc2l6ZTtcXG4rXFx0Y2h1bmstXFx1MDAzZXNpemUgPSBzaXplO1xcbitcXHRjaHVuay1cXHUwMDNldnByID0gdnByO1xcbitcXG4rXFx0Y2h1bmstXFx1MDAzZWNtYSA9IGNtYV9jcmVhdGUoc3RhcnQsIHNpemUsIG9yZGVyLCBuYW1lKTtcXG4rXFx0aWYgKElTX0VSUihjaHVuay1cXHUwMDNlY21hKSkge1xcbitcXHRcXHRwcl9lcnIoXFxcImNtYV9jcmVhdGUoKSBmYWlsZWQ6ICVsZFxcXFxuXFxcIiwgUFRSX0VSUihjaHVuay1cXHUwMDNlY21hKSk7XFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGNodW5rLVxcdTAwM2VjbWEpO1xcbitcXHR9XFxuK1xcbitcXHRjaHVuay1cXHUwMDNlb2Zmc2V0ID0gKHN0YXJ0IC0gdnByLVxcdTAwM2ViYXNlKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHRjaHVuay1cXHUwMDNlbnVtX3BhZ2VzID0gc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHRjaHVuay1cXHUwMDNlbnVtX2J1ZmZlcnMgPSAwO1xcbitcXG4rXFx0LyogQ01BIGFyZWEgaXMgbm90IHJlc2VydmVkIHlldCAqL1xcbitcXHRjaHVuay1cXHUwMDNlc3RhcnRfcGFnZSA9IE5VTEw7XFxuK1xcdGNodW5rLVxcdTAwM2V2aXJ0ID0gMDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZWdyYV92cHJfY2h1bmtfZnJlZShzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuaylcXG4re1xcbitcXHRjbWFfZnJlZShjaHVuay1cXHUwMDNlY21hKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIHRlZ3JhX3Zwcl9jaHVua19pc19sYXN0KGNvbnN0IHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rKVxcbit7XFxuK1xcdHBoeXNfYWRkcl90IGxpbWl0ID0gY2h1bmstXFx1MDAzZXZwci1cXHUwMDNlYmFzZSArIGNodW5rLVxcdTAwM2V2cHItXFx1MDAzZXNpemU7XFxuK1xcbitcXHRyZXR1cm4gY2h1bmstXFx1MDAzZWxpbWl0ID09IGxpbWl0O1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgdGVncmFfdnByX2NodW5rX2lzX2xlYWYoY29uc3Qgc3RydWN0IHRlZ3JhX3Zwcl9jaHVuayAqY2h1bmspXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHRlZ3JhX3Zwcl9jaHVuayAqbmV4dCA9IGNodW5rICsgMTtcXG4rXFxuK1xcdGlmICh0ZWdyYV92cHJfY2h1bmtfaXNfbGFzdChjaHVuaykpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cmV0dXJuICFuZXh0LVxcdTAwM2VhY3RpdmU7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGVncmFfdnByX2NodW5rX2FjdGl2YXRlKHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYWxpZ24gPSBnZXRfb3JkZXIoY2h1bmstXFx1MDAzZXZwci1cXHUwMDNlYWxpZ24pO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0dHJhY2VfdGVncmFfdnByX2NodW5rX2FjdGl2YXRlKGNodW5rLVxcdTAwM2VzdGFydCwgY2h1bmstXFx1MDAzZWxpbWl0KTtcXG4rXFxuK1xcdGNodW5rLVxcdTAwM2VzdGFydF9wYWdlID0gY21hX2FsbG9jKGNodW5rLVxcdTAwM2VjbWEsIGNodW5rLVxcdTAwM2VudW1fcGFnZXMsIGFsaWduLFxcbitcXHRcXHRcXHRcXHQgICAgICBmYWxzZSk7XFxuK1xcdGlmICghY2h1bmstXFx1MDAzZXN0YXJ0X3BhZ2UpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHR9XFxuK1xcbitcXHRjaHVuay1cXHUwMDNldmlydCA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfdG9fdmlydChjaHVuay1cXHUwMDNlc3RhcnRfcGFnZSk7XFxuK1xcbitcXHRlcnIgPSBzZXRfbWVtb3J5X2RldmljZShjaHVuay1cXHUwMDNldmlydCwgY2h1bmstXFx1MDAzZW51bV9wYWdlcyk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGZyZWU7XFxuK1xcbitcXHRjaHVuay1cXHUwMDNlYWN0aXZlID0gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZnJlZTpcXG4rXFx0Y21hX3JlbGVhc2UoY2h1bmstXFx1MDAzZWNtYSwgY2h1bmstXFx1MDAzZXN0YXJ0X3BhZ2UsIGNodW5rLVxcdTAwM2VudW1fcGFnZXMpO1xcbitmYWlsOlxcbitcXHRjaHVuay1cXHUwMDNlc3RhcnRfcGFnZSA9IE5VTEw7XFxuK1xcdGNodW5rLVxcdTAwM2V2aXJ0ID0gMDtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCB0ZWdyYV92cHJfY2h1bmtfZGVhY3RpdmF0ZShzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuaylcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKCFjaHVuay1cXHUwMDNlYWN0aXZlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIGRvIG5vdCBkZWFjdGl2YXRlIGlmIHRoZXJlIGFyZSBidWZmZXJzIGxlZnQgaW4gdGhpcyBjaHVuayAqL1xcbitcXHRpZiAoV0FSTl9PTihjaHVuay1cXHUwMDNlbnVtX2J1ZmZlcnMgXFx1MDAzZSAwKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdHRyYWNlX3RlZ3JhX3Zwcl9jaHVua19kZWFjdGl2YXRlKGNodW5rLVxcdTAwM2VzdGFydCwgY2h1bmstXFx1MDAzZWxpbWl0KTtcXG4rXFxuK1xcdGVyciA9IHNldF9tZW1vcnlfbm9ybWFsKGNodW5rLVxcdTAwM2V2aXJ0LCBjaHVuay1cXHUwMDNlbnVtX3BhZ2VzKTtcXG4rXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRjaHVuay1cXHUwMDNlYWN0aXZlID0gZmFsc2U7XFxuK1xcbitcXHRjbWFfcmVsZWFzZShjaHVuay1cXHUwMDNlY21hLCBjaHVuay1cXHUwMDNlc3RhcnRfcGFnZSwgY2h1bmstXFx1MDAzZW51bV9wYWdlcyk7XFxuK1xcdGNodW5rLVxcdTAwM2VzdGFydF9wYWdlID0gTlVMTDtcXG4rXFx0Y2h1bmstXFx1MDAzZXZpcnQgPSAwO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHRlZ3JhX3Zwcl9jaHVua19vdmVybGFwcyhzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuayxcXG4rXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBsaW1pdClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgZmlyc3QgPSBjaHVuay1cXHUwMDNlb2Zmc2V0O1xcbitcXHR1bnNpZ25lZCBpbnQgbGFzdCA9IGNodW5rLVxcdTAwM2VvZmZzZXQgKyBjaHVuay1cXHUwMDNlbnVtX3BhZ2VzIC0gMTtcXG4rXFxuK1xcdGlmIChsYXN0IFxcdTAwM2Mgc3RhcnQgfHwgZmlyc3QgXFx1MDAzZT0gbGltaXQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHRlZ3JhX3Zwcl9hY3RpdmF0ZV9jaHVua3Moc3RydWN0IHRlZ3JhX3ZwciAqdnByLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0ZWdyYV92cHJfYnVmZmVyICpidWZmZXIpXFxuK3tcXG4rXFx0REVDTEFSRV9CSVRNQVAoZGlydHksIHZwci1cXHUwMDNlbnVtX2NodW5rcyk7XFxuK1xcdHVuc2lnbmVkIGludCBpLCBib3R0b20sIHRvcDtcXG4rXFx0aW50IGVyciA9IDAsIHJldDtcXG4rXFxuK1xcdGJpdG1hcF96ZXJvKGRpcnR5LCB2cHItXFx1MDAzZW51bV9jaHVua3MpO1xcbitcXG4rXFx0LyogYWN0aXZhdGUgYW55IGluYWN0aXZlIGNodW5rcyB0aGF0IG92ZXJsYXAgdGhpcyBidWZmZXIgKi9cXG4rXFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBidWZmZXItXFx1MDAzZWNodW5rcywgdnByLVxcdTAwM2VudW1fY2h1bmtzKSB7XFxuK1xcdFxcdHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rID0gXFx1MDAyNnZwci1cXHUwMDNlY2h1bmtzW2ldO1xcbitcXG4rXFx0XFx0aWYgKGNodW5rLVxcdTAwM2VhY3RpdmUpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0ZXJyID0gdGVncmFfdnByX2NodW5rX2FjdGl2YXRlKGNodW5rKTtcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZGVhY3RpdmF0ZTtcXG4rXFxuK1xcdFxcdHNldF9iaXQoaSwgdnByLVxcdTAwM2VhY3RpdmUpO1xcbitcXHRcXHRzZXRfYml0KGksIGRpcnR5KTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogQWN0aXZhdGluZyBjaHVua3MgYWJvdmUgbWF5IGhhdmUgY3JlYXRlZCBob2xlcywgYnV0IHNpbmNlIHRoZSBWUFJcXG4rXFx0ICogY2FuIG9ubHkgZXZlciBiZSBhIHNpbmdsZSBjb250aWd1b3VzIHJlZ2lvbiwgbWFrZSBzdXJlIHRvIGFjdGl2YXRlXFxuK1xcdCAqIGFueSBtaXNzaW5nIGNodW5rcy5cXG4rXFx0ICovXFxuK1xcdGZvcl9lYWNoX2NsZWFyX2JpdHJhbmdlKGJvdHRvbSwgdG9wLCB2cHItXFx1MDAzZWFjdGl2ZSwgdnByLVxcdTAwM2VudW1fY2h1bmtzKSB7XFxuK1xcdFxcdC8qIGluYWN0aXZlIGNodW5rcyBhdCB0aGUgYm90dG9tIG9yIHRoZSB0b3AgYXJlIGhhcm1sZXNzICovXFxuK1xcdFxcdGlmIChib3R0b20gPT0gMCB8fCB0b3AgPT0gdnByLVxcdTAwM2VudW1fY2h1bmtzKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGZvciAoaSA9IGJvdHRvbTsgaSBcXHUwMDNjIHRvcDsgaSsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rID0gXFx1MDAyNnZwci1cXHUwMDNlY2h1bmtzW2ldO1xcbitcXG4rXFx0XFx0XFx0ZXJyID0gdGVncmFfdnByX2NodW5rX2FjdGl2YXRlKGNodW5rKTtcXG4rXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZGVhY3RpdmF0ZTtcXG4rXFxuK1xcdFxcdFxcdHNldF9iaXQoaSwgdnByLVxcdTAwM2VhY3RpdmUpO1xcbitcXHRcXHRcXHRzZXRfYml0KGksIGRpcnR5KTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBpZiBhbnkgY2h1bmtzIGhhdmUgYmVlbiBhY3RpdmF0ZWQsIFZQUiBuZWVkcyB0byBiZSByZXNpemVkICovXFxuK1xcdGlmICghYml0bWFwX2VtcHR5KGRpcnR5LCB2cHItXFx1MDAzZW51bV9jaHVua3MpKSB7XFxuK1xcdFxcdGVyciA9IHRlZ3JhX3Zwcl9yZXNpemUodnByKTtcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gZ3JvdyBWUFI6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHRcXHRcXHRnb3RvIGRlYWN0aXZhdGU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogaW5jcmVtZW50IGJ1ZmZlciBjb3VudCBmb3IgZWFjaCBjaHVuayAqL1xcbitcXHRmb3JfZWFjaF9zZXRfYml0KGksIGJ1ZmZlci1cXHUwMDNlY2h1bmtzLCB2cHItXFx1MDAzZW51bV9jaHVua3MpXFxuK1xcdFxcdHZwci1cXHUwMDNlY2h1bmtzW2ldLm51bV9idWZmZXJzKys7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2RlYWN0aXZhdGU6XFxuK1xcdC8qIGRlYWN0aXZhdGUgYW55IG9mIHRoZSBwcmV2aW91c2x5IGluYWN0aXZlIGNodW5rcyBvbiBmYWlsdXJlICovXFxuK1xcdGZvcl9lYWNoX3NldF9iaXQoaSwgZGlydHksIHZwci1cXHUwMDNlbnVtX2NodW5rcykge1xcbitcXHRcXHRyZXQgPSB0ZWdyYV92cHJfY2h1bmtfZGVhY3RpdmF0ZShcXHUwMDI2dnByLVxcdTAwM2VjaHVua3NbaV0pO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0V0FSTigxLCBcXFwiZmFpbGVkIHRvIGRlYWN0aXZhdGUgY2h1bmsgIyV1OiAlZFxcXFxuXFxcIiwgaSwgcmV0KTtcXG4rXFxuK1xcdFxcdGNsZWFyX2JpdChpLCB2cHItXFx1MDAzZWFjdGl2ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJldHJpZXZlIHRoZSByYW5nZSBvZiBwYWdlcyB3aXRoaW4gdGhlIGFjdGl2YXRlIHJlZ2lvbiBvZiB0aGUgVlBSLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgdGVncmFfdnByX2dldF9hY3RpdmVfcmFuZ2Uoc3RydWN0IHRlZ3JhX3ZwciAqdnByLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50ICpmaXJzdCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCAqbGFzdClcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGksIGo7XFxuK1xcbitcXHRpID0gZmluZF9maXJzdF9iaXQodnByLVxcdTAwM2VhY3RpdmUsIHZwci1cXHUwMDNlbnVtX2NodW5rcyk7XFxuK1xcdGlmIChpIFxcdTAwM2U9IHZwci1cXHUwMDNlbnVtX2NodW5rcylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aiA9IGZpbmRfbGFzdF9iaXQodnByLVxcdTAwM2VhY3RpdmUsIHZwci1cXHUwMDNlbnVtX2NodW5rcyk7XFxuK1xcdGlmIChqIFxcdTAwM2U9IHZwci1cXHUwMDNlbnVtX2NodW5rcylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0KmZpcnN0ID0gdnByLVxcdTAwM2VjaHVua3NbaV0ub2Zmc2V0O1xcbitcXHQqbGFzdCA9IHZwci1cXHUwMDNlY2h1bmtzW2pdLm9mZnNldCArIHZwci1cXHUwMDNlY2h1bmtzW2pdLm51bV9wYWdlcztcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbisvKlxcbisgKiBUcnkgdG8gZmluZCBhbmQgYWxsb2NhdGUgYSBmcmVlIHJlZ2lvbiB3aXRoaW4gYSBzcGVjaWZpYyBwYWdlIHJhbmdlLlxcbisgKiBSZXR1cm5zIHRoZSBwYWdlIG51bWJlciBpZiBzdWNjZXNzZnVsLCAtRU5PU1BDIG90aGVyd2lzZS5cXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBtaW1pY3MgYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24oKSBidXQgcmVzdHJpY3RzIHRoZSBzZWFyY2hcXG4rICogdG8gYSBzcGVjaWZpYyByYW5nZSB0byBlbmFibGUgYWxsb2NhdGlvbiB3aXRoaW4gaW5kaXZpZHVhbCBjaHVua3MuXFxuKyAqL1xcbitzdGF0aWMgaW50IHRlZ3JhX3Zwcl9maW5kX2ZyZWVfcmVnaW9uX2luX3JhbmdlKHN0cnVjdCB0ZWdyYV92cHIgKnZwcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBzdGFydF9wYWdlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGVuZF9wYWdlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG51bV9wYWdlcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBhbGlnbilcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgcG9zLCBuZXh0ID0gQUxJR04oc3RhcnRfcGFnZSwgYWxpZ24pO1xcbitcXG4rXFx0LyogU2NhbiB0aHJvdWdoIGFsaWduZWQgcG9zaXRpb25zLCB0cnlpbmcgdG8gYWxsb2NhdGUgYXQgZWFjaCBvbmUgKi9cXG4rXFx0Zm9yIChwb3MgPSBuZXh0OyBwb3MgKyBudW1fcGFnZXMgXFx1MDAzYz0gZW5kX3BhZ2U7IHBvcyA9IG5leHQpIHtcXG4rXFx0XFx0bmV4dCA9IGZpbmRfbmV4dF9iaXQodnByLVxcdTAwM2ViaXRtYXAsIHBvcyArIG51bV9wYWdlcywgcG9zKTtcXG4rXFxuK1xcdFxcdGlmIChuZXh0IFxcdTAwM2U9IHBvcyArIG51bV9wYWdlcykge1xcbitcXHRcXHRcXHRiaXRtYXBfc2V0KHZwci1cXHUwMDNlYml0bWFwLCBwb3MsIG51bV9wYWdlcyk7XFxuK1xcdFxcdFxcdHJldHVybiBwb3M7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG5leHQgPSBmaW5kX25leHRfemVyb19iaXQodnByLVxcdTAwM2ViaXRtYXAsIHZwci1cXHUwMDNlbnVtX3BhZ2VzLCBuZXh0KTtcXG4rXFx0XFx0bmV4dCA9IEFMSUdOKG5leHQsIGFsaWduKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIC1FTk9TUEM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGVncmFfdnByX2ZpbmRfZnJlZV9yZWdpb24oc3RydWN0IHRlZ3JhX3ZwciAqdnByLFxcbitcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbnVtX3BhZ2VzLFxcbitcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGFsaWduKVxcbit7XFxuK1xcdHJldHVybiB0ZWdyYV92cHJfZmluZF9mcmVlX3JlZ2lvbl9pbl9yYW5nZSh2cHIsIDAsIHZwci1cXHUwMDNlbnVtX3BhZ2VzIC0gMSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbnVtX3BhZ2VzLCBhbGlnbik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGVncmFfdnByX2ZpbmRfZnJlZV9yZWdpb25fY2x1c3RlcmVkKHN0cnVjdCB0ZWdyYV92cHIgKnZwcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG51bV9wYWdlcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGFsaWduKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCB0YXJnZXQsIGZpcnN0LCBsYXN0O1xcbitcXHRpbnQgcGFnZW5vO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCBhYm9ydCB0aGUgY2x1c3RlcmVkIGFsbG9jYXRpb24gc2NoZW1lXFxuK1xcdCAqIGFuZCB1c2UgdGhlIGdlbmVyaWMgYWxsb2NhdGlvbiBzY2hlbWUgaW5zdGVhZC5cXG4rXFx0ICovXFxuK1xcdGlmICh2cHItXFx1MDAzZWZpcnN0IFxcdTAwM2UgdnByLVxcdTAwM2VsYXN0KVxcbitcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEZpcnN0LCB0cnkgdG8gYWxsb2NhdGUgd2l0aGluIHRoZSBjdXJyZW50bHkgYWxsb2NhdGVkIHJlZ2lvbi4gVGhpc1xcbitcXHQgKiBrZWVwcyBhbGxvY2F0aW9ucyB0aWdodGx5IHBhY2tlZCBhbmQgbWluaW1pemVzIHRoZSBWUFIgc2l6ZSBuZWVkZWQuXFxuK1xcdCAqL1xcbitcXHRwYWdlbm8gPSB0ZWdyYV92cHJfZmluZF9mcmVlX3JlZ2lvbl9pbl9yYW5nZSh2cHIsIHZwci1cXHUwMDNlZmlyc3QsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgdnByLVxcdTAwM2VsYXN0ICsgMSwgbnVtX3BhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGFsaWduKTtcXG4rXFx0aWYgKHBhZ2VubyBcXHUwMDNlPSAwKVxcbitcXHRcXHRyZXR1cm4gcGFnZW5vO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgbm90IGVub3VnaCBmcmVlIHNwYWNlIGV4aXN0cyB3aXRoaW4gdGhlIGN1cnJlbnRseSBhbGxvY2F0ZWRcXG4rXFx0ICogcmVnaW9uLCBjaGVjayB0byBzZWUgaWYgdGhlIGFsbG9jYXRpb24gZml0cyBhbnl3aGVyZSB3aXRoaW4gdGhlXFxuK1xcdCAqIGFjdGl2ZSByZWdpb24sIGF2b2lkaW5nIHRoZSBuZWVkIHRvIHJlc2l6ZSB0aGUgVlBSLlxcbitcXHQgKi9cXG4rXFx0aWYgKHRlZ3JhX3Zwcl9nZXRfYWN0aXZlX3JhbmdlKHZwciwgXFx1MDAyNmZpcnN0LCBcXHUwMDI2bGFzdCkpIHtcXG4rXFx0XFx0cGFnZW5vID0gdGVncmFfdnByX2ZpbmRfZnJlZV9yZWdpb25faW5fcmFuZ2UodnByLCBmaXJzdCwgbGFzdCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBudW1fcGFnZXMsIGFsaWduKTtcXG4rXFx0XFx0aWYgKHBhZ2VubyBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcGFnZW5vO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJZiBub3QgZW5vdWdoIGZyZWUgc3BhY2UgZXhpc3RzIHdpdGhpbiB0aGUgY3VycmVudGx5IGFjdGl2ZSByZWdpb24sXFxuK1xcdCAqIHRyeSB0byBhbGxvY2F0ZSBhZGphY2VudCB0byBpdCB0byBncm93IGl0IGNvbnRpZ3VvdXNseSBhbmQgZW5zdXJlXFxuK1xcdCAqIG9wdGltYWwgcGFja2luZy5cXG4rXFx0ICovXFxuK1xcbitcXHQvKlxcbitcXHQgKiBDYWxjdWxhdGUgd2hlcmUgdGhlIGFsbG9jYXRpb24gc2hvdWxkIHN0YXJ0IHRvIGVuZCByaWdodCBhdCB0aGVcXG4rXFx0ICogZmlyc3QgYWxsb2NhdGVkIHBhZ2UsIHdpdGggcHJvcGVyIGFsaWdubWVudC5cXG4rXFx0ICovXFxuK1xcdGlmICh2cHItXFx1MDAzZWZpcnN0IFxcdTAwM2U9IG51bV9wYWdlcykge1xcbitcXHRcXHR0YXJnZXQgPSBBTElHTl9ET1dOKHZwci1cXHUwMDNlZmlyc3QgLSBudW1fcGFnZXMsIGFsaWduKTtcXG4rXFxuK1xcdFxcdGlmICghYml0bWFwX2FsbG9jYXRlKHZwci1cXHUwMDNlYml0bWFwLCB0YXJnZXQsIG51bV9wYWdlcykpXFxuK1xcdFxcdFxcdHJldHVybiB0YXJnZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRyeSBhZnRlciB0aGUgbGFzdCBhbGxvY2F0aW9uICovXFxuK1xcdHRhcmdldCA9IEFMSUdOKHZwci1cXHUwMDNlbGFzdCArIDEsIGFsaWduKTtcXG4rXFxuK1xcdGlmICh0YXJnZXQgKyBudW1fcGFnZXMgXFx1MDAzYz0gdnByLVxcdTAwM2VudW1fcGFnZXMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFiaXRtYXBfYWxsb2NhdGUodnByLVxcdTAwM2ViaXRtYXAsIHRhcmdldCwgbnVtX3BhZ2VzKSlcXG4rXFx0XFx0cmV0dXJuIHRhcmdldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENvdWxkbid0IGFsbG9jYXRlIGF0IHRoZSBpZGVhbCBhZGphY2VudCBwb3NpdGlvbiwgc2VhcmNoIGZvciBhbnlcXG4rXFx0ICogYXZhaWxhYmxlIHNwYWNlIGJlZm9yZSB0aGUgZmlyc3QgYWxsb2NhdGVkIHBhZ2UuXFxuK1xcdCAqL1xcbitcXHRwYWdlbm8gPSB0ZWdyYV92cHJfZmluZF9mcmVlX3JlZ2lvbl9pbl9yYW5nZSh2cHIsIDAsIHZwci1cXHUwMDNlZmlyc3QsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgbnVtX3BhZ2VzLCBhbGlnbik7XFxuK1xcdGlmIChwYWdlbm8gXFx1MDAzZT0gMClcXG4rXFx0XFx0cmV0dXJuIHBhZ2VubztcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENvdWxkbid0IGFsbG9jYXRlIGF0IHRoZSBpZGVhbCBhZGphY2VudCBwb3NpdGlvbiwgc2VhcmNoXFxuK1xcdCAqIGZvciBhbnkgYXZhaWxhYmxlIHNwYWNlIGFmdGVyIHRoZSBsYXN0IGFsbG9jYXRlZCBwYWdlLlxcbitcXHQgKi9cXG4rXFx0cGFnZW5vID0gdGVncmFfdnByX2ZpbmRfZnJlZV9yZWdpb25faW5fcmFuZ2UodnByLCB2cHItXFx1MDAzZWxhc3QgKyAxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHZwci1cXHUwMDNlbnVtX3BhZ2VzLCBudW1fcGFnZXMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgYWxpZ24pO1xcbitcXHRpZiAocGFnZW5vIFxcdTAwM2U9IDApXFxuK1xcdFxcdHJldHVybiBwYWdlbm87XFxuK1xcbitcXHRyZXR1cm4gLUVOT1NQQztcXG4rfVxcbitcXG4rLypcXG4rICogRmluZCBhIGZyZWUgcmVnaW9uLCBwcmVmZXJyaW5nIGxvY2F0aW9ucyBuZWFyIGV4aXN0aW5nIGFsbG9jYXRpb25zIHRvXFxuKyAqIG1pbmltaXplIFZQUiBmcmFnbWVudGF0aW9uLiBUaGUgYWxsb2NhdGlvbiBzdHJhdGVneSBpcyB0byBmaXJzdCBhbGxvY2F0ZVxcbisgKiB3aXRoaW4gb3IgYWRqYWNlbnQgdG8gdGhlIGV4aXN0aW5nIHJlZ2lvbiB0byBrZWVwIGFsbG9jYXRpb25zIGNsdXN0ZXJlZC5cXG4rICogT3RoZXJ3aXNlIGZhbGwgYmFjayB0byBhIGdlbmVyaWMgYWxsb2NhdGlvbiB1c2luZyB0aGUgZmlyc3QgYXZhaWxhYmxlXFxuKyAqIHNwYWNlLlxcbisgKlxcbisgKiBUaGlzIGFwcHJvYWNoIGZvY3VzZXMgb24gcGFnZS1sZXZlbCBhbGxvY2F0aW9uIGZpcnN0LCB0aGVuIHRoZSBjaHVua1xcbisgKiBzeXN0ZW0gZGV0ZXJtaW5lcyB3aGljaCBjaHVua3MgbmVlZCB0byBiZSBhY3RpdmF0ZWQgYmFzZWQgb24gd2hlcmUgdGhlXFxuKyAqIHBhZ2VzIGVuZGVkIHVwLlxcbisgKi9cXG4rc3RhdGljIGludCB0ZWdyYV92cHJfYWxsb2NhdGVfcmVnaW9uKHN0cnVjdCB0ZWdyYV92cHIgKnZwcixcXG4rXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbnVtX3BhZ2VzLFxcbitcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBhbGlnbilcXG4re1xcbitcXHRpbnQgcGFnZW5vO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRm9yIG5vbi1yZXNpemFibGUgVlBSIChubyBjaHVua3MpLCB1c2Ugc2ltcGxlIGZpcnN0LWZpdCBhbGxvY2F0aW9uLlxcbitcXHQgKiBDbHVzdGVyaW5nIG9wdGltaXphdGlvbiBpcyBvbmx5IGJlbmVmaWNpYWwgZm9yIHJlc2l6YWJsZSBWUFIgd2hlcmVcXG4rXFx0ICoga2VlcGluZyBhbGxvY2F0aW9ucyB0b2dldGhlciBtaW5pbWl6ZXMgdGhlIGFjdGl2ZSBWUFIgc2l6ZS5cXG4rXFx0ICovXFxuK1xcdGlmICh2cHItXFx1MDAzZW51bV9jaHVua3MgPT0gMClcXG4rXFx0XFx0cmV0dXJuIHRlZ3JhX3Zwcl9maW5kX2ZyZWVfcmVnaW9uKHZwciwgbnVtX3BhZ2VzLCBhbGlnbik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IGV4aXN0aW5nIGFsbG9jYXRpb25zIGluIHRoZSBiaXRtYXAuIElmIHNvLFxcbitcXHQgKiB0cnkgdG8gYWxsb2NhdGUgbmVhciB0aGVtIHRvIG1pbmltaXplIGZyYWdtZW50YXRpb24uXFxuK1xcdCAqL1xcbitcXHRwYWdlbm8gPSB0ZWdyYV92cHJfZmluZF9mcmVlX3JlZ2lvbl9jbHVzdGVyZWQodnByLCBudW1fcGFnZXMsIGFsaWduKTtcXG4rXFx0aWYgKHBhZ2VubyBcXHUwMDNlPSAwKVxcbitcXHRcXHRyZXR1cm4gcGFnZW5vO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlcmUgYXJlIG5vIGV4aXN0aW5nIGFsbG9jYXRpb25zLCBvciBubyBzcGFjZSBhZGphY2VudCB0byB0aGVtLFxcbitcXHQgKiBmYWxsIGJhY2sgdG8gdGhlIGZpcnN0IGF2YWlsYWJsZSBzcGFjZSBhbnl3aGVyZSBpbiB0aGUgVlBSLlxcbitcXHQgKi9cXG4rXFx0cGFnZW5vID0gdGVncmFfdnByX2ZpbmRfZnJlZV9yZWdpb24odnByLCBudW1fcGFnZXMsIGFsaWduKTtcXG4rXFx0aWYgKHBhZ2VubyBcXHUwMDNlPSAwKVxcbitcXHRcXHRyZXR1cm4gcGFnZW5vO1xcbitcXG4rXFx0cmV0dXJuIC1FTk9TUEM7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgdGVncmFfdnByX2J1ZmZlciAqXFxuK3RlZ3JhX3Zwcl9idWZmZXJfYWxsb2NhdGUoc3RydWN0IHRlZ3JhX3ZwciAqdnByLCBzaXplX3Qgc2l6ZSlcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgbnVtX3BhZ2VzID0gc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7XFxuK1xcdHN0cnVjdCB0ZWdyYV92cHJfYnVmZmVyICpidWZmZXI7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmlyc3QsIGxhc3Q7XFxuK1xcdGludCBwYWdlbm8sIGVycjtcXG4rXFx0cGdvZmZfdCBpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogXFxcIm9yZGVyXFxcIiBkZWZpbmVzIHRoZSBhbGlnbm1lbnQgYW5kIHNpemUsIHNvIHRoaXMgbWF5IHJlc3VsdCBpblxcbitcXHQgKiBmcmFnbWVudGVkIG1lbW9yeSBkZXBlbmRpbmcgb24gdGhlIGFsbG9jYXRpb24gcGF0dGVybnMuIEhvd2V2ZXIsXFxuK1xcdCAqIHNpbmNlIHRoaXMgaXMgdXNlZCBwcmltYXJpbHkgZm9yIHZpZGVvIGZyYW1lcywgaXQgaXMgZXhwZWN0ZWQgdGhhdFxcbitcXHQgKiBhIG51bWJlciBvZiBidWZmZXJzIG9mIHRoZSBzYW1lIHNpemUgd2lsbCBiZSBhbGxvY2F0ZWQsIHNvXFxuK1xcdCAqIGZyYWdtZW50YXRpb24gc2hvdWxkIGJlIG5lZ2xpZ2libGUuXFxuK1xcdCAqL1xcbitcXHRwYWdlbm8gPSB0ZWdyYV92cHJfYWxsb2NhdGVfcmVnaW9uKHZwciwgbnVtX3BhZ2VzLCAxKTtcXG4rXFx0aWYgKHBhZ2VubyBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHBhZ2Vubyk7XFxuK1xcbitcXHRmaXJzdCA9IGZpbmRfZmlyc3RfYml0KHZwci1cXHUwMDNlYml0bWFwLCB2cHItXFx1MDAzZW51bV9wYWdlcyk7XFxuK1xcdGxhc3QgPSBmaW5kX2xhc3RfYml0KHZwci1cXHUwMDNlYml0bWFwLCB2cHItXFx1MDAzZW51bV9wYWdlcyk7XFxuK1xcbitcXHRidWZmZXIgPSBremFsbG9jX29iaigqYnVmZmVyLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFidWZmZXIpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byByZWxlYXNlO1xcbitcXHR9XFxuK1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2YnVmZmVyLVxcdTAwM2VhdHRhY2htZW50cyk7XFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZidWZmZXItXFx1MDAzZWxpc3QpO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZidWZmZXItXFx1MDAzZWxvY2spO1xcbitcXHRidWZmZXItXFx1MDAzZXN0YXJ0ID0gdnByLVxcdTAwM2ViYXNlICsgKHBhZ2VubyBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG4rXFx0YnVmZmVyLVxcdTAwM2VsaW1pdCA9IGJ1ZmZlci1cXHUwMDNlc3RhcnQgKyBzaXplO1xcbitcXHRidWZmZXItXFx1MDAzZXNpemUgPSBzaXplO1xcbitcXHRidWZmZXItXFx1MDAzZW51bV9wYWdlcyA9IG51bV9wYWdlcztcXG4rXFx0YnVmZmVyLVxcdTAwM2VwYWdlbm8gPSBwYWdlbm87XFxuK1xcdGJ1ZmZlci1cXHUwMDNlb3JkZXIgPSBvcmRlcjtcXG4rXFxuK1xcdGJ1ZmZlci1cXHUwMDNlcGFnZXMgPSBrbWFsbG9jX2FycmF5KGJ1ZmZlci1cXHUwMDNlbnVtX3BhZ2VzLFxcbitcXHRcXHRcXHRcXHQgICAgICBzaXplb2YoKmJ1ZmZlci1cXHUwMDNlcGFnZXMpLFxcbitcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFidWZmZXItXFx1MDAzZXBhZ2VzKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0LyogdHJhY2sgd2hpY2ggY2h1bmtzIHRoaXMgYnVmZmVyIG92ZXJsYXBzICovXFxuK1xcdGlmICh2cHItXFx1MDAzZW51bV9jaHVua3MgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBsaW1pdCA9IGJ1ZmZlci1cXHUwMDNlcGFnZW5vICsgYnVmZmVyLVxcdTAwM2VudW1fcGFnZXMsIGk7XFxuK1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdnByLVxcdTAwM2VudW1fY2h1bmtzOyBpKyspIHtcXG4rXFx0XFx0XFx0c3RydWN0IHRlZ3JhX3Zwcl9jaHVuayAqY2h1bmsgPSBcXHUwMDI2dnByLVxcdTAwM2VjaHVua3NbaV07XFxuK1xcbitcXHRcXHRcXHRpZiAodGVncmFfdnByX2NodW5rX292ZXJsYXBzKGNodW5rLCBwYWdlbm8sIGxpbWl0KSlcXG4rXFx0XFx0XFx0XFx0c2V0X2JpdChpLCBidWZmZXItXFx1MDAzZWNodW5rcyk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIGFjdGl2YXRlIGNodW5rcyBpZiBuZWNlc3NhcnkgKi9cXG4rXFx0XFx0ZXJyID0gdGVncmFfdnByX2FjdGl2YXRlX2NodW5rcyh2cHIsIGJ1ZmZlcik7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGZyZWU7XFxuK1xcbitcXHRcXHQvKiB0cmFjayBmaXJzdCBhbmQgbGFzdCBhbGxvY2F0ZWQgcGFnZXMgKi9cXG4rXFx0XFx0aWYgKGJ1ZmZlci1cXHUwMDNlcGFnZW5vIFxcdTAwM2MgdnByLVxcdTAwM2VmaXJzdClcXG4rXFx0XFx0XFx0dnByLVxcdTAwM2VmaXJzdCA9IGJ1ZmZlci1cXHUwMDNlcGFnZW5vO1xcbitcXG4rXFx0XFx0aWYgKGxpbWl0IC0gMSBcXHUwMDNlIHZwci1cXHUwMDNlbGFzdClcXG4rXFx0XFx0XFx0dnByLVxcdTAwM2VsYXN0ID0gbGltaXQgLSAxO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYnVmZmVyLVxcdTAwM2VudW1fcGFnZXM7IGkrKylcXG4rXFx0XFx0YnVmZmVyLVxcdTAwM2VwYWdlc1tpXSA9IFxcdTAwMjZ2cHItXFx1MDAzZXN0YXJ0X3BhZ2VbcGFnZW5vICsgaV07XFxuK1xcbitcXHRyZXR1cm4gYnVmZmVyO1xcbitcXG4rZnJlZTpcXG4rXFx0a2ZyZWUoYnVmZmVyLVxcdTAwM2VwYWdlcyk7XFxuK1xcdGtmcmVlKGJ1ZmZlcik7XFxuK3JlbGVhc2U6XFxuK1xcdGJpdG1hcF9yZWxlYXNlX3JlZ2lvbih2cHItXFx1MDAzZWJpdG1hcCwgcGFnZW5vLCBvcmRlcik7XFxuK1xcdHJldHVybiBFUlJfUFRSKGVycik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlZ3JhX3Zwcl9idWZmZXJfcmVsZWFzZShzdHJ1Y3QgdGVncmFfdnByX2J1ZmZlciAqYnVmZmVyKVxcbit7XFxuK1xcdHN0cnVjdCB0ZWdyYV92cHIgKnZwciA9IGJ1ZmZlci1cXHUwMDNldnByO1xcbitcXHRzdHJ1Y3QgdGVncmFfdnByX2J1ZmZlciAqZW50cnk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmlyc3QsIGxhc3Q7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRGVjcmVtZW50IGJ1ZmZlciBjb3VudCBmb3IgZWFjaCBvdmVybGFwcGluZyBjaHVuay4gTm90ZSB0aGF0IGNodW5rc1xcbitcXHQgKiBhcmUgbm90IGRlYWN0aXZhdGVkIGhlcmUgeWV0LCB0aGF0J3MgZG9uZSBpbiB0ZWdyYV92cHJfcmVjeWNsZSgpXFxuK1xcdCAqIGluc3RlYWQuXFxuK1xcdCAqL1xcbitcXHRmb3JfZWFjaF9zZXRfYml0KGksIGJ1ZmZlci1cXHUwMDNlY2h1bmtzLCB2cHItXFx1MDAzZW51bV9jaHVua3MpIHtcXG4rXFx0XFx0aWYgKCFXQVJOX09OKHZwci1cXHUwMDNlY2h1bmtzW2ldLm51bV9idWZmZXJzID09IDApKVxcbitcXHRcXHRcXHR2cHItXFx1MDAzZWNodW5rc1tpXS5udW1fYnVmZmVycy0tO1xcbitcXHR9XFxuK1xcbitcXHQvKiB0cmFjayBmaXJzdCBhbmQgbGFzdCBhbGxvY2F0ZWQgcGFnZXMgKi9cXG4rXFx0aWYgKGxpc3RfaXNfZmlyc3QoXFx1MDAyNmJ1ZmZlci1cXHUwMDNlbGlzdCwgXFx1MDAyNnZwci1cXHUwMDNlYnVmZmVycykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGxpc3RfaXNfbGFzdChcXHUwMDI2YnVmZmVyLVxcdTAwM2VsaXN0LCBcXHUwMDI2dnByLVxcdTAwM2VidWZmZXJzKSkge1xcbitcXHRcXHQvKiBpZiB0aGVyZSBhcmUgbm8gcmVtYWluaW5nIGJ1ZmZlcnMgYWZ0ZXIgdGhpcywgcmVzZXQgKi9cXG4rXFx0XFx0dnByLVxcdTAwM2VmaXJzdCA9IH4wVTtcXG4rXFx0XFx0dnByLVxcdTAwM2VsYXN0ID0gMFU7XFxuK1xcdH0gZWxzZSBpZiAobGlzdF9pc19maXJzdChcXHUwMDI2YnVmZmVyLVxcdTAwM2VsaXN0LCBcXHUwMDI2dnByLVxcdTAwM2VidWZmZXJzKSkge1xcbitcXHRcXHRlbnRyeSA9IGxpc3RfbmV4dF9lbnRyeShidWZmZXIsIGxpc3QpO1xcbitcXHRcXHR2cHItXFx1MDAzZWZpcnN0ID0gZW50cnktXFx1MDAzZXBhZ2VubztcXG4rXFx0fSBlbHNlIGlmIChsaXN0X2lzX2xhc3QoXFx1MDAyNmJ1ZmZlci1cXHUwMDNlbGlzdCwgXFx1MDAyNnZwci1cXHUwMDNlYnVmZmVycykpIHtcXG4rXFx0XFx0ZW50cnkgPSBsaXN0X3ByZXZfZW50cnkoYnVmZmVyLCBsaXN0KTtcXG4rXFx0XFx0dnByLVxcdTAwM2VsYXN0ID0gZW50cnktXFx1MDAzZXBhZ2VubyArIGVudHJ5LVxcdTAwM2VudW1fcGFnZXMgLSAxO1xcbitcXHR9XFxuK1xcbitcXHRiaXRtYXBfcmVsZWFzZV9yZWdpb24odnByLVxcdTAwM2ViaXRtYXAsIGJ1ZmZlci1cXHUwMDNlcGFnZW5vLCBidWZmZXItXFx1MDAzZW9yZGVyKTtcXG4rXFx0bGlzdF9kZWwoXFx1MDAyNmJ1ZmZlci1cXHUwMDNlbGlzdCk7XFxuK1xcdGtmcmVlKGJ1ZmZlci1cXHUwMDNlcGFnZXMpO1xcbitcXHRrZnJlZShidWZmZXIpO1xcbitcXG4rXFx0Zmlyc3QgPSBmaW5kX2ZpcnN0X2JpdCh2cHItXFx1MDAzZWJpdG1hcCwgdnByLVxcdTAwM2VudW1fcGFnZXMpO1xcbitcXHRsYXN0ID0gZmluZF9sYXN0X2JpdCh2cHItXFx1MDAzZWJpdG1hcCwgdnByLVxcdTAwM2VudW1fcGFnZXMpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHRlZ3JhX3Zwcl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmJ1ZixcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQpXFxuK3tcXG4rXFx0c3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKmJ1ZmZlciA9IGJ1Zi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IHRlZ3JhX3Zwcl9hdHRhY2htZW50ICphdHRhY2g7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRhdHRhY2ggPSBremFsbG9jX29iaigqYXR0YWNoLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFhdHRhY2gpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0ZXJyID0gc2dfYWxsb2NfdGFibGVfZnJvbV9wYWdlcyhcXHUwMDI2YXR0YWNoLVxcdTAwM2VzZ3QsIGJ1ZmZlci1cXHUwMDNlcGFnZXMsXFxuK1xcdFxcdFxcdFxcdFxcdGJ1ZmZlci1cXHUwMDNlbnVtX3BhZ2VzLCAwLCBidWZmZXItXFx1MDAzZXNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBmcmVlO1xcbitcXG4rXFx0YXR0YWNoLVxcdTAwM2VkZXYgPSBhdHRhY2gtXFx1MDAzZWRldjtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmF0dGFjaC1cXHUwMDNlbGlzdCk7XFxuK1xcdGF0dGFjaG1lbnQtXFx1MDAzZXByaXYgPSBhdHRhY2g7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZidWZmZXItXFx1MDAzZWxvY2spO1xcbitcXHRsaXN0X2FkZChcXHUwMDI2YXR0YWNoLVxcdTAwM2VsaXN0LCBcXHUwMDI2YnVmZmVyLVxcdTAwM2VhdHRhY2htZW50cyk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnVmZmVyLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZnJlZTpcXG4rXFx0a2ZyZWUoYXR0YWNoKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVncmFfdnByX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqYnVmLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQpXFxuK3tcXG4rXFx0c3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKmJ1ZmZlciA9IGJ1Zi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IHRlZ3JhX3Zwcl9hdHRhY2htZW50ICphdHRhY2ggPSBhdHRhY2htZW50LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2YnVmZmVyLVxcdTAwM2Vsb2NrKTtcXG4rXFx0bGlzdF9kZWwoXFx1MDAyNmF0dGFjaC1cXHUwMDNlbGlzdCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnVmZmVyLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHNnX2ZyZWVfdGFibGUoXFx1MDAyNmF0dGFjaC1cXHUwMDNlc2d0KTtcXG4rXFx0a2ZyZWUoYXR0YWNoKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBzZ190YWJsZSAqXFxuK3RlZ3JhX3Zwcl9tYXBfZG1hX2J1ZihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxcbitcXHRcXHQgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pXFxuK3tcXG4rXFx0c3RydWN0IHRlZ3JhX3Zwcl9hdHRhY2htZW50ICphdHRhY2ggPSBhdHRhY2htZW50LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3Qgc2dfdGFibGUgKnNndCA9IFxcdTAwMjZhdHRhY2gtXFx1MDAzZXNndDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IGRtYV9tYXBfc2d0YWJsZShhdHRhY2htZW50LVxcdTAwM2VkZXYsIHNndCwgZGlyZWN0aW9uLFxcbitcXHRcXHRcXHQgICAgICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DKTtcXG4rXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuK1xcbitcXHRyZXR1cm4gc2d0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZWdyYV92cHJfdW5tYXBfZG1hX2J1ZihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNnX3RhYmxlICpzZ3QsXFxuK1xcdFxcdFxcdFxcdCAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pXFxuK3tcXG4rXFx0ZG1hX3VubWFwX3NndGFibGUoYXR0YWNobWVudC1cXHUwMDNlZGV2LCBzZ3QsIGRpcmVjdGlvbixcXG4rXFx0XFx0XFx0ICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVncmFfdnByX3JlY3ljbGUoc3RydWN0IHRlZ3JhX3ZwciAqdnByKVxcbit7XFxuK1xcdERFQ0xBUkVfQklUTUFQKGRpcnR5LCB2cHItXFx1MDAzZW51bV9jaHVua3MpO1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGJpdG1hcF96ZXJvKGRpcnR5LCB2cHItXFx1MDAzZW51bV9jaHVua3MpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRGVhY3RpdmF0ZSBhbnkgdW51c2VkIGNodW5rcyBmcm9tIHRoZSBib3R0b20uLi5cXG4rXFx0ICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB2cHItXFx1MDAzZW51bV9jaHVua3M7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuayA9IFxcdTAwMjZ2cHItXFx1MDAzZWNodW5rc1tpXTtcXG4rXFxuK1xcdFxcdGlmICghY2h1bmstXFx1MDAzZWFjdGl2ZSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAoY2h1bmstXFx1MDAzZW51bV9idWZmZXJzIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRlcnIgPSB0ZWdyYV92cHJfY2h1bmtfZGVhY3RpdmF0ZShjaHVuayk7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBkZWFjdGl2YXRlIGNodW5rICMldVxcXFxuXFxcIiwgaSk7XFxuK1xcdFxcdGVsc2Uge1xcbitcXHRcXHRcXHRjbGVhcl9iaXQoaSwgdnByLVxcdTAwM2VhY3RpdmUpO1xcbitcXHRcXHRcXHRzZXRfYml0KGksIGRpcnR5KTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiAuLi4gYW5kIHRoZSB0b3AuXFxuK1xcdCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdnByLVxcdTAwM2VudW1fY2h1bmtzOyBpKyspIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IGluZGV4ID0gdnByLVxcdTAwM2VudW1fY2h1bmtzIC0gaSAtIDE7XFxuK1xcdFxcdHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rID0gXFx1MDAyNnZwci1cXHUwMDNlY2h1bmtzW2luZGV4XTtcXG4rXFxuK1xcdFxcdGlmICghY2h1bmstXFx1MDAzZWFjdGl2ZSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAoY2h1bmstXFx1MDAzZW51bV9idWZmZXJzIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRlcnIgPSB0ZWdyYV92cHJfY2h1bmtfZGVhY3RpdmF0ZShjaHVuayk7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBkZWFjdGl2YXRlIGNodW5rICMldVxcXFxuXFxcIiwgaW5kZXgpO1xcbitcXHRcXHRlbHNlIHtcXG4rXFx0XFx0XFx0Y2xlYXJfYml0KGksIHZwci1cXHUwMDNlYWN0aXZlKTtcXG4rXFx0XFx0XFx0c2V0X2JpdChpLCBkaXJ0eSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFiaXRtYXBfZW1wdHkoZGlydHksIHZwci1cXHUwMDNlbnVtX2NodW5rcykpIHtcXG4rXFx0XFx0ZXJyID0gdGVncmFfdnByX3Jlc2l6ZSh2cHIpO1xcbitcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBzaHJpbmsgVlBSOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0XFx0Z290byBhY3RpdmF0ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm47XFxuK1xcbithY3RpdmF0ZTpcXG4rXFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBkaXJ0eSwgdnByLVxcdTAwM2VudW1fY2h1bmtzKSB7XFxuK1xcdFxcdGVyciA9IHRlZ3JhX3Zwcl9jaHVua19hY3RpdmF0ZShcXHUwMDI2dnByLVxcdTAwM2VjaHVua3NbaV0pO1xcbitcXHRcXHRpZiAoV0FSTl9PTihlcnIgXFx1MDAzYyAwKSlcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gYWN0aXZhdGUgY2h1bmsgIyV1OiAlZFxcXFxuXFxcIiwgaSwgZXJyKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZWdyYV92cHJfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1ZiAqYnVmKVxcbit7XFxuK1xcdHN0cnVjdCB0ZWdyYV92cHJfYnVmZmVyICpidWZmZXIgPSBidWYtXFx1MDAzZXByaXY7XFxuK1xcdHN0cnVjdCB0ZWdyYV92cHIgKnZwciA9IGJ1ZmZlci1cXHUwMDNldnByO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2dnByLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHRlZ3JhX3Zwcl9idWZmZXJfcmVsZWFzZShidWZmZXIpO1xcbitcXG4rXFx0aWYgKHZwci1cXHUwMDNlbnVtX2NodW5rcyBcXHUwMDNlIDApXFxuK1xcdFxcdHRlZ3JhX3Zwcl9yZWN5Y2xlKHZwcik7XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnZwci1cXHUwMDNlbG9jayk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFByb2hpYml0IHVzZXJzcGFjZSBtYXBwaW5nIGJlY2F1c2UgdGhlIENQVSBjYW5ub3QgYWNjZXNzIHRoaXMgbWVtb3J5XFxuKyAqIGFueXdheS5cXG4rICovXFxuK3N0YXRpYyBpbnQgdGVncmFfdnByX2JlZ2luX2NwdV9hY2Nlc3Moc3RydWN0IGRtYV9idWYgKmJ1ZixcXG4rXFx0XFx0XFx0XFx0ICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKVxcbit7XFxuK1xcdHJldHVybiAtRVBFUk07XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGVncmFfdnByX2VuZF9jcHVfYWNjZXNzKHN0cnVjdCBkbWFfYnVmICpidWYsXFxuK1xcdFxcdFxcdFxcdCAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pXFxuK3tcXG4rXFx0cmV0dXJuIC1FUEVSTTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB0ZWdyYV92cHJfbW1hcChzdHJ1Y3QgZG1hX2J1ZiAqYnVmLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4re1xcbitcXHRyZXR1cm4gLUVQRVJNO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHRlZ3JhX3Zwcl9idWZfb3BzID0ge1xcbitcXHQuYXR0YWNoID0gdGVncmFfdnByX2F0dGFjaCxcXG4rXFx0LmRldGFjaCA9IHRlZ3JhX3Zwcl9kZXRhY2gsXFxuK1xcdC5tYXBfZG1hX2J1ZiA9IHRlZ3JhX3Zwcl9tYXBfZG1hX2J1ZixcXG4rXFx0LnVubWFwX2RtYV9idWYgPSB0ZWdyYV92cHJfdW5tYXBfZG1hX2J1ZixcXG4rXFx0LnJlbGVhc2UgPSB0ZWdyYV92cHJfcmVsZWFzZSxcXG4rXFx0LmJlZ2luX2NwdV9hY2Nlc3MgPSB0ZWdyYV92cHJfYmVnaW5fY3B1X2FjY2VzcyxcXG4rXFx0LmVuZF9jcHVfYWNjZXNzID0gdGVncmFfdnByX2VuZF9jcHVfYWNjZXNzLFxcbitcXHQubW1hcCA9IHRlZ3JhX3Zwcl9tbWFwLFxcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBkbWFfYnVmICp0ZWdyYV92cHJfYWxsb2NhdGUoc3RydWN0IGRtYV9oZWFwICpoZWFwLFxcbitcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1MzIgZmRfZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTY0IGhlYXBfZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHRlZ3JhX3ZwciAqdnByID0gZG1hX2hlYXBfZ2V0X2RydmRhdGEoaGVhcCk7XFxuK1xcdHN0cnVjdCB0ZWdyYV92cHJfYnVmZmVyICpidWZmZXIsICplbnRyeTtcXG4rXFx0c2l6ZV90IHNpemUgPSBBTElHTihsZW4sIHZwci1cXHUwMDNlYWxpZ24pO1xcbitcXHRERUZJTkVfRE1BX0JVRl9FWFBPUlRfSU5GTyhleHBvcnQpO1xcbitcXHRzdHJ1Y3QgZG1hX2J1ZiAqYnVmO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2dnByLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGJ1ZmZlciA9IHRlZ3JhX3Zwcl9idWZmZXJfYWxsb2NhdGUodnByLCBzaXplKTtcXG4rXFx0aWYgKElTX0VSUihidWZmZXIpKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dnByLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9DQVNUKGJ1ZmZlcik7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIGluc2VydCBpbiB0aGUgY29ycmVjdCBvcmRlciAqL1xcbitcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNnZwci1cXHUwMDNlYnVmZmVycykpIHtcXG4rXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXFx1MDAyNnZwci1cXHUwMDNlYnVmZmVycywgbGlzdCkge1xcbitcXHRcXHRcXHRpZiAoYnVmZmVyLVxcdTAwM2VwYWdlbm8gXFx1MDAzYyBlbnRyeS1cXHUwMDNlcGFnZW5vKSB7XFxuK1xcdFxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmJ1ZmZlci1cXHUwMDNlbGlzdCwgXFx1MDAyNmVudHJ5LVxcdTAwM2VsaXN0KTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2YnVmZmVyLVxcdTAwM2VsaXN0KSlcXG4rXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2YnVmZmVyLVxcdTAwM2VsaXN0LCBcXHUwMDI2dnByLVxcdTAwM2VidWZmZXJzKTtcXG4rXFxuK1xcdGJ1ZmZlci1cXHUwMDNldnByID0gdnByO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgYSB2YWxpZCBidWZmZXIgd2FzIGFsbG9jYXRlZCwgd3JhcCBpdCBpbiBhIGRtYV9idWZcXG4rXFx0ICogYW5kIHJldHVybiBpdC5cXG4rXFx0ICovXFxuK1xcdGV4cG9ydC5leHBfbmFtZSA9IGRtYV9oZWFwX2dldF9uYW1lKGhlYXApO1xcbitcXHRleHBvcnQub3BzID0gXFx1MDAyNnRlZ3JhX3Zwcl9idWZfb3BzO1xcbitcXHRleHBvcnQuc2l6ZSA9IGJ1ZmZlci1cXHUwMDNlc2l6ZTtcXG4rXFx0ZXhwb3J0LmZsYWdzID0gZmRfZmxhZ3M7XFxuK1xcdGV4cG9ydC5wcml2ID0gYnVmZmVyO1xcbitcXG4rXFx0YnVmID0gZG1hX2J1Zl9leHBvcnQoXFx1MDAyNmV4cG9ydCk7XFxuK1xcdGlmIChJU19FUlIoYnVmKSlcXG4rXFx0XFx0dGVncmFfdnByX2J1ZmZlcl9yZWxlYXNlKGJ1ZmZlcik7XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnZwci1cXHUwMDNlbG9jayk7XFxuK1xcdHJldHVybiBidWY7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlZ3JhX3Zwcl9kZWJ1Z2ZzX3Nob3dfYnVmZmVycyhzdHJ1Y3QgdGVncmFfdnByICp2cHIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzZXFfZmlsZSAqcylcXG4re1xcbitcXHRzdHJ1Y3QgdGVncmFfdnByX2J1ZmZlciAqYnVmZmVyO1xcbitcXHRjaGFyIGJ1ZlsxNl07XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1ZmZlciwgXFx1MDAyNnZwci1cXHUwMDNlYnVmZmVycywgbGlzdCkge1xcbitcXHRcXHRzdHJpbmdfZ2V0X3NpemUoYnVmZmVyLVxcdTAwM2VzaXplLCAxLCBTVFJJTkdfVU5JVFNfMiwgYnVmLFxcbitcXHRcXHRcXHRcXHRzaXplb2YoYnVmKSk7XFxuK1xcdFxcdHNlcV9wcmludGYocywgXFxcIiAgJXBhcC0lcGFwICglcylcXFxcblxcXCIsIFxcdTAwMjZidWZmZXItXFx1MDAzZXN0YXJ0LFxcbitcXHRcXHRcXHQgICBcXHUwMDI2YnVmZmVyLVxcdTAwM2VsaW1pdCwgYnVmKTtcXG4rXFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVncmFfdnByX2RlYnVnZnNfc2hvd19jaHVua3Moc3RydWN0IHRlZ3JhX3ZwciAqdnByLFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzZXFfZmlsZSAqcylcXG4re1xcbitcXHRzdHJ1Y3QgdGVncmFfdnByX2J1ZmZlciAqYnVmZmVyO1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFx0Y2hhciBidWZbMTZdO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHZwci1cXHUwMDNlbnVtX2NodW5rczsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rID0gXFx1MDAyNnZwci1cXHUwMDNlY2h1bmtzW2ldO1xcbitcXG4rXFx0XFx0c3RyaW5nX2dldF9zaXplKGNodW5rLVxcdTAwM2VzaXplLCAxLCBTVFJJTkdfVU5JVFNfMiwgYnVmLFxcbitcXHRcXHRcXHRcXHRzaXplb2YoYnVmKSk7XFxuK1xcdFxcdHNlcV9wcmludGYocywgXFxcIiAgJXBhcC0lcGFwICglcykgKCVzLCAldSBidWZmZXJzKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgXFx1MDAyNmNodW5rLVxcdTAwM2VzdGFydCwgXFx1MDAyNmNodW5rLVxcdTAwM2VsaW1pdCwgYnVmLFxcbitcXHRcXHRcXHQgICBjaHVuay1cXHUwMDNlYWN0aXZlID8gXFxcImFjdGl2ZVxcXCIgOiBcXFwiaW5hY3RpdmVcXFwiLFxcbitcXHRcXHRcXHQgICBjaHVuay1cXHUwMDNlbnVtX2J1ZmZlcnMpO1xcbitcXHR9XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1ZmZlciwgXFx1MDAyNnZwci1cXHUwMDNlYnVmZmVycywgbGlzdCkge1xcbitcXHRcXHRzdHJpbmdfZ2V0X3NpemUoYnVmZmVyLVxcdTAwM2VzaXplLCAxLCBTVFJJTkdfVU5JVFNfMiwgYnVmLFxcbitcXHRcXHRcXHRcXHRzaXplb2YoYnVmKSk7XFxuK1xcdFxcdHNlcV9wcmludGYocywgXFxcIiVwYXAtJXBhcCAoJXMsIGNodW5rczogJSpwYmwpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBcXHUwMDI2YnVmZmVyLVxcdTAwM2VzdGFydCwgXFx1MDAyNmJ1ZmZlci1cXHUwMDNlbGltaXQsIGJ1ZixcXG4rXFx0XFx0XFx0ICAgdnByLVxcdTAwM2VudW1fY2h1bmtzLCBidWZmZXItXFx1MDAzZWNodW5rcyk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCB0ZWdyYV92cHJfZGVidWdmc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGRtYV9oZWFwICpoZWFwKVxcbit7XFxuK1xcdHN0cnVjdCB0ZWdyYV92cHIgKnZwciA9IGRtYV9oZWFwX2dldF9kcnZkYXRhKGhlYXApO1xcbitcXHRwaHlzX2FkZHJfdCBsaW1pdCA9IHZwci1cXHUwMDNlYmFzZSArIHZwci1cXHUwMDNlc2l6ZTtcXG4rXFx0Y2hhciBidWZbMTZdO1xcbitcXG4rXFx0c3RyaW5nX2dldF9zaXplKHZwci1cXHUwMDNlc2l6ZSwgMSwgU1RSSU5HX1VOSVRTXzIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlcGFwLSVwYXAgKCVzKVxcXFxuXFxcIiwgXFx1MDAyNnZwci1cXHUwMDNlYmFzZSwgXFx1MDAyNmxpbWl0LCBidWYpO1xcbitcXG4rXFx0aWYgKHZwci1cXHUwMDNlbnVtX2NodW5rcyA9PSAwKVxcbitcXHRcXHR0ZWdyYV92cHJfZGVidWdmc19zaG93X2J1ZmZlcnModnByLCBzKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR0ZWdyYV92cHJfZGVidWdmc19zaG93X2NodW5rcyh2cHIsIHMpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2hlYXBfb3BzIHRlZ3JhX3Zwcl9oZWFwX29wcyA9IHtcXG4rXFx0LmFsbG9jYXRlID0gdGVncmFfdnByX2FsbG9jYXRlLFxcbitcXHQuc2hvdyA9IHRlZ3JhX3Zwcl9kZWJ1Z2ZzX3Nob3csXFxuK307XFxuK1xcbitzdGF0aWMgaW50IHRlZ3JhX3Zwcl9zZXR1cF9jaHVua3Moc3RydWN0IHRlZ3JhX3ZwciAqdnByLCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdHBoeXNfYWRkcl90IHN0YXJ0LCBsaW1pdDtcXG4rXFx0dW5zaWduZWQgaW50IG9yZGVyLCBpO1xcbitcXHRzaXplX3QgbWF4X3NpemU7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHQvKiBUaGlzIHNlZW1zIGEgcmVhc29uYWJsZSB2YWx1ZSwgc28gaGFyZC1jb2RlIHRoaXMgZm9yIG5vdy4gKi9cXG4rXFx0dnByLVxcdTAwM2VudW1fY2h1bmtzID0gNDtcXG4rXFxuK1xcdHZwci1cXHUwMDNlY2h1bmtzID0ga2NhbGxvYyh2cHItXFx1MDAzZW51bV9jaHVua3MsIHNpemVvZigqdnByLVxcdTAwM2VjaHVua3MpLFxcbitcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCF2cHItXFx1MDAzZWNodW5rcylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRtYXhfc2l6ZSA9IFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyAoZ2V0X29yZGVyKHZwci1cXHUwMDNlc2l6ZSkgLSBpbG9nMih2cHItXFx1MDAzZW51bV9jaHVua3MpKTtcXG4rXFx0b3JkZXIgPSBnZXRfb3JkZXIodnByLVxcdTAwM2VhbGlnbik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBbGxvY2F0ZSBDTUEgYXJlYXMgZm9yIFZQUi4gQWxsIGFyZWFzIHdpbGwgYmUgcm91Z2h0bHkgdGhlIHNhbWVcXG4rXFx0ICogc2l6ZSwgd2l0aCB0aGUgbGFzdCBhcmVhIHRha2luZyB1cCB0aGUgcmVzdC5cXG4rXFx0ICovXFxuK1xcdHN0YXJ0ID0gdnByLVxcdTAwM2ViYXNlO1xcbitcXHRsaW1pdCA9IHZwci1cXHUwMDNlYmFzZSArIHZwci1cXHUwMDNlc2l6ZTtcXG4rXFxuK1xcdHByX2RlYnVnKFxcXCJWUFI6ICVwYXAtJXBhcCAoJWx1IHBhZ2VzLCAldSBjaHVua3MsICVsdSBNaUIpXFxcXG5cXFwiLCBcXHUwMDI2c3RhcnQsXFxuK1xcdFxcdCBcXHUwMDI2bGltaXQsIHZwci1cXHUwMDNlbnVtX3BhZ2VzLCB2cHItXFx1MDAzZW51bV9jaHVua3MsXFxuK1xcdFxcdCAodW5zaWduZWQgbG9uZyl2cHItXFx1MDAzZXNpemUgLyAxMDI0IC8gMTAyNCk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdnByLVxcdTAwM2VudW1fY2h1bmtzOyBpKyspIHtcXG4rXFx0XFx0c2l6ZV90IHNpemUgPSBsaW1pdCAtIHN0YXJ0O1xcbitcXHRcXHRwaHlzX2FkZHJfdCBlbmQ7XFxuK1xcbitcXHRcXHRzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBtYXhfc2l6ZSk7XFxuK1xcdFxcdGVuZCA9IHN0YXJ0ICsgc2l6ZSAtIDE7XFxuK1xcbitcXHRcXHRlcnIgPSB0ZWdyYV92cHJfY2h1bmtfaW5pdCh2cHIsIFxcdTAwMjZ2cHItXFx1MDAzZWNodW5rc1tpXSwgc3RhcnQsIHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIG9yZGVyLCBuYW1lKTtcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gY3JlYXRlIFZQUiBjaHVuazogJWRcXFxcblxcXCIsIGVycik7XFxuK1xcdFxcdFxcdGdvdG8gZnJlZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cHJfZGVidWcoXFxcIiAgJTJ1OiAlcGFwLSVwYXAgKCVsdSBNaUIpXFxcXG5cXFwiLCBpLCBcXHUwMDI2c3RhcnQsIFxcdTAwMjZlbmQsXFxuK1xcdFxcdFxcdCBzaXplIC8gMTAyNCAvIDEwMjQpO1xcbitcXHRcXHRzdGFydCArPSBzaXplO1xcbitcXHR9XFxuK1xcbitcXHR2cHItXFx1MDAzZWZpcnN0ID0gfjBVO1xcbitcXHR2cHItXFx1MDAzZWxhc3QgPSAwVTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZnJlZTpcXG4rXFx0d2hpbGUgKGktLSlcXG4rXFx0XFx0dGVncmFfdnByX2NodW5rX2ZyZWUoXFx1MDAyNnZwci1cXHUwMDNlY2h1bmtzW2ldKTtcXG4rXFxuK1xcdGtmcmVlKHZwci1cXHUwMDNlY2h1bmtzKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVncmFfdnByX2ZyZWVfY2h1bmtzKHN0cnVjdCB0ZWdyYV92cHIgKnZwcilcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB2cHItXFx1MDAzZW51bV9jaHVua3M7IGkrKylcXG4rXFx0XFx0dGVncmFfdnByX2NodW5rX2ZyZWUoXFx1MDAyNnZwci1cXHUwMDNlY2h1bmtzW2ldKTtcXG4rXFxuK1xcdGtmcmVlKHZwci1cXHUwMDNlY2h1bmtzKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB0ZWdyYV92cHJfc2V0dXBfc3RhdGljKHN0cnVjdCB0ZWdyYV92cHIgKnZwcilcXG4re1xcbitcXHRwaHlzX2FkZHJfdCBzdGFydCwgbGltaXQ7XFxuK1xcbitcXHRzdGFydCA9IHZwci1cXHUwMDNlYmFzZTtcXG4rXFx0bGltaXQgPSB2cHItXFx1MDAzZWJhc2UgKyB2cHItXFx1MDAzZXNpemU7XFxuK1xcbitcXHRwcl9kZWJ1ZyhcXFwiVlBSOiAlcGFwLSVwYXAgKCVsdSBwYWdlcywgJWx1IE1pQilcXFxcblxcXCIsIFxcdTAwMjZzdGFydCwgXFx1MDAyNmxpbWl0LFxcbitcXHRcXHQgdnByLVxcdTAwM2VudW1fcGFnZXMsICh1bnNpZ25lZCBsb25nKXZwci1cXHUwMDNlc2l6ZSAvIDEwMjQgLyAxMDI0KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCB0ZWdyYV92cHJfYWRkX2hlYXAoc3RydWN0IHJlc2VydmVkX21lbSAqcm1lbSxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfaGVhcF9leHBvcnRfaW5mbyBpbmZvID0ge307XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmlyc3QsIGxhc3Q7XFxuK1xcdHN0cnVjdCBkbWFfaGVhcCAqaGVhcDtcXG4rXFx0c3RydWN0IHRlZ3JhX3ZwciAqdnByO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0dnByID0ga3phbGxvY19vYmooKnZwciwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghdnByKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ2cHItXFx1MDAzZWJ1ZmZlcnMpO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dnByLVxcdTAwM2VkZXZpY2VzKTtcXG4rXFx0dnByLVxcdTAwM2VyZXNpemFibGUgPSAhb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCBcXFwibm8tbWFwXFxcIik7XFxuK1xcdHZwci1cXHUwMDNldXNlX2ZyZWV6ZXIgPSB0cnVlO1xcbitcXHR2cHItXFx1MDAzZWRldl9ub2RlID0gbnA7XFxuK1xcdHZwci1cXHUwMDNlYWxpZ24gPSBQQUdFX1NJWkU7XFxuK1xcdHZwci1cXHUwMDNlYmFzZSA9IHJtZW0tXFx1MDAzZWJhc2U7XFxuK1xcdHZwci1cXHUwMDNlc2l6ZSA9IHJtZW0tXFx1MDAzZXNpemU7XFxuK1xcbitcXHQvKiBjb21tb24gc2V0dXAgKi9cXG4rXFx0dnByLVxcdTAwM2VzdGFydF9wYWdlID0gcGh5c190b19wYWdlKHZwci1cXHUwMDNlYmFzZSk7XFxuK1xcdHZwci1cXHUwMDNlbnVtX3BhZ2VzID0gdnByLVxcdTAwM2VzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcbitcXHR2cHItXFx1MDAzZWJpdG1hcCA9IGJpdG1hcF96YWxsb2ModnByLVxcdTAwM2VudW1fcGFnZXMsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXZwci1cXHUwMDNlYml0bWFwKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0Zmlyc3QgPSBmaW5kX2ZpcnN0X2JpdCh2cHItXFx1MDAzZWJpdG1hcCwgdnByLVxcdTAwM2VudW1fcGFnZXMpO1xcbitcXHRsYXN0ID0gZmluZF9sYXN0X2JpdCh2cHItXFx1MDAzZWJpdG1hcCwgdnByLVxcdTAwM2VudW1fcGFnZXMpO1xcbitcXG4rXFx0aWYgKHZwci1cXHUwMDNlcmVzaXphYmxlKVxcbitcXHRcXHRlcnIgPSB0ZWdyYV92cHJfc2V0dXBfY2h1bmtzKHZwciwgcm1lbS1cXHUwMDNlbmFtZSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZXJyID0gdGVncmFfdnByX3NldHVwX3N0YXRpYyh2cHIpO1xcbitcXG4rXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZnJlZTtcXG4rXFxuK1xcdGluZm8ubmFtZSA9IHZwci1cXHUwMDNlZGV2X25vZGUtXFx1MDAzZW5hbWU7XFxuK1xcdGluZm8ub3BzID0gXFx1MDAyNnRlZ3JhX3Zwcl9oZWFwX29wcztcXG4rXFx0aW5mby5wcml2ID0gdnByO1xcbitcXG4rXFx0aGVhcCA9IGRtYV9oZWFwX2FkZChcXHUwMDI2aW5mbyk7XFxuK1xcdGlmIChJU19FUlIoaGVhcCkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihoZWFwKTtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRybWVtLVxcdTAwM2Vwcml2ID0gaGVhcDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rY2xlYW51cDpcXG4rXFx0aWYgKHZwci1cXHUwMDNlcmVzaXphYmxlKVxcbitcXHRcXHR0ZWdyYV92cHJfZnJlZV9jaHVua3ModnByKTtcXG4rZnJlZTpcXG4rXFx0Yml0bWFwX2ZyZWUodnByLVxcdTAwM2ViaXRtYXApO1xcbitcXHRrZnJlZSh2cHIpO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCB0ZWdyYV92cHJfaW5pdCh2b2lkKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKmNvbXBhdGlibGUgPSBcXFwibnZpZGlhLHRlZ3JhLXZpZGVvLXByb3RlY3Rpb24tcmVnaW9uXFxcIjtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7XFxuK1xcdHN0cnVjdCByZXNlcnZlZF9tZW0gKnJtZW07XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRwYXJlbnQgPSBvZl9maW5kX25vZGVfYnlfcGF0aChcXFwiL3Jlc2VydmVkLW1lbW9yeVxcXCIpO1xcbitcXHRpZiAoIXBhcmVudClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChwYXJlbnQsIGNoaWxkKSB7XFxuK1xcdFxcdGlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoY2hpbGQsIGNvbXBhdGlibGUpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHJtZW0gPSBvZl9yZXNlcnZlZF9tZW1fbG9va3VwKGNoaWxkKTtcXG4rXFx0XFx0aWYgKCFybWVtKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IHRlZ3JhX3Zwcl9hZGRfaGVhcChybWVtLCBjaGlsZCk7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBhZGQgVlBSIGhlYXAgZm9yICVwT0Y6ICVkXFxcXG5cXFwiLCBjaGlsZCxcXG4rXFx0XFx0XFx0ICAgICAgIGVycik7XFxuK1xcbitcXHRcXHQvKiBvbmx5IGEgc2luZ2xlIFZQUiBoZWFwIGlzIHN1cHBvcnRlZCAqL1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rbW9kdWxlX2luaXQodGVncmFfdnByX2luaXQpO1xcbitcXG4rc3RhdGljIGludCB0ZWdyYV92cHJfbm9kZV9pbml0KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpybWVtKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHRlZ3JhX3Zwcl9kZXZpY2VfaW5pdChzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpybWVtLCBzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRtYV9oZWFwICpoZWFwID0gcm1lbS1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IHRlZ3JhX3ZwciAqdnByID0gZG1hX2hlYXBfZ2V0X2RydmRhdGEoaGVhcCk7XFxuK1xcdHN0cnVjdCB0ZWdyYV92cHJfZGV2aWNlICpub2RlO1xcbitcXG4rXFx0aWYgKCFkZXYtXFx1MDAzZWRyaXZlci1cXHUwMDNlcG0tXFx1MDAzZWZyZWV6ZSB8fCAhZGV2LVxcdTAwM2Vkcml2ZXItXFx1MDAzZXBtLVxcdTAwM2V0aGF3KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdG5vZGUgPSBremFsbG9jX29iaigqbm9kZSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghbm9kZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bm9kZS1cXHUwMDNlbm9kZSk7XFxuK1xcdG5vZGUtXFx1MDAzZWRldiA9IGRldjtcXG4rXFxuK1xcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNm5vZGUtXFx1MDAzZW5vZGUsIFxcdTAwMjZ2cHItXFx1MDAzZWRldmljZXMpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlZ3JhX3Zwcl9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpybWVtLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBkZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgZG1hX2hlYXAgKmhlYXAgPSBybWVtLVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgdGVncmFfdnByICp2cHIgPSBkbWFfaGVhcF9nZXRfZHJ2ZGF0YShoZWFwKTtcXG4rXFx0c3RydWN0IHRlZ3JhX3Zwcl9kZXZpY2UgKm5vZGUsICp0bXA7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgdG1wLCBcXHUwMDI2dnByLVxcdTAwM2VkZXZpY2VzLCBub2RlKSB7XFxuK1xcdFxcdGlmIChub2RlLVxcdTAwM2VkZXYgPT0gZGV2KSB7XFxuK1xcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZub2RlLVxcdTAwM2Vub2RlKTtcXG4rXFx0XFx0XFx0a2ZyZWUobm9kZSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJlc2VydmVkX21lbV9vcHMgdGVncmFfdnByX3JtZW1fb3BzID0ge1xcbitcXHQubm9kZV9pbml0ID0gdGVncmFfdnByX25vZGVfaW5pdCxcXG4rXFx0LmRldmljZV9pbml0ID0gdGVncmFfdnByX2RldmljZV9pbml0LFxcbitcXHQuZGV2aWNlX3JlbGVhc2UgPSB0ZWdyYV92cHJfZGV2aWNlX3JlbGVhc2UsXFxuK307XFxuK1xcbitSRVNFUlZFRE1FTV9PRl9ERUNMQVJFKHRlZ3JhX3ZwciwgXFxcIm52aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvblxcXCIsXFxuK1xcdFxcdCAgICAgICBcXHUwMDI2dGVncmFfdnByX3JtZW1fb3BzKTtcXG4rXFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiTlZJRElBIFRlZ3JhIFZpZGVvLVByb3RlY3Rpb24tUmVnaW9uIERNQS1CVUYgaGVhcCBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oIGIvaW5jbHVkZS9saW51eC9iaXRtYXAuaFxcbmluZGV4IGIwMDdkNTRhOTAzNmE1Li5kY2M4MWRjMDgyZWRjOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9iaXRtYXAuaFxcbkBAIC03MjEsMTAgKzcyMSwxMCBAQCB2b2lkIGJpdG1hcF9yZWxlYXNlX3JlZ2lvbih1bnNpZ25lZCBsb25nICpiaXRtYXAsIHVuc2lnbmVkIGludCBwb3MsIGludCBvcmRlcilcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIGJpdG1hcF9hbGxvY2F0ZV9yZWdpb24gLSBhbGxvY2F0ZSBiaXRtYXAgcmVnaW9uXFxuKyAqIGJpdG1hcF9hbGxvY2F0ZSAtIGFsbG9jYXRlIGJpdG1hcCByZWdpb25cXG4gICpcXHRAYml0bWFwOiBhcnJheSBvZiB1bnNpZ25lZCBsb25ncyBjb3JyZXNwb25kaW5nIHRvIHRoZSBiaXRtYXBcXG4gICpcXHRAcG9zOiBiZWdpbm5pbmcgb2YgYml0IHJlZ2lvbiB0byBhbGxvY2F0ZVxcbi0gKlxcdEBvcmRlcjogcmVnaW9uIHNpemUgKGxvZyBiYXNlIDIgb2YgbnVtYmVyIG9mIGJpdHMpIHRvIGFsbG9jYXRlXFxuKyAqXFx0QGxlbjogbnVtYmVyIG9mIGJpdHMgdG8gYWxsb2NhdGVcXG4gICpcXG4gICogQWxsb2NhdGUgKHNldCBiaXRzIGluKSBhIHNwZWNpZmllZCByZWdpb24gb2YgYSBiaXRtYXAuXFxuICAqXFxuQEAgLTczMiwxNiArNzMyLDMxIEBAIHZvaWQgYml0bWFwX3JlbGVhc2VfcmVnaW9uKHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgdW5zaWduZWQgaW50IHBvcywgaW50IG9yZGVyKVxcbiAgKiBmcmVlIChub3QgYWxsIGJpdHMgd2VyZSB6ZXJvKS5cXG4gICovXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXG4taW50IGJpdG1hcF9hbGxvY2F0ZV9yZWdpb24odW5zaWduZWQgbG9uZyAqYml0bWFwLCB1bnNpZ25lZCBpbnQgcG9zLCBpbnQgb3JkZXIpXFxuK2ludCBiaXRtYXBfYWxsb2NhdGUodW5zaWduZWQgbG9uZyAqYml0bWFwLCB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgbGVuKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBsZW4gPSBCSVQob3JkZXIpO1xcbi1cXG4gXFx0aWYgKGZpbmRfbmV4dF9iaXQoYml0bWFwLCBwb3MgKyBsZW4sIHBvcykgXFx1MDAzYyBwb3MgKyBsZW4pXFxuIFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcdGJpdG1hcF9zZXQoYml0bWFwLCBwb3MsIGxlbik7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKipcXG4rICogYml0bWFwX2FsbG9jYXRlX3JlZ2lvbiAtIGFsbG9jYXRlIGJpdG1hcCByZWdpb25cXG4rICpcXHRAYml0bWFwOiBhcnJheSBvZiB1bnNpZ25lZCBsb25ncyBjb3JyZXNwb25kaW5nIHRvIHRoZSBiaXRtYXBcXG4rICpcXHRAcG9zOiBiZWdpbm5pbmcgb2YgYml0IHJlZ2lvbiB0byBhbGxvY2F0ZVxcbisgKlxcdEBvcmRlcjogcmVnaW9uIHNpemUgKGxvZyBiYXNlIDIgb2YgbnVtYmVyIG9mIGJpdHMpIHRvIGFsbG9jYXRlXFxuKyAqXFxuKyAqIEFsbG9jYXRlIChzZXQgYml0cyBpbikgYSBzcGVjaWZpZWQgcmVnaW9uIG9mIGEgYml0bWFwLlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG9yICUtRUJVU1kgaWYgc3BlY2lmaWVkIHJlZ2lvbiB3YXNuJ3RcXG4rICogZnJlZSAobm90IGFsbCBiaXRzIHdlcmUgemVybykuXFxuKyAqL1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lXFxuK2ludCBiaXRtYXBfYWxsb2NhdGVfcmVnaW9uKHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgdW5zaWduZWQgaW50IHBvcywgaW50IG9yZGVyKVxcbit7XFxuK1xcdHJldHVybiBiaXRtYXBfYWxsb2NhdGUoYml0bWFwLCBwb3MsIEJJVChvcmRlcikpO1xcbit9XFxuK1xcbiAvKipcXG4gICogYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24gLSBmaW5kIGEgY29udGlndW91cyBhbGlnbmVkIG1lbSByZWdpb25cXG4gICpcXHRAYml0bWFwOiBhcnJheSBvZiB1bnNpZ25lZCBsb25ncyBjb3JyZXNwb25kaW5nIHRvIHRoZSBiaXRtYXBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbWEuaCBiL2luY2x1ZGUvbGludXgvY21hLmhcXG5pbmRleCA4NTU1ZDM4YTk3YjFhNS4uZmI3YTQ5MjNjM2JhOWEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9jbWEuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvY21hLmhcXG5AQCAtNyw3ICs3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L251bWEuaFxcdTAwM2VcXG4gXFxuICNpZmRlZiBDT05GSUdfQ01BX0FSRUFTXFxuLSNkZWZpbmUgTUFYX0NNQV9BUkVBU1xcdENPTkZJR19DTUFfQVJFQVNcXG4rI2RlZmluZSBNQVhfRUFSTFlfQ01BX0FSRUFTXFx0Q09ORklHX0NNQV9BUkVBU1xcbiAjZW5kaWZcXG4gXFxuICNkZWZpbmUgQ01BX01BWF9OQU1FIDY0XFxuQEAgLTU3LDggKzU3LDE0IEBAIHN0cnVjdCBwYWdlICpjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG4gYm9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgY291bnQpO1xcbiBcXG4rZXh0ZXJuIGludCBjbWFfZm9yX2VhY2hfZWFybHlfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7XFxuIGV4dGVybiBpbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpO1xcbiBleHRlcm4gYm9vbCBjbWFfaW50ZXJzZWN0cyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcXG4gXFxuIGV4dGVybiB2b2lkIGNtYV9yZXNlcnZlX3BhZ2VzX29uX2Vycm9yKHN0cnVjdCBjbWEgKmNtYSk7XFxuK1xcbitleHRlcm4gc3RydWN0IGNtYSAqY21hX2NyZWF0ZShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxcbitcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgb3JkZXJfcGVyX2JpdCwgY29uc3QgY2hhciAqbmFtZSk7XFxuK2V4dGVybiB2b2lkIGNtYV9mcmVlKHN0cnVjdCBjbWEgKmNtYSk7XFxuK1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtaGVhcC5oIGIvaW5jbHVkZS9saW51eC9kbWEtaGVhcC5oXFxuaW5kZXggNjQ4MzI4YTY0YjI3ZWEuLjFjOWJlZDFmNGRkZWY5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWhlYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZG1hLWhlYXAuaFxcbkBAIC0xMiw2ICsxMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiBcXG4gc3RydWN0IGRtYV9oZWFwO1xcbitzdHJ1Y3Qgc2VxX2ZpbGU7XFxuIFxcbiAvKipcXG4gICogc3RydWN0IGRtYV9oZWFwX29wcyAtIG9wcyB0byBvcGVyYXRlIG9uIGEgZ2l2ZW4gaGVhcFxcbkBAIC0yNCw2ICsyNSw3IEBAIHN0cnVjdCBkbWFfaGVhcF9vcHMge1xcbiBcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBsZW4sXFxuIFxcdFxcdFxcdFxcdCAgICB1MzIgZmRfZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdCAgICB1NjQgaGVhcF9mbGFncyk7XFxuK1xcdGludCAoKnNob3cpKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGRtYV9oZWFwICpoZWFwKTtcXG4gfTtcXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaCBiL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXFxuaW5kZXggMzAzMGQ5MjQ1ZjVhYzguLmFiY2IxMTM3OGZkYmQ4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmhcXG5AQCAtNzIsNiArNzIsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgY2xlYXJfbWNlX25vc3BlYyh1bnNpZ25lZCBsb25nIHBmbilcXG4gfVxcbiAjZW5kaWZcXG4gXFxuKyNpZm5kZWYgQ09ORklHX0FSTTY0XFxuK3N0YXRpYyBpbmxpbmUgaW50IHNldF9tZW1vcnlfZGV2aWNlKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK3N0YXRpYyBpbmxpbmUgaW50IHNldF9tZW1vcnlfbm9ybWFsKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuKyNlbmRpZlxcbitcXG4gI2lmbmRlZiBDT05GSUdfQVJDSF9IQVNfTUVNX0VOQ1JZUFRcXG4gc3RhdGljIGlubGluZSBpbnQgc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdGVncmFfdnByLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy90ZWdyYV92cHIuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY4Y2ViMTc2NzlmZTBhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3RlZ3JhX3Zwci5oXFxuQEAgLTAsMCArMSw1NyBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbitcXG4rI2lmICFkZWZpbmVkKF9UUkFDRV9URUdSQV9WUFJfSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRClcXG4rI2RlZmluZSBfVFJBQ0VfVEVHUkFfVlBSX0hcXG4rXFxuKyN1bmRlZiBUUkFDRV9TWVNURU1cXG4rI2RlZmluZSBUUkFDRV9TWVNURU0gdGVncmFfdnByXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHJhY2Vwb2ludC5oXFx1MDAzZVxcbitcXG4rVFJBQ0VfRVZFTlQodGVncmFfdnByX2NodW5rX2FjdGl2YXRlLFxcbitcXHRUUF9QUk9UTyhwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgbGltaXQpLFxcbitcXHRUUF9BUkdTKHN0YXJ0LCBsaW1pdCksXFxuK1xcdFRQX1NUUlVDVF9fZW50cnkoXFxuK1xcdFxcdF9fZmllbGQocGh5c19hZGRyX3QsIHN0YXJ0KVxcbitcXHRcXHRfX2ZpZWxkKHBoeXNfYWRkcl90LCBsaW1pdClcXG4rXFx0KSxcXG4rXFx0VFBfZmFzdF9hc3NpZ24oXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZXN0YXJ0ID0gc3RhcnQ7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWxpbWl0ID0gbGltaXQ7XFxuK1xcdCksXFxuK1xcdFRQX3ByaW50ayhcXFwiJXBhcC0lcGFwXFxcIiwgXFx1MDAyNl9fZW50cnktXFx1MDAzZXN0YXJ0LFxcbitcXHRcXHQgIFxcdTAwMjZfX2VudHJ5LVxcdTAwM2VsaW1pdClcXG4rKTtcXG4rXFxuK1RSQUNFX0VWRU5UKHRlZ3JhX3Zwcl9jaHVua19kZWFjdGl2YXRlLFxcbitcXHRUUF9QUk9UTyhwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgbGltaXQpLFxcbitcXHRUUF9BUkdTKHN0YXJ0LCBsaW1pdCksXFxuK1xcdFRQX1NUUlVDVF9fZW50cnkoXFxuK1xcdFxcdF9fZmllbGQocGh5c19hZGRyX3QsIHN0YXJ0KVxcbitcXHRcXHRfX2ZpZWxkKHBoeXNfYWRkcl90LCBsaW1pdClcXG4rXFx0KSxcXG4rXFx0VFBfZmFzdF9hc3NpZ24oXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZXN0YXJ0ID0gc3RhcnQ7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWxpbWl0ID0gbGltaXQ7XFxuK1xcdCksXFxuK1xcdFRQX3ByaW50ayhcXFwiJXBhcC0lcGFwXFxcIiwgXFx1MDAyNl9fZW50cnktXFx1MDAzZXN0YXJ0LFxcbitcXHRcXHQgIFxcdTAwMjZfX2VudHJ5LVxcdTAwM2VsaW1pdClcXG4rKTtcXG4rXFxuK1RSQUNFX0VWRU5UKHRlZ3JhX3Zwcl9zZXQsXFxuK1xcdFRQX1BST1RPKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpLFxcbitcXHRUUF9BUkdTKGJhc2UsIHNpemUpLFxcbitcXHRUUF9TVFJVQ1RfX2VudHJ5KFxcbitcXHRcXHRfX2ZpZWxkKHBoeXNfYWRkcl90LCBzdGFydClcXG4rXFx0XFx0X19maWVsZChwaHlzX2FkZHJfdCwgbGltaXQpXFxuK1xcdCksXFxuK1xcdFRQX2Zhc3RfYXNzaWduKFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VzdGFydCA9IGJhc2U7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWxpbWl0ID0gYmFzZSArIHNpemU7XFxuK1xcdCksXFxuK1xcdFRQX3ByaW50ayhcXFwiJXBhcC0lcGFwXFxcIiwgXFx1MDAyNl9fZW50cnktXFx1MDAzZXN0YXJ0LCBcXHUwMDI2X19lbnRyeS1cXHUwMDNlbGltaXQpXFxuKyk7XFxuK1xcbisjZW5kaWYgLyogX1RSQUNFX1RFR1JBX1ZQUl9IICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdHJhY2UvZGVmaW5lX3RyYWNlLmhcXHUwMDNlXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvY29udGlndW91cy5jIGIva2VybmVsL2RtYS9jb250aWd1b3VzLmNcXG5pbmRleCBmNzU0MDc5YTI4N2Q2MS4uNzk3NTU1MWY2OWIzZDkgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2RtYS9jb250aWd1b3VzLmNcXG4rKysgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xcbkBAIC01Miw3ICs1Miw3IEBAXFxuICNkZWZpbmUgQ01BX1NJWkVfTUJZVEVTIDBcXG4gI2VuZGlmXFxuIFxcbi1zdGF0aWMgc3RydWN0IGNtYSAqZG1hX2NvbnRpZ3VvdXNfYXJlYXNbTUFYX0NNQV9BUkVBU107XFxuK3N0YXRpYyBzdHJ1Y3QgY21hICpkbWFfY29udGlndW91c19hcmVhc1tNQVhfRUFSTFlfQ01BX0FSRUFTXTtcXG4gc3RhdGljIHVuc2lnbmVkIGludCBkbWFfY29udGlndW91c19hcmVhc19udW07XFxuIFxcbiBzdGF0aWMgaW50IGRtYV9jb250aWd1b3VzX2luc2VydF9hcmVhKHN0cnVjdCBjbWEgKmNtYSlcXG5kaWZmIC0tZ2l0IGEvbW0vY21hLmMgYi9tbS9jbWEuY1xcbmluZGV4IGExM2NlNDk5OWIzOWY2Li5mOTg5ZTJlOTg1OTRmYiAxMDA2NDRcXG4tLS0gYS9tbS9jbWEuY1xcbisrKyBiL21tL2NtYS5jXFxuQEAgLTM0LDcgKzM0LDEyIEBAXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiY21hLmhcXFwiXFxuIFxcbi1zdHJ1Y3QgY21hIGNtYV9hcmVhc1tNQVhfQ01BX0FSRUFTXTtcXG4rc3RhdGljIERFRklORV9NVVRFWChjbWFfbG9jayk7XFxuK1xcbitzdHJ1Y3QgY21hIGNtYV9lYXJseV9hcmVhc1tNQVhfRUFSTFlfQ01BX0FSRUFTXTtcXG4rdW5zaWduZWQgaW50IGNtYV9lYXJseV9hcmVhX2NvdW50O1xcbitcXG4rc3RhdGljIExJU1RfSEVBRChjbWFfYXJlYXMpO1xcbiB1bnNpZ25lZCBpbnQgY21hX2FyZWFfY291bnQ7XFxuIFxcbiBwaHlzX2FkZHJfdCBjbWFfZ2V0X2Jhc2UoY29uc3Qgc3RydWN0IGNtYSAqY21hKVxcbkBAIC0xOTgsNyArMjAzLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IGNtYV9hY3RpdmF0ZV9hcmVhKHN0cnVjdCBjbWEgKmNtYSlcXG4gXFx0XFx0XFx0XFx0ZnJlZV9yZXNlcnZlZF9wYWdlKHBmbl90b19wYWdlKHBmbikpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFx0dG90YWxjbWFfcGFnZXMgLT0gY21hLVxcdTAwM2Vjb3VudDtcXG4gXFx0Y21hLVxcdTAwM2VhdmFpbGFibGVfY291bnQgPSBjbWEtXFx1MDAzZWNvdW50ID0gMDtcXG4gXFx0cHJfZXJyKFxcXCJDTUEgYXJlYSAlcyBjb3VsZCBub3QgYmUgYWN0aXZhdGVkXFxcXG5cXFwiLCBjbWEtXFx1MDAzZW5hbWUpO1xcbiB9XFxuQEAgLTIwNyw4ICsyMTEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBjbWFfaW5pdF9yZXNlcnZlZF9hcmVhcyh2b2lkKVxcbiB7XFxuIFxcdGludCBpO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNtYV9hcmVhX2NvdW50OyBpKyspXFxuLVxcdFxcdGNtYV9hY3RpdmF0ZV9hcmVhKFxcdTAwMjZjbWFfYXJlYXNbaV0pO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY21hX2Vhcmx5X2FyZWFfY291bnQ7IGkrKylcXG4rXFx0XFx0Y21hX2FjdGl2YXRlX2FyZWEoXFx1MDAyNmNtYV9lYXJseV9hcmVhc1tpXSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0yMTksNDEgKzIyMyw3NyBAQCB2b2lkIF9faW5pdCBjbWFfcmVzZXJ2ZV9wYWdlc19vbl9lcnJvcihzdHJ1Y3QgY21hICpjbWEpXFxuIFxcdHNldF9iaXQoQ01BX1JFU0VSVkVfUEFHRVNfT05fRVJST1IsIFxcdTAwMjZjbWEtXFx1MDAzZWZsYWdzKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgX19pbml0IGNtYV9pbml0X2FyZWEoc3RydWN0IGNtYSAqY21hLCBjb25zdCBjaGFyICpuYW1lLFxcbitcXHRcXHRcXHRcXHQgcGh5c19hZGRyX3Qgc2l6ZSwgdW5zaWduZWQgaW50IG9yZGVyX3Blcl9iaXQpXFxuK3tcXG4rXFx0aWYgKG5hbWUpXFxuK1xcdFxcdHN0cnNjcHkoY21hLVxcdTAwM2VuYW1lLCBuYW1lKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRzbnByaW50ZihjbWEtXFx1MDAzZW5hbWUsIENNQV9NQVhfTkFNRSwgIFxcXCJjbWElZFxcXFxuXFxcIiwgY21hX2FyZWFfY291bnQpO1xcbitcXG4rXFx0Y21hLVxcdTAwM2VhdmFpbGFibGVfY291bnQgPSBjbWEtXFx1MDAzZWNvdW50ID0gc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHRjbWEtXFx1MDAzZW9yZGVyX3Blcl9iaXQgPSBvcmRlcl9wZXJfYml0O1xcbitcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmNtYS1cXHUwMDNlbm9kZSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19pbml0IGNtYV9uZXdfYXJlYShjb25zdCBjaGFyICpuYW1lLCBwaHlzX2FkZHJfdCBzaXplLFxcbiBcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG9yZGVyX3Blcl9iaXQsXFxuIFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgY21hICoqcmVzX2NtYSlcXG4ge1xcbiBcXHRzdHJ1Y3QgY21hICpjbWE7XFxuIFxcbi1cXHRpZiAoY21hX2FyZWFfY291bnQgPT0gQVJSQVlfU0laRShjbWFfYXJlYXMpKSB7XFxuK1xcdGlmIChjbWFfZWFybHlfYXJlYV9jb3VudCA9PSBBUlJBWV9TSVpFKGNtYV9lYXJseV9hcmVhcykpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJOb3QgZW5vdWdoIHNsb3RzIGZvciBDTUEgcmVzZXJ2ZWQgcmVnaW9ucyFcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4gXFx0fVxcbiBcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2Y21hX2xvY2spO1xcbitcXG4gXFx0LypcXG4gXFx0ICogRWFjaCByZXNlcnZlZCBhcmVhIG11c3QgYmUgaW5pdGlhbGlzZWQgbGF0ZXIsIHdoZW4gbW9yZSBrZXJuZWxcXG4gXFx0ICogc3Vic3lzdGVtcyAobGlrZSBzbGFiIGFsbG9jYXRvcikgYXJlIGF2YWlsYWJsZS5cXG4gXFx0ICovXFxuLVxcdGNtYSA9IFxcdTAwMjZjbWFfYXJlYXNbY21hX2FyZWFfY291bnRdO1xcbi1cXHRjbWFfYXJlYV9jb3VudCsrO1xcbitcXHRjbWEgPSBcXHUwMDI2Y21hX2Vhcmx5X2FyZWFzW2NtYV9lYXJseV9hcmVhX2NvdW50XTtcXG4rXFx0Y21hX2Vhcmx5X2FyZWFfY291bnQrKztcXG4gXFxuLVxcdGlmIChuYW1lKVxcbi1cXHRcXHRzdHJzY3B5KGNtYS1cXHUwMDNlbmFtZSwgbmFtZSk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0c25wcmludGYoY21hLVxcdTAwM2VuYW1lLCBDTUFfTUFYX05BTUUsICBcXFwiY21hJWRcXFxcblxcXCIsIGNtYV9hcmVhX2NvdW50KTtcXG4rXFx0Y21hX2luaXRfYXJlYShjbWEsIG5hbWUsIHNpemUsIG9yZGVyX3Blcl9iaXQpO1xcbiBcXG4tXFx0Y21hLVxcdTAwM2VhdmFpbGFibGVfY291bnQgPSBjbWEtXFx1MDAzZWNvdW50ID0gc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi1cXHRjbWEtXFx1MDAzZW9yZGVyX3Blcl9iaXQgPSBvcmRlcl9wZXJfYml0O1xcbi1cXHQqcmVzX2NtYSA9IGNtYTtcXG4gXFx0dG90YWxjbWFfcGFnZXMgKz0gY21hLVxcdTAwM2Vjb3VudDtcXG4rXFx0KnJlc19jbWEgPSBjbWE7XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmNtYV9sb2NrKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2luaXQgY21hX2Ryb3BfYXJlYShzdHJ1Y3QgY21hICpjbWEpXFxuIHtcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2Y21hX2xvY2spO1xcbiBcXHR0b3RhbGNtYV9wYWdlcyAtPSBjbWEtXFx1MDAzZWNvdW50O1xcbi1cXHRjbWFfYXJlYV9jb3VudC0tO1xcbitcXHRjbWFfZWFybHlfYXJlYV9jb3VudC0tO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmNtYV9sb2NrKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX2luaXQgY21hX2NoZWNrX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxcbit7XFxuK1xcdGlmICghc2l6ZSB8fCAhbWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENNQSB1c2VzIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTIGFzIGFsaWdubWVudCByZXF1aXJlbWVudCB3aGljaFxcbitcXHQgKiBuZWVkcyBwYWdlYmxvY2tfb3JkZXIgdG8gYmUgaW5pdGlhbGl6ZWQuIExldCdzIGVuZm9yY2UgaXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXBhZ2VibG9ja19vcmRlcikge1xcbitcXHRcXHRwcl9lcnIoXFxcInBhZ2VibG9ja19vcmRlciBub3QgeWV0IGluaXRpYWxpemVkLiBDYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3Q/XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIGVuc3VyZSBtaW5pbWFsIGFsaWdubWVudCByZXF1aXJlZCBieSBtbSBjb3JlICovXFxuK1xcdGlmICghSVNfQUxJR05FRChiYXNlIHwgc2l6ZSwgQ01BX01JTl9BTElHTk1FTlRfQllURVMpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjc2LDIyICszMTYsOSBAQCBpbnQgX19pbml0IGNtYV9pbml0X3Jlc2VydmVkX21lbShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxcbiBcXHRzdHJ1Y3QgY21hICpjbWE7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHQvKiBTYW5pdHkgY2hlY2tzICovXFxuLVxcdGlmICghc2l6ZSB8fCAhbWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIENNQSB1c2VzIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTIGFzIGFsaWdubWVudCByZXF1aXJlbWVudCB3aGljaFxcbi1cXHQgKiBuZWVkcyBwYWdlYmxvY2tfb3JkZXIgdG8gYmUgaW5pdGlhbGl6ZWQuIExldCdzIGVuZm9yY2UgaXQuXFxuLVxcdCAqL1xcbi1cXHRpZiAoIXBhZ2VibG9ja19vcmRlcikge1xcbi1cXHRcXHRwcl9lcnIoXFxcInBhZ2VibG9ja19vcmRlciBub3QgeWV0IGluaXRpYWxpemVkLiBDYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3Q/XFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdH1cXG4tXFxuLVxcdC8qIGVuc3VyZSBtaW5pbWFsIGFsaWdubWVudCByZXF1aXJlZCBieSBtbSBjb3JlICovXFxuLVxcdGlmICghSVNfQUxJR05FRChiYXNlIHwgc2l6ZSwgQ01BX01JTl9BTElHTk1FTlRfQllURVMpKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0cmV0ID0gY21hX2NoZWNrX21lbW9yeShiYXNlLCBzaXplKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXQgPSBjbWFfbmV3X2FyZWEobmFtZSwgc2l6ZSwgb3JkZXJfcGVyX2JpdCwgXFx1MDAyNmNtYSk7XFxuIFxcdGlmIChyZXQgIT0gMClcXG5AQCAtNDQ0LDcgKzQ3MSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IF9fY21hX2RlY2xhcmVfY29udGlndW91c19uaWQocGh5c19hZGRyX3QgKmJhc2VwLFxcbiBcXHRwcl9kZWJ1ZyhcXFwiJXMoc2l6ZSAlcGEsIGJhc2UgJXBhLCBsaW1pdCAlcGEgYWxpZ25tZW50ICVwYSlcXFxcblxcXCIsXFxuIFxcdFxcdF9fZnVuY19fLCBcXHUwMDI2c2l6ZSwgXFx1MDAyNmJhc2UsIFxcdTAwMjZsaW1pdCwgXFx1MDAyNmFsaWdubWVudCk7XFxuIFxcbi1cXHRpZiAoY21hX2FyZWFfY291bnQgPT0gQVJSQVlfU0laRShjbWFfYXJlYXMpKSB7XFxuK1xcdGlmIChjbWFfZWFybHlfYXJlYV9jb3VudCA9PSBBUlJBWV9TSVpFKGNtYV9lYXJseV9hcmVhcykpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJOb3QgZW5vdWdoIHNsb3RzIGZvciBDTUEgcmVzZXJ2ZWQgcmVnaW9ucyFcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4gXFx0fVxcbkBAIC0xMDUxLDEyICsxMDc4LDEyIEBAIGJvb2wgY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4taW50IGNtYV9mb3JfZWFjaF9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKVxcbitpbnQgY21hX2Zvcl9lYWNoX2Vhcmx5X2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY21hX2FyZWFfY291bnQ7IGkrKykge1xcbi1cXHRcXHRpbnQgcmV0ID0gaXQoXFx1MDAyNmNtYV9hcmVhc1tpXSwgZGF0YSk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjbWFfZWFybHlfYXJlYV9jb3VudDsgaSsrKSB7XFxuK1xcdFxcdGludCByZXQgPSBpdChcXHUwMDI2Y21hX2Vhcmx5X2FyZWFzW2ldLCBkYXRhKTtcXG4gXFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuQEAgLTEwNjUsNiArMTA5MiwyNSBAQCBpbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitpbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGNtYSAqY21hO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2Y21hX2xvY2spO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjbWEsIFxcdTAwMjZjbWFfYXJlYXMsIG5vZGUpIHtcXG4rXFx0XFx0aW50IHJldCA9IGl0KGNtYSwgZGF0YSk7XFxuK1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y21hX2xvY2spO1xcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2Y21hX2xvY2spO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gYm9vbCBjbWFfaW50ZXJzZWN0cyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbiB7XFxuIFxcdGludCByO1xcbkBAIC0xMTQ3LDMgKzExOTMsNzQgQEAgdm9pZCBfX2luaXQgKmNtYV9yZXNlcnZlX2Vhcmx5KHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBzaXplKVxcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbitcXG4rc3RydWN0IGNtYSAqX19pbml0IGNtYV9jcmVhdGUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4rXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG9yZGVyX3Blcl9iaXQsIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0c3RydWN0IGNtYSAqY21hO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gY21hX2NoZWNrX21lbW9yeShiYXNlLCBzaXplKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuK1xcbitcXHRjbWEgPSBremFsbG9jX29iaigqY21hLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFjbWEpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXG4rXFx0Y21hX2luaXRfYXJlYShjbWEsIG5hbWUsIHNpemUsIG9yZGVyX3Blcl9iaXQpO1xcbitcXHRjbWEtXFx1MDAzZXJhbmdlc1swXS5iYXNlX3BmbiA9IFBGTl9ET1dOKGJhc2UpO1xcbitcXHRjbWEtXFx1MDAzZXJhbmdlc1swXS5lYXJseV9wZm4gPSBQRk5fRE9XTihiYXNlKTtcXG4rXFx0Y21hLVxcdTAwM2VyYW5nZXNbMF0uY291bnQgPSBjbWEtXFx1MDAzZWNvdW50O1xcbitcXHRjbWEtXFx1MDAzZW5yYW5nZXMgPSAxO1xcbitcXG4rXFx0Y21hX2FjdGl2YXRlX2FyZWEoY21hKTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmNtYV9sb2NrKTtcXG4rXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2Y21hLVxcdTAwM2Vub2RlLCBcXHUwMDI2Y21hX2FyZWFzKTtcXG4rXFx0dG90YWxjbWFfcGFnZXMgKz0gY21hLVxcdTAwM2Vjb3VudDtcXG4rXFx0Y21hX2FyZWFfY291bnQrKztcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjbWFfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gY21hO1xcbit9XFxuK1xcbit2b2lkIGNtYV9mcmVlKHN0cnVjdCBjbWEgKmNtYSlcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNhZmV0eSBjaGVjayB0byBwcmV2ZW50IGEgQ01BIHdpdGggYWN0aXZlIGFsbG9jYXRpb25zIGZyb20gYmVpbmdcXG4rXFx0ICogcmVsZWFzZWQuXFxuK1xcdCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY21hLVxcdTAwM2VucmFuZ2VzOyBpKyspIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBuYml0cyA9IGNtYV9iaXRtYXBfbWF4bm8oY21hLCBcXHUwMDI2Y21hLVxcdTAwM2VyYW5nZXNbaV0pO1xcbitcXG4rXFx0XFx0aWYgKCFiaXRtYXBfZW1wdHkoY21hLVxcdTAwM2VyYW5nZXNbaV0uYml0bWFwLCBuYml0cykpIHtcXG4rXFx0XFx0XFx0V0FSTigxLCBcXFwiJXM6IHJhbmdlICV1IG5vdCBlbXB0eVxcXFxuXFxcIiwgY21hLVxcdTAwM2VuYW1lLCBpKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIGZyZWUgcmVzZXJ2ZWQgcGFnZXMgYW5kIHRoZSBiaXRtYXAgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNtYS1cXHUwMDNlbnJhbmdlczsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmNtciA9IFxcdTAwMjZjbWEtXFx1MDAzZXJhbmdlc1tpXTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBlbmRfcGZuLCBwZm47XFxuK1xcbitcXHRcXHRlbmRfcGZuID0gY21yLVxcdTAwM2ViYXNlX3BmbiArIGNtci1cXHUwMDNlY291bnQ7XFxuK1xcdFxcdGZvciAocGZuID0gY21yLVxcdTAwM2ViYXNlX3BmbjsgcGZuIFxcdTAwM2MgZW5kX3BmbjsgcGZuKyspXFxuK1xcdFxcdFxcdGZyZWVfcmVzZXJ2ZWRfcGFnZShwZm5fdG9fcGFnZShwZm4pKTtcXG4rXFxuK1xcdFxcdGJpdG1hcF9mcmVlKGNtci1cXHUwMDNlYml0bWFwKTtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2Y21hLVxcdTAwM2VhbGxvY19tdXRleCk7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZjbWFfbG9jayk7XFxuK1xcdHRvdGFsY21hX3BhZ2VzIC09IGNtYS1cXHUwMDNlY291bnQ7XFxuK1xcdGxpc3RfZGVsKFxcdTAwMjZjbWEtXFx1MDAzZW5vZGUpO1xcbitcXHRjbWFfYXJlYV9jb3VudC0tO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmNtYV9sb2NrKTtcXG4rXFxuK1xcdGtmcmVlKGNtYSk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvbW0vY21hLmggYi9tbS9jbWEuaFxcbmluZGV4IGM3MDE4MGMzNjU1OWMyLi5hZTRkYjk4MTllMzhkYiAxMDA2NDRcXG4tLS0gYS9tbS9jbWEuaFxcbisrKyBiL21tL2NtYS5oXFxuQEAgLTQxLDYgKzQxLDcgQEAgc3RydWN0IGNtYSB7XFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRhdmFpbGFibGVfY291bnQ7XFxuIFxcdHVuc2lnbmVkIGludCBvcmRlcl9wZXJfYml0OyAvKiBPcmRlciBvZiBwYWdlcyByZXByZXNlbnRlZCBieSBvbmUgYml0ICovXFxuIFxcdHNwaW5sb2NrX3RcXHRsb2NrO1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7XFxuIFxcdHN0cnVjdCBtdXRleCBhbGxvY19tdXRleDtcXG4gI2lmZGVmIENPTkZJR19DTUFfREVCVUdGU1xcbiBcXHRzdHJ1Y3QgaGxpc3RfaGVhZCBtZW1faGVhZDtcXG5AQCAtNzEsOCArNzIsOCBAQCBlbnVtIGNtYV9mbGFncyB7XFxuIFxcdENNQV9BQ1RJVkFURUQsXFxuIH07XFxuIFxcbi1leHRlcm4gc3RydWN0IGNtYSBjbWFfYXJlYXNbTUFYX0NNQV9BUkVBU107XFxuLWV4dGVybiB1bnNpZ25lZCBpbnQgY21hX2FyZWFfY291bnQ7XFxuK2V4dGVybiBzdHJ1Y3QgY21hIGNtYV9lYXJseV9hcmVhc1tNQVhfRUFSTFlfQ01BX0FSRUFTXTtcXG4rZXh0ZXJuIHVuc2lnbmVkIGludCBjbWFfZWFybHlfYXJlYV9jb3VudDtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjbWFfYml0bWFwX21heG5vKHN0cnVjdCBjbWEgKmNtYSxcXG4gXFx0XFx0c3RydWN0IGNtYV9tZW1yYW5nZSAqY21yKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNTowNy41MzQ0OTAyMDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxNzMxNzU2NjE2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBETUEtQlVGIGhlYXAgZm9yIE5WSURJQSBUZWdyYSBWaWRlby1Qcm90ZWN0aW9uLVJlZ2lvbiAoVlBSKS4gVGhlIGRyaXZlciAodGVncmEtdnByLmMpIG9ubHkgaW5pdGlhbGl6ZXMgaWYgYSBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlICgnbnZpZGlhLHRlZ3JhLXZpZGVvLXByb3RlY3Rpb24tcmVnaW9uJykgaXMgcHJlc2VudCwgd2hpY2ggaXMgbm90IHRoZSBjYXNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEZ1cnRoZXJtb3JlLCB0aGUgZHJpdmVyIHJlbGllcyBvbiBUZWdyYS1zcGVjaWZpYyBTTUMgY2FsbHMgdG8gYSBzZWN1cmUgbW9uaXRvci4gVGhlIGNoYW5nZXMgdG8gY29yZSBDTUEgbG9naWMgKG1tL2NtYS5jKSBhcmUgZWl0aGVyIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIGVhcmx5IGJvb3Qgb3IgYXJlIGRlYWQgY29kZSAoZS5nLiwgY21hX2Zvcl9lYWNoX2FyZWEgaGFzIG5vIGNhbGxlcnMpLiBUaGVyZWZvcmUsIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjMwZDY5NTc2YTFkYTYyNDEwMzBjYjRlZGIzMmUwMTk3OTQzZTFiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMjM6MzU6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmExMjQtdmljLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmExMjQtdmljLnlhbWxcbmluZGV4IDcyMDAwOTVlZjE5ZTNjLi4xZTI3YTczMWFkOWFkMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTEyNC12aWMueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdGVncmEvbnZpZGlhLHRlZ3JhMTI0LXZpYy55YW1sXG5AQCAtNjcsNiArNjcsMTQgQEAgcHJvcGVydGllczpcbiAgICAgICAtIGNvbnN0OiBkbWEtbWVtICMgcmVhZFxuICAgICAgIC0gY29uc3Q6IHdyaXRlXG4gXG4rICBtZW1vcnktcmVnaW9uOlxuKyAgICBpdGVtczpcbisgICAgICAtIGRlc2NyaXB0aW9uOiByZWZlcmVuY2UgdG8gdGhlIHZpZGVvIHByb3RlY3Rpb24gbWVtb3J5IHJlZ2lvblxuK1xuKyAgbWVtb3J5LXJlZ2lvbi1uYW1lczpcbisgICAgaXRlbXM6XG4rICAgICAgLSBjb25zdDogcHJvdGVjdGVkXG4rXG4gICBkbWEtY29oZXJlbnQ6IHRydWVcbiBcbiBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmExODYtZGMueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTE4Ni1kYy55YW1sXG5pbmRleCBjZTQ1ODk0NjZhMTg2Yi4uODgxYmZiZjQ3NjRkZmEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmExODYtZGMueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdGVncmEvbnZpZGlhLHRlZ3JhMTg2LWRjLnlhbWxcbkBAIC01Nyw2ICs1NywxNiBAQCBwcm9wZXJ0aWVzOlxuICAgICAgIC0gY29uc3Q6IGRtYS1tZW0gIyByZWFkLTBcbiAgICAgICAtIGNvbnN0OiByZWFkLTFcbiBcbisgIG1lbW9yeS1yZWdpb246XG4rICAgIG1pbkl0ZW1zOiAxXG4rICAgIG1heEl0ZW1zOiAyXG4rXG4rICBtZW1vcnktcmVnaW9uLW5hbWVzOlxuKyAgICBpdGVtczpcbisgICAgICBlbnVtOiBbIGZyYW1lYnVmZmVyLCBwcm90ZWN0ZWQgXVxuKyAgICBtaW5JdGVtczogMVxuKyAgICBtYXhJdGVtczogMlxuK1xuICAgbnZpZGlhLG91dHB1dHM6XG4gICAgIGRlc2NyaXB0aW9uOiBBIGxpc3Qgb2YgcGhhbmRsZXMgb2Ygb3V0cHV0cyB0aGF0IHRoaXMgZGlzcGxheVxuICAgICAgIGNvbnRyb2xsZXIgY2FuIGRyaXZlLlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTIwLWRjLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmEyMC1kYy55YW1sXG5pbmRleCA2OWJlOTVhZmQ1NjI3Ny4uYTAxMjY0NGVlYjdkN2EgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmEyMC1kYy55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmEyMC1kYy55YW1sXG5AQCAtNjUsNyArNjUsMTUgQEAgcHJvcGVydGllczpcbiAgICAgaXRlbXM6XG4gICAgICAgLSBkZXNjcmlwdGlvbjogcGhhbmRsZSB0byB0aGUgY29yZSBwb3dlciBkb21haW5cbiBcbi0gIG1lbW9yeS1yZWdpb246IHRydWVcbisgIG1lbW9yeS1yZWdpb246XG4rICAgIG1pbkl0ZW1zOiAxXG4rICAgIG1heEl0ZW1zOiAyXG4rXG4rICBtZW1vcnktcmVnaW9uLW5hbWVzOlxuKyAgICBpdGVtczpcbisgICAgICBlbnVtOiBbIGZyYW1lYnVmZmVyLCBwcm90ZWN0ZWQgXVxuKyAgICBtaW5JdGVtczogMVxuKyAgICBtYXhpdGVtczogMlxuIFxuICAgbnZpZGlhLGhlYWQ6XG4gICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTIwLWhvc3QxeC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdGVncmEvbnZpZGlhLHRlZ3JhMjAtaG9zdDF4LnlhbWxcbmluZGV4IDM1NjMzNzhhMDFhZjQ3Li5mNDViZTMwODM1YThiMyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RlZ3JhL252aWRpYSx0ZWdyYTIwLWhvc3QxeC55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90ZWdyYS9udmlkaWEsdGVncmEyMC1ob3N0MXgueWFtbFxuQEAgLTk2LDYgKzk2LDEzIEBAIHByb3BlcnRpZXM6XG4gICAgIGl0ZW1zOlxuICAgICAgIC0gZGVzY3JpcHRpb246IHBoYW5kbGUgdG8gdGhlIEhFRyBvciBjb3JlIHBvd2VyIGRvbWFpblxuIFxuKyAgbWVtb3J5LXJlZ2lvbjpcbisgICAgbWF4SXRlbXM6IDFcbitcbisgIG1lbW9yeS1yZWdpb24tbmFtZXM6XG4rICAgIGl0ZW1zOlxuKyAgICAgIC0gY29uc3Q6IHByb3RlY3RlZFxuK1xuIHJlcXVpcmVkOlxuICAgLSBjb21wYXRpYmxlXG4gICAtIGludGVycnVwdHNcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3B1L2hvc3QxeC9udmlkaWEsdGVncmEyMzQtbnZkZWMueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncHUvaG9zdDF4L252aWRpYSx0ZWdyYTIzNC1udmRlYy55YW1sXG5pbmRleCAwYjc1NjFjOGI5YmIyYy4uNzIzMTNmNzc2ZGJkOGYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3B1L2hvc3QxeC9udmlkaWEsdGVncmEyMzQtbnZkZWMueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwdS9ob3N0MXgvbnZpZGlhLHRlZ3JhMjM0LW52ZGVjLnlhbWxcbkBAIC02MCw2ICs2MCwxNCBAQCBwcm9wZXJ0aWVzOlxuICAgICAgIC0gY29uc3Q6IGRtYS1tZW1cbiAgICAgICAtIGNvbnN0OiB3cml0ZVxuIFxuKyAgbWVtb3J5LXJlZ2lvbjpcbisgICAgaXRlbXM6XG4rICAgICAgLSBkZXNjcmlwdGlvbjogcmVmZXJlbmNlIHRvIHRoZSB2aWRlbyBwcm90ZWN0aW9uIG1lbW9yeSByZWdpb25cbitcbisgIG1lbW9yeS1yZWdpb24tbmFtZXM6XG4rICAgIGl0ZW1zOlxuKyAgICAgIC0gY29uc3Q6IHByb3RlY3RlZFxuK1xuICAgbnZpZGlhLG1lbW9yeS1jb250cm9sbGVyOlxuICAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9waGFuZGxlXG4gICAgIGRlc2NyaXB0aW9uOlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZXNlcnZlZC1tZW1vcnkvbnZpZGlhLHRlZ3JhLXZpZGVvLXByb3RlY3Rpb24tcmVnaW9uLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVzZXJ2ZWQtbWVtb3J5L252aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvbi55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjFjNTI0YmFlOWNlMzIwXG4tLS0gL2Rldi9udWxsXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVzZXJ2ZWQtbWVtb3J5L252aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvbi55YW1sXG5AQCAtMCwwICsxLDc2IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAgT1IgQlNELTItQ2xhdXNlKVxuKyVZQU1MIDEuMlxuKy0tLVxuKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvcmVzZXJ2ZWQtbWVtb3J5L252aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvbi55YW1sI1xuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuK1xuK3RpdGxlOiBOVklESUEgVGVncmEgVmlkZW8gUHJvdGVjdGlvbiBSZWdpb24gKFZQUilcbitcbittYWludGFpbmVyczpcbisgIC0gVGhpZXJyeSBSZWRpbmcgXHUwMDNjdGhpZXJyeS5yZWRpbmdAZ21haWwuY29tXHUwMDNlXG4rICAtIEpvbiBIdW50ZXIgXHUwMDNjam9uYXRoYW5oQG52aWRpYS5jb21cdTAwM2VcbitcbitkZXNjcmlwdGlvbjogfFxuKyAgTlZJRElBIFRlZ3JhIGNoaXBzIGhhdmUgbG9uZyBzdXBwb3J0ZWQgYSBtZWNoYW5pc20gdG8gcHJvdGVjdCBhIHNpbmdsZSxcbisgIGNvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbiBmcm9tIG5vbi1zZWN1cmUgbWVtb3J5IGFjY2Vzc2VzLiBUeXBpY2FsbHkgdGhpc1xuKyAgcmVnaW9uIGlzIHVzZWQgZm9yIGRlY29kaW5nIGFuZCBwbGF5YmFjayBvZiBEUk0gcHJvdGVjdGVkIGNvbnRlbnQuIFZhcmlvdXNcbisgIGRldmljZXMsIHN1Y2ggYXMgdGhlIGRpc3BsYXkgY29udHJvbGxlciBhbmQgbXVsdGltZWRpYSBlbmdpbmVzICh2aWRlb1xuKyAgZGVjb2RlcikgY2FuIGFjY2VzcyB0aGlzIHJlZ2lvbiBpbiBhIHNlY3VyZSB3YXkuIEFjY2VzcyBmcm9tIHRoZSBDUFUgaXNcbisgIGdlbmVyYWxseSBmb3JiaWRkZW4uXG4rXG4rICBUd28gdmFyaWFudHMgZXhpc3QgZm9yIFZQUjogb25lIGlzIGZpeGVkIGluIGJvdGggdGhlIGJhc2UgYWRkcmVzcyBhbmQgc2l6ZSxcbisgIHdoaWxlIHRoZSBvdGhlciBpcyByZXNpemFibGUuIEZpeGVkIFZQUiBjYW4gYmUgZGVzY3JpYmVkIGJ5IGp1c3QgYSBcInJlZ1wiXG4rICBwcm9wZXJ0eSBzcGVjaWZ5aW5nIHRoZSBiYXNlIGFkZHJlc3MgYW5kIHNpemUsIHdoZXJlYXMgdGhlIHJlc2l6YWJsZSBWUFJcbisgIGlzIGRlZmluZWQgYnkgYSBzaXplL2FsaWdubWVudCBwYWlyIG9mIHByb3BlcnRpZXMuIEZvciByZXNpemFibGUgVlBSIHRoZVxuKyAgbWVtb3J5IGlzIHJldXNhYmxlIGJ5IHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0gd2hlbiBpdCdzIHVudXNlZCBmb3IgVlBSIGFuZFxuKyAgdGhlcmVmb3JlIHRoZSBcInJldXNhYmxlXCIgcHJvcGVydHkgbXVzdCBiZSBzcGVjaWZpZWQgYWxvbmcgd2l0aCBpdC4gRm9yIGFcbisgIGZpeGVkIFZQUiwgdGhlIG1lbW9yeSBpcyBwZXJtYW5lbnRseSBwcm90ZWN0ZWQsIGFuZCB0aGVyZWZvcmUgaXQncyBub3RcbisgIHJldXNhYmxlIGFuZCBtdXN0IGFsc28gYmUgbWFya2VkIGFzIFwibm8tbWFwXCIgdG8gcHJldmVudCBhbnkgKGluY2x1ZGluZ1xuKyAgc3BlY3VsYXRpdmUpIGFjY2Vzc2VzIHRvIGl0LlxuK1xuK2FsbE9mOlxuKyAgLSAkcmVmOiByZXNlcnZlZC1tZW1vcnkueWFtbFxuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBjb25zdDogbnZpZGlhLHRlZ3JhLXZpZGVvLXByb3RlY3Rpb24tcmVnaW9uXG4rXG4rZGVwZW5kZW5jaWVzOlxuKyAgc2l6ZTogW2FsaWdubWVudCwgcmV1c2FibGVdXG4rICBhbGlnbm1lbnQ6IFtzaXplLCByZXVzYWJsZV1cbisgIHJldXNhYmxlOiBbYWxpZ25tZW50LCBzaXplXVxuK1xuKyAgcmVnOiBbbm8tbWFwXVxuKyAgbm8tbWFwOiBbcmVnXVxuK1xuK3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbitcbitvbmVPZjpcbisgIC0gcmVxdWlyZWQ6XG4rICAgICAgLSBjb21wYXRpYmxlXG4rICAgICAgLSByZWdcbitcbisgIC0gcmVxdWlyZWQ6XG4rICAgICAgLSBjb21wYXRpYmxlXG4rICAgICAgLSBzaXplXG4rXG4rZXhhbXBsZXM6XG4rICAtIHxcbisgICAgLyogcmVzaXphYmxlIFZQUiAqL1xuKyAgICBwcm90ZWN0ZWQge1xuKyAgICAgIGNvbXBhdGlibGUgPSBcIm52aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvblwiO1xuK1xuKyAgICAgIHNpemUgPSBcdTAwM2MweDAgMHg3MDAwMDAwMFx1MDAzZTtcbisgICAgICBhbGlnbm1lbnQgPSBcdTAwM2MweDAgMHgxMDAwMDBcdTAwM2U7XG4rICAgICAgcmV1c2FibGU7XG4rICAgIH07XG4rXG4rICAtIHxcbisgICAgLyogZml4ZWQgVlBSICovXG4rICAgIHByb3RlY3RlZEAyYTgwMDAwMDAge1xuKyAgICAgIGNvbXBhdGlibGUgPSBcIm52aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvblwiO1xuK1xuKyAgICAgIC8qIGZpeGVkIFZQUiAqL1xuKyAgICAgIHJlZyA9IFx1MDAzYzB4MiAweGE4MDAwMDAwIDB4MCAweDcwMDAwMDAwXHUwMDNlO1xuKyAgICAgIG5vLW1hcDtcbisgICAgfTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jIGIvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuY1xuaW5kZXggZjliYzUzYjYwZjk5NzQuLjkzNDk1MmFiMjEwMjc1IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuY1xuKysrIGIvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuY1xuQEAgLTI1NCw3ICsyNTQsNyBAQCBzdHJ1Y3QgZG1hX2NvbnRpZ19lYXJseV9yZXNlcnZlIHtcbiBcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgZG1hX2NvbnRpZ19lYXJseV9yZXNlcnZlIGRtYV9tbXVfcmVtYXBbTUFYX0NNQV9BUkVBU10gX19pbml0ZGF0YTtcbitzdGF0aWMgc3RydWN0IGRtYV9jb250aWdfZWFybHlfcmVzZXJ2ZSBkbWFfbW11X3JlbWFwW01BWF9FQVJMWV9DTUFfQVJFQVNdIF9faW5pdGRhdGE7XG4gXG4gc3RhdGljIGludCBkbWFfbW11X3JlbWFwX251bSBfX2luaXRkYXRhO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvbnZpZGlhL3RlZ3JhMjM0LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL252aWRpYS90ZWdyYTIzNC5kdHNpXG5pbmRleCA4ZTBjNTFlNDk2ZTIwZC4uMzg2MzdlOGU2ZmM5MmMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL252aWRpYS90ZWdyYTIzNC5kdHNpXG4rKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL252aWRpYS90ZWdyYTIzNC5kdHNpXG5AQCAtMjksNiArMjksNDUgQEAgYWxpYXNlcyB7XG4gXHRcdGkyYzggPSBcdTAwMjZkcF9hdXhfY2gzX2kyYztcbiBcdH07XG4gXG4rXHRyZXNlcnZlZC1tZW1vcnkge1xuK1x0XHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzJcdTAwM2U7XG4rXHRcdCNzaXplLWNlbGxzID0gXHUwMDNjMlx1MDAzZTtcbitcdFx0cmFuZ2VzO1xuK1xuK1x0XHR2cHI6IHByb3RlY3RlZCB7XG4rXHRcdFx0Y29tcGF0aWJsZSA9IFwibnZpZGlhLHRlZ3JhLXZpZGVvLXByb3RlY3Rpb24tcmVnaW9uXCI7XG4rXHRcdFx0c3RhdHVzID0gXCJkaXNhYmxlZFwiO1xuK1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogVHdvIHZhcmlhbnRzIGV4aXN0IGZvciB0aGlzLiBGb3IgZml4ZWQgVlBSLCB0aGVcbitcdFx0XHQgKiBmaXJtd2FyZSBpcyBzdXBwb3NlZCB0byB1cGRhdGUgdGhlIFwicmVnXCIgcHJvcGVydHlcbitcdFx0XHQgKiB3aXRoIHRoZSBmaXhlZCBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyZWQgYXMgVlBSLlxuK1x0XHRcdCAqXG4rXHRcdFx0ICogRm9yIHJlc2l6YWJsZSBWUFIgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgZXhhY3RcbitcdFx0XHQgKiBhZGRyZXNzIGFuZCBpbnN0ZWFkIHdhbnQgYSByZXNlcnZlZCByZWdpb24gdG8gYmVcbitcdFx0XHQgKiBhbGxvY2F0ZWQgd2l0aCBhIGNlcnRhaW4gc2l6ZSBhbmQgYWxpZ25tZW50IGF0XG4rXHRcdFx0ICogYm9vdCB0aW1lLlxuK1x0XHRcdCAqXG4rXHRcdFx0ICogVGhlIGJlbG93IGFzc3VtZXMgcmVzaXphYmxlIFZQUiBieSBkZWZhdWx0LiBJZiB0aGVcbitcdFx0XHQgKiBmaXJtd2FyZXMgc2V0cyB1cCBmaXhlZCBWUFIsIGl0IGlzIHJlc3BvbnNpYmxlIGZvclxuK1x0XHRcdCAqIGFkZGluZyB0aGUgbWlzc2luZyBcInJlZ1wiIHByb3BlcnR5LCByZW1vdmluZyBhbnkgb2ZcbitcdFx0XHQgKiB0aGUgdW51c2VkIHByb3BlcnRpZXMsIGFzIHdlbGwgYXMgYWRkaW5nIGEgdW5pdC1cbitcdFx0XHQgKiBhZGRyZXNzIG1hdGNoaW5nIHRoZSBcInJlZ1wiIHByb3BlcnR5LlxuK1x0XHRcdCAqL1xuK1xuK1x0XHRcdC8qIGZpeGVkIFZQUiAqL1xuK1x0XHRcdC8qXG4rXHRcdFx0cmVnID0gXHUwMDNjMHgwIDB4MCAweDAgMHgwXHUwMDNlO1xuK1x0XHRcdG5vLW1hcDtcbitcdFx0XHQqL1xuK1xuK1x0XHRcdC8qIHJlc2l6YWJsZSBWUFIgKi9cbitcdFx0XHRzaXplID0gXHUwMDNjMHgwIDB4NzAwMDAwMDBcdTAwM2U7XG4rXHRcdFx0YWxpZ25tZW50ID0gXHUwMDNjMHgwIDB4MTAwMDAwXHUwMDNlO1xuK1x0XHRcdHJldXNhYmxlO1xuK1x0XHR9O1xuK1x0fTtcbitcbiBcdGJ1c0AwIHtcbiBcdFx0Y29tcGF0aWJsZSA9IFwic2ltcGxlLWJ1c1wiO1xuIFxuQEAgLTQ0NDAsNiArNDQ3OSw5IEBAIHZpY0AxNTM0MDAwMCB7XG4gXHRcdFx0XHRpbnRlcmNvbm5lY3QtbmFtZXMgPSBcImRtYS1tZW1cIiwgXCJ3cml0ZVwiO1xuIFx0XHRcdFx0aW9tbXVzID0gXHUwMDNjXHUwMDI2c21tdV9uaXNvMSBURUdSQTIzNF9TSURfVklDXHUwMDNlO1xuIFx0XHRcdFx0ZG1hLWNvaGVyZW50O1xuK1xuK1x0XHRcdFx0bWVtb3J5LXJlZ2lvbiA9IFx1MDAzY1x1MDAyNnZwclx1MDAzZTtcbitcdFx0XHRcdG1lbW9yeS1yZWdpb24tbmFtZXMgPSBcInByb3RlY3RlZFwiO1xuIFx0XHRcdH07XG4gXG4gXHRcdFx0bnZkZWNAMTU0ODAwMDAge1xuQEAgLTQ0NTgsNiArNDUwMCw5IEBAIG52ZGVjQDE1NDgwMDAwIHtcbiBcdFx0XHRcdGlvbW11cyA9IFx1MDAzY1x1MDAyNnNtbXVfbmlzbzEgVEVHUkEyMzRfU0lEX05WREVDXHUwMDNlO1xuIFx0XHRcdFx0ZG1hLWNvaGVyZW50O1xuIFxuK1x0XHRcdFx0bWVtb3J5LXJlZ2lvbiA9IFx1MDAzY1x1MDAyNnZwclx1MDAzZTtcbitcdFx0XHRcdG1lbW9yeS1yZWdpb24tbmFtZXMgPSBcInByb3RlY3RlZFwiO1xuK1xuIFx0XHRcdFx0bnZpZGlhLG1lbW9yeS1jb250cm9sbGVyID0gXHUwMDNjXHUwMDI2bWNcdTAwM2U7XG4gXG4gXHRcdFx0XHQvKlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvbnZpZGlhL3RlZ3JhMjY0LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL252aWRpYS90ZWdyYTI2NC5kdHNpXG5pbmRleCAyZDhlN2UzNzgzMGZmMi4uY2M5M2M2ODIyYTczOTcgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL252aWRpYS90ZWdyYTI2NC5kdHNpXG4rKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL252aWRpYS90ZWdyYTI2NC5kdHNpXG5AQCAtMjMsNiArMjMsMzkgQEAgc2htZW1fYnBtcDogc2htZW1AODYwNzAwMDAge1xuIFx0XHRcdHJlZyA9IFx1MDAzYzB4MCAweDg2MDcwMDAwIDB4MCAweDIwMDBcdTAwM2U7XG4gXHRcdFx0bm8tbWFwO1xuIFx0XHR9O1xuK1xuK1x0XHR2cHI6IHByb3RlY3RlZCB7XG4rXHRcdFx0Y29tcGF0aWJsZSA9IFwibnZpZGlhLHRlZ3JhLXZpZGVvLXByb3RlY3Rpb24tcmVnaW9uXCI7XG4rXHRcdFx0c3RhdHVzID0gXCJkaXNhYmxlZFwiO1xuK1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogVHdvIHZhcmlhbnRzIGV4aXN0IGZvciB0aGlzLiBGb3IgZml4ZWQgVlBSLCB0aGVcbitcdFx0XHQgKiBmaXJtd2FyZSBpcyBzdXBwb3NlZCB0byB1cGRhdGUgdGhlIFwicmVnXCIgcHJvcGVydHlcbitcdFx0XHQgKiB3aXRoIHRoZSBmaXhlZCBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyZWQgYXMgVlBSLlxuK1x0XHRcdCAqXG4rXHRcdFx0ICogRm9yIHJlc2l6YWJsZSBWUFIgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgZXhhY3RcbitcdFx0XHQgKiBhZGRyZXNzIGFuZCBpbnN0ZWFkIHdhbnQgYSByZXNlcnZlZCByZWdpb24gdG8gYmVcbitcdFx0XHQgKiBhbGxvY2F0ZWQgd2l0aCBhIGNlcnRhaW4gc2l6ZSBhbmQgYWxpZ25tZW50IGF0XG4rXHRcdFx0ICogYm9vdCB0aW1lLlxuK1x0XHRcdCAqXG4rXHRcdFx0ICogVGhlIGJlbG93IGFzc3VtZXMgcmVzaXphYmxlIFZQUiBieSBkZWZhdWx0LiBJZiB0aGVcbitcdFx0XHQgKiBmaXJtd2FyZXMgc2V0cyB1cCBmaXhlZCBWUFIsIGl0IGlzIHJlc3BvbnNpYmxlIGZvclxuK1x0XHRcdCAqIGFkZGluZyB0aGUgbWlzc2luZyBcInJlZ1wiIHByb3BlcnR5LCByZW1vdmluZyBhbnkgb2ZcbitcdFx0XHQgKiB0aGUgdW51c2VkIHByb3BlcnRpZXMsIGFzIHdlbGwgYXMgYWRkaW5nIGEgdW5pdC1cbitcdFx0XHQgKiBhZGRyZXNzIG1hdGNoaW5nIHRoZSBcInJlZ1wiIHByb3BlcnR5LlxuK1x0XHRcdCAqL1xuK1xuK1x0XHRcdC8qIGZpeGVkIFZQUiAqL1xuK1x0XHRcdC8qXG4rXHRcdFx0cmVnID0gXHUwMDNjMHgwIDB4MCAweDAgMHgwXHUwMDNlO1xuK1x0XHRcdG5vLW1hcDtcbitcdFx0XHQqL1xuK1xuK1x0XHRcdC8qIHJlc2l6YWJsZSBWUFIgKi9cbitcdFx0XHRzaXplID0gXHUwMDNjMHgwIDB4NzAwMDAwMDBcdTAwM2U7XG4rXHRcdFx0YWxpZ25tZW50ID0gXHUwMDNjMHgwIDB4MTAwMDAwXHUwMDNlO1xuK1x0XHRcdHJldXNhYmxlO1xuK1x0XHR9O1xuIFx0fTtcbiBcbiBcdC8qIFNZU1RFTSBNTUlPICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxuaW5kZXggOTBmNjFiMTcyNzVlMWIuLjZhNzAzMDYwOTc4OWJiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXG5AQCAtMTAsNiArMTAsOCBAQCBib29sIGNhbl9zZXRfZGlyZWN0X21hcCh2b2lkKTtcbiAjZGVmaW5lIGNhbl9zZXRfZGlyZWN0X21hcCBjYW5fc2V0X2RpcmVjdF9tYXBcbiBcbiBpbnQgc2V0X21lbW9yeV92YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSk7XG4raW50IHNldF9tZW1vcnlfZGV2aWNlKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcbitpbnQgc2V0X21lbW9yeV9ub3JtYWwodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuIFxuIGludCBzZXRfZGlyZWN0X21hcF9pbnZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpO1xuIGludCBzZXRfZGlyZWN0X21hcF9kZWZhdWx0X25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuaW5kZXggYmJlOThhYzlhZDhjNjcuLjg3MWI1OWE2YzllYWYzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXG4rKysgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmNcbkBAIC0yNTEsNiArMjUxLDIyIEBAIGludCBzZXRfbWVtb3J5X3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKVxuIFx0XHRcdFx0XHRfX3BncHJvdChQVEVfUFJFU0VOVF9WQUxJRF9LRVJORUwpKTtcbiB9XG4gXG4raW50IHNldF9tZW1vcnlfZGV2aWNlKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuK3tcbitcdHJldHVybiBfX2NoYW5nZV9tZW1vcnlfY29tbW9uKGFkZHIsIFBBR0VfU0laRSAqIG51bXBhZ2VzLFxuK1x0XHRcdFx0X19wZ3Byb3QoUFJPVF9ERVZJQ0VfbkduUm5FKSxcbitcdFx0XHRcdF9fcGdwcm90KFBST1RfTk9STUFMKSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHNldF9tZW1vcnlfZGV2aWNlKTtcbitcbitpbnQgc2V0X21lbW9yeV9ub3JtYWwodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG4re1xuK1x0cmV0dXJuIF9fY2hhbmdlX21lbW9yeV9jb21tb24oYWRkciwgUEFHRV9TSVpFICogbnVtcGFnZXMsXG4rXHRcdFx0XHRfX3BncHJvdChQUk9UX05PUk1BTCksXG4rXHRcdFx0XHRfX3BncHJvdChQUk9UX0RFVklDRV9uR25SbkUpKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoc2V0X21lbW9yeV9ub3JtYWwpO1xuK1xuIGludCBzZXRfZGlyZWN0X21hcF9pbnZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuIFx0cGdwcm90X3QgY2xlYXJfbWFzayA9IF9fcGdwcm90KFBURV9QUkVTRU5UX1ZBTElEX0tFUk5FTCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2luaXQuYyBiL2FyY2gvczM5MC9tbS9pbml0LmNcbmluZGV4IGYwNzE2OGEwZDNkZDM0Li5mOGY3OGYxNDM0ZWFmYiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9tbS9pbml0LmNcbisrKyBiL2FyY2gvczM5MC9tbS9pbml0LmNcbkBAIC0yNDEsNyArMjQxLDcgQEAgc3RhdGljIGludCBzMzkwX2NtYV9tZW1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiBcdG1lbV9kYXRhLnN0YXJ0ID0gYXJnLVx1MDAzZXN0YXJ0X3BmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiBcdG1lbV9kYXRhLmVuZCA9IG1lbV9kYXRhLnN0YXJ0ICsgKGFyZy1cdTAwM2Vucl9wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4gXHRpZiAoYWN0aW9uID09IE1FTV9HT0lOR19PRkZMSU5FKVxuLVx0XHRyYyA9IGNtYV9mb3JfZWFjaF9hcmVhKHMzOTBfY21hX2NoZWNrX3JhbmdlLCBcdTAwMjZtZW1fZGF0YSk7XG4rXHRcdHJjID0gY21hX2Zvcl9lYWNoX2Vhcmx5X2FyZWEoczM5MF9jbWFfY2hlY2tfcmFuZ2UsIFx1MDAyNm1lbV9kYXRhKTtcbiBcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKHJjKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1oZWFwLmMgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWhlYXAuY1xuaW5kZXggYTc2YmYzZjhiMDcxYTMuLjFjZWI2ZWU4YzA1YTIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1oZWFwLmNcbisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtaGVhcC5jXG5AQCAtNyw2ICs3LDcgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jZGV2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1oZWFwLmhcdTAwM2VcbkBAIC0yMjQsNiArMjI1LDQ2IEBAIGNvbnN0IGNoYXIgKmRtYV9oZWFwX2dldF9uYW1lKHN0cnVjdCBkbWFfaGVhcCAqaGVhcClcbiB9XG4gRVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2hlYXBfZ2V0X25hbWUsIFwiRE1BX0JVRl9IRUFQXCIpO1xuIFxuKyNpZmRlZiBDT05GSUdfREVCVUdfRlNcbitzdGF0aWMgaW50IGRtYV9oZWFwX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXG4re1xuK1x0c3RydWN0IGRtYV9oZWFwICpoZWFwID0gcy1cdTAwM2Vwcml2YXRlO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoaGVhcC1cdTAwM2VvcHMgXHUwMDI2XHUwMDI2IGhlYXAtXHUwMDNlb3BzLVx1MDAzZXNob3cpXG4rXHRcdGVyciA9IGhlYXAtXHUwMDNlb3BzLVx1MDAzZXNob3cocywgaGVhcCk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitERUZJTkVfU0hPV19BVFRSSUJVVEUoZG1hX2hlYXBfZGVidWcpO1xuK1xuK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkbWFfaGVhcF9kZWJ1Z2ZzX2RpcjtcbitcbitzdGF0aWMgdm9pZCBkbWFfaGVhcF9pbml0X2RlYnVnZnModm9pZClcbit7XG4rXHRzdHJ1Y3QgZGVudHJ5ICpkaXI7XG4rXG4rXHRkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXCJkbWFfaGVhcFwiLCBOVUxMKTtcbitcdGlmIChJU19FUlIoZGlyKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZG1hX2hlYXBfZGVidWdmc19kaXIgPSBkaXI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRtYV9oZWFwX2V4aXRfZGVidWdmcyh2b2lkKVxuK3tcbitcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkbWFfaGVhcF9kZWJ1Z2ZzX2Rpcik7XG4rfVxuKyNlbHNlXG4rc3RhdGljIHZvaWQgZG1hX2hlYXBfaW5pdF9kZWJ1Z2ZzKHZvaWQpXG4re1xuK31cbitcbitzdGF0aWMgdm9pZCBkbWFfaGVhcF9leGl0X2RlYnVnZnModm9pZClcbit7XG4rfVxuKyNlbmRpZlxuK1xuIC8qKlxuICAqIGRtYV9oZWFwX2FkZCAtIGFkZHMgYSBoZWFwIHRvIGRtYWJ1ZiBoZWFwc1xuICAqIEBleHBfaW5mbzogaW5mb3JtYXRpb24gbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgaGVhcFxuQEAgLTI5OCw2ICszMzksMTMgQEAgc3RydWN0IGRtYV9oZWFwICpkbWFfaGVhcF9hZGQoY29uc3Qgc3RydWN0IGRtYV9oZWFwX2V4cG9ydF9pbmZvICpleHBfaW5mbylcbiBcbiBcdC8qIEFkZCBoZWFwIHRvIHRoZSBsaXN0ICovXG4gXHRsaXN0X2FkZChcdTAwMjZoZWFwLVx1MDAzZWxpc3QsIFx1MDAyNmhlYXBfbGlzdCk7XG4rXG4rI2lmZGVmIENPTkZJR19ERUJVR19GU1xuK1x0aWYgKGhlYXAtXHUwMDNlb3BzIFx1MDAyNlx1MDAyNiBoZWFwLVx1MDAzZW9wcy1cdTAwM2VzaG93KVxuK1x0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGhlYXAtXHUwMDNlbmFtZSwgMDQ0NCwgZG1hX2hlYXBfZGVidWdmc19kaXIsXG4rXHRcdFx0XHQgICAgaGVhcCwgXHUwMDI2ZG1hX2hlYXBfZGVidWdfZm9wcyk7XG4rI2VuZGlmXG4rXG4gXHRtdXRleF91bmxvY2soXHUwMDI2aGVhcF9saXN0X2xvY2spO1xuIFxuIFx0cmV0dXJuIGhlYXA7XG5AQCAtMzM0LDYgKzM4MiwxNCBAQCBzdGF0aWMgaW50IGRtYV9oZWFwX2luaXQodm9pZClcbiBcdH1cbiBcdGRtYV9oZWFwX2NsYXNzLVx1MDAzZWRldm5vZGUgPSBkbWFfaGVhcF9kZXZub2RlO1xuIFxuK1x0ZG1hX2hlYXBfaW5pdF9kZWJ1Z2ZzKCk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gc3Vic3lzX2luaXRjYWxsKGRtYV9oZWFwX2luaXQpO1xuK1xuK3N0YXRpYyB2b2lkIF9fZXhpdCBkbWFfaGVhcF9leGl0KHZvaWQpXG4re1xuK1x0ZG1hX2hlYXBfZXhpdF9kZWJ1Z2ZzKCk7XG4rfVxuK19fZXhpdGNhbGwoZG1hX2hlYXBfZXhpdCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWcgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZ1xuaW5kZXggYmI3MjllOTE1NDVjNDAuLmRkNjAzNTU5OGQwMjg4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWdcbisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnXG5AQCAtMjAsMyArMjAsMTAgQEAgY29uZmlnIERNQUJVRl9IRUFQU19DTUFcbiBcdCAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBkbWEtYnVmIENNQSBoZWFwLiBUaGlzIGhlYXAgaXMgYmFja2VkXG4gXHQgIGJ5IHRoZSBDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IgKENNQSkuIElmIHlvdXIgc3lzdGVtIGhhcyB0aGVzZVxuIFx0ICByZWdpb25zLCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUuXG4rXG4rY29uZmlnIERNQUJVRl9IRUFQU19URUdSQV9WUFJcbitcdGJvb2wgXCJOVklESUEgVGVncmEgVmlkZW8tUHJvdGVjdGVkLVJlZ2lvbiBETUEtQlVGIEhlYXBcIlxuK1x0ZGVwZW5kcyBvbiBETUFCVUZfSEVBUFMgXHUwMDI2XHUwMDI2IERNQV9DTUFcbitcdGhlbHBcbitcdCAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBWaWRlby1Qcm90ZWN0ZWQtUmVnaW9uIChWUFIpIHN1cHBvcnQgb25cbitcdCAgYSByYW5nZSBvZiBOVklESUEgVGVncmEgZGV2aWNlcy5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvaGVhcHMvTWFrZWZpbGUgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvTWFrZWZpbGVcbmluZGV4IDk3NDQ2Nzc5MTAzMmZmLi4yNjViNzdhN2I4ODk5OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlXG5AQCAtMSwzICsxLDQgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gb2JqLSQoQ09ORklHX0RNQUJVRl9IRUFQU19TWVNURU0pXHQrPSBzeXN0ZW1faGVhcC5vXG4gb2JqLSQoQ09ORklHX0RNQUJVRl9IRUFQU19DTUEpXHRcdCs9IGNtYV9oZWFwLm9cbitvYmotJChDT05GSUdfRE1BQlVGX0hFQVBTX1RFR1JBX1ZQUilcdCs9IHRlZ3JhLXZwci5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2hlYXBzL3RlZ3JhLXZwci5jIGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL3RlZ3JhLXZwci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkxOGNmNjZlYzIyMmM5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmNcbkBAIC0wLDAgKzEsMTI0MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBETUEtQlVGIHJlc3RyaWN0ZWQgaGVhcCBleHBvcnRlciBmb3IgTlZJRElBIFZpZGVvLVByb3RlY3Rpb24tUmVnaW9uIChWUFIpXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNiBOVklESUEgQ29ycG9yYXRpb25cbisgKi9cbitcbisjZGVmaW5lIHByX2ZtdChmbXQpIFwidGVncmEtdnByOiBcIiBmbXRcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hcm0tc21jY2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NtYS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWJ1Zi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWhlYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbmQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX3Jlc2VydmVkX21lbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZXNldC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2V0X21lbW9yeS5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnJlZXplci5oXHUwMDNlXG4rXG4rI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXG4rI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL3RlZ3JhX3Zwci5oXHUwMDNlXG4rXG4rI2RlZmluZSBURUdSQV9WUFJfTUFYX0NIVU5LUyA2NFxuK1xuK3N0cnVjdCB0ZWdyYV92cHI7XG4rXG4rc3RydWN0IHRlZ3JhX3Zwcl9kZXZpY2Uge1xuK1x0c3RydWN0IGxpc3RfaGVhZCBub2RlO1xuK1x0c3RydWN0IGRldmljZSAqZGV2O1xuK307XG4rXG4rc3RydWN0IHRlZ3JhX3Zwcl9jaHVuayB7XG4rXHRwaHlzX2FkZHJfdCBzdGFydDtcbitcdHBoeXNfYWRkcl90IGxpbWl0O1xuK1x0c2l6ZV90IHNpemU7XG4rXG4rXHRzdHJ1Y3QgdGVncmFfdnByICp2cHI7XG4rXHRzdHJ1Y3QgY21hICpjbWE7XG4rXHRib29sIGFjdGl2ZTtcbitcbitcdHN0cnVjdCBwYWdlICpzdGFydF9wYWdlO1xuK1x0dW5zaWduZWQgaW50IG9mZnNldDtcbitcdHVuc2lnbmVkIGxvbmcgdmlydDtcbitcdHBnb2ZmX3QgbnVtX3BhZ2VzO1xuK1xuK1x0dW5zaWduZWQgaW50IG51bV9idWZmZXJzO1xuK307XG4rXG4rc3RydWN0IHRlZ3JhX3ZwciB7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldl9ub2RlO1xuK1x0dW5zaWduZWQgbG9uZyBhbGlnbjtcbitcdHBoeXNfYWRkcl90IGJhc2U7XG4rXHRwaHlzX2FkZHJfdCBzaXplO1xuK1x0Ym9vbCB1c2VfZnJlZXplcjtcbitcdGJvb2wgcmVzaXphYmxlO1xuK1xuK1x0c3RydWN0IGxpc3RfaGVhZCBidWZmZXJzO1xuK1x0c3RydWN0IHBhZ2UgKnN0YXJ0X3BhZ2U7XG4rXHR1bnNpZ25lZCBsb25nICpiaXRtYXA7XG4rXHRwZ29mZl90IG51bV9wYWdlcztcbitcbitcdC8qIHJlc2l6YWJsZSBWUFIgKi9cbitcdERFQ0xBUkVfQklUTUFQKGFjdGl2ZSwgVEVHUkFfVlBSX01BWF9DSFVOS1MpO1xuK1x0c3RydWN0IHRlZ3JhX3Zwcl9jaHVuayAqY2h1bmtzO1xuK1x0dW5zaWduZWQgaW50IG51bV9jaHVua3M7XG4rXG4rXHR1bnNpZ25lZCBpbnQgZmlyc3Q7XG4rXHR1bnNpZ25lZCBpbnQgbGFzdDtcbitcbitcdHN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlcztcbitcdHN0cnVjdCBtdXRleCBsb2NrO1xuK307XG4rXG4rc3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIge1xuK1x0c3RydWN0IGxpc3RfaGVhZCBhdHRhY2htZW50cztcbitcdHN0cnVjdCB0ZWdyYV92cHIgKnZwcjtcbitcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbitcdHN0cnVjdCBtdXRleCBsb2NrO1xuK1xuK1x0c3RydWN0IHBhZ2UgKnN0YXJ0X3BhZ2U7XG4rXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzO1xuK1x0cGdvZmZfdCBudW1fcGFnZXM7XG4rXHRwaHlzX2FkZHJfdCBzdGFydDtcbitcdHBoeXNfYWRkcl90IGxpbWl0O1xuK1x0c2l6ZV90IHNpemU7XG4rXHRpbnQgcGFnZW5vO1xuK1x0aW50IG9yZGVyO1xuK1xuK1x0REVDTEFSRV9CSVRNQVAoY2h1bmtzLCBURUdSQV9WUFJfTUFYX0NIVU5LUyk7XG4rfTtcbitcbitzdHJ1Y3QgdGVncmFfdnByX2F0dGFjaG1lbnQge1xuK1x0c3RydWN0IGRldmljZSAqZGV2O1xuK1x0c3RydWN0IHNnX3RhYmxlIHNndDtcbitcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbit9O1xuK1xuKyNkZWZpbmUgQVJNX1NNQ0NDX1RFX0ZVTkNfUFJPR1JBTV9WUFIgMHgzXG4rXG4rI2RlZmluZSBBUk1fU01DQ0NfVkVORE9SX1NJUF9URV9QUk9HUkFNX1ZQUl9GVU5DX0lEXHRcdFxcXG4rXHRBUk1fU01DQ0NfQ0FMTF9WQUwoQVJNX1NNQ0NDX0ZBU1RfQ0FMTCxcdFx0XHRcXFxuK1x0XHRcdCAgIEFSTV9TTUNDQ19TTUNfMzIsXHRcdFx0XFxcbitcdFx0XHQgICBBUk1fU01DQ0NfT1dORVJfU0lQLFx0XHRcdFxcXG4rXHRcdFx0ICAgQVJNX1NNQ0NDX1RFX0ZVTkNfUFJPR1JBTV9WUFIpXG4rXG4rc3RhdGljIGludCB0ZWdyYV92cHJfc2V0KHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXG4re1xuK1x0c3RydWN0IGFybV9zbWNjY19yZXMgcmVzO1xuK1xuK1x0YXJtX3NtY2NjX3NtYyhBUk1fU01DQ0NfVkVORE9SX1NJUF9URV9QUk9HUkFNX1ZQUl9GVU5DX0lELCBiYXNlLCBzaXplLFxuK1x0XHQgICAgICAwLCAwLCAwLCAwLCAwLCBcdTAwMjZyZXMpO1xuK1xuK1x0cmV0dXJuIHJlcy5hMDtcbit9XG4rXG4rc3RhdGljIGludCB0ZWdyYV92cHJfZ2V0X2V4dGVudHMoc3RydWN0IHRlZ3JhX3ZwciAqdnByLCBwaHlzX2FkZHJfdCAqYmFzZSxcbitcdFx0XHRcdCBwaHlzX2FkZHJfdCAqc2l6ZSlcbit7XG4rXHRwaHlzX2FkZHJfdCBzdGFydCA9IH4wLCBsaW1pdCA9IDA7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHZwci1cdTAwM2VudW1fY2h1bmtzOyBpKyspIHtcbitcdFx0c3RydWN0IHRlZ3JhX3Zwcl9jaHVuayAqY2h1bmsgPSBcdTAwMjZ2cHItXHUwMDNlY2h1bmtzW2ldO1xuK1xuK1x0XHRpZiAoY2h1bmstXHUwMDNlYWN0aXZlKSB7XG4rXHRcdFx0aWYgKGNodW5rLVx1MDAzZXN0YXJ0IFx1MDAzYyBzdGFydClcbitcdFx0XHRcdHN0YXJ0ID0gY2h1bmstXHUwMDNlc3RhcnQ7XG4rXG4rXHRcdFx0aWYgKGNodW5rLVx1MDAzZWxpbWl0IFx1MDAzZSBsaW1pdClcbitcdFx0XHRcdGxpbWl0ID0gY2h1bmstXHUwMDNlbGltaXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChsaW1pdCBcdTAwM2Ugc3RhcnQpIHtcbitcdFx0KnNpemUgPSBsaW1pdCAtIHN0YXJ0O1xuK1x0XHQqYmFzZSA9IHN0YXJ0O1xuK1x0fSBlbHNlIHtcbitcdFx0KmJhc2UgPSAqc2l6ZSA9IDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB0ZWdyYV92cHJfcmVzaXplKHN0cnVjdCB0ZWdyYV92cHIgKnZwcilcbit7XG4rXHRzdHJ1Y3QgdGVncmFfdnByX2RldmljZSAqbm9kZTtcbitcdHBoeXNfYWRkcl90IGJhc2UsIHNpemU7XG4rXHRpbnQgZXJyLCBzdGF0dXMgPSAwO1xuK1xuK1x0ZXJyID0gdGVncmFfdnByX2dldF9leHRlbnRzKHZwciwgXHUwMDI2YmFzZSwgXHUwMDI2c2l6ZSk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4rXHRcdHByX2VycihcIiVzKCk6IGZhaWxlZCB0byBnZXQgVlBSIGV4dGVudHM6ICVkXFxuXCIsIF9fZnVuY19fLCBlcnIpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0aWYgKHZwci1cdTAwM2V1c2VfZnJlZXplcikge1xuK1x0XHRlcnIgPSBmcmVlemVfcHJvY2Vzc2VzKCk7XG4rXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbitcdFx0XHRwcl9lcnIoXCIlcygpOiBmYWlsZWQgdG8gZnJlZXplIHByb2Nlc3NlczogJWRcXG5cIixcbitcdFx0XHQgICAgICAgX19mdW5jX18sIGVycik7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBcdTAwMjZ2cHItXHUwMDNlZGV2aWNlcywgbm9kZSkge1xuK1x0XHRlcnIgPSBwbV9nZW5lcmljX2ZyZWV6ZShub2RlLVx1MDAzZWRldik7XG4rXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbitcdFx0XHRwcl9lcnIoXCJmYWlsZWQgdG8gcnVudGltZSBzdXNwZW5kICVzOiAlZFxcblwiLFxuK1x0XHRcdCAgICAgICBkZXZfbmFtZShub2RlLVx1MDAzZWRldiksIGVycik7XG4rXHRcdFx0Z290byB0aGF3O1xuK1x0XHR9XG4rXHR9XG4rXG4rXHR0cmFjZV90ZWdyYV92cHJfc2V0KGJhc2UsIHNpemUpO1xuK1xuK1x0ZXJyID0gdGVncmFfdnByX3NldChiYXNlLCBzaXplKTtcbitcdGlmIChlcnIgXHUwMDNjIDApIHtcbitcdFx0cHJfZXJyKFwiZmFpbGVkIHRvIHNlY3VyZSBWUFI6ICVkXFxuXCIsIGVycik7XG4rXHRcdHN0YXR1cyA9IGVycjtcbitcdH1cbitcbit0aGF3OlxuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKG5vZGUsIFx1MDAyNnZwci1cdTAwM2VkZXZpY2VzLCBub2RlKSB7XG4rXHRcdGVyciA9IHBtX2dlbmVyaWNfdGhhdyhub2RlLVx1MDAzZWRldik7XG4rXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbitcdFx0XHRwcl9lcnIoXCJmYWlsZWQgdG8gcnVudGltZSByZXN1bWUgJXNcXG5cIixcbitcdFx0XHQgICAgICAgZGV2X25hbWUobm9kZS1cdTAwM2VkZXYpKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0aWYgKHZwci1cdTAwM2V1c2VfZnJlZXplcilcbitcdFx0dGhhd19wcm9jZXNzZXMoKTtcbitcbitcdHJldHVybiBzdGF0dXM7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IHRlZ3JhX3Zwcl9jaHVua19pbml0KHN0cnVjdCB0ZWdyYV92cHIgKnZwcixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuayxcbitcdFx0XHRcdCAgICAgICBwaHlzX2FkZHJfdCBzdGFydCwgc2l6ZV90IHNpemUsXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IG9yZGVyLCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdGNodW5rLVx1MDAzZXN0YXJ0ID0gc3RhcnQ7XG4rXHRjaHVuay1cdTAwM2VsaW1pdCA9IHN0YXJ0ICsgc2l6ZTtcbitcdGNodW5rLVx1MDAzZXNpemUgPSBzaXplO1xuK1x0Y2h1bmstXHUwMDNldnByID0gdnByO1xuK1xuK1x0Y2h1bmstXHUwMDNlY21hID0gY21hX2NyZWF0ZShzdGFydCwgc2l6ZSwgb3JkZXIsIG5hbWUpO1xuK1x0aWYgKElTX0VSUihjaHVuay1cdTAwM2VjbWEpKSB7XG4rXHRcdHByX2VycihcImNtYV9jcmVhdGUoKSBmYWlsZWQ6ICVsZFxcblwiLCBQVFJfRVJSKGNodW5rLVx1MDAzZWNtYSkpO1xuK1x0XHRyZXR1cm4gUFRSX0VSUihjaHVuay1cdTAwM2VjbWEpO1xuK1x0fVxuK1xuK1x0Y2h1bmstXHUwMDNlb2Zmc2V0ID0gKHN0YXJ0IC0gdnByLVx1MDAzZWJhc2UpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0Y2h1bmstXHUwMDNlbnVtX3BhZ2VzID0gc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcdGNodW5rLVx1MDAzZW51bV9idWZmZXJzID0gMDtcbitcbitcdC8qIENNQSBhcmVhIGlzIG5vdCByZXNlcnZlZCB5ZXQgKi9cbitcdGNodW5rLVx1MDAzZXN0YXJ0X3BhZ2UgPSBOVUxMO1xuK1x0Y2h1bmstXHUwMDNldmlydCA9IDA7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVncmFfdnByX2NodW5rX2ZyZWUoc3RydWN0IHRlZ3JhX3Zwcl9jaHVuayAqY2h1bmspXG4re1xuK1x0Y21hX2ZyZWUoY2h1bmstXHUwMDNlY21hKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBib29sIHRlZ3JhX3Zwcl9jaHVua19pc19sYXN0KGNvbnN0IHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rKVxuK3tcbitcdHBoeXNfYWRkcl90IGxpbWl0ID0gY2h1bmstXHUwMDNldnByLVx1MDAzZWJhc2UgKyBjaHVuay1cdTAwM2V2cHItXHUwMDNlc2l6ZTtcbitcbitcdHJldHVybiBjaHVuay1cdTAwM2VsaW1pdCA9PSBsaW1pdDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBib29sIHRlZ3JhX3Zwcl9jaHVua19pc19sZWFmKGNvbnN0IHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rKVxuK3tcbitcdGNvbnN0IHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKm5leHQgPSBjaHVuayArIDE7XG4rXG4rXHRpZiAodGVncmFfdnByX2NodW5rX2lzX2xhc3QoY2h1bmspKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiAhbmV4dC1cdTAwM2VhY3RpdmU7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVncmFfdnByX2NodW5rX2FjdGl2YXRlKHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgYWxpZ24gPSBnZXRfb3JkZXIoY2h1bmstXHUwMDNldnByLVx1MDAzZWFsaWduKTtcbitcdGludCBlcnI7XG4rXG4rXHR0cmFjZV90ZWdyYV92cHJfY2h1bmtfYWN0aXZhdGUoY2h1bmstXHUwMDNlc3RhcnQsIGNodW5rLVx1MDAzZWxpbWl0KTtcbitcbitcdGNodW5rLVx1MDAzZXN0YXJ0X3BhZ2UgPSBjbWFfYWxsb2MoY2h1bmstXHUwMDNlY21hLCBjaHVuay1cdTAwM2VudW1fcGFnZXMsIGFsaWduLFxuK1x0XHRcdFx0ICAgICAgZmFsc2UpO1xuK1x0aWYgKCFjaHVuay1cdTAwM2VzdGFydF9wYWdlKSB7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gZmFpbDtcbitcdH1cbitcbitcdGNodW5rLVx1MDAzZXZpcnQgPSAodW5zaWduZWQgbG9uZylwYWdlX3RvX3ZpcnQoY2h1bmstXHUwMDNlc3RhcnRfcGFnZSk7XG4rXG4rXHRlcnIgPSBzZXRfbWVtb3J5X2RldmljZShjaHVuay1cdTAwM2V2aXJ0LCBjaHVuay1cdTAwM2VudW1fcGFnZXMpO1xuK1x0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0Z290byBmcmVlO1xuK1xuK1x0Y2h1bmstXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbitcbitcdHJldHVybiAwO1xuK1xuK2ZyZWU6XG4rXHRjbWFfcmVsZWFzZShjaHVuay1cdTAwM2VjbWEsIGNodW5rLVx1MDAzZXN0YXJ0X3BhZ2UsIGNodW5rLVx1MDAzZW51bV9wYWdlcyk7XG4rZmFpbDpcbitcdGNodW5rLVx1MDAzZXN0YXJ0X3BhZ2UgPSBOVUxMO1xuK1x0Y2h1bmstXHUwMDNldmlydCA9IDA7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgaW50IHRlZ3JhX3Zwcl9jaHVua19kZWFjdGl2YXRlKHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIWNodW5rLVx1MDAzZWFjdGl2ZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBkbyBub3QgZGVhY3RpdmF0ZSBpZiB0aGVyZSBhcmUgYnVmZmVycyBsZWZ0IGluIHRoaXMgY2h1bmsgKi9cbitcdGlmIChXQVJOX09OKGNodW5rLVx1MDAzZW51bV9idWZmZXJzIFx1MDAzZSAwKSlcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdHRyYWNlX3RlZ3JhX3Zwcl9jaHVua19kZWFjdGl2YXRlKGNodW5rLVx1MDAzZXN0YXJ0LCBjaHVuay1cdTAwM2VsaW1pdCk7XG4rXG4rXHRlcnIgPSBzZXRfbWVtb3J5X25vcm1hbChjaHVuay1cdTAwM2V2aXJ0LCBjaHVuay1cdTAwM2VudW1fcGFnZXMpO1xuK1x0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGNodW5rLVx1MDAzZWFjdGl2ZSA9IGZhbHNlO1xuK1xuK1x0Y21hX3JlbGVhc2UoY2h1bmstXHUwMDNlY21hLCBjaHVuay1cdTAwM2VzdGFydF9wYWdlLCBjaHVuay1cdTAwM2VudW1fcGFnZXMpO1xuK1x0Y2h1bmstXHUwMDNlc3RhcnRfcGFnZSA9IE5VTEw7XG4rXHRjaHVuay1cdTAwM2V2aXJ0ID0gMDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgYm9vbCB0ZWdyYV92cHJfY2h1bmtfb3ZlcmxhcHMoc3RydWN0IHRlZ3JhX3Zwcl9jaHVuayAqY2h1bmssXG4rXHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGxpbWl0KVxuK3tcbitcdHVuc2lnbmVkIGludCBmaXJzdCA9IGNodW5rLVx1MDAzZW9mZnNldDtcbitcdHVuc2lnbmVkIGludCBsYXN0ID0gY2h1bmstXHUwMDNlb2Zmc2V0ICsgY2h1bmstXHUwMDNlbnVtX3BhZ2VzIC0gMTtcbitcbitcdGlmIChsYXN0IFx1MDAzYyBzdGFydCB8fCBmaXJzdCBcdTAwM2U9IGxpbWl0KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIGludCB0ZWdyYV92cHJfYWN0aXZhdGVfY2h1bmtzKHN0cnVjdCB0ZWdyYV92cHIgKnZwcixcbitcdFx0XHRcdCAgICAgc3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKmJ1ZmZlcilcbit7XG4rXHRERUNMQVJFX0JJVE1BUChkaXJ0eSwgdnByLVx1MDAzZW51bV9jaHVua3MpO1xuK1x0dW5zaWduZWQgaW50IGksIGJvdHRvbSwgdG9wO1xuK1x0aW50IGVyciA9IDAsIHJldDtcbitcbitcdGJpdG1hcF96ZXJvKGRpcnR5LCB2cHItXHUwMDNlbnVtX2NodW5rcyk7XG4rXG4rXHQvKiBhY3RpdmF0ZSBhbnkgaW5hY3RpdmUgY2h1bmtzIHRoYXQgb3ZlcmxhcCB0aGlzIGJ1ZmZlciAqL1xuK1x0Zm9yX2VhY2hfc2V0X2JpdChpLCBidWZmZXItXHUwMDNlY2h1bmtzLCB2cHItXHUwMDNlbnVtX2NodW5rcykge1xuK1x0XHRzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuayA9IFx1MDAyNnZwci1cdTAwM2VjaHVua3NbaV07XG4rXG4rXHRcdGlmIChjaHVuay1cdTAwM2VhY3RpdmUpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGVyciA9IHRlZ3JhX3Zwcl9jaHVua19hY3RpdmF0ZShjaHVuayk7XG4rXHRcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdFx0Z290byBkZWFjdGl2YXRlO1xuK1xuK1x0XHRzZXRfYml0KGksIHZwci1cdTAwM2VhY3RpdmUpO1xuK1x0XHRzZXRfYml0KGksIGRpcnR5KTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBBY3RpdmF0aW5nIGNodW5rcyBhYm92ZSBtYXkgaGF2ZSBjcmVhdGVkIGhvbGVzLCBidXQgc2luY2UgdGhlIFZQUlxuK1x0ICogY2FuIG9ubHkgZXZlciBiZSBhIHNpbmdsZSBjb250aWd1b3VzIHJlZ2lvbiwgbWFrZSBzdXJlIHRvIGFjdGl2YXRlXG4rXHQgKiBhbnkgbWlzc2luZyBjaHVua3MuXG4rXHQgKi9cbitcdGZvcl9lYWNoX2NsZWFyX2JpdHJhbmdlKGJvdHRvbSwgdG9wLCB2cHItXHUwMDNlYWN0aXZlLCB2cHItXHUwMDNlbnVtX2NodW5rcykge1xuK1x0XHQvKiBpbmFjdGl2ZSBjaHVua3MgYXQgdGhlIGJvdHRvbSBvciB0aGUgdG9wIGFyZSBoYXJtbGVzcyAqL1xuK1x0XHRpZiAoYm90dG9tID09IDAgfHwgdG9wID09IHZwci1cdTAwM2VudW1fY2h1bmtzKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRmb3IgKGkgPSBib3R0b207IGkgXHUwMDNjIHRvcDsgaSsrKSB7XG4rXHRcdFx0c3RydWN0IHRlZ3JhX3Zwcl9jaHVuayAqY2h1bmsgPSBcdTAwMjZ2cHItXHUwMDNlY2h1bmtzW2ldO1xuK1xuK1x0XHRcdGVyciA9IHRlZ3JhX3Zwcl9jaHVua19hY3RpdmF0ZShjaHVuayk7XG4rXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZGVhY3RpdmF0ZTtcbitcbitcdFx0XHRzZXRfYml0KGksIHZwci1cdTAwM2VhY3RpdmUpO1xuK1x0XHRcdHNldF9iaXQoaSwgZGlydHkpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBpZiBhbnkgY2h1bmtzIGhhdmUgYmVlbiBhY3RpdmF0ZWQsIFZQUiBuZWVkcyB0byBiZSByZXNpemVkICovXG4rXHRpZiAoIWJpdG1hcF9lbXB0eShkaXJ0eSwgdnByLVx1MDAzZW51bV9jaHVua3MpKSB7XG4rXHRcdGVyciA9IHRlZ3JhX3Zwcl9yZXNpemUodnByKTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuK1x0XHRcdHByX2VycihcImZhaWxlZCB0byBncm93IFZQUjogJWRcXG5cIiwgZXJyKTtcbitcdFx0XHRnb3RvIGRlYWN0aXZhdGU7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIGluY3JlbWVudCBidWZmZXIgY291bnQgZm9yIGVhY2ggY2h1bmsgKi9cbitcdGZvcl9lYWNoX3NldF9iaXQoaSwgYnVmZmVyLVx1MDAzZWNodW5rcywgdnByLVx1MDAzZW51bV9jaHVua3MpXG4rXHRcdHZwci1cdTAwM2VjaHVua3NbaV0ubnVtX2J1ZmZlcnMrKztcbitcbitcdHJldHVybiAwO1xuK1xuK2RlYWN0aXZhdGU6XG4rXHQvKiBkZWFjdGl2YXRlIGFueSBvZiB0aGUgcHJldmlvdXNseSBpbmFjdGl2ZSBjaHVua3Mgb24gZmFpbHVyZSAqL1xuK1x0Zm9yX2VhY2hfc2V0X2JpdChpLCBkaXJ0eSwgdnByLVx1MDAzZW51bV9jaHVua3MpIHtcbitcdFx0cmV0ID0gdGVncmFfdnByX2NodW5rX2RlYWN0aXZhdGUoXHUwMDI2dnByLVx1MDAzZWNodW5rc1tpXSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0V0FSTigxLCBcImZhaWxlZCB0byBkZWFjdGl2YXRlIGNodW5rICMldTogJWRcXG5cIiwgaSwgcmV0KTtcbitcbitcdFx0Y2xlYXJfYml0KGksIHZwci1cdTAwM2VhY3RpdmUpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rLypcbisgKiBSZXRyaWV2ZSB0aGUgcmFuZ2Ugb2YgcGFnZXMgd2l0aGluIHRoZSBhY3RpdmF0ZSByZWdpb24gb2YgdGhlIFZQUi5cbisgKi9cbitzdGF0aWMgYm9vbCB0ZWdyYV92cHJfZ2V0X2FjdGl2ZV9yYW5nZShzdHJ1Y3QgdGVncmFfdnByICp2cHIsXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50ICpmaXJzdCxcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgKmxhc3QpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBpLCBqO1xuK1xuK1x0aSA9IGZpbmRfZmlyc3RfYml0KHZwci1cdTAwM2VhY3RpdmUsIHZwci1cdTAwM2VudW1fY2h1bmtzKTtcbitcdGlmIChpIFx1MDAzZT0gdnByLVx1MDAzZW51bV9jaHVua3MpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGogPSBmaW5kX2xhc3RfYml0KHZwci1cdTAwM2VhY3RpdmUsIHZwci1cdTAwM2VudW1fY2h1bmtzKTtcbitcdGlmIChqIFx1MDAzZT0gdnByLVx1MDAzZW51bV9jaHVua3MpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdCpmaXJzdCA9IHZwci1cdTAwM2VjaHVua3NbaV0ub2Zmc2V0O1xuK1x0Kmxhc3QgPSB2cHItXHUwMDNlY2h1bmtzW2pdLm9mZnNldCArIHZwci1cdTAwM2VjaHVua3Nbal0ubnVtX3BhZ2VzO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qXG4rICogVHJ5IHRvIGZpbmQgYW5kIGFsbG9jYXRlIGEgZnJlZSByZWdpb24gd2l0aGluIGEgc3BlY2lmaWMgcGFnZSByYW5nZS5cbisgKiBSZXR1cm5zIHRoZSBwYWdlIG51bWJlciBpZiBzdWNjZXNzZnVsLCAtRU5PU1BDIG90aGVyd2lzZS5cbisgKlxuKyAqIFRoaXMgZnVuY3Rpb24gbWltaWNzIGJpdG1hcF9maW5kX2ZyZWVfcmVnaW9uKCkgYnV0IHJlc3RyaWN0cyB0aGUgc2VhcmNoXG4rICogdG8gYSBzcGVjaWZpYyByYW5nZSB0byBlbmFibGUgYWxsb2NhdGlvbiB3aXRoaW4gaW5kaXZpZHVhbCBjaHVua3MuXG4rICovXG4rc3RhdGljIGludCB0ZWdyYV92cHJfZmluZF9mcmVlX3JlZ2lvbl9pbl9yYW5nZShzdHJ1Y3QgdGVncmFfdnByICp2cHIsXG4rXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgc3RhcnRfcGFnZSxcbitcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBlbmRfcGFnZSxcbitcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcGFnZXMsXG4rXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgYWxpZ24pXG4re1xuK1x0dW5zaWduZWQgaW50IHBvcywgbmV4dCA9IEFMSUdOKHN0YXJ0X3BhZ2UsIGFsaWduKTtcbitcbitcdC8qIFNjYW4gdGhyb3VnaCBhbGlnbmVkIHBvc2l0aW9ucywgdHJ5aW5nIHRvIGFsbG9jYXRlIGF0IGVhY2ggb25lICovXG4rXHRmb3IgKHBvcyA9IG5leHQ7IHBvcyArIG51bV9wYWdlcyBcdTAwM2M9IGVuZF9wYWdlOyBwb3MgPSBuZXh0KSB7XG4rXHRcdG5leHQgPSBmaW5kX25leHRfYml0KHZwci1cdTAwM2ViaXRtYXAsIHBvcyArIG51bV9wYWdlcywgcG9zKTtcbitcbitcdFx0aWYgKG5leHQgXHUwMDNlPSBwb3MgKyBudW1fcGFnZXMpIHtcbitcdFx0XHRiaXRtYXBfc2V0KHZwci1cdTAwM2ViaXRtYXAsIHBvcywgbnVtX3BhZ2VzKTtcbitcdFx0XHRyZXR1cm4gcG9zO1xuK1x0XHR9XG4rXG4rXHRcdG5leHQgPSBmaW5kX25leHRfemVyb19iaXQodnByLVx1MDAzZWJpdG1hcCwgdnByLVx1MDAzZW51bV9wYWdlcywgbmV4dCk7XG4rXHRcdG5leHQgPSBBTElHTihuZXh0LCBhbGlnbik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVOT1NQQztcbit9XG4rXG4rc3RhdGljIGludCB0ZWdyYV92cHJfZmluZF9mcmVlX3JlZ2lvbihzdHJ1Y3QgdGVncmFfdnByICp2cHIsXG4rXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgbnVtX3BhZ2VzLFxuK1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhbGlnbilcbit7XG4rXHRyZXR1cm4gdGVncmFfdnByX2ZpbmRfZnJlZV9yZWdpb25faW5fcmFuZ2UodnByLCAwLCB2cHItXHUwMDNlbnVtX3BhZ2VzIC0gMSxcbitcdFx0XHRcdFx0XHQgICBudW1fcGFnZXMsIGFsaWduKTtcbit9XG4rXG4rc3RhdGljIGludCB0ZWdyYV92cHJfZmluZF9mcmVlX3JlZ2lvbl9jbHVzdGVyZWQoc3RydWN0IHRlZ3JhX3ZwciAqdnByLFxuK1x0XHRcdFx0XHRcdHVuc2lnbmVkIGludCBudW1fcGFnZXMsXG4rXHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IGFsaWduKVxuK3tcbitcdHVuc2lnbmVkIGludCB0YXJnZXQsIGZpcnN0LCBsYXN0O1xuK1x0aW50IHBhZ2VubztcbitcbitcdC8qXG4rXHQgKiBJZiB0aGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMsIGFib3J0IHRoZSBjbHVzdGVyZWQgYWxsb2NhdGlvbiBzY2hlbWVcbitcdCAqIGFuZCB1c2UgdGhlIGdlbmVyaWMgYWxsb2NhdGlvbiBzY2hlbWUgaW5zdGVhZC5cbitcdCAqL1xuK1x0aWYgKHZwci1cdTAwM2VmaXJzdCBcdTAwM2UgdnByLVx1MDAzZWxhc3QpXG4rXHRcdHJldHVybiAtRU5PU1BDO1xuK1xuK1x0LypcbitcdCAqIEZpcnN0LCB0cnkgdG8gYWxsb2NhdGUgd2l0aGluIHRoZSBjdXJyZW50bHkgYWxsb2NhdGVkIHJlZ2lvbi4gVGhpc1xuK1x0ICoga2VlcHMgYWxsb2NhdGlvbnMgdGlnaHRseSBwYWNrZWQgYW5kIG1pbmltaXplcyB0aGUgVlBSIHNpemUgbmVlZGVkLlxuK1x0ICovXG4rXHRwYWdlbm8gPSB0ZWdyYV92cHJfZmluZF9mcmVlX3JlZ2lvbl9pbl9yYW5nZSh2cHIsIHZwci1cdTAwM2VmaXJzdCxcbitcdFx0XHRcdFx0XHQgICAgIHZwci1cdTAwM2VsYXN0ICsgMSwgbnVtX3BhZ2VzLFxuK1x0XHRcdFx0XHRcdCAgICAgYWxpZ24pO1xuK1x0aWYgKHBhZ2VubyBcdTAwM2U9IDApXG4rXHRcdHJldHVybiBwYWdlbm87XG4rXG4rXHQvKlxuK1x0ICogSWYgbm90IGVub3VnaCBmcmVlIHNwYWNlIGV4aXN0cyB3aXRoaW4gdGhlIGN1cnJlbnRseSBhbGxvY2F0ZWRcbitcdCAqIHJlZ2lvbiwgY2hlY2sgdG8gc2VlIGlmIHRoZSBhbGxvY2F0aW9uIGZpdHMgYW55d2hlcmUgd2l0aGluIHRoZVxuK1x0ICogYWN0aXZlIHJlZ2lvbiwgYXZvaWRpbmcgdGhlIG5lZWQgdG8gcmVzaXplIHRoZSBWUFIuXG4rXHQgKi9cbitcdGlmICh0ZWdyYV92cHJfZ2V0X2FjdGl2ZV9yYW5nZSh2cHIsIFx1MDAyNmZpcnN0LCBcdTAwMjZsYXN0KSkge1xuK1x0XHRwYWdlbm8gPSB0ZWdyYV92cHJfZmluZF9mcmVlX3JlZ2lvbl9pbl9yYW5nZSh2cHIsIGZpcnN0LCBsYXN0LFxuK1x0XHRcdFx0XHRcdFx0ICAgICBudW1fcGFnZXMsIGFsaWduKTtcbitcdFx0aWYgKHBhZ2VubyBcdTAwM2U9IDApXG4rXHRcdFx0cmV0dXJuIHBhZ2VubztcbitcdH1cbitcbitcdC8qXG4rXHQgKiBJZiBub3QgZW5vdWdoIGZyZWUgc3BhY2UgZXhpc3RzIHdpdGhpbiB0aGUgY3VycmVudGx5IGFjdGl2ZSByZWdpb24sXG4rXHQgKiB0cnkgdG8gYWxsb2NhdGUgYWRqYWNlbnQgdG8gaXQgdG8gZ3JvdyBpdCBjb250aWd1b3VzbHkgYW5kIGVuc3VyZVxuK1x0ICogb3B0aW1hbCBwYWNraW5nLlxuK1x0ICovXG4rXG4rXHQvKlxuK1x0ICogQ2FsY3VsYXRlIHdoZXJlIHRoZSBhbGxvY2F0aW9uIHNob3VsZCBzdGFydCB0byBlbmQgcmlnaHQgYXQgdGhlXG4rXHQgKiBmaXJzdCBhbGxvY2F0ZWQgcGFnZSwgd2l0aCBwcm9wZXIgYWxpZ25tZW50LlxuK1x0ICovXG4rXHRpZiAodnByLVx1MDAzZWZpcnN0IFx1MDAzZT0gbnVtX3BhZ2VzKSB7XG4rXHRcdHRhcmdldCA9IEFMSUdOX0RPV04odnByLVx1MDAzZWZpcnN0IC0gbnVtX3BhZ2VzLCBhbGlnbik7XG4rXG4rXHRcdGlmICghYml0bWFwX2FsbG9jYXRlKHZwci1cdTAwM2ViaXRtYXAsIHRhcmdldCwgbnVtX3BhZ2VzKSlcbitcdFx0XHRyZXR1cm4gdGFyZ2V0O1xuK1x0fVxuK1xuK1x0LyogVHJ5IGFmdGVyIHRoZSBsYXN0IGFsbG9jYXRpb24gKi9cbitcdHRhcmdldCA9IEFMSUdOKHZwci1cdTAwM2VsYXN0ICsgMSwgYWxpZ24pO1xuK1xuK1x0aWYgKHRhcmdldCArIG51bV9wYWdlcyBcdTAwM2M9IHZwci1cdTAwM2VudW1fcGFnZXMgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWJpdG1hcF9hbGxvY2F0ZSh2cHItXHUwMDNlYml0bWFwLCB0YXJnZXQsIG51bV9wYWdlcykpXG4rXHRcdHJldHVybiB0YXJnZXQ7XG4rXG4rXHQvKlxuK1x0ICogQ291bGRuJ3QgYWxsb2NhdGUgYXQgdGhlIGlkZWFsIGFkamFjZW50IHBvc2l0aW9uLCBzZWFyY2ggZm9yIGFueVxuK1x0ICogYXZhaWxhYmxlIHNwYWNlIGJlZm9yZSB0aGUgZmlyc3QgYWxsb2NhdGVkIHBhZ2UuXG4rXHQgKi9cbitcdHBhZ2VubyA9IHRlZ3JhX3Zwcl9maW5kX2ZyZWVfcmVnaW9uX2luX3JhbmdlKHZwciwgMCwgdnByLVx1MDAzZWZpcnN0LFxuK1x0XHRcdFx0XHRcdCAgICAgbnVtX3BhZ2VzLCBhbGlnbik7XG4rXHRpZiAocGFnZW5vIFx1MDAzZT0gMClcbitcdFx0cmV0dXJuIHBhZ2VubztcbitcbitcdC8qXG4rXHQgKiBDb3VsZG4ndCBhbGxvY2F0ZSBhdCB0aGUgaWRlYWwgYWRqYWNlbnQgcG9zaXRpb24sIHNlYXJjaFxuK1x0ICogZm9yIGFueSBhdmFpbGFibGUgc3BhY2UgYWZ0ZXIgdGhlIGxhc3QgYWxsb2NhdGVkIHBhZ2UuXG4rXHQgKi9cbitcdHBhZ2VubyA9IHRlZ3JhX3Zwcl9maW5kX2ZyZWVfcmVnaW9uX2luX3JhbmdlKHZwciwgdnByLVx1MDAzZWxhc3QgKyAxLFxuK1x0XHRcdFx0XHRcdCAgICAgdnByLVx1MDAzZW51bV9wYWdlcywgbnVtX3BhZ2VzLFxuK1x0XHRcdFx0XHRcdCAgICAgYWxpZ24pO1xuK1x0aWYgKHBhZ2VubyBcdTAwM2U9IDApXG4rXHRcdHJldHVybiBwYWdlbm87XG4rXG4rXHRyZXR1cm4gLUVOT1NQQztcbit9XG4rXG4rLypcbisgKiBGaW5kIGEgZnJlZSByZWdpb24sIHByZWZlcnJpbmcgbG9jYXRpb25zIG5lYXIgZXhpc3RpbmcgYWxsb2NhdGlvbnMgdG9cbisgKiBtaW5pbWl6ZSBWUFIgZnJhZ21lbnRhdGlvbi4gVGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaXMgdG8gZmlyc3QgYWxsb2NhdGVcbisgKiB3aXRoaW4gb3IgYWRqYWNlbnQgdG8gdGhlIGV4aXN0aW5nIHJlZ2lvbiB0byBrZWVwIGFsbG9jYXRpb25zIGNsdXN0ZXJlZC5cbisgKiBPdGhlcndpc2UgZmFsbCBiYWNrIHRvIGEgZ2VuZXJpYyBhbGxvY2F0aW9uIHVzaW5nIHRoZSBmaXJzdCBhdmFpbGFibGVcbisgKiBzcGFjZS5cbisgKlxuKyAqIFRoaXMgYXBwcm9hY2ggZm9jdXNlcyBvbiBwYWdlLWxldmVsIGFsbG9jYXRpb24gZmlyc3QsIHRoZW4gdGhlIGNodW5rXG4rICogc3lzdGVtIGRldGVybWluZXMgd2hpY2ggY2h1bmtzIG5lZWQgdG8gYmUgYWN0aXZhdGVkIGJhc2VkIG9uIHdoZXJlIHRoZVxuKyAqIHBhZ2VzIGVuZGVkIHVwLlxuKyAqL1xuK3N0YXRpYyBpbnQgdGVncmFfdnByX2FsbG9jYXRlX3JlZ2lvbihzdHJ1Y3QgdGVncmFfdnByICp2cHIsXG4rXHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBudW1fcGFnZXMsXG4rXHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBhbGlnbilcbit7XG4rXHRpbnQgcGFnZW5vO1xuK1xuK1x0LypcbitcdCAqIEZvciBub24tcmVzaXphYmxlIFZQUiAobm8gY2h1bmtzKSwgdXNlIHNpbXBsZSBmaXJzdC1maXQgYWxsb2NhdGlvbi5cbitcdCAqIENsdXN0ZXJpbmcgb3B0aW1pemF0aW9uIGlzIG9ubHkgYmVuZWZpY2lhbCBmb3IgcmVzaXphYmxlIFZQUiB3aGVyZVxuK1x0ICoga2VlcGluZyBhbGxvY2F0aW9ucyB0b2dldGhlciBtaW5pbWl6ZXMgdGhlIGFjdGl2ZSBWUFIgc2l6ZS5cbitcdCAqL1xuK1x0aWYgKHZwci1cdTAwM2VudW1fY2h1bmtzID09IDApXG4rXHRcdHJldHVybiB0ZWdyYV92cHJfZmluZF9mcmVlX3JlZ2lvbih2cHIsIG51bV9wYWdlcywgYWxpZ24pO1xuK1xuK1x0LypcbitcdCAqIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZXhpc3RpbmcgYWxsb2NhdGlvbnMgaW4gdGhlIGJpdG1hcC4gSWYgc28sXG4rXHQgKiB0cnkgdG8gYWxsb2NhdGUgbmVhciB0aGVtIHRvIG1pbmltaXplIGZyYWdtZW50YXRpb24uXG4rXHQgKi9cbitcdHBhZ2VubyA9IHRlZ3JhX3Zwcl9maW5kX2ZyZWVfcmVnaW9uX2NsdXN0ZXJlZCh2cHIsIG51bV9wYWdlcywgYWxpZ24pO1xuK1x0aWYgKHBhZ2VubyBcdTAwM2U9IDApXG4rXHRcdHJldHVybiBwYWdlbm87XG4rXG4rXHQvKlxuK1x0ICogSWYgdGhlcmUgYXJlIG5vIGV4aXN0aW5nIGFsbG9jYXRpb25zLCBvciBubyBzcGFjZSBhZGphY2VudCB0byB0aGVtLFxuK1x0ICogZmFsbCBiYWNrIHRvIHRoZSBmaXJzdCBhdmFpbGFibGUgc3BhY2UgYW55d2hlcmUgaW4gdGhlIFZQUi5cbitcdCAqL1xuK1x0cGFnZW5vID0gdGVncmFfdnByX2ZpbmRfZnJlZV9yZWdpb24odnByLCBudW1fcGFnZXMsIGFsaWduKTtcbitcdGlmIChwYWdlbm8gXHUwMDNlPSAwKVxuK1x0XHRyZXR1cm4gcGFnZW5vO1xuK1xuK1x0cmV0dXJuIC1FTk9TUEM7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgdGVncmFfdnByX2J1ZmZlciAqXG4rdGVncmFfdnByX2J1ZmZlcl9hbGxvY2F0ZShzdHJ1Y3QgdGVncmFfdnByICp2cHIsIHNpemVfdCBzaXplKVxuK3tcbitcdHVuc2lnbmVkIGludCBudW1fcGFnZXMgPSBzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0dW5zaWduZWQgaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpO1xuK1x0c3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKmJ1ZmZlcjtcbitcdHVuc2lnbmVkIGxvbmcgZmlyc3QsIGxhc3Q7XG4rXHRpbnQgcGFnZW5vLCBlcnI7XG4rXHRwZ29mZl90IGk7XG4rXG4rXHQvKlxuK1x0ICogXCJvcmRlclwiIGRlZmluZXMgdGhlIGFsaWdubWVudCBhbmQgc2l6ZSwgc28gdGhpcyBtYXkgcmVzdWx0IGluXG4rXHQgKiBmcmFnbWVudGVkIG1lbW9yeSBkZXBlbmRpbmcgb24gdGhlIGFsbG9jYXRpb24gcGF0dGVybnMuIEhvd2V2ZXIsXG4rXHQgKiBzaW5jZSB0aGlzIGlzIHVzZWQgcHJpbWFyaWx5IGZvciB2aWRlbyBmcmFtZXMsIGl0IGlzIGV4cGVjdGVkIHRoYXRcbitcdCAqIGEgbnVtYmVyIG9mIGJ1ZmZlcnMgb2YgdGhlIHNhbWUgc2l6ZSB3aWxsIGJlIGFsbG9jYXRlZCwgc29cbitcdCAqIGZyYWdtZW50YXRpb24gc2hvdWxkIGJlIG5lZ2xpZ2libGUuXG4rXHQgKi9cbitcdHBhZ2VubyA9IHRlZ3JhX3Zwcl9hbGxvY2F0ZV9yZWdpb24odnByLCBudW1fcGFnZXMsIDEpO1xuK1x0aWYgKHBhZ2VubyBcdTAwM2MgMClcbitcdFx0cmV0dXJuIEVSUl9QVFIocGFnZW5vKTtcbitcbitcdGZpcnN0ID0gZmluZF9maXJzdF9iaXQodnByLVx1MDAzZWJpdG1hcCwgdnByLVx1MDAzZW51bV9wYWdlcyk7XG4rXHRsYXN0ID0gZmluZF9sYXN0X2JpdCh2cHItXHUwMDNlYml0bWFwLCB2cHItXHUwMDNlbnVtX3BhZ2VzKTtcbitcbitcdGJ1ZmZlciA9IGt6YWxsb2Nfb2JqKCpidWZmZXIsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFidWZmZXIpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byByZWxlYXNlO1xuK1x0fVxuK1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2YnVmZmVyLVx1MDAzZWF0dGFjaG1lbnRzKTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmJ1ZmZlci1cdTAwM2VsaXN0KTtcbitcdG11dGV4X2luaXQoXHUwMDI2YnVmZmVyLVx1MDAzZWxvY2spO1xuK1x0YnVmZmVyLVx1MDAzZXN0YXJ0ID0gdnByLVx1MDAzZWJhc2UgKyAocGFnZW5vIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbitcdGJ1ZmZlci1cdTAwM2VsaW1pdCA9IGJ1ZmZlci1cdTAwM2VzdGFydCArIHNpemU7XG4rXHRidWZmZXItXHUwMDNlc2l6ZSA9IHNpemU7XG4rXHRidWZmZXItXHUwMDNlbnVtX3BhZ2VzID0gbnVtX3BhZ2VzO1xuK1x0YnVmZmVyLVx1MDAzZXBhZ2VubyA9IHBhZ2VubztcbitcdGJ1ZmZlci1cdTAwM2VvcmRlciA9IG9yZGVyO1xuK1xuK1x0YnVmZmVyLVx1MDAzZXBhZ2VzID0ga21hbGxvY19hcnJheShidWZmZXItXHUwMDNlbnVtX3BhZ2VzLFxuK1x0XHRcdFx0ICAgICAgc2l6ZW9mKCpidWZmZXItXHUwMDNlcGFnZXMpLFxuK1x0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWJ1ZmZlci1cdTAwM2VwYWdlcykge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGZyZWU7XG4rXHR9XG4rXG4rXHQvKiB0cmFjayB3aGljaCBjaHVua3MgdGhpcyBidWZmZXIgb3ZlcmxhcHMgKi9cbitcdGlmICh2cHItXHUwMDNlbnVtX2NodW5rcyBcdTAwM2UgMCkge1xuK1x0XHR1bnNpZ25lZCBpbnQgbGltaXQgPSBidWZmZXItXHUwMDNlcGFnZW5vICsgYnVmZmVyLVx1MDAzZW51bV9wYWdlcywgaTtcbitcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdnByLVx1MDAzZW51bV9jaHVua3M7IGkrKykge1xuK1x0XHRcdHN0cnVjdCB0ZWdyYV92cHJfY2h1bmsgKmNodW5rID0gXHUwMDI2dnByLVx1MDAzZWNodW5rc1tpXTtcbitcbitcdFx0XHRpZiAodGVncmFfdnByX2NodW5rX292ZXJsYXBzKGNodW5rLCBwYWdlbm8sIGxpbWl0KSlcbitcdFx0XHRcdHNldF9iaXQoaSwgYnVmZmVyLVx1MDAzZWNodW5rcyk7XG4rXHRcdH1cbitcbitcdFx0LyogYWN0aXZhdGUgY2h1bmtzIGlmIG5lY2Vzc2FyeSAqL1xuK1x0XHRlcnIgPSB0ZWdyYV92cHJfYWN0aXZhdGVfY2h1bmtzKHZwciwgYnVmZmVyKTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGZyZWU7XG4rXG4rXHRcdC8qIHRyYWNrIGZpcnN0IGFuZCBsYXN0IGFsbG9jYXRlZCBwYWdlcyAqL1xuK1x0XHRpZiAoYnVmZmVyLVx1MDAzZXBhZ2VubyBcdTAwM2MgdnByLVx1MDAzZWZpcnN0KVxuK1x0XHRcdHZwci1cdTAwM2VmaXJzdCA9IGJ1ZmZlci1cdTAwM2VwYWdlbm87XG4rXG4rXHRcdGlmIChsaW1pdCAtIDEgXHUwMDNlIHZwci1cdTAwM2VsYXN0KVxuK1x0XHRcdHZwci1cdTAwM2VsYXN0ID0gbGltaXQgLSAxO1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnVmZmVyLVx1MDAzZW51bV9wYWdlczsgaSsrKVxuK1x0XHRidWZmZXItXHUwMDNlcGFnZXNbaV0gPSBcdTAwMjZ2cHItXHUwMDNlc3RhcnRfcGFnZVtwYWdlbm8gKyBpXTtcbitcbitcdHJldHVybiBidWZmZXI7XG4rXG4rZnJlZTpcbitcdGtmcmVlKGJ1ZmZlci1cdTAwM2VwYWdlcyk7XG4rXHRrZnJlZShidWZmZXIpO1xuK3JlbGVhc2U6XG4rXHRiaXRtYXBfcmVsZWFzZV9yZWdpb24odnByLVx1MDAzZWJpdG1hcCwgcGFnZW5vLCBvcmRlcik7XG4rXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZWdyYV92cHJfYnVmZmVyX3JlbGVhc2Uoc3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKmJ1ZmZlcilcbit7XG4rXHRzdHJ1Y3QgdGVncmFfdnByICp2cHIgPSBidWZmZXItXHUwMDNldnByO1xuK1x0c3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKmVudHJ5O1xuK1x0dW5zaWduZWQgbG9uZyBmaXJzdCwgbGFzdDtcbitcdHVuc2lnbmVkIGludCBpO1xuK1xuK1x0LypcbitcdCAqIERlY3JlbWVudCBidWZmZXIgY291bnQgZm9yIGVhY2ggb3ZlcmxhcHBpbmcgY2h1bmsuIE5vdGUgdGhhdCBjaHVua3NcbitcdCAqIGFyZSBub3QgZGVhY3RpdmF0ZWQgaGVyZSB5ZXQsIHRoYXQncyBkb25lIGluIHRlZ3JhX3Zwcl9yZWN5Y2xlKClcbitcdCAqIGluc3RlYWQuXG4rXHQgKi9cbitcdGZvcl9lYWNoX3NldF9iaXQoaSwgYnVmZmVyLVx1MDAzZWNodW5rcywgdnByLVx1MDAzZW51bV9jaHVua3MpIHtcbitcdFx0aWYgKCFXQVJOX09OKHZwci1cdTAwM2VjaHVua3NbaV0ubnVtX2J1ZmZlcnMgPT0gMCkpXG4rXHRcdFx0dnByLVx1MDAzZWNodW5rc1tpXS5udW1fYnVmZmVycy0tO1xuK1x0fVxuK1xuK1x0LyogdHJhY2sgZmlyc3QgYW5kIGxhc3QgYWxsb2NhdGVkIHBhZ2VzICovXG4rXHRpZiAobGlzdF9pc19maXJzdChcdTAwMjZidWZmZXItXHUwMDNlbGlzdCwgXHUwMDI2dnByLVx1MDAzZWJ1ZmZlcnMpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGxpc3RfaXNfbGFzdChcdTAwMjZidWZmZXItXHUwMDNlbGlzdCwgXHUwMDI2dnByLVx1MDAzZWJ1ZmZlcnMpKSB7XG4rXHRcdC8qIGlmIHRoZXJlIGFyZSBubyByZW1haW5pbmcgYnVmZmVycyBhZnRlciB0aGlzLCByZXNldCAqL1xuK1x0XHR2cHItXHUwMDNlZmlyc3QgPSB+MFU7XG4rXHRcdHZwci1cdTAwM2VsYXN0ID0gMFU7XG4rXHR9IGVsc2UgaWYgKGxpc3RfaXNfZmlyc3QoXHUwMDI2YnVmZmVyLVx1MDAzZWxpc3QsIFx1MDAyNnZwci1cdTAwM2VidWZmZXJzKSkge1xuK1x0XHRlbnRyeSA9IGxpc3RfbmV4dF9lbnRyeShidWZmZXIsIGxpc3QpO1xuK1x0XHR2cHItXHUwMDNlZmlyc3QgPSBlbnRyeS1cdTAwM2VwYWdlbm87XG4rXHR9IGVsc2UgaWYgKGxpc3RfaXNfbGFzdChcdTAwMjZidWZmZXItXHUwMDNlbGlzdCwgXHUwMDI2dnByLVx1MDAzZWJ1ZmZlcnMpKSB7XG4rXHRcdGVudHJ5ID0gbGlzdF9wcmV2X2VudHJ5KGJ1ZmZlciwgbGlzdCk7XG4rXHRcdHZwci1cdTAwM2VsYXN0ID0gZW50cnktXHUwMDNlcGFnZW5vICsgZW50cnktXHUwMDNlbnVtX3BhZ2VzIC0gMTtcbitcdH1cbitcbitcdGJpdG1hcF9yZWxlYXNlX3JlZ2lvbih2cHItXHUwMDNlYml0bWFwLCBidWZmZXItXHUwMDNlcGFnZW5vLCBidWZmZXItXHUwMDNlb3JkZXIpO1xuK1x0bGlzdF9kZWwoXHUwMDI2YnVmZmVyLVx1MDAzZWxpc3QpO1xuK1x0a2ZyZWUoYnVmZmVyLVx1MDAzZXBhZ2VzKTtcbitcdGtmcmVlKGJ1ZmZlcik7XG4rXG4rXHRmaXJzdCA9IGZpbmRfZmlyc3RfYml0KHZwci1cdTAwM2ViaXRtYXAsIHZwci1cdTAwM2VudW1fcGFnZXMpO1xuK1x0bGFzdCA9IGZpbmRfbGFzdF9iaXQodnByLVx1MDAzZWJpdG1hcCwgdnByLVx1MDAzZW51bV9wYWdlcyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVncmFfdnByX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqYnVmLFxuK1x0XHRcdCAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50KVxuK3tcbitcdHN0cnVjdCB0ZWdyYV92cHJfYnVmZmVyICpidWZmZXIgPSBidWYtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCB0ZWdyYV92cHJfYXR0YWNobWVudCAqYXR0YWNoO1xuK1x0aW50IGVycjtcbitcbitcdGF0dGFjaCA9IGt6YWxsb2Nfb2JqKCphdHRhY2gsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFhdHRhY2gpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0ZXJyID0gc2dfYWxsb2NfdGFibGVfZnJvbV9wYWdlcyhcdTAwMjZhdHRhY2gtXHUwMDNlc2d0LCBidWZmZXItXHUwMDNlcGFnZXMsXG4rXHRcdFx0XHRcdGJ1ZmZlci1cdTAwM2VudW1fcGFnZXMsIDAsIGJ1ZmZlci1cdTAwM2VzaXplLFxuK1x0XHRcdFx0XHRHRlBfS0VSTkVMKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdGdvdG8gZnJlZTtcbitcbitcdGF0dGFjaC1cdTAwM2VkZXYgPSBhdHRhY2gtXHUwMDNlZGV2O1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2YXR0YWNoLVx1MDAzZWxpc3QpO1xuK1x0YXR0YWNobWVudC1cdTAwM2Vwcml2ID0gYXR0YWNoO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZidWZmZXItXHUwMDNlbG9jayk7XG4rXHRsaXN0X2FkZChcdTAwMjZhdHRhY2gtXHUwMDNlbGlzdCwgXHUwMDI2YnVmZmVyLVx1MDAzZWF0dGFjaG1lbnRzKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZidWZmZXItXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitmcmVlOlxuK1x0a2ZyZWUoYXR0YWNoKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlZ3JhX3Zwcl9kZXRhY2goc3RydWN0IGRtYV9idWYgKmJ1ZixcbitcdFx0XHQgICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQpXG4re1xuK1x0c3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKmJ1ZmZlciA9IGJ1Zi1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IHRlZ3JhX3Zwcl9hdHRhY2htZW50ICphdHRhY2ggPSBhdHRhY2htZW50LVx1MDAzZXByaXY7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmJ1ZmZlci1cdTAwM2Vsb2NrKTtcbitcdGxpc3RfZGVsKFx1MDAyNmF0dGFjaC1cdTAwM2VsaXN0KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZidWZmZXItXHUwMDNlbG9jayk7XG4rXG4rXHRzZ19mcmVlX3RhYmxlKFx1MDAyNmF0dGFjaC1cdTAwM2VzZ3QpO1xuK1x0a2ZyZWUoYXR0YWNoKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBzZ190YWJsZSAqXG4rdGVncmFfdnByX21hcF9kbWFfYnVmKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXG4rXHRcdCAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbilcbit7XG4rXHRzdHJ1Y3QgdGVncmFfdnByX2F0dGFjaG1lbnQgKmF0dGFjaCA9IGF0dGFjaG1lbnQtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBzZ190YWJsZSAqc2d0ID0gXHUwMDI2YXR0YWNoLVx1MDAzZXNndDtcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBkbWFfbWFwX3NndGFibGUoYXR0YWNobWVudC1cdTAwM2VkZXYsIHNndCwgZGlyZWN0aW9uLFxuK1x0XHRcdCAgICAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpO1xuK1x0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbitcbitcdHJldHVybiBzZ3Q7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlZ3JhX3Zwcl91bm1hcF9kbWFfYnVmKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXG4rXHRcdFx0XHQgICAgc3RydWN0IHNnX3RhYmxlICpzZ3QsXG4rXHRcdFx0XHQgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKVxuK3tcbitcdGRtYV91bm1hcF9zZ3RhYmxlKGF0dGFjaG1lbnQtXHUwMDNlZGV2LCBzZ3QsIGRpcmVjdGlvbixcbitcdFx0XHQgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZWdyYV92cHJfcmVjeWNsZShzdHJ1Y3QgdGVncmFfdnByICp2cHIpXG4re1xuK1x0REVDTEFSRV9CSVRNQVAoZGlydHksIHZwci1cdTAwM2VudW1fY2h1bmtzKTtcbitcdHVuc2lnbmVkIGludCBpO1xuK1x0aW50IGVycjtcbitcbitcdGJpdG1hcF96ZXJvKGRpcnR5LCB2cHItXHUwMDNlbnVtX2NodW5rcyk7XG4rXG4rXHQvKlxuK1x0ICogRGVhY3RpdmF0ZSBhbnkgdW51c2VkIGNodW5rcyBmcm9tIHRoZSBib3R0b20uLi5cbitcdCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdnByLVx1MDAzZW51bV9jaHVua3M7IGkrKykge1xuK1x0XHRzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuayA9IFx1MDAyNnZwci1cdTAwM2VjaHVua3NbaV07XG4rXG4rXHRcdGlmICghY2h1bmstXHUwMDNlYWN0aXZlKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAoY2h1bmstXHUwMDNlbnVtX2J1ZmZlcnMgXHUwMDNlIDApXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGVyciA9IHRlZ3JhX3Zwcl9jaHVua19kZWFjdGl2YXRlKGNodW5rKTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRwcl9lcnIoXCJmYWlsZWQgdG8gZGVhY3RpdmF0ZSBjaHVuayAjJXVcXG5cIiwgaSk7XG4rXHRcdGVsc2Uge1xuK1x0XHRcdGNsZWFyX2JpdChpLCB2cHItXHUwMDNlYWN0aXZlKTtcbitcdFx0XHRzZXRfYml0KGksIGRpcnR5KTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LypcbitcdCAqIC4uLiBhbmQgdGhlIHRvcC5cbitcdCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdnByLVx1MDAzZW51bV9jaHVua3M7IGkrKykge1xuK1x0XHR1bnNpZ25lZCBpbnQgaW5kZXggPSB2cHItXHUwMDNlbnVtX2NodW5rcyAtIGkgLSAxO1xuK1x0XHRzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuayA9IFx1MDAyNnZwci1cdTAwM2VjaHVua3NbaW5kZXhdO1xuK1xuK1x0XHRpZiAoIWNodW5rLVx1MDAzZWFjdGl2ZSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aWYgKGNodW5rLVx1MDAzZW51bV9idWZmZXJzIFx1MDAzZSAwKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRlcnIgPSB0ZWdyYV92cHJfY2h1bmtfZGVhY3RpdmF0ZShjaHVuayk7XG4rXHRcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdFx0cHJfZXJyKFwiZmFpbGVkIHRvIGRlYWN0aXZhdGUgY2h1bmsgIyV1XFxuXCIsIGluZGV4KTtcbitcdFx0ZWxzZSB7XG4rXHRcdFx0Y2xlYXJfYml0KGksIHZwci1cdTAwM2VhY3RpdmUpO1xuK1x0XHRcdHNldF9iaXQoaSwgZGlydHkpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRpZiAoIWJpdG1hcF9lbXB0eShkaXJ0eSwgdnByLVx1MDAzZW51bV9jaHVua3MpKSB7XG4rXHRcdGVyciA9IHRlZ3JhX3Zwcl9yZXNpemUodnByKTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuK1x0XHRcdHByX2VycihcImZhaWxlZCB0byBzaHJpbmsgVlBSOiAlZFxcblwiLCBlcnIpO1xuK1x0XHRcdGdvdG8gYWN0aXZhdGU7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybjtcbitcbithY3RpdmF0ZTpcbitcdGZvcl9lYWNoX3NldF9iaXQoaSwgZGlydHksIHZwci1cdTAwM2VudW1fY2h1bmtzKSB7XG4rXHRcdGVyciA9IHRlZ3JhX3Zwcl9jaHVua19hY3RpdmF0ZShcdTAwMjZ2cHItXHUwMDNlY2h1bmtzW2ldKTtcbitcdFx0aWYgKFdBUk5fT04oZXJyIFx1MDAzYyAwKSlcbitcdFx0XHRwcl9lcnIoXCJmYWlsZWQgdG8gYWN0aXZhdGUgY2h1bmsgIyV1OiAlZFxcblwiLCBpLCBlcnIpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCB0ZWdyYV92cHJfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1ZiAqYnVmKVxuK3tcbitcdHN0cnVjdCB0ZWdyYV92cHJfYnVmZmVyICpidWZmZXIgPSBidWYtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCB0ZWdyYV92cHIgKnZwciA9IGJ1ZmZlci1cdTAwM2V2cHI7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnZwci1cdTAwM2Vsb2NrKTtcbitcbitcdHRlZ3JhX3Zwcl9idWZmZXJfcmVsZWFzZShidWZmZXIpO1xuK1xuK1x0aWYgKHZwci1cdTAwM2VudW1fY2h1bmtzIFx1MDAzZSAwKVxuK1x0XHR0ZWdyYV92cHJfcmVjeWNsZSh2cHIpO1xuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnZwci1cdTAwM2Vsb2NrKTtcbit9XG4rXG4rLypcbisgKiBQcm9oaWJpdCB1c2Vyc3BhY2UgbWFwcGluZyBiZWNhdXNlIHRoZSBDUFUgY2Fubm90IGFjY2VzcyB0aGlzIG1lbW9yeVxuKyAqIGFueXdheS5cbisgKi9cbitzdGF0aWMgaW50IHRlZ3JhX3Zwcl9iZWdpbl9jcHVfYWNjZXNzKHN0cnVjdCBkbWFfYnVmICpidWYsXG4rXHRcdFx0XHQgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pXG4re1xuK1x0cmV0dXJuIC1FUEVSTTtcbit9XG4rXG4rc3RhdGljIGludCB0ZWdyYV92cHJfZW5kX2NwdV9hY2Nlc3Moc3RydWN0IGRtYV9idWYgKmJ1ZixcbitcdFx0XHRcdCAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pXG4re1xuK1x0cmV0dXJuIC1FUEVSTTtcbit9XG4rXG4rc3RhdGljIGludCB0ZWdyYV92cHJfbW1hcChzdHJ1Y3QgZG1hX2J1ZiAqYnVmLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHRyZXR1cm4gLUVQRVJNO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHRlZ3JhX3Zwcl9idWZfb3BzID0ge1xuK1x0LmF0dGFjaCA9IHRlZ3JhX3Zwcl9hdHRhY2gsXG4rXHQuZGV0YWNoID0gdGVncmFfdnByX2RldGFjaCxcbitcdC5tYXBfZG1hX2J1ZiA9IHRlZ3JhX3Zwcl9tYXBfZG1hX2J1ZixcbitcdC51bm1hcF9kbWFfYnVmID0gdGVncmFfdnByX3VubWFwX2RtYV9idWYsXG4rXHQucmVsZWFzZSA9IHRlZ3JhX3Zwcl9yZWxlYXNlLFxuK1x0LmJlZ2luX2NwdV9hY2Nlc3MgPSB0ZWdyYV92cHJfYmVnaW5fY3B1X2FjY2VzcyxcbitcdC5lbmRfY3B1X2FjY2VzcyA9IHRlZ3JhX3Zwcl9lbmRfY3B1X2FjY2VzcyxcbitcdC5tbWFwID0gdGVncmFfdnByX21tYXAsXG4rfTtcbitcbitzdGF0aWMgc3RydWN0IGRtYV9idWYgKnRlZ3JhX3Zwcl9hbGxvY2F0ZShzdHJ1Y3QgZG1hX2hlYXAgKmhlYXAsXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHUzMiBmZF9mbGFncyxcbitcdFx0XHRcdFx0ICB1NjQgaGVhcF9mbGFncylcbit7XG4rXHRzdHJ1Y3QgdGVncmFfdnByICp2cHIgPSBkbWFfaGVhcF9nZXRfZHJ2ZGF0YShoZWFwKTtcbitcdHN0cnVjdCB0ZWdyYV92cHJfYnVmZmVyICpidWZmZXIsICplbnRyeTtcbitcdHNpemVfdCBzaXplID0gQUxJR04obGVuLCB2cHItXHUwMDNlYWxpZ24pO1xuK1x0REVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhwb3J0KTtcbitcdHN0cnVjdCBkbWFfYnVmICpidWY7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnZwci1cdTAwM2Vsb2NrKTtcbitcbitcdGJ1ZmZlciA9IHRlZ3JhX3Zwcl9idWZmZXJfYWxsb2NhdGUodnByLCBzaXplKTtcbitcdGlmIChJU19FUlIoYnVmZmVyKSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2dnByLVx1MDAzZWxvY2spO1xuK1x0XHRyZXR1cm4gRVJSX0NBU1QoYnVmZmVyKTtcbitcdH1cbitcbitcdC8qIGluc2VydCBpbiB0aGUgY29ycmVjdCBvcmRlciAqL1xuK1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnZwci1cdTAwM2VidWZmZXJzKSkge1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZ2cHItXHUwMDNlYnVmZmVycywgbGlzdCkge1xuK1x0XHRcdGlmIChidWZmZXItXHUwMDNlcGFnZW5vIFx1MDAzYyBlbnRyeS1cdTAwM2VwYWdlbm8pIHtcbitcdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2YnVmZmVyLVx1MDAzZWxpc3QsIFx1MDAyNmVudHJ5LVx1MDAzZWxpc3QpO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRpZiAobGlzdF9lbXB0eShcdTAwMjZidWZmZXItXHUwMDNlbGlzdCkpXG4rXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2YnVmZmVyLVx1MDAzZWxpc3QsIFx1MDAyNnZwci1cdTAwM2VidWZmZXJzKTtcbitcbitcdGJ1ZmZlci1cdTAwM2V2cHIgPSB2cHI7XG4rXG4rXHQvKlxuK1x0ICogSWYgYSB2YWxpZCBidWZmZXIgd2FzIGFsbG9jYXRlZCwgd3JhcCBpdCBpbiBhIGRtYV9idWZcbitcdCAqIGFuZCByZXR1cm4gaXQuXG4rXHQgKi9cbitcdGV4cG9ydC5leHBfbmFtZSA9IGRtYV9oZWFwX2dldF9uYW1lKGhlYXApO1xuK1x0ZXhwb3J0Lm9wcyA9IFx1MDAyNnRlZ3JhX3Zwcl9idWZfb3BzO1xuK1x0ZXhwb3J0LnNpemUgPSBidWZmZXItXHUwMDNlc2l6ZTtcbitcdGV4cG9ydC5mbGFncyA9IGZkX2ZsYWdzO1xuK1x0ZXhwb3J0LnByaXYgPSBidWZmZXI7XG4rXG4rXHRidWYgPSBkbWFfYnVmX2V4cG9ydChcdTAwMjZleHBvcnQpO1xuK1x0aWYgKElTX0VSUihidWYpKVxuK1x0XHR0ZWdyYV92cHJfYnVmZmVyX3JlbGVhc2UoYnVmZmVyKTtcbitcbitcdG11dGV4X3VubG9jayhcdTAwMjZ2cHItXHUwMDNlbG9jayk7XG4rXHRyZXR1cm4gYnVmO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZWdyYV92cHJfZGVidWdmc19zaG93X2J1ZmZlcnMoc3RydWN0IHRlZ3JhX3ZwciAqdnByLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXG4re1xuK1x0c3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKmJ1ZmZlcjtcbitcdGNoYXIgYnVmWzE2XTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkoYnVmZmVyLCBcdTAwMjZ2cHItXHUwMDNlYnVmZmVycywgbGlzdCkge1xuK1x0XHRzdHJpbmdfZ2V0X3NpemUoYnVmZmVyLVx1MDAzZXNpemUsIDEsIFNUUklOR19VTklUU18yLCBidWYsXG4rXHRcdFx0XHRzaXplb2YoYnVmKSk7XG4rXHRcdHNlcV9wcmludGYocywgXCIgICVwYXAtJXBhcCAoJXMpXFxuXCIsIFx1MDAyNmJ1ZmZlci1cdTAwM2VzdGFydCxcbitcdFx0XHQgICBcdTAwMjZidWZmZXItXHUwMDNlbGltaXQsIGJ1Zik7XG4rXG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlZ3JhX3Zwcl9kZWJ1Z2ZzX3Nob3dfY2h1bmtzKHN0cnVjdCB0ZWdyYV92cHIgKnZwcixcbitcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXG4re1xuK1x0c3RydWN0IHRlZ3JhX3Zwcl9idWZmZXIgKmJ1ZmZlcjtcbitcdHVuc2lnbmVkIGludCBpO1xuK1x0Y2hhciBidWZbMTZdO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdnByLVx1MDAzZW51bV9jaHVua3M7IGkrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuayA9IFx1MDAyNnZwci1cdTAwM2VjaHVua3NbaV07XG4rXG4rXHRcdHN0cmluZ19nZXRfc2l6ZShjaHVuay1cdTAwM2VzaXplLCAxLCBTVFJJTkdfVU5JVFNfMiwgYnVmLFxuK1x0XHRcdFx0c2l6ZW9mKGJ1ZikpO1xuK1x0XHRzZXFfcHJpbnRmKHMsIFwiICAlcGFwLSVwYXAgKCVzKSAoJXMsICV1IGJ1ZmZlcnMpXFxuXCIsXG4rXHRcdFx0ICAgXHUwMDI2Y2h1bmstXHUwMDNlc3RhcnQsIFx1MDAyNmNodW5rLVx1MDAzZWxpbWl0LCBidWYsXG4rXHRcdFx0ICAgY2h1bmstXHUwMDNlYWN0aXZlID8gXCJhY3RpdmVcIiA6IFwiaW5hY3RpdmVcIixcbitcdFx0XHQgICBjaHVuay1cdTAwM2VudW1fYnVmZmVycyk7XG4rXHR9XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1ZmZlciwgXHUwMDI2dnByLVx1MDAzZWJ1ZmZlcnMsIGxpc3QpIHtcbitcdFx0c3RyaW5nX2dldF9zaXplKGJ1ZmZlci1cdTAwM2VzaXplLCAxLCBTVFJJTkdfVU5JVFNfMiwgYnVmLFxuK1x0XHRcdFx0c2l6ZW9mKGJ1ZikpO1xuK1x0XHRzZXFfcHJpbnRmKHMsIFwiJXBhcC0lcGFwICglcywgY2h1bmtzOiAlKnBibClcXG5cIixcbitcdFx0XHQgICBcdTAwMjZidWZmZXItXHUwMDNlc3RhcnQsIFx1MDAyNmJ1ZmZlci1cdTAwM2VsaW1pdCwgYnVmLFxuK1x0XHRcdCAgIHZwci1cdTAwM2VudW1fY2h1bmtzLCBidWZmZXItXHUwMDNlY2h1bmtzKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCB0ZWdyYV92cHJfZGVidWdmc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGRtYV9oZWFwICpoZWFwKVxuK3tcbitcdHN0cnVjdCB0ZWdyYV92cHIgKnZwciA9IGRtYV9oZWFwX2dldF9kcnZkYXRhKGhlYXApO1xuK1x0cGh5c19hZGRyX3QgbGltaXQgPSB2cHItXHUwMDNlYmFzZSArIHZwci1cdTAwM2VzaXplO1xuK1x0Y2hhciBidWZbMTZdO1xuK1xuK1x0c3RyaW5nX2dldF9zaXplKHZwci1cdTAwM2VzaXplLCAxLCBTVFJJTkdfVU5JVFNfMiwgYnVmLCBzaXplb2YoYnVmKSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJXBhcC0lcGFwICglcylcXG5cIiwgXHUwMDI2dnByLVx1MDAzZWJhc2UsIFx1MDAyNmxpbWl0LCBidWYpO1xuK1xuK1x0aWYgKHZwci1cdTAwM2VudW1fY2h1bmtzID09IDApXG4rXHRcdHRlZ3JhX3Zwcl9kZWJ1Z2ZzX3Nob3dfYnVmZmVycyh2cHIsIHMpO1xuK1x0ZWxzZVxuK1x0XHR0ZWdyYV92cHJfZGVidWdmc19zaG93X2NodW5rcyh2cHIsIHMpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2hlYXBfb3BzIHRlZ3JhX3Zwcl9oZWFwX29wcyA9IHtcbitcdC5hbGxvY2F0ZSA9IHRlZ3JhX3Zwcl9hbGxvY2F0ZSxcbitcdC5zaG93ID0gdGVncmFfdnByX2RlYnVnZnNfc2hvdyxcbit9O1xuK1xuK3N0YXRpYyBpbnQgdGVncmFfdnByX3NldHVwX2NodW5rcyhzdHJ1Y3QgdGVncmFfdnByICp2cHIsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0cGh5c19hZGRyX3Qgc3RhcnQsIGxpbWl0O1xuK1x0dW5zaWduZWQgaW50IG9yZGVyLCBpO1xuK1x0c2l6ZV90IG1heF9zaXplO1xuK1x0aW50IGVycjtcbitcbitcdC8qIFRoaXMgc2VlbXMgYSByZWFzb25hYmxlIHZhbHVlLCBzbyBoYXJkLWNvZGUgdGhpcyBmb3Igbm93LiAqL1xuK1x0dnByLVx1MDAzZW51bV9jaHVua3MgPSA0O1xuK1xuK1x0dnByLVx1MDAzZWNodW5rcyA9IGtjYWxsb2ModnByLVx1MDAzZW51bV9jaHVua3MsIHNpemVvZigqdnByLVx1MDAzZWNodW5rcyksXG4rXHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXZwci1cdTAwM2VjaHVua3MpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0bWF4X3NpemUgPSBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIChnZXRfb3JkZXIodnByLVx1MDAzZXNpemUpIC0gaWxvZzIodnByLVx1MDAzZW51bV9jaHVua3MpKTtcbitcdG9yZGVyID0gZ2V0X29yZGVyKHZwci1cdTAwM2VhbGlnbik7XG4rXG4rXHQvKlxuK1x0ICogQWxsb2NhdGUgQ01BIGFyZWFzIGZvciBWUFIuIEFsbCBhcmVhcyB3aWxsIGJlIHJvdWdodGx5IHRoZSBzYW1lXG4rXHQgKiBzaXplLCB3aXRoIHRoZSBsYXN0IGFyZWEgdGFraW5nIHVwIHRoZSByZXN0LlxuK1x0ICovXG4rXHRzdGFydCA9IHZwci1cdTAwM2ViYXNlO1xuK1x0bGltaXQgPSB2cHItXHUwMDNlYmFzZSArIHZwci1cdTAwM2VzaXplO1xuK1xuK1x0cHJfZGVidWcoXCJWUFI6ICVwYXAtJXBhcCAoJWx1IHBhZ2VzLCAldSBjaHVua3MsICVsdSBNaUIpXFxuXCIsIFx1MDAyNnN0YXJ0LFxuK1x0XHQgXHUwMDI2bGltaXQsIHZwci1cdTAwM2VudW1fcGFnZXMsIHZwci1cdTAwM2VudW1fY2h1bmtzLFxuK1x0XHQgKHVuc2lnbmVkIGxvbmcpdnByLVx1MDAzZXNpemUgLyAxMDI0IC8gMTAyNCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2cHItXHUwMDNlbnVtX2NodW5rczsgaSsrKSB7XG4rXHRcdHNpemVfdCBzaXplID0gbGltaXQgLSBzdGFydDtcbitcdFx0cGh5c19hZGRyX3QgZW5kO1xuK1xuK1x0XHRzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBtYXhfc2l6ZSk7XG4rXHRcdGVuZCA9IHN0YXJ0ICsgc2l6ZSAtIDE7XG4rXG4rXHRcdGVyciA9IHRlZ3JhX3Zwcl9jaHVua19pbml0KHZwciwgXHUwMDI2dnByLVx1MDAzZWNodW5rc1tpXSwgc3RhcnQsIHNpemUsXG4rXHRcdFx0XHRcdCAgIG9yZGVyLCBuYW1lKTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuK1x0XHRcdHByX2VycihcImZhaWxlZCB0byBjcmVhdGUgVlBSIGNodW5rOiAlZFxcblwiLCBlcnIpO1xuK1x0XHRcdGdvdG8gZnJlZTtcbitcdFx0fVxuK1xuK1x0XHRwcl9kZWJ1ZyhcIiAgJTJ1OiAlcGFwLSVwYXAgKCVsdSBNaUIpXFxuXCIsIGksIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQsXG4rXHRcdFx0IHNpemUgLyAxMDI0IC8gMTAyNCk7XG4rXHRcdHN0YXJ0ICs9IHNpemU7XG4rXHR9XG4rXG4rXHR2cHItXHUwMDNlZmlyc3QgPSB+MFU7XG4rXHR2cHItXHUwMDNlbGFzdCA9IDBVO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZnJlZTpcbitcdHdoaWxlIChpLS0pXG4rXHRcdHRlZ3JhX3Zwcl9jaHVua19mcmVlKFx1MDAyNnZwci1cdTAwM2VjaHVua3NbaV0pO1xuK1xuK1x0a2ZyZWUodnByLVx1MDAzZWNodW5rcyk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZWdyYV92cHJfZnJlZV9jaHVua3Moc3RydWN0IHRlZ3JhX3ZwciAqdnByKVxuK3tcbitcdHVuc2lnbmVkIGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdnByLVx1MDAzZW51bV9jaHVua3M7IGkrKylcbitcdFx0dGVncmFfdnByX2NodW5rX2ZyZWUoXHUwMDI2dnByLVx1MDAzZWNodW5rc1tpXSk7XG4rXG4rXHRrZnJlZSh2cHItXHUwMDNlY2h1bmtzKTtcbit9XG4rXG4rc3RhdGljIGludCB0ZWdyYV92cHJfc2V0dXBfc3RhdGljKHN0cnVjdCB0ZWdyYV92cHIgKnZwcilcbit7XG4rXHRwaHlzX2FkZHJfdCBzdGFydCwgbGltaXQ7XG4rXG4rXHRzdGFydCA9IHZwci1cdTAwM2ViYXNlO1xuK1x0bGltaXQgPSB2cHItXHUwMDNlYmFzZSArIHZwci1cdTAwM2VzaXplO1xuK1xuK1x0cHJfZGVidWcoXCJWUFI6ICVwYXAtJXBhcCAoJWx1IHBhZ2VzLCAlbHUgTWlCKVxcblwiLCBcdTAwMjZzdGFydCwgXHUwMDI2bGltaXQsXG4rXHRcdCB2cHItXHUwMDNlbnVtX3BhZ2VzLCAodW5zaWduZWQgbG9uZyl2cHItXHUwMDNlc2l6ZSAvIDEwMjQgLyAxMDI0KTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IF9faW5pdCB0ZWdyYV92cHJfYWRkX2hlYXAoc3RydWN0IHJlc2VydmVkX21lbSAqcm1lbSxcbitcdFx0XHRcdCAgICAgc3RydWN0IGRldmljZV9ub2RlICpucClcbit7XG4rXHRzdHJ1Y3QgZG1hX2hlYXBfZXhwb3J0X2luZm8gaW5mbyA9IHt9O1xuK1x0dW5zaWduZWQgbG9uZyBmaXJzdCwgbGFzdDtcbitcdHN0cnVjdCBkbWFfaGVhcCAqaGVhcDtcbitcdHN0cnVjdCB0ZWdyYV92cHIgKnZwcjtcbitcdGludCBlcnI7XG4rXG4rXHR2cHIgPSBremFsbG9jX29iaigqdnByLCBHRlBfS0VSTkVMKTtcbitcdGlmICghdnByKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNnZwci1cdTAwM2VidWZmZXJzKTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNnZwci1cdTAwM2VkZXZpY2VzKTtcbitcdHZwci1cdTAwM2VyZXNpemFibGUgPSAhb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCBcIm5vLW1hcFwiKTtcbitcdHZwci1cdTAwM2V1c2VfZnJlZXplciA9IHRydWU7XG4rXHR2cHItXHUwMDNlZGV2X25vZGUgPSBucDtcbitcdHZwci1cdTAwM2VhbGlnbiA9IFBBR0VfU0laRTtcbitcdHZwci1cdTAwM2ViYXNlID0gcm1lbS1cdTAwM2ViYXNlO1xuK1x0dnByLVx1MDAzZXNpemUgPSBybWVtLVx1MDAzZXNpemU7XG4rXG4rXHQvKiBjb21tb24gc2V0dXAgKi9cbitcdHZwci1cdTAwM2VzdGFydF9wYWdlID0gcGh5c190b19wYWdlKHZwci1cdTAwM2ViYXNlKTtcbitcdHZwci1cdTAwM2VudW1fcGFnZXMgPSB2cHItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcbitcdHZwci1cdTAwM2ViaXRtYXAgPSBiaXRtYXBfemFsbG9jKHZwci1cdTAwM2VudW1fcGFnZXMsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCF2cHItXHUwMDNlYml0bWFwKSB7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gZnJlZTtcbitcdH1cbitcbitcdGZpcnN0ID0gZmluZF9maXJzdF9iaXQodnByLVx1MDAzZWJpdG1hcCwgdnByLVx1MDAzZW51bV9wYWdlcyk7XG4rXHRsYXN0ID0gZmluZF9sYXN0X2JpdCh2cHItXHUwMDNlYml0bWFwLCB2cHItXHUwMDNlbnVtX3BhZ2VzKTtcbitcbitcdGlmICh2cHItXHUwMDNlcmVzaXphYmxlKVxuK1x0XHRlcnIgPSB0ZWdyYV92cHJfc2V0dXBfY2h1bmtzKHZwciwgcm1lbS1cdTAwM2VuYW1lKTtcbitcdGVsc2VcbitcdFx0ZXJyID0gdGVncmFfdnByX3NldHVwX3N0YXRpYyh2cHIpO1xuK1xuK1x0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0Z290byBmcmVlO1xuK1xuK1x0aW5mby5uYW1lID0gdnByLVx1MDAzZWRldl9ub2RlLVx1MDAzZW5hbWU7XG4rXHRpbmZvLm9wcyA9IFx1MDAyNnRlZ3JhX3Zwcl9oZWFwX29wcztcbitcdGluZm8ucHJpdiA9IHZwcjtcbitcbitcdGhlYXAgPSBkbWFfaGVhcF9hZGQoXHUwMDI2aW5mbyk7XG4rXHRpZiAoSVNfRVJSKGhlYXApKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIoaGVhcCk7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdHJtZW0tXHUwMDNlcHJpdiA9IGhlYXA7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitjbGVhbnVwOlxuK1x0aWYgKHZwci1cdTAwM2VyZXNpemFibGUpXG4rXHRcdHRlZ3JhX3Zwcl9mcmVlX2NodW5rcyh2cHIpO1xuK2ZyZWU6XG4rXHRiaXRtYXBfZnJlZSh2cHItXHUwMDNlYml0bWFwKTtcbitcdGtmcmVlKHZwcik7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgaW50IF9faW5pdCB0ZWdyYV92cHJfaW5pdCh2b2lkKVxuK3tcbitcdGNvbnN0IGNoYXIgKmNvbXBhdGlibGUgPSBcIm52aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvblwiO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7XG4rXHRzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpybWVtO1xuK1x0aW50IGVycjtcbitcbitcdHBhcmVudCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKFwiL3Jlc2VydmVkLW1lbW9yeVwiKTtcbitcdGlmICghcGFyZW50KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKHBhcmVudCwgY2hpbGQpIHtcbitcdFx0aWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShjaGlsZCwgY29tcGF0aWJsZSkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHJtZW0gPSBvZl9yZXNlcnZlZF9tZW1fbG9va3VwKGNoaWxkKTtcbitcdFx0aWYgKCFybWVtKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRlcnIgPSB0ZWdyYV92cHJfYWRkX2hlYXAocm1lbSwgY2hpbGQpO1xuK1x0XHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRcdHByX2VycihcImZhaWxlZCB0byBhZGQgVlBSIGhlYXAgZm9yICVwT0Y6ICVkXFxuXCIsIGNoaWxkLFxuK1x0XHRcdCAgICAgICBlcnIpO1xuK1xuK1x0XHQvKiBvbmx5IGEgc2luZ2xlIFZQUiBoZWFwIGlzIHN1cHBvcnRlZCAqL1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbittb2R1bGVfaW5pdCh0ZWdyYV92cHJfaW5pdCk7XG4rXG4rc3RhdGljIGludCB0ZWdyYV92cHJfbm9kZV9pbml0KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpybWVtKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHRlZ3JhX3Zwcl9kZXZpY2VfaW5pdChzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpybWVtLCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IGRtYV9oZWFwICpoZWFwID0gcm1lbS1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IHRlZ3JhX3ZwciAqdnByID0gZG1hX2hlYXBfZ2V0X2RydmRhdGEoaGVhcCk7XG4rXHRzdHJ1Y3QgdGVncmFfdnByX2RldmljZSAqbm9kZTtcbitcbitcdGlmICghZGV2LVx1MDAzZWRyaXZlci1cdTAwM2VwbS1cdTAwM2VmcmVlemUgfHwgIWRldi1cdTAwM2Vkcml2ZXItXHUwMDNlcG0tXHUwMDNldGhhdylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRub2RlID0ga3phbGxvY19vYmooKm5vZGUsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFub2RlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5vZGUtXHUwMDNlbm9kZSk7XG4rXHRub2RlLVx1MDAzZWRldiA9IGRldjtcbitcbitcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlLCBcdTAwMjZ2cHItXHUwMDNlZGV2aWNlcyk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVncmFfdnByX2RldmljZV9yZWxlYXNlKHN0cnVjdCByZXNlcnZlZF9tZW0gKnJtZW0sXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBkZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgZG1hX2hlYXAgKmhlYXAgPSBybWVtLVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgdGVncmFfdnByICp2cHIgPSBkbWFfaGVhcF9nZXRfZHJ2ZGF0YShoZWFwKTtcbitcdHN0cnVjdCB0ZWdyYV92cHJfZGV2aWNlICpub2RlLCAqdG1wO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIHRtcCwgXHUwMDI2dnByLVx1MDAzZWRldmljZXMsIG5vZGUpIHtcbitcdFx0aWYgKG5vZGUtXHUwMDNlZGV2ID09IGRldikge1xuK1x0XHRcdGxpc3RfZGVsKFx1MDAyNm5vZGUtXHUwMDNlbm9kZSk7XG4rXHRcdFx0a2ZyZWUobm9kZSk7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCByZXNlcnZlZF9tZW1fb3BzIHRlZ3JhX3Zwcl9ybWVtX29wcyA9IHtcbitcdC5ub2RlX2luaXQgPSB0ZWdyYV92cHJfbm9kZV9pbml0LFxuK1x0LmRldmljZV9pbml0ID0gdGVncmFfdnByX2RldmljZV9pbml0LFxuK1x0LmRldmljZV9yZWxlYXNlID0gdGVncmFfdnByX2RldmljZV9yZWxlYXNlLFxuK307XG4rXG4rUkVTRVJWRURNRU1fT0ZfREVDTEFSRSh0ZWdyYV92cHIsIFwibnZpZGlhLHRlZ3JhLXZpZGVvLXByb3RlY3Rpb24tcmVnaW9uXCIsXG4rXHRcdCAgICAgICBcdTAwMjZ0ZWdyYV92cHJfcm1lbV9vcHMpO1xuK1xuK01PRFVMRV9ERVNDUklQVElPTihcIk5WSURJQSBUZWdyYSBWaWRlby1Qcm90ZWN0aW9uLVJlZ2lvbiBETUEtQlVGIGhlYXAgZHJpdmVyXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYml0bWFwLmggYi9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oXG5pbmRleCBiMDA3ZDU0YTkwMzZhNS4uZGNjODFkYzA4MmVkYzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oXG5AQCAtNzIxLDEwICs3MjEsMTAgQEAgdm9pZCBiaXRtYXBfcmVsZWFzZV9yZWdpb24odW5zaWduZWQgbG9uZyAqYml0bWFwLCB1bnNpZ25lZCBpbnQgcG9zLCBpbnQgb3JkZXIpXG4gfVxuIFxuIC8qKlxuLSAqIGJpdG1hcF9hbGxvY2F0ZV9yZWdpb24gLSBhbGxvY2F0ZSBiaXRtYXAgcmVnaW9uXG4rICogYml0bWFwX2FsbG9jYXRlIC0gYWxsb2NhdGUgYml0bWFwIHJlZ2lvblxuICAqXHRAYml0bWFwOiBhcnJheSBvZiB1bnNpZ25lZCBsb25ncyBjb3JyZXNwb25kaW5nIHRvIHRoZSBiaXRtYXBcbiAgKlx0QHBvczogYmVnaW5uaW5nIG9mIGJpdCByZWdpb24gdG8gYWxsb2NhdGVcbi0gKlx0QG9yZGVyOiByZWdpb24gc2l6ZSAobG9nIGJhc2UgMiBvZiBudW1iZXIgb2YgYml0cykgdG8gYWxsb2NhdGVcbisgKlx0QGxlbjogbnVtYmVyIG9mIGJpdHMgdG8gYWxsb2NhdGVcbiAgKlxuICAqIEFsbG9jYXRlIChzZXQgYml0cyBpbikgYSBzcGVjaWZpZWQgcmVnaW9uIG9mIGEgYml0bWFwLlxuICAqXG5AQCAtNzMyLDE2ICs3MzIsMzEgQEAgdm9pZCBiaXRtYXBfcmVsZWFzZV9yZWdpb24odW5zaWduZWQgbG9uZyAqYml0bWFwLCB1bnNpZ25lZCBpbnQgcG9zLCBpbnQgb3JkZXIpXG4gICogZnJlZSAobm90IGFsbCBiaXRzIHdlcmUgemVybykuXG4gICovXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZVxuLWludCBiaXRtYXBfYWxsb2NhdGVfcmVnaW9uKHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgdW5zaWduZWQgaW50IHBvcywgaW50IG9yZGVyKVxuK2ludCBiaXRtYXBfYWxsb2NhdGUodW5zaWduZWQgbG9uZyAqYml0bWFwLCB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgbGVuKVxuIHtcbi1cdHVuc2lnbmVkIGludCBsZW4gPSBCSVQob3JkZXIpO1xuLVxuIFx0aWYgKGZpbmRfbmV4dF9iaXQoYml0bWFwLCBwb3MgKyBsZW4sIHBvcykgXHUwMDNjIHBvcyArIGxlbilcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcdGJpdG1hcF9zZXQoYml0bWFwLCBwb3MsIGxlbik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyoqXG4rICogYml0bWFwX2FsbG9jYXRlX3JlZ2lvbiAtIGFsbG9jYXRlIGJpdG1hcCByZWdpb25cbisgKlx0QGJpdG1hcDogYXJyYXkgb2YgdW5zaWduZWQgbG9uZ3MgY29ycmVzcG9uZGluZyB0byB0aGUgYml0bWFwXG4rICpcdEBwb3M6IGJlZ2lubmluZyBvZiBiaXQgcmVnaW9uIHRvIGFsbG9jYXRlXG4rICpcdEBvcmRlcjogcmVnaW9uIHNpemUgKGxvZyBiYXNlIDIgb2YgbnVtYmVyIG9mIGJpdHMpIHRvIGFsbG9jYXRlXG4rICpcbisgKiBBbGxvY2F0ZSAoc2V0IGJpdHMgaW4pIGEgc3BlY2lmaWVkIHJlZ2lvbiBvZiBhIGJpdG1hcC5cbisgKlxuKyAqIFJldHVybnM6IDAgb24gc3VjY2Vzcywgb3IgJS1FQlVTWSBpZiBzcGVjaWZpZWQgcmVnaW9uIHdhc24ndFxuKyAqIGZyZWUgKG5vdCBhbGwgYml0cyB3ZXJlIHplcm8pLlxuKyAqL1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbitpbnQgYml0bWFwX2FsbG9jYXRlX3JlZ2lvbih1bnNpZ25lZCBsb25nICpiaXRtYXAsIHVuc2lnbmVkIGludCBwb3MsIGludCBvcmRlcilcbit7XG4rXHRyZXR1cm4gYml0bWFwX2FsbG9jYXRlKGJpdG1hcCwgcG9zLCBCSVQob3JkZXIpKTtcbit9XG4rXG4gLyoqXG4gICogYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24gLSBmaW5kIGEgY29udGlndW91cyBhbGlnbmVkIG1lbSByZWdpb25cbiAgKlx0QGJpdG1hcDogYXJyYXkgb2YgdW5zaWduZWQgbG9uZ3MgY29ycmVzcG9uZGluZyB0byB0aGUgYml0bWFwXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbWEuaCBiL2luY2x1ZGUvbGludXgvY21hLmhcbmluZGV4IDg1NTVkMzhhOTdiMWE1Li5mYjdhNDkyM2MzYmE5YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY21hLmhcbisrKyBiL2luY2x1ZGUvbGludXgvY21hLmhcbkBAIC03LDcgKzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L251bWEuaFx1MDAzZVxuIFxuICNpZmRlZiBDT05GSUdfQ01BX0FSRUFTXG4tI2RlZmluZSBNQVhfQ01BX0FSRUFTXHRDT05GSUdfQ01BX0FSRUFTXG4rI2RlZmluZSBNQVhfRUFSTFlfQ01BX0FSRUFTXHRDT05GSUdfQ01BX0FSRUFTXG4gI2VuZGlmXG4gXG4gI2RlZmluZSBDTUFfTUFYX05BTUUgNjRcbkBAIC01Nyw4ICs1NywxNCBAQCBzdHJ1Y3QgcGFnZSAqY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGludCBvcmRlcik7XG4gYm9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4gXHRcdHVuc2lnbmVkIGxvbmcgY291bnQpO1xuIFxuK2V4dGVybiBpbnQgY21hX2Zvcl9lYWNoX2Vhcmx5X2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpO1xuIGV4dGVybiBpbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpO1xuIGV4dGVybiBib29sIGNtYV9pbnRlcnNlY3RzKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xuIFxuIGV4dGVybiB2b2lkIGNtYV9yZXNlcnZlX3BhZ2VzX29uX2Vycm9yKHN0cnVjdCBjbWEgKmNtYSk7XG4rXG4rZXh0ZXJuIHN0cnVjdCBjbWEgKmNtYV9jcmVhdGUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcbitcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgb3JkZXJfcGVyX2JpdCwgY29uc3QgY2hhciAqbmFtZSk7XG4rZXh0ZXJuIHZvaWQgY21hX2ZyZWUoc3RydWN0IGNtYSAqY21hKTtcbitcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1oZWFwLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1oZWFwLmhcbmluZGV4IDY0ODMyOGE2NGIyN2VhLi4xYzliZWQxZjRkZGVmOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWhlYXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9kbWEtaGVhcC5oXG5AQCAtMTIsNiArMTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgZG1hX2hlYXA7XG4rc3RydWN0IHNlcV9maWxlO1xuIFxuIC8qKlxuICAqIHN0cnVjdCBkbWFfaGVhcF9vcHMgLSBvcHMgdG8gb3BlcmF0ZSBvbiBhIGdpdmVuIGhlYXBcbkBAIC0yNCw2ICsyNSw3IEBAIHN0cnVjdCBkbWFfaGVhcF9vcHMge1xuIFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgbGVuLFxuIFx0XHRcdFx0ICAgIHUzMiBmZF9mbGFncyxcbiBcdFx0XHRcdCAgICB1NjQgaGVhcF9mbGFncyk7XG4rXHRpbnQgKCpzaG93KShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBkbWFfaGVhcCAqaGVhcCk7XG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaCBiL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXG5pbmRleCAzMDMwZDkyNDVmNWFjOC4uYWJjYjExMzc4ZmRiZDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmhcbkBAIC03Miw2ICs3MiwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBjbGVhcl9tY2Vfbm9zcGVjKHVuc2lnbmVkIGxvbmcgcGZuKVxuIH1cbiAjZW5kaWZcbiBcbisjaWZuZGVmIENPTkZJR19BUk02NFxuK3N0YXRpYyBpbmxpbmUgaW50IHNldF9tZW1vcnlfZGV2aWNlKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitzdGF0aWMgaW5saW5lIGludCBzZXRfbWVtb3J5X25vcm1hbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rI2VuZGlmXG4rXG4gI2lmbmRlZiBDT05GSUdfQVJDSF9IQVNfTUVNX0VOQ1JZUFRcbiBzdGF0aWMgaW5saW5lIGludCBzZXRfbWVtb3J5X2VuY3J5cHRlZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdGVncmFfdnByLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy90ZWdyYV92cHIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mOGNlYjE3Njc5ZmUwYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdGVncmFfdnByLmhcbkBAIC0wLDAgKzEsNTcgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuK1xuKyNpZiAhZGVmaW5lZChfVFJBQ0VfVEVHUkFfVlBSX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpXG4rI2RlZmluZSBfVFJBQ0VfVEVHUkFfVlBSX0hcbitcbisjdW5kZWYgVFJBQ0VfU1lTVEVNXG4rI2RlZmluZSBUUkFDRV9TWVNURU0gdGVncmFfdnByXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHJhY2Vwb2ludC5oXHUwMDNlXG4rXG4rVFJBQ0VfRVZFTlQodGVncmFfdnByX2NodW5rX2FjdGl2YXRlLFxuK1x0VFBfUFJPVE8ocGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IGxpbWl0KSxcbitcdFRQX0FSR1Moc3RhcnQsIGxpbWl0KSxcbitcdFRQX1NUUlVDVF9fZW50cnkoXG4rXHRcdF9fZmllbGQocGh5c19hZGRyX3QsIHN0YXJ0KVxuK1x0XHRfX2ZpZWxkKHBoeXNfYWRkcl90LCBsaW1pdClcbitcdCksXG4rXHRUUF9mYXN0X2Fzc2lnbihcbitcdFx0X19lbnRyeS1cdTAwM2VzdGFydCA9IHN0YXJ0O1xuK1x0XHRfX2VudHJ5LVx1MDAzZWxpbWl0ID0gbGltaXQ7XG4rXHQpLFxuK1x0VFBfcHJpbnRrKFwiJXBhcC0lcGFwXCIsIFx1MDAyNl9fZW50cnktXHUwMDNlc3RhcnQsXG4rXHRcdCAgXHUwMDI2X19lbnRyeS1cdTAwM2VsaW1pdClcbispO1xuK1xuK1RSQUNFX0VWRU5UKHRlZ3JhX3Zwcl9jaHVua19kZWFjdGl2YXRlLFxuK1x0VFBfUFJPVE8ocGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IGxpbWl0KSxcbitcdFRQX0FSR1Moc3RhcnQsIGxpbWl0KSxcbitcdFRQX1NUUlVDVF9fZW50cnkoXG4rXHRcdF9fZmllbGQocGh5c19hZGRyX3QsIHN0YXJ0KVxuK1x0XHRfX2ZpZWxkKHBoeXNfYWRkcl90LCBsaW1pdClcbitcdCksXG4rXHRUUF9mYXN0X2Fzc2lnbihcbitcdFx0X19lbnRyeS1cdTAwM2VzdGFydCA9IHN0YXJ0O1xuK1x0XHRfX2VudHJ5LVx1MDAzZWxpbWl0ID0gbGltaXQ7XG4rXHQpLFxuK1x0VFBfcHJpbnRrKFwiJXBhcC0lcGFwXCIsIFx1MDAyNl9fZW50cnktXHUwMDNlc3RhcnQsXG4rXHRcdCAgXHUwMDI2X19lbnRyeS1cdTAwM2VsaW1pdClcbispO1xuK1xuK1RSQUNFX0VWRU5UKHRlZ3JhX3Zwcl9zZXQsXG4rXHRUUF9QUk9UTyhwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKSxcbitcdFRQX0FSR1MoYmFzZSwgc2l6ZSksXG4rXHRUUF9TVFJVQ1RfX2VudHJ5KFxuK1x0XHRfX2ZpZWxkKHBoeXNfYWRkcl90LCBzdGFydClcbitcdFx0X19maWVsZChwaHlzX2FkZHJfdCwgbGltaXQpXG4rXHQpLFxuK1x0VFBfZmFzdF9hc3NpZ24oXG4rXHRcdF9fZW50cnktXHUwMDNlc3RhcnQgPSBiYXNlO1xuK1x0XHRfX2VudHJ5LVx1MDAzZWxpbWl0ID0gYmFzZSArIHNpemU7XG4rXHQpLFxuK1x0VFBfcHJpbnRrKFwiJXBhcC0lcGFwXCIsIFx1MDAyNl9fZW50cnktXHUwMDNlc3RhcnQsIFx1MDAyNl9fZW50cnktXHUwMDNlbGltaXQpXG4rKTtcbitcbisjZW5kaWYgLyogX1RSQUNFX1RFR1JBX1ZQUl9IICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjdHJhY2UvZGVmaW5lX3RyYWNlLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYyBiL2tlcm5lbC9kbWEvY29udGlndW91cy5jXG5pbmRleCBmNzU0MDc5YTI4N2Q2MS4uNzk3NTU1MWY2OWIzZDkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xuKysrIGIva2VybmVsL2RtYS9jb250aWd1b3VzLmNcbkBAIC01Miw3ICs1Miw3IEBAXG4gI2RlZmluZSBDTUFfU0laRV9NQllURVMgMFxuICNlbmRpZlxuIFxuLXN0YXRpYyBzdHJ1Y3QgY21hICpkbWFfY29udGlndW91c19hcmVhc1tNQVhfQ01BX0FSRUFTXTtcbitzdGF0aWMgc3RydWN0IGNtYSAqZG1hX2NvbnRpZ3VvdXNfYXJlYXNbTUFYX0VBUkxZX0NNQV9BUkVBU107XG4gc3RhdGljIHVuc2lnbmVkIGludCBkbWFfY29udGlndW91c19hcmVhc19udW07XG4gXG4gc3RhdGljIGludCBkbWFfY29udGlndW91c19pbnNlcnRfYXJlYShzdHJ1Y3QgY21hICpjbWEpXG5kaWZmIC0tZ2l0IGEvbW0vY21hLmMgYi9tbS9jbWEuY1xuaW5kZXggYTEzY2U0OTk5YjM5ZjYuLmY5ODllMmU5ODU5NGZiIDEwMDY0NFxuLS0tIGEvbW0vY21hLmNcbisrKyBiL21tL2NtYS5jXG5AQCAtMzQsNyArMzQsMTIgQEBcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuICNpbmNsdWRlIFwiY21hLmhcIlxuIFxuLXN0cnVjdCBjbWEgY21hX2FyZWFzW01BWF9DTUFfQVJFQVNdO1xuK3N0YXRpYyBERUZJTkVfTVVURVgoY21hX2xvY2spO1xuK1xuK3N0cnVjdCBjbWEgY21hX2Vhcmx5X2FyZWFzW01BWF9FQVJMWV9DTUFfQVJFQVNdO1xuK3Vuc2lnbmVkIGludCBjbWFfZWFybHlfYXJlYV9jb3VudDtcbitcbitzdGF0aWMgTElTVF9IRUFEKGNtYV9hcmVhcyk7XG4gdW5zaWduZWQgaW50IGNtYV9hcmVhX2NvdW50O1xuIFxuIHBoeXNfYWRkcl90IGNtYV9nZXRfYmFzZShjb25zdCBzdHJ1Y3QgY21hICpjbWEpXG5AQCAtMTk4LDcgKzIwMyw2IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBjbWFfYWN0aXZhdGVfYXJlYShzdHJ1Y3QgY21hICpjbWEpXG4gXHRcdFx0XHRmcmVlX3Jlc2VydmVkX3BhZ2UocGZuX3RvX3BhZ2UocGZuKSk7XG4gXHRcdH1cbiBcdH1cbi1cdHRvdGFsY21hX3BhZ2VzIC09IGNtYS1cdTAwM2Vjb3VudDtcbiBcdGNtYS1cdTAwM2VhdmFpbGFibGVfY291bnQgPSBjbWEtXHUwMDNlY291bnQgPSAwO1xuIFx0cHJfZXJyKFwiQ01BIGFyZWEgJXMgY291bGQgbm90IGJlIGFjdGl2YXRlZFxcblwiLCBjbWEtXHUwMDNlbmFtZSk7XG4gfVxuQEAgLTIwNyw4ICsyMTEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBjbWFfaW5pdF9yZXNlcnZlZF9hcmVhcyh2b2lkKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY21hX2FyZWFfY291bnQ7IGkrKylcbi1cdFx0Y21hX2FjdGl2YXRlX2FyZWEoXHUwMDI2Y21hX2FyZWFzW2ldKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNtYV9lYXJseV9hcmVhX2NvdW50OyBpKyspXG4rXHRcdGNtYV9hY3RpdmF0ZV9hcmVhKFx1MDAyNmNtYV9lYXJseV9hcmVhc1tpXSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMjE5LDQxICsyMjMsNzcgQEAgdm9pZCBfX2luaXQgY21hX3Jlc2VydmVfcGFnZXNfb25fZXJyb3Ioc3RydWN0IGNtYSAqY21hKVxuIFx0c2V0X2JpdChDTUFfUkVTRVJWRV9QQUdFU19PTl9FUlJPUiwgXHUwMDI2Y21hLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgX19pbml0IGNtYV9pbml0X2FyZWEoc3RydWN0IGNtYSAqY21hLCBjb25zdCBjaGFyICpuYW1lLFxuK1x0XHRcdFx0IHBoeXNfYWRkcl90IHNpemUsIHVuc2lnbmVkIGludCBvcmRlcl9wZXJfYml0KVxuK3tcbitcdGlmIChuYW1lKVxuK1x0XHRzdHJzY3B5KGNtYS1cdTAwM2VuYW1lLCBuYW1lKTtcbitcdGVsc2VcbitcdFx0c25wcmludGYoY21hLVx1MDAzZW5hbWUsIENNQV9NQVhfTkFNRSwgIFwiY21hJWRcXG5cIiwgY21hX2FyZWFfY291bnQpO1xuK1xuK1x0Y21hLVx1MDAzZWF2YWlsYWJsZV9jb3VudCA9IGNtYS1cdTAwM2Vjb3VudCA9IHNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRjbWEtXHUwMDNlb3JkZXJfcGVyX2JpdCA9IG9yZGVyX3Blcl9iaXQ7XG4rXG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjbWEtXHUwMDNlbm9kZSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgX19pbml0IGNtYV9uZXdfYXJlYShjb25zdCBjaGFyICpuYW1lLCBwaHlzX2FkZHJfdCBzaXplLFxuIFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXJfcGVyX2JpdCxcbiBcdFx0XHQgICAgICAgc3RydWN0IGNtYSAqKnJlc19jbWEpXG4ge1xuIFx0c3RydWN0IGNtYSAqY21hO1xuIFxuLVx0aWYgKGNtYV9hcmVhX2NvdW50ID09IEFSUkFZX1NJWkUoY21hX2FyZWFzKSkge1xuK1x0aWYgKGNtYV9lYXJseV9hcmVhX2NvdW50ID09IEFSUkFZX1NJWkUoY21hX2Vhcmx5X2FyZWFzKSkge1xuIFx0XHRwcl9lcnIoXCJOb3QgZW5vdWdoIHNsb3RzIGZvciBDTUEgcmVzZXJ2ZWQgcmVnaW9ucyFcXG5cIik7XG4gXHRcdHJldHVybiAtRU5PU1BDO1xuIFx0fVxuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZjbWFfbG9jayk7XG4rXG4gXHQvKlxuIFx0ICogRWFjaCByZXNlcnZlZCBhcmVhIG11c3QgYmUgaW5pdGlhbGlzZWQgbGF0ZXIsIHdoZW4gbW9yZSBrZXJuZWxcbiBcdCAqIHN1YnN5c3RlbXMgKGxpa2Ugc2xhYiBhbGxvY2F0b3IpIGFyZSBhdmFpbGFibGUuXG4gXHQgKi9cbi1cdGNtYSA9IFx1MDAyNmNtYV9hcmVhc1tjbWFfYXJlYV9jb3VudF07XG4tXHRjbWFfYXJlYV9jb3VudCsrO1xuK1x0Y21hID0gXHUwMDI2Y21hX2Vhcmx5X2FyZWFzW2NtYV9lYXJseV9hcmVhX2NvdW50XTtcbitcdGNtYV9lYXJseV9hcmVhX2NvdW50Kys7XG4gXG4tXHRpZiAobmFtZSlcbi1cdFx0c3Ryc2NweShjbWEtXHUwMDNlbmFtZSwgbmFtZSk7XG4tXHRlbHNlXG4tXHRcdHNucHJpbnRmKGNtYS1cdTAwM2VuYW1lLCBDTUFfTUFYX05BTUUsICBcImNtYSVkXFxuXCIsIGNtYV9hcmVhX2NvdW50KTtcbitcdGNtYV9pbml0X2FyZWEoY21hLCBuYW1lLCBzaXplLCBvcmRlcl9wZXJfYml0KTtcbiBcbi1cdGNtYS1cdTAwM2VhdmFpbGFibGVfY291bnQgPSBjbWEtXHUwMDNlY291bnQgPSBzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLVx0Y21hLVx1MDAzZW9yZGVyX3Blcl9iaXQgPSBvcmRlcl9wZXJfYml0O1xuLVx0KnJlc19jbWEgPSBjbWE7XG4gXHR0b3RhbGNtYV9wYWdlcyArPSBjbWEtXHUwMDNlY291bnQ7XG4rXHQqcmVzX2NtYSA9IGNtYTtcbitcbitcdG11dGV4X3VubG9jayhcdTAwMjZjbWFfbG9jayk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19pbml0IGNtYV9kcm9wX2FyZWEoc3RydWN0IGNtYSAqY21hKVxuIHtcbitcdG11dGV4X2xvY2soXHUwMDI2Y21hX2xvY2spO1xuIFx0dG90YWxjbWFfcGFnZXMgLT0gY21hLVx1MDAzZWNvdW50O1xuLVx0Y21hX2FyZWFfY291bnQtLTtcbitcdGNtYV9lYXJseV9hcmVhX2NvdW50LS07XG4rXHRtdXRleF91bmxvY2soXHUwMDI2Y21hX2xvY2spO1xuK31cbitcbitzdGF0aWMgaW50IF9faW5pdCBjbWFfY2hlY2tfbWVtb3J5KHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXG4re1xuK1x0aWYgKCFzaXplIHx8ICFtZW1ibG9ja19pc19yZWdpb25fcmVzZXJ2ZWQoYmFzZSwgc2l6ZSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0LypcbitcdCAqIENNQSB1c2VzIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTIGFzIGFsaWdubWVudCByZXF1aXJlbWVudCB3aGljaFxuK1x0ICogbmVlZHMgcGFnZWJsb2NrX29yZGVyIHRvIGJlIGluaXRpYWxpemVkLiBMZXQncyBlbmZvcmNlIGl0LlxuK1x0ICovXG4rXHRpZiAoIXBhZ2VibG9ja19vcmRlcikge1xuK1x0XHRwcl9lcnIoXCJwYWdlYmxvY2tfb3JkZXIgbm90IHlldCBpbml0aWFsaXplZC4gQ2FsbGVkIGR1cmluZyBlYXJseSBib290P1xcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHQvKiBlbnN1cmUgbWluaW1hbCBhbGlnbm1lbnQgcmVxdWlyZWQgYnkgbW0gY29yZSAqL1xuK1x0aWYgKCFJU19BTElHTkVEKGJhc2UgfCBzaXplLCBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuQEAgLTI3NiwyMiArMzE2LDkgQEAgaW50IF9faW5pdCBjbWFfaW5pdF9yZXNlcnZlZF9tZW0ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcbiBcdHN0cnVjdCBjbWEgKmNtYTtcbiBcdGludCByZXQ7XG4gXG4tXHQvKiBTYW5pdHkgY2hlY2tzICovXG4tXHRpZiAoIXNpemUgfHwgIW1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHQvKlxuLVx0ICogQ01BIHVzZXMgQ01BX01JTl9BTElHTk1FTlRfQllURVMgYXMgYWxpZ25tZW50IHJlcXVpcmVtZW50IHdoaWNoXG4tXHQgKiBuZWVkcyBwYWdlYmxvY2tfb3JkZXIgdG8gYmUgaW5pdGlhbGl6ZWQuIExldCdzIGVuZm9yY2UgaXQuXG4tXHQgKi9cbi1cdGlmICghcGFnZWJsb2NrX29yZGVyKSB7XG4tXHRcdHByX2VycihcInBhZ2VibG9ja19vcmRlciBub3QgeWV0IGluaXRpYWxpemVkLiBDYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3Q/XFxuXCIpO1xuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdH1cbi1cbi1cdC8qIGVuc3VyZSBtaW5pbWFsIGFsaWdubWVudCByZXF1aXJlZCBieSBtbSBjb3JlICovXG4tXHRpZiAoIUlTX0FMSUdORUQoYmFzZSB8IHNpemUsIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRyZXQgPSBjbWFfY2hlY2tfbWVtb3J5KGJhc2UsIHNpemUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IGNtYV9uZXdfYXJlYShuYW1lLCBzaXplLCBvcmRlcl9wZXJfYml0LCBcdTAwMjZjbWEpO1xuIFx0aWYgKHJldCAhPSAwKVxuQEAgLTQ0NCw3ICs0NzEsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBfX2NtYV9kZWNsYXJlX2NvbnRpZ3VvdXNfbmlkKHBoeXNfYWRkcl90ICpiYXNlcCxcbiBcdHByX2RlYnVnKFwiJXMoc2l6ZSAlcGEsIGJhc2UgJXBhLCBsaW1pdCAlcGEgYWxpZ25tZW50ICVwYSlcXG5cIixcbiBcdFx0X19mdW5jX18sIFx1MDAyNnNpemUsIFx1MDAyNmJhc2UsIFx1MDAyNmxpbWl0LCBcdTAwMjZhbGlnbm1lbnQpO1xuIFxuLVx0aWYgKGNtYV9hcmVhX2NvdW50ID09IEFSUkFZX1NJWkUoY21hX2FyZWFzKSkge1xuK1x0aWYgKGNtYV9lYXJseV9hcmVhX2NvdW50ID09IEFSUkFZX1NJWkUoY21hX2Vhcmx5X2FyZWFzKSkge1xuIFx0XHRwcl9lcnIoXCJOb3QgZW5vdWdoIHNsb3RzIGZvciBDTUEgcmVzZXJ2ZWQgcmVnaW9ucyFcXG5cIik7XG4gXHRcdHJldHVybiAtRU5PU1BDO1xuIFx0fVxuQEAgLTEwNTEsMTIgKzEwNzgsMTIgQEAgYm9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4taW50IGNtYV9mb3JfZWFjaF9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKVxuK2ludCBjbWFfZm9yX2VhY2hfZWFybHlfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSlcbiB7XG4gXHRpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNtYV9hcmVhX2NvdW50OyBpKyspIHtcbi1cdFx0aW50IHJldCA9IGl0KFx1MDAyNmNtYV9hcmVhc1tpXSwgZGF0YSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbWFfZWFybHlfYXJlYV9jb3VudDsgaSsrKSB7XG4rXHRcdGludCByZXQgPSBpdChcdTAwMjZjbWFfZWFybHlfYXJlYXNbaV0sIGRhdGEpO1xuIFxuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG5AQCAtMTA2NSw2ICsxMDkyLDI1IEBAIGludCBjbWFfZm9yX2VhY2hfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbitpbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IGNtYSAqY21hO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZjbWFfbG9jayk7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNtYSwgXHUwMDI2Y21hX2FyZWFzLCBub2RlKSB7XG4rXHRcdGludCByZXQgPSBpdChjbWEsIGRhdGEpO1xuK1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNtYV9sb2NrKTtcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2Y21hX2xvY2spO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIGJvb2wgY21hX2ludGVyc2VjdHMoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbiB7XG4gXHRpbnQgcjtcbkBAIC0xMTQ3LDMgKzExOTMsNzQgQEAgdm9pZCBfX2luaXQgKmNtYV9yZXNlcnZlX2Vhcmx5KHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBzaXplKVxuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4rXG4rc3RydWN0IGNtYSAqX19pbml0IGNtYV9jcmVhdGUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcbitcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgb3JkZXJfcGVyX2JpdCwgY29uc3QgY2hhciAqbmFtZSlcbit7XG4rXHRzdHJ1Y3QgY21hICpjbWE7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gY21hX2NoZWNrX21lbW9yeShiYXNlLCBzaXplKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4rXG4rXHRjbWEgPSBremFsbG9jX29iaigqY21hLCBHRlBfS0VSTkVMKTtcbitcdGlmICghY21hKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdGNtYV9pbml0X2FyZWEoY21hLCBuYW1lLCBzaXplLCBvcmRlcl9wZXJfYml0KTtcbitcdGNtYS1cdTAwM2VyYW5nZXNbMF0uYmFzZV9wZm4gPSBQRk5fRE9XTihiYXNlKTtcbitcdGNtYS1cdTAwM2VyYW5nZXNbMF0uZWFybHlfcGZuID0gUEZOX0RPV04oYmFzZSk7XG4rXHRjbWEtXHUwMDNlcmFuZ2VzWzBdLmNvdW50ID0gY21hLVx1MDAzZWNvdW50O1xuK1x0Y21hLVx1MDAzZW5yYW5nZXMgPSAxO1xuK1xuK1x0Y21hX2FjdGl2YXRlX2FyZWEoY21hKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2Y21hX2xvY2spO1xuK1x0bGlzdF9hZGRfdGFpbChcdTAwMjZjbWEtXHUwMDNlbm9kZSwgXHUwMDI2Y21hX2FyZWFzKTtcbitcdHRvdGFsY21hX3BhZ2VzICs9IGNtYS1cdTAwM2Vjb3VudDtcbitcdGNtYV9hcmVhX2NvdW50Kys7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2Y21hX2xvY2spO1xuK1xuK1x0cmV0dXJuIGNtYTtcbit9XG4rXG4rdm9pZCBjbWFfZnJlZShzdHJ1Y3QgY21hICpjbWEpXG4re1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHQvKlxuK1x0ICogU2FmZXR5IGNoZWNrIHRvIHByZXZlbnQgYSBDTUEgd2l0aCBhY3RpdmUgYWxsb2NhdGlvbnMgZnJvbSBiZWluZ1xuK1x0ICogcmVsZWFzZWQuXG4rXHQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNtYS1cdTAwM2VucmFuZ2VzOyBpKyspIHtcbitcdFx0dW5zaWduZWQgbG9uZyBuYml0cyA9IGNtYV9iaXRtYXBfbWF4bm8oY21hLCBcdTAwMjZjbWEtXHUwMDNlcmFuZ2VzW2ldKTtcbitcbitcdFx0aWYgKCFiaXRtYXBfZW1wdHkoY21hLVx1MDAzZXJhbmdlc1tpXS5iaXRtYXAsIG5iaXRzKSkge1xuK1x0XHRcdFdBUk4oMSwgXCIlczogcmFuZ2UgJXUgbm90IGVtcHR5XFxuXCIsIGNtYS1cdTAwM2VuYW1lLCBpKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIGZyZWUgcmVzZXJ2ZWQgcGFnZXMgYW5kIHRoZSBiaXRtYXAgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNtYS1cdTAwM2VucmFuZ2VzOyBpKyspIHtcbitcdFx0c3RydWN0IGNtYV9tZW1yYW5nZSAqY21yID0gXHUwMDI2Y21hLVx1MDAzZXJhbmdlc1tpXTtcbitcdFx0dW5zaWduZWQgbG9uZyBlbmRfcGZuLCBwZm47XG4rXG4rXHRcdGVuZF9wZm4gPSBjbXItXHUwMDNlYmFzZV9wZm4gKyBjbXItXHUwMDNlY291bnQ7XG4rXHRcdGZvciAocGZuID0gY21yLVx1MDAzZWJhc2VfcGZuOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbisrKVxuK1x0XHRcdGZyZWVfcmVzZXJ2ZWRfcGFnZShwZm5fdG9fcGFnZShwZm4pKTtcbitcbitcdFx0Yml0bWFwX2ZyZWUoY21yLVx1MDAzZWJpdG1hcCk7XG4rXHR9XG4rXG4rXHRtdXRleF9kZXN0cm95KFx1MDAyNmNtYS1cdTAwM2VhbGxvY19tdXRleCk7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmNtYV9sb2NrKTtcbitcdHRvdGFsY21hX3BhZ2VzIC09IGNtYS1cdTAwM2Vjb3VudDtcbitcdGxpc3RfZGVsKFx1MDAyNmNtYS1cdTAwM2Vub2RlKTtcbitcdGNtYV9hcmVhX2NvdW50LS07XG4rXHRtdXRleF91bmxvY2soXHUwMDI2Y21hX2xvY2spO1xuK1xuK1x0a2ZyZWUoY21hKTtcbit9XG5kaWZmIC0tZ2l0IGEvbW0vY21hLmggYi9tbS9jbWEuaFxuaW5kZXggYzcwMTgwYzM2NTU5YzIuLmFlNGRiOTgxOWUzOGRiIDEwMDY0NFxuLS0tIGEvbW0vY21hLmhcbisrKyBiL21tL2NtYS5oXG5AQCAtNDEsNiArNDEsNyBAQCBzdHJ1Y3QgY21hIHtcbiBcdHVuc2lnbmVkIGxvbmdcdGF2YWlsYWJsZV9jb3VudDtcbiBcdHVuc2lnbmVkIGludCBvcmRlcl9wZXJfYml0OyAvKiBPcmRlciBvZiBwYWdlcyByZXByZXNlbnRlZCBieSBvbmUgYml0ICovXG4gXHRzcGlubG9ja190XHRsb2NrO1xuK1x0c3RydWN0IGxpc3RfaGVhZCBub2RlO1xuIFx0c3RydWN0IG11dGV4IGFsbG9jX211dGV4O1xuICNpZmRlZiBDT05GSUdfQ01BX0RFQlVHRlNcbiBcdHN0cnVjdCBobGlzdF9oZWFkIG1lbV9oZWFkO1xuQEAgLTcxLDggKzcyLDggQEAgZW51bSBjbWFfZmxhZ3Mge1xuIFx0Q01BX0FDVElWQVRFRCxcbiB9O1xuIFxuLWV4dGVybiBzdHJ1Y3QgY21hIGNtYV9hcmVhc1tNQVhfQ01BX0FSRUFTXTtcbi1leHRlcm4gdW5zaWduZWQgaW50IGNtYV9hcmVhX2NvdW50O1xuK2V4dGVybiBzdHJ1Y3QgY21hIGNtYV9lYXJseV9hcmVhc1tNQVhfRUFSTFlfQ01BX0FSRUFTXTtcbitleHRlcm4gdW5zaWduZWQgaW50IGNtYV9lYXJseV9hcmVhX2NvdW50O1xuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjbWFfYml0bWFwX21heG5vKHN0cnVjdCBjbWEgKmNtYSxcbiBcdFx0c3RydWN0IGNtYV9tZW1yYW5nZSAqY21yKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6MzU6MDcuNTM0NDkxMzkyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk0MzE3NzEyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBETUEtQlVGIGFuZCBDTUEgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaW50cm9kdWNpbmcgYSBETUEtQlVGIGhlYXAgZm9yIE5WSURJQSBUZWdyYSBWaWRlby1Qcm90ZWN0aW9uLVJlZ2lvbiAoVlBSKS4gVGhlIHByaW1hcnkgZmlsZSBpcyBgdGVncmEtdnByLmNgLCBhbmQgaXQncyBndWFyZGVkIGJ5IGBDT05GSUdfRE1BQlVGX0hFQVBTX1RFR1JBX1ZQUmAuIFRoaXMgaXMgcGxhdGZvcm0tc3BlY2lmaWMsIGJ1dCB0aGUgY2hhbmdlcyB0byBDTUEgKGBtbS9jbWEuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2NtYS5oYCkgYXJlIGNvbmNlcm5pbmcgYmVjYXVzZSB0aGV5IGFwcGVhciBtb3JlIGJyb2FkbHkgaW1wYWN0ZnVsLiBJdCBzZWVtcyB0aGV5IGFyZSBpbnRyb2R1Y2luZyBhIGR5bmFtaWMgQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpIG1hbmFnZW1lbnQuIExldCdzIGRpZyBkZWVwZXIuXG5cbkZpcnN0LCB0aGUgVlBSIGhlYXAuICBUaGUgY29kZSBpbiBgdGVncmFfdnByX2luaXRgIHN1Z2dlc3RzIHRoaXMgaGVhcCBpcyBpbml0aWFsaXplZCB2aWEgYSBkZXZpY2UgdHJlZSBub2RlIHdpdGggdGhlIGNvbXBhdGlibGUgc3RyaW5nIFwibnZpZGlhLHRlZ3JhLXZpZGVvLXByb3RlY3Rpb24tcmVnaW9uLlwiIEl0J3MgYSBgbW9kdWxlX2luaXRgLCBzbyBpdCdsbCBydW4gZWFybHkuICBDcnVjaWFsbHksIGl0IHNlYXJjaGVzIGAvcmVzZXJ2ZWQtbWVtb3J5YC4gSWYgbm8gRFQgbm9kZSBpcyBwcmVzZW50LCB0aGUgaGVhcCAqaXNuJ3QqIGluaXRpYWxpemVkLiAgVGhpcyBpcyBhIHByb2JsZW0gZm9yIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIGFuZCBmdXp6aW5nIGJlY2F1c2Ugd2UgZG9uJ3QgdXN1YWxseSBoYXZlIHN1Y2ggYSBkZXZpY2UgdHJlZSBub2RlIGluIFFFTVUuICBXaGlsZSBzeXprYWxsZXIgY2FuIHVzZSBvdmVybGF5cywgSSBkb24ndCB0aGluayBpdCBpcyBzZXQgdXAgdG8gYXV0b21hdGljYWxseSBhZGQgdGhpcyBub2RlLCBhbmQgbWFudWFsbHkgYWRkaW5nIGEgRFQgb3ZlcmxheSBpcyBvdXRzaWRlIHRoZSBzY29wZSBvZiB1c3VhbCBhdXRvbWF0ZWQgZnV6emluZyBzZXR1cHMuXG5cblRoZSBDTUEgY2hhbmdlcywgdGhvdWdoLCBsb29rIHNpZ25pZmljYW50LiBUaGUgcGF0Y2ggaXMgcmVuYW1pbmcgYGNtYV9hcmVhc2AgdG8gYGNtYV9lYXJseV9hcmVhc2AgYW5kIGNyZWF0aW5nIGEgZHluYW1pYyBsaXN0IGBjbWFfYXJlYXNgLiAgSXQncyBpbnRyb2R1Y2luZyBhIG11dGV4IChgY21hX2xvY2tgKSBhbmQgY2hhbmdpbmcgYGNtYV9mb3JfZWFjaF9hcmVhYCB0byBpdGVyYXRlIG92ZXIgdGhpcyBsaXN0LiBJdCBhbHNvIGFkZHMgYGNtYV9jcmVhdGVgIGFuZCBgY21hX2ZyZWVgLiBUaGlzIGlzIGNvcmUgQ01BIGNvZGUhIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMuICBgY21hX2Zvcl9lYWNoX2FyZWFgIGlzIHVzZWQgaW4gYSBsb3Qgb2YgcGxhY2VzIOKAkyAgYG1tL2NtYV9kZWJ1Zy5jYCwgYGtlcm5lbC9kbWEvY29udGlndW91cy5jYCwgYGFyY2gvczM5MC9tbS9pbml0LmNgLCB3aGljaCBtYWtlcyBtZSB0aGluayB0aGVzZSBjaGFuZ2VzIGFmZmVjdCBldmVyeXRoaW5nIHVzaW5nIENNQS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGF0dGVudGlvbiBmb3IgZnV6emluZy5cblxuVGhlIHJlZmFjdG9yaW5nIG9mIGBiaXRtYXBfYWxsb2NhdGVfcmVnaW9uYCBpbiBgaW5jbHVkZS9saW51eC9iaXRtYXAuaGAgdG8gdXNlIGBiaXRtYXBfYWxsb2NhdGVgIGlzIGxlc3Mgb2YgYSBjb25jZXJuLiBJdCdzIGEgcmVmYWN0b3JpbmcsIGFuZCBpdCdzIHByb2JhYmx5IG9ubHkgdXNlZCBpbiB0aGUgbmV3IGhlYXAgY29kZS5cblxuTm93IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSBDTUEgaW5pdGlhbGl6YXRpb24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBjbWFfZWFybHlfYXJlYXNgLCBidXQsIGJhc2VkIG9uIHRoZSBkaWZmLCBpdCBzZWVtcyB0aGF0IHRoZSBDTUEgYXJlYXMgY3JlYXRlZCBlYXJseSAodXNpbmcgYGNtYV9lYXJseV9hcmVhc2ApIGRvbid0IGdldCBhZGRlZCB0byB0aGUgYGNtYV9hcmVhc2AgbGlzdCBmb3IgbGF0ZXIgdXNlLiBJdCBzZWVtcyB0aGlzIG92ZXJzaWdodCBpcyB2ZXJ5IHZlcnkgcHJvYmxlbWF0aWMhXG5cbkxldCdzIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRoZSBjb2RlLi4uICBBaCwgSSBzZWUgYSBtaXN0YWtlIGluIG15IGluaXRpYWwgYXNzZXNzbWVudDogYGNtYV9uZXdfYXJlYWAgYWN0dWFsbHkgcG9wdWxhdGVzIGBjbWFfZWFybHlfYXJlYXNgLCBub3QgYGNtYV9hcmVhc2AuIE5vdyBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgZWFybHkgYXJlYXMgYXJlIGNvbnZlcnRlZCB0byBsaXN0IGVudHJpZXMuICBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBpbml0aWFsIENNQSByZWdpb25zIGluIGBjbWFfZWFybHlfYXJlYXNgIGdldCBhZGRlZCB0byBgY21hX2FyZWFzYCB0byBiZSBhY3R1YWxseSB1c2FibGUuIFRoZSBpbml0aWFsaXphdGlvbiBsb2dpYyBtdXN0IGJlIHJlc3BvbnNpYmxlIGZvciB0aGlzLCBhbmQgaXQgbG9va3MgbGlrZSBhIGJ1ZyBpcyBwcmVzZW50IGluIHRoZSBwYXRjaC4gVGhlcmUgaXMgbm8gY2FsbCB0byBhZGQgdGhlIGBjbWFfZWFybHlfYXJlYXNgIHRvIGBjbWFfYXJlYXNgLiBUaGlzIHJlcXVpcmVzIGltbWVkaWF0ZSBhdHRlbnRpb24hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2Mjk2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIyMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM1OjI2Ljk2NjI2NTM3OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjUxMTkyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaXN0X2FkZC4qY21hX2FyZWFzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2NtYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NtYS5jPTExOTc9c3RydWN0IGNtYSAqX19pbml0IGNtYV9jcmVhdGUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4tLVxcbm1tL2NtYS5jLTEyMTktXFx0bXV0ZXhfbG9jayhcXHUwMDI2Y21hX2xvY2spO1xcbm1tL2NtYS5jOjEyMjA6XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2Y21hLVxcdTAwM2Vub2RlLCBcXHUwMDI2Y21hX2FyZWFzKTtcXG5tbS9jbWEuYy0xMjIxLVxcdHRvdGFsY21hX3BhZ2VzICs9IGNtYS1cXHUwMDNlY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM1OjI3LjA0ODc4MzIxMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjU5MDQ2MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqQXJlYSBNYW5hZ2VtZW50IENvbnVuZHJ1bSoqXG5cblJpZ2h0LCBzbyBgY21hX2NyZWF0ZWAgKmRlZmluaXRlbHkqIGFkZHMgdG8gYGNtYV9hcmVhc2AuIFRoYXQncyB1bmRlcnN0b29kLiBCdXQgYSBuYWdnaW5nIHF1ZXN0aW9uIGtlZXBzIHBvcHBpbmcgdXA6IHdoYXQgYWJvdXQgYGNtYV9lYXJseV9hcmVhc2A/IEFyZSB0aG9zZSBlYXJseS1zdGFnZSBhcmVhcyBldmVyIGFjdHVhbGx5ICptaWdyYXRlZCogb3ZlciB0byB0aGUgbWFpbiBgY21hX2FyZWFzYCBwb29sPyBJdCBmZWVscyBsaWtlIHNvbWV0aGluZyBpcyBtaXNzaW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgdHdvIGxpc3RzLlxuXG5JJ20gdGhpbmtpbmcgbXkgYmVzdCBiZXQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgY21hX2luaXRfYXJlYWAgb3IgYGNtYV9hY3RpdmF0ZV9hcmVhYC4gRWl0aGVyIG9mIHRob3NlIGZ1bmN0aW9ucyBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHdoZXJlIGFuIGFyZWEgbWlnaHQgdHJhbnNpdGlvbiwgb3Igd2hlcmUgYSBjb25uZWN0aW9uIHdvdWxkIGJlIG1hZGUsIGlmIGl0IGV4aXN0cywgYmV0d2VlbiB0aGVzZSB0d28gYXJlYSBsaXN0cy4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlaXIgY29kZSB0byB1bmRlcnN0YW5kIHRoaXMgZmxvdy4gR290dGEgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcyBhcmVhIG1hbmFnZW1lbnQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDI4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6MzU6MzAuNzc0Njg5OTY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNjg3OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNtYV9hcmVhc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9jbWEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jbWEuYz00MD11bnNpZ25lZCBpbnQgY21hX2Vhcmx5X2FyZWFfY291bnQ7XFxubW0vY21hLmMtNDEtXFxubW0vY21hLmM6NDI6c3RhdGljIExJU1RfSEVBRChjbWFfYXJlYXMpO1xcbm1tL2NtYS5jLTQzLXVuc2lnbmVkIGludCBjbWFfYXJlYV9jb3VudDtcXG4tLVxcbm1tL2NtYS5jPTEwOTU9aW50IGNtYV9mb3JfZWFjaF9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKVxcbi0tXFxubW0vY21hLmMtMTEwMC1cXG5tbS9jbWEuYzoxMTAxOlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY21hLCBcXHUwMDI2Y21hX2FyZWFzLCBub2RlKSB7XFxubW0vY21hLmMtMTEwMi1cXHRcXHRpbnQgcmV0ID0gaXQoY21hLCBkYXRhKTtcXG4tLVxcbm1tL2NtYS5jPTExOTc9c3RydWN0IGNtYSAqX19pbml0IGNtYV9jcmVhdGUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4tLVxcbm1tL2NtYS5jLTEyMTktXFx0bXV0ZXhfbG9jayhcXHUwMDI2Y21hX2xvY2spO1xcbm1tL2NtYS5jOjEyMjA6XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2Y21hLVxcdTAwM2Vub2RlLCBcXHUwMDI2Y21hX2FyZWFzKTtcXG5tbS9jbWEuYy0xMjIxLVxcdHRvdGFsY21hX3BhZ2VzICs9IGNtYS1cXHUwMDNlY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM1OjMwLjg0ODM4MjQ2MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Mzc4ODMyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENNQSBBcmVhIEl0ZXJhdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIElmIEknbSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCB0aGUgYGNtYV9lYXJseV9hcmVhc2AgbGlzdCAqbmV2ZXIqIGdldHMgbWVyZ2VkIGludG8gdGhlIG1haW4gYGNtYV9hcmVhc2AgbGlzdC4gVGhhdCBtZWFucyB0aGUgYGNtYV9mb3JfZWFjaF9hcmVhYCBtYWNybywgdGhlIG9uZSB3ZSdyZSB1c2luZyB0byBpdGVyYXRlLCB3b3VsZCAqb25seSogaGl0IHRoZSBDTUFzIHRoYXQgd2VyZSBjcmVhdGVkIGR5bmFtaWNhbGx5IHVzaW5nIGBjbWFfY3JlYXRlYC5cblxuQnV0Li4uIGlzbid0IGBjbWFfZm9yX2VhY2hfYXJlYWAgYWxzbyBjcnVjaWFsIGZvciBgZG1hX2NvbnRpZ3VvdXNfYXJlYXNgPyBBbmQgSSBjb3VsZCBoYXZlIHN3b3JuIHRoZXJlIHdhcyBhbiBpbnRlcmFjdGlvbiB0aGVyZS4gQWghIFdhaXQsIEkgdGhpbmsgSSdtIHJlbWVtYmVyaW5nIHRoaXMgd3JvbmcsIHdhc24ndCBgZG1hX2NvbnRpZ3VvdXMuY2AgbW9kaWZpZWQgdG8gdXNlIGBjbWFfZWFybHlfYXJlYXNgIGRpcmVjdGx5PyBUaGF0IHdvdWxkIG1ha2Ugc2Vuc2UuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBga2VybmVsL2RtYS9jb250aWd1b3VzLmNgIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhpcyBzdHJhaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAwNDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6MzU6MzQuNjg2MjY5NjU1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwODc0ODUxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbWFfZm9yX2VhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2RtYS9jb250aWd1b3VzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM1OjM0Ljc3NzE1NDg5NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDcyNTIxNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYGNtYV9mb3JfZWFjaF9hcmVhYCBVc2FnZSoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBrZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY2AgYW5kIGltbWVkaWF0ZWx5IG5vdGljaW5nIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBsZXZlcmFnaW5nIGBjbWFfZm9yX2VhY2hfYXJlYWAuIFRoYXQncyBhIGJpdCBzdXJwcmlzaW5nLCBnaXZlbiBpdHMgbGlrZWx5IHB1cnBvc2UgcmVsYXRlZCB0byBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvcikuIEhtbSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBQZXJoYXBzIGl0J3MgaW1wbGVtZW50aW5nIGl0cyBvd24gaXRlcmF0aW9uIGxvZ2ljLCBvciBtYXliZSBpdCdzIHVzaW5nIGEgY29tcGxldGVseSBkaWZmZXJlbnQgbWV0aG9kLiBJdCdzIHRpbWUgdG8gZGlnIGRlZXBlciBhbmQgc2VlIHdoYXQgKmRvZXMqIHV0aWxpemUgYGNtYV9mb3JfZWFjaF9hcmVhYC4gVW5kZXJzdGFuZGluZyB0aGUgZXhpc3RpbmcgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBjb250ZXh0LiBUaGlzIHNob3VsZCBoZWxwIHRvIHVuZGVyc3RhbmQgdGhlIGRlc2lnbiBkZWNpc2lvbnMgYW5kIHBvdGVudGlhbCByYXRpb25hbGUgYmVoaW5kIHRoZSBhcHByb2FjaCBlbXBsb3llZCBieSBgY29udGlndW91cy5jYC4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiBlbHNld2hlcmUgaW4gdGhlIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQwMiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM1OjM4LjAyNDQwOTk3MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwODc3NDczNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbWFfZm9yX2VhY2hfYXJlYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2NtYS5oPTYwPWV4dGVybiBpbnQgY21hX2Zvcl9lYWNoX2Vhcmx5X2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpO1xcbmluY2x1ZGUvbGludXgvY21hLmg6NjE6ZXh0ZXJuIGludCBjbWFfZm9yX2VhY2hfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7XFxuaW5jbHVkZS9saW51eC9jbWEuaC02Mi1leHRlcm4gYm9vbCBjbWFfaW50ZXJzZWN0cyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcXG4tLVxcbm1tL2NtYS5jPTEwODE9aW50IGNtYV9mb3JfZWFjaF9lYXJseV9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKVxcbi0tXFxubW0vY21hLmMtMTA5NC1cXG5tbS9jbWEuYzoxMDk1OmludCBjbWFfZm9yX2VhY2hfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSlcXG5tbS9jbWEuYy0xMDk2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6MzU6NDAuODMzMTg5MTE1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTA3NTk5NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYGNtYV9mb3JfZWFjaF9hcmVhYCoqXG5cbkhtbSwgbGV0J3Mgc2VlLi4uIEknbSBsb29raW5nIGF0IGBjbWFfZm9yX2VhY2hfYXJlYWAuIFJpZ2h0LCBzbyBpdCdzIGRlZmluZWQgc29sZWx5IHdpdGhpbiBgbW0vY21hLmNgIGFuZCBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9jbWEuaGAuIFRoYXQncyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC4gTm93IHRoZSByZWFsIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGZ1bmN0aW9uICphY3R1YWxseSogdXRpbGl6ZWQgb3V0c2lkZSBvZiB0aG9zZSBmaWxlcz8gT3IgaXMgaXQgcHVyZWx5IGEgbG9jYWwgaGVscGVyIGZ1bmN0aW9uIHdpdGhpbiB0aGUgQ01BIHN1YnN5c3RlbSBpdHNlbGY/IEl0J3MgcHJldHR5IGltcG9ydGFudCBJIGZpZ3VyZSB0aGlzIG91dC4gSWYgaXQncyB1c2VkIGVsc2V3aGVyZSwgdGhhdCBpbXBsaWVzIHNvbWUgc29ydCBvZiBicm9hZGVyIGRlcGVuZGVuY3kgb3IgaW50ZWdyYXRpb24gdGhhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBiZXR0ZXIuIEJ1dCBpZiBpdCBpcyBvbmx5IHVzZWQgbG9jYWxseSwgaXQgZ2l2ZXMgbWUgc29tZSBhZGRpdGlvbmFsIGNvbnRleHQgdGhhdCBJIGNhbiBpbmZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5MTUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNTo0My45ODM5NTM0OTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTI1OTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbWFfZm9yX2VhY2hfYXJlYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vY21hLmM9MTA4MT1pbnQgY21hX2Zvcl9lYWNoX2Vhcmx5X2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9jbWEuYy0xMDk0LVxcbm1tL2NtYS5jOjEwOTU6aW50IGNtYV9mb3JfZWFjaF9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKVxcbm1tL2NtYS5jLTEwOTYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNTo0NC4wODkyMTg0OThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0OTg4ODE3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIENNQSBEZWJ1Zy9TeXNmcyBJc3N1ZSoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIENNQSBjb2RlIGFnYWluLiBJdCdzIGEgY29tbW9uIGFyZWEgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHByb2JsZW1zIHRvIHN1cmZhY2UuIE15IGd1dCBmZWVsaW5nIGlzIHRoaXMgaXMgcHJvYmFibHkgYSBkZWJ1Z2dpbmcgb3Igc3lzZnMtcmVsYXRlZCBpc3N1ZSBnaXZlbiB0aGUgY29udGV4dC4gV2hlcmUgdG8gc3RhcnQ/IExldCdzIG5vdCB3YXN0ZSBhbnkgdGltZS4gSSB0aGluayB0aGUgdHdvIG1vc3QgbGlrZWx5IHBsYWNlcyB0byBmaW5kIHRoZSByb290IGNhdXNlIG9mIHRoaXMgYXJlIGVpdGhlciBgbW0vY21hX2RlYnVnLmNgIG9yIGBtbS9jbWFfc3lzZnMuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZSBpcyBtb3JlIHJlbGV2YW50LCBvciBwZXJoYXBzLCBjaGVjayBib3RoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI5NCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM1OjQ2LjkzOTEwOTU3M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0NTk1Mjk0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbWFfZm9yX2VhY2hfYXJlYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2NtYS5oPTYwPWV4dGVybiBpbnQgY21hX2Zvcl9lYWNoX2Vhcmx5X2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpO1xcbmluY2x1ZGUvbGludXgvY21hLmg6NjE6ZXh0ZXJuIGludCBjbWFfZm9yX2VhY2hfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7XFxuaW5jbHVkZS9saW51eC9jbWEuaC02Mi1leHRlcm4gYm9vbCBjbWFfaW50ZXJzZWN0cyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcXG4tLVxcbm1tL2NtYS5jPTEwODE9aW50IGNtYV9mb3JfZWFjaF9lYXJseV9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKVxcbi0tXFxubW0vY21hLmMtMTA5NC1cXG5tbS9jbWEuYzoxMDk1OmludCBjbWFfZm9yX2VhY2hfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSlcXG5tbS9jbWEuYy0xMDk2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6MzU6NDkuODg1MDY5MjA5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzY4MzQyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQSBNb21lbnQgb2YgS2VybmVsIENvbmZ1c2lvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIGp1c3QgcmV2aWV3aW5nIHRoZSBDTUEgY29kZSwgYW5kIEkgY291bGQgaGF2ZSBzd29ybiBgY21hX2Zvcl9lYWNoX2FyZWFgIHdhcyBzdXBwb3NlZCB0byBiZSBhIGNydWNpYWwgZnVuY3Rpb24sIGJ1dCBub3cgSSdtIHRoaW5raW5nLCB3aGVyZSBpcyBpdCBhY3R1YWxseSAqdXNlZCo/IFRoaXMgaXMgc3RyYW5nZSwgSSdtIGRyYXdpbmcgYSBibGFuay4gSXQncyBhbG1vc3QgbGlrZSBpdCdzIGEgZm9yZ290dGVuIGZ1bmN0aW9uIHRoYXQgc29tZW9uZSBsZWZ0IGluIGFuZCBuZXZlciBob29rZWQgdXAuLi5cblxuQWxyaWdodCwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBkb3VibGUtY2hlY2ssIG15IG1lbW9yeSBpc24ndCBhbHdheXMgcGVyZmVjdC4gTWF5YmUgSSdtIGp1c3QgbWlzcmVtZW1iZXJpbmcgdGhlIGV4YWN0IG5hbWUuIE1heWJlIGl0J3MgYSByZWxhdGVkIGZ1bmN0aW9uIHRoYXQncyBiZWluZyB1c2VkLiBMZXQncyBub3QganVtcCB0byBhbnkgd2lsZCBjb25jbHVzaW9ucywgbm90IHlldCBhdCBsZWFzdC5cblxuQSBsaWtlbHkgYWx0ZXJuYXRpdmUgaXMgdG8gY2hlY2sgYGNtYV9mb3JfZWFjaF9lYXJseV9hcmVhYC4gSSdsbCB2ZXJpZnkgaWYgdGhhdCdzIHRoZSBvbmUgSSdtIGxvb2tpbmcgZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTczOSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM1OjUzLjE2MTkwNjc4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNDk5ODU0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbWFfZm9yX2VhY2hfZWFybHlfYXJlYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvbW0vaW5pdC5jPTIzMz1zdGF0aWMgaW50IHMzOTBfY21hX21lbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxuYXJjaC9zMzkwL21tL2luaXQuYy0yNDMtXFx0aWYgKGFjdGlvbiA9PSBNRU1fR09JTkdfT0ZGTElORSlcXG5hcmNoL3MzOTAvbW0vaW5pdC5jOjI0NDpcXHRcXHRyYyA9IGNtYV9mb3JfZWFjaF9lYXJseV9hcmVhKHMzOTBfY21hX2NoZWNrX3JhbmdlLCBcXHUwMDI2bWVtX2RhdGEpO1xcbmFyY2gvczM5MC9tbS9pbml0LmMtMjQ1LVxcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKHJjKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvY21hLmg9NTc9Ym9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NtYS5oLTU5LVxcbmluY2x1ZGUvbGludXgvY21hLmg6NjA6ZXh0ZXJuIGludCBjbWFfZm9yX2VhY2hfZWFybHlfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7XFxuaW5jbHVkZS9saW51eC9jbWEuaC02MS1leHRlcm4gaW50IGNtYV9mb3JfZWFjaF9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKTtcXG4tLVxcbm1tL2NtYS5jPTEwNjc9Ym9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXFxuLS1cXG5tbS9jbWEuYy0xMDgwLVxcbm1tL2NtYS5jOjEwODE6aW50IGNtYV9mb3JfZWFjaF9lYXJseV9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKVxcbm1tL2NtYS5jLTEwODIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNTo1NS40ODY5MTA2MDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0OTAxNjk3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHF1aWNrIHRha2Ugb24gdGhpcy5cblxuKipJbnZlc3RpZ2F0aW5nIGEgQ01BIFBhdGNoKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTG9va3MgbGlrZSB0aGV5J3ZlIHN3YXBwZWQgb3V0IGBjbWFfZm9yX2VhY2hfYXJlYWAgZm9yIGBjbWFfZm9yX2VhY2hfZWFybHlfYXJlYWAgaW4gYGFyY2gvczM5MC9tbS9pbml0LmNgLiBJbnRlcmVzdGluZy4gVGhlIGluaXRpYWwgY2FsbCB3YXMgYSBzdGFuZGFyZCBgY21hX2Zvcl9lYWNoX2FyZWFgIGNhbGwsIGJ1dCBub3cgaXQncyBiZWVuIHJlcGxhY2VkIHdpdGggdGhlIFwiZWFybHlcIiB2ZXJzaW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIE1ha2VzIHNlbnNlLCBhc3N1bWluZyB0aGlzIGlzIGhhcHBlbmluZyBkdXJpbmcgZWFybHkgYm9vdC5cblxuQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gV2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0IGFib3V0IG90aGVyIENNQSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnM/IFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGBjbWFfZGVidWdmc19pbml0YCBhbmQgYGNtYV9zeXNmc19pbml0YCBiZWNhdXNlIEkga25vdyB0aG9zZSBhcmUgcmVsYXRlZCBhbmQgbmVlZCB0byBiZSBpbiBzeW5jLiBJIG5lZWQgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aG9zZS5cblxuTGV0IG1lIHRha2UgYSBxdWljayBsb29rIGF0IGBtbS9jbWFfZGVidWcuY2AgdG8gc2VlIGlmIHRob3NlIG90aGVyIENNQSBpbml0aWFsaXphdGlvbiBjYWxscyBoYXZlIGJlZW4gdG91Y2hlZCwgYW5kIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIG92ZXJhbGwgQ01BIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJIHN1c3BlY3QgdGhlcmUncyBhIHJlYXNvbiBmb3IgdGhpcyBjaGFuZ2UsIGFuZCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjM5NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM1OjU5LjAzNTkzMDIzM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MDY0Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNtYV9hcmVhc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9jbWFfZGVidWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jbWFfZGVidWcuYz0yMDA9c3RhdGljIGludCBfX2luaXQgY21hX2RlYnVnZnNfaW5pdCh2b2lkKVxcbi0tXFxubW0vY21hX2RlYnVnLmMtMjA3LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjbWFfYXJlYV9jb3VudDsgaSsrKVxcbm1tL2NtYV9kZWJ1Zy5jOjIwODpcXHRcXHRpZiAodGVzdF9iaXQoQ01BX0FDVElWQVRFRCwgXFx1MDAyNmNtYV9hcmVhc1tpXS5mbGFncykpXFxubW0vY21hX2RlYnVnLmM6MjA5OlxcdFxcdFxcdGNtYV9kZWJ1Z2ZzX2FkZF9vbmUoXFx1MDAyNmNtYV9hcmVhc1tpXSwgY21hX2RlYnVnZnNfcm9vdCk7XFxubW0vY21hX2RlYnVnLmMtMjEwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNTo1OS4xNDE5OTg5NTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIyODE0MjY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENNQSBBcmVhIENoYW5nZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEl0IGp1c3QgaGl0IG1lOiBgbW0vY21hX2RlYnVnLmNgIGRpcmVjdGx5IHJlZmVyZW5jZXMgYGNtYV9hcmVhc2AhIEJ1dCwgdGhpcyBwYXRjaCAqY29tcGxldGVseSogY2hhbmdlcyBgY21hX2FyZWFzYCB0byBhIGBMSVNUX0hFQURgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJUaGlzICpoYXMqIHRvIGNhdXNlIGEgY29tcGlsZSBmYWlsdXJlLlwiIElmIGBtbS9jbWFfZGVidWcuY2Agd2FzIGV4cGVjdGluZyBhbiBhcnJheSBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlLCBhbmQgbm93IGl0J3MgZ2V0dGluZyBhIGxpbmtlZCBsaXN0IGhlYWQsIHRyeWluZyB0byB1c2UgYXJyYXkgaW5kZXhpbmcgbGlrZSBgY21hX2FyZWFzW2ldYCBpcyBnb2luZyB0byBiZSBhIGZhdGFsIHN5bnRheCBlcnJvci5cblxuTGV0J3MgcXVpY2tseSByZS1leGFtaW5lIHRoYXQgcGF0Y2ggc25pcHBldDpcblxuYGBgY1xuLXN0cnVjdCBjbWEgY21hX2FyZWFzW01BWF9DTUFfQVJFQVNdO1xuK3N0YXRpYyBERUZJTkVfTVVURVgoY21hX2xvY2spO1xuK1xuK3N0cnVjdCBjbWEgY21hX2Vhcmx5X2FyZWFzW01BWF9FQVJMWV9DTUFfQVJFQVNdO1xuK3Vuc2lnbmVkIGludCBjbWFfZWFybHlfYXJlYV9jb3VudDtcbitcbitzdGF0aWMgTElTVF9IRUFEKGNtYV9hcmVhcyk7XG4gdW5zaWduZWQgaW50IGNtYV9hcmVhX2NvdW50O1xuYGBgXG5cbll1cCwgaXQncyBjbGVhciBhcyBkYXkuIElmIGBjbWFfYXJlYXNgIGlzIG5vdyBhIGBMSVNUX0hFQURgLCB0aGUgZGlyZWN0IGluZGV4aW5nIGxpa2UgYGNtYV9hcmVhc1tpXWAgaXMgZGVmaW5pdGVseSBpbnZhbGlkIGluIGBtbS9jbWFfZGVidWcuY2AuIFNvLCB0aGUgcXVlc3Rpb24gaXNuJ3QgKmlmKiBpdCBmYWlscywgYnV0ICpob3cqIGl0J3MgaGFuZGxlZC4gV2UgbmVlZCB0byBjaGVjayBpZiBgbW0vY21hX2RlYnVnLmNgIGhhcyBiZWVuIHRvdWNoZWQgYW55d2hlcmUgZWxzZSBpbiB0aGUgdHJlZSB0byBhY2NvdW50IGZvciB0aGlzIGNoYW5nZSwgb3IgaWYgdGhpcyBpcyBhIGdsYXJpbmcgb21pc3Npb24uIFRoZSBsaWtlbGlob29kIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBpbmNvbXBsZXRlIGFuZCB3aWxsIHJlc3VsdCBpbiBjb21waWxlIGVycm9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5NDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6MzY6MDQuMzcwMTQ0ODdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDU1NTMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbWFfYXJlYXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vY21hX2RlYnVnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vY21hX2RlYnVnLmM9MjAwPXN0YXRpYyBpbnQgX19pbml0IGNtYV9kZWJ1Z2ZzX2luaXQodm9pZClcXG4tLVxcbm1tL2NtYV9kZWJ1Zy5jLTIwNy1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY21hX2FyZWFfY291bnQ7IGkrKylcXG5tbS9jbWFfZGVidWcuYzoyMDg6XFx0XFx0aWYgKHRlc3RfYml0KENNQV9BQ1RJVkFURUQsIFxcdTAwMjZjbWFfYXJlYXNbaV0uZmxhZ3MpKVxcbm1tL2NtYV9kZWJ1Zy5jOjIwOTpcXHRcXHRcXHRjbWFfZGVidWdmc19hZGRfb25lKFxcdTAwMjZjbWFfYXJlYXNbaV0sIGNtYV9kZWJ1Z2ZzX3Jvb3QpO1xcbm1tL2NtYV9kZWJ1Zy5jLTIxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6MzY6MDQuNTI0NzA0MDk4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjc1MzcxMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkNoZWNraW5nIENNQSBBcmVhIE1hbmFnZW1lbnQqKlxuXG5Ib2xkIG9uIGEgc2Vjb25kLCBJIHRob3VnaHQgd2UnZCBjbGVhbmVkIHVwIHRoZSBgY21hX2FyZWFzYCBhcnJheSBpbiB0aGUgY29udGV4dCBvZiBDTUEsIGJ1dCBoZXJlIGl0IGlzIGFnYWluLCBzdGlsbCBsdXJraW5nIGluIGBtbS9jbWFfZGVidWcuY2AuIFRoYXQncyB1bmV4cGVjdGVkLCBhbmQgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMuIEl0IG1lYW5zIEkgbmVlZCB0byByZS1ldmFsdWF0ZSB3aGVyZSB0aGlzIGdsb2JhbCBhcnJheSBpcyBiZWluZyB1c2VkLiBQZXJoYXBzIEkgbWlzc2VkIHNvbWV0aGluZyBpbiBteSBlYXJsaWVyIHJldmlldy4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgc3lzZnMgaW50ZXJhY3Rpb24sIHNvIEknbGwgY2hlY2sgYG1tL2NtYV9zeXNmcy5jYCBub3cgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgaW50cm9kdWNlIGEgcmVncmVzc2lvbiBpbiBDTUEgc3lzZnMgaW50ZXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzc3MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM2OjA3Ljg1MjI0MzMyNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NzkwNTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNtYV9hcmVhc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9jbWFfc3lzZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jbWFfc3lzZnMuYz0xMDg9c3RhdGljIGludCBfX2luaXQgY21hX3N5c2ZzX2luaXQodm9pZClcXG4tLVxcbm1tL2NtYV9zeXNmcy5jLTExOS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY21hX2FyZWFfY291bnQ7IGkrKykge1xcbm1tL2NtYV9zeXNmcy5jOjEyMDpcXHRcXHRjbWEgPSBcXHUwMDI2Y21hX2FyZWFzW2ldO1xcbm1tL2NtYV9zeXNmcy5jLTEyMS1cXHRcXHRpZiAoIXRlc3RfYml0KENNQV9BQ1RJVkFURUQsIFxcdTAwMjZjbWEtXFx1MDAzZWZsYWdzKSlcXG4tLVxcbm1tL2NtYV9zeXNmcy5jLTE0Mi1cXHR3aGlsZSAoLS1pIFxcdTAwM2U9IDApIHtcXG5tbS9jbWFfc3lzZnMuYzoxNDM6XFx0XFx0Y21hID0gXFx1MDAyNmNtYV9hcmVhc1tpXTtcXG5tbS9jbWFfc3lzZnMuYy0xNDQtXFx0XFx0aWYgKGNtYS1cXHUwMDNlY21hX2tvYmopXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM2OjA3Ljk2OTA0MjY4MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjgyOTczODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWxpemluZyB0aGUgSW5kZXhpbmcgSXNzdWUqKlxuXG5Pa2F5LCBob2xkIG9uIGEgbWludXRlLiBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGNvZGUsIGFuZCBzb21ldGhpbmcncyBub3QgcXVpdGUgcmlnaHQuIElmIGBjbWFfYXJlYXNgIGlzIGRlZmluZWQgYXMgYSBgTElTVF9IRUFEYCwgdGhlbiBkaXJlY3RseSBpbmRleGluZyBpdCB3aXRoIHNvbWV0aGluZyBsaWtlIGBjbWFfYXJlYXNbaV1gIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gdGhyb3cgYSBjb21waWxhdGlvbiBlcnJvci4gVGhhdCdzIGp1c3Qgbm90IGhvdyB5b3UgaW50ZXJhY3Qgd2l0aCBhIGxpbmtlZCBsaXN0LiBZb3UgY2FuJ3QgdHJlYXQgaXQgbGlrZSBhIHJlZ3VsYXIgYXJyYXkgaW4gdGhhdCBzZW5zZS4gSSBoYXZlIHRvIGFjY2VzcyB0aGUgbGlzdCBlbGVtZW50cyB0aHJvdWdoIHRoZSBkZWZpbmVkIGxpc3QgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBsaWtlIGBsaXN0X2Zvcl9lYWNoX2VudHJ5YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl04oCZcyBtZWFudCB0byBiZSBpdGVyYXRlZCBvbi5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgbXkgdW5kZXJzdGFuZGluZy4gSXQncyBiZXN0IHRvIGNvbmZpcm0gaG93IGl0J3MgZGVmaW5lZCBhbmQgaG93IGl0J3MgbWVhbnQgdG8gYmUgdXNlZC4gSSB3aWxsIHF1aWNrbHkgY2hlY2sgaWYgYGNtYV9hcmVhc2AgaXMgaW5kZWVkIGV4cG9ydGVkIGluIGBpbmNsdWRlL2xpbnV4L2NtYS5oYC4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0byBjb25maXJtIGFuZCBydWxlIG91dCB0aGF0IGFzc3VtcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MjAzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6MzY6MTEuMjUyMDE4NzQ5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTIzNzg3MTAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNtYV9hcmVhc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2NtYS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNjoxMS40NDQ0MTkxNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ4OTQ5OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYSBDTUEgSGVhZGVyIENoYW5nZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgc2VlIGEgbW9kaWZpY2F0aW9uIHRvIGBpbmNsdWRlL2xpbnV4L2NtYS5oYC4gU3BlY2lmaWNhbGx5LCB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBgY21hX2FyZWFzYCBhbmQgYGNtYV9hcmVhX2NvdW50YCBhcmUgbm8gbG9uZ2VyIGV4cG9ydGVkLiBUaGV5J3ZlIGJlZW4gcmVwbGFjZWQgd2l0aCBgY21hX2Vhcmx5X2FyZWFzYCBhbmQgYGNtYV9lYXJseV9hcmVhX2NvdW50YC4gVGhpcyBpcyBpbnRlcmVzdGluZy4gTXkgZmlyc3QgdGhvdWdodCBpcyBhYm91dCBob3cgdGhpcyBpbXBhY3RzIHRoZSByZXN0IG9mIHRoZSBDTUEgY29kZS4gU2luY2UgYGNtYV9hcmVhc2AgaXMgbm8gbG9uZ2VyIGEgcHVibGljIHN5bWJvbCBpbiB0aGUgaW5jbHVkZSBmaWxlLCBgbW0vY21hX2RlYnVnLmNgIGFuZCBgbW0vY21hX3N5c2ZzLmNgIGFyZSBnb2luZyB0byBoYXZlIGEgcHJvYmxlbS4gVGhvc2UgZmlsZXMgaW4gYG1tL2Agd2lsbCBjaG9rZSBvbiB0aG9zZSBtaXNzaW5nIHN5bWJvbHMgaWYgdGhleSdyZSBpbmNsdWRpbmcgYGluY2x1ZGUvbGludXgvY21hLmhgLiBXYWl04oCmIGFyZSB0aGV5PyBNYXliZSB0aGV5IGluY2x1ZGUgYSBsb2NhbCBgY21hLmhgPyBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhhdC4gSSBuZWVkIHRvIGNoZWNrIGBtbS9jbWEuaGAgdG8gc2VlIGhvdyB0aG9zZSBzeW1ib2xzIGFyZSBub3cgaGFuZGxlZC4gVGhpcyBmZWVscyBsaWtlIGl0IGNvdWxkIGJyZWFrIHNvbWUgZXhpc3RpbmcgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MzQ1MTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6MzY6MTUuNjkzMzcxNTQ4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzAwNjQwMDMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNtYV9hcmVhc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9jbWEuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6MzY6MTUuOTIzNDQzNDgxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTk3MTg0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ01BIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB0aGUgZGlmZiBzaG93cyB0aGF0IGBtbS9jbWEuaGAgaGFzIGJlZW4gYWx0ZXJlZC4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBjbWFfYXJlYXNgIGhhcyBiZWVuIHJlbW92ZWQgYW5kIHJlcGxhY2VkIHdpdGggYGNtYV9lYXJseV9hcmVhc2AuIEludGVyZXN0aW5nLiBTbywgYGNtYV9hcmVhc2AgaXMgKm5vIGxvbmdlciogZGVjbGFyZWQgaW4gdGhlIGhlYWRlci4gVGhhdOKAmXMgYSBzaWduaWZpY2FudCBjaGFuZ2UuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogaG93IGRvZXMgYG1tL2NtYV9kZWJ1Zy5jYCBzdGlsbCBjb21waWxlPyBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGF0IGZpbGUgaXMgbm93IHVzaW5nIGBjbWFfZWFybHlfYXJlYXNgIG9yIHdoZXRoZXIgaXQncyBzb21laG93IGFjY2Vzc2luZyBhIHZhcmlhYmxlIHRoYXQgaGFzIG5vdyBnb25lIGF3YXkuIEknbGwgbmVlZCB0byBleGFtaW5lIHRoYXQgZmlsZSdzIHVzYWdlIG9mIHRoZSBDTUEgc3RydWN0dXJlcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyByZWZhY3RvcmluZy4gVGhpcyBmZWVscyBsaWtlIGl0IG1pZ2h0IGltcGFjdCBzb21lIGRlYnVnZ2luZywgb3IgZXZlbiBhZmZlY3QgdGhlIENNQSBpbml0aWFsaXphdGlvbiBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTAyMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNjoxOS40MjMxNjU1OTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNDgzMzQ4NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY21hX2Vhcmx5X2FyZWFzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2NtYV9kZWJ1Zy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNjoxOS43MzgwMDQxMjlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjczNjQwMTA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIENNQSBDb21waWxhdGlvbiBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSBqdXN0IHJhbiBhIGBncmVwYCBmb3IgYGNtYV9hcmVhc2Agd2l0aGluIGBtbS9jbWFfZGVidWcuY2AsIGFuZCBpdCBwb3BwZWQgdXAgaW4gYSBmZXcgcGxhY2VzOlxuXG5gYGBcbm1tL2NtYV9kZWJ1Zy5jLTIwNy1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNtYV9hcmVhX2NvdW50OyBpKyspXG5tbS9jbWFfZGVidWcuYzoyMDg6XHRcdGlmICh0ZXN0X2JpdChDTUFfQUNUSVZBVEVELCBcdTAwMjZjbWFfYXJlYXNbaV0uZmxhZ3MpKVxubW0vY21hX2RlYnVnLmM6MjA5Olx0XHRcdGNtYV9kZWJ1Z2ZzX2FkZF9vbmUoXHUwMDI2Y21hX2FyZWFzW2ldLCBjbWFfZGVidWdmc19yb290KTtcbmBgYFxuXG5Ob3csIHRoYXQncyBpbnRlcmVzdGluZy4gSWYgYGNtYV9hcmVhc2AgaXNuJ3QgcHJvcGVybHkgZGVjbGFyZWQgaW4gZWl0aGVyIGBtbS9jbWEuaGAgb3Igd2l0aGluIHRoZSBzdGFuZGFyZCBpbmNsdWRlIGBpbmNsdWRlL2xpbnV4L2NtYS5oYCwgdGhlbiB3ZSBhcmUgZ29pbmcgdG8gaGF2ZSBhICptYWpvciogY29tcGlsYXRpb24gcHJvYmxlbSB3aXRoIGBtbS9jbWFfZGVidWcuY2AuIFRoZSBjb21waWxlciBpcyBnb2luZyB0byBjaG9rZSBvbiBhbiB1bmRlY2xhcmVkIHN5bWJvbC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGRlY2xhcmF0aW9uIHRvIGVuc3VyZSB0aGlzIGRvZXNuJ3QgYml0ZSB1cyBkb3duIHRoZSBsaW5lLiBXZSBuZWVkIHRvIHByZXZlbnQgYW55IG5hc3R5IHN1cnByaXNlcy4gTGV0J3MgZGlnIGluIGFuZCB2ZXJpZnkgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUzOTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6MzY6MjYuNDc0NDA3NjM4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYyOTg0Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNtYV9hcmVhc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9jbWFfZGVidWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jbWFfZGVidWcuYz0yMDA9c3RhdGljIGludCBfX2luaXQgY21hX2RlYnVnZnNfaW5pdCh2b2lkKVxcbi0tXFxubW0vY21hX2RlYnVnLmMtMjA3LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjbWFfYXJlYV9jb3VudDsgaSsrKVxcbm1tL2NtYV9kZWJ1Zy5jOjIwODpcXHRcXHRpZiAodGVzdF9iaXQoQ01BX0FDVElWQVRFRCwgXFx1MDAyNmNtYV9hcmVhc1tpXS5mbGFncykpXFxubW0vY21hX2RlYnVnLmM6MjA5OlxcdFxcdFxcdGNtYV9kZWJ1Z2ZzX2FkZF9vbmUoXFx1MDAyNmNtYV9hcmVhc1tpXSwgY21hX2RlYnVnZnNfcm9vdCk7XFxubW0vY21hX2RlYnVnLmMtMjEwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNjoyOC4yMzczOTcxOTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyMzE5OTUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWxseSBPYnNvbGV0ZSBWYXJpYWJsZSBBY2Nlc3MqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSBhIHJlZmVyZW5jZSBoZXJlIOKAkyBzcGVjaWZpY2FsbHkgYGNtYV9hcmVhc1tpXWAuIEl0J3MgYSBwcmV0dHkgc3RhbmRhcmQgYXJyYXkgaW5kZXhpbmcgb3BlcmF0aW9uLCBub3RoaW5nIGluaGVyZW50bHkgc3VzcGljaW91cy4gSG93ZXZlciwgYSByZWQgZmxhZyBpbW1lZGlhdGVseSBnb2VzIHVwLiBJJ20gdXNlZCB0byBzZWVpbmcgdGhlIGRlY2xhcmF0aW9uIGZvciBgY21hX2FyZWFzYCByaWdodCBoZXJlLCBidXQgSSBkb24ndCBzZWUgYW55dGhpbmcuIFRoZSBjb250ZXh0IGlzIGBtbS9jbWFfZGVidWcuY2AsIHNvIEknZCAqZXhwZWN0KiB0byBmaW5kIGl0cyBkZWNsYXJhdGlvbiB3aXRoaW4gdGhpcyBmaWxlIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgYW4gYGV4dGVybmAgZGVjbGFyYXRpb24gcmVmZXJlbmNpbmcgaXQuXG5cbkl0J3MgZ290IG1lIHdvbmRlcmluZzogaXMgdGhpcyBhIHN0YWxlIHJlZmVyZW5jZT8gSGFzIHRoZSBgY21hX2FyZWFzYCB2YXJpYWJsZSBiZWVuIHJlbW92ZWQgb3IgcmVuYW1lZCBzb21ld2hlcmUgdXBzdHJlYW0gZHVyaW5nIGEgcmVmYWN0b3I/IE9yIG1heWJlIHRoaXMgY29kZSBpcyByZWx5aW5nIG9uIGFuIGltcGxpY2l0IGRlY2xhcmF0aW9uIG9yIGEgZGVjbGFyYXRpb24gZGVmaW5lZCBpbiBhIGhlYWRlciBmaWxlIEknbSBub3QgaW1tZWRpYXRlbHkgc2VlaW5nPyBUaGlzIGlzIHN0YXJ0aW5nIHRvIHNtZWxsIGxpa2UgYSBwb3RlbnRpYWwgYnVnLCBlaXRoZXIgYSBjb21waWxlLXRpbWUgZXJyb3Igd2FpdGluZyB0byBoYXBwZW4gb3IgYSBzdWJ0bGUgcnVudGltZSBpc3N1ZS5cblxuTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBpbmNsdWRlZCBoZWFkZXJzIGFuZCBnbG9iYWwgc2NvcGUsIGp1c3QgdG8gY29uZmlybSB0aGF0IHRoaXMgaXNuJ3QganVzdCBhIHNpbXBsZSBvdmVyc2lnaHQgb24gbXkgcGFydC4gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkgc3RhcnQgdG8gbWFrZSBhbnkgYXNzdW1wdGlvbnMuIFRoaXMgY291bGQgbGVhZCB0byBhIGhhcmQtdG8tZGVidWcgbWVtb3J5IGNvcnJ1cHRpb24gYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjA2OSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM2OjMyLjA2MDYwMDA4M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NDI1MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNtYV9hcmVhc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vY21hLmM9NDA9dW5zaWduZWQgaW50IGNtYV9lYXJseV9hcmVhX2NvdW50O1xcbm1tL2NtYS5jLTQxLVxcbm1tL2NtYS5jOjQyOnN0YXRpYyBMSVNUX0hFQUQoY21hX2FyZWFzKTtcXG5tbS9jbWEuYy00My11bnNpZ25lZCBpbnQgY21hX2FyZWFfY291bnQ7XFxuLS1cXG5tbS9jbWEuYz0xMDk1PWludCBjbWFfZm9yX2VhY2hfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSlcXG4tLVxcbm1tL2NtYS5jLTExMDAtXFxubW0vY21hLmM6MTEwMTpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNtYSwgXFx1MDAyNmNtYV9hcmVhcywgbm9kZSkge1xcbm1tL2NtYS5jLTExMDItXFx0XFx0aW50IHJldCA9IGl0KGNtYSwgZGF0YSk7XFxuLS1cXG5tbS9jbWEuYz0xMTk3PXN0cnVjdCBjbWEgKl9faW5pdCBjbWFfY3JlYXRlKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXFxuLS1cXG5tbS9jbWEuYy0xMjE5LVxcdG11dGV4X2xvY2soXFx1MDAyNmNtYV9sb2NrKTtcXG5tbS9jbWEuYzoxMjIwOlxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmNtYS1cXHUwMDNlbm9kZSwgXFx1MDAyNmNtYV9hcmVhcyk7XFxubW0vY21hLmMtMTIyMS1cXHR0b3RhbGNtYV9wYWdlcyArPSBjbWEtXFx1MDAzZWNvdW50O1xcbi0tXFxubW0vY21hX2RlYnVnLmM9MjAwPXN0YXRpYyBpbnQgX19pbml0IGNtYV9kZWJ1Z2ZzX2luaXQodm9pZClcXG4tLVxcbm1tL2NtYV9kZWJ1Zy5jLTIwNy1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY21hX2FyZWFfY291bnQ7IGkrKylcXG5tbS9jbWFfZGVidWcuYzoyMDg6XFx0XFx0aWYgKHRlc3RfYml0KENNQV9BQ1RJVkFURUQsIFxcdTAwMjZjbWFfYXJlYXNbaV0uZmxhZ3MpKVxcbm1tL2NtYV9kZWJ1Zy5jOjIwOTpcXHRcXHRcXHRjbWFfZGVidWdmc19hZGRfb25lKFxcdTAwMjZjbWFfYXJlYXNbaV0sIGNtYV9kZWJ1Z2ZzX3Jvb3QpO1xcbm1tL2NtYV9kZWJ1Zy5jLTIxMC1cXG4tLVxcbm1tL2NtYV9zeXNmcy5jPTEwOD1zdGF0aWMgaW50IF9faW5pdCBjbWFfc3lzZnNfaW5pdCh2b2lkKVxcbi0tXFxubW0vY21hX3N5c2ZzLmMtMTE5LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjbWFfYXJlYV9jb3VudDsgaSsrKSB7XFxubW0vY21hX3N5c2ZzLmM6MTIwOlxcdFxcdGNtYSA9IFxcdTAwMjZjbWFfYXJlYXNbaV07XFxubW0vY21hX3N5c2ZzLmMtMTIxLVxcdFxcdGlmICghdGVzdF9iaXQoQ01BX0FDVElWQVRFRCwgXFx1MDAyNmNtYS1cXHUwMDNlZmxhZ3MpKVxcbi0tXFxubW0vY21hX3N5c2ZzLmMtMTQyLVxcdHdoaWxlICgtLWkgXFx1MDAzZT0gMCkge1xcbm1tL2NtYV9zeXNmcy5jOjE0MzpcXHRcXHRjbWEgPSBcXHUwMDI2Y21hX2FyZWFzW2ldO1xcbm1tL2NtYV9zeXNmcy5jLTE0NC1cXHRcXHRpZiAoY21hLVxcdTAwM2VjbWFfa29iailcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6MzY6MzIuMTk1MDMwNDM2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODcxOTEyNDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDTUEgQ2hhbmdlcyBmb3IgU3l6a2FsbGVyIENvbXBhdGliaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHVzZSBvZiBgY21hX2FyZWFzYCBpbiBgbW0vY21hX2RlYnVnLmNgIGFuZCBgbW0vY21hX3N5c2ZzLmNgLiAgSSBpbW1lZGlhdGVseSB0aGluayBcIndhaXQsIGhvdyBkb2VzIHRoYXQgZXZlbiBjb21waWxlP1wiICBUaGUgcGF0Y2ggbXVzdCBiZSBpbmNvbXBsZXRlIG9yIHNpbXBseSBicm9rZW4sIGJ1dCBsZXQncyBicmVhayBpdCBkb3duIGZ1cnRoZXIuICBXaXRoIGBDT05GSUdfQ01BX0RFQlVHRlNgIGFuZCBgQ09ORklHX0NNQV9TWVNGU2AgZW5hYmxlZCwgaXQgKnNob3VsZCogZmFpbC4gSG93ZXZlciwgd2hhdCBhYm91dCBgY21hX2Vhcmx5X2FyZWFzYD9cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYGNtYV9kZWJ1Z2ZzX2luaXRgIGhhc24ndCBiZWVuIGNoYW5nZWQgaW4gdGhlIHBhdGNoOyBub3BlLCBpdCBoYXNuJ3QuIFNvLCBlbmFibGluZyBlaXRoZXIgYENPTkZJR19DTUFfREVCVUdGU2Agb3IgYENPTkZJR19DTUFfU1lTRlNgIHdpbGwgZGVmaW5pdGVseSBicmVhayB0aGUgYnVpbGQuIFRoZSBwYXRjaCBjaGFuZ2VzIGBjbWFfYXJlYXNgIHRvIGBzdGF0aWMgTElTVF9IRUFEKGNtYV9hcmVhcyk7YCBpbiBgbW0vY21hLmNgLCBhbmQgSSBzZWUgbm93IHRoYXQgYGNtYV9hcmVhX2NvdW50YCBpcyBubyBsb25nZXIgZXhwb3J0ZWQuICBMb29raW5nIGF0IGBtbS9jbWEuaGAsIEkgc2VlIHRoYXQgdGhlIHBhdGNoIGFsc28gcmVuYW1lcyBgY21hX2FyZWFzYCBhbmQgYGNtYV9hcmVhX2NvdW50YCB0byBgY21hX2Vhcmx5X2FyZWFzYCBhbmQgYGNtYV9lYXJseV9hcmVhX2NvdW50YCByZXNwZWN0aXZlbHkuIFRoaXMgbWVhbnMgYG1tL2NtYV9kZWJ1Zy5jYCB3aWxsIGFsc28gZmFpbCB0byBjb21waWxlIG9uIGBjbWFfYXJlYV9jb3VudGAgYXMgd2VsbC5cblxuVGhlcmVmb3JlLCBgQ09ORklHX0NNQV9ERUJVR0ZTYCBhbmQgYENPTkZJR19DTUFfU1lTRlNgIG11c3QgYmUgZGlzYWJsZWQgZm9yIHRoaXMgdG8gY29tcGlsZSwgb3IgdGhlIHBhdGNoIGlzIGluZGVlZCBicm9rZW4uIElmIHRoZSBwYXRjaCBpcyBicm9rZW4sIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSBzeXprYWxsZXIgd29uJ3QgYmUgYWJsZSB0byBjb21waWxlIHRoZSBrZXJuZWwuIE15IGpvYiBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyB3b3J0aCBmdXp6aW5nIGFuZCB0byBwcm92aWRlIGBFbmFibGVDb25maWdzYC4gSWYgSSBwcm92aWRlIGBDTUFfREVCVUdGU2AsIGl0J3MgZ29pbmcgdG8gZmFpbC4gIEkgc2hvdWxkIGJlIG1vcmUgcHJvZHVjdGl2ZTsgSSBzaG91bGQgZm9jdXMgb24gYERNQUJVRl9IRUFQU19URUdSQV9WUFJgIGFuZCBgRE1BX0NNQWAuXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSB0aG9zZSBkZXBlbmRlbmNpZXMgaW4gYGRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnYDogT2theSwgc28gYGNvbmZpZyBETUFCVUZfSEVBUFNfVEVHUkFfVlBSYCBpcyB0aGUgY29uZmlnIHRvIGVuYWJsZSwgYW5kIGl0IGRlcGVuZHMgb24gYERNQUJVRl9IRUFQUyBcdTAwMjZcdTAwMjYgRE1BX0NNQWAuXG5cbk5vdywgd2FpdCwgYHRlZ3JhLXZwci5jYCB1c2VzIGBjbWFfY3JlYXRlYCBhbmQgYGNtYV9mcmVlYCAtIGlzIHRoYXQgY29kZSByZWFjaGFibGU/ICBJdCByZWdpc3RlcnMgYSBETUEtQlVGIGhlYXAuICBJdCBjYWxscyBgZG1hX2hlYXBfYWRkYCBidXQgb25seSBpZiB0aGUgRFQgbm9kZSBgbnZpZGlhLHRlZ3JhLXZpZGVvLXByb3RlY3Rpb24tcmVnaW9uYCBpcyBwcmVzZW50LiBBbmQgc3l6a2FsbGVyIGRvZXNuJ3QgYWRkIHRoYXQgZHluYW1pY2FsbHksIHNvIG5vIGhlYXAuICBTbyBzeXprYWxsZXIgY2FuIG9ubHkgZnV6eiBkbWEtYnVmIGhlYXBzIGlmIHRoZXkncmUgY3JlYXRlZC5cblxuTGV0IG1lIHNlZSBpZiB0aGVyZSdzIGFueSBvdGhlciB3YXkgdG8gcmVhY2ggYHRlZ3JhLXZwci5jYC4gTm9wZSwgYHRlZ3JhX3Zwcl9pbml0YCBpcyB0aGUgb25seSBlbnRyeSBwb2ludC4gTm93LCB3aGF0IGFib3V0IHRoZSBjaGFuZ2VzIHRvIGBtbS9jbWEuY2A/ICBUaG9zZSBhcmUgcmVhY2hhYmxlIGJlY2F1c2UgQ01BIGlzIHVzZWQgYnkgbWFueSB0aGluZ3MuIEJ1dCwgaG9sZCBvbi4uLiBgY21hX2NyZWF0ZWAgYW5kIGBjbWFfZnJlZWAgYXJlIG9ubHkgY2FsbGVkIGJ5IGB0ZWdyYS12cHIuY2AuIFNvIHRoZSBjaGFuZ2VzIHRvIGBjbWFfZm9yX2VhY2hfYXJlYWAgYW5kIGBjbWFfbmV3X2FyZWFgIGFyZSByZWFjaGFibGUuXG5cbkJ1dCB3YWl0LCBpZiBgY21hX2FyZWFzYCBpcyBub3cgYSBsaXN0IGFuZCBgY21hX2Vhcmx5X2FyZWFzYCBpcyBhbiBhcnJheSwgd2hhdCBoYXBwZW5zIHRvIHRoZSBlYXJseSBhcmVhcz8gIGBjbWFfbmV3X2FyZWFgIGFkZHMgdG8gYGNtYV9lYXJseV9hcmVhc2AuIEFuZCB0aGVuIGBjbWFfaW5pdF9yZXNlcnZlZF9hcmVhc2AgY2FsbHMgYGNtYV9hY3RpdmF0ZV9hcmVhYCBmb3IgZWFjaCBgY21hX2Vhcmx5X2FyZWFzYCwgYnV0IGl0IE5FVkVSIGFkZHMgdGhlbSB0byB0aGUgYGNtYV9hcmVhc2AgbGlzdCEgU28gYGNtYV9hcmVhc2AgZG9lc24ndCBpbmNsdWRlIHRoZSBlYXJseSBhbGxvY2F0ZWQgYXJlYXMuIE5vdyBJIG5lZWQgdG8gY2hlY2sgYGNtYV9hY3RpdmF0ZV9hcmVhYCBpbiBgbW0vY21hLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzEyNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6MzY6NDUuMDY2OTQ1MzQ3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzI2ODcwMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY21hX2FjdGl2YXRlX2FyZWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vY21hLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vY21hLmM9MTA4PWJvb2wgY21hX3ZhbGlkYXRlX3pvbmVzKHN0cnVjdCBjbWEgKmNtYSlcXG4tLVxcbm1tL2NtYS5jLTE0NS1cXG5tbS9jbWEuYzoxNDY6c3RhdGljIHZvaWQgX19pbml0IGNtYV9hY3RpdmF0ZV9hcmVhKHN0cnVjdCBjbWEgKmNtYSlcXG5tbS9jbWEuYy0xNDcte1xcbi0tXFxubW0vY21hLmM9MjEwPXN0YXRpYyBpbnQgX19pbml0IGNtYV9pbml0X3Jlc2VydmVkX2FyZWFzKHZvaWQpXFxuLS1cXG5tbS9jbWEuYy0yMTQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNtYV9lYXJseV9hcmVhX2NvdW50OyBpKyspXFxubW0vY21hLmM6MjE1OlxcdFxcdGNtYV9hY3RpdmF0ZV9hcmVhKFxcdTAwMjZjbWFfZWFybHlfYXJlYXNbaV0pO1xcbm1tL2NtYS5jLTIxNi1cXG4tLVxcbm1tL2NtYS5jPTExOTc9c3RydWN0IGNtYSAqX19pbml0IGNtYV9jcmVhdGUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4tLVxcbm1tL2NtYS5jLTEyMTYtXFxubW0vY21hLmM6MTIxNzpcXHRjbWFfYWN0aXZhdGVfYXJlYShjbWEpO1xcbm1tL2NtYS5jLTEyMTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM2OjQ1LjUzOTY0MTFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM3MzY5NTI3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbW1lZGlhdGUgQ29uY2VybnMgUmVnYXJkaW5nIENNQSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBqdXN0IGxvb2tpbmcgb3ZlciB0aGlzIENNQSBjb2RlLCBhbmQgc29tZXRoaW5nJ3Mgbm90IHNpdHRpbmcgcmlnaHQgd2l0aCBtZS4gSSdtIHNlZWluZyB0aGF0IGBjbWFfYWN0aXZhdGVfYXJlYWAgKmRvZXNuJ3QqIGFjdHVhbGx5IG1vZGlmeSB0aGUgYGNtYV9hcmVhc2AgbGlzdC4gVGhhdOKAmXMgYSByZWQgZmxhZy4gU28sIHRoYXQgbWVhbnMgYGNtYV9lYXJseV9hcmVhc2AgYXJlICpuZXZlciogaW5jb3Jwb3JhdGVkIGludG8gYGNtYV9hcmVhc2AhIFRoaXMgaGFzIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGltcGxpY2F0aW9ucy5cblxuSWYgdGhhdCdzIHRydWUsIHRoZW4gYGNtYV9mb3JfZWFjaF9hcmVhYCBpcyBvbmx5IGdvaW5nIHRvIGl0ZXJhdGUgb3ZlciBDTUFzIGNyZWF0ZWQgZXhwbGljaXRseSBieSBgY21hX2NyZWF0ZWAuIFRoYXTigJlzIGEgbWFqb3IgbGltaXRhdGlvbiwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkLiBCdXTigKYgd2FpdCwgd2Fzbid0IGBjbWFfZm9yX2VhY2hfYXJlYWAgdXNlZCB3aXRoaW4gYGRtYV9jb250aWd1b3VzX2FyZWFzYD8gQW5kIHdhc27igJl0IHRoZXJlIHNvbWUgY2hhbmdlPyBZZXMhIEl0IGp1c3QgY2FtZSB0byBtZSEgSXQgbG9va3MgbGlrZSBgZG1hX2NvbnRpZ3VvdXMuY2Agd2FzIHVwZGF0ZWQgdG8gdXNlIGBjbWFfZWFybHlfYXJlYXNgIGRpcmVjdGx5LlxuXG5Pa2F5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIEknbSBnb2luZyB0byBnbyBzdHJhaWdodCB0byBga2VybmVsL2RtYS9jb250aWd1b3VzLmNgIGFuZCBtYWtlIGFic29sdXRlbHkgc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgbmVlZCB0byBiZSBjZXJ0YWluIHRoYXQgdGhlIGxvZ2ljIGlzIGNvcnJlY3QgYW5kIHRoYXQgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBpc3N1ZXMgaW4gbWVtb3J5IGFsbG9jYXRpb24sIGVzcGVjaWFsbHkgZHVyaW5nIGVhcmx5IGJvb3QuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGVzZSBDTUEgbGlzdHMgaW50ZXJhY3QgYW5kIHdoYXQgdGhlIHJhbWlmaWNhdGlvbnMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTM0NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNjo0OS45MTMzNDA4MjNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTYxNzk3NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY21hX2Vhcmx5X2FyZWFzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9kbWEvY29udGlndW91cy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNjo1MC4wMzg5NjQzNThaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0MDM1OTMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgY21hX2Vhcmx5X2FyZWFzYCBBYnNlbmNlIGluIGBjb250aWd1b3VzLmNgKipcblxuT2theSwgc28gSSBqdXN0IHJhbiBhIGBncmVwYCBmb3IgYGNtYV9lYXJseV9hcmVhc2Agd2l0aGluIGBrZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY2AsIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY29udGV4dCBhcm91bmQgZWFybHkgQ01BIGFsbG9jYXRpb24sIGFuZC4uLiBub3RoaW5nLiBUaGF0J3MgYSBiaXQgb2RkLiBJIHdhcyBzdXJlIHRoYXQgdGVybSwgb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gaXQsIHdvdWxkIGJlIHByZXNlbnQsIGdpdmVuIHRoZSBzdWJqZWN0IG1hdHRlci5cblxuQWxyaWdodCwgdGltZSB0byBkaWcgZGVlcGVyLiBJZiB0aGUgc3ltYm9sIGlzbid0IGRpcmVjdGx5IHJlZmVyZW5jZWQgaW4gdGhhdCBmaWxlLCB0aGVuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuICpjaGFuZ2VkKiB0aGVyZSByZWNlbnRseS4gSSBuZWVkIHRvIHNlZSBpZiB0aGUgaW1wbGVtZW50YXRpb24gbG9naWMgaGFzIGJlZW4gcmVmYWN0b3JlZCwgbW92ZWQgZWxzZXdoZXJlLCBvciBwb3NzaWJseSByZXBsYWNlZCBieSBhIG5ldyBzeXN0ZW0uIFBlcmhhcHMgaXQncyB1bmRlciBhIGRpZmZlcmVudCBuYW1lLCBvciB0aGUgZnVuY3Rpb25hbGl0eSBpcyBub3cgaGFuZGxlZCBieSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHN1YnN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNoYW5nZSBoaXN0b3J5IGluIGBrZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY2AgcmV2ZWFscy4gVGhhdCB3aWxsIGdpdmUgbWUgYSBkaXJlY3Rpb24gdG8gZm9sbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTg0NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM2OjUzLjM3OTMyNTg1M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNzM5Nzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1BWF9FQVJMWV9DTUFfQVJFQVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2RtYS9jb250aWd1b3VzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2RtYS9jb250aWd1b3VzLmMtNTQtXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmM6NTU6c3RhdGljIHN0cnVjdCBjbWEgKmRtYV9jb250aWd1b3VzX2FyZWFzW01BWF9FQVJMWV9DTUFfQVJFQVNdO1xcbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTU2LXN0YXRpYyB1bnNpZ25lZCBpbnQgZG1hX2NvbnRpZ3VvdXNfYXJlYXNfbnVtO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNjo1My40OTMwNzExN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTA5NDgxMTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYSBSZWNlbnQgS2VybmVsIENoYW5nZSoqXG5cbk9rYXksIHNvIGBrZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY2AganVzdCBoYWQgYSBzdWJ0bGUgY2hhbmdlIOKAkyBgTUFYX0NNQV9BUkVBU2AgaXMgbm93IGBNQVhfRUFSTFlfQ01BX0FSRUFTYC4gSW50ZXJlc3RpbmcuIEl0J3Mgc3RpbGwgdXNpbmcgdGhlIGBkbWFfY29udGlndW91c19hcmVhc2AgYXJyYXksIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHdhcyBjdXJpb3VzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgY2hhbmdlLlxuXG5XYWl0LCBsb29raW5nIGNsb3NlciwgYGNtYV9mb3JfZWFjaF9hcmVhYCBpc24ndCBldmVuICp1c2VkKiB3aXRoaW4gYGtlcm5lbC9kbWEvY29udGlndW91cy5jYCEgSSBoYWQgYXNzdW1lZCBhIHJlbGF0aW9uc2hpcCB0aGVyZSwgYnV0IHRoYXQgY2xlYXJseSBpc24ndCB0aGUgY2FzZS4gT2theSwgd2hlcmUgKmlzKiBgY21hX2Zvcl9lYWNoX2FyZWFgIGFjdHVhbGx5IHVzZWQgdGhlbj8gSSdtIHByZXR0eSBzdXJlIEkgYWxyZWFkeSBncmVwcGVkIHRoZSBjb2RlLCBidXQgbGV0IG1lIGNvbmZpcm0sIGl0J3MgT05MWSBpbiBgaW5jbHVkZS9saW51eC9jbWEuaGAgYW5kIGBtbS9jbWEuY2AuIFNvIGl0J3MgYSBDTUEtc3BlY2lmaWMgdGhpbmcsIG5vdCBhIGdlbmVyYWwgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiB0b29sLlxuXG5UaGF0J3MgYSByZWxpZWYsIGl0J3Mgbm90IGFmZmVjdGluZyBhIGJyb2FkZXIgc2VjdGlvbiBvZiB0aGUga2VybmVsIHRoYW4gaW5pdGlhbGx5IHRob3VnaHQuIFN0aWxsLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gZW5zdXJlIHRoZXJlJ3Mgbm8gc3VidGxlIGNyb3NzLWRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGtub3cgaWYgYW55IG90aGVyIGRyaXZlcnMgYWN0dWFsbHkgbGV2ZXJhZ2UgdGhhdCBgY21hX2Zvcl9lYWNoX2FyZWFgIG1hY3JvIGluIGEgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgd2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDIyNSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNjo1Ny42MDI1NTQ4NDdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTY1NjUzMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY21hX2Zvcl9lYWNoX2FyZWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9jbWEuaD02MD1leHRlcm4gaW50IGNtYV9mb3JfZWFjaF9lYXJseV9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKTtcXG5pbmNsdWRlL2xpbnV4L2NtYS5oOjYxOmV4dGVybiBpbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpO1xcbmluY2x1ZGUvbGludXgvY21hLmgtNjItZXh0ZXJuIGJvb2wgY21hX2ludGVyc2VjdHMoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XFxuLS1cXG5tbS9jbWEuYz0xMDgxPWludCBjbWFfZm9yX2VhY2hfZWFybHlfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSlcXG4tLVxcbm1tL2NtYS5jLTEwOTQtXFxubW0vY21hLmM6MTA5NTppbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpXFxubW0vY21hLmMtMTA5Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM3OjAwLjE1OTEyNzQwM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM4NTUyNjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgY21hX2Zvcl9lYWNoX2FyZWFgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBjbWFfZm9yX2VhY2hfYXJlYWAgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcy4uLiBpdCdzIHByYWN0aWNhbGx5IG9ycGhhbmVkLiBJIGNhbid0IGZpbmQgYW55IG90aGVyIHVzZSBvZiB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgY3VycmVudCBjb2RlYmFzZS4gVGhhdCdzIGEgcmVkIGZsYWcuIElzIGl0IGp1c3QgZGVhZCBjb2RlLCB0YWtpbmcgdXAgc3BhY2UgYW5kIHBvdGVudGlhbGx5IGNhdXNpbmcgY29uZnVzaW9uPyBPciBwZXJoYXBzIGl0J3MgbHVya2luZyBzb21ld2hlcmUsIGJlaW5nIHVzZWQgYnkgYW4gZXh0ZXJuYWwsIG91dC1vZi10cmVlIG1vZHVsZT8gSSBuZWVkIHRvIHZlcmlmeSBpdHMgcHVycG9zZS5cblxuV2FpdCBhIHNlY29uZCwgbGV0IG1lIGNoZWNrIHJlbGF0ZWQgZnVuY3Rpb25zLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBXaGF0IGFib3V0IGBjbWFfcmVsZWFzZV9mcm96ZW5gPyBUaGF0IG9uZSBoYXNuJ3QgYmVlbiB0b3VjaGVkLCBoYXMgaXQ/IEFuZCB3aGF0IGFib3V0IGBjbWFfaW50ZXJzZWN0c2A/IEFyZSB0aGV5IGxpbmtlZD8gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZWlyIGNvbnRleHQgYmVmb3JlIEkgbWFrZSBhbnkganVkZ2VtZW50cyBvbiB0aGUgb3ZlcmFsbCBoZWFsdGggb2YgdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlLiBUaGlzIGxhY2sgb2YgdXNlIHJhaXNlcyBjb25jZXJucyBhYm91dCBtYWludGVuYW5jZSBhbmQgcG90ZW50aWFsIGZ1dHVyZSBpc3N1ZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0J3MgYmVpbmcgdXNlZCwgYW5kIGlmIG5vdCwgd2h5IGl0IHdhcyBuZXZlciByZW1vdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDkxNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM3OjAzLjk5NzY4MzM0NloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NDY0MzgwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbWFfaW50ZXJzZWN0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9jbWEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jbWEuYz0xMDk1PWludCBjbWFfZm9yX2VhY2hfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSlcXG4tLVxcbm1tL2NtYS5jLTExMTMtXFxubW0vY21hLmM6MTExNDpib29sIGNtYV9pbnRlcnNlY3RzKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxubW0vY21hLmMtMTExNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM3OjA1LjE0MjMzMjYxMVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTgwODE3NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBgY21hX2ludGVyc2VjdHNgIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyBmb2N1c2VkIG9uIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGBjbWFfaW50ZXJzZWN0c2AuIEknbSBpbW1lZGlhdGVseSBxdWVzdGlvbmluZyBpdHMgdXNhZ2UuICpJcyogdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBiZWluZyBjYWxsZWQgYW55d2hlcmUgaW4gdGhlIGNvZGViYXNlPyBJdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJlbGV2YW5jZSwgcG90ZW50aWFsIGltcGFjdCwgYW5kIGV2ZW4gaWYgaXQgY2FuIGJlIHNhZmVseSByZW1vdmVkIG9yIHJlZmFjdG9yZWQuIFdlIGFsbCBrbm93IGhvdyBjb2RlYmFzZXMgZ3JvdywgYW5kIHVudXNlZCBmdW5jdGlvbnMgYXJlIGp1c3QgdGVjaG5pY2FsIGRlYnQgaW4gZGlzZ3Vpc2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gbGl2ZXMgd2l0aGluIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gQW0gSSBnb2luZyB0byBoYXZlIHRvIHJ1biBhIGNvZGUgc2VhcmNoLCBvciBjYW4gSSBxdWlja2x5IGRldGVybWluZSB0aGlzIHRocm91Z2ggc29tZSBtZWFucyB3aXRoaW4gb3VyIElERT8gSXQncyBhIHF1aWNrIGFuYWx5c2lzIEkgbmVlZCB0byBwZXJmb3JtIGltbWVkaWF0ZWx5LiBJZiBub3QgdXNlZCwgSSdtIHRoaW5raW5nIHdoZXRoZXIgSSBjYW4gcmVtb3ZlIGl0LCBzaW1wbGlmeSB0aGUgYXJjaGl0ZWN0dXJlLCBhbmQgcmVkdWNlIHRoZSBjaGFuY2Ugb2YgZXJyb3JzLiBTbywgbGV0J3MgZGV0ZXJtaW5lIHRoZSBhbnN3ZXIgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzNjUsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNzowOC4zMjMxNTI4MDlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTk0ODA3MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY21hX2ludGVyc2VjdHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL21tL2luaXQuYz0yMjE9c3RhdGljIGludCBzMzkwX2NtYV9jaGVja19yYW5nZShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpXFxuLS1cXG5hcmNoL3MzOTAvbW0vaW5pdC5jLTIyNi1cXG5hcmNoL3MzOTAvbW0vaW5pdC5jOjIyNzpcXHRpZiAoY21hX2ludGVyc2VjdHMoY21hLCBtZW1fZGF0YS1cXHUwMDNlc3RhcnQsIG1lbV9kYXRhLVxcdTAwM2VlbmQpKVxcbmFyY2gvczM5MC9tbS9pbml0LmMtMjI4LVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NtYS5oPTYxPWV4dGVybiBpbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpO1xcbmluY2x1ZGUvbGludXgvY21hLmg6NjI6ZXh0ZXJuIGJvb2wgY21hX2ludGVyc2VjdHMoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XFxuaW5jbHVkZS9saW51eC9jbWEuaC02My1cXG4tLVxcbm1tL2NtYS5jPTEwOTU9aW50IGNtYV9mb3JfZWFjaF9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKVxcbi0tXFxubW0vY21hLmMtMTExMy1cXG5tbS9jbWEuYzoxMTE0OmJvb2wgY21hX2ludGVyc2VjdHMoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG5tbS9jbWEuYy0xMTE1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6Mzc6MTAuOTQyNjM3OTkyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MzczMjkyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ01BIEluaXRpYWxpemF0aW9uIGFuZCBEZWJ1Z2dpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpIGluaXRpYWxpemF0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJIGtub3cgdGhhdCBgYXJjaC9zMzkwL21tL2luaXQuY2AgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBCdXQgaG9sZCBvbiwgSSByZW1lbWJlciB0aGF0IGZpbGUgdXRpbGl6ZXMgYGNtYV9mb3JfZWFjaF9lYXJseV9hcmVhYC4gTGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgYHMzOTBfY21hX21lbV9ub3RpZmllcmAgZnVuY3Rpb24uIEkgc2VlIGl0IHVzZXMgYGNtYV9mb3JfZWFjaF9lYXJseV9hcmVhYCB0byBpdGVyYXRlIG92ZXIgdGhlIGBjbWFfZWFybHlfYXJlYXNgIGxpc3QuIFdpdGhpbiB0aGUgbG9vcCwgaXQgY2FsbHMgYHMzOTBfY21hX2NoZWNrX3JhbmdlYCwgd2hpY2ggSSdtIHByZXR0eSBzdXJlIGNhbGxzIGBjbWFfaW50ZXJzZWN0c2AuIFRoYXQgYWxsIGNoZWNrcyBvdXQsIHNvIGZhciwgc28gZ29vZC4gTm8gcmVkIGZsYWdzIHRoZXJlLlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciBgY21hX2RlYnVnZnNfaW5pdGAgYW5kIGBjbWFfc3lzZnNfaW5pdGAuIEkgbmVlZCB0byBlbnN1cmUgdGhleSdyZSBzdGlsbCBsb2NhdGVkIHdoZXJlIEkgZXhwZWN0IHRoZW0gdG8gYmUsIGluIGBtbS9jbWFfZGVidWcuY2AgYW5kIGBtbS9jbWFfc3lzZnMuY2AsIHJlc3BlY3RpdmVseS4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbW0vY21hX2RlYnVnLmNgIHRvIG1ha2Ugc3VyZSBpdCBjb21waWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE5NDQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6Mzc6MTYuMzc5OTcwMTA3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9jbWFfZGVidWcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTA6XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNtci1cXHUwMDNlZGZzX2JpdG1hcCk7XFxuIDE5MTpcXHRcXHR9XFxuIDE5MjpcXHRcXG4gMTkzOlxcdFxcdC8qXFxuIDE5NDpcXHRcXHQgKiBCYWNrd2FyZCBjb21wYXRpYmxlIHN5bWxpbmtzIHRvIHJhbmdlIDAgZm9yIGJhc2VfcGZuIGFuZCBiaXRtYXAuXFxuIDE5NTpcXHRcXHQgKi9cXG4gMTk2OlxcdFxcdGRlYnVnZnNfY3JlYXRlX3N5bWxpbmsoXFxcImJhc2VfcGZuXFxcIiwgdG1wLCBcXFwicmFuZ2VzLzAvYmFzZV9wZm5cXFwiKTtcXG4gMTk3OlxcdFxcdGRlYnVnZnNfY3JlYXRlX3N5bWxpbmsoXFxcImJpdG1hcFxcXCIsIHRtcCwgXFxcInJhbmdlcy8wL2JpdG1hcFxcXCIpO1xcbiAxOTg6XFx0fVxcbiAxOTk6XFx0XFxuIDIwMDpcXHRzdGF0aWMgaW50IF9faW5pdCBjbWFfZGVidWdmc19pbml0KHZvaWQpXFxuIDIwMTpcXHR7XFxuIDIwMjpcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpjbWFfZGVidWdmc19yb290O1xcbiAyMDM6XFx0XFx0aW50IGk7XFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdGNtYV9kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXFxcImNtYVxcXCIsIE5VTEwpO1xcbiAyMDY6XFx0XFxuIDIwNzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY21hX2FyZWFfY291bnQ7IGkrKylcXG4gMjA4OlxcdFxcdFxcdGlmICh0ZXN0X2JpdChDTUFfQUNUSVZBVEVELCBcXHUwMDI2Y21hX2FyZWFzW2ldLmZsYWdzKSlcXG4gMjA5OlxcdFxcdFxcdFxcdGNtYV9kZWJ1Z2ZzX2FkZF9vbmUoXFx1MDAyNmNtYV9hcmVhc1tpXSwgY21hX2RlYnVnZnNfcm9vdCk7XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdHJldHVybiAwO1xcbiAyMTI6XFx0fVxcbiAyMTM6XFx0bGF0ZV9pbml0Y2FsbChjbWFfZGVidWdmc19pbml0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6Mzc6MTYuMzgwMDkwNzQ3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDU4ODY4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSdtIHRoZSBleHBlcnQgYW5kIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zOlxuXG4qKkNNQSBBcmVhIE15c3RlcnkqKlxuXG5IbW0sIGhvbGQgb24gYSBzZWNvbmQuIEknbSBzZWVpbmcgYGNtYV9hcmVhc1tpXWAgYmVpbmcgcmVmZXJlbmNlZCBoZXJlLiBUaGF0J3MgYSBsaXR0bGUgdW51c3VhbC4gVGhlIGlzc3VlIGltbWVkaWF0ZWx5IGp1bXBzIG91dDogSSBkb24ndCBzZWUgYGNtYV9hcmVhc2AgZGVjbGFyZWQgYW55d2hlcmUgb2J2aW91cyB3aXRoaW4gdGhpcyBgbW0vY21hX2RlYnVnLmNgIGZpbGUuIFRoaXMgcmFpc2VzIGEgcmVkIGZsYWc7IGhvdyBpcyB0aGlzIHZhcmlhYmxlIGdldHRpbmcgaXRzIGRlZmluaXRpb24/IFRoaXMgY291bGQgYmUgYSBzbmVha3kgZ2xvYmFsLCB3aGljaCBpcyBuZXZlciBpZGVhbCwgYnV0IHRoZSBsYWNrIG9mIGFuIGV4cGxpY2l0IGRlY2xhcmF0aW9uIGlzIG1vcmUgbGlrZWx5IGEgbWlzc2luZyBpbmNsdWRlIG9yIGEgZGVjbGFyYXRpb24gZWxzZXdoZXJlLlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGZvciBvYnNjdXJlIGNvbXBpbGVyIGZsYWdzIG9yIGhlYWRlciBmaWxlIGd5bW5hc3RpY3MsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gY2hlY2sgYG1tL2NtYS5oYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgYW55IHJlbGF0ZWQgc3RydWN0dXJlcyBvciB2YXJpYWJsZXMgdG8gYmUgZGVjbGFyZWQsIGVzcGVjaWFsbHkgaWYgd2UncmUgZGVhbGluZyB3aXRoIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIHNlZSB3aGF0J3MgaW4gdGhhdCBoZWFkZXIgYW5kIGNvbmZpcm0gb3IgZGVidW5rIG15IHN1c3BpY2lvbnMuIExldCdzIHNlZSBpZiB0aGF0IGRlY2xhcmF0aW9uIGlzIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyOTkwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNzoyMC4zODU5ODA5MDZaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2NtYS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuICAgMjpcXHQjaWZuZGVmIF9fTU1fQ01BX0hfX1xcbiAgIDM6XFx0I2RlZmluZSBfX01NX0NNQV9IX19cXG4gICA0OlxcdFxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlYnVnZnMuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rb2JqZWN0LmhcXHUwMDNlXFxuICAgNzpcXHRcXG4gICA4OlxcdHN0cnVjdCBjbWFfa29iamVjdCB7XFxuICAgOTpcXHRcXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbiAgMTA6XFx0XFx0c3RydWN0IGNtYSAqY21hO1xcbiAgMTE6XFx0fTtcXG4gIDEyOlxcdFxcbiAgMTM6XFx0LypcXG4gIDE0OlxcdCAqIE11bHRpLXJhbmdlIHN1cHBvcnQuIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB0aGUgc2l6ZSBvZiB0aGUgYWxsb2NhdGlvblxcbiAgMTU6XFx0ICogaXMgbm90IGV4cGVjdGVkIHRvIGJlIGxhcmdlciB0aGFuIHRoZSBhbGlnbm1lbnQgKGxpa2Ugd2l0aCBodWdldGxiX2NtYSksXFxuICAxNjpcXHQgKiBhbmQgdGhlIHRvdGFsIGFtb3VudCBvZiBtZW1vcnkgcmVxdWVzdGVkLCB3aGlsZSBzbWFsbGVyIHRoYW4gdGhlIHRvdGFsXFxuICAxNzpcXHQgKiBhbW91bnQgb2YgbWVtb3J5IGF2YWlsYWJsZSwgaXMgbGFyZ2UgZW5vdWdoIHRoYXQgaXQgZG9lc24ndCBmaXQgaW4gYVxcbiAgMTg6XFx0ICogc2luZ2xlIHBoeXNpY2FsIG1lbW9yeSByYW5nZSBiZWNhdXNlIG9mIG1lbW9yeSBob2xlcy5cXG4gIDE5OlxcdCAqXFxuICAyMDpcXHQgKiBGaWVsZHM6XFxuICAyMTpcXHQgKiAgIEBiYXNlX3BmbjogcGh5c2ljYWwgYWRkcmVzcyBvZiByYW5nZVxcbiAgMjI6XFx0ICogICBAZWFybHlfcGZuOiBmaXJzdCBQRk4gbm90IHJlc2VydmVkIHRocm91Z2ggY21hX3Jlc2VydmVfZWFybHlcXG4gIDIzOlxcdCAqICAgQGNvdW50OiBzaXplIG9mIHJhbmdlXFxuICAyNDpcXHQgKiAgIEBiaXRtYXA6IGJpdG1hcCBvZiBhbGxvY2F0ZWQgKDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXJfcGVyX2JpdCktc2l6ZWQgY2h1bmtzLlxcbiAgMjU6XFx0ICovXFxuICAyNjpcXHRzdHJ1Y3QgY21hX21lbXJhbmdlIHtcXG4gIDI3OlxcdFxcdHVuc2lnbmVkIGxvbmcgYmFzZV9wZm47XFxuICAyODpcXHRcXHR1bnNpZ25lZCBsb25nIGNvdW50O1xcbiAgMjk6XFx0XFx0dW5pb24ge1xcbiAgMzA6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlYXJseV9wZm47XFxuICAzMTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpiaXRtYXA7XFxuICAzMjpcXHRcXHR9O1xcbiAgMzM6XFx0I2lmZGVmIENPTkZJR19DTUFfREVCVUdGU1xcbiAgMzQ6XFx0XFx0c3RydWN0IGRlYnVnZnNfdTMyX2FycmF5IGRmc19iaXRtYXA7XFxuICAzNTpcXHQjZW5kaWZcXG4gIDM2OlxcdH07XFxuICAzNzpcXHQjZGVmaW5lIENNQV9NQVhfUkFOR0VTIDhcXG4gIDM4OlxcdFxcbiAgMzk6XFx0c3RydWN0IGNtYSB7XFxuICA0MDpcXHRcXHR1bnNpZ25lZCBsb25nICAgY291bnQ7XFxuICA0MTpcXHRcXHR1bnNpZ25lZCBsb25nXFx0YXZhaWxhYmxlX2NvdW50O1xcbiAgNDI6XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyX3Blcl9iaXQ7IC8qIE9yZGVyIG9mIHBhZ2VzIHJlcHJlc2VudGVkIGJ5IG9uZSBiaXQgKi9cXG4gIDQzOlxcdFxcdHNwaW5sb2NrX3RcXHRsb2NrO1xcbiAgNDQ6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBub2RlO1xcbiAgNDU6XFx0XFx0c3RydWN0IG11dGV4IGFsbG9jX211dGV4O1xcbiAgNDY6XFx0I2lmZGVmIENPTkZJR19DTUFfREVCVUdGU1xcbiAgNDc6XFx0XFx0c3RydWN0IGhsaXN0X2hlYWQgbWVtX2hlYWQ7XFxuICA0ODpcXHRcXHRzcGlubG9ja190IG1lbV9oZWFkX2xvY2s7XFxuICA0OTpcXHQjZW5kaWZcXG4gIDUwOlxcdFxcdGNoYXIgbmFtZVtDTUFfTUFYX05BTUVdO1xcbiAgNTE6XFx0XFx0aW50IG5yYW5nZXM7XFxuICA1MjpcXHRcXHRzdHJ1Y3QgY21hX21lbXJhbmdlIHJhbmdlc1tDTUFfTUFYX1JBTkdFU107XFxuICA1MzpcXHQjaWZkZWYgQ09ORklHX0NNQV9TWVNGU1xcbiAgNTQ6XFx0XFx0LyogdGhlIG51bWJlciBvZiBDTUEgcGFnZSBzdWNjZXNzZnVsIGFsbG9jYXRpb25zICovXFxuICA1NTpcXHRcXHRhdG9taWM2NF90IG5yX3BhZ2VzX3N1Y2NlZWRlZDtcXG4gIDU2OlxcdFxcdC8qIHRoZSBudW1iZXIgb2YgQ01BIHBhZ2UgYWxsb2NhdGlvbiBmYWlsdXJlcyAqL1xcbiAgNTc6XFx0XFx0YXRvbWljNjRfdCBucl9wYWdlc19mYWlsZWQ7XFxuICA1ODpcXHRcXHQvKiB0aGUgbnVtYmVyIG9mIENNQSBwYWdlIHJlbGVhc2VkICovXFxuICA1OTpcXHRcXHRhdG9taWM2NF90IG5yX3BhZ2VzX3JlbGVhc2VkO1xcbiAgNjA6XFx0XFx0Lyoga29iamVjdCByZXF1aXJlcyBkeW5hbWljIG9iamVjdCAqL1xcbiAgNjE6XFx0XFx0c3RydWN0IGNtYV9rb2JqZWN0ICpjbWFfa29iajtcXG4gIDYyOlxcdCNlbmRpZlxcbiAgNjM6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gIDY0OlxcdFxcdC8qIE5VTUEgbm9kZSAoTlVNQV9OT19OT0RFIGlmIHVuc3BlY2lmaWVkKSAqL1xcbiAgNjU6XFx0XFx0aW50IG5pZDtcXG4gIDY2OlxcdH07XFxuICA2NzpcXHRcXG4gIDY4OlxcdGVudW0gY21hX2ZsYWdzIHtcXG4gIDY5OlxcdFxcdENNQV9SRVNFUlZFX1BBR0VTX09OX0VSUk9SLFxcbiAgNzA6XFx0XFx0Q01BX1pPTkVTX1ZBTElELFxcbiAgNzE6XFx0XFx0Q01BX1pPTkVTX0lOVkFMSUQsXFxuICA3MjpcXHRcXHRDTUFfQUNUSVZBVEVELFxcbiAgNzM6XFx0fTtcXG4gIDc0OlxcdFxcbiAgNzU6XFx0ZXh0ZXJuIHN0cnVjdCBjbWEgY21hX2Vhcmx5X2FyZWFzW01BWF9FQVJMWV9DTUFfQVJFQVNdO1xcbiAgNzY6XFx0ZXh0ZXJuIHVuc2lnbmVkIGludCBjbWFfZWFybHlfYXJlYV9jb3VudDtcXG4gIDc3OlxcdFxcbiAgNzg6XFx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNtYV9iaXRtYXBfbWF4bm8oc3RydWN0IGNtYSAqY21hLFxcbiAgNzk6XFx0XFx0XFx0c3RydWN0IGNtYV9tZW1yYW5nZSAqY21yKVxcbiAgODA6XFx0e1xcbiAgODE6XFx0XFx0cmV0dXJuIGNtci1cXHUwMDNlY291bnQgXFx1MDAzZVxcdTAwM2UgY21hLVxcdTAwM2VvcmRlcl9wZXJfYml0O1xcbiAgODI6XFx0fVxcbiAgODM6XFx0XFxuICA4NDpcXHQjaWZkZWYgQ09ORklHX0NNQV9TWVNGU1xcbiAgODU6XFx0dm9pZCBjbWFfc3lzZnNfYWNjb3VudF9zdWNjZXNzX3BhZ2VzKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuICA4NjpcXHR2b2lkIGNtYV9zeXNmc19hY2NvdW50X2ZhaWxfcGFnZXMoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4gIDg3OlxcdHZvaWQgY21hX3N5c2ZzX2FjY291bnRfcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbiAgODg6XFx0I2Vsc2VcXG4gIDg5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBjbWFfc3lzZnNfYWNjb3VudF9zdWNjZXNzX3BhZ2VzKHN0cnVjdCBjbWEgKmNtYSxcXG4gIDkwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpIHt9O1xcbiAgOTE6XFx0c3RhdGljIGlubGluZSB2b2lkIGNtYV9zeXNmc19hY2NvdW50X2ZhaWxfcGFnZXMoc3RydWN0IGNtYSAqY21hLFxcbiAgOTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcykge307XFxuICA5MzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgY21hX3N5c2ZzX2FjY291bnRfcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgY21hICpjbWEsXFxuICA5NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKSB7fTtcXG4gIDk1OlxcdCNlbmRpZlxcbiAgOTY6XFx0I2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM3OjIwLjM4NjExOTE1NloiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTIwNDQzNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBhIHByb2JsZW0uIEl0IHNlZW1zIGxpa2UgdGhlIGRlZmluaXRpb25zIGZvciBgY21hX2FyZWFzYCBhbmQgYGNtYV9hcmVhX2NvdW50YCBhcmUgbm8gbG9uZ2VyIGluIGBtbS9jbWEuaGAuIFRoYXQncyBhIGh1Z2UgcmVkIGZsYWchIEl0IG1lYW5zIGlmIGBDT05GSUdfQ01BX0RFQlVHRlNgIG9yIGBDT05GSUdfQ01BX1NZU0ZTYCBhcmUgZW5hYmxlZCwgYG1tL2NtYV9kZWJ1Zy5jYCBhbmQgYG1tL2NtYV9zeXNmcy5jYCBhcmUgZ29pbmcgdG8gY29tcGxldGVseSBmYWlsIHRvIGNvbXBpbGUuIFRoaXMgcGF0Y2ggbG9va3MgYnJva2VuLlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIHRha2UgYSBkZWVwIGJyZWF0aCBhbmQgdGhpbmsgdGhpcyB0aHJvdWdoLiBUaGlzIGlzIGZyb20gc3l6a2FsbGVyLCByaWdodD8gU3l6a2FsbGVyIHRlc3RzIGFwcGxpZWQgcGF0Y2hlcywgZG9lc24ndCBpdD8gSWYgdGhlIHRlc3RzIHBhc3NlZCwgdGhlIGNvZGUgbXVzdCBoYXZlIGNvbXBpbGVkLiBTbywgbWF5YmUsIGp1c3QgbWF5YmUsIHRoZSBzeXprYWxsZXIgY29uZmlndXJhdGlvbiBkaXNhYmxlcyBgQ09ORklHX0NNQV9ERUJVR0ZTYCBhbmQgYENPTkZJR19DTUFfU1lTRlNgPyBPciBwZXJoYXBzIHRoaXMgcGF0Y2ggSSByZWNlaXZlZCBpcyBvbmx5IGEgZGlmZiBhbmQgdGhlIGNvbXBsZXRlIHNvdXJjZSBjb2RlIGNvbnRhaW5zIGNoYW5nZXMgdG8gdGhvc2UgZmlsZXMuXG5cbkFoLCBJIGp1c3QgZ290IHRoaXMgbm90ZTogXCJUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluIHlvdXIgd29ya3NwYWNlLlwiIFRoYXQncyBnb29kIHRvIGtub3csIGJ1dCBzdGlsbCwgdGhpcyBkaXNjcmVwYW5jeSBpcyB0cm91YmxpbmcuIExldCdzIG5vdCBhc3N1bWUgYW55dGhpbmcuIFRoZSBiZXN0IHRoaW5nIHRvIGRvIGlzIHF1aWNrbHkgZG91YmxlLWNoZWNrIG15IGxvY2FsIHdvcmtzcGFjZS4gSSBuZWVkIHRvIHZlcmlmeSBpZiBgbW0vY21hX2RlYnVnLmNgIHN0aWxsIGluY2x1ZGVzIHRoYXQgdmFyaWFibGUuIEkgbmVlZCB0byBiZSBzdXJlIGJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ2OTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNzoyNS41MDY1NjY1MjdaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMzgwLCJFcnJvciI6IllvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy4gUGxlYXNlIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUgaW5zdGVhZCBvZiByZXBlYXRpbmcgcXVlcmllcy4iLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbWFfYXJlYXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vY21hX2RlYnVnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuIFBsZWFzZSBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlIGluc3RlYWQgb2YgcmVwZWF0aW5nIHF1ZXJpZXMuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM3OjI1LjUwNjYzMTczNloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDYyNDc3MDI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgcXVpY2tseSBjb25maXJtZWQgdGhlIGdyZXAgcmVzdWx0IHBvaW50cyB0byBhIHByb2JsZW0gaW4gYG1tL2NtYV9kZWJ1Zy5jYCwgc3BlY2lmaWNhbGx5IHJlZmVyZW5jaW5nIGBjbWFfYXJlYXNbaV1gLiBSaWdodCwgc28gdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBvciBtb2RpZnlpbmcga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucywgc28gZnV6emluZyBpcyBjZXJ0YWlubHkgd2FycmFudGVkLiBJICptdXN0KiBhdm9pZCBlbmFibGluZyBgQ09ORklHX0NNQV9ERUJVR0ZTYCBhbmQgYENPTkZJR19DTUFfU1lTRlNgIHdoZW4gdGVzdGluZyB0aGlzLiBMdWNraWx5LCBzeXprYWxsZXIgaGFzIGEgY29uZmlnIGZvciB0aGlzLCBzbyBJIHdpbGwgcmVseSBvbiB0aGF0LCBhbmQgaWYgaXQgZmFpbHMgdG8gYnVpbGQsIHRoYXQgd2lsbCBiZSByZXBvcnRlZC5cblxuTXkgam9iIGhlcmUgaXMgdG8gZ2VuZXJhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGZ1enppbmcgdGhpcyBwYXRjaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCBhbmQgcHJvdmlkZSBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgLiBUaGUgcGF0Y2ggYWRkcyBgQ09ORklHX0RNQUJVRl9IRUFQU19URUdSQV9WUFJgLCBhbmQgb2J2aW91c2x5LCBJIGhhdmUgdG8gaW5jbHVkZSB0aGF0IGluIGBFbmFibGVDb25maWdzYC4gSXQgZGVwZW5kcyBvbiBgRE1BX0NNQWAgYW5kIGBETUFCVUZfSEVBUFNgIGFzIHdlbGwsIHNvIEkgbmVlZCB0byBhZGQgdGhvc2UgdG8gYEVuYWJsZUNvbmZpZ3NgIGFzIHdlbGwuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIGNoYW5nZXMgaW4gYG1tL2NtYS5jYC4gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIHdvcnRoIGZvY3VzaW5nIG9uLiBgY21hX2NyZWF0ZWAgYW5kIGBjbWFfZnJlZWAgc2VlbSB0aWVkIHRvIGB0ZWdyYS12cHJgIGluaXRpYWxpemF0aW9uLCB3aGljaCByZXF1aXJlcyBhIERUIG5vZGUuIFNpbmNlIHdlIHByb2JhYmx5IHdvbid0IGhhdmUgdGhlIGFwcHJvcHJpYXRlIERUIG5vZGUgaW4gYSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXAsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IHVucmVhY2hhYmxlLiBMZXQgbWUgdmVyaWZ5LiBZZXMsIHRoZSBwYXRoIHRvIGBjbWFfY3JlYXRlYCBpcyB0aHJvdWdoIGB0ZWdyYV92cHJfY2h1bmtfaW5pdGAsIGB0ZWdyYV92cHJfc2V0dXBfY2h1bmtzYCwgYHRlZ3JhX3Zwcl9hZGRfaGVhcGAsIGFuZCBmaW5hbGx5IGB0ZWdyYV92cHJfaW5pdGAsIGFsbCBjbGVhcmx5IHRpZWQgdG8gdGhlIFRlZ3JhIFZQUiBoYXJkd2FyZS4gVGhpcyBtYWtlcyB0aGVtICpub3QqIGEgZ29vZCB0YXJnZXQuXG5cbldoYXQgYWJvdXQgYGNtYV9uZXdfYXJlYWAsIGBjbWFfaW5pdF9yZXNlcnZlZF9hcmVhc2AsIGFuZCBgY21hX2Ryb3BfYXJlYWA/IFRoZXNlIGFyZSBjYWxsZWQgZHVyaW5nIGJvb3QsIGJ1dCBzeXprYWxsZXIgdXN1YWxseSBmb2N1c2VzIG9uIHN5c2NhbGxzLCBzbyBlYXJseSBib290IGNvZGUgaXMgbm90IHdoYXQgaXQgdXN1YWxseSBmb2N1c2VzIG9uLlxuXG5JcyB0aGVyZSBhbnkgc3lzY2FsbC1yZWFjaGFibGUgY29kZSBjaGFuZ2VkIGluIGBtbS9jbWEuY2A/IGBjbWFfZm9yX2VhY2hfYXJlYWAgaXMgY2hhbmdlZCB0byBpdGVyYXRlIG92ZXIgYSBsaXN0LiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIGl0IGlzbid0IHVzZWQgYW55d2hlcmUhIFdhaXQsIGl0IElTIGV4cG9ydGVkLiBDb3VsZCBzb21lIG1vZHVsZSB1c2UgaXQ/IE5vcGUsIGEgZ3JlcCByZXR1cm5lZCBubyB1c2Vycy4gT2theSwgaG93IGFib3V0IGBjbWFfZm9yX2VhY2hfZWFybHlfYXJlYWA/IEFoLCBpdCdzIHVzZWQgaW4gYGFyY2gvczM5MC9tbS9pbml0LmNgLiBUaGF0J3Mgbm90IGEgY29tbW9uIGFyY2hpdGVjdHVyZSBmb3Igc3l6a2FsbGVyLlxuXG5TbywgdGhlIGNoYW5nZXMgaW4gYG1tL2NtYS5jYCBhcHBlYXIgdG8gYmUgbW9zdGx5IHVucmVhY2hhYmxlIG9yIGRlYWQgY29kZSwgZXhjZXB0IGZvciBlYXJseSBib290IGluaXRpYWxpemF0aW9uLiBXYWl0LCB3YWl0LCB0aGVyZSdzIGBiaXRtYXBfYWxsb2NhdGVgIGFkZGVkIHRvIGBpbmNsdWRlL2xpbnV4L2JpdG1hcC5oYC4gSXQgaXMgdXNlZCBieSBgYml0bWFwX2FsbG9jYXRlX3JlZ2lvbmAsIGFuZCBgYml0bWFwX2FsbG9jYXRlX3JlZ2lvbmAgaXMgaW4gdHVybiB1c2VkIGJ5IGBjbWFfYWxsb2NgIGluIGBtbS9jbWEuY2AuIE9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IGBjbWFfYWxsb2NgIG1vcmUgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUzMjgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6Mzc6MzYuMTMxNDA0NDc4WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDc5NTUwMTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJpdG1hcF9hbGxvY2F0ZV9yZWdpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vY21hLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM3OjM2LjczOTM2NDkxM1oiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY0NDI0MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIENNQSBBbGxvY2F0aW9uIERldGFpbHMqKlxuXG5Pa2F5LCBzbyBgY21hX2FsbG9jYCBpcyB1c2luZyBgYml0bWFwX2ZpbmRfZnJlZV9yZWdpb25gLi4uIFRoYXQncyBpbnRlcmVzdGluZy4gSSBoYWRuJ3QgaW1tZWRpYXRlbHkgY29ubmVjdGVkIHRob3NlIGRvdHMuIEl0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoYXQgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaXMgYmFzZWQgb24gYSBiaXRtYXAsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgQ01BIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBoZWFkIG92ZXIgdG8gYG1tL2NtYS5jYCBhbmQgc2VhcmNoIHNwZWNpZmljYWxseSBmb3IgdGhlIGBiaXRtYXBfYCBmdW5jdGlvbnMuIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgdGhleSBhcmUgaW50ZWdyYXRlZCBhbmQgaG93IHRoZSBDTUEgYWxsb2NhdG9yIGxldmVyYWdlcyB0aGUgYml0bWFwIHRvIG1hbmFnZSBpdHMgY29udGlndW91cyBtZW1vcnkgcmVnaW9ucy4gVGhpcyBzaG91bGQgc2hlZCBsaWdodCBvbiB0aGUgYWxsb2NhdGlvbiBhbGdvcml0aG0sIGZyYWdtZW50YXRpb24gaGFuZGxpbmcsIGFuZCBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBDTUEgZnJhbWV3b3JrLiBJIHN1c3BlY3QgSSBtaWdodCBmaW5kIHNvbWUgc3VidGxlIGRldGFpbHMgYWJvdXQgaG93IGl0IGhhbmRsZXMgcGh5c2ljYWwgYWRkcmVzcyByYW5nZXMsIG9yIHBlcmhhcHMgc29tZSBjbGV2ZXIgdHJpY2tzIGZvciBjb2FsZXNjaW5nIGZyZWUgYmxvY2tzLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Njg0NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM3OjQwLjQwMzc5Mjg3MloiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MzQ0NTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJpdG1hcF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vY21hLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vY21hLmM9NjA9RVhQT1JUX1NZTUJPTF9HUEwoY21hX2dldF9uYW1lKTtcXG5tbS9jbWEuYy02MS1cXG5tbS9jbWEuYzo2MjpzdGF0aWMgdW5zaWduZWQgbG9uZyBjbWFfYml0bWFwX2FsaWduZWRfbWFzayhjb25zdCBzdHJ1Y3QgY21hICpjbWEsXFxubW0vY21hLmMtNjMtXFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgYWxpZ25fb3JkZXIpXFxuLS1cXG5tbS9jbWEuYy03My0gKi9cXG5tbS9jbWEuYzo3NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBjbWFfYml0bWFwX2FsaWduZWRfb2Zmc2V0KGNvbnN0IHN0cnVjdCBjbWEgKmNtYSxcXG5tbS9jbWEuYy03NS1cXHRcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGNtYV9tZW1yYW5nZSAqY21yLFxcbi0tXFxubW0vY21hLmMtODEtXFxubW0vY21hLmM6ODI6c3RhdGljIHVuc2lnbmVkIGxvbmcgY21hX2JpdG1hcF9wYWdlc190b19iaXRzKGNvbnN0IHN0cnVjdCBjbWEgKmNtYSxcXG5tbS9jbWEuYy04My1cXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIHBhZ2VzKVxcbi0tXFxubW0vY21hLmM9ODg9c3RhdGljIHZvaWQgY21hX2NsZWFyX2JpdG1hcChzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmNtcixcXG4tLVxcbm1tL2NtYS5jLTkwLXtcXG5tbS9jbWEuYzo5MTpcXHR1bnNpZ25lZCBsb25nIGJpdG1hcF9ubywgYml0bWFwX2NvdW50O1xcbm1tL2NtYS5jLTkyLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxubW0vY21hLmMtOTMtXFxubW0vY21hLmM6OTQ6XFx0Yml0bWFwX25vID0gKHBmbiAtIGNtci1cXHUwMDNlYmFzZV9wZm4pIFxcdTAwM2VcXHUwMDNlIGNtYS1cXHUwMDNlb3JkZXJfcGVyX2JpdDtcXG5tbS9jbWEuYzo5NTpcXHRiaXRtYXBfY291bnQgPSBjbWFfYml0bWFwX3BhZ2VzX3RvX2JpdHMoY21hLCBjb3VudCk7XFxubW0vY21hLmMtOTYtXFxubW0vY21hLmMtOTctXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmNtYS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbm1tL2NtYS5jOjk4OlxcdGJpdG1hcF9jbGVhcihjbXItXFx1MDAzZWJpdG1hcCwgYml0bWFwX25vLCBiaXRtYXBfY291bnQpO1xcbm1tL2NtYS5jLTk5LVxcdGNtYS1cXHUwMDNlYXZhaWxhYmxlX2NvdW50ICs9IGNvdW50O1xcbi0tXFxubW0vY21hLmM9MTQ2PXN0YXRpYyB2b2lkIF9faW5pdCBjbWFfYWN0aXZhdGVfYXJlYShzdHJ1Y3QgY21hICpjbWEpXFxuLS1cXG5tbS9jbWEuYy0xNTAtXFx0c3RydWN0IGNtYV9tZW1yYW5nZSAqY21yO1xcbm1tL2NtYS5jOjE1MTpcXHR1bnNpZ25lZCBsb25nIGJpdG1hcF9jb3VudCwgY291bnQ7XFxubW0vY21hLmMtMTUyLVxcbi0tXFxubW0vY21hLmMtMTU1LVxcdFxcdGVhcmx5X3BmblthbGxvY3JhbmdlXSA9IGNtci1cXHUwMDNlZWFybHlfcGZuO1xcbm1tL2NtYS5jOjE1NjpcXHRcXHRjbXItXFx1MDAzZWJpdG1hcCA9IGJpdG1hcF96YWxsb2MoY21hX2JpdG1hcF9tYXhubyhjbWEsIGNtciksXFxubW0vY21hLmMtMTU3LVxcdFxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMKTtcXG4tLVxcbm1tL2NtYS5jLTE2OC1cXHRcXHRcXHRjb3VudCA9IGVhcmx5X3BmbltyXSAtIGNtci1cXHUwMDNlYmFzZV9wZm47XFxubW0vY21hLmM6MTY5OlxcdFxcdFxcdGJpdG1hcF9jb3VudCA9IGNtYV9iaXRtYXBfcGFnZXNfdG9fYml0cyhjbWEsIGNvdW50KTtcXG5tbS9jbWEuYzoxNzA6XFx0XFx0XFx0Yml0bWFwX3NldChjbXItXFx1MDAzZWJpdG1hcCwgMCwgYml0bWFwX2NvdW50KTtcXG5tbS9jbWEuYy0xNzEtXFx0XFx0fVxcbi0tXFxubW0vY21hLmMtMTkxLVxcdGZvciAociA9IDA7IHIgXFx1MDAzYyBhbGxvY3JhbmdlOyByKyspXFxubW0vY21hLmM6MTkyOlxcdFxcdGJpdG1hcF9mcmVlKGNtYS1cXHUwMDNlcmFuZ2VzW3JdLmJpdG1hcCk7XFxubW0vY21hLmMtMTkzLVxcbi0tXFxubW0vY21hLmM9Nzg0PXN0YXRpYyB2b2lkIGNtYV9kZWJ1Z19zaG93X2FyZWFzKHN0cnVjdCBjbWEgKmNtYSlcXG4tLVxcbm1tL2NtYS5jLTc5Ni1cXG5tbS9jbWEuYzo3OTc6XFx0XFx0bmJpdHMgPSBjbWFfYml0bWFwX21heG5vKGNtYSwgY21yKTtcXG5tbS9jbWEuYy03OTgtXFxuLS1cXG5tbS9jbWEuYz04MTE9c3RhdGljIGludCBjbWFfcmFuZ2VfYWxsb2Moc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXIsXFxuLS1cXG5tbS9jbWEuYy04MTQte1xcbm1tL2NtYS5jOjgxNTpcXHR1bnNpZ25lZCBsb25nIGJpdG1hcF9tYXhubywgYml0bWFwX25vLCBiaXRtYXBfY291bnQ7XFxubW0vY21hLmMtODE2LVxcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHBmbiwgbWFzaywgb2Zmc2V0O1xcbi0tXFxubW0vY21hLmMtODE5LVxcbm1tL2NtYS5jOjgyMDpcXHRtYXNrID0gY21hX2JpdG1hcF9hbGlnbmVkX21hc2soY21hLCBhbGlnbik7XFxubW0vY21hLmM6ODIxOlxcdG9mZnNldCA9IGNtYV9iaXRtYXBfYWxpZ25lZF9vZmZzZXQoY21hLCBjbXIsIGFsaWduKTtcXG5tbS9jbWEuYzo4MjI6XFx0Yml0bWFwX21heG5vID0gY21hX2JpdG1hcF9tYXhubyhjbWEsIGNtcik7XFxubW0vY21hLmM6ODIzOlxcdGJpdG1hcF9jb3VudCA9IGNtYV9iaXRtYXBfcGFnZXNfdG9fYml0cyhjbWEsIGNvdW50KTtcXG5tbS9jbWEuYy04MjQtXFxubW0vY21hLmM6ODI1OlxcdGlmIChiaXRtYXBfY291bnQgXFx1MDAzZSBiaXRtYXBfbWF4bm8pXFxubW0vY21hLmMtODI2LVxcdFxcdGdvdG8gb3V0O1xcbm1tL2NtYS5jLTgyNy1cXG5tbS9jbWEuYzo4Mjg6XFx0Zm9yIChzdGFydCA9IDA7IDsgc3RhcnQgPSBiaXRtYXBfbm8gKyBtYXNrICsgMSkge1xcbm1tL2NtYS5jLTgyOS1cXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZjbWEtXFx1MDAzZWxvY2spO1xcbi0tXFxubW0vY21hLmMtODM3LVxcdFxcdH1cXG5tbS9jbWEuYzo4Mzg6XFx0XFx0Yml0bWFwX25vID0gYml0bWFwX2ZpbmRfbmV4dF96ZXJvX2FyZWFfb2ZmKGNtci1cXHUwMDNlYml0bWFwLFxcbm1tL2NtYS5jOjgzOTpcXHRcXHRcXHRcXHRiaXRtYXBfbWF4bm8sIHN0YXJ0LCBiaXRtYXBfY291bnQsIG1hc2ssXFxubW0vY21hLmMtODQwLVxcdFxcdFxcdFxcdG9mZnNldCk7XFxubW0vY21hLmM6ODQxOlxcdFxcdGlmIChiaXRtYXBfbm8gXFx1MDAzZT0gYml0bWFwX21heG5vKSB7XFxubW0vY21hLmMtODQyLVxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y21hLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbm1tL2NtYS5jLTg0NS1cXG5tbS9jbWEuYzo4NDY6XFx0XFx0cGZuID0gY21yLVxcdTAwM2ViYXNlX3BmbiArIChiaXRtYXBfbm8gXFx1MDAzY1xcdTAwM2MgY21hLVxcdTAwM2VvcmRlcl9wZXJfYml0KTtcXG5tbS9jbWEuYy04NDctXFx0XFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuLS1cXG5tbS9jbWEuYy04NjAtXFxubW0vY21hLmM6ODYxOlxcdFxcdGJpdG1hcF9zZXQoY21yLVxcdTAwM2ViaXRtYXAsIGJpdG1hcF9ubywgYml0bWFwX2NvdW50KTtcXG5tbS9jbWEuYy04NjItXFx0XFx0Y21hLVxcdTAwM2VhdmFpbGFibGVfY291bnQgLT0gY291bnQ7XFxuLS1cXG5tbS9jbWEuYz0xMjI4PXZvaWQgY21hX2ZyZWUoc3RydWN0IGNtYSAqY21hKVxcbi0tXFxubW0vY21hLmMtMTIzNi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY21hLVxcdTAwM2VucmFuZ2VzOyBpKyspIHtcXG5tbS9jbWEuYzoxMjM3OlxcdFxcdHVuc2lnbmVkIGxvbmcgbmJpdHMgPSBjbWFfYml0bWFwX21heG5vKGNtYSwgXFx1MDAyNmNtYS1cXHUwMDNlcmFuZ2VzW2ldKTtcXG5tbS9jbWEuYy0xMjM4LVxcbm1tL2NtYS5jOjEyMzk6XFx0XFx0aWYgKCFiaXRtYXBfZW1wdHkoY21hLVxcdTAwM2VyYW5nZXNbaV0uYml0bWFwLCBuYml0cykpIHtcXG5tbS9jbWEuYy0xMjQwLVxcdFxcdFxcdFdBUk4oMSwgXFxcIiVzOiByYW5nZSAldSBub3QgZW1wdHlcXFxcblxcXCIsIGNtYS1cXHUwMDNlbmFtZSwgaSk7XFxuLS1cXG5tbS9jbWEuYy0xMjUzLVxcbm1tL2NtYS5jOjEyNTQ6XFx0XFx0Yml0bWFwX2ZyZWUoY21yLVxcdTAwM2ViaXRtYXApO1xcbm1tL2NtYS5jLTEyNTUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNzo0MC41NDMxNDMzNjRaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxNzYwMjY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEJpdG1hcCBBbGxvY2F0aW9uIGluIENNQSBDb250ZXh0KipcblxuT2theSwgc28gaXQgc2VlbXMgYGJpdG1hcF9hbGxvY2F0ZWAgaXNuJ3QgYWN0dWFsbHkgZW1wbG95ZWQgd2l0aGluIHRoZSBgbW0vY21hLmNgIGZpbGUgaXRzZWxmLiBUaGF0J3MgYSBsaXR0bGUgdW5leHBlY3RlZCwgSSdkIGFzc3VtZWQgaXQgd291bGQgYmUgY2VudHJhbCB0byB0aGUgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yIGltcGxlbWVudGF0aW9uLiBTbywgdGhlIG9idmlvdXMgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgKndoZXJlKiB0aGlzIGZ1bmN0aW9uICppcyogdXNlZC4gTGV0J3MgdHJhY2UgaXQgZG93bi4gTGV0J3Mgc2VlLi4uIGEgcXVpY2sgZ3JlcCB0aHJvdWdoIHRoZSBjb2RlLi4uIGFoLCBoZXJlIHdlIGdvLCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy90ZWdyYS12cHIuY2AgZmlsZS4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYml0bWFwIGFsbG9jYXRpb24gbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg5NDAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNzo0My44NjA3NTA1NDRaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMTExMzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJpdG1hcF9hbGxvY2F0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kbWEtYnVmL2hlYXBzL3RlZ3JhLXZwci5jPTQ1Nz1zdGF0aWMgaW50IHRlZ3JhX3Zwcl9maW5kX2ZyZWVfcmVnaW9uX2NsdXN0ZXJlZChzdHJ1Y3QgdGVncmFfdnByICp2cHIsXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmMtNTA1LVxcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy90ZWdyYS12cHIuYzo1MDY6XFx0XFx0aWYgKCFiaXRtYXBfYWxsb2NhdGUodnByLVxcdTAwM2ViaXRtYXAsIHRhcmdldCwgbnVtX3BhZ2VzKSlcXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmMtNTA3LVxcdFxcdFxcdHJldHVybiB0YXJnZXQ7XFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmMtNTEzLVxcdGlmICh0YXJnZXQgKyBudW1fcGFnZXMgXFx1MDAzYz0gdnByLVxcdTAwM2VudW1fcGFnZXMgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmM6NTE0OlxcdCAgICAhYml0bWFwX2FsbG9jYXRlKHZwci1cXHUwMDNlYml0bWFwLCB0YXJnZXQsIG51bV9wYWdlcykpXFxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL3RlZ3JhLXZwci5jLTUxNS1cXHRcXHRyZXR1cm4gdGFyZ2V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNzo0My45NTE4NjY4ODVaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE5NzE3MjQ4ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBbmFseXNpczogVGVncmEgVlBSIERyaXZlciBhbmQgQ01BIFJlZmFjdG9yaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCBgYml0bWFwX2FsbG9jYXRlYCBpcyBpbmRlZWQgdXNlZCBpbiBgdGVncmEtdnByLmNgLiBUaGUgY29yZSBjaGFuZ2VzIGFyZSBpbiB0aHJlZSBhcmVhczogdGhlIGB0ZWdyYS12cHIuY2AgZHJpdmVyLCBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvcikgbWFuYWdlbWVudCAoYG1tL2NtYS5jYCksIGFuZCBzb21lIHBhZ2UgYXR0cmlidXRlIGFkanVzdG1lbnRzIChgYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jYCkuXG5cblRoZSBgdGVncmEtdnByLmNgIGRyaXZlciBpdHNlbGYgaXMgY29uZGl0aW9uYWwsIG9ubHkgaW5pdGlhbGl6aW5nIGlmIGl0cyBEZXZpY2UgVHJlZSBub2RlIGlzIHByZXNlbnQuIFNpbmNlIHN5emthbGxlciBkb2Vzbid0IGluamVjdCBEVCBub2RlcywgdGhhdCBjb2RlIHBhdGggaXMgZXNzZW50aWFsbHkgdW5yZWFjaGFibGUgaW4gYSBzeXprYWxsZXIgY29udGV4dC4gSG93ZXZlciwgdGhlIENNQSBjaGFuZ2VzIGluIGBtbS9jbWEuY2Ag4oCTIHNwZWNpZmljYWxseSwgcmVmYWN0b3JpbmcgYGNtYV9hcmVhc2AgdG8gYSBsaXN0IGFuZCBlYXJseSBib290IGluaXRpYWxpemF0aW9uIOKAkyAqYXJlKiByZWFjaGVkIGR1cmluZyBib290LiBCdXQgSSBuZWVkIHRvIGRldGVybWluZSBpZiBhbnkgb2YgdGhlc2UgY2hhbmdlcyBhcmUgcmVsZXZhbnQgdG8gZnV6emluZy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBjbWFfY3JlYXRlYCBhbmQgYGNtYV9mcmVlYCB3ZXJlIHRoZSBrZXkgYXJlYXMsIGJ1dCB0aG9zZSBhcmUgKm9ubHkqIGNhbGxlZCBieSBgdGVncmEtdnByLmNgLCBzbyBhZ2FpbiwgdW5pbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlIHJlZmFjdG9yaW5nIG9mIGBjbWFfYXJlYXNgIGFuZCB0aGUgZWFybHkgYm9vdCBpbml0LCB3aGlsZSBleGVjdXRlZCwgYXJlbid0IGZ1enplZCBkaXJlY3RseSBieSBzeXprYWxsZXIgd2hpY2ggcHJpbWFyaWx5IHRhcmdldHMgc3lzY2FsbHMuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGFueSAqc3lzY2FsbCotcmVhY2hhYmxlIGNvZGUgaGFzIGNoYW5nZWQuIGBjbWFfYWxsb2NgIGFuZCBgY21hX3JlbGVhc2VgIHNlZW0gdW50b3VjaGVkLCBzbyB0aGF0J3MgYSBkZWFkIGVuZC4gT2theSwgYGNtYV9mb3JfZWFjaF9hcmVhYCBpcyBtb2RpZmllZCwgYnV0IHRoYXQncyBub3QgdXNlZCBpbiBhbnkgc3lzY2FsbCBwYXRoIGVpdGhlciwgZXhjZXB0IGZvciBhIGNvdXBsZSBvZiBuaWNoZSBjYXNlcyBpbiBgYXJjaC9zMzkwL21tL2luaXQuY2AgYW5kIGBtbS9jbWFfZGVidWcuY2AsIHdoaWNoIGFyZSBub3QgcmVsZXZhbnQuIFRoaXMgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBmcm9tIGEgc3lzY2FsbC1yZWFjaGFibGUgcGF0aC5cblxuU28sIGlzIHRoaXMgcGF0Y2ggd29ydGggZnV6emluZz8gVGhlIG5ldyBgdGVncmEtdnByLmNgIGRyaXZlciBpdHNlbGYgaXMgb2ZmLWxpbWl0czsgd2l0aG91dCBhIERUIG5vZGUsIHN5emthbGxlciBpcyBnb2luZyBub3doZXJlIHdpdGggdGhhdC4gVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBjYW4gc3l6a2FsbGVyIGJlIGNvbmZpZ3VyZWQgdG8gdXNlIERUIG92ZXJsYXlzPyBJdCdzIG5vdCBkZWZhdWx0IGJlaGF2aW9yLiBCdXQgZXZlbiBpZiBpdCBjb3VsZCwgZ2l2ZW4gdGhhdCBzeXprYWxsZXIgdXN1YWxseSBydW5zIG9uIGdlbmVyaWMgUUVNVSAoYHZpcnRgIG1hY2hpbmUpLCBhbmQgYHRlZ3JhLXZwcmAgcmVxdWlyZXMgYSBzcGVjaWZpYyBEVCBub2RlLCBpdCdzIHZpcnR1YWxseSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHRoaXMgc2V0dXAuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGNvbnNpZGVyIFFFTVUgYXMgYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aGVyZSB0aGlzIGlzIGltcG9zc2libGUsIHNvIGl0IGlzIGltcG9zc2libGUgdG8gcmVhY2guXG5cbkhvd2V2ZXIsIHRoZXJlJ3MgYWxzbyB0aGUgQ01BIHJlZmFjdG9yaW5nLiBBcmUgdGhlIGNoYW5nZXMgaW4gYG1tL2NtYS5jYCByZWFjaGFibGU/IFllcywgYGNtYV9uZXdfYXJlYWAgYW5kIGBjbWFfaW5pdF9yZXNlcnZlZF9hcmVhc2AgYXJlIGV4ZWN1dGVkIGR1cmluZyBib290LCBidXQgbm90IHRocm91Z2ggc3lzY2FsbHMsIHdoaWNoIG1lYW5zIG5vIGZ1enppbmcuIEJ1dCB3aGF0IGFib3V0IGBjbWFfZm9yX2VhY2hfYXJlYWAsIHdoaWNoIGlzIGV4cG9ydGVkPyBJIGhhdmUgdG8gbG9vayBmb3IgY2FsbGVycywgc28gSSdsbCBncmVwIHRoZSBjb2RlLiBObyBsdWNrLCB0aGUgY29kZSBpcyBkZWFkIGFuZCB1bnJlYWNoYWJsZS4gT2theSwgSSB3YXMgd3JvbmcsIGBjbWFfY3JlYXRlYCBhbmQgYGNtYV9mcmVlYCBhcmUgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0IHNob3VsZCBiZSB1c2VkIGluIHNvbWUgY29kZS4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIGBtbS9jbWEuY2AgdG8gc2VlIGhvdyBpdCB3b3Jrcy4gSSBuZWVkIG1vcmUgaW5mb3JtYXRpb24gdG8gZXZhbHVhdGUgdGhlc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NDU0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM3OjU1LjkyMzU5NDAzMVoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5NDI0MjkyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipjbWFfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2NtYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozNzo1Ni40MDMwMzAzMTNaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1Mjc1NzUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQSBRdWljayBQYW5pYywgRm9sbG93ZWQgYnkgYSBOZWVkIGZvciBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgKmNlcnRhaW4qIHRoYXQgYGNtYV9jcmVhdGVgIHdhcyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBBUEkuIFdoeSBpc24ndCBpdCBleHBvcnRpbmc/IFRoYXQncyBkZWZpbml0ZWx5IG5vdCB3aGF0IEkgZXhwZWN0ZWQuIFRoaXMgaXMgYSBiaXQgdW5zZXR0bGluZzsgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIGltbWVkaWF0ZWx5LlxuXG5SaWdodCwgdGltZSB0byBkaXZlIGluLiBMZXQncyB0cmFjZSBiYWNrIHRoZSBkZWZpbml0aW9uIG9mIGBjbWFfY3JlYXRlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGl0J3Mgbm90IGJlaW5nIGV4cG9zZWQgd2hlcmUgSSB0aG91Z2h0IGl0IHdvdWxkIGJlLiBJcyBpdCBhIG5hbWluZyBpc3N1ZT8gQSBzY29wZSBwcm9ibGVtPyBPciBoYXMgc29tZXRoaW5nIGNoYW5nZWQgaW4gdGhlIGxpYnJhcnkgSSdtIHdvcmtpbmcgd2l0aD8gVGhpcyByZXF1aXJlcyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byB1bmRlcnN0YW5kIHdoYXQgaXMgaGFwcGVuaW5nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMTM3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6Mzc6NTkuODU1NzkwMjM1WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE0MDgxNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY21hX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9jbWEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jbWEuYz0xMTU3PXZvaWQgX19pbml0ICpjbWFfcmVzZXJ2ZV9lYXJseShzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4tLVxcbm1tL2NtYS5jLTExOTYtXFxubW0vY21hLmM6MTE5NzpzdHJ1Y3QgY21hICpfX2luaXQgY21hX2NyZWF0ZShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxcbm1tL2NtYS5jLTExOTgtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG9yZGVyX3Blcl9iaXQsIGNvbnN0IGNoYXIgKm5hbWUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM4OjAwLjAxNzIwNDQ3MloiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQzNjQ0OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ01BIE1lbW9yeSBBbGxvY2F0aW9uIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIGp1c3QgbG9va2luZyB0aHJvdWdoIHRoaXMgY29kZSBhbmQgc29tZXRoaW5nJ3MgcGluZ2luZyBteSByYWRhci4gSSBzZWUgdGhhdCBgY21hX2NyZWF0ZWAgaXMgZmxhZ2dlZCBhcyBgX19pbml0YCwgd2hpY2ggaXMgdXN1YWxseSBhIHByZXR0eSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgaXQncyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgb25seSBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4gQnV0IGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLi4uIEknbSB0cmFjaW5nIHRoZSBjYWxscywgYW5kIGl0IGxvb2tzIGxpa2UgYHRlZ3JhLXZwci5jYCBpbnZva2VzIGBjbWFfY3JlYXRlYCBmcm9tIGB0ZWdyYV92cHJfc2V0dXBfY2h1bmtzYC4gVGhhdCBmdW5jdGlvbiBpcywgaW4gdHVybiwgY2FsbGVkIGJ5IGB0ZWdyYV92cHJfYWRkX2hlYXBgLCB3aGljaCBpcyAqYWxzbyogY2FsbGVkIGJ5IGB0ZWdyYV92cHJfaW5pdGAuIEFuZCAqdGhhdCogb25lIGlzIGRlZmluaXRlbHkgbWFya2VkIGBfX2luaXRgLiBTbywgdGhlIGVudGlyZSBjaGFpbiBpcyB0aWVkIHRvIHRoZSBlYXJseSBpbml0aWFsaXphdGlvbiBzdGFnZXMsIGNvbmZpcm1pbmcgbXkgaW5pdGlhbCBodW5jaCBhYm91dCBgY21hX2NyZWF0ZWAgYmVpbmcgYSBib290LXRpbWUgZnVuY3Rpb24uXG5cbkJ1dCB3YWl0IGEgbWludXRlLi4uIEkgYWxzbyBzZWUgYHRlZ3JhLXZwci5jYCBjYWxsaW5nIGBjbWFfZnJlZWAgYXMgd2VsbC4gVGhhdCBpcyBhIGZ1bmN0aW9uIHRoYXQgdXN1YWxseSBpcyBjYWxsZWQgZHVyaW5nIHRoZSBzaHV0ZG93biBvZiBhIHN5c3RlbSwgbm90IGp1c3QgZHVyaW5nIHRoZSBib290IHByb2Nlc3MuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGF0IGFuZCBzZWUgd2hhdCB0aGF0J3MgYWxsIGFib3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTQ4NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozODowMy45NjA4NTI4MzNaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTExOTIyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbWFfZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kbWEtYnVmL2hlYXBzL3RlZ3JhLXZwci5jPTIyOT1zdGF0aWMgdm9pZCB0ZWdyYV92cHJfY2h1bmtfZnJlZShzdHJ1Y3QgdGVncmFfdnByX2NodW5rICpjaHVuaylcXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmMtMjMwLXtcXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmM6MjMxOlxcdGNtYV9mcmVlKGNodW5rLVxcdTAwM2VjbWEpO1xcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy90ZWdyYS12cHIuYy0yMzItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozODowNC4wODE5NzcwMThaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4NTk1MDQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgaW4gdGhlIE5WSURJQSBUZWdyYSBWUFIgRHJpdmVyKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBUZWdyYSBWUFIgZHJpdmVyIGhhbmRsZXMgbWVtb3J5LiBUaGUgZnVuY3Rpb24gYHRlZ3JhX3Zwcl9jaHVua19mcmVlYCBpcyBkZWZpbml0ZWx5IGNlbnRyYWwgaGVyZS4gSXQncyBjYWxsZWQgaW4gdHdvIHBsYWNlczogb25jZSBkdXJpbmcgdGhlIGluaXRpYWwgc2V0dXAgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdGVncmFfdnByX3NldHVwX2NodW5rc2AgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuIFRoZW4sIGl0J3MgY2FsbGVkIGZyb20gYHRlZ3JhX3Zwcl9mcmVlX2NodW5rc2AsIGFuZCB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGB0ZWdyYV92cHJfYWRkX2hlYXBgIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoLiBUaGUgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlc2UgYXJlIGFsbCBoYXBwZW5pbmcgZHVyaW5nIHRoZSBtb2R1bGUncyBpbml0aWFsaXphdGlvbiBwaGFzZSwgZXZlcnl0aGluZyBiZWluZyBsaW5rZWQgd2l0aCB0aGUgYF9faW5pdGAgbWFjcm8uXG5cbkJ1dCBoZXJl4oCZcyB0aGUga2lja2VyIC0gaGFuZyBvbiwgd2h5IGlzbuKAmXQgYGNtYV9mcmVlYCBtYXJrZWQgd2l0aCBgX19pbml0YD8gVGhhdCBzZWVtcyBzdHJhbmdlLiBJdCBpbXBsaWVzIHRoYXQgYGNtYV9mcmVlYCBtaWdodCBiZSBjYWxsZWQgbGF0ZXIsIG5vdCBqdXN0IGR1cmluZyB0aGUgbW9kdWxlJ3MgaW5pdGlhbGl6YXRpb24sIHdoaWNoIG1lYW5zIGl0IHNob3VsZCBiZSBzY3J1dGluaXplZCBjYXJlZnVsbHkgZm9yIHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgY29ycnVwdGlvbiBpc3N1ZXMgdGhhdCBtYXkgYXJpc2UgZnJvbSBub24tYF9faW5pdGAgY2FsbHMuIFRoaXMgcmVxdWlyZXMgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBjb250cm9sIGZsb3cgYW5kIHVzZSBjYXNlcyBvZiBgY21hX2ZyZWVgLCBvciByYXRoZXIgaG93IG1lbW9yeSB0aGF0J3MgYmVlbiBmcmVlZCB1c2luZyBgY21hX2ZyZWVgIGlzIGJlaW5nIG1hbmFnZWQgaW4gcmVsYXRpb24gdG8gdGhlc2UgY2FsbHMgdGhhdCB1c2UgYF9faW5pdGAuIFRoaXMgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjAzMCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM4OjA5LjI2NzkzMTE1NVoiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNDY3MDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNtYV9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2NtYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NtYS5jPTExOTc9c3RydWN0IGNtYSAqX19pbml0IGNtYV9jcmVhdGUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4tLVxcbm1tL2NtYS5jLTEyMjctXFxubW0vY21hLmM6MTIyODp2b2lkIGNtYV9mcmVlKHN0cnVjdCBjbWEgKmNtYSlcXG5tbS9jbWEuYy0xMjI5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6Mzg6MDkuMzg5NDAzODFaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUzMjA3ODQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBDTUEgYW5kIERNQS1CVUYgSGVhcCBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYGNtYV9jcmVhdGVgIGFuZCBgY21hX2ZyZWVgIGFyZSBwcmltYXJpbHkgdXNlZCBkdXJpbmcgdGhlIGJvb3QgcHJvY2VzcyBvciBtb2R1bGUgaW5pdGlhbGl6YXRpb24uIFRoZSBgdGVncmEtdnByLmNgIGRyaXZlciBpcyBidWlsdC1pbi4gSSBzZWUgdGhhdCBgRE1BQlVGX0hFQVBTX1RFR1JBX1ZQUmAgaXMgYSBib29sZWFuLCBzbyBpdCdzIHN0YXRpY2FsbHkgbGlua2VkLiBUaGF0IG1lYW5zIGFsbCB0aGUgQ01BIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBjb2RlIHdpdGhpbiBgdGVncmEtdnByLmNgIGhhcHBlbnMgZWFybHkgZHVyaW5nIGJvb3QuXG5cbk5vdywgdGhlIERNQS1CVUYgaGVhcCBvcGVyYXRpb25zIGFyZSB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiBgdGVncmFfdnByX2FsbG9jYXRlYCwgYHRlZ3JhX3Zwcl9idWZmZXJfYWxsb2NhdGVgLCBgdGVncmFfdnByX2J1ZmZlcl9yZWxlYXNlYCwgYHRlZ3JhX3Zwcl9hdHRhY2hgLCBgdGVncmFfdnByX21hcF9kbWFfYnVmYCwgYWxsIG9mIHRoZXNlIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggRE1BLUJVRiBoZWFwIGlvY3Rscy4gQnV0LCBhbmQgdGhpcyBpcyBjcnVjaWFsLCB0aGUgaGVhcCBpdHNlbGYgb25seSBnZXRzIHJlZ2lzdGVyZWQgaWYgaXRzIGNvcnJlc3BvbmRpbmcgRGV2aWNlIFRyZWUgKERUKSBub2RlIGV4aXN0cy4gU2luY2UgUUVNVSdzIGB2aXJ0YCBtYWNoaW5lIHNldHVwICpkb2Vzbid0KiBoYXZlIHRoYXQgRFQgbm9kZSwgdGhlIGhlYXAgd2lsbCAqbm90KiBiZSByZWdpc3RlcmVkLiBUaGVyZWZvcmUsIGFsbCB0aGF0IERNQS1CVUYgaGVhcCBjb2RlIGluIGB0ZWdyYS12cHIuY2AgaXMgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgUUVNVSBlbnZpcm9ubWVudHMuIEl0J3MgYSBkZWFkIGVuZCwgcHJhY3RpY2FsbHkgc3BlYWtpbmcuXG5cbkxvb2tpbmcgYXQgdGhlIENNQSBjaGFuZ2VzIGluIGBtbS9jbWEuY2AsIHRoZXNlIGFyZSBleGVjdXRlZCBkdXJpbmcgYm9vdCwgYnV0IHRoZXkgZG9uJ3Qgc2VlbSB0byBpbnRyb2R1Y2UgYW55IG5ldyBzeXN0ZW0gY2FsbCBmdW5jdGlvbmFsaXR5LiBVbmxlc3MgYGNtYV9mb3JfZWFjaF9hcmVhYCB3YXMgZXhwb3NlZCB0aHJvdWdoIGEgc3lzY2FsbCwgd2hpY2ggaXQgaXNuJ3QuXG5cbkZpbmFsbHksIGluIGBhcmNoL2FybTY0L21tL3BhZ2VhdHRyLmNgLCB0aGVyZSBhcmUgdGhlIG5ldyBgc2V0X21lbW9yeV9kZXZpY2VgIGFuZCBgc2V0X21lbW9yeV9ub3JtYWxgIGZ1bmN0aW9ucy4gVGhpcyBtaWdodCBuZWVkIG1vcmUgaW52ZXN0aWdhdGlvbiBkZXBlbmRpbmcgb24gdGhlIG92ZXJhbGwgZ29hbHMsIGJ1dCBpdCBkb2VzIHNlZW0gcmVsYXRlZCB0byB0aGUgbWVtb3J5IGF0dHJpYnV0ZXMgYmVpbmcgc2V0IGF0IHJ1bnRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNTU1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM4OjE1LjkyMTQ4Njk3MVoiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNDYwNjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9tZW1vcnlfZGV2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L21tL3BhZ2VhdHRyLmM9MjQyPWludCBzZXRfbWVtb3J5X3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jLTI1My1cXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmM6MjU0OmludCBzZXRfbWVtb3J5X2RldmljZSh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMtMjU1LXtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYy0yNTktfVxcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYzoyNjA6RVhQT1JUX1NZTUJPTF9HUEwoc2V0X21lbW9yeV9kZXZpY2UpO1xcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYy0yNjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM4OjE2LjAzMjk1ODQzOFoiLCJTZXEiOjY3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTkzNDczMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ29uc2lkZXJpbmcgQ29udGV4dCBhbmQgUG90ZW50aWFsIEFwcGxpY2F0aW9uKipcblxuSSdtIHBvbmRlcmluZyB0aGUgbmF0dXJlIG9mIHRoZXNlIFwidGhvdWdodHNcIiDigJMgYXJlIHRoZXkgdHJ1bHkgdW5pcXVlIGluIHRoaXMgY29udGV4dCwgb3IgYXJlIHRoZXkgdXRpbGl6ZWQsIGluIHNvbWUgd2F5LCBpbiBvdGhlciBmaWVsZHMgb3IgZGlzY2lwbGluZXM/IEknbSBhc2tpbmcgdGhpcyBhcyBhIHNlYXNvbmVkIHByb2Zlc3Npb25hbCB3aG8gY2FuIHJhcGlkbHkgaWRlbnRpZnkgcGF0dGVybnMgYW5kIGV4dHJhcG9sYXRlIGZyb20gZXhpc3Rpbmcga25vd2xlZGdlLiBQZXJoYXBzIGEgc2ltaWxhciBjb25jZXB0LCBvciBhIHZhcmlhdGlvbiBvZiBpdCwgaXMgZW1wbG95ZWQgaW4gb3RoZXIgcHJvY2Vzc2VzLCBtb2RlbHMsIG9yIHRoZW9yZXRpY2FsIGZyYW1ld29ya3MuIEl0J3MgYSBrZXkgcXVlc3Rpb24gd2hlbiBldmFsdWF0aW5nIG5vdmVsdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXNlIHRob3VnaHRzIGFyZSB0cnVseSBvcmlnaW5hbCwgb3IgaWYgdGhlaXIgdXRpbGl0eSBsaWVzIGluIGFuIGFkYXB0YXRpb24gb3Igc3ludGhlc2lzIG9mIGV4aXN0aW5nIGNvbmNlcHRzLiBUaGUgYW5zd2VyIHByb2ZvdW5kbHkgaW1wYWN0cyB0aGVpciBzaWduaWZpY2FuY2UgYW5kIGFwcGxpY2FiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTk1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMzozODoxOS4wMjY0MzM5OTVaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDY5ODc5MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0X21lbW9yeV9kZXZpY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg9MTI9aW50IHNldF9tZW1vcnlfdmFsaWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjEzOmludCBzZXRfbWVtb3J5X2RldmljZSh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtMTQtaW50IHNldF9tZW1vcnlfbm9ybWFsKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYz0yNDI9aW50IHNldF9tZW1vcnlfdmFsaWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpXFxuLS1cXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMtMjUzLVxcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYzoyNTQ6aW50IHNldF9tZW1vcnlfZGV2aWNlKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYy0yNTUte1xcbi0tXFxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jLTI1OS19XFxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jOjI2MDpFWFBPUlRfU1lNQk9MX0dQTChzZXRfbWVtb3J5X2RldmljZSk7XFxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jLTI2MS1cXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy90ZWdyYS12cHIuYz0yNTE9c3RhdGljIGludCB0ZWdyYV92cHJfY2h1bmtfYWN0aXZhdGUoc3RydWN0IHRlZ3JhX3Zwcl9jaHVuayAqY2h1bmspXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvdGVncmEtdnByLmMtMjY2LVxcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy90ZWdyYS12cHIuYzoyNjc6XFx0ZXJyID0gc2V0X21lbW9yeV9kZXZpY2UoY2h1bmstXFx1MDAzZXZpcnQsIGNodW5rLVxcdTAwM2VudW1fcGFnZXMpO1xcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy90ZWdyYS12cHIuYy0yNjgtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaD02OT1zdGF0aWMgaW5saW5lIGludCBjbGVhcl9tY2Vfbm9zcGVjKHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNzUtI2lmbmRlZiBDT05GSUdfQVJNNjRcXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDo3NjpzdGF0aWMgaW5saW5lIGludCBzZXRfbWVtb3J5X2RldmljZSh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC03Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM4OjIxLjQzMzQyNTk4MVoiLCJTZXEiOjY5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjQwNjkxNzI0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IFVucmVhY2hhYmxlIENvZGUgaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgY29kZSBwYXRocyB0aGF0IGFyZSBpbmhlcmVudGx5IHVucmVhY2hhYmxlIHVuZGVyIHR5cGljYWwgdmlydHVhbGl6ZWQgY29uZGl0aW9ucywgc3BlY2lmaWNhbGx5IFFFTVUuIEl0IGFwcGVhcnMgdG8gZm9jdXMgYXJvdW5kIHRoZSBgdGVncmEtdnByYCBkcml2ZXIsIGFuZCB0aGF0IGlzIGEga2V5IHBvaW50LiBUaGlzIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIGlzIGRlcGVuZGVudCBvbiB0aGUgcHJlc2VuY2Ugb2YgYSBzcGVjaWZpYyBEZXZpY2UgVHJlZSAoRFQpIG5vZGUsIGBcIm52aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvblwiYC4gR2l2ZW4gdGhhdCBTeXprYWxsZXIsIGluIGl0cyBzdGFuZGFyZCBjb25maWd1cmF0aW9uLCBkb2Vzbid0IGluamVjdCBvciBkeW5hbWljYWxseSBsb2FkIHRoZXNlIERUIG5vZGVzLCB0aGF0IGFsb25lIG1ha2VzIHRoZSBkcml2ZXIncyBjb3JlIGZ1bmN0aW9uYWxpdHkgaW5hY2Nlc3NpYmxlLlxuXG5JIGNoZWNrZWQgaWYgU3l6a2FsbGVyIG9mZmVycyBhbnkgbWVjaGFuaXNtcyBmb3IgRFQgaW5qZWN0aW9uLCBqdXN0IHRvIGJlIHN1cmUuIEkga25vdyBpdCBoYXMgYHN5el9pbml0X25ldF9zb2NrZXRgIGFuZCBgc3l6X21vdW50X2ltYWdlYCwgYnV0IHRoZXNlIGFyZSB1bnJlbGF0ZWQuIEkgYWxzbyBrbm93IHRoYXQgU3l6a2FsbGVyIGRvZXNuJ3QgaGFuZGxlIERUIG92ZXJsYXlzIHVubGVzcyB0aGVyZSdzIGEgc3BlY2lmaWMgc2V0dXAgdXNpbmcgYENPTkZJR19PRl9PVkVSTEFZYCBhbmQgYSB1c2VyLXNwYWNlIGludGVyZmFjZSwgd2hpY2ggaXNuJ3Qgc3RhbmRhcmQgYW5kIHdoaWNoIFN5emthbGxlciBkb2Vzbid0IGdlbmVyaWNhbGx5IGRlc2NyaWJlLiBUaGVyZWZvcmUsIG5vIHdheSB0byBpbmplY3QgdGhlIG5lY2Vzc2FyeSBEVCBub2RlLlxuXG5FdmVuIGlmLCBieSBzb21lIGluY3JlZGlibGUgY2hhbmNlLCB0aGF0IERUIG5vZGUgd2VyZSBwcmVzZW50LCB0aGUgZHJpdmVyIHV0aWxpemVzIGBhcm1fc21jY2Nfc21jYCB0byBjb21tdW5pY2F0ZSB3aXRoIGEgc2VjdXJlIG1vbml0b3IuIEluIGEgUUVNVSBlbnZpcm9ubWVudCwgdGhpcyBjYWxsIHdvdWxkIGxpa2VseSB0cmFwIHRvIEVMMyBvciBFTDIsIGRlcGVuZGluZyBvbiB0aGUgUUVNVSBjb25maWd1cmF0aW9uLiBJZiBRRU1VJ3MgRUwzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgaGFuZGxlIHRoaXMgcGFydGljdWxhciBTZWN1cmUgTW9uaXRvciBDYWxsIChTTUMpLCBpdCB3aWxsIHJldHVybiBhbiBlcnJvciBjb2RlLCBsaWtlbHkgYFNNQ0NDX1JFVF9OT1RfU1VQUE9SVEVEYCAoLTEpLiBUaGlzIHdvdWxkIG1ha2UgdGhlIGRyaXZlciBmdW5jdGlvbiBmYWlsIGJlZm9yZSBpdCBldmVuIGdvdCB0byB0aGUgYHRlZ3JhX3Zwcl9yZXNpemVgIGZ1bmN0aW9uIHRoYXQgdGhlIGNvZGUgYXR0ZW1wdHMgdG8gbW9kaWZ5LlxuXG5JIGtub3cgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBjb250YWlucyB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLCBzcGVjaWZpY2FsbHkgaWYgaXTigJlzIGhhcmR3YXJlLXNwZWNpZmljIGFuZCByZXF1aXJlcyBhIERUIG5vZGUgZm9yIGEgZGV2aWNlIChOVklESUEgVGVncmEgVlBSKSB0aGF0IGlzbuKAmXQgYXZhaWxhYmxlIGluIFFFTVUsIGFuZCBhbHNvIHJlbGllcyBvbiBUZWdyYS1zcGVjaWZpYyBTTUNzLiBUaGF0IHNlZW1zIHRvIGFwcGx5IGhlcmUuIFRoZSBwYXRjaCBmYWxscyBzcXVhcmVseSB1bmRlciB0aGF0IGNhdGVnb3J5OiBhIGRyaXZlciBkZXBlbmRlbnQgb24gYSBEVCBub2RlIGZvciBhIGRldmljZSBub3QgaW4gUUVNVSwgYWxvbmcgd2l0aCBpdHMgc3BlY2lmaWMgaGFyZHdhcmUgY2FsbHMuXG5cbkkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBjaGFuZ2VzIHRvIGBtbS9jbWEuY2AsIHdoaWNoIGFyZTpcbjEuICBgY21hX2FyZWFzYCBhcnJheSBjaGFuZ2VkIHRvIGBjbWFfZWFybHlfYXJlYXNgIGFycmF5LlxuMi4gIGBjbWFfYXJlYXNgIGxpc3QgaW50cm9kdWNlZC5cbjMuICBgY21hX25ld19hcmVhYCBhZGRzIHRvIGBjbWFfZWFybHlfYXJlYXNgLlxuNC4gIGBjbWFfaW5pdF9yZXNlcnZlZF9hcmVhc2AgaXRlcmF0ZXMgb3ZlciBgY21hX2Vhcmx5X2FyZWFzYC5cbjUuICBgY21hX2NyZWF0ZWAgYW5kIGBjbWFfZnJlZWAgYWRkZWQgKHVucmVhY2hhYmxlKS5cbjYuICBgY21hX2Zvcl9lYWNoX2FyZWFgIGNoYW5nZWQgdG8gaXRlcmF0ZSBvdmVyIGBjbWFfYXJlYXNgIGxpc3QgKHVucmVhY2hhYmxlLCBubyBjYWxsZXJzKS5cbjcuICBgY21hX2Zvcl9lYWNoX2Vhcmx5X2FyZWFgIGFkZGVkIGFuZCB1c2VkIGluIGBhcmNoL3MzOTAvbW0vaW5pdC5jYC5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBub25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIHJlYWNoYWJsZSBmdW5jdGlvbmFsaXR5IGluIGEgd2F5IHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gVGhlIGVhcmx5IGJvb3QgQ01BIGluaXRpYWxpemF0aW9uIGlzIHJlYWNoYWJsZSwgYnV0IEkga25vdyB0aGF0IGNvZGUgaXMgZXhlY3V0ZWQgb25jZSBkdXJpbmcgYm9vdCBhbmQgd29uJ3QgYmUgZnV6emVkIGJ5IFN5emthbGxlci4gYGNtYV9mb3JfZWFjaF9hcmVhYCwgaW4gdGhlb3J5LCB3b3VsZCBiZSB0aGUgb25seSBwYXJ0IG9mIHRoaXMgdGhhdOKAmXMgc3lzY2FsbC1yZWFjaGFibGUgYnV0LCBJIGtub3cgaXQgaGFzIG5vIGNhbGxlcnMuIFRoZXJlZm9yZSwgdGhlcmUncyBubyBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgbW0vY21hLmNgIHRoYXTigJlzIHJlYWNoYWJsZS5cblxuVGhlcmVmb3JlLCB0aGUgd2hvbGUgcGF0Y2ggaXMgbm90IHdvcnRoIGZ1enppbmcuIEknbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIGB0ZWdyYS12cHJgIGRyaXZlciByZXF1aXJlcyBhIHNwZWNpZmljIERUIG5vZGUgdGhhdCB3b24ndCBleGlzdCBpbiBhIHZpcnR1YWxpemVkIFFFTVUgc2V0dXAgYW5kIHVzZXMgVGVncmEtc3BlY2lmaWMgU01DIGNhbGxzLiBUaGUgY2hhbmdlcyB0byBjb3JlIENNQSBsb2dpYyBhcmUgbm90IHJlYWNoYWJsZS4gVGhlIHBhdGNoIGlzIHVucmVhY2hhYmxlLlxuXG5JIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSBubyBvdGhlciBtZXRob2RzIGNhbiByZWFjaCB0aGUgZnVuY3Rpb24gYGRtYV9oZWFwX2FkZGAgaW5zaWRlIGB0ZWdyYS12cHIuY2AuIEkgd2lsbCByZWFkIHRocm91Z2ggdGhlIGNvZGUgbm93LlxuXG5JIHNlZSB0aGF0IGBkbWFfaGVhcF9hZGRgIHdpbGwgYmUgY2FsbGVkIGZyb20gYHRlZ3JhX3Zwcl9hZGRfaGVhcGAsIHdoaWNoIGlzIGNhbGxlZCBpbnNpZGUgYHRlZ3JhX3Zwcl9pbml0YC4gVGhlIGZ1bmN0aW9uIHJlcXVpcmVzIHRoZSBgL3Jlc2VydmVkLW1lbW9yeWAgbm9kZSB3aXRoIHRoZSBleGFjdCBzdHJpbmcuIFRoaXMgYWxzbyBpcyBub3QgcHJlc2VudCBpbiBRRU1VLlxuXG5JJ2xsIGZpbmFsaXplIHRoaXMgcmVhc29uaW5nIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQzMDYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM4OjM3Ljg0MDM0NDgzOFoiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0MDY5NDU0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbWFfZm9yX2VhY2hfYXJlYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2NtYS5oPTYwPWV4dGVybiBpbnQgY21hX2Zvcl9lYWNoX2Vhcmx5X2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpO1xcbmluY2x1ZGUvbGludXgvY21hLmg6NjE6ZXh0ZXJuIGludCBjbWFfZm9yX2VhY2hfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7XFxuaW5jbHVkZS9saW51eC9jbWEuaC02Mi1leHRlcm4gYm9vbCBjbWFfaW50ZXJzZWN0cyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcXG4tLVxcbm1tL2NtYS5jPTEwODE9aW50IGNtYV9mb3JfZWFjaF9lYXJseV9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKVxcbi0tXFxubW0vY21hLmMtMTA5NC1cXG5tbS9jbWEuYzoxMDk1OmludCBjbWFfZm9yX2VhY2hfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSlcXG5tbS9jbWEuYy0xMDk2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjM6Mzg6NDAuNjgxMDQ1MTE1WiIsIlNlcSI6NzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzA5ODQ0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRmluYWwgRGVjaXNpb246IE5vIEZ1cnRoZXIgRnV6emluZyoqXG5cbkFscmlnaHQsIHRoYXQncyB0aGUgZW5kIG9mIHRoYXQgaW52ZXN0aWdhdGlvbi4gV2UndmUgcmVhY2hlZCBhIHBvaW50IHdoZXJlIGZ1cnRoZXIgZXhwbG9yYXRpb24gd2l0aCBmdXp6aW5nIGlzbid0IGdvaW5nIHRvIGJlIGJlbmVmaWNpYWwsIGF0IGxlYXN0IGJhc2VkIG9uIHdoYXQgd2UndmUgc2VlbiBzbyBmYXIuIFRoZXJlJ3Mgbm8gdmFsdWUgaW4gdGFraW5nIHRoaXMgYW55IGZ1cnRoZXIuIFNvLCBJIHdpbGwgcHJvY2VlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIGVuc3VyZSB0aGF0IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgZmFsc2VgLiBUaGF0IHNob3VsZCBzaWduYWwgdGhhdCB3ZSdyZSBjb25jbHVkaW5nIHRoaXMgaXRlcmF0aW9uLCBhbmQgdGhlIHN5c3RlbSBjYW4gbW92ZSBvbiB0byBvdGhlciB0YXNrcyBvciBldmFsdWF0aW9ucyB3aXRob3V0IHdhc3RpbmcgY3ljbGVzIG9uIGEgZGVhZCBlbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MDk5LCJPdXRwdXRUb2tlbnMiOjE3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIzOjM4OjQ0Ljg1MjAzMTY4WiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBETUEtQlVGIGhlYXAgZm9yIE5WSURJQSBUZWdyYSBWaWRlby1Qcm90ZWN0aW9uLVJlZ2lvbiAoVlBSKS4gVGhlIGRyaXZlciAodGVncmEtdnByLmMpIG9ubHkgaW5pdGlhbGl6ZXMgaWYgYSBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlICgnbnZpZGlhLHRlZ3JhLXZpZGVvLXByb3RlY3Rpb24tcmVnaW9uJykgaXMgcHJlc2VudCwgd2hpY2ggaXMgbm90IHRoZSBjYXNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEZ1cnRoZXJtb3JlLCB0aGUgZHJpdmVyIHJlbGllcyBvbiBUZWdyYS1zcGVjaWZpYyBTTUMgY2FsbHMgdG8gYSBzZWN1cmUgbW9uaXRvci4gVGhlIGNoYW5nZXMgdG8gY29yZSBDTUEgbG9naWMgKG1tL2NtYS5jKSBhcmUgZWl0aGVyIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIGVhcmx5IGJvb3Qgb3IgYXJlIGRlYWQgY29kZSAoZS5nLiwgY21hX2Zvcl9lYWNoX2FyZWEgaGFzIG5vIGNhbGxlcnMpLiBUaGVyZWZvcmUsIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgRE1BLUJVRiBoZWFwIGZvciBOVklESUEgVGVncmEgVmlkZW8tUHJvdGVjdGlvbi1SZWdpb24gKFZQUikuIFRoZSBkcml2ZXIgKHRlZ3JhLXZwci5jKSBvbmx5IGluaXRpYWxpemVzIGlmIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZSAoJ252aWRpYSx0ZWdyYS12aWRlby1wcm90ZWN0aW9uLXJlZ2lvbicpIGlzIHByZXNlbnQsIHdoaWNoIGlzIG5vdCB0aGUgY2FzZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBGdXJ0aGVybW9yZSwgdGhlIGRyaXZlciByZWxpZXMgb24gVGVncmEtc3BlY2lmaWMgU01DIGNhbGxzIHRvIGEgc2VjdXJlIG1vbml0b3IuIFRoZSBjaGFuZ2VzIHRvIGNvcmUgQ01BIGxvZ2ljIChtbS9jbWEuYykgYXJlIGVpdGhlciBleGVjdXRlZCBvbmx5IGR1cmluZyBlYXJseSBib290IG9yIGFyZSBkZWFkIGNvZGUgKGUuZy4sIGNtYV9mb3JfZWFjaF9hcmVhIGhhcyBubyBjYWxsZXJzKS4gVGhlcmVmb3JlLCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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:nil,}