Name: series-workflownz7zh Phase: Failed StartedAt: 2026-07-03 11:33:26 +0000 UTC FinishedAt: 2026-07-03 12:03:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflownz7zh[0] Phase: Succeeded StartedAt: 2026-07-03 11:33:26 +0000 UTC FinishedAt: 2026-07-03 12:02:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflownz7zh[0].run-triage Phase: Succeeded StartedAt: 2026-07-03 11:33:26 +0000 UTC FinishedAt: 2026-07-03 12:02:41 +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+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSBCUEYgcHJvZ3JhbSB1c2VkIGJ5IHRoZSB1c2VyLXNwYWNlIHBlcmYgdG9vbCAodG9vbHMvcGVyZi8pLiBJdCBkb2VzIG5vdCBhbHRlciBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgYW5kIGlzIG5vdCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZGlyZWN0bHkgZnV6emVkIGJ5IHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhOGM0YzMwOGM4M2RhNzEzODYxNGM2NTliOWEzOGFjYWMxZTNkNWJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAxMjowMjowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jXG5pbmRleCAyYTZlNjE4NjRlZTAxNS4uNjBiYWJjMDZmMzgxMmUgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcbkBAIC00MjksMTUgJiM0Mzs0MjksODkgQEAgc3RhdGljIGJvb2wgcGlkX2ZpbHRlcl9faGFzKHN0cnVjdCBwaWRzX2ZpbHRlcmVkICpwaWRzLCBwaWRfdCBwaWQpXG4gXHRyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShwaWRzLCBcdTAwMjZwaWQpICE9IE5VTEw7XG4gfVxuIFxuJiM0Mzt1NjQgWkVSTyA9IDA7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIGFyZ3VtZW50IGFuZCBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdXNlciBzcGFjZSwgdXNpbmcgdGhlXG4mIzQzOyAqIHZhbHVlIGluIHRoZSBiZWF1dHlfbWFwLiBUaGlzIGlzIHRoZSByZWxhdGlvbiBvZiBwYXJhbWV0ZXIgdHlwZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmdcbiYjNDM7ICogdmFsdWUgaW4gdGhlIGJlYXV0eSBtYXAsIGFuZCBob3cgbWFueSBieXRlcyB3ZSByZWFkIGV2ZW50dWFsbHk6XG4mIzQzOyAqXG4mIzQzOyAqIHN0cmluZzogMVx0XHRcdCAgICAgIC1cdTAwM2Ugc2l6ZSBvZiBzdHJpbmdcbiYjNDM7ICogc3RydWN0OiBzaXplIG9mIHN0cnVjdFx0ICAgICAgLVx1MDAzZSBzaXplIG9mIHN0cnVjdFxuJiM0MzsgKiBidWZmZXI6IC0xICogKGluZGV4IG9mIHBhaXJlZCBsZW4pIC1cdTAwM2UgdmFsdWUgb2YgcGFpcmVkIGxlbiAobWF4aW11bTogVFJBQ0VfQVVHX01BWF9CVUYpXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBhdWdtZW50X2FyZyhzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzLCBpbnQgaSxcbiYjNDM7XHRcdFx0ICAgICAgdW5zaWduZWQgaW50ICpiZWF1dHlfbWFwLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgYmVhdXR5X3BheWxvYWRfZW50ZXIgKnBheWxvYWQsIHU2NCBvZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaW5kZXgsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTtcbiYjNDM7XHRzNjQgYXVnX3NpemUsIHNpemU7XG4mIzQzO1x0Ym9vbCBhdWdtZW50ZWQ7XG4mIzQzO1x0dm9pZCAqYXJnLCAqcGF5bG9hZF9vZmZzZXQ7XG4mIzQzO1xuJiM0MztcdGFyZyA9ICh2b2lkICopYXJncy1cdTAwM2VhcmdzW2ldO1xuJiM0MztcdGF1Z21lbnRlZCA9IGZhbHNlO1xuJiM0MztcdHNpemUgPSBiZWF1dHlfbWFwW2ldO1xuJiM0MztcdGF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi9cbiYjNDM7XG4mIzQzO1x0aWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBib3VuZHMgY2hlY2sgZm9yIHRoZSB2ZXJpZmllciAqL1xuJiM0MztcdGlmIChvZmZzZXQgXHUwMDNlIHNpemVvZihwYXlsb2FkLVx1MDAzZWF1Z19hcmdzKSAtIHNpemVvZihwYXlsb2FkLVx1MDAzZWF1Z19hcmdzWzBdKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRiYXJyaWVyX3ZhcihvZmZzZXQpO1xuJiM0MztcdHBheWxvYWRfb2Zmc2V0ID0gKHZvaWQgKilcdTAwMjZwYXlsb2FkLVx1MDAzZWF1Z19hcmdzICYjNDM7IG9mZnNldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi9cbiYjNDM7XHRcdGF1Z19zaXplID0gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cdTAwM2V2YWx1ZSwgdmFsdWVfc2l6ZSwgYXJnKTtcbiYjNDM7XHRcdC8qIG1pbmltdW0gb2YgMCB0byBwYXNzIHRoZSB2ZXJpZmllciAqL1xuJiM0MztcdFx0aWYgKGF1Z19zaXplIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRhdWdfc2l6ZSA9IDA7XG4mIzQzO1xuJiM0MztcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbiYjNDM7XHR9IGVsc2UgaWYgKHNpemUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDNjPSB2YWx1ZV9zaXplKSB7IC8qIHN0cnVjdCAqL1xuJiM0MztcdFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNldmFsdWUsIHNpemUsIGFyZykpXG4mIzQzO1x0XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4mIzQzO1x0fSBlbHNlIGlmIChzaXplIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gLTYpIHsgLyogYnVmZmVyICovXG4mIzQzO1x0XHRpbmRleCA9IC0oc2l6ZSAmIzQzOyAxKTtcbiYjNDM7XHRcdGJhcnJpZXJfdmFyKGluZGV4KTsgLy8gUHJldmVudCBjbGFuZyAobm90aWNlZCB3aXRoIHYxOCkgZnJvbSByZW1vdmluZyB0aGUgXHUwMDI2PSA3IHRyaWNrLlxuJiM0MztcdFx0aW5kZXggXHUwMDI2PSA3O1x0ICAgIC8vIFNhdGlzZnkgdGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIHRoZSB2ZXJpZmllciBpbiBzb21lIGtlcm5lbHMuXG4mIzQzO1x0XHRhdWdfc2l6ZSA9IGFyZ3MtXHUwMDNlYXJnc1tpbmRleF07XG4mIzQzO1x0XHRpZiAoYXVnX3NpemUgXHUwMDNlIFRSQUNFX0FVR19NQVhfQlVGKVxuJiM0MztcdFx0XHRhdWdfc2l6ZSA9IFRSQUNFX0FVR19NQVhfQlVGO1xuJiM0MztcbiYjNDM7XHRcdGlmIChhdWdfc2l6ZSBcdTAwM2UgMCkge1xuJiM0MztcdFx0XHRpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cdTAwM2V2YWx1ZSwgYXVnX3NpemUsIGFyZykpXG4mIzQzO1x0XHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEF1Z21lbnRlZCBkYXRhIHNpemUgaXMgbGltaXRlZCB0byBzaXplb2YoYXVnbWVudGVkX2FyZy1cdTAwM2V1bm5hbWVkIHVuaW9uIHdpdGggdmFsdWUgZmllbGQpICovXG4mIzQzO1x0aWYgKGF1Z19zaXplIFx1MDAzZSB2YWx1ZV9zaXplKVxuJiM0MztcdFx0YXVnX3NpemUgPSB2YWx1ZV9zaXplO1xuJiM0MztcbiYjNDM7XHQvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi9cbiYjNDM7XHRpZiAoYXVnbWVudGVkKSB7XG4mIzQzO1x0XHRpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgJiM0MzsgYXVnX3NpemU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHdyaXR0ZW4gXHUwMDNjIDAgfHwgd3JpdHRlbiBcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRcdCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNlc2l6ZSA9IGF1Z19zaXplO1xuJiM0MztcdFx0cmV0dXJuIHdyaXR0ZW47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGF1Z21lbnRfc3lzX2VudGVyKHZvaWQgKmN0eCwgc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncylcbiB7XG4tXHRib29sIGF1Z21lbnRlZCwgZG9fb3V0cHV0ID0gZmFsc2U7XG4tXHRpbnQgemVybyA9IDAsIGluZGV4LCB2YWx1ZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSAtIG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSk7XG4mIzQzO1x0Ym9vbCBkb19vdXRwdXQgPSBmYWxzZTtcbiYjNDM7XHRpbnQgaSwgemVybyA9IDAsIHdyaXR0ZW47XG4gXHR1NjQgb3V0cHV0ID0gMDsgLyogaGFzIHRvIGJlIHU2NCwgb3RoZXJ3aXNlIGl0IHdvbiYjMzk7dCBwYXNzIHRoZSB2ZXJpZmllciAqL1xuLVx0czY0IGF1Z19zaXplLCBzaXplO1xuIFx0dW5zaWduZWQgaW50IG5yLCAqYmVhdXR5X21hcDtcbiBcdHN0cnVjdCBiZWF1dHlfcGF5bG9hZF9lbnRlciAqcGF5bG9hZDtcbi1cdHZvaWQgKmFyZywgKnBheWxvYWRfb2Zmc2V0O1xuIFxuIFx0LyogZmFsbCBiYWNrIHRvIGRvIHByZWRlZmluZWQgdGFpbCBjYWxsICovXG4gXHRpZiAoYXJncyA9PSBOVUxMKVxuQEAgLTQ0OSw3ICYjNDM7NTIzLDYgQEAgc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpXG4gXG4gXHQvKiBzZXQgdXAgcGF5bG9hZCBmb3Igb3V0cHV0ICovXG4gXHRwYXlsb2FkICAgICAgICA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2YmVhdXR5X3BheWxvYWRfZW50ZXJfbWFwLCBcdTAwMjZ6ZXJvKTtcbi1cdHBheWxvYWRfb2Zmc2V0ID0gKHZvaWQgKilcdTAwMjZwYXlsb2FkLVx1MDAzZWF1Z19hcmdzO1xuIFxuIFx0aWYgKGJlYXV0eV9tYXAgPT0gTlVMTCB8fCBwYXlsb2FkID09IE5VTEwpXG4gXHRcdHJldHVybiAxO1xuQEAgLTQ1Nyw2MSAmIzQzOzUzMCwyOSBAQCBzdGF0aWMgaW50IGF1Z21lbnRfc3lzX2VudGVyKHZvaWQgKmN0eCwgc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncylcbiBcdC8qIGNvcHkgdGhlIHN5c19lbnRlciBoZWFkZXIsIHdoaWNoIGhhcyB0aGUgc3lzY2FsbF9uciAqL1xuIFx0X19idWlsdGluX21lbWNweShcdTAwMjZwYXlsb2FkLVx1MDAzZWFyZ3MsIGFyZ3MsIHNpemVvZihzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzKSk7XG4gXG4tXHQvKlxuLVx0ICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZVxuLVx0ICogdmFsdWUgaW4gdGhlIGJlYXV0eV9tYXAuIFRoaXMgaXMgdGhlIHJlbGF0aW9uIG9mIHBhcmFtZXRlciB0eXBlIGFuZCBpdHMgY29ycmVzcG9uZGluZ1xuLVx0ICogdmFsdWUgaW4gdGhlIGJlYXV0eSBtYXAsIGFuZCBob3cgbWFueSBieXRlcyB3ZSByZWFkIGV2ZW50dWFsbHk6XG4tXHQgKlxuLVx0ICogc3RyaW5nOiAxXHRcdFx0ICAgICAgLVx1MDAzZSBzaXplIG9mIHN0cmluZ1xuLVx0ICogc3RydWN0OiBzaXplIG9mIHN0cnVjdFx0ICAgICAgLVx1MDAzZSBzaXplIG9mIHN0cnVjdFxuLVx0ICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtXHUwMDNlIHZhbHVlIG9mIHBhaXJlZCBsZW4gKG1heGltdW06IFRSQUNFX0FVR19NQVhfQlVGKVxuLVx0ICovXG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgNjsgaSYjNDM7JiM0MzspIHtcbi1cdFx0YXJnID0gKHZvaWQgKilhcmdzLVx1MDAzZWFyZ3NbaV07XG4tXHRcdGF1Z21lbnRlZCA9IGZhbHNlO1xuLVx0XHRzaXplID0gYmVhdXR5X21hcFtpXTtcbi1cdFx0YXVnX3NpemUgPSBzaXplOyAvKiBzaXplIG9mIHRoZSBhdWdtZW50ZWQgZGF0YSByZWFkIGZyb20gdXNlciBzcGFjZSAqL1xuLVxuLVx0XHRpZiAoc2l6ZSA9PSAwIHx8IGFyZyA9PSBOVUxMKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRpZiAoc2l6ZSA9PSAxKSB7IC8qIHN0cmluZyAqL1xuLVx0XHRcdGF1Z19zaXplID0gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cdTAwM2V2YWx1ZSwgdmFsdWVfc2l6ZSwgYXJnKTtcbi1cdFx0XHQvKiBtaW5pbXVtIG9mIDAgdG8gcGFzcyB0aGUgdmVyaWZpZXIgKi9cbi1cdFx0XHRpZiAoYXVnX3NpemUgXHUwMDNjIDApXG4tXHRcdFx0XHRhdWdfc2l6ZSA9IDA7XG4tXG4tXHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIGlmIChzaXplIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzYz0gdmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi9cbi1cdFx0XHRpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cdTAwM2V2YWx1ZSwgc2l6ZSwgYXJnKSlcbi1cdFx0XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4tXHRcdH0gZWxzZSBpZiAoKGludClzaXplIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gLTYpIHsgLyogYnVmZmVyICovXG4tXHRcdFx0aW5kZXggPSAtKHNpemUgJiM0MzsgMSk7XG4tXHRcdFx0YmFycmllcl92YXIoaW5kZXgpOyAvLyBQcmV2ZW50IGNsYW5nIChub3RpY2VkIHdpdGggdjE4KSBmcm9tIHJlbW92aW5nIHRoZSBcdTAwMjY9IDcgdHJpY2suXG4tXHRcdFx0aW5kZXggXHUwMDI2PSA3O1x0ICAgIC8vIFNhdGlzZnkgdGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIHRoZSB2ZXJpZmllciBpbiBzb21lIGtlcm5lbHMuXG4tXHRcdFx0YXVnX3NpemUgPSBhcmdzLVx1MDAzZWFyZ3NbaW5kZXhdIFx1MDAzZSBUUkFDRV9BVUdfTUFYX0JVRiA/IFRSQUNFX0FVR19NQVhfQlVGIDogYXJncy1cdTAwM2VhcmdzW2luZGV4XTtcbi1cbi1cdFx0XHRpZiAoYXVnX3NpemUgXHUwMDNlIDApIHtcbi1cdFx0XHRcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXZhbHVlLCBhdWdfc2l6ZSwgYXJnKSlcbi1cdFx0XHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbiYjNDM7XHRpZiAoYnBmX2tzeW1fZXhpc3RzKGJwZl9pdGVyX251bV9uZXcpKSB7XG4mIzQzO1x0XHRicGZfZm9yKGksIDAsIDYpIHtcbiYjNDM7XHRcdFx0d3JpdHRlbiA9IGF1Z21lbnRfYXJnKGFyZ3MsIGksIGJlYXV0eV9tYXAsIHBheWxvYWQsIG91dHB1dCk7XG4mIzQzO1x0XHRcdGlmICh3cml0dGVuIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0XHRpZiAod3JpdHRlbiBcdTAwM2UgMCkge1xuJiM0MztcdFx0XHRcdG91dHB1dCAmIzQzOz0gd3JpdHRlbjtcbiYjNDM7XHRcdFx0XHQvKiBndWlkZSB0aGUgdmVyaWZpZXIgdG8gZm9yZ2V0IHJhbmdlIG9mIGBvdXRwdXRgLCB3aGljaFxuJiM0MztcdFx0XHRcdCAqIGhlbHBzIHRvIHByb3ZlIGNvbnZlcmdlbmNlIG9mIHRoZSBsb29wXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0b3V0cHV0ICYjNDM7PSBaRVJPO1xuJiM0MztcdFx0XHRcdGRvX291dHB1dCA9IHRydWU7XG4gXHRcdFx0fVxuIFx0XHR9XG4tXG4tXHRcdC8qIEF1Z21lbnRlZCBkYXRhIHNpemUgaXMgbGltaXRlZCB0byBzaXplb2YoYXVnbWVudGVkX2FyZy1cdTAwM2V1bm5hbWVkIHVuaW9uIHdpdGggdmFsdWUgZmllbGQpICovXG4tXHRcdGlmIChhdWdfc2l6ZSBcdTAwM2UgdmFsdWVfc2l6ZSlcbi1cdFx0XHRhdWdfc2l6ZSA9IHZhbHVlX3NpemU7XG4tXG4tXHRcdC8qIHdyaXRlIGRhdGEgdG8gcGF5bG9hZCAqL1xuLVx0XHRpZiAoYXVnbWVudGVkKSB7XG4tXHRcdFx0aW50IHdyaXR0ZW4gPSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpICYjNDM7IGF1Z19zaXplO1xuLVxuLVx0XHRcdGlmICh3cml0dGVuIFx1MDAzYyAwIHx8IHdyaXR0ZW4gXHUwMDNlIHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpXG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDY7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHdyaXR0ZW4gPSBhdWdtZW50X2FyZyhhcmdzLCBpLCBiZWF1dHlfbWFwLCBwYXlsb2FkLCBvdXRwdXQpO1xuJiM0MztcdFx0XHRpZiAod3JpdHRlbiBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiAxO1xuLVxuLVx0XHRcdCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNlc2l6ZSA9IGF1Z19zaXplO1xuLVx0XHRcdG91dHB1dCAmIzQzOz0gd3JpdHRlbjtcbi1cdFx0XHRwYXlsb2FkX29mZnNldCAmIzQzOz0gd3JpdHRlbjtcbi1cdFx0XHRkb19vdXRwdXQgPSB0cnVlO1xuJiM0MztcdFx0XHRpZiAod3JpdHRlbiBcdTAwM2UgMCkge1xuJiM0MztcdFx0XHRcdG91dHB1dCAmIzQzOz0gd3JpdHRlbjtcbiYjNDM7XHRcdFx0XHRkb19vdXRwdXQgPSB0cnVlO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBwZXJmIHRvb2wgKHRvb2xzL3BlcmYvKS4gSXQgZG9lcyBub3QgYWx0ZXIgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIGFuZCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGRpcmVjdGx5IGZ1enplZCBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOGM0YzMwOGM4M2RhNzEzODYxNGM2NTliOWEzOGFjYWMxZTNkNWJmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMyAxMjowMjowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jIGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmMKaW5kZXggMmE2ZTYxODY0ZWUwMTUuLjYwYmFiYzA2ZjM4MTJlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYwpAQCAtNDI5LDE1ICYjNDM7NDI5LDg5IEBAIHN0YXRpYyBib29sIHBpZF9maWx0ZXJfX2hhcyhzdHJ1Y3QgcGlkc19maWx0ZXJlZCAqcGlkcywgcGlkX3QgcGlkKQogCXJldHVybiBicGZfbWFwX2xvb2t1cF9lbGVtKHBpZHMsICZhbXA7cGlkKSAhPSBOVUxMOwogfQogCiYjNDM7dTY0IFpFUk8gPSAwOwomIzQzOwomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZQomIzQzOyAqIHZhbHVlIGluIHRoZSBiZWF1dHlfbWFwLiBUaGlzIGlzIHRoZSByZWxhdGlvbiBvZiBwYXJhbWV0ZXIgdHlwZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcKJiM0MzsgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5IG1hcCwgYW5kIGhvdyBtYW55IGJ5dGVzIHdlIHJlYWQgZXZlbnR1YWxseToKJiM0MzsgKgomIzQzOyAqIHN0cmluZzogMQkJCSAgICAgIC0mZ3Q7IHNpemUgb2Ygc3RyaW5nCiYjNDM7ICogc3RydWN0OiBzaXplIG9mIHN0cnVjdAkgICAgICAtJmd0OyBzaXplIG9mIHN0cnVjdAomIzQzOyAqIGJ1ZmZlcjogLTEgKiAoaW5kZXggb2YgcGFpcmVkIGxlbikgLSZndDsgdmFsdWUgb2YgcGFpcmVkIGxlbiAobWF4aW11bTogVFJBQ0VfQVVHX01BWF9CVUYpCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgYXVnbWVudF9hcmcoc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncywgaW50IGksCiYjNDM7CQkJICAgICAgdW5zaWduZWQgaW50ICpiZWF1dHlfbWFwLAomIzQzOwkJCSAgICAgIHN0cnVjdCBiZWF1dHlfcGF5bG9hZF9lbnRlciAqcGF5bG9hZCwgdTY0IG9mZnNldCkKJiM0Mzt7CiYjNDM7CWludCBpbmRleCwgdmFsdWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykgLSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpOwomIzQzOwlzNjQgYXVnX3NpemUsIHNpemU7CiYjNDM7CWJvb2wgYXVnbWVudGVkOwomIzQzOwl2b2lkICphcmcsICpwYXlsb2FkX29mZnNldDsKJiM0MzsKJiM0MzsJYXJnID0gKHZvaWQgKilhcmdzLSZndDthcmdzW2ldOwomIzQzOwlhdWdtZW50ZWQgPSBmYWxzZTsKJiM0MzsJc2l6ZSA9IGJlYXV0eV9tYXBbaV07CiYjNDM7CWF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi8KJiM0MzsKJiM0MzsJaWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBib3VuZHMgY2hlY2sgZm9yIHRoZSB2ZXJpZmllciAqLwomIzQzOwlpZiAob2Zmc2V0ICZndDsgc2l6ZW9mKHBheWxvYWQtJmd0O2F1Z19hcmdzKSAtIHNpemVvZihwYXlsb2FkLSZndDthdWdfYXJnc1swXSkpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CWJhcnJpZXJfdmFyKG9mZnNldCk7CiYjNDM7CXBheWxvYWRfb2Zmc2V0ID0gKHZvaWQgKikmYW1wO3BheWxvYWQtJmd0O2F1Z19hcmdzICYjNDM7IG9mZnNldDsKJiM0MzsKJiM0MzsJaWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi8KJiM0MzsJCWF1Z19zaXplID0gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS0mZ3Q7dmFsdWUsIHZhbHVlX3NpemUsIGFyZyk7CiYjNDM7CQkvKiBtaW5pbXVtIG9mIDAgdG8gcGFzcyB0aGUgdmVyaWZpZXIgKi8KJiM0MzsJCWlmIChhdWdfc2l6ZSAmbHQ7IDApCiYjNDM7CQkJYXVnX3NpemUgPSAwOwomIzQzOwomIzQzOwkJYXVnbWVudGVkID0gdHJ1ZTsKJiM0MzsJfSBlbHNlIGlmIChzaXplICZndDsgMCAmYW1wOyZhbXA7IHNpemUgJmx0Oz0gdmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi8KJiM0MzsJCWlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLSZndDt2YWx1ZSwgc2l6ZSwgYXJnKSkKJiM0MzsJCQlhdWdtZW50ZWQgPSB0cnVlOwomIzQzOwl9IGVsc2UgaWYgKHNpemUgJmx0OyAwICZhbXA7JmFtcDsgc2l6ZSAmZ3Q7PSAtNikgeyAvKiBidWZmZXIgKi8KJiM0MzsJCWluZGV4ID0gLShzaXplICYjNDM7IDEpOwomIzQzOwkJYmFycmllcl92YXIoaW5kZXgpOyAvLyBQcmV2ZW50IGNsYW5nIChub3RpY2VkIHdpdGggdjE4KSBmcm9tIHJlbW92aW5nIHRoZSAmYW1wOz0gNyB0cmljay4KJiM0MzsJCWluZGV4ICZhbXA7PSA3OwkgICAgLy8gU2F0aXNmeSB0aGUgYm91bmRzIGNoZWNraW5nIHdpdGggdGhlIHZlcmlmaWVyIGluIHNvbWUga2VybmVscy4KJiM0MzsJCWF1Z19zaXplID0gYXJncy0mZ3Q7YXJnc1tpbmRleF07CiYjNDM7CQlpZiAoYXVnX3NpemUgJmd0OyBUUkFDRV9BVUdfTUFYX0JVRikKJiM0MzsJCQlhdWdfc2l6ZSA9IFRSQUNFX0FVR19NQVhfQlVGOwomIzQzOwomIzQzOwkJaWYgKGF1Z19zaXplICZndDsgMCkgewomIzQzOwkJCWlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLSZndDt2YWx1ZSwgYXVnX3NpemUsIGFyZykpCiYjNDM7CQkJCWF1Z21lbnRlZCA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQXVnbWVudGVkIGRhdGEgc2l6ZSBpcyBsaW1pdGVkIHRvIHNpemVvZihhdWdtZW50ZWRfYXJnLSZndDt1bm5hbWVkIHVuaW9uIHdpdGggdmFsdWUgZmllbGQpICovCiYjNDM7CWlmIChhdWdfc2l6ZSAmZ3Q7IHZhbHVlX3NpemUpCiYjNDM7CQlhdWdfc2l6ZSA9IHZhbHVlX3NpemU7CiYjNDM7CiYjNDM7CS8qIHdyaXRlIGRhdGEgdG8gcGF5bG9hZCAqLwomIzQzOwlpZiAoYXVnbWVudGVkKSB7CiYjNDM7CQlpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgJiM0MzsgYXVnX3NpemU7CiYjNDM7CiYjNDM7CQlpZiAod3JpdHRlbiAmbHQ7IDAgfHwgd3JpdHRlbiAmZ3Q7IHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpCiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwkJKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS0mZ3Q7c2l6ZSA9IGF1Z19zaXplOwomIzQzOwkJcmV0dXJuIHdyaXR0ZW47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpCiB7Ci0JYm9vbCBhdWdtZW50ZWQsIGRvX291dHB1dCA9IGZhbHNlOwotCWludCB6ZXJvID0gMCwgaW5kZXgsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTsKJiM0MzsJYm9vbCBkb19vdXRwdXQgPSBmYWxzZTsKJiM0MzsJaW50IGksIHplcm8gPSAwLCB3cml0dGVuOwogCXU2NCBvdXRwdXQgPSAwOyAvKiBoYXMgdG8gYmUgdTY0LCBvdGhlcndpc2UgaXQgd29uJiMzOTt0IHBhc3MgdGhlIHZlcmlmaWVyICovCi0JczY0IGF1Z19zaXplLCBzaXplOwogCXVuc2lnbmVkIGludCBuciwgKmJlYXV0eV9tYXA7CiAJc3RydWN0IGJlYXV0eV9wYXlsb2FkX2VudGVyICpwYXlsb2FkOwotCXZvaWQgKmFyZywgKnBheWxvYWRfb2Zmc2V0OwogCiAJLyogZmFsbCBiYWNrIHRvIGRvIHByZWRlZmluZWQgdGFpbCBjYWxsICovCiAJaWYgKGFyZ3MgPT0gTlVMTCkKQEAgLTQ0OSw3ICYjNDM7NTIzLDYgQEAgc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpCiAKIAkvKiBzZXQgdXAgcGF5bG9hZCBmb3Igb3V0cHV0ICovCiAJcGF5bG9hZCAgICAgICAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7YmVhdXR5X3BheWxvYWRfZW50ZXJfbWFwLCAmYW1wO3plcm8pOwotCXBheWxvYWRfb2Zmc2V0ID0gKHZvaWQgKikmYW1wO3BheWxvYWQtJmd0O2F1Z19hcmdzOwogCiAJaWYgKGJlYXV0eV9tYXAgPT0gTlVMTCB8fCBwYXlsb2FkID09IE5VTEwpCiAJCXJldHVybiAxOwpAQCAtNDU3LDYxICYjNDM7NTMwLDI5IEBAIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKQogCS8qIGNvcHkgdGhlIHN5c19lbnRlciBoZWFkZXIsIHdoaWNoIGhhcyB0aGUgc3lzY2FsbF9uciAqLwogCV9fYnVpbHRpbl9tZW1jcHkoJmFtcDtwYXlsb2FkLSZndDthcmdzLCBhcmdzLCBzaXplb2Yoc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncykpOwogCi0JLyoKLQkgKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIGFyZ3VtZW50IGFuZCBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdXNlciBzcGFjZSwgdXNpbmcgdGhlCi0JICogdmFsdWUgaW4gdGhlIGJlYXV0eV9tYXAuIFRoaXMgaXMgdGhlIHJlbGF0aW9uIG9mIHBhcmFtZXRlciB0eXBlIGFuZCBpdHMgY29ycmVzcG9uZGluZwotCSAqIHZhbHVlIGluIHRoZSBiZWF1dHkgbWFwLCBhbmQgaG93IG1hbnkgYnl0ZXMgd2UgcmVhZCBldmVudHVhbGx5OgotCSAqCi0JICogc3RyaW5nOiAxCQkJICAgICAgLSZndDsgc2l6ZSBvZiBzdHJpbmcKLQkgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0CSAgICAgIC0mZ3Q7IHNpemUgb2Ygc3RydWN0Ci0JICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtJmd0OyB2YWx1ZSBvZiBwYWlyZWQgbGVuIChtYXhpbXVtOiBUUkFDRV9BVUdfTUFYX0JVRikKLQkgKi8KLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IDY7IGkmIzQzOyYjNDM7KSB7Ci0JCWFyZyA9ICh2b2lkICopYXJncy0mZ3Q7YXJnc1tpXTsKLQkJYXVnbWVudGVkID0gZmFsc2U7Ci0JCXNpemUgPSBiZWF1dHlfbWFwW2ldOwotCQlhdWdfc2l6ZSA9IHNpemU7IC8qIHNpemUgb2YgdGhlIGF1Z21lbnRlZCBkYXRhIHJlYWQgZnJvbSB1c2VyIHNwYWNlICovCi0KLQkJaWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChzaXplID09IDEpIHsgLyogc3RyaW5nICovCi0JCQlhdWdfc2l6ZSA9IGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktJmd0O3ZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpOwotCQkJLyogbWluaW11bSBvZiAwIHRvIHBhc3MgdGhlIHZlcmlmaWVyICovCi0JCQlpZiAoYXVnX3NpemUgJmx0OyAwKQotCQkJCWF1Z19zaXplID0gMDsKLQotCQkJYXVnbWVudGVkID0gdHJ1ZTsKLQkJfSBlbHNlIGlmIChzaXplICZndDsgMCAmYW1wOyZhbXA7IHNpemUgJmx0Oz0gdmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi8KLQkJCWlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLSZndDt2YWx1ZSwgc2l6ZSwgYXJnKSkKLQkJCQlhdWdtZW50ZWQgPSB0cnVlOwotCQl9IGVsc2UgaWYgKChpbnQpc2l6ZSAmbHQ7IDAgJmFtcDsmYW1wOyBzaXplICZndDs9IC02KSB7IC8qIGJ1ZmZlciAqLwotCQkJaW5kZXggPSAtKHNpemUgJiM0MzsgMSk7Ci0JCQliYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlICZhbXA7PSA3IHRyaWNrLgotCQkJaW5kZXggJmFtcDs9IDc7CSAgICAvLyBTYXRpc2Z5IHRoZSBib3VuZHMgY2hlY2tpbmcgd2l0aCB0aGUgdmVyaWZpZXIgaW4gc29tZSBrZXJuZWxzLgotCQkJYXVnX3NpemUgPSBhcmdzLSZndDthcmdzW2luZGV4XSAmZ3Q7IFRSQUNFX0FVR19NQVhfQlVGID8gVFJBQ0VfQVVHX01BWF9CVUYgOiBhcmdzLSZndDthcmdzW2luZGV4XTsKLQotCQkJaWYgKGF1Z19zaXplICZndDsgMCkgewotCQkJCWlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLSZndDt2YWx1ZSwgYXVnX3NpemUsIGFyZykpCi0JCQkJCWF1Z21lbnRlZCA9IHRydWU7CiYjNDM7CWlmIChicGZfa3N5bV9leGlzdHMoYnBmX2l0ZXJfbnVtX25ldykpIHsKJiM0MzsJCWJwZl9mb3IoaSwgMCwgNikgewomIzQzOwkJCXdyaXR0ZW4gPSBhdWdtZW50X2FyZyhhcmdzLCBpLCBiZWF1dHlfbWFwLCBwYXlsb2FkLCBvdXRwdXQpOwomIzQzOwkJCWlmICh3cml0dGVuICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIDE7CiYjNDM7CQkJaWYgKHdyaXR0ZW4gJmd0OyAwKSB7CiYjNDM7CQkJCW91dHB1dCAmIzQzOz0gd3JpdHRlbjsKJiM0MzsJCQkJLyogZ3VpZGUgdGhlIHZlcmlmaWVyIHRvIGZvcmdldCByYW5nZSBvZiBgb3V0cHV0YCwgd2hpY2gKJiM0MzsJCQkJICogaGVscHMgdG8gcHJvdmUgY29udmVyZ2VuY2Ugb2YgdGhlIGxvb3AKJiM0MzsJCQkJICovCiYjNDM7CQkJCW91dHB1dCAmIzQzOz0gWkVSTzsKJiM0MzsJCQkJZG9fb3V0cHV0ID0gdHJ1ZTsKIAkJCX0KIAkJfQotCi0JCS8qIEF1Z21lbnRlZCBkYXRhIHNpemUgaXMgbGltaXRlZCB0byBzaXplb2YoYXVnbWVudGVkX2FyZy0mZ3Q7dW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqLwotCQlpZiAoYXVnX3NpemUgJmd0OyB2YWx1ZV9zaXplKQotCQkJYXVnX3NpemUgPSB2YWx1ZV9zaXplOwotCi0JCS8qIHdyaXRlIGRhdGEgdG8gcGF5bG9hZCAqLwotCQlpZiAoYXVnbWVudGVkKSB7Ci0JCQlpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgJiM0MzsgYXVnX3NpemU7Ci0KLQkJCWlmICh3cml0dGVuICZsdDsgMCB8fCB3cml0dGVuICZndDsgc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSkKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyA2OyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXdyaXR0ZW4gPSBhdWdtZW50X2FyZyhhcmdzLCBpLCBiZWF1dHlfbWFwLCBwYXlsb2FkLCBvdXRwdXQpOwomIzQzOwkJCWlmICh3cml0dGVuICZsdDsgMCkKIAkJCQlyZXR1cm4gMTsKLQotCQkJKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS0mZ3Q7c2l6ZSA9IGF1Z19zaXplOwotCQkJb3V0cHV0ICYjNDM7PSB3cml0dGVuOwotCQkJcGF5bG9hZF9vZmZzZXQgJiM0Mzs9IHdyaXR0ZW47Ci0JCQlkb19vdXRwdXQgPSB0cnVlOwomIzQzOwkJCWlmICh3cml0dGVuICZndDsgMCkgewomIzQzOwkJCQlvdXRwdXQgJiM0Mzs9IHdyaXR0ZW47CiYjNDM7CQkJCWRvX291dHB1dCA9IHRydWU7CiYjNDM7CQkJfQogCQl9CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwODcKCQkJCQkJCW91dHB1dDogODEKCQkJCQkJCXRob3VnaHRzOiA2NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBXb3J0aEZ1enppbmc9ZmFsc2UqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBjaGFuZ2VzIHRvIGB0b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY2AuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBhbnkgbW9kaWZpY2F0aW9uIHRvIGEgQlBGIHByb2dyYW0gbWlnaHQgd2FycmFudCBjbG9zZXIgaW5zcGVjdGlvbiwgZ2l2ZW4gaXRzIGluLWtlcm5lbCBleGVjdXRpb24uIEhvd2V2ZXIsIHRoaXMgaXMgbG9jYXRlZCB3aXRoaW4gdGhlIGB0b29scy9wZXJmL2AgZGlyZWN0b3J5LCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gYmUgc3VyZS4KClRoaXMgaXNuJiMzOTt0IGNvcmUga2VybmVsIGNvZGUsIG5vdCBkcml2ZXJzIG9yIGFyY2hpdGVjdHVyZXMuIEl0JiMzOTtzIHVzZXItc3BhY2UhIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYSBCUEYgc2tlbGV0b24gdXNlZCBieSB0aGUgYHBlcmZgIHRvb2wuIFRoZXNlIEJQRiBwcm9ncmFtcyBhcmUgY29tcGlsZWQgYW5kICpsb2FkZWQgYnkqIGBwZXJmYCwgYW5kIGV4ZWN1dGVkICp3aXRoaW4qIHRoZSBrZXJuZWwgd2hlbiBjYWxsZWQgYnkgYHBlcmZgLCBidXQgdGhpcyBpc24mIzM5O3Qga2VybmVsIGNvZGUgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLCBub3Qga2VybmVsIG1vZHVsZXMuCgpTeXprYWxsZXIgaXMgdGhlIGZ1enplciB0aGF0IEkmIzM5O20gZm9jdXNlZCBvbi4gU3l6a2FsbGVyJiMzOTtzIGpvYiBpcyBmdXp6aW5nIHRoZSBrZXJuZWwgdmlhIHN5c2NhbGxzLiBJdCBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgaW50ZXJhY3Qgd2l0aCBvciBkaXJlY3RseSBmdXp6IHRvb2xzIGxpa2UgYHBlcmZgIG9yIGl0cyBCUEYgcHJvZ3JhbXMsIHVubGVzcyBgcGVyZmAgaXMgZXhwbGljaXRseSBiZWluZyBydW4gYXMgcGFydCBvZiB0aGUgdGVzdC4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IHR5cGljYWxseSBsb2FkIHRoZXNlIHNwZWNpZmljIEJQRiBza2VsZXRvbnMuCgpJJiMzOTt2ZSBjaGVja2VkIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZmlsZXMgaW1wYWN0ZWQgYnkgdGhlIHBhdGNoLCBqdXN0IHRvIGJlIHN1cmUuIFRoZSBhbnN3ZXIgaXMgbm87IG9ubHkgdGhpcyBvbmUgZmlsZSBpcyBjaGFuZ2VkLgoKTm93LCBsZXQgbWUgZ28gdGhyb3VnaCB0aGUgcnVsZXMuIFRoZSBydWxlcyBkb24mIzM5O3QgZXhwbGljaXRseSBzYXkgJiMzNDt0b29scy8mIzM0OyBidXQgdGhlIHBhdHRlcm4gb2YgJiMzNDtEb2N1bWVudGF0aW9uLyYjMzQ7LCAmIzM0O0tjb25maWcmIzM0OywgY29tbWVudHMsIGxvZ2dpbmcsIGNvbnN0YW50cywgdW5yZWFjaGFibGUgY29kZSwgZXRjLiBhbGwgcG9pbnQgYXdheSBmcm9tIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkuIENoYW5nZXMgaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeSBhcmUgYWxzbyBnZW5lcmFsbHkgdXNlciBzcGFjZSB0b29scy4KCkJhc2VkIG9uIHRoZSBydWxlcywgYW5kIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSwgdGhpcyBpcyBhIG1vZGlmaWNhdGlvbiB0byBhIHVzZXItc3BhY2UgdG9vbCAocGVyZikgYW5kIGl0cyBhc3NvY2lhdGVkIEJQRiBwcm9ncmFtLiBTeXprYWxsZXIgKmRvZXMgbm90KiBmdXp6IHRoZXNlIHByb2dyYW1zLCBzaW5jZSBpdCBpcyBhIGtlcm5lbCBzeXNjYWxsIGZ1enplci4gSXQmIzM5O3Mgbm90IGNvcmUga2VybmVsLCBhbmQgaXQmIzM5O3Mgbm90IGJlaW5nIGZ1enplZC4gVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBub3Qgd29ydGggZnV6emluZy4gSSYjMzk7bGwgZmxhZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgZXhwbGFpbiB0aGF0IGl0JiMzOTtzIGEgY2hhbmdlIHRvIHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sIGFuZCBhc3NvY2lhdGVkIEJQRiBwcm9ncmFtcy4gSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AgZGlyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBwZXJmIHRvb2wgKHRvb2xzL3BlcmYvKS4gSXQgZG9lcyBub3QgYWx0ZXIgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIGFuZCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGRpcmVjdGx5IGZ1enplZCBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBwZXJmIHRvb2wgKHRvb2xzL3BlcmYvKS4gSXQgZG9lcyBub3QgYWx0ZXIgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIGFuZCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGRpcmVjdGx5IGZ1enplZCBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MDI6MTEuMjI3Nzg2MTExWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MDIwMTI1MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSBCUEYgcHJvZ3JhbSB1c2VkIGJ5IHRoZSB1c2VyLXNwYWNlIHBlcmYgdG9vbCAodG9vbHMvcGVyZi8pLiBJdCBkb2VzIG5vdCBhbHRlciBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgYW5kIGlzIG5vdCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZGlyZWN0bHkgZnV6emVkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjAyOjExLjIyNzc5MzQxMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkzMTEzMTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYThjNGMzMDhjODNkYTcxMzg2MTRjNjU5YjlhMzhhY2FjMWUzZDViZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzIDEyOjAyOjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jIGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcXG5pbmRleCAyYTZlNjE4NjRlZTAxNS4uNjBiYWJjMDZmMzgxMmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcXG4rKysgYi90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY1xcbkBAIC00MjksMTUgKzQyOSw4OSBAQCBzdGF0aWMgYm9vbCBwaWRfZmlsdGVyX19oYXMoc3RydWN0IHBpZHNfZmlsdGVyZWQgKnBpZHMsIHBpZF90IHBpZClcXG4gXFx0cmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0ocGlkcywgXFx1MDAyNnBpZCkgIT0gTlVMTDtcXG4gfVxcbiBcXG4rdTY0IFpFUk8gPSAwO1xcbitcXG4rLypcXG4rICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZVxcbisgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5X21hcC4gVGhpcyBpcyB0aGUgcmVsYXRpb24gb2YgcGFyYW1ldGVyIHR5cGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nXFxuKyAqIHZhbHVlIGluIHRoZSBiZWF1dHkgbWFwLCBhbmQgaG93IG1hbnkgYnl0ZXMgd2UgcmVhZCBldmVudHVhbGx5OlxcbisgKlxcbisgKiBzdHJpbmc6IDFcXHRcXHRcXHQgICAgICAtXFx1MDAzZSBzaXplIG9mIHN0cmluZ1xcbisgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0XFx0ICAgICAgLVxcdTAwM2Ugc2l6ZSBvZiBzdHJ1Y3RcXG4rICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtXFx1MDAzZSB2YWx1ZSBvZiBwYWlyZWQgbGVuIChtYXhpbXVtOiBUUkFDRV9BVUdfTUFYX0JVRilcXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IGF1Z21lbnRfYXJnKHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MsIGludCBpLFxcbitcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgKmJlYXV0eV9tYXAsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBiZWF1dHlfcGF5bG9hZF9lbnRlciAqcGF5bG9hZCwgdTY0IG9mZnNldClcXG4re1xcbitcXHRpbnQgaW5kZXgsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTtcXG4rXFx0czY0IGF1Z19zaXplLCBzaXplO1xcbitcXHRib29sIGF1Z21lbnRlZDtcXG4rXFx0dm9pZCAqYXJnLCAqcGF5bG9hZF9vZmZzZXQ7XFxuK1xcbitcXHRhcmcgPSAodm9pZCAqKWFyZ3MtXFx1MDAzZWFyZ3NbaV07XFxuK1xcdGF1Z21lbnRlZCA9IGZhbHNlO1xcbitcXHRzaXplID0gYmVhdXR5X21hcFtpXTtcXG4rXFx0YXVnX3NpemUgPSBzaXplOyAvKiBzaXplIG9mIHRoZSBhdWdtZW50ZWQgZGF0YSByZWFkIGZyb20gdXNlciBzcGFjZSAqL1xcbitcXG4rXFx0aWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBib3VuZHMgY2hlY2sgZm9yIHRoZSB2ZXJpZmllciAqL1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwM2Ugc2l6ZW9mKHBheWxvYWQtXFx1MDAzZWF1Z19hcmdzKSAtIHNpemVvZihwYXlsb2FkLVxcdTAwM2VhdWdfYXJnc1swXSkpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0YmFycmllcl92YXIob2Zmc2V0KTtcXG4rXFx0cGF5bG9hZF9vZmZzZXQgPSAodm9pZCAqKVxcdTAwMjZwYXlsb2FkLVxcdTAwM2VhdWdfYXJncyArIG9mZnNldDtcXG4rXFxuK1xcdGlmIChzaXplID09IDEpIHsgLyogc3RyaW5nICovXFxuK1xcdFxcdGF1Z19zaXplID0gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cXHUwMDNldmFsdWUsIHZhbHVlX3NpemUsIGFyZyk7XFxuK1xcdFxcdC8qIG1pbmltdW0gb2YgMCB0byBwYXNzIHRoZSB2ZXJpZmllciAqL1xcbitcXHRcXHRpZiAoYXVnX3NpemUgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRhdWdfc2l6ZSA9IDA7XFxuK1xcbitcXHRcXHRhdWdtZW50ZWQgPSB0cnVlO1xcbitcXHR9IGVsc2UgaWYgKHNpemUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzYz0gdmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi9cXG4rXFx0XFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXFx1MDAzZXZhbHVlLCBzaXplLCBhcmcpKVxcbitcXHRcXHRcXHRhdWdtZW50ZWQgPSB0cnVlO1xcbitcXHR9IGVsc2UgaWYgKHNpemUgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzZT0gLTYpIHsgLyogYnVmZmVyICovXFxuK1xcdFxcdGluZGV4ID0gLShzaXplICsgMSk7XFxuK1xcdFxcdGJhcnJpZXJfdmFyKGluZGV4KTsgLy8gUHJldmVudCBjbGFuZyAobm90aWNlZCB3aXRoIHYxOCkgZnJvbSByZW1vdmluZyB0aGUgXFx1MDAyNj0gNyB0cmljay5cXG4rXFx0XFx0aW5kZXggXFx1MDAyNj0gNztcXHQgICAgLy8gU2F0aXNmeSB0aGUgYm91bmRzIGNoZWNraW5nIHdpdGggdGhlIHZlcmlmaWVyIGluIHNvbWUga2VybmVscy5cXG4rXFx0XFx0YXVnX3NpemUgPSBhcmdzLVxcdTAwM2VhcmdzW2luZGV4XTtcXG4rXFx0XFx0aWYgKGF1Z19zaXplIFxcdTAwM2UgVFJBQ0VfQVVHX01BWF9CVUYpXFxuK1xcdFxcdFxcdGF1Z19zaXplID0gVFJBQ0VfQVVHX01BWF9CVUY7XFxuK1xcbitcXHRcXHRpZiAoYXVnX3NpemUgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdFxcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVxcdTAwM2V2YWx1ZSwgYXVnX3NpemUsIGFyZykpXFxuK1xcdFxcdFxcdFxcdGF1Z21lbnRlZCA9IHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogQXVnbWVudGVkIGRhdGEgc2l6ZSBpcyBsaW1pdGVkIHRvIHNpemVvZihhdWdtZW50ZWRfYXJnLVxcdTAwM2V1bm5hbWVkIHVuaW9uIHdpdGggdmFsdWUgZmllbGQpICovXFxuK1xcdGlmIChhdWdfc2l6ZSBcXHUwMDNlIHZhbHVlX3NpemUpXFxuK1xcdFxcdGF1Z19zaXplID0gdmFsdWVfc2l6ZTtcXG4rXFxuK1xcdC8qIHdyaXRlIGRhdGEgdG8gcGF5bG9hZCAqL1xcbitcXHRpZiAoYXVnbWVudGVkKSB7XFxuK1xcdFxcdGludCB3cml0dGVuID0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKSArIGF1Z19zaXplO1xcbitcXG4rXFx0XFx0aWYgKHdyaXR0ZW4gXFx1MDAzYyAwIHx8IHdyaXR0ZW4gXFx1MDAzZSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpKVxcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRcXHQoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVxcdTAwM2VzaXplID0gYXVnX3NpemU7XFxuK1xcdFxcdHJldHVybiB3cml0dGVuO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpXFxuIHtcXG4tXFx0Ym9vbCBhdWdtZW50ZWQsIGRvX291dHB1dCA9IGZhbHNlO1xcbi1cXHRpbnQgemVybyA9IDAsIGluZGV4LCB2YWx1ZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSAtIG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSk7XFxuK1xcdGJvb2wgZG9fb3V0cHV0ID0gZmFsc2U7XFxuK1xcdGludCBpLCB6ZXJvID0gMCwgd3JpdHRlbjtcXG4gXFx0dTY0IG91dHB1dCA9IDA7IC8qIGhhcyB0byBiZSB1NjQsIG90aGVyd2lzZSBpdCB3b24ndCBwYXNzIHRoZSB2ZXJpZmllciAqL1xcbi1cXHRzNjQgYXVnX3NpemUsIHNpemU7XFxuIFxcdHVuc2lnbmVkIGludCBuciwgKmJlYXV0eV9tYXA7XFxuIFxcdHN0cnVjdCBiZWF1dHlfcGF5bG9hZF9lbnRlciAqcGF5bG9hZDtcXG4tXFx0dm9pZCAqYXJnLCAqcGF5bG9hZF9vZmZzZXQ7XFxuIFxcbiBcXHQvKiBmYWxsIGJhY2sgdG8gZG8gcHJlZGVmaW5lZCB0YWlsIGNhbGwgKi9cXG4gXFx0aWYgKGFyZ3MgPT0gTlVMTClcXG5AQCAtNDQ5LDcgKzUyMyw2IEBAIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKVxcbiBcXG4gXFx0Lyogc2V0IHVwIHBheWxvYWQgZm9yIG91dHB1dCAqL1xcbiBcXHRwYXlsb2FkICAgICAgICA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNmJlYXV0eV9wYXlsb2FkX2VudGVyX21hcCwgXFx1MDAyNnplcm8pO1xcbi1cXHRwYXlsb2FkX29mZnNldCA9ICh2b2lkICopXFx1MDAyNnBheWxvYWQtXFx1MDAzZWF1Z19hcmdzO1xcbiBcXG4gXFx0aWYgKGJlYXV0eV9tYXAgPT0gTlVMTCB8fCBwYXlsb2FkID09IE5VTEwpXFxuIFxcdFxcdHJldHVybiAxO1xcbkBAIC00NTcsNjEgKzUzMCwyOSBAQCBzdGF0aWMgaW50IGF1Z21lbnRfc3lzX2VudGVyKHZvaWQgKmN0eCwgc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncylcXG4gXFx0LyogY29weSB0aGUgc3lzX2VudGVyIGhlYWRlciwgd2hpY2ggaGFzIHRoZSBzeXNjYWxsX25yICovXFxuIFxcdF9fYnVpbHRpbl9tZW1jcHkoXFx1MDAyNnBheWxvYWQtXFx1MDAzZWFyZ3MsIGFyZ3MsIHNpemVvZihzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzKSk7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIGFyZ3VtZW50IGFuZCBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdXNlciBzcGFjZSwgdXNpbmcgdGhlXFxuLVxcdCAqIHZhbHVlIGluIHRoZSBiZWF1dHlfbWFwLiBUaGlzIGlzIHRoZSByZWxhdGlvbiBvZiBwYXJhbWV0ZXIgdHlwZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmdcXG4tXFx0ICogdmFsdWUgaW4gdGhlIGJlYXV0eSBtYXAsIGFuZCBob3cgbWFueSBieXRlcyB3ZSByZWFkIGV2ZW50dWFsbHk6XFxuLVxcdCAqXFxuLVxcdCAqIHN0cmluZzogMVxcdFxcdFxcdCAgICAgIC1cXHUwMDNlIHNpemUgb2Ygc3RyaW5nXFxuLVxcdCAqIHN0cnVjdDogc2l6ZSBvZiBzdHJ1Y3RcXHQgICAgICAtXFx1MDAzZSBzaXplIG9mIHN0cnVjdFxcbi1cXHQgKiBidWZmZXI6IC0xICogKGluZGV4IG9mIHBhaXJlZCBsZW4pIC1cXHUwMDNlIHZhbHVlIG9mIHBhaXJlZCBsZW4gKG1heGltdW06IFRSQUNFX0FVR19NQVhfQlVGKVxcbi1cXHQgKi9cXG4tXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyA2OyBpKyspIHtcXG4tXFx0XFx0YXJnID0gKHZvaWQgKilhcmdzLVxcdTAwM2VhcmdzW2ldO1xcbi1cXHRcXHRhdWdtZW50ZWQgPSBmYWxzZTtcXG4tXFx0XFx0c2l6ZSA9IGJlYXV0eV9tYXBbaV07XFxuLVxcdFxcdGF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi9cXG4tXFxuLVxcdFxcdGlmIChzaXplID09IDAgfHwgYXJnID09IE5VTEwpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0aWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi9cXG4tXFx0XFx0XFx0YXVnX3NpemUgPSBicGZfcHJvYmVfcmVhZF91c2VyX3N0cigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVxcdTAwM2V2YWx1ZSwgdmFsdWVfc2l6ZSwgYXJnKTtcXG4tXFx0XFx0XFx0LyogbWluaW11bSBvZiAwIHRvIHBhc3MgdGhlIHZlcmlmaWVyICovXFxuLVxcdFxcdFxcdGlmIChhdWdfc2l6ZSBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdFxcdGF1Z19zaXplID0gMDtcXG4tXFxuLVxcdFxcdFxcdGF1Z21lbnRlZCA9IHRydWU7XFxuLVxcdFxcdH0gZWxzZSBpZiAoc2l6ZSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgc2l6ZSBcXHUwMDNjPSB2YWx1ZV9zaXplKSB7IC8qIHN0cnVjdCAqL1xcbi1cXHRcXHRcXHRpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cXHUwMDNldmFsdWUsIHNpemUsIGFyZykpXFxuLVxcdFxcdFxcdFxcdGF1Z21lbnRlZCA9IHRydWU7XFxuLVxcdFxcdH0gZWxzZSBpZiAoKGludClzaXplIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBzaXplIFxcdTAwM2U9IC02KSB7IC8qIGJ1ZmZlciAqL1xcbi1cXHRcXHRcXHRpbmRleCA9IC0oc2l6ZSArIDEpO1xcbi1cXHRcXHRcXHRiYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlIFxcdTAwMjY9IDcgdHJpY2suXFxuLVxcdFxcdFxcdGluZGV4IFxcdTAwMjY9IDc7XFx0ICAgIC8vIFNhdGlzZnkgdGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIHRoZSB2ZXJpZmllciBpbiBzb21lIGtlcm5lbHMuXFxuLVxcdFxcdFxcdGF1Z19zaXplID0gYXJncy1cXHUwMDNlYXJnc1tpbmRleF0gXFx1MDAzZSBUUkFDRV9BVUdfTUFYX0JVRiA/IFRSQUNFX0FVR19NQVhfQlVGIDogYXJncy1cXHUwMDNlYXJnc1tpbmRleF07XFxuLVxcbi1cXHRcXHRcXHRpZiAoYXVnX3NpemUgXFx1MDAzZSAwKSB7XFxuLVxcdFxcdFxcdFxcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVxcdTAwM2V2YWx1ZSwgYXVnX3NpemUsIGFyZykpXFxuLVxcdFxcdFxcdFxcdFxcdGF1Z21lbnRlZCA9IHRydWU7XFxuK1xcdGlmIChicGZfa3N5bV9leGlzdHMoYnBmX2l0ZXJfbnVtX25ldykpIHtcXG4rXFx0XFx0YnBmX2ZvcihpLCAwLCA2KSB7XFxuK1xcdFxcdFxcdHdyaXR0ZW4gPSBhdWdtZW50X2FyZyhhcmdzLCBpLCBiZWF1dHlfbWFwLCBwYXlsb2FkLCBvdXRwdXQpO1xcbitcXHRcXHRcXHRpZiAod3JpdHRlbiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHRcXHRpZiAod3JpdHRlbiBcXHUwMDNlIDApIHtcXG4rXFx0XFx0XFx0XFx0b3V0cHV0ICs9IHdyaXR0ZW47XFxuK1xcdFxcdFxcdFxcdC8qIGd1aWRlIHRoZSB2ZXJpZmllciB0byBmb3JnZXQgcmFuZ2Ugb2YgYG91dHB1dGAsIHdoaWNoXFxuK1xcdFxcdFxcdFxcdCAqIGhlbHBzIHRvIHByb3ZlIGNvbnZlcmdlbmNlIG9mIHRoZSBsb29wXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRvdXRwdXQgKz0gWkVSTztcXG4rXFx0XFx0XFx0XFx0ZG9fb3V0cHV0ID0gdHJ1ZTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuLVxcbi1cXHRcXHQvKiBBdWdtZW50ZWQgZGF0YSBzaXplIGlzIGxpbWl0ZWQgdG8gc2l6ZW9mKGF1Z21lbnRlZF9hcmctXFx1MDAzZXVubmFtZWQgdW5pb24gd2l0aCB2YWx1ZSBmaWVsZCkgKi9cXG4tXFx0XFx0aWYgKGF1Z19zaXplIFxcdTAwM2UgdmFsdWVfc2l6ZSlcXG4tXFx0XFx0XFx0YXVnX3NpemUgPSB2YWx1ZV9zaXplO1xcbi1cXG4tXFx0XFx0Lyogd3JpdGUgZGF0YSB0byBwYXlsb2FkICovXFxuLVxcdFxcdGlmIChhdWdtZW50ZWQpIHtcXG4tXFx0XFx0XFx0aW50IHdyaXR0ZW4gPSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpICsgYXVnX3NpemU7XFxuLVxcbi1cXHRcXHRcXHRpZiAod3JpdHRlbiBcXHUwMDNjIDAgfHwgd3JpdHRlbiBcXHUwMDNlIHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpXFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA2OyBpKyspIHtcXG4rXFx0XFx0XFx0d3JpdHRlbiA9IGF1Z21lbnRfYXJnKGFyZ3MsIGksIGJlYXV0eV9tYXAsIHBheWxvYWQsIG91dHB1dCk7XFxuK1xcdFxcdFxcdGlmICh3cml0dGVuIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuLVxcbi1cXHRcXHRcXHQoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVxcdTAwM2VzaXplID0gYXVnX3NpemU7XFxuLVxcdFxcdFxcdG91dHB1dCArPSB3cml0dGVuO1xcbi1cXHRcXHRcXHRwYXlsb2FkX29mZnNldCArPSB3cml0dGVuO1xcbi1cXHRcXHRcXHRkb19vdXRwdXQgPSB0cnVlO1xcbitcXHRcXHRcXHRpZiAod3JpdHRlbiBcXHUwMDNlIDApIHtcXG4rXFx0XFx0XFx0XFx0b3V0cHV0ICs9IHdyaXR0ZW47XFxuK1xcdFxcdFxcdFxcdGRvX291dHB1dCA9IHRydWU7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjowMjoxMS45MjE3NzIwNzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NzA4MDEyMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBwZXJmIHRvb2wgKHRvb2xzL3BlcmYvKS4gSXQgZG9lcyBub3QgYWx0ZXIgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIGFuZCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGRpcmVjdGx5IGZ1enplZCBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE4YzRjMzA4YzgzZGE3MTM4NjE0YzY1OWI5YTM4YWNhYzFlM2Q1YmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDEyOjAyOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmMgYi90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY1xuaW5kZXggMmE2ZTYxODY0ZWUwMTUuLjYwYmFiYzA2ZjM4MTJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcbisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jXG5AQCAtNDI5LDE1ICs0MjksODkgQEAgc3RhdGljIGJvb2wgcGlkX2ZpbHRlcl9faGFzKHN0cnVjdCBwaWRzX2ZpbHRlcmVkICpwaWRzLCBwaWRfdCBwaWQpXG4gXHRyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShwaWRzLCBcdTAwMjZwaWQpICE9IE5VTEw7XG4gfVxuIFxuK3U2NCBaRVJPID0gMDtcbitcbisvKlxuKyAqIERldGVybWluZSB3aGF0IHR5cGUgb2YgYXJndW1lbnQgYW5kIGhvdyBtYW55IGJ5dGVzIHRvIHJlYWQgZnJvbSB1c2VyIHNwYWNlLCB1c2luZyB0aGVcbisgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5X21hcC4gVGhpcyBpcyB0aGUgcmVsYXRpb24gb2YgcGFyYW1ldGVyIHR5cGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nXG4rICogdmFsdWUgaW4gdGhlIGJlYXV0eSBtYXAsIGFuZCBob3cgbWFueSBieXRlcyB3ZSByZWFkIGV2ZW50dWFsbHk6XG4rICpcbisgKiBzdHJpbmc6IDFcdFx0XHQgICAgICAtXHUwMDNlIHNpemUgb2Ygc3RyaW5nXG4rICogc3RydWN0OiBzaXplIG9mIHN0cnVjdFx0ICAgICAgLVx1MDAzZSBzaXplIG9mIHN0cnVjdFxuKyAqIGJ1ZmZlcjogLTEgKiAoaW5kZXggb2YgcGFpcmVkIGxlbikgLVx1MDAzZSB2YWx1ZSBvZiBwYWlyZWQgbGVuIChtYXhpbXVtOiBUUkFDRV9BVUdfTUFYX0JVRilcbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBhdWdtZW50X2FyZyhzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzLCBpbnQgaSxcbitcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgKmJlYXV0eV9tYXAsXG4rXHRcdFx0ICAgICAgc3RydWN0IGJlYXV0eV9wYXlsb2FkX2VudGVyICpwYXlsb2FkLCB1NjQgb2Zmc2V0KVxuK3tcbitcdGludCBpbmRleCwgdmFsdWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykgLSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpO1xuK1x0czY0IGF1Z19zaXplLCBzaXplO1xuK1x0Ym9vbCBhdWdtZW50ZWQ7XG4rXHR2b2lkICphcmcsICpwYXlsb2FkX29mZnNldDtcbitcbitcdGFyZyA9ICh2b2lkICopYXJncy1cdTAwM2VhcmdzW2ldO1xuK1x0YXVnbWVudGVkID0gZmFsc2U7XG4rXHRzaXplID0gYmVhdXR5X21hcFtpXTtcbitcdGF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi9cbitcbitcdGlmIChzaXplID09IDAgfHwgYXJnID09IE5VTEwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogYm91bmRzIGNoZWNrIGZvciB0aGUgdmVyaWZpZXIgKi9cbitcdGlmIChvZmZzZXQgXHUwMDNlIHNpemVvZihwYXlsb2FkLVx1MDAzZWF1Z19hcmdzKSAtIHNpemVvZihwYXlsb2FkLVx1MDAzZWF1Z19hcmdzWzBdKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0YmFycmllcl92YXIob2Zmc2V0KTtcbitcdHBheWxvYWRfb2Zmc2V0ID0gKHZvaWQgKilcdTAwMjZwYXlsb2FkLVx1MDAzZWF1Z19hcmdzICsgb2Zmc2V0O1xuK1xuK1x0aWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi9cbitcdFx0YXVnX3NpemUgPSBicGZfcHJvYmVfcmVhZF91c2VyX3N0cigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpO1xuK1x0XHQvKiBtaW5pbXVtIG9mIDAgdG8gcGFzcyB0aGUgdmVyaWZpZXIgKi9cbitcdFx0aWYgKGF1Z19zaXplIFx1MDAzYyAwKVxuK1x0XHRcdGF1Z19zaXplID0gMDtcbitcbitcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbitcdH0gZWxzZSBpZiAoc2l6ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2M9IHZhbHVlX3NpemUpIHsgLyogc3RydWN0ICovXG4rXHRcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXZhbHVlLCBzaXplLCBhcmcpKVxuK1x0XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4rXHR9IGVsc2UgaWYgKHNpemUgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDNlPSAtNikgeyAvKiBidWZmZXIgKi9cbitcdFx0aW5kZXggPSAtKHNpemUgKyAxKTtcbitcdFx0YmFycmllcl92YXIoaW5kZXgpOyAvLyBQcmV2ZW50IGNsYW5nIChub3RpY2VkIHdpdGggdjE4KSBmcm9tIHJlbW92aW5nIHRoZSBcdTAwMjY9IDcgdHJpY2suXG4rXHRcdGluZGV4IFx1MDAyNj0gNztcdCAgICAvLyBTYXRpc2Z5IHRoZSBib3VuZHMgY2hlY2tpbmcgd2l0aCB0aGUgdmVyaWZpZXIgaW4gc29tZSBrZXJuZWxzLlxuK1x0XHRhdWdfc2l6ZSA9IGFyZ3MtXHUwMDNlYXJnc1tpbmRleF07XG4rXHRcdGlmIChhdWdfc2l6ZSBcdTAwM2UgVFJBQ0VfQVVHX01BWF9CVUYpXG4rXHRcdFx0YXVnX3NpemUgPSBUUkFDRV9BVUdfTUFYX0JVRjtcbitcbitcdFx0aWYgKGF1Z19zaXplIFx1MDAzZSAwKSB7XG4rXHRcdFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNldmFsdWUsIGF1Z19zaXplLCBhcmcpKVxuK1x0XHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogQXVnbWVudGVkIGRhdGEgc2l6ZSBpcyBsaW1pdGVkIHRvIHNpemVvZihhdWdtZW50ZWRfYXJnLVx1MDAzZXVubmFtZWQgdW5pb24gd2l0aCB2YWx1ZSBmaWVsZCkgKi9cbitcdGlmIChhdWdfc2l6ZSBcdTAwM2UgdmFsdWVfc2l6ZSlcbitcdFx0YXVnX3NpemUgPSB2YWx1ZV9zaXplO1xuK1xuK1x0Lyogd3JpdGUgZGF0YSB0byBwYXlsb2FkICovXG4rXHRpZiAoYXVnbWVudGVkKSB7XG4rXHRcdGludCB3cml0dGVuID0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKSArIGF1Z19zaXplO1xuK1xuK1x0XHRpZiAod3JpdHRlbiBcdTAwM2MgMCB8fCB3cml0dGVuIFx1MDAzZSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpKVxuK1x0XHRcdHJldHVybiAtMTtcbitcbitcdFx0KChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cdTAwM2VzaXplID0gYXVnX3NpemU7XG4rXHRcdHJldHVybiB3cml0dGVuO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKVxuIHtcbi1cdGJvb2wgYXVnbWVudGVkLCBkb19vdXRwdXQgPSBmYWxzZTtcbi1cdGludCB6ZXJvID0gMCwgaW5kZXgsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTtcbitcdGJvb2wgZG9fb3V0cHV0ID0gZmFsc2U7XG4rXHRpbnQgaSwgemVybyA9IDAsIHdyaXR0ZW47XG4gXHR1NjQgb3V0cHV0ID0gMDsgLyogaGFzIHRvIGJlIHU2NCwgb3RoZXJ3aXNlIGl0IHdvbid0IHBhc3MgdGhlIHZlcmlmaWVyICovXG4tXHRzNjQgYXVnX3NpemUsIHNpemU7XG4gXHR1bnNpZ25lZCBpbnQgbnIsICpiZWF1dHlfbWFwO1xuIFx0c3RydWN0IGJlYXV0eV9wYXlsb2FkX2VudGVyICpwYXlsb2FkO1xuLVx0dm9pZCAqYXJnLCAqcGF5bG9hZF9vZmZzZXQ7XG4gXG4gXHQvKiBmYWxsIGJhY2sgdG8gZG8gcHJlZGVmaW5lZCB0YWlsIGNhbGwgKi9cbiBcdGlmIChhcmdzID09IE5VTEwpXG5AQCAtNDQ5LDcgKzUyMyw2IEBAIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKVxuIFxuIFx0Lyogc2V0IHVwIHBheWxvYWQgZm9yIG91dHB1dCAqL1xuIFx0cGF5bG9hZCAgICAgICAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmJlYXV0eV9wYXlsb2FkX2VudGVyX21hcCwgXHUwMDI2emVybyk7XG4tXHRwYXlsb2FkX29mZnNldCA9ICh2b2lkICopXHUwMDI2cGF5bG9hZC1cdTAwM2VhdWdfYXJncztcbiBcbiBcdGlmIChiZWF1dHlfbWFwID09IE5VTEwgfHwgcGF5bG9hZCA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gMTtcbkBAIC00NTcsNjEgKzUzMCwyOSBAQCBzdGF0aWMgaW50IGF1Z21lbnRfc3lzX2VudGVyKHZvaWQgKmN0eCwgc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncylcbiBcdC8qIGNvcHkgdGhlIHN5c19lbnRlciBoZWFkZXIsIHdoaWNoIGhhcyB0aGUgc3lzY2FsbF9uciAqL1xuIFx0X19idWlsdGluX21lbWNweShcdTAwMjZwYXlsb2FkLVx1MDAzZWFyZ3MsIGFyZ3MsIHNpemVvZihzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzKSk7XG4gXG4tXHQvKlxuLVx0ICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZVxuLVx0ICogdmFsdWUgaW4gdGhlIGJlYXV0eV9tYXAuIFRoaXMgaXMgdGhlIHJlbGF0aW9uIG9mIHBhcmFtZXRlciB0eXBlIGFuZCBpdHMgY29ycmVzcG9uZGluZ1xuLVx0ICogdmFsdWUgaW4gdGhlIGJlYXV0eSBtYXAsIGFuZCBob3cgbWFueSBieXRlcyB3ZSByZWFkIGV2ZW50dWFsbHk6XG4tXHQgKlxuLVx0ICogc3RyaW5nOiAxXHRcdFx0ICAgICAgLVx1MDAzZSBzaXplIG9mIHN0cmluZ1xuLVx0ICogc3RydWN0OiBzaXplIG9mIHN0cnVjdFx0ICAgICAgLVx1MDAzZSBzaXplIG9mIHN0cnVjdFxuLVx0ICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtXHUwMDNlIHZhbHVlIG9mIHBhaXJlZCBsZW4gKG1heGltdW06IFRSQUNFX0FVR19NQVhfQlVGKVxuLVx0ICovXG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgNjsgaSsrKSB7XG4tXHRcdGFyZyA9ICh2b2lkICopYXJncy1cdTAwM2VhcmdzW2ldO1xuLVx0XHRhdWdtZW50ZWQgPSBmYWxzZTtcbi1cdFx0c2l6ZSA9IGJlYXV0eV9tYXBbaV07XG4tXHRcdGF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi9cbi1cbi1cdFx0aWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTClcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi9cbi1cdFx0XHRhdWdfc2l6ZSA9IGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNldmFsdWUsIHZhbHVlX3NpemUsIGFyZyk7XG4tXHRcdFx0LyogbWluaW11bSBvZiAwIHRvIHBhc3MgdGhlIHZlcmlmaWVyICovXG4tXHRcdFx0aWYgKGF1Z19zaXplIFx1MDAzYyAwKVxuLVx0XHRcdFx0YXVnX3NpemUgPSAwO1xuLVxuLVx0XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4tXHRcdH0gZWxzZSBpZiAoc2l6ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2M9IHZhbHVlX3NpemUpIHsgLyogc3RydWN0ICovXG4tXHRcdFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNldmFsdWUsIHNpemUsIGFyZykpXG4tXHRcdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKChpbnQpc2l6ZSBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IC02KSB7IC8qIGJ1ZmZlciAqL1xuLVx0XHRcdGluZGV4ID0gLShzaXplICsgMSk7XG4tXHRcdFx0YmFycmllcl92YXIoaW5kZXgpOyAvLyBQcmV2ZW50IGNsYW5nIChub3RpY2VkIHdpdGggdjE4KSBmcm9tIHJlbW92aW5nIHRoZSBcdTAwMjY9IDcgdHJpY2suXG4tXHRcdFx0aW5kZXggXHUwMDI2PSA3O1x0ICAgIC8vIFNhdGlzZnkgdGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIHRoZSB2ZXJpZmllciBpbiBzb21lIGtlcm5lbHMuXG4tXHRcdFx0YXVnX3NpemUgPSBhcmdzLVx1MDAzZWFyZ3NbaW5kZXhdIFx1MDAzZSBUUkFDRV9BVUdfTUFYX0JVRiA/IFRSQUNFX0FVR19NQVhfQlVGIDogYXJncy1cdTAwM2VhcmdzW2luZGV4XTtcbi1cbi1cdFx0XHRpZiAoYXVnX3NpemUgXHUwMDNlIDApIHtcbi1cdFx0XHRcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXZhbHVlLCBhdWdfc2l6ZSwgYXJnKSlcbi1cdFx0XHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbitcdGlmIChicGZfa3N5bV9leGlzdHMoYnBmX2l0ZXJfbnVtX25ldykpIHtcbitcdFx0YnBmX2ZvcihpLCAwLCA2KSB7XG4rXHRcdFx0d3JpdHRlbiA9IGF1Z21lbnRfYXJnKGFyZ3MsIGksIGJlYXV0eV9tYXAsIHBheWxvYWQsIG91dHB1dCk7XG4rXHRcdFx0aWYgKHdyaXR0ZW4gXHUwMDNjIDApXG4rXHRcdFx0XHRyZXR1cm4gMTtcbitcdFx0XHRpZiAod3JpdHRlbiBcdTAwM2UgMCkge1xuK1x0XHRcdFx0b3V0cHV0ICs9IHdyaXR0ZW47XG4rXHRcdFx0XHQvKiBndWlkZSB0aGUgdmVyaWZpZXIgdG8gZm9yZ2V0IHJhbmdlIG9mIGBvdXRwdXRgLCB3aGljaFxuK1x0XHRcdFx0ICogaGVscHMgdG8gcHJvdmUgY29udmVyZ2VuY2Ugb2YgdGhlIGxvb3BcbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0b3V0cHV0ICs9IFpFUk87XG4rXHRcdFx0XHRkb19vdXRwdXQgPSB0cnVlO1xuIFx0XHRcdH1cbiBcdFx0fVxuLVxuLVx0XHQvKiBBdWdtZW50ZWQgZGF0YSBzaXplIGlzIGxpbWl0ZWQgdG8gc2l6ZW9mKGF1Z21lbnRlZF9hcmctXHUwMDNldW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqL1xuLVx0XHRpZiAoYXVnX3NpemUgXHUwMDNlIHZhbHVlX3NpemUpXG4tXHRcdFx0YXVnX3NpemUgPSB2YWx1ZV9zaXplO1xuLVxuLVx0XHQvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi9cbi1cdFx0aWYgKGF1Z21lbnRlZCkge1xuLVx0XHRcdGludCB3cml0dGVuID0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKSArIGF1Z19zaXplO1xuLVxuLVx0XHRcdGlmICh3cml0dGVuIFx1MDAzYyAwIHx8IHdyaXR0ZW4gXHUwMDNlIHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpXG4rXHR9IGVsc2Uge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA2OyBpKyspIHtcbitcdFx0XHR3cml0dGVuID0gYXVnbWVudF9hcmcoYXJncywgaSwgYmVhdXR5X21hcCwgcGF5bG9hZCwgb3V0cHV0KTtcbitcdFx0XHRpZiAod3JpdHRlbiBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiAxO1xuLVxuLVx0XHRcdCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNlc2l6ZSA9IGF1Z19zaXplO1xuLVx0XHRcdG91dHB1dCArPSB3cml0dGVuO1xuLVx0XHRcdHBheWxvYWRfb2Zmc2V0ICs9IHdyaXR0ZW47XG4tXHRcdFx0ZG9fb3V0cHV0ID0gdHJ1ZTtcbitcdFx0XHRpZiAod3JpdHRlbiBcdTAwM2UgMCkge1xuK1x0XHRcdFx0b3V0cHV0ICs9IHdyaXR0ZW47XG4rXHRcdFx0XHRkb19vdXRwdXQgPSB0cnVlO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MDI6MTEuOTIxNzczNzM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc3MDc5NzAwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBXb3J0aEZ1enppbmc9ZmFsc2UqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBjaGFuZ2VzIHRvIGB0b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY2AuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBhbnkgbW9kaWZpY2F0aW9uIHRvIGEgQlBGIHByb2dyYW0gbWlnaHQgd2FycmFudCBjbG9zZXIgaW5zcGVjdGlvbiwgZ2l2ZW4gaXRzIGluLWtlcm5lbCBleGVjdXRpb24uIEhvd2V2ZXIsIHRoaXMgaXMgbG9jYXRlZCB3aXRoaW4gdGhlIGB0b29scy9wZXJmL2AgZGlyZWN0b3J5LCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gYmUgc3VyZS5cblxuVGhpcyBpc24ndCBjb3JlIGtlcm5lbCBjb2RlLCBub3QgZHJpdmVycyBvciBhcmNoaXRlY3R1cmVzLiBJdCdzIHVzZXItc3BhY2UhIFNwZWNpZmljYWxseSwgaXQncyBhIEJQRiBza2VsZXRvbiB1c2VkIGJ5IHRoZSBgcGVyZmAgdG9vbC4gVGhlc2UgQlBGIHByb2dyYW1zIGFyZSBjb21waWxlZCBhbmQgKmxvYWRlZCBieSogYHBlcmZgLCBhbmQgZXhlY3V0ZWQgKndpdGhpbiogdGhlIGtlcm5lbCB3aGVuIGNhbGxlZCBieSBgcGVyZmAsIGJ1dCB0aGlzIGlzbid0IGtlcm5lbCBjb2RlIGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZSwgbm90IGtlcm5lbCBtb2R1bGVzLlxuXG5TeXprYWxsZXIgaXMgdGhlIGZ1enplciB0aGF0IEknbSBmb2N1c2VkIG9uLiBTeXprYWxsZXIncyBqb2IgaXMgZnV6emluZyB0aGUga2VybmVsIHZpYSBzeXNjYWxscy4gSXQgZG9lc24ndCB0eXBpY2FsbHkgaW50ZXJhY3Qgd2l0aCBvciBkaXJlY3RseSBmdXp6IHRvb2xzIGxpa2UgYHBlcmZgIG9yIGl0cyBCUEYgcHJvZ3JhbXMsIHVubGVzcyBgcGVyZmAgaXMgZXhwbGljaXRseSBiZWluZyBydW4gYXMgcGFydCBvZiB0aGUgdGVzdC4gU3l6a2FsbGVyIGRvZXNuJ3QgdHlwaWNhbGx5IGxvYWQgdGhlc2Ugc3BlY2lmaWMgQlBGIHNrZWxldG9ucy5cblxuSSd2ZSBjaGVja2VkIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZmlsZXMgaW1wYWN0ZWQgYnkgdGhlIHBhdGNoLCBqdXN0IHRvIGJlIHN1cmUuIFRoZSBhbnN3ZXIgaXMgbm87IG9ubHkgdGhpcyBvbmUgZmlsZSBpcyBjaGFuZ2VkLlxuXG5Ob3csIGxldCBtZSBnbyB0aHJvdWdoIHRoZSBydWxlcy4gVGhlIHJ1bGVzIGRvbid0IGV4cGxpY2l0bHkgc2F5IFwidG9vbHMvXCIgYnV0IHRoZSBwYXR0ZXJuIG9mIFwiRG9jdW1lbnRhdGlvbi9cIiwgXCJLY29uZmlnXCIsIGNvbW1lbnRzLCBsb2dnaW5nLCBjb25zdGFudHMsIHVucmVhY2hhYmxlIGNvZGUsIGV0Yy4gYWxsIHBvaW50IGF3YXkgZnJvbSBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5LiBDaGFuZ2VzIGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkgYXJlIGFsc28gZ2VuZXJhbGx5IHVzZXIgc3BhY2UgdG9vbHMuXG5cbkJhc2VkIG9uIHRoZSBydWxlcywgYW5kIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSwgdGhpcyBpcyBhIG1vZGlmaWNhdGlvbiB0byBhIHVzZXItc3BhY2UgdG9vbCAocGVyZikgYW5kIGl0cyBhc3NvY2lhdGVkIEJQRiBwcm9ncmFtLiBTeXprYWxsZXIgKmRvZXMgbm90KiBmdXp6IHRoZXNlIHByb2dyYW1zLCBzaW5jZSBpdCBpcyBhIGtlcm5lbCBzeXNjYWxsIGZ1enplci4gSXQncyBub3QgY29yZSBrZXJuZWwsIGFuZCBpdCdzIG5vdCBiZWluZyBmdXp6ZWQuIFRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgbm90IHdvcnRoIGZ1enppbmcuIEknbGwgZmxhZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgZXhwbGFpbiB0aGF0IGl0J3MgYSBjaGFuZ2UgdG8gdGhlIHVzZXItc3BhY2UgYHBlcmZgIHRvb2wgYW5kIGFzc29jaWF0ZWQgQlBGIHByb2dyYW1zLiBJJ20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGRpcmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDg3LCJPdXRwdXRUb2tlbnMiOjgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MDI6MjkuNjI5NzQ3NDA0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBwZXJmIHRvb2wgKHRvb2xzL3BlcmYvKS4gSXQgZG9lcyBub3QgYWx0ZXIgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIGFuZCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGRpcmVjdGx5IGZ1enplZCBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBwZXJmIHRvb2wgKHRvb2xzL3BlcmYvKS4gSXQgZG9lcyBub3QgYWx0ZXIgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIGFuZCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGRpcmVjdGx5IGZ1enplZCBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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:*0,} --------- Name: series-workflownz7zh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-03 11:33:26 +0000 UTC FinishedAt: 2026-07-03 12:02:31 +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+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSBCUEYgcHJvZ3JhbSB1c2VkIGJ5IHRoZSB1c2VyLXNwYWNlIHBlcmYgdG9vbCAodG9vbHMvcGVyZi8pLiBJdCBkb2VzIG5vdCBhbHRlciBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgYW5kIGlzIG5vdCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZGlyZWN0bHkgZnV6emVkIGJ5IHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhOGM0YzMwOGM4M2RhNzEzODYxNGM2NTliOWEzOGFjYWMxZTNkNWJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAxMjowMjowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jXG5pbmRleCAyYTZlNjE4NjRlZTAxNS4uNjBiYWJjMDZmMzgxMmUgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcbkBAIC00MjksMTUgJiM0Mzs0MjksODkgQEAgc3RhdGljIGJvb2wgcGlkX2ZpbHRlcl9faGFzKHN0cnVjdCBwaWRzX2ZpbHRlcmVkICpwaWRzLCBwaWRfdCBwaWQpXG4gXHRyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShwaWRzLCBcdTAwMjZwaWQpICE9IE5VTEw7XG4gfVxuIFxuJiM0Mzt1NjQgWkVSTyA9IDA7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIGFyZ3VtZW50IGFuZCBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdXNlciBzcGFjZSwgdXNpbmcgdGhlXG4mIzQzOyAqIHZhbHVlIGluIHRoZSBiZWF1dHlfbWFwLiBUaGlzIGlzIHRoZSByZWxhdGlvbiBvZiBwYXJhbWV0ZXIgdHlwZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmdcbiYjNDM7ICogdmFsdWUgaW4gdGhlIGJlYXV0eSBtYXAsIGFuZCBob3cgbWFueSBieXRlcyB3ZSByZWFkIGV2ZW50dWFsbHk6XG4mIzQzOyAqXG4mIzQzOyAqIHN0cmluZzogMVx0XHRcdCAgICAgIC1cdTAwM2Ugc2l6ZSBvZiBzdHJpbmdcbiYjNDM7ICogc3RydWN0OiBzaXplIG9mIHN0cnVjdFx0ICAgICAgLVx1MDAzZSBzaXplIG9mIHN0cnVjdFxuJiM0MzsgKiBidWZmZXI6IC0xICogKGluZGV4IG9mIHBhaXJlZCBsZW4pIC1cdTAwM2UgdmFsdWUgb2YgcGFpcmVkIGxlbiAobWF4aW11bTogVFJBQ0VfQVVHX01BWF9CVUYpXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBhdWdtZW50X2FyZyhzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzLCBpbnQgaSxcbiYjNDM7XHRcdFx0ICAgICAgdW5zaWduZWQgaW50ICpiZWF1dHlfbWFwLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgYmVhdXR5X3BheWxvYWRfZW50ZXIgKnBheWxvYWQsIHU2NCBvZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaW5kZXgsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTtcbiYjNDM7XHRzNjQgYXVnX3NpemUsIHNpemU7XG4mIzQzO1x0Ym9vbCBhdWdtZW50ZWQ7XG4mIzQzO1x0dm9pZCAqYXJnLCAqcGF5bG9hZF9vZmZzZXQ7XG4mIzQzO1xuJiM0MztcdGFyZyA9ICh2b2lkICopYXJncy1cdTAwM2VhcmdzW2ldO1xuJiM0MztcdGF1Z21lbnRlZCA9IGZhbHNlO1xuJiM0MztcdHNpemUgPSBiZWF1dHlfbWFwW2ldO1xuJiM0MztcdGF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi9cbiYjNDM7XG4mIzQzO1x0aWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBib3VuZHMgY2hlY2sgZm9yIHRoZSB2ZXJpZmllciAqL1xuJiM0MztcdGlmIChvZmZzZXQgXHUwMDNlIHNpemVvZihwYXlsb2FkLVx1MDAzZWF1Z19hcmdzKSAtIHNpemVvZihwYXlsb2FkLVx1MDAzZWF1Z19hcmdzWzBdKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRiYXJyaWVyX3ZhcihvZmZzZXQpO1xuJiM0MztcdHBheWxvYWRfb2Zmc2V0ID0gKHZvaWQgKilcdTAwMjZwYXlsb2FkLVx1MDAzZWF1Z19hcmdzICYjNDM7IG9mZnNldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi9cbiYjNDM7XHRcdGF1Z19zaXplID0gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cdTAwM2V2YWx1ZSwgdmFsdWVfc2l6ZSwgYXJnKTtcbiYjNDM7XHRcdC8qIG1pbmltdW0gb2YgMCB0byBwYXNzIHRoZSB2ZXJpZmllciAqL1xuJiM0MztcdFx0aWYgKGF1Z19zaXplIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRhdWdfc2l6ZSA9IDA7XG4mIzQzO1xuJiM0MztcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbiYjNDM7XHR9IGVsc2UgaWYgKHNpemUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDNjPSB2YWx1ZV9zaXplKSB7IC8qIHN0cnVjdCAqL1xuJiM0MztcdFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNldmFsdWUsIHNpemUsIGFyZykpXG4mIzQzO1x0XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4mIzQzO1x0fSBlbHNlIGlmIChzaXplIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gLTYpIHsgLyogYnVmZmVyICovXG4mIzQzO1x0XHRpbmRleCA9IC0oc2l6ZSAmIzQzOyAxKTtcbiYjNDM7XHRcdGJhcnJpZXJfdmFyKGluZGV4KTsgLy8gUHJldmVudCBjbGFuZyAobm90aWNlZCB3aXRoIHYxOCkgZnJvbSByZW1vdmluZyB0aGUgXHUwMDI2PSA3IHRyaWNrLlxuJiM0MztcdFx0aW5kZXggXHUwMDI2PSA3O1x0ICAgIC8vIFNhdGlzZnkgdGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIHRoZSB2ZXJpZmllciBpbiBzb21lIGtlcm5lbHMuXG4mIzQzO1x0XHRhdWdfc2l6ZSA9IGFyZ3MtXHUwMDNlYXJnc1tpbmRleF07XG4mIzQzO1x0XHRpZiAoYXVnX3NpemUgXHUwMDNlIFRSQUNFX0FVR19NQVhfQlVGKVxuJiM0MztcdFx0XHRhdWdfc2l6ZSA9IFRSQUNFX0FVR19NQVhfQlVGO1xuJiM0MztcbiYjNDM7XHRcdGlmIChhdWdfc2l6ZSBcdTAwM2UgMCkge1xuJiM0MztcdFx0XHRpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cdTAwM2V2YWx1ZSwgYXVnX3NpemUsIGFyZykpXG4mIzQzO1x0XHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEF1Z21lbnRlZCBkYXRhIHNpemUgaXMgbGltaXRlZCB0byBzaXplb2YoYXVnbWVudGVkX2FyZy1cdTAwM2V1bm5hbWVkIHVuaW9uIHdpdGggdmFsdWUgZmllbGQpICovXG4mIzQzO1x0aWYgKGF1Z19zaXplIFx1MDAzZSB2YWx1ZV9zaXplKVxuJiM0MztcdFx0YXVnX3NpemUgPSB2YWx1ZV9zaXplO1xuJiM0MztcbiYjNDM7XHQvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi9cbiYjNDM7XHRpZiAoYXVnbWVudGVkKSB7XG4mIzQzO1x0XHRpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgJiM0MzsgYXVnX3NpemU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHdyaXR0ZW4gXHUwMDNjIDAgfHwgd3JpdHRlbiBcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRcdCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNlc2l6ZSA9IGF1Z19zaXplO1xuJiM0MztcdFx0cmV0dXJuIHdyaXR0ZW47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGF1Z21lbnRfc3lzX2VudGVyKHZvaWQgKmN0eCwgc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncylcbiB7XG4tXHRib29sIGF1Z21lbnRlZCwgZG9fb3V0cHV0ID0gZmFsc2U7XG4tXHRpbnQgemVybyA9IDAsIGluZGV4LCB2YWx1ZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSAtIG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSk7XG4mIzQzO1x0Ym9vbCBkb19vdXRwdXQgPSBmYWxzZTtcbiYjNDM7XHRpbnQgaSwgemVybyA9IDAsIHdyaXR0ZW47XG4gXHR1NjQgb3V0cHV0ID0gMDsgLyogaGFzIHRvIGJlIHU2NCwgb3RoZXJ3aXNlIGl0IHdvbiYjMzk7dCBwYXNzIHRoZSB2ZXJpZmllciAqL1xuLVx0czY0IGF1Z19zaXplLCBzaXplO1xuIFx0dW5zaWduZWQgaW50IG5yLCAqYmVhdXR5X21hcDtcbiBcdHN0cnVjdCBiZWF1dHlfcGF5bG9hZF9lbnRlciAqcGF5bG9hZDtcbi1cdHZvaWQgKmFyZywgKnBheWxvYWRfb2Zmc2V0O1xuIFxuIFx0LyogZmFsbCBiYWNrIHRvIGRvIHByZWRlZmluZWQgdGFpbCBjYWxsICovXG4gXHRpZiAoYXJncyA9PSBOVUxMKVxuQEAgLTQ0OSw3ICYjNDM7NTIzLDYgQEAgc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpXG4gXG4gXHQvKiBzZXQgdXAgcGF5bG9hZCBmb3Igb3V0cHV0ICovXG4gXHRwYXlsb2FkICAgICAgICA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2YmVhdXR5X3BheWxvYWRfZW50ZXJfbWFwLCBcdTAwMjZ6ZXJvKTtcbi1cdHBheWxvYWRfb2Zmc2V0ID0gKHZvaWQgKilcdTAwMjZwYXlsb2FkLVx1MDAzZWF1Z19hcmdzO1xuIFxuIFx0aWYgKGJlYXV0eV9tYXAgPT0gTlVMTCB8fCBwYXlsb2FkID09IE5VTEwpXG4gXHRcdHJldHVybiAxO1xuQEAgLTQ1Nyw2MSAmIzQzOzUzMCwyOSBAQCBzdGF0aWMgaW50IGF1Z21lbnRfc3lzX2VudGVyKHZvaWQgKmN0eCwgc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncylcbiBcdC8qIGNvcHkgdGhlIHN5c19lbnRlciBoZWFkZXIsIHdoaWNoIGhhcyB0aGUgc3lzY2FsbF9uciAqL1xuIFx0X19idWlsdGluX21lbWNweShcdTAwMjZwYXlsb2FkLVx1MDAzZWFyZ3MsIGFyZ3MsIHNpemVvZihzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzKSk7XG4gXG4tXHQvKlxuLVx0ICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZVxuLVx0ICogdmFsdWUgaW4gdGhlIGJlYXV0eV9tYXAuIFRoaXMgaXMgdGhlIHJlbGF0aW9uIG9mIHBhcmFtZXRlciB0eXBlIGFuZCBpdHMgY29ycmVzcG9uZGluZ1xuLVx0ICogdmFsdWUgaW4gdGhlIGJlYXV0eSBtYXAsIGFuZCBob3cgbWFueSBieXRlcyB3ZSByZWFkIGV2ZW50dWFsbHk6XG4tXHQgKlxuLVx0ICogc3RyaW5nOiAxXHRcdFx0ICAgICAgLVx1MDAzZSBzaXplIG9mIHN0cmluZ1xuLVx0ICogc3RydWN0OiBzaXplIG9mIHN0cnVjdFx0ICAgICAgLVx1MDAzZSBzaXplIG9mIHN0cnVjdFxuLVx0ICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtXHUwMDNlIHZhbHVlIG9mIHBhaXJlZCBsZW4gKG1heGltdW06IFRSQUNFX0FVR19NQVhfQlVGKVxuLVx0ICovXG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgNjsgaSYjNDM7JiM0MzspIHtcbi1cdFx0YXJnID0gKHZvaWQgKilhcmdzLVx1MDAzZWFyZ3NbaV07XG4tXHRcdGF1Z21lbnRlZCA9IGZhbHNlO1xuLVx0XHRzaXplID0gYmVhdXR5X21hcFtpXTtcbi1cdFx0YXVnX3NpemUgPSBzaXplOyAvKiBzaXplIG9mIHRoZSBhdWdtZW50ZWQgZGF0YSByZWFkIGZyb20gdXNlciBzcGFjZSAqL1xuLVxuLVx0XHRpZiAoc2l6ZSA9PSAwIHx8IGFyZyA9PSBOVUxMKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRpZiAoc2l6ZSA9PSAxKSB7IC8qIHN0cmluZyAqL1xuLVx0XHRcdGF1Z19zaXplID0gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cdTAwM2V2YWx1ZSwgdmFsdWVfc2l6ZSwgYXJnKTtcbi1cdFx0XHQvKiBtaW5pbXVtIG9mIDAgdG8gcGFzcyB0aGUgdmVyaWZpZXIgKi9cbi1cdFx0XHRpZiAoYXVnX3NpemUgXHUwMDNjIDApXG4tXHRcdFx0XHRhdWdfc2l6ZSA9IDA7XG4tXG4tXHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIGlmIChzaXplIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzYz0gdmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi9cbi1cdFx0XHRpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cdTAwM2V2YWx1ZSwgc2l6ZSwgYXJnKSlcbi1cdFx0XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4tXHRcdH0gZWxzZSBpZiAoKGludClzaXplIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gLTYpIHsgLyogYnVmZmVyICovXG4tXHRcdFx0aW5kZXggPSAtKHNpemUgJiM0MzsgMSk7XG4tXHRcdFx0YmFycmllcl92YXIoaW5kZXgpOyAvLyBQcmV2ZW50IGNsYW5nIChub3RpY2VkIHdpdGggdjE4KSBmcm9tIHJlbW92aW5nIHRoZSBcdTAwMjY9IDcgdHJpY2suXG4tXHRcdFx0aW5kZXggXHUwMDI2PSA3O1x0ICAgIC8vIFNhdGlzZnkgdGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIHRoZSB2ZXJpZmllciBpbiBzb21lIGtlcm5lbHMuXG4tXHRcdFx0YXVnX3NpemUgPSBhcmdzLVx1MDAzZWFyZ3NbaW5kZXhdIFx1MDAzZSBUUkFDRV9BVUdfTUFYX0JVRiA/IFRSQUNFX0FVR19NQVhfQlVGIDogYXJncy1cdTAwM2VhcmdzW2luZGV4XTtcbi1cbi1cdFx0XHRpZiAoYXVnX3NpemUgXHUwMDNlIDApIHtcbi1cdFx0XHRcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXZhbHVlLCBhdWdfc2l6ZSwgYXJnKSlcbi1cdFx0XHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbiYjNDM7XHRpZiAoYnBmX2tzeW1fZXhpc3RzKGJwZl9pdGVyX251bV9uZXcpKSB7XG4mIzQzO1x0XHRicGZfZm9yKGksIDAsIDYpIHtcbiYjNDM7XHRcdFx0d3JpdHRlbiA9IGF1Z21lbnRfYXJnKGFyZ3MsIGksIGJlYXV0eV9tYXAsIHBheWxvYWQsIG91dHB1dCk7XG4mIzQzO1x0XHRcdGlmICh3cml0dGVuIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0XHRpZiAod3JpdHRlbiBcdTAwM2UgMCkge1xuJiM0MztcdFx0XHRcdG91dHB1dCAmIzQzOz0gd3JpdHRlbjtcbiYjNDM7XHRcdFx0XHQvKiBndWlkZSB0aGUgdmVyaWZpZXIgdG8gZm9yZ2V0IHJhbmdlIG9mIGBvdXRwdXRgLCB3aGljaFxuJiM0MztcdFx0XHRcdCAqIGhlbHBzIHRvIHByb3ZlIGNvbnZlcmdlbmNlIG9mIHRoZSBsb29wXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0b3V0cHV0ICYjNDM7PSBaRVJPO1xuJiM0MztcdFx0XHRcdGRvX291dHB1dCA9IHRydWU7XG4gXHRcdFx0fVxuIFx0XHR9XG4tXG4tXHRcdC8qIEF1Z21lbnRlZCBkYXRhIHNpemUgaXMgbGltaXRlZCB0byBzaXplb2YoYXVnbWVudGVkX2FyZy1cdTAwM2V1bm5hbWVkIHVuaW9uIHdpdGggdmFsdWUgZmllbGQpICovXG4tXHRcdGlmIChhdWdfc2l6ZSBcdTAwM2UgdmFsdWVfc2l6ZSlcbi1cdFx0XHRhdWdfc2l6ZSA9IHZhbHVlX3NpemU7XG4tXG4tXHRcdC8qIHdyaXRlIGRhdGEgdG8gcGF5bG9hZCAqL1xuLVx0XHRpZiAoYXVnbWVudGVkKSB7XG4tXHRcdFx0aW50IHdyaXR0ZW4gPSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpICYjNDM7IGF1Z19zaXplO1xuLVxuLVx0XHRcdGlmICh3cml0dGVuIFx1MDAzYyAwIHx8IHdyaXR0ZW4gXHUwMDNlIHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpXG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDY7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHdyaXR0ZW4gPSBhdWdtZW50X2FyZyhhcmdzLCBpLCBiZWF1dHlfbWFwLCBwYXlsb2FkLCBvdXRwdXQpO1xuJiM0MztcdFx0XHRpZiAod3JpdHRlbiBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiAxO1xuLVxuLVx0XHRcdCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNlc2l6ZSA9IGF1Z19zaXplO1xuLVx0XHRcdG91dHB1dCAmIzQzOz0gd3JpdHRlbjtcbi1cdFx0XHRwYXlsb2FkX29mZnNldCAmIzQzOz0gd3JpdHRlbjtcbi1cdFx0XHRkb19vdXRwdXQgPSB0cnVlO1xuJiM0MztcdFx0XHRpZiAod3JpdHRlbiBcdTAwM2UgMCkge1xuJiM0MztcdFx0XHRcdG91dHB1dCAmIzQzOz0gd3JpdHRlbjtcbiYjNDM7XHRcdFx0XHRkb19vdXRwdXQgPSB0cnVlO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBwZXJmIHRvb2wgKHRvb2xzL3BlcmYvKS4gSXQgZG9lcyBub3QgYWx0ZXIgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIGFuZCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGRpcmVjdGx5IGZ1enplZCBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOGM0YzMwOGM4M2RhNzEzODYxNGM2NTliOWEzOGFjYWMxZTNkNWJmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMyAxMjowMjowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jIGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmMKaW5kZXggMmE2ZTYxODY0ZWUwMTUuLjYwYmFiYzA2ZjM4MTJlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYwpAQCAtNDI5LDE1ICYjNDM7NDI5LDg5IEBAIHN0YXRpYyBib29sIHBpZF9maWx0ZXJfX2hhcyhzdHJ1Y3QgcGlkc19maWx0ZXJlZCAqcGlkcywgcGlkX3QgcGlkKQogCXJldHVybiBicGZfbWFwX2xvb2t1cF9lbGVtKHBpZHMsICZhbXA7cGlkKSAhPSBOVUxMOwogfQogCiYjNDM7dTY0IFpFUk8gPSAwOwomIzQzOwomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZQomIzQzOyAqIHZhbHVlIGluIHRoZSBiZWF1dHlfbWFwLiBUaGlzIGlzIHRoZSByZWxhdGlvbiBvZiBwYXJhbWV0ZXIgdHlwZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcKJiM0MzsgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5IG1hcCwgYW5kIGhvdyBtYW55IGJ5dGVzIHdlIHJlYWQgZXZlbnR1YWxseToKJiM0MzsgKgomIzQzOyAqIHN0cmluZzogMQkJCSAgICAgIC0mZ3Q7IHNpemUgb2Ygc3RyaW5nCiYjNDM7ICogc3RydWN0OiBzaXplIG9mIHN0cnVjdAkgICAgICAtJmd0OyBzaXplIG9mIHN0cnVjdAomIzQzOyAqIGJ1ZmZlcjogLTEgKiAoaW5kZXggb2YgcGFpcmVkIGxlbikgLSZndDsgdmFsdWUgb2YgcGFpcmVkIGxlbiAobWF4aW11bTogVFJBQ0VfQVVHX01BWF9CVUYpCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgYXVnbWVudF9hcmcoc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncywgaW50IGksCiYjNDM7CQkJICAgICAgdW5zaWduZWQgaW50ICpiZWF1dHlfbWFwLAomIzQzOwkJCSAgICAgIHN0cnVjdCBiZWF1dHlfcGF5bG9hZF9lbnRlciAqcGF5bG9hZCwgdTY0IG9mZnNldCkKJiM0Mzt7CiYjNDM7CWludCBpbmRleCwgdmFsdWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykgLSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpOwomIzQzOwlzNjQgYXVnX3NpemUsIHNpemU7CiYjNDM7CWJvb2wgYXVnbWVudGVkOwomIzQzOwl2b2lkICphcmcsICpwYXlsb2FkX29mZnNldDsKJiM0MzsKJiM0MzsJYXJnID0gKHZvaWQgKilhcmdzLSZndDthcmdzW2ldOwomIzQzOwlhdWdtZW50ZWQgPSBmYWxzZTsKJiM0MzsJc2l6ZSA9IGJlYXV0eV9tYXBbaV07CiYjNDM7CWF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi8KJiM0MzsKJiM0MzsJaWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBib3VuZHMgY2hlY2sgZm9yIHRoZSB2ZXJpZmllciAqLwomIzQzOwlpZiAob2Zmc2V0ICZndDsgc2l6ZW9mKHBheWxvYWQtJmd0O2F1Z19hcmdzKSAtIHNpemVvZihwYXlsb2FkLSZndDthdWdfYXJnc1swXSkpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CWJhcnJpZXJfdmFyKG9mZnNldCk7CiYjNDM7CXBheWxvYWRfb2Zmc2V0ID0gKHZvaWQgKikmYW1wO3BheWxvYWQtJmd0O2F1Z19hcmdzICYjNDM7IG9mZnNldDsKJiM0MzsKJiM0MzsJaWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi8KJiM0MzsJCWF1Z19zaXplID0gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS0mZ3Q7dmFsdWUsIHZhbHVlX3NpemUsIGFyZyk7CiYjNDM7CQkvKiBtaW5pbXVtIG9mIDAgdG8gcGFzcyB0aGUgdmVyaWZpZXIgKi8KJiM0MzsJCWlmIChhdWdfc2l6ZSAmbHQ7IDApCiYjNDM7CQkJYXVnX3NpemUgPSAwOwomIzQzOwomIzQzOwkJYXVnbWVudGVkID0gdHJ1ZTsKJiM0MzsJfSBlbHNlIGlmIChzaXplICZndDsgMCAmYW1wOyZhbXA7IHNpemUgJmx0Oz0gdmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi8KJiM0MzsJCWlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLSZndDt2YWx1ZSwgc2l6ZSwgYXJnKSkKJiM0MzsJCQlhdWdtZW50ZWQgPSB0cnVlOwomIzQzOwl9IGVsc2UgaWYgKHNpemUgJmx0OyAwICZhbXA7JmFtcDsgc2l6ZSAmZ3Q7PSAtNikgeyAvKiBidWZmZXIgKi8KJiM0MzsJCWluZGV4ID0gLShzaXplICYjNDM7IDEpOwomIzQzOwkJYmFycmllcl92YXIoaW5kZXgpOyAvLyBQcmV2ZW50IGNsYW5nIChub3RpY2VkIHdpdGggdjE4KSBmcm9tIHJlbW92aW5nIHRoZSAmYW1wOz0gNyB0cmljay4KJiM0MzsJCWluZGV4ICZhbXA7PSA3OwkgICAgLy8gU2F0aXNmeSB0aGUgYm91bmRzIGNoZWNraW5nIHdpdGggdGhlIHZlcmlmaWVyIGluIHNvbWUga2VybmVscy4KJiM0MzsJCWF1Z19zaXplID0gYXJncy0mZ3Q7YXJnc1tpbmRleF07CiYjNDM7CQlpZiAoYXVnX3NpemUgJmd0OyBUUkFDRV9BVUdfTUFYX0JVRikKJiM0MzsJCQlhdWdfc2l6ZSA9IFRSQUNFX0FVR19NQVhfQlVGOwomIzQzOwomIzQzOwkJaWYgKGF1Z19zaXplICZndDsgMCkgewomIzQzOwkJCWlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLSZndDt2YWx1ZSwgYXVnX3NpemUsIGFyZykpCiYjNDM7CQkJCWF1Z21lbnRlZCA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQXVnbWVudGVkIGRhdGEgc2l6ZSBpcyBsaW1pdGVkIHRvIHNpemVvZihhdWdtZW50ZWRfYXJnLSZndDt1bm5hbWVkIHVuaW9uIHdpdGggdmFsdWUgZmllbGQpICovCiYjNDM7CWlmIChhdWdfc2l6ZSAmZ3Q7IHZhbHVlX3NpemUpCiYjNDM7CQlhdWdfc2l6ZSA9IHZhbHVlX3NpemU7CiYjNDM7CiYjNDM7CS8qIHdyaXRlIGRhdGEgdG8gcGF5bG9hZCAqLwomIzQzOwlpZiAoYXVnbWVudGVkKSB7CiYjNDM7CQlpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgJiM0MzsgYXVnX3NpemU7CiYjNDM7CiYjNDM7CQlpZiAod3JpdHRlbiAmbHQ7IDAgfHwgd3JpdHRlbiAmZ3Q7IHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpCiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwkJKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS0mZ3Q7c2l6ZSA9IGF1Z19zaXplOwomIzQzOwkJcmV0dXJuIHdyaXR0ZW47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpCiB7Ci0JYm9vbCBhdWdtZW50ZWQsIGRvX291dHB1dCA9IGZhbHNlOwotCWludCB6ZXJvID0gMCwgaW5kZXgsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTsKJiM0MzsJYm9vbCBkb19vdXRwdXQgPSBmYWxzZTsKJiM0MzsJaW50IGksIHplcm8gPSAwLCB3cml0dGVuOwogCXU2NCBvdXRwdXQgPSAwOyAvKiBoYXMgdG8gYmUgdTY0LCBvdGhlcndpc2UgaXQgd29uJiMzOTt0IHBhc3MgdGhlIHZlcmlmaWVyICovCi0JczY0IGF1Z19zaXplLCBzaXplOwogCXVuc2lnbmVkIGludCBuciwgKmJlYXV0eV9tYXA7CiAJc3RydWN0IGJlYXV0eV9wYXlsb2FkX2VudGVyICpwYXlsb2FkOwotCXZvaWQgKmFyZywgKnBheWxvYWRfb2Zmc2V0OwogCiAJLyogZmFsbCBiYWNrIHRvIGRvIHByZWRlZmluZWQgdGFpbCBjYWxsICovCiAJaWYgKGFyZ3MgPT0gTlVMTCkKQEAgLTQ0OSw3ICYjNDM7NTIzLDYgQEAgc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpCiAKIAkvKiBzZXQgdXAgcGF5bG9hZCBmb3Igb3V0cHV0ICovCiAJcGF5bG9hZCAgICAgICAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7YmVhdXR5X3BheWxvYWRfZW50ZXJfbWFwLCAmYW1wO3plcm8pOwotCXBheWxvYWRfb2Zmc2V0ID0gKHZvaWQgKikmYW1wO3BheWxvYWQtJmd0O2F1Z19hcmdzOwogCiAJaWYgKGJlYXV0eV9tYXAgPT0gTlVMTCB8fCBwYXlsb2FkID09IE5VTEwpCiAJCXJldHVybiAxOwpAQCAtNDU3LDYxICYjNDM7NTMwLDI5IEBAIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKQogCS8qIGNvcHkgdGhlIHN5c19lbnRlciBoZWFkZXIsIHdoaWNoIGhhcyB0aGUgc3lzY2FsbF9uciAqLwogCV9fYnVpbHRpbl9tZW1jcHkoJmFtcDtwYXlsb2FkLSZndDthcmdzLCBhcmdzLCBzaXplb2Yoc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncykpOwogCi0JLyoKLQkgKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIGFyZ3VtZW50IGFuZCBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdXNlciBzcGFjZSwgdXNpbmcgdGhlCi0JICogdmFsdWUgaW4gdGhlIGJlYXV0eV9tYXAuIFRoaXMgaXMgdGhlIHJlbGF0aW9uIG9mIHBhcmFtZXRlciB0eXBlIGFuZCBpdHMgY29ycmVzcG9uZGluZwotCSAqIHZhbHVlIGluIHRoZSBiZWF1dHkgbWFwLCBhbmQgaG93IG1hbnkgYnl0ZXMgd2UgcmVhZCBldmVudHVhbGx5OgotCSAqCi0JICogc3RyaW5nOiAxCQkJICAgICAgLSZndDsgc2l6ZSBvZiBzdHJpbmcKLQkgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0CSAgICAgIC0mZ3Q7IHNpemUgb2Ygc3RydWN0Ci0JICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtJmd0OyB2YWx1ZSBvZiBwYWlyZWQgbGVuIChtYXhpbXVtOiBUUkFDRV9BVUdfTUFYX0JVRikKLQkgKi8KLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IDY7IGkmIzQzOyYjNDM7KSB7Ci0JCWFyZyA9ICh2b2lkICopYXJncy0mZ3Q7YXJnc1tpXTsKLQkJYXVnbWVudGVkID0gZmFsc2U7Ci0JCXNpemUgPSBiZWF1dHlfbWFwW2ldOwotCQlhdWdfc2l6ZSA9IHNpemU7IC8qIHNpemUgb2YgdGhlIGF1Z21lbnRlZCBkYXRhIHJlYWQgZnJvbSB1c2VyIHNwYWNlICovCi0KLQkJaWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChzaXplID09IDEpIHsgLyogc3RyaW5nICovCi0JCQlhdWdfc2l6ZSA9IGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktJmd0O3ZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpOwotCQkJLyogbWluaW11bSBvZiAwIHRvIHBhc3MgdGhlIHZlcmlmaWVyICovCi0JCQlpZiAoYXVnX3NpemUgJmx0OyAwKQotCQkJCWF1Z19zaXplID0gMDsKLQotCQkJYXVnbWVudGVkID0gdHJ1ZTsKLQkJfSBlbHNlIGlmIChzaXplICZndDsgMCAmYW1wOyZhbXA7IHNpemUgJmx0Oz0gdmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi8KLQkJCWlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLSZndDt2YWx1ZSwgc2l6ZSwgYXJnKSkKLQkJCQlhdWdtZW50ZWQgPSB0cnVlOwotCQl9IGVsc2UgaWYgKChpbnQpc2l6ZSAmbHQ7IDAgJmFtcDsmYW1wOyBzaXplICZndDs9IC02KSB7IC8qIGJ1ZmZlciAqLwotCQkJaW5kZXggPSAtKHNpemUgJiM0MzsgMSk7Ci0JCQliYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlICZhbXA7PSA3IHRyaWNrLgotCQkJaW5kZXggJmFtcDs9IDc7CSAgICAvLyBTYXRpc2Z5IHRoZSBib3VuZHMgY2hlY2tpbmcgd2l0aCB0aGUgdmVyaWZpZXIgaW4gc29tZSBrZXJuZWxzLgotCQkJYXVnX3NpemUgPSBhcmdzLSZndDthcmdzW2luZGV4XSAmZ3Q7IFRSQUNFX0FVR19NQVhfQlVGID8gVFJBQ0VfQVVHX01BWF9CVUYgOiBhcmdzLSZndDthcmdzW2luZGV4XTsKLQotCQkJaWYgKGF1Z19zaXplICZndDsgMCkgewotCQkJCWlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLSZndDt2YWx1ZSwgYXVnX3NpemUsIGFyZykpCi0JCQkJCWF1Z21lbnRlZCA9IHRydWU7CiYjNDM7CWlmIChicGZfa3N5bV9leGlzdHMoYnBmX2l0ZXJfbnVtX25ldykpIHsKJiM0MzsJCWJwZl9mb3IoaSwgMCwgNikgewomIzQzOwkJCXdyaXR0ZW4gPSBhdWdtZW50X2FyZyhhcmdzLCBpLCBiZWF1dHlfbWFwLCBwYXlsb2FkLCBvdXRwdXQpOwomIzQzOwkJCWlmICh3cml0dGVuICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIDE7CiYjNDM7CQkJaWYgKHdyaXR0ZW4gJmd0OyAwKSB7CiYjNDM7CQkJCW91dHB1dCAmIzQzOz0gd3JpdHRlbjsKJiM0MzsJCQkJLyogZ3VpZGUgdGhlIHZlcmlmaWVyIHRvIGZvcmdldCByYW5nZSBvZiBgb3V0cHV0YCwgd2hpY2gKJiM0MzsJCQkJICogaGVscHMgdG8gcHJvdmUgY29udmVyZ2VuY2Ugb2YgdGhlIGxvb3AKJiM0MzsJCQkJICovCiYjNDM7CQkJCW91dHB1dCAmIzQzOz0gWkVSTzsKJiM0MzsJCQkJZG9fb3V0cHV0ID0gdHJ1ZTsKIAkJCX0KIAkJfQotCi0JCS8qIEF1Z21lbnRlZCBkYXRhIHNpemUgaXMgbGltaXRlZCB0byBzaXplb2YoYXVnbWVudGVkX2FyZy0mZ3Q7dW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqLwotCQlpZiAoYXVnX3NpemUgJmd0OyB2YWx1ZV9zaXplKQotCQkJYXVnX3NpemUgPSB2YWx1ZV9zaXplOwotCi0JCS8qIHdyaXRlIGRhdGEgdG8gcGF5bG9hZCAqLwotCQlpZiAoYXVnbWVudGVkKSB7Ci0JCQlpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgJiM0MzsgYXVnX3NpemU7Ci0KLQkJCWlmICh3cml0dGVuICZsdDsgMCB8fCB3cml0dGVuICZndDsgc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSkKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyA2OyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXdyaXR0ZW4gPSBhdWdtZW50X2FyZyhhcmdzLCBpLCBiZWF1dHlfbWFwLCBwYXlsb2FkLCBvdXRwdXQpOwomIzQzOwkJCWlmICh3cml0dGVuICZsdDsgMCkKIAkJCQlyZXR1cm4gMTsKLQotCQkJKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS0mZ3Q7c2l6ZSA9IGF1Z19zaXplOwotCQkJb3V0cHV0ICYjNDM7PSB3cml0dGVuOwotCQkJcGF5bG9hZF9vZmZzZXQgJiM0Mzs9IHdyaXR0ZW47Ci0JCQlkb19vdXRwdXQgPSB0cnVlOwomIzQzOwkJCWlmICh3cml0dGVuICZndDsgMCkgewomIzQzOwkJCQlvdXRwdXQgJiM0Mzs9IHdyaXR0ZW47CiYjNDM7CQkJCWRvX291dHB1dCA9IHRydWU7CiYjNDM7CQkJfQogCQl9CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwODcKCQkJCQkJCW91dHB1dDogODEKCQkJCQkJCXRob3VnaHRzOiA2NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBXb3J0aEZ1enppbmc9ZmFsc2UqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBjaGFuZ2VzIHRvIGB0b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY2AuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBhbnkgbW9kaWZpY2F0aW9uIHRvIGEgQlBGIHByb2dyYW0gbWlnaHQgd2FycmFudCBjbG9zZXIgaW5zcGVjdGlvbiwgZ2l2ZW4gaXRzIGluLWtlcm5lbCBleGVjdXRpb24uIEhvd2V2ZXIsIHRoaXMgaXMgbG9jYXRlZCB3aXRoaW4gdGhlIGB0b29scy9wZXJmL2AgZGlyZWN0b3J5LCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gYmUgc3VyZS4KClRoaXMgaXNuJiMzOTt0IGNvcmUga2VybmVsIGNvZGUsIG5vdCBkcml2ZXJzIG9yIGFyY2hpdGVjdHVyZXMuIEl0JiMzOTtzIHVzZXItc3BhY2UhIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYSBCUEYgc2tlbGV0b24gdXNlZCBieSB0aGUgYHBlcmZgIHRvb2wuIFRoZXNlIEJQRiBwcm9ncmFtcyBhcmUgY29tcGlsZWQgYW5kICpsb2FkZWQgYnkqIGBwZXJmYCwgYW5kIGV4ZWN1dGVkICp3aXRoaW4qIHRoZSBrZXJuZWwgd2hlbiBjYWxsZWQgYnkgYHBlcmZgLCBidXQgdGhpcyBpc24mIzM5O3Qga2VybmVsIGNvZGUgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLCBub3Qga2VybmVsIG1vZHVsZXMuCgpTeXprYWxsZXIgaXMgdGhlIGZ1enplciB0aGF0IEkmIzM5O20gZm9jdXNlZCBvbi4gU3l6a2FsbGVyJiMzOTtzIGpvYiBpcyBmdXp6aW5nIHRoZSBrZXJuZWwgdmlhIHN5c2NhbGxzLiBJdCBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgaW50ZXJhY3Qgd2l0aCBvciBkaXJlY3RseSBmdXp6IHRvb2xzIGxpa2UgYHBlcmZgIG9yIGl0cyBCUEYgcHJvZ3JhbXMsIHVubGVzcyBgcGVyZmAgaXMgZXhwbGljaXRseSBiZWluZyBydW4gYXMgcGFydCBvZiB0aGUgdGVzdC4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IHR5cGljYWxseSBsb2FkIHRoZXNlIHNwZWNpZmljIEJQRiBza2VsZXRvbnMuCgpJJiMzOTt2ZSBjaGVja2VkIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZmlsZXMgaW1wYWN0ZWQgYnkgdGhlIHBhdGNoLCBqdXN0IHRvIGJlIHN1cmUuIFRoZSBhbnN3ZXIgaXMgbm87IG9ubHkgdGhpcyBvbmUgZmlsZSBpcyBjaGFuZ2VkLgoKTm93LCBsZXQgbWUgZ28gdGhyb3VnaCB0aGUgcnVsZXMuIFRoZSBydWxlcyBkb24mIzM5O3QgZXhwbGljaXRseSBzYXkgJiMzNDt0b29scy8mIzM0OyBidXQgdGhlIHBhdHRlcm4gb2YgJiMzNDtEb2N1bWVudGF0aW9uLyYjMzQ7LCAmIzM0O0tjb25maWcmIzM0OywgY29tbWVudHMsIGxvZ2dpbmcsIGNvbnN0YW50cywgdW5yZWFjaGFibGUgY29kZSwgZXRjLiBhbGwgcG9pbnQgYXdheSBmcm9tIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkuIENoYW5nZXMgaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeSBhcmUgYWxzbyBnZW5lcmFsbHkgdXNlciBzcGFjZSB0b29scy4KCkJhc2VkIG9uIHRoZSBydWxlcywgYW5kIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSwgdGhpcyBpcyBhIG1vZGlmaWNhdGlvbiB0byBhIHVzZXItc3BhY2UgdG9vbCAocGVyZikgYW5kIGl0cyBhc3NvY2lhdGVkIEJQRiBwcm9ncmFtLiBTeXprYWxsZXIgKmRvZXMgbm90KiBmdXp6IHRoZXNlIHByb2dyYW1zLCBzaW5jZSBpdCBpcyBhIGtlcm5lbCBzeXNjYWxsIGZ1enplci4gSXQmIzM5O3Mgbm90IGNvcmUga2VybmVsLCBhbmQgaXQmIzM5O3Mgbm90IGJlaW5nIGZ1enplZC4gVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBub3Qgd29ydGggZnV6emluZy4gSSYjMzk7bGwgZmxhZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgZXhwbGFpbiB0aGF0IGl0JiMzOTtzIGEgY2hhbmdlIHRvIHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sIGFuZCBhc3NvY2lhdGVkIEJQRiBwcm9ncmFtcy4gSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AgZGlyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBwZXJmIHRvb2wgKHRvb2xzL3BlcmYvKS4gSXQgZG9lcyBub3QgYWx0ZXIgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIGFuZCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGRpcmVjdGx5IGZ1enplZCBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBwZXJmIHRvb2wgKHRvb2xzL3BlcmYvKS4gSXQgZG9lcyBub3QgYWx0ZXIgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIGFuZCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGRpcmVjdGx5IGZ1enplZCBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MDI6MTEuMjI3Nzg2MTExWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MDIwMTI1MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSBCUEYgcHJvZ3JhbSB1c2VkIGJ5IHRoZSB1c2VyLXNwYWNlIHBlcmYgdG9vbCAodG9vbHMvcGVyZi8pLiBJdCBkb2VzIG5vdCBhbHRlciBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgYW5kIGlzIG5vdCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZGlyZWN0bHkgZnV6emVkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjAyOjExLjIyNzc5MzQxMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkzMTEzMTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYThjNGMzMDhjODNkYTcxMzg2MTRjNjU5YjlhMzhhY2FjMWUzZDViZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzIDEyOjAyOjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jIGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcXG5pbmRleCAyYTZlNjE4NjRlZTAxNS4uNjBiYWJjMDZmMzgxMmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcXG4rKysgYi90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY1xcbkBAIC00MjksMTUgKzQyOSw4OSBAQCBzdGF0aWMgYm9vbCBwaWRfZmlsdGVyX19oYXMoc3RydWN0IHBpZHNfZmlsdGVyZWQgKnBpZHMsIHBpZF90IHBpZClcXG4gXFx0cmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0ocGlkcywgXFx1MDAyNnBpZCkgIT0gTlVMTDtcXG4gfVxcbiBcXG4rdTY0IFpFUk8gPSAwO1xcbitcXG4rLypcXG4rICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZVxcbisgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5X21hcC4gVGhpcyBpcyB0aGUgcmVsYXRpb24gb2YgcGFyYW1ldGVyIHR5cGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nXFxuKyAqIHZhbHVlIGluIHRoZSBiZWF1dHkgbWFwLCBhbmQgaG93IG1hbnkgYnl0ZXMgd2UgcmVhZCBldmVudHVhbGx5OlxcbisgKlxcbisgKiBzdHJpbmc6IDFcXHRcXHRcXHQgICAgICAtXFx1MDAzZSBzaXplIG9mIHN0cmluZ1xcbisgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0XFx0ICAgICAgLVxcdTAwM2Ugc2l6ZSBvZiBzdHJ1Y3RcXG4rICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtXFx1MDAzZSB2YWx1ZSBvZiBwYWlyZWQgbGVuIChtYXhpbXVtOiBUUkFDRV9BVUdfTUFYX0JVRilcXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IGF1Z21lbnRfYXJnKHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MsIGludCBpLFxcbitcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgKmJlYXV0eV9tYXAsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBiZWF1dHlfcGF5bG9hZF9lbnRlciAqcGF5bG9hZCwgdTY0IG9mZnNldClcXG4re1xcbitcXHRpbnQgaW5kZXgsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTtcXG4rXFx0czY0IGF1Z19zaXplLCBzaXplO1xcbitcXHRib29sIGF1Z21lbnRlZDtcXG4rXFx0dm9pZCAqYXJnLCAqcGF5bG9hZF9vZmZzZXQ7XFxuK1xcbitcXHRhcmcgPSAodm9pZCAqKWFyZ3MtXFx1MDAzZWFyZ3NbaV07XFxuK1xcdGF1Z21lbnRlZCA9IGZhbHNlO1xcbitcXHRzaXplID0gYmVhdXR5X21hcFtpXTtcXG4rXFx0YXVnX3NpemUgPSBzaXplOyAvKiBzaXplIG9mIHRoZSBhdWdtZW50ZWQgZGF0YSByZWFkIGZyb20gdXNlciBzcGFjZSAqL1xcbitcXG4rXFx0aWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBib3VuZHMgY2hlY2sgZm9yIHRoZSB2ZXJpZmllciAqL1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwM2Ugc2l6ZW9mKHBheWxvYWQtXFx1MDAzZWF1Z19hcmdzKSAtIHNpemVvZihwYXlsb2FkLVxcdTAwM2VhdWdfYXJnc1swXSkpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0YmFycmllcl92YXIob2Zmc2V0KTtcXG4rXFx0cGF5bG9hZF9vZmZzZXQgPSAodm9pZCAqKVxcdTAwMjZwYXlsb2FkLVxcdTAwM2VhdWdfYXJncyArIG9mZnNldDtcXG4rXFxuK1xcdGlmIChzaXplID09IDEpIHsgLyogc3RyaW5nICovXFxuK1xcdFxcdGF1Z19zaXplID0gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cXHUwMDNldmFsdWUsIHZhbHVlX3NpemUsIGFyZyk7XFxuK1xcdFxcdC8qIG1pbmltdW0gb2YgMCB0byBwYXNzIHRoZSB2ZXJpZmllciAqL1xcbitcXHRcXHRpZiAoYXVnX3NpemUgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRhdWdfc2l6ZSA9IDA7XFxuK1xcbitcXHRcXHRhdWdtZW50ZWQgPSB0cnVlO1xcbitcXHR9IGVsc2UgaWYgKHNpemUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzYz0gdmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi9cXG4rXFx0XFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXFx1MDAzZXZhbHVlLCBzaXplLCBhcmcpKVxcbitcXHRcXHRcXHRhdWdtZW50ZWQgPSB0cnVlO1xcbitcXHR9IGVsc2UgaWYgKHNpemUgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzZT0gLTYpIHsgLyogYnVmZmVyICovXFxuK1xcdFxcdGluZGV4ID0gLShzaXplICsgMSk7XFxuK1xcdFxcdGJhcnJpZXJfdmFyKGluZGV4KTsgLy8gUHJldmVudCBjbGFuZyAobm90aWNlZCB3aXRoIHYxOCkgZnJvbSByZW1vdmluZyB0aGUgXFx1MDAyNj0gNyB0cmljay5cXG4rXFx0XFx0aW5kZXggXFx1MDAyNj0gNztcXHQgICAgLy8gU2F0aXNmeSB0aGUgYm91bmRzIGNoZWNraW5nIHdpdGggdGhlIHZlcmlmaWVyIGluIHNvbWUga2VybmVscy5cXG4rXFx0XFx0YXVnX3NpemUgPSBhcmdzLVxcdTAwM2VhcmdzW2luZGV4XTtcXG4rXFx0XFx0aWYgKGF1Z19zaXplIFxcdTAwM2UgVFJBQ0VfQVVHX01BWF9CVUYpXFxuK1xcdFxcdFxcdGF1Z19zaXplID0gVFJBQ0VfQVVHX01BWF9CVUY7XFxuK1xcbitcXHRcXHRpZiAoYXVnX3NpemUgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdFxcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVxcdTAwM2V2YWx1ZSwgYXVnX3NpemUsIGFyZykpXFxuK1xcdFxcdFxcdFxcdGF1Z21lbnRlZCA9IHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogQXVnbWVudGVkIGRhdGEgc2l6ZSBpcyBsaW1pdGVkIHRvIHNpemVvZihhdWdtZW50ZWRfYXJnLVxcdTAwM2V1bm5hbWVkIHVuaW9uIHdpdGggdmFsdWUgZmllbGQpICovXFxuK1xcdGlmIChhdWdfc2l6ZSBcXHUwMDNlIHZhbHVlX3NpemUpXFxuK1xcdFxcdGF1Z19zaXplID0gdmFsdWVfc2l6ZTtcXG4rXFxuK1xcdC8qIHdyaXRlIGRhdGEgdG8gcGF5bG9hZCAqL1xcbitcXHRpZiAoYXVnbWVudGVkKSB7XFxuK1xcdFxcdGludCB3cml0dGVuID0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKSArIGF1Z19zaXplO1xcbitcXG4rXFx0XFx0aWYgKHdyaXR0ZW4gXFx1MDAzYyAwIHx8IHdyaXR0ZW4gXFx1MDAzZSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpKVxcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRcXHQoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVxcdTAwM2VzaXplID0gYXVnX3NpemU7XFxuK1xcdFxcdHJldHVybiB3cml0dGVuO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpXFxuIHtcXG4tXFx0Ym9vbCBhdWdtZW50ZWQsIGRvX291dHB1dCA9IGZhbHNlO1xcbi1cXHRpbnQgemVybyA9IDAsIGluZGV4LCB2YWx1ZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSAtIG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSk7XFxuK1xcdGJvb2wgZG9fb3V0cHV0ID0gZmFsc2U7XFxuK1xcdGludCBpLCB6ZXJvID0gMCwgd3JpdHRlbjtcXG4gXFx0dTY0IG91dHB1dCA9IDA7IC8qIGhhcyB0byBiZSB1NjQsIG90aGVyd2lzZSBpdCB3b24ndCBwYXNzIHRoZSB2ZXJpZmllciAqL1xcbi1cXHRzNjQgYXVnX3NpemUsIHNpemU7XFxuIFxcdHVuc2lnbmVkIGludCBuciwgKmJlYXV0eV9tYXA7XFxuIFxcdHN0cnVjdCBiZWF1dHlfcGF5bG9hZF9lbnRlciAqcGF5bG9hZDtcXG4tXFx0dm9pZCAqYXJnLCAqcGF5bG9hZF9vZmZzZXQ7XFxuIFxcbiBcXHQvKiBmYWxsIGJhY2sgdG8gZG8gcHJlZGVmaW5lZCB0YWlsIGNhbGwgKi9cXG4gXFx0aWYgKGFyZ3MgPT0gTlVMTClcXG5AQCAtNDQ5LDcgKzUyMyw2IEBAIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKVxcbiBcXG4gXFx0Lyogc2V0IHVwIHBheWxvYWQgZm9yIG91dHB1dCAqL1xcbiBcXHRwYXlsb2FkICAgICAgICA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNmJlYXV0eV9wYXlsb2FkX2VudGVyX21hcCwgXFx1MDAyNnplcm8pO1xcbi1cXHRwYXlsb2FkX29mZnNldCA9ICh2b2lkICopXFx1MDAyNnBheWxvYWQtXFx1MDAzZWF1Z19hcmdzO1xcbiBcXG4gXFx0aWYgKGJlYXV0eV9tYXAgPT0gTlVMTCB8fCBwYXlsb2FkID09IE5VTEwpXFxuIFxcdFxcdHJldHVybiAxO1xcbkBAIC00NTcsNjEgKzUzMCwyOSBAQCBzdGF0aWMgaW50IGF1Z21lbnRfc3lzX2VudGVyKHZvaWQgKmN0eCwgc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncylcXG4gXFx0LyogY29weSB0aGUgc3lzX2VudGVyIGhlYWRlciwgd2hpY2ggaGFzIHRoZSBzeXNjYWxsX25yICovXFxuIFxcdF9fYnVpbHRpbl9tZW1jcHkoXFx1MDAyNnBheWxvYWQtXFx1MDAzZWFyZ3MsIGFyZ3MsIHNpemVvZihzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzKSk7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIGFyZ3VtZW50IGFuZCBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdXNlciBzcGFjZSwgdXNpbmcgdGhlXFxuLVxcdCAqIHZhbHVlIGluIHRoZSBiZWF1dHlfbWFwLiBUaGlzIGlzIHRoZSByZWxhdGlvbiBvZiBwYXJhbWV0ZXIgdHlwZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmdcXG4tXFx0ICogdmFsdWUgaW4gdGhlIGJlYXV0eSBtYXAsIGFuZCBob3cgbWFueSBieXRlcyB3ZSByZWFkIGV2ZW50dWFsbHk6XFxuLVxcdCAqXFxuLVxcdCAqIHN0cmluZzogMVxcdFxcdFxcdCAgICAgIC1cXHUwMDNlIHNpemUgb2Ygc3RyaW5nXFxuLVxcdCAqIHN0cnVjdDogc2l6ZSBvZiBzdHJ1Y3RcXHQgICAgICAtXFx1MDAzZSBzaXplIG9mIHN0cnVjdFxcbi1cXHQgKiBidWZmZXI6IC0xICogKGluZGV4IG9mIHBhaXJlZCBsZW4pIC1cXHUwMDNlIHZhbHVlIG9mIHBhaXJlZCBsZW4gKG1heGltdW06IFRSQUNFX0FVR19NQVhfQlVGKVxcbi1cXHQgKi9cXG4tXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyA2OyBpKyspIHtcXG4tXFx0XFx0YXJnID0gKHZvaWQgKilhcmdzLVxcdTAwM2VhcmdzW2ldO1xcbi1cXHRcXHRhdWdtZW50ZWQgPSBmYWxzZTtcXG4tXFx0XFx0c2l6ZSA9IGJlYXV0eV9tYXBbaV07XFxuLVxcdFxcdGF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi9cXG4tXFxuLVxcdFxcdGlmIChzaXplID09IDAgfHwgYXJnID09IE5VTEwpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0aWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi9cXG4tXFx0XFx0XFx0YXVnX3NpemUgPSBicGZfcHJvYmVfcmVhZF91c2VyX3N0cigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVxcdTAwM2V2YWx1ZSwgdmFsdWVfc2l6ZSwgYXJnKTtcXG4tXFx0XFx0XFx0LyogbWluaW11bSBvZiAwIHRvIHBhc3MgdGhlIHZlcmlmaWVyICovXFxuLVxcdFxcdFxcdGlmIChhdWdfc2l6ZSBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdFxcdGF1Z19zaXplID0gMDtcXG4tXFxuLVxcdFxcdFxcdGF1Z21lbnRlZCA9IHRydWU7XFxuLVxcdFxcdH0gZWxzZSBpZiAoc2l6ZSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgc2l6ZSBcXHUwMDNjPSB2YWx1ZV9zaXplKSB7IC8qIHN0cnVjdCAqL1xcbi1cXHRcXHRcXHRpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cXHUwMDNldmFsdWUsIHNpemUsIGFyZykpXFxuLVxcdFxcdFxcdFxcdGF1Z21lbnRlZCA9IHRydWU7XFxuLVxcdFxcdH0gZWxzZSBpZiAoKGludClzaXplIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBzaXplIFxcdTAwM2U9IC02KSB7IC8qIGJ1ZmZlciAqL1xcbi1cXHRcXHRcXHRpbmRleCA9IC0oc2l6ZSArIDEpO1xcbi1cXHRcXHRcXHRiYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlIFxcdTAwMjY9IDcgdHJpY2suXFxuLVxcdFxcdFxcdGluZGV4IFxcdTAwMjY9IDc7XFx0ICAgIC8vIFNhdGlzZnkgdGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIHRoZSB2ZXJpZmllciBpbiBzb21lIGtlcm5lbHMuXFxuLVxcdFxcdFxcdGF1Z19zaXplID0gYXJncy1cXHUwMDNlYXJnc1tpbmRleF0gXFx1MDAzZSBUUkFDRV9BVUdfTUFYX0JVRiA/IFRSQUNFX0FVR19NQVhfQlVGIDogYXJncy1cXHUwMDNlYXJnc1tpbmRleF07XFxuLVxcbi1cXHRcXHRcXHRpZiAoYXVnX3NpemUgXFx1MDAzZSAwKSB7XFxuLVxcdFxcdFxcdFxcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVxcdTAwM2V2YWx1ZSwgYXVnX3NpemUsIGFyZykpXFxuLVxcdFxcdFxcdFxcdFxcdGF1Z21lbnRlZCA9IHRydWU7XFxuK1xcdGlmIChicGZfa3N5bV9leGlzdHMoYnBmX2l0ZXJfbnVtX25ldykpIHtcXG4rXFx0XFx0YnBmX2ZvcihpLCAwLCA2KSB7XFxuK1xcdFxcdFxcdHdyaXR0ZW4gPSBhdWdtZW50X2FyZyhhcmdzLCBpLCBiZWF1dHlfbWFwLCBwYXlsb2FkLCBvdXRwdXQpO1xcbitcXHRcXHRcXHRpZiAod3JpdHRlbiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHRcXHRpZiAod3JpdHRlbiBcXHUwMDNlIDApIHtcXG4rXFx0XFx0XFx0XFx0b3V0cHV0ICs9IHdyaXR0ZW47XFxuK1xcdFxcdFxcdFxcdC8qIGd1aWRlIHRoZSB2ZXJpZmllciB0byBmb3JnZXQgcmFuZ2Ugb2YgYG91dHB1dGAsIHdoaWNoXFxuK1xcdFxcdFxcdFxcdCAqIGhlbHBzIHRvIHByb3ZlIGNvbnZlcmdlbmNlIG9mIHRoZSBsb29wXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRvdXRwdXQgKz0gWkVSTztcXG4rXFx0XFx0XFx0XFx0ZG9fb3V0cHV0ID0gdHJ1ZTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuLVxcbi1cXHRcXHQvKiBBdWdtZW50ZWQgZGF0YSBzaXplIGlzIGxpbWl0ZWQgdG8gc2l6ZW9mKGF1Z21lbnRlZF9hcmctXFx1MDAzZXVubmFtZWQgdW5pb24gd2l0aCB2YWx1ZSBmaWVsZCkgKi9cXG4tXFx0XFx0aWYgKGF1Z19zaXplIFxcdTAwM2UgdmFsdWVfc2l6ZSlcXG4tXFx0XFx0XFx0YXVnX3NpemUgPSB2YWx1ZV9zaXplO1xcbi1cXG4tXFx0XFx0Lyogd3JpdGUgZGF0YSB0byBwYXlsb2FkICovXFxuLVxcdFxcdGlmIChhdWdtZW50ZWQpIHtcXG4tXFx0XFx0XFx0aW50IHdyaXR0ZW4gPSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpICsgYXVnX3NpemU7XFxuLVxcbi1cXHRcXHRcXHRpZiAod3JpdHRlbiBcXHUwMDNjIDAgfHwgd3JpdHRlbiBcXHUwMDNlIHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpXFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA2OyBpKyspIHtcXG4rXFx0XFx0XFx0d3JpdHRlbiA9IGF1Z21lbnRfYXJnKGFyZ3MsIGksIGJlYXV0eV9tYXAsIHBheWxvYWQsIG91dHB1dCk7XFxuK1xcdFxcdFxcdGlmICh3cml0dGVuIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuLVxcbi1cXHRcXHRcXHQoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVxcdTAwM2VzaXplID0gYXVnX3NpemU7XFxuLVxcdFxcdFxcdG91dHB1dCArPSB3cml0dGVuO1xcbi1cXHRcXHRcXHRwYXlsb2FkX29mZnNldCArPSB3cml0dGVuO1xcbi1cXHRcXHRcXHRkb19vdXRwdXQgPSB0cnVlO1xcbitcXHRcXHRcXHRpZiAod3JpdHRlbiBcXHUwMDNlIDApIHtcXG4rXFx0XFx0XFx0XFx0b3V0cHV0ICs9IHdyaXR0ZW47XFxuK1xcdFxcdFxcdFxcdGRvX291dHB1dCA9IHRydWU7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjowMjoxMS45MjE3NzIwNzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NzA4MDEyMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBwZXJmIHRvb2wgKHRvb2xzL3BlcmYvKS4gSXQgZG9lcyBub3QgYWx0ZXIgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIGFuZCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGRpcmVjdGx5IGZ1enplZCBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE4YzRjMzA4YzgzZGE3MTM4NjE0YzY1OWI5YTM4YWNhYzFlM2Q1YmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDEyOjAyOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmMgYi90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY1xuaW5kZXggMmE2ZTYxODY0ZWUwMTUuLjYwYmFiYzA2ZjM4MTJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcbisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jXG5AQCAtNDI5LDE1ICs0MjksODkgQEAgc3RhdGljIGJvb2wgcGlkX2ZpbHRlcl9faGFzKHN0cnVjdCBwaWRzX2ZpbHRlcmVkICpwaWRzLCBwaWRfdCBwaWQpXG4gXHRyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShwaWRzLCBcdTAwMjZwaWQpICE9IE5VTEw7XG4gfVxuIFxuK3U2NCBaRVJPID0gMDtcbitcbisvKlxuKyAqIERldGVybWluZSB3aGF0IHR5cGUgb2YgYXJndW1lbnQgYW5kIGhvdyBtYW55IGJ5dGVzIHRvIHJlYWQgZnJvbSB1c2VyIHNwYWNlLCB1c2luZyB0aGVcbisgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5X21hcC4gVGhpcyBpcyB0aGUgcmVsYXRpb24gb2YgcGFyYW1ldGVyIHR5cGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nXG4rICogdmFsdWUgaW4gdGhlIGJlYXV0eSBtYXAsIGFuZCBob3cgbWFueSBieXRlcyB3ZSByZWFkIGV2ZW50dWFsbHk6XG4rICpcbisgKiBzdHJpbmc6IDFcdFx0XHQgICAgICAtXHUwMDNlIHNpemUgb2Ygc3RyaW5nXG4rICogc3RydWN0OiBzaXplIG9mIHN0cnVjdFx0ICAgICAgLVx1MDAzZSBzaXplIG9mIHN0cnVjdFxuKyAqIGJ1ZmZlcjogLTEgKiAoaW5kZXggb2YgcGFpcmVkIGxlbikgLVx1MDAzZSB2YWx1ZSBvZiBwYWlyZWQgbGVuIChtYXhpbXVtOiBUUkFDRV9BVUdfTUFYX0JVRilcbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBhdWdtZW50X2FyZyhzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzLCBpbnQgaSxcbitcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgKmJlYXV0eV9tYXAsXG4rXHRcdFx0ICAgICAgc3RydWN0IGJlYXV0eV9wYXlsb2FkX2VudGVyICpwYXlsb2FkLCB1NjQgb2Zmc2V0KVxuK3tcbitcdGludCBpbmRleCwgdmFsdWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykgLSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpO1xuK1x0czY0IGF1Z19zaXplLCBzaXplO1xuK1x0Ym9vbCBhdWdtZW50ZWQ7XG4rXHR2b2lkICphcmcsICpwYXlsb2FkX29mZnNldDtcbitcbitcdGFyZyA9ICh2b2lkICopYXJncy1cdTAwM2VhcmdzW2ldO1xuK1x0YXVnbWVudGVkID0gZmFsc2U7XG4rXHRzaXplID0gYmVhdXR5X21hcFtpXTtcbitcdGF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi9cbitcbitcdGlmIChzaXplID09IDAgfHwgYXJnID09IE5VTEwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogYm91bmRzIGNoZWNrIGZvciB0aGUgdmVyaWZpZXIgKi9cbitcdGlmIChvZmZzZXQgXHUwMDNlIHNpemVvZihwYXlsb2FkLVx1MDAzZWF1Z19hcmdzKSAtIHNpemVvZihwYXlsb2FkLVx1MDAzZWF1Z19hcmdzWzBdKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0YmFycmllcl92YXIob2Zmc2V0KTtcbitcdHBheWxvYWRfb2Zmc2V0ID0gKHZvaWQgKilcdTAwMjZwYXlsb2FkLVx1MDAzZWF1Z19hcmdzICsgb2Zmc2V0O1xuK1xuK1x0aWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi9cbitcdFx0YXVnX3NpemUgPSBicGZfcHJvYmVfcmVhZF91c2VyX3N0cigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpO1xuK1x0XHQvKiBtaW5pbXVtIG9mIDAgdG8gcGFzcyB0aGUgdmVyaWZpZXIgKi9cbitcdFx0aWYgKGF1Z19zaXplIFx1MDAzYyAwKVxuK1x0XHRcdGF1Z19zaXplID0gMDtcbitcbitcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbitcdH0gZWxzZSBpZiAoc2l6ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2M9IHZhbHVlX3NpemUpIHsgLyogc3RydWN0ICovXG4rXHRcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXZhbHVlLCBzaXplLCBhcmcpKVxuK1x0XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4rXHR9IGVsc2UgaWYgKHNpemUgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDNlPSAtNikgeyAvKiBidWZmZXIgKi9cbitcdFx0aW5kZXggPSAtKHNpemUgKyAxKTtcbitcdFx0YmFycmllcl92YXIoaW5kZXgpOyAvLyBQcmV2ZW50IGNsYW5nIChub3RpY2VkIHdpdGggdjE4KSBmcm9tIHJlbW92aW5nIHRoZSBcdTAwMjY9IDcgdHJpY2suXG4rXHRcdGluZGV4IFx1MDAyNj0gNztcdCAgICAvLyBTYXRpc2Z5IHRoZSBib3VuZHMgY2hlY2tpbmcgd2l0aCB0aGUgdmVyaWZpZXIgaW4gc29tZSBrZXJuZWxzLlxuK1x0XHRhdWdfc2l6ZSA9IGFyZ3MtXHUwMDNlYXJnc1tpbmRleF07XG4rXHRcdGlmIChhdWdfc2l6ZSBcdTAwM2UgVFJBQ0VfQVVHX01BWF9CVUYpXG4rXHRcdFx0YXVnX3NpemUgPSBUUkFDRV9BVUdfTUFYX0JVRjtcbitcbitcdFx0aWYgKGF1Z19zaXplIFx1MDAzZSAwKSB7XG4rXHRcdFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNldmFsdWUsIGF1Z19zaXplLCBhcmcpKVxuK1x0XHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogQXVnbWVudGVkIGRhdGEgc2l6ZSBpcyBsaW1pdGVkIHRvIHNpemVvZihhdWdtZW50ZWRfYXJnLVx1MDAzZXVubmFtZWQgdW5pb24gd2l0aCB2YWx1ZSBmaWVsZCkgKi9cbitcdGlmIChhdWdfc2l6ZSBcdTAwM2UgdmFsdWVfc2l6ZSlcbitcdFx0YXVnX3NpemUgPSB2YWx1ZV9zaXplO1xuK1xuK1x0Lyogd3JpdGUgZGF0YSB0byBwYXlsb2FkICovXG4rXHRpZiAoYXVnbWVudGVkKSB7XG4rXHRcdGludCB3cml0dGVuID0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKSArIGF1Z19zaXplO1xuK1xuK1x0XHRpZiAod3JpdHRlbiBcdTAwM2MgMCB8fCB3cml0dGVuIFx1MDAzZSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpKVxuK1x0XHRcdHJldHVybiAtMTtcbitcbitcdFx0KChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cdTAwM2VzaXplID0gYXVnX3NpemU7XG4rXHRcdHJldHVybiB3cml0dGVuO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKVxuIHtcbi1cdGJvb2wgYXVnbWVudGVkLCBkb19vdXRwdXQgPSBmYWxzZTtcbi1cdGludCB6ZXJvID0gMCwgaW5kZXgsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTtcbitcdGJvb2wgZG9fb3V0cHV0ID0gZmFsc2U7XG4rXHRpbnQgaSwgemVybyA9IDAsIHdyaXR0ZW47XG4gXHR1NjQgb3V0cHV0ID0gMDsgLyogaGFzIHRvIGJlIHU2NCwgb3RoZXJ3aXNlIGl0IHdvbid0IHBhc3MgdGhlIHZlcmlmaWVyICovXG4tXHRzNjQgYXVnX3NpemUsIHNpemU7XG4gXHR1bnNpZ25lZCBpbnQgbnIsICpiZWF1dHlfbWFwO1xuIFx0c3RydWN0IGJlYXV0eV9wYXlsb2FkX2VudGVyICpwYXlsb2FkO1xuLVx0dm9pZCAqYXJnLCAqcGF5bG9hZF9vZmZzZXQ7XG4gXG4gXHQvKiBmYWxsIGJhY2sgdG8gZG8gcHJlZGVmaW5lZCB0YWlsIGNhbGwgKi9cbiBcdGlmIChhcmdzID09IE5VTEwpXG5AQCAtNDQ5LDcgKzUyMyw2IEBAIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKVxuIFxuIFx0Lyogc2V0IHVwIHBheWxvYWQgZm9yIG91dHB1dCAqL1xuIFx0cGF5bG9hZCAgICAgICAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmJlYXV0eV9wYXlsb2FkX2VudGVyX21hcCwgXHUwMDI2emVybyk7XG4tXHRwYXlsb2FkX29mZnNldCA9ICh2b2lkICopXHUwMDI2cGF5bG9hZC1cdTAwM2VhdWdfYXJncztcbiBcbiBcdGlmIChiZWF1dHlfbWFwID09IE5VTEwgfHwgcGF5bG9hZCA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gMTtcbkBAIC00NTcsNjEgKzUzMCwyOSBAQCBzdGF0aWMgaW50IGF1Z21lbnRfc3lzX2VudGVyKHZvaWQgKmN0eCwgc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncylcbiBcdC8qIGNvcHkgdGhlIHN5c19lbnRlciBoZWFkZXIsIHdoaWNoIGhhcyB0aGUgc3lzY2FsbF9uciAqL1xuIFx0X19idWlsdGluX21lbWNweShcdTAwMjZwYXlsb2FkLVx1MDAzZWFyZ3MsIGFyZ3MsIHNpemVvZihzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzKSk7XG4gXG4tXHQvKlxuLVx0ICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZVxuLVx0ICogdmFsdWUgaW4gdGhlIGJlYXV0eV9tYXAuIFRoaXMgaXMgdGhlIHJlbGF0aW9uIG9mIHBhcmFtZXRlciB0eXBlIGFuZCBpdHMgY29ycmVzcG9uZGluZ1xuLVx0ICogdmFsdWUgaW4gdGhlIGJlYXV0eSBtYXAsIGFuZCBob3cgbWFueSBieXRlcyB3ZSByZWFkIGV2ZW50dWFsbHk6XG4tXHQgKlxuLVx0ICogc3RyaW5nOiAxXHRcdFx0ICAgICAgLVx1MDAzZSBzaXplIG9mIHN0cmluZ1xuLVx0ICogc3RydWN0OiBzaXplIG9mIHN0cnVjdFx0ICAgICAgLVx1MDAzZSBzaXplIG9mIHN0cnVjdFxuLVx0ICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtXHUwMDNlIHZhbHVlIG9mIHBhaXJlZCBsZW4gKG1heGltdW06IFRSQUNFX0FVR19NQVhfQlVGKVxuLVx0ICovXG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgNjsgaSsrKSB7XG4tXHRcdGFyZyA9ICh2b2lkICopYXJncy1cdTAwM2VhcmdzW2ldO1xuLVx0XHRhdWdtZW50ZWQgPSBmYWxzZTtcbi1cdFx0c2l6ZSA9IGJlYXV0eV9tYXBbaV07XG4tXHRcdGF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi9cbi1cbi1cdFx0aWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTClcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi9cbi1cdFx0XHRhdWdfc2l6ZSA9IGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNldmFsdWUsIHZhbHVlX3NpemUsIGFyZyk7XG4tXHRcdFx0LyogbWluaW11bSBvZiAwIHRvIHBhc3MgdGhlIHZlcmlmaWVyICovXG4tXHRcdFx0aWYgKGF1Z19zaXplIFx1MDAzYyAwKVxuLVx0XHRcdFx0YXVnX3NpemUgPSAwO1xuLVxuLVx0XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4tXHRcdH0gZWxzZSBpZiAoc2l6ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2M9IHZhbHVlX3NpemUpIHsgLyogc3RydWN0ICovXG4tXHRcdFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNldmFsdWUsIHNpemUsIGFyZykpXG4tXHRcdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKChpbnQpc2l6ZSBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IC02KSB7IC8qIGJ1ZmZlciAqL1xuLVx0XHRcdGluZGV4ID0gLShzaXplICsgMSk7XG4tXHRcdFx0YmFycmllcl92YXIoaW5kZXgpOyAvLyBQcmV2ZW50IGNsYW5nIChub3RpY2VkIHdpdGggdjE4KSBmcm9tIHJlbW92aW5nIHRoZSBcdTAwMjY9IDcgdHJpY2suXG4tXHRcdFx0aW5kZXggXHUwMDI2PSA3O1x0ICAgIC8vIFNhdGlzZnkgdGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIHRoZSB2ZXJpZmllciBpbiBzb21lIGtlcm5lbHMuXG4tXHRcdFx0YXVnX3NpemUgPSBhcmdzLVx1MDAzZWFyZ3NbaW5kZXhdIFx1MDAzZSBUUkFDRV9BVUdfTUFYX0JVRiA/IFRSQUNFX0FVR19NQVhfQlVGIDogYXJncy1cdTAwM2VhcmdzW2luZGV4XTtcbi1cbi1cdFx0XHRpZiAoYXVnX3NpemUgXHUwMDNlIDApIHtcbi1cdFx0XHRcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXZhbHVlLCBhdWdfc2l6ZSwgYXJnKSlcbi1cdFx0XHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbitcdGlmIChicGZfa3N5bV9leGlzdHMoYnBmX2l0ZXJfbnVtX25ldykpIHtcbitcdFx0YnBmX2ZvcihpLCAwLCA2KSB7XG4rXHRcdFx0d3JpdHRlbiA9IGF1Z21lbnRfYXJnKGFyZ3MsIGksIGJlYXV0eV9tYXAsIHBheWxvYWQsIG91dHB1dCk7XG4rXHRcdFx0aWYgKHdyaXR0ZW4gXHUwMDNjIDApXG4rXHRcdFx0XHRyZXR1cm4gMTtcbitcdFx0XHRpZiAod3JpdHRlbiBcdTAwM2UgMCkge1xuK1x0XHRcdFx0b3V0cHV0ICs9IHdyaXR0ZW47XG4rXHRcdFx0XHQvKiBndWlkZSB0aGUgdmVyaWZpZXIgdG8gZm9yZ2V0IHJhbmdlIG9mIGBvdXRwdXRgLCB3aGljaFxuK1x0XHRcdFx0ICogaGVscHMgdG8gcHJvdmUgY29udmVyZ2VuY2Ugb2YgdGhlIGxvb3BcbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0b3V0cHV0ICs9IFpFUk87XG4rXHRcdFx0XHRkb19vdXRwdXQgPSB0cnVlO1xuIFx0XHRcdH1cbiBcdFx0fVxuLVxuLVx0XHQvKiBBdWdtZW50ZWQgZGF0YSBzaXplIGlzIGxpbWl0ZWQgdG8gc2l6ZW9mKGF1Z21lbnRlZF9hcmctXHUwMDNldW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqL1xuLVx0XHRpZiAoYXVnX3NpemUgXHUwMDNlIHZhbHVlX3NpemUpXG4tXHRcdFx0YXVnX3NpemUgPSB2YWx1ZV9zaXplO1xuLVxuLVx0XHQvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi9cbi1cdFx0aWYgKGF1Z21lbnRlZCkge1xuLVx0XHRcdGludCB3cml0dGVuID0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKSArIGF1Z19zaXplO1xuLVxuLVx0XHRcdGlmICh3cml0dGVuIFx1MDAzYyAwIHx8IHdyaXR0ZW4gXHUwMDNlIHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpXG4rXHR9IGVsc2Uge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA2OyBpKyspIHtcbitcdFx0XHR3cml0dGVuID0gYXVnbWVudF9hcmcoYXJncywgaSwgYmVhdXR5X21hcCwgcGF5bG9hZCwgb3V0cHV0KTtcbitcdFx0XHRpZiAod3JpdHRlbiBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiAxO1xuLVxuLVx0XHRcdCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNlc2l6ZSA9IGF1Z19zaXplO1xuLVx0XHRcdG91dHB1dCArPSB3cml0dGVuO1xuLVx0XHRcdHBheWxvYWRfb2Zmc2V0ICs9IHdyaXR0ZW47XG4tXHRcdFx0ZG9fb3V0cHV0ID0gdHJ1ZTtcbitcdFx0XHRpZiAod3JpdHRlbiBcdTAwM2UgMCkge1xuK1x0XHRcdFx0b3V0cHV0ICs9IHdyaXR0ZW47XG4rXHRcdFx0XHRkb19vdXRwdXQgPSB0cnVlO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MDI6MTEuOTIxNzczNzM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc3MDc5NzAwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBXb3J0aEZ1enppbmc9ZmFsc2UqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBjaGFuZ2VzIHRvIGB0b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY2AuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBhbnkgbW9kaWZpY2F0aW9uIHRvIGEgQlBGIHByb2dyYW0gbWlnaHQgd2FycmFudCBjbG9zZXIgaW5zcGVjdGlvbiwgZ2l2ZW4gaXRzIGluLWtlcm5lbCBleGVjdXRpb24uIEhvd2V2ZXIsIHRoaXMgaXMgbG9jYXRlZCB3aXRoaW4gdGhlIGB0b29scy9wZXJmL2AgZGlyZWN0b3J5LCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gYmUgc3VyZS5cblxuVGhpcyBpc24ndCBjb3JlIGtlcm5lbCBjb2RlLCBub3QgZHJpdmVycyBvciBhcmNoaXRlY3R1cmVzLiBJdCdzIHVzZXItc3BhY2UhIFNwZWNpZmljYWxseSwgaXQncyBhIEJQRiBza2VsZXRvbiB1c2VkIGJ5IHRoZSBgcGVyZmAgdG9vbC4gVGhlc2UgQlBGIHByb2dyYW1zIGFyZSBjb21waWxlZCBhbmQgKmxvYWRlZCBieSogYHBlcmZgLCBhbmQgZXhlY3V0ZWQgKndpdGhpbiogdGhlIGtlcm5lbCB3aGVuIGNhbGxlZCBieSBgcGVyZmAsIGJ1dCB0aGlzIGlzbid0IGtlcm5lbCBjb2RlIGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZSwgbm90IGtlcm5lbCBtb2R1bGVzLlxuXG5TeXprYWxsZXIgaXMgdGhlIGZ1enplciB0aGF0IEknbSBmb2N1c2VkIG9uLiBTeXprYWxsZXIncyBqb2IgaXMgZnV6emluZyB0aGUga2VybmVsIHZpYSBzeXNjYWxscy4gSXQgZG9lc24ndCB0eXBpY2FsbHkgaW50ZXJhY3Qgd2l0aCBvciBkaXJlY3RseSBmdXp6IHRvb2xzIGxpa2UgYHBlcmZgIG9yIGl0cyBCUEYgcHJvZ3JhbXMsIHVubGVzcyBgcGVyZmAgaXMgZXhwbGljaXRseSBiZWluZyBydW4gYXMgcGFydCBvZiB0aGUgdGVzdC4gU3l6a2FsbGVyIGRvZXNuJ3QgdHlwaWNhbGx5IGxvYWQgdGhlc2Ugc3BlY2lmaWMgQlBGIHNrZWxldG9ucy5cblxuSSd2ZSBjaGVja2VkIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZmlsZXMgaW1wYWN0ZWQgYnkgdGhlIHBhdGNoLCBqdXN0IHRvIGJlIHN1cmUuIFRoZSBhbnN3ZXIgaXMgbm87IG9ubHkgdGhpcyBvbmUgZmlsZSBpcyBjaGFuZ2VkLlxuXG5Ob3csIGxldCBtZSBnbyB0aHJvdWdoIHRoZSBydWxlcy4gVGhlIHJ1bGVzIGRvbid0IGV4cGxpY2l0bHkgc2F5IFwidG9vbHMvXCIgYnV0IHRoZSBwYXR0ZXJuIG9mIFwiRG9jdW1lbnRhdGlvbi9cIiwgXCJLY29uZmlnXCIsIGNvbW1lbnRzLCBsb2dnaW5nLCBjb25zdGFudHMsIHVucmVhY2hhYmxlIGNvZGUsIGV0Yy4gYWxsIHBvaW50IGF3YXkgZnJvbSBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5LiBDaGFuZ2VzIGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkgYXJlIGFsc28gZ2VuZXJhbGx5IHVzZXIgc3BhY2UgdG9vbHMuXG5cbkJhc2VkIG9uIHRoZSBydWxlcywgYW5kIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSwgdGhpcyBpcyBhIG1vZGlmaWNhdGlvbiB0byBhIHVzZXItc3BhY2UgdG9vbCAocGVyZikgYW5kIGl0cyBhc3NvY2lhdGVkIEJQRiBwcm9ncmFtLiBTeXprYWxsZXIgKmRvZXMgbm90KiBmdXp6IHRoZXNlIHByb2dyYW1zLCBzaW5jZSBpdCBpcyBhIGtlcm5lbCBzeXNjYWxsIGZ1enplci4gSXQncyBub3QgY29yZSBrZXJuZWwsIGFuZCBpdCdzIG5vdCBiZWluZyBmdXp6ZWQuIFRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgbm90IHdvcnRoIGZ1enppbmcuIEknbGwgZmxhZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgZXhwbGFpbiB0aGF0IGl0J3MgYSBjaGFuZ2UgdG8gdGhlIHVzZXItc3BhY2UgYHBlcmZgIHRvb2wgYW5kIGFzc29jaWF0ZWQgQlBGIHByb2dyYW1zLiBJJ20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGRpcmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDg3LCJPdXRwdXRUb2tlbnMiOjgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MDI6MjkuNjI5NzQ3NDA0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBwZXJmIHRvb2wgKHRvb2xzL3BlcmYvKS4gSXQgZG9lcyBub3QgYWx0ZXIgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIGFuZCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGRpcmVjdGx5IGZ1enplZCBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBwZXJmIHRvb2wgKHRvb2xzL3BlcmYvKS4gSXQgZG9lcyBub3QgYWx0ZXIgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIGFuZCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGRpcmVjdGx5IGZ1enplZCBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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:*0,} --------- Name: series-workflownz7zh[1] Phase: Running StartedAt: 2026-07-03 12:02:41 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownz7zh[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-03 12:02:41 +0000 UTC FinishedAt: 2026-07-03 12:02:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}