IyEvdXNyL2Jpbi9lbnYgcGVybAoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIFtSZV13cml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCiMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKIyAiW1JlXXdyaXR0ZW4iIHdhcyBhY2hpZXZlZCBpbiB0d28gbWFqb3Igb3ZlcmhhdWxzLiBJbiAyMDA0IEJPRFlfKgojIGZ1bmN0aW9ucyB3ZXJlIHJlLWltcGxlbWVudGVkIHRvIGFkZHJlc3MgUDQgcGVyZm9ybWFuY2UgaXNzdWUgW3NlZQojIGNvbW1lbnRhcnkgYmVsb3ddLCBhbmQgaW4gMjAwNiB0aGUgcmVzdCB3YXMgcmV3cml0dGVuIGluIG9yZGVyIHRvCiMgZ2FpbiBmcmVlZG9tIHRvIGxpYmVyYXRlIGxpY2Vuc2luZyB0ZXJtcy4KCiMgSmFudWFyeSwgU2VwdGVtYmVyIDIwMDQuCiMKIyBJdCB3YXMgbm90ZWQgdGhhdCBJbnRlbCBJQS0zMiBDIGNvbXBpbGVyIGdlbmVyYXRlcyBjb2RlIHdoaWNoCiMgcGVyZm9ybXMgfjMwJSAqZmFzdGVyKiBvbiBQNCBDUFUgdGhhbiBvcmlnaW5hbCAqaGFuZC1jb2RlZCoKIyBTSEExIGFzc2VtYmxlciBpbXBsZW1lbnRhdGlvbi4gVG8gYWRkcmVzcyB0aGlzIHByb2JsZW0gKGFuZAojIHByb3ZlIHRoYXQgaHVtYW5zIGFyZSBzdGlsbCBiZXR0ZXIgdGhhbiBtYWNoaW5lczotKSwgdGhlCiMgb3JpZ2luYWwgY29kZSB3YXMgb3ZlcmhhdWxlZCwgd2hpY2ggcmVzdWx0ZWQgaW4gZm9sbG93aW5nCiMgcGVyZm9ybWFuY2UgY2hhbmdlczoKIwojCQljb21wYXJlZCB3aXRoIG9yaWdpbmFsCWNvbXBhcmVkIHdpdGggSW50ZWwgY2MKIwkJYXNzZW1ibGVyIGltcGwuCQlnZW5lcmF0ZWQgY29kZQojIFBlbnRpdW0JLTE2JQkJCSs0OCUKIyBQSUlJL0FNRAkrOCUJCQkrMTYlCiMgUDQJCSs4NSUoISkJCQkrNDUlCiMKIyBBcyB5b3UgY2FuIHNlZSBQZW50aXVtIGNhbWUgb3V0IGFzIGxvb3NlcjotKCBZZXQgSSByZWNrb25lZCB0aGF0CiMgaW1wcm92ZW1lbnQgb24gUDQgb3V0d2VpZ2h0cyB0aGUgbG9zcyBhbmQgaW5jb3Jwb3JhdGUgdGhpcwojIHJlLXR1bmVkIGNvZGUgdG8gMC45LjcgYW5kIGxhdGVyLgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgoKIyBBdWd1c3QgMjAwOS4KIwojIEdlb3JnZSBTcGVsdmluIGhhcyB0aXBwZWQgdGhhdCBGXzQwXzU5KGIsYyxkKSBjYW4gYmUgcmV3cml0dGVuIGFzCiMgJyhjJmQpICsgKGImKGNeZCkpJywgd2hpY2ggYWxsb3dzIHRvIGFjY3VtdWxhdGUgcGFydGlhbCByZXN1bHRzCiMgYW5kIGxpZ2h0ZW4gInByZXNzdXJlIiBvbiBzY3JhdGNoIHJlZ2lzdGVycy4gVGhpcyByZXN1bHRlZCBpbgojID4xMiUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb24gY29udGVtcG9yYXJ5IEFNRCBjb3JlcyAod2l0aCBubwojIGRlZ3JhZGF0aW9uIG9uIG90aGVyIENQVXM6LSkuIEFsc28sIHRoZSBjb2RlIHdhcyByZXZpc2VkIHRvIG1heGltaXplCiMgImRpc3RhbmNlIiBiZXR3ZWVuIGluc3RydWN0aW9ucyBwcm9kdWNpbmcgaW5wdXQgdG8gJ2xlYScgaW5zdHJ1Y3Rpb24KIyBhbmQgdGhlICdsZWEnIGluc3RydWN0aW9uIGl0c2VsZiwgd2hpY2ggaXMgZXNzZW50aWFsIGZvciBJbnRlbCBBdG9tCiMgY29yZSBhbmQgcmVzdWx0ZWQgaW4gfjE1JSBpbXByb3ZlbWVudC4KCiMgT2N0b2JlciAyMDEwLgojCiMgQWRkIFNTU0UzLCBTdXBwbGVtZW50YWxbIV0gU1NFMywgaW1wbGVtZW50YXRpb24uIFRoZSBpZGVhIGJlaGluZCBpdAojIGlzIHRvIG9mZmxvYWQgbWVzc2FnZSBzY2hlZHVsZSBkZW5vdGVkIGJ5IFd0IGluIE5JU1Qgc3BlY2lmaWNhdGlvbiwKIyBvciBYdXBkYXRlIGluIE9wZW5TU0wgc291cmNlLCB0byBTSU1EIHVuaXQuIFRoZSBpZGVhIGlzIG5vdCBub3ZlbCwKIyBhbmQgaW4gU1NFMiBjb250ZXh0IHdhcyBmaXJzdCBleHBsb3JlZCBieSBEZWFuIEdhdWRldCBpbiAyMDA0LCBzZWUKIyBodHRwOi8vYXJjdGljLm9yZy9+ZGVhbi9jcnlwdG8vc2hhMS5odG1sLiBTaW5jZSB0aGVuIHNldmVyYWwgdGhpbmdzCiMgaGF2ZSBjaGFuZ2VkIHRoYXQgbWFkZSBpdCBpbnRlcmVzdGluZyBhZ2FpbjoKIwojIGEpIFhNTSB1bml0cyBiZWNhbWUgZmFzdGVyIGFuZCB3aWRlcjsKIyBiKSBpbnN0cnVjdGlvbiBzZXQgYmVjYW1lIG1vcmUgdmVyc2F0aWxlOwojIGMpIGFuIGltcG9ydGFudCBvYnNlcnZhdGlvbiB3YXMgbWFkZSBieSBNYXggTG9ja3R5a2hpbiwgd2hpY2ggbWFkZQojICAgIGl0IHBvc3NpYmxlIHRvIHJlZHVjZSBhbW91bnQgb2YgaW5zdHJ1Y3Rpb25zIHJlcXVpcmVkIHRvIHBlcmZvcm0KIyAgICB0aGUgb3BlcmF0aW9uIGluIHF1ZXN0aW9uLCBmb3IgZnVydGhlciBkZXRhaWxzIHNlZQojICAgIGh0dHA6Ly9zb2Z0d2FyZS5pbnRlbC5jb20vZW4tdXMvYXJ0aWNsZXMvaW1wcm92aW5nLXRoZS1wZXJmb3JtYW5jZS1vZi10aGUtc2VjdXJlLWhhc2gtYWxnb3JpdGhtLTEvLgoKIyBBcHJpbCAyMDExLgojCiMgQWRkIEFWWCBjb2RlIHBhdGgsIHByb2JhYmx5IG1vc3QgY29udHJvdmVyc2lhbC4uLiBUaGUgdGhpbmcgaXMgdGhhdAojIHN3aXRjaCB0byBBVlggYWxvbmUgaW1wcm92ZXMgcGVyZm9ybWFuY2UgYnkgYXMgbGl0dGxlIGFzIDQlIGluCiMgY29tcGFyaXNvbiB0byBTU1NFMyBjb2RlIHBhdGguIEJ1dCBiZWxvdyByZXN1bHQgZG9lc24ndCBsb29rIGxpa2UKIyA0JSBpbXByb3ZlbWVudC4uLiBUcm91YmxlIGlzIHRoYXQgU2FuZHkgQnJpZGdlIGRlY29kZXMgJ3JvW3JsXScgYXMKIyBwYWlyIG9mILUtb3BzLCBhbmQgaXQncyB0aGUgYWRkaXRpb25hbCC1LW9wcywgdHdvIHBlciByb3VuZCwgdGhhdAojIG1ha2UgaXQgcnVuIHNsb3dlciB0aGFuIENvcmUyIGFuZCBXZXN0bWVyZS4gQnV0ICdzaFtybF1kJyBpcyBkZWNvZGVkCiMgYXMgc2luZ2xlILUtb3AgYnkgU2FuZHkgQnJpZGdlIGFuZCBpdCdzIHJlcGxhY2luZyAncm9bcmxdJyB3aXRoCiMgZXF1aXZhbGVudCAnc2hbcmxdZCcgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGltcHJlc3NpdmUgNS4xCiMgY3ljbGVzIHBlciBwcm9jZXNzZWQgYnl0ZS4gQnV0ICdzaFtybF1kJyBpcyBub3Qgc29tZXRoaW5nIHRoYXQgdXNlZAojIHRvIGJlIGZhc3QsIG5vciBkb2VzIGl0IGFwcGVhciB0byBiZSBmYXN0IGluIHVwY29taW5nIEJ1bGxkb3plcgojIFthY2NvcmRpbmcgdG8gaXRzIG9wdGltaXphdGlvbiBtYW51YWxdLiBXaGljaCBpcyB3aHkgQVZYIGNvZGUgcGF0aAojIGlzIGd1YXJkZWQgYnkgKmJvdGgqIEFWWCBhbmQgc3ludGhldGljIGJpdCBkZW5vdGluZyBJbnRlbCBDUFVzLgojIE9uZSBjYW4gYXJndWUgdGhhdCBpdCdzIHVuZmFpciB0byBBTUQsIGJ1dCB3aXRob3V0ICdzaFtybF1kJyBpdAojIG1ha2VzIG5vIHNlbnNlIHRvIGtlZXAgdGhlIEFWWCBjb2RlIHBhdGguIElmIHNvbWVib2R5IGZlZWxzIHRoYXQKIyBzdHJvbmdseSwgaXQncyBwcm9iYWJseSBtb3JlIGFwcHJvcHJpYXRlIHRvIGRpc2N1c3MgcG9zc2liaWxpdHkgb2YKIyB1c2luZyB2ZWN0b3Igcm90YXRlIFhPUCBvbiBBTUQuLi4KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDdXJyZW50IHBlcmZvcm1hbmNlIGlzIHN1bW1hcml6ZWQgaW4gZm9sbG93aW5nIHRhYmxlLiBOdW1iZXJzIGFyZQojIENQVSBjbG9jayBjeWNsZXMgc3BlbnQgdG8gcHJvY2VzcyBzaW5nbGUgYnl0ZSAobGVzcyBpcyBiZXR0ZXIpLgojCiMJCXg4NgkJU1NTRTMJCUFWWAojIFBlbnRpdW0JMTUuNwkJLQojIFBJSUkJCTExLjUJCS0KIyBQNAkJMTAuNgkJLQojIEFNRCBLOAk3LjEJCS0KIyBDb3JlMgkJNy4zCQk2LjAvKzIyJQktCiMgQXRvbQkJMTIuNQkJOS4zKCopLyszNSUJLQojIFdlc3RtZXJlCTcuMwkJNS41LyszMyUJLQojIFNhbmR5IEJyaWRnZQk4LjgJCTYuMi8rNDAlCTUuMSgqKikvKzczJQojIEl2eSBCcmlkZ2UJNy4yCQk0LjgvKzUxJQk0LjcoKiopLys1MyUKIyBCdWxsZG96ZXIJMTEuNgkJNi4wLys5MiUKIyBWSUEgTmFubwkxMC42CQk3LjQvKzQzJQojCiMgKCopCUxvb3AgaXMgMTA1NiBpbnN0cnVjdGlvbnMgbG9uZyBhbmQgZXhwZWN0ZWQgcmVzdWx0IGlzIH44LjI1LgojCUl0IHJlbWFpbnMgbXlzdGVyeSBbdG8gbWVdIHdoeSBJTFAgaXMgbGltaXRlZCB0byAxLjcuCiMKIyAoKiopCUFzIHBlciBhYm92ZSBjb21tZW50LCB0aGUgcmVzdWx0IGlzIGZvciBBVlggKnBsdXMqIHNoW3JsXWQuCgokMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOwpwdXNoKEBJTkMsIiR7ZGlyfSIsIiR7ZGlyfS4uLy4uL3Blcmxhc20iKTsKcmVxdWlyZSAieDg2YXNtLnBsIjsKCiZhc21faW5pdCgkQVJHVlswXSwic2hhMS01ODYucGwiLCRBUkdWWyQjQVJHVl0gZXEgIjM4NiIpOwoKJHhtbT0keW1tPTA7CmZvciAoQEFSR1YpIHsgJHhtbT0xIGlmICgvLURPUEVOU1NMX0lBMzJfU1NFMi8pOyB9CgokeW1tPTEgaWYgKCR4bW0gJiYKCQlgJEVOVntDQ30gLVdhLC12IC1jIC1vIC9kZXYvbnVsbCAteCBhc3NlbWJsZXIgL2Rldi9udWxsIDI+JjFgCgkJCT1+IC9HTlUgYXNzZW1ibGVyIHZlcnNpb24gKFsyLTldXC5bMC05XSspLyAmJgoJCSQxPj0yLjE5KTsJIyBmaXJzdCB2ZXJzaW9uIHN1cHBvcnRpbmcgQVZYCgokeW1tPTEgaWYgKCR4bW0gJiYgISR5bW0gJiYgJEFSR1ZbMF0gZXEgIndpbjMybiIgJiYgCgkJYG5hc20gLXYgMj4mMWAgPX4gL05BU00gdmVyc2lvbiAoWzItOV1cLlswLTldKykvICYmCgkJJDE+PTIuMDMpOwkjIGZpcnN0IHZlcnNpb24gc3VwcG9ydGluZyBBVlgKCiR5bW09MSBpZiAoJHhtbSAmJiAhJHltbSAmJiAkQVJHVlswXSBlcSAid2luMzIiICYmCgkJYG1sIDI+JjFgID1+IC9WZXJzaW9uIChbMC05XSspXC4vICYmCgkJJDE+PTEwKTsJIyBmaXJzdCB2ZXJzaW9uIHN1cHBvcnRpbmcgQVZYCgomZXh0ZXJuYWxfbGFiZWwoIk9QRU5TU0xfaWEzMmNhcF9QIikgaWYgKCR4bW0pOwoKCiRBPSJlYXgiOwokQj0iZWJ4IjsKJEM9ImVjeCI7CiREPSJlZHgiOwokRT0iZWRpIjsKJFQ9ImVzaSI7CiR0bXAxPSJlYnAiOwoKQFY9KCRBLCRCLCRDLCRELCRFLCRUKTsKCiRhbHQ9MDsJIyAxIGRlbm90ZXMgYWx0ZXJuYXRpdmUgSUFMVSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggcGVyZm9ybXMKCSMgOCUgKndvcnNlKiBvbiBQNCwgc2FtZSBvbiBXZXN0bWVyZSBhbmQgQXRvbSwgMiUgYmV0dGVyIG9uCgkjIFNhbmR5IEJyaWRnZS4uLgoKc3ViIEJPRFlfMDBfMTUKCXsKCWxvY2FsKCRuLCRhLCRiLCRjLCRkLCRlLCRmKT1AXzsKCgkmY29tbWVudCgiMDBfMTUgJG4iKTsKCgkmbW92KCRmLCRjKTsJCQkjIGYgdG8gaG9sZCBGXzAwXzE5KGIsYyxkKQoJIGlmICgkbj09MCkgIHsgJm1vdigkdG1wMSwkYSk7IH0KCSBlbHNlICAgICAgICB7ICZtb3YoJGEsJHRtcDEpOyB9Cgkmcm90bCgkdG1wMSw1KTsJCQkjIHRtcDE9Uk9UQVRFKGEsNSkKCSAmeG9yKCRmLCRkKTsKCSZhZGQoJHRtcDEsJGUpOwkJCSMgdG1wMSs9ZTsKCSAmbW92KCRlLCZzd3RtcCgkbiUxNikpOwkjIGUgYmVjb21lcyB2b2xhdGlsZSBhbmQgaXMgbG9hZGVkCgkgCQkJCSMgd2l0aCB4aSwgYWxzbyBub3RlIHRoYXQgZSBiZWNvbWVzCgkJCQkJIyBmIGluIG5leHQgcm91bmQuLi4KCSZhbmQoJGYsJGIpOwoJJnJvdHIoJGIsMik7CQkJIyBiPVJPVEFURShiLDMwKQoJICZ4b3IoJGYsJGQpOwkJCSMgZiBob2xkcyBGXzAwXzE5KGIsYyxkKQoJJmxlYSgkdG1wMSwmRFdQKDB4NWE4Mjc5OTksJHRtcDEsJGUpKTsJIyB0bXAxKz1LXzAwXzE5K3hpCgoJaWYgKCRuPT0xNSkgeyAmbW92KCRlLCZzd3RtcCgoJG4rMSklMTYpKTsjIHByZS1mZXRjaCBmIGZvciBuZXh0IHJvdW5kCgkJICAgICAgJmFkZCgkZiwkdG1wMSk7IH0JIyBmKz10bXAxCgllbHNlICAgICAgICB7ICZhZGQoJHRtcDEsJGYpOyB9CSMgZiBiZWNvbWVzIGEgaW4gbmV4dCByb3VuZAoJJm1vdigkdG1wMSwkYSkJCQlpZiAoJGFsdCAmJiAkbj09MTUpOwoJfQoKc3ViIEJPRFlfMTZfMTkKCXsKCWxvY2FsKCRuLCRhLCRiLCRjLCRkLCRlLCRmKT1AXzsKCgkmY29tbWVudCgiMTZfMTkgJG4iKTsKCmlmICgkYWx0KSB7CgkmeG9yKCRjLCRkKTsKCSAmeG9yKCRmLCZzd3RtcCgoJG4rMiklMTYpKTsJIyBmIHRvIGhvbGQgWHVwZGF0ZSh4aSx4YSx4Yix4Yyx4ZCkKCSZhbmQoJHRtcDEsJGMpOwkJCSMgdG1wMSB0byBob2xkIEZfMDBfMTkoYixjLGQpLCBiJj1jXmQKCSAmeG9yKCRmLCZzd3RtcCgoJG4rOCklMTYpKTsKCSZ4b3IoJHRtcDEsJGQpOwkJCSMgdG1wMT1GXzAwXzE5KGIsYyxkKQoJICZ4b3IoJGYsJnN3dG1wKCgkbisxMyklMTYpKTsJIyBmIGhvbGRzIHhhXnhiXnhjXnhkCgkmcm90bCgkZiwxKTsJCQkjIGY9Uk9UQVRFKGYsMSkKCSAmYWRkKCRlLCR0bXAxKTsJCSMgZSs9Rl8wMF8xOShiLGMsZCkKCSZ4b3IoJGMsJGQpOwkJCSMgcmVzdG9yZSAkYwoJICZtb3YoJHRtcDEsJGEpOwkJIyBiIGluIG5leHQgcm91bmQKCSZyb3RyKCRiLCRuPT0xNj8yOjcpOwkJIyBiPVJPVEFURShiLDMwKQoJICZtb3YoJnN3dG1wKCRuJTE2KSwkZik7CSMgeGk9ZgoJJnJvdGwoJGEsNSk7CQkJIyBST1RBVEUoYSw1KQoJICZsZWEoJGYsJkRXUCgweDVhODI3OTk5LCRmLCRlKSk7IyBmKz1GXzAwXzE5KGIsYyxkKStlCgkmbW92KCRlLCZzd3RtcCgoJG4rMSklMTYpKTsJIyBwcmUtZmV0Y2ggZiBmb3IgbmV4dCByb3VuZAoJICZhZGQoJGYsJGEpOwkJCSMgZis9Uk9UQVRFKGEsNSkKfSBlbHNlIHsKCSZtb3YoJHRtcDEsJGMpOwkJCSMgdG1wMSB0byBob2xkIEZfMDBfMTkoYixjLGQpCgkgJnhvcigkZiwmc3d0bXAoKCRuKzIpJTE2KSk7CSMgZiB0byBob2xkIFh1cGRhdGUoeGkseGEseGIseGMseGQpCgkmeG9yKCR0bXAxLCRkKTsKCSAmeG9yKCRmLCZzd3RtcCgoJG4rOCklMTYpKTsKCSZhbmQoJHRtcDEsJGIpOwoJICZ4b3IoJGYsJnN3dG1wKCgkbisxMyklMTYpKTsJIyBmIGhvbGRzIHhhXnhiXnhjXnhkCgkmcm90bCgkZiwxKTsJCQkjIGY9Uk9UQVRFKGYsMSkKCSAmeG9yKCR0bXAxLCRkKTsJCSMgdG1wMT1GXzAwXzE5KGIsYyxkKQoJJmFkZCgkZSwkdG1wMSk7CQkJIyBlKz1GXzAwXzE5KGIsYyxkKQoJICZtb3YoJHRtcDEsJGEpOwoJJnJvdHIoJGIsMik7CQkJIyBiPVJPVEFURShiLDMwKQoJICZtb3YoJnN3dG1wKCRuJTE2KSwkZik7CSMgeGk9ZgoJJnJvdGwoJHRtcDEsNSk7CQkJIyBST1RBVEUoYSw1KQoJICZsZWEoJGYsJkRXUCgweDVhODI3OTk5LCRmLCRlKSk7IyBmKz1GXzAwXzE5KGIsYyxkKStlCgkmbW92KCRlLCZzd3RtcCgoJG4rMSklMTYpKTsJIyBwcmUtZmV0Y2ggZiBmb3IgbmV4dCByb3VuZAoJICZhZGQoJGYsJHRtcDEpOwkJIyBmKz1ST1RBVEUoYSw1KQp9Cgl9CgpzdWIgQk9EWV8yMF8zOQoJewoJbG9jYWwoJG4sJGEsJGIsJGMsJGQsJGUsJGYpPUBfOwoJbG9jYWwgJEs9KCRuPDQwKT8weDZlZDllYmExOjB4Y2E2MmMxZDY7CgoJJmNvbW1lbnQoIjIwXzM5ICRuIik7CgppZiAoJGFsdCkgewoJJnhvcigkdG1wMSwkYyk7CQkJIyB0bXAxIHRvIGhvbGQgRl8yMF8zOShiLGMsZCksIGJePWMKCSAmeG9yKCRmLCZzd3RtcCgoJG4rMiklMTYpKTsJIyBmIHRvIGhvbGQgWHVwZGF0ZSh4aSx4YSx4Yix4Yyx4ZCkKCSZ4b3IoJHRtcDEsJGQpOwkJCSMgdG1wMSBob2xkcyBGXzIwXzM5KGIsYyxkKQoJICZ4b3IoJGYsJnN3dG1wKCgkbis4KSUxNikpOwoJJmFkZCgkZSwkdG1wMSk7CQkJIyBlKz1GXzIwXzM5KGIsYyxkKQoJICZ4b3IoJGYsJnN3dG1wKCgkbisxMyklMTYpKTsJIyBmIGhvbGRzIHhhXnhiXnhjXnhkCgkmcm90bCgkZiwxKTsJCQkjIGY9Uk9UQVRFKGYsMSkKCSAmbW92KCR0bXAxLCRhKTsJCSMgYiBpbiBuZXh0IHJvdW5kCgkmcm90cigkYiw3KTsJCQkjIGI9Uk9UQVRFKGIsMzApCgkgJm1vdigmc3d0bXAoJG4lMTYpLCRmKQkJaWYoJG48NzcpOyMgeGk9ZgoJJnJvdGwoJGEsNSk7CQkJIyBST1RBVEUoYSw1KQoJICZ4b3IoJGIsJGMpCQkJaWYoJG49PTM5KTsjIHdhcm0gdXAgZm9yIEJPRFlfNDBfNTkKCSZhbmQoJHRtcDEsJGIpCQkJaWYoJG49PTM5KTsKCSAmbGVhKCRmLCZEV1AoJEssJGYsJGUpKTsJIyBmKz1lK0tfWFhfWVkKCSZtb3YoJGUsJnN3dG1wKCgkbisxKSUxNikpCWlmKCRuPDc5KTsjIHByZS1mZXRjaCBmIGZvciBuZXh0IHJvdW5kCgkgJmFkZCgkZiwkYSk7CQkJIyBmKz1ST1RBVEUoYSw1KQoJJnJvdHIoJGEsNSkJCQlpZiAoJG49PTc5KTsKfSBlbHNlIHsKCSZtb3YoJHRtcDEsJGIpOwkJCSMgdG1wMSB0byBob2xkIEZfMjBfMzkoYixjLGQpCgkgJnhvcigkZiwmc3d0bXAoKCRuKzIpJTE2KSk7CSMgZiB0byBob2xkIFh1cGRhdGUoeGkseGEseGIseGMseGQpCgkmeG9yKCR0bXAxLCRjKTsKCSAmeG9yKCRmLCZzd3RtcCgoJG4rOCklMTYpKTsKCSZ4b3IoJHRtcDEsJGQpOwkJCSMgdG1wMSBob2xkcyBGXzIwXzM5KGIsYyxkKQoJICZ4b3IoJGYsJnN3dG1wKCgkbisxMyklMTYpKTsJIyBmIGhvbGRzIHhhXnhiXnhjXnhkCgkmcm90bCgkZiwxKTsJCQkjIGY9Uk9UQVRFKGYsMSkKCSAmYWRkKCRlLCR0bXAxKTsJCSMgZSs9Rl8yMF8zOShiLGMsZCkKCSZyb3RyKCRiLDIpOwkJCSMgYj1ST1RBVEUoYiwzMCkKCSAmbW92KCR0bXAxLCRhKTsKCSZyb3RsKCR0bXAxLDUpOwkJCSMgUk9UQVRFKGEsNSkKCSAmbW92KCZzd3RtcCgkbiUxNiksJGYpIGlmKCRuPDc3KTsjIHhpPWYKCSZsZWEoJGYsJkRXUCgkSywkZiwkZSkpOwkjIGYrPWUrS19YWF9ZWQoJICZtb3YoJGUsJnN3dG1wKCgkbisxKSUxNikpIGlmKCRuPDc5KTsjIHByZS1mZXRjaCBmIGZvciBuZXh0IHJvdW5kCgkmYWRkKCRmLCR0bXAxKTsJCQkjIGYrPVJPVEFURShhLDUpCn0KCX0KCnN1YiBCT0RZXzQwXzU5Cgl7Cglsb2NhbCgkbiwkYSwkYiwkYywkZCwkZSwkZik9QF87CgoJJmNvbW1lbnQoIjQwXzU5ICRuIik7CgppZiAoJGFsdCkgewoJJmFkZCgkZSwkdG1wMSk7CQkJIyBlKz1iJihjXmQpCgkgJnhvcigkZiwmc3d0bXAoKCRuKzIpJTE2KSk7CSMgZiB0byBob2xkIFh1cGRhdGUoeGkseGEseGIseGMseGQpCgkmbW92KCR0bXAxLCRkKTsKCSAmeG9yKCRmLCZzd3RtcCgoJG4rOCklMTYpKTsKCSZ4b3IoJGMsJGQpOwkJCSMgcmVzdG9yZSAkYwoJICZ4b3IoJGYsJnN3dG1wKCgkbisxMyklMTYpKTsJIyBmIGhvbGRzIHhhXnhiXnhjXnhkCgkmcm90bCgkZiwxKTsJCQkjIGY9Uk9UQVRFKGYsMSkKCSAmYW5kKCR0bXAxLCRjKTsKCSZyb3RyKCRiLDcpOwkJCSMgYj1ST1RBVEUoYiwzMCkKCSAmYWRkKCRlLCR0bXAxKTsJCSMgZSs9YyZkCgkmbW92KCR0bXAxLCRhKTsJCQkjIGIgaW4gbmV4dCByb3VuZAoJICZtb3YoJnN3dG1wKCRuJTE2KSwkZik7CSMgeGk9ZgoJJnJvdGwoJGEsNSk7CQkJIyBST1RBVEUoYSw1KQoJICZ4b3IoJGIsJGMpCQkJaWYgKCRuPDU5KTsKCSZhbmQoJHRtcDEsJGIpCQkJaWYgKCRuPDU5KTsjIHRtcDEgdG8gaG9sZCBGXzQwXzU5KGIsYyxkKQoJICZsZWEoJGYsJkRXUCgweDhmMWJiY2RjLCRmLCRlKSk7IyBmKz1LXzQwXzU5K2UrKGImKGNeZCkpCgkmbW92KCRlLCZzd3RtcCgoJG4rMSklMTYpKTsJIyBwcmUtZmV0Y2ggZiBmb3IgbmV4dCByb3VuZAoJICZhZGQoJGYsJGEpOwkJCSMgZis9Uk9UQVRFKGEsNSkKfSBlbHNlIHsKCSZtb3YoJHRtcDEsJGMpOwkJCSMgdG1wMSB0byBob2xkIEZfNDBfNTkoYixjLGQpCgkgJnhvcigkZiwmc3d0bXAoKCRuKzIpJTE2KSk7CSMgZiB0byBob2xkIFh1cGRhdGUoeGkseGEseGIseGMseGQpCgkmeG9yKCR0bXAxLCRkKTsKCSAmeG9yKCRmLCZzd3RtcCgoJG4rOCklMTYpKTsKCSZhbmQoJHRtcDEsJGIpOwoJICZ4b3IoJGYsJnN3dG1wKCgkbisxMyklMTYpKTsJIyBmIGhvbGRzIHhhXnhiXnhjXnhkCgkmcm90bCgkZiwxKTsJCQkjIGY9Uk9UQVRFKGYsMSkKCSAmYWRkKCR0bXAxLCRlKTsJCSMgYiYoY15kKSs9ZQoJJnJvdHIoJGIsMik7CQkJIyBiPVJPVEFURShiLDMwKQoJICZtb3YoJGUsJGEpOwkJCSMgZSBiZWNvbWVzIHZvbGF0aWxlCgkmcm90bCgkZSw1KTsJCQkjIFJPVEFURShhLDUpCgkgJm1vdigmc3d0bXAoJG4lMTYpLCRmKTsJIyB4aT1mCgkmbGVhKCRmLCZEV1AoMHg4ZjFiYmNkYywkZiwkdG1wMSkpOyMgZis9S180MF81OStlKyhiJihjXmQpKQoJICZtb3YoJHRtcDEsJGMpOwoJJmFkZCgkZiwkZSk7CQkJIyBmKz1ST1RBVEUoYSw1KQoJICZhbmQoJHRtcDEsJGQpOwoJJm1vdigkZSwmc3d0bXAoKCRuKzEpJTE2KSk7CSMgcHJlLWZldGNoIGYgZm9yIG5leHQgcm91bmQKCSAmYWRkKCRmLCR0bXAxKTsJCSMgZis9YyZkCn0KCX0KCiZmdW5jdGlvbl9iZWdpbigic2hhMV9ibG9ja19kYXRhX29yZGVyIik7CmlmICgkeG1tKSB7CiAgJnN0YXRpY19sYWJlbCgic3NzZTNfc2hvcnRjdXQiKTsKICAmc3RhdGljX2xhYmVsKCJhdnhfc2hvcnRjdXQiKQkJaWYgKCR5bW0pOwogICZzdGF0aWNfbGFiZWwoIktfWFhfWFgiKTsKCgkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQiKSk7CSMgbWFrZSBpdCBQSUMhCiAgJnNldF9sYWJlbCgicGljX3BvaW50Iik7CgkmYmxpbmRwb3AoJHRtcDEpOwoJJnBpY21ldXAoJFQsIk9QRU5TU0xfaWEzMmNhcF9QIiwkdG1wMSwmbGFiZWwoInBpY19wb2ludCIpKTsKCSZsZWEJKCR0bXAxLCZEV1AoJmxhYmVsKCJLX1hYX1hYIikuIi0iLiZsYWJlbCgicGljX3BvaW50IiksJHRtcDEpKTsKCgkmbW92CSgkQSwmRFdQKDAsJFQpKTsKCSZtb3YJKCRELCZEV1AoNCwkVCkpOwoJJnRlc3QJKCRELDE8PDkpOwkJIyBjaGVjayBTU1NFMyBiaXQKCSZqegkoJmxhYmVsKCJ4ODYiKSk7CgkmdGVzdAkoJEEsMTw8MjQpOwkJIyBjaGVjayBGWFNSIGJpdAoJJmp6CSgmbGFiZWwoIng4NiIpKTsKCWlmICgkeW1tKSB7CgkJJmFuZAkoJEQsMTw8MjgpOwkJIyBtYXNrIEFWWCBiaXQKCQkmYW5kCSgkQSwxPDwzMCk7CQkjIG1hc2sgIkludGVsIENQVSIgYml0CgkJJm9yCSgkQSwkRCk7CgkJJmNtcAkoJEEsMTw8Mjh8MTw8MzApOwoJCSZqZQkoJmxhYmVsKCJhdnhfc2hvcnRjdXQiKSk7Cgl9Cgkmam1wCSgmbGFiZWwoInNzc2UzX3Nob3J0Y3V0IikpOwogICZzZXRfbGFiZWwoIng4NiIsMTYpOwp9CgkmbW92KCR0bXAxLCZ3cGFyYW0oMCkpOwkjIFNIQV9DVFggKmMKCSZtb3YoJFQsJndwYXJhbSgxKSk7CSMgY29uc3Qgdm9pZCAqaW5wdXQKCSZtb3YoJEEsJndwYXJhbSgyKSk7CSMgc2l6ZV90IG51bQoJJnN0YWNrX3B1c2goMTYrMyk7CSMgYWxsb2NhdGUgWFsxNl0KCSZzaGwoJEEsNik7CgkmYWRkKCRBLCRUKTsKCSZtb3YoJndwYXJhbSgyKSwkQSk7CSMgcG9pbnRlciBiZXlvbmQgdGhlIGVuZCBvZiBpbnB1dAoJJm1vdigkRSwmRFdQKDE2LCR0bXAxKSk7IyBwcmUtbG9hZCBFCgkmam1wKCZsYWJlbCgibG9vcCIpKTsKCiZzZXRfbGFiZWwoImxvb3AiLDE2KTsKCgkjIGNvcHkgaW5wdXQgY2h1bmsgdG8gWCwgYnV0IHJldmVyc2luZyBieXRlIG9yZGVyIQoJZm9yICgkaT0wOyAkaTwxNjsgJGkrPTQpCgkJewoJCSZtb3YoJEEsJkRXUCg0KigkaSswKSwkVCkpOwoJCSZtb3YoJEIsJkRXUCg0KigkaSsxKSwkVCkpOwoJCSZtb3YoJEMsJkRXUCg0KigkaSsyKSwkVCkpOwoJCSZtb3YoJEQsJkRXUCg0KigkaSszKSwkVCkpOwoJCSZic3dhcCgkQSk7CgkJJmJzd2FwKCRCKTsKCQkmYnN3YXAoJEMpOwoJCSZic3dhcCgkRCk7CgkJJm1vdigmc3d0bXAoJGkrMCksJEEpOwoJCSZtb3YoJnN3dG1wKCRpKzEpLCRCKTsKCQkmbW92KCZzd3RtcCgkaSsyKSwkQyk7CgkJJm1vdigmc3d0bXAoJGkrMyksJEQpOwoJCX0KCSZtb3YoJndwYXJhbSgxKSwkVCk7CSMgcmVkdW5kYW50IGluIDFzdCBzcGluCgoJJm1vdigkQSwmRFdQKDAsJHRtcDEpKTsJIyBsb2FkIFNIQV9DVFgKCSZtb3YoJEIsJkRXUCg0LCR0bXAxKSk7CgkmbW92KCRDLCZEV1AoOCwkdG1wMSkpOwoJJm1vdigkRCwmRFdQKDEyLCR0bXAxKSk7CgkjIEUgaXMgcHJlLWxvYWRlZAoKCWZvcigkaT0wOyRpPDE2OyRpKyspCXsgJkJPRFlfMDBfMTUoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9Cglmb3IoOyRpPDIwOyRpKyspCXsgJkJPRFlfMTZfMTkoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9Cglmb3IoOyRpPDQwOyRpKyspCXsgJkJPRFlfMjBfMzkoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9Cglmb3IoOyRpPDYwOyRpKyspCXsgJkJPRFlfNDBfNTkoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9Cglmb3IoOyRpPDgwOyRpKyspCXsgJkJPRFlfMjBfMzkoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9CgoJKCgkVls1XSBlcSAkRCkgYW5kICgkVlswXSBlcSAkRSkpIG9yIGRpZTsJIyBkb3VibGUtY2hlY2sKCgkmbW92KCR0bXAxLCZ3cGFyYW0oMCkpOwkjIHJlLWxvYWQgU0hBX0NUWCoKCSZtb3YoJEQsJndwYXJhbSgxKSk7CSMgRCBpcyBsYXN0ICJUIiBhbmQgaXMgZGlzY2FyZGVkCgoJJmFkZCgkRSwmRFdQKDAsJHRtcDEpKTsJIyBFIGlzIGxhc3QgIkEiLi4uCgkmYWRkKCRULCZEV1AoNCwkdG1wMSkpOwoJJmFkZCgkQSwmRFdQKDgsJHRtcDEpKTsKCSZhZGQoJEIsJkRXUCgxMiwkdG1wMSkpOwoJJmFkZCgkQywmRFdQKDE2LCR0bXAxKSk7CgoJJm1vdigmRFdQKDAsJHRtcDEpLCRFKTsJIyB1cGRhdGUgU0hBX0NUWAoJICZhZGQoJEQsNjQpOwkJIyBhZHZhbmNlIGlucHV0IHBvaW50ZXIKCSZtb3YoJkRXUCg0LCR0bXAxKSwkVCk7CgkgJmNtcCgkRCwmd3BhcmFtKDIpKTsJIyBoYXZlIHdlIHJlYWNoZWQgdGhlIGVuZCB5ZXQ/CgkmbW92KCZEV1AoOCwkdG1wMSksJEEpOwoJICZtb3YoJEUsJEMpOwkJIyBDIGlzIGxhc3QgIkUiIHdoaWNoIG5lZWRzIHRvIGJlICJwcmUtbG9hZGVkIgoJJm1vdigmRFdQKDEyLCR0bXAxKSwkQik7CgkgJm1vdigkVCwkRCk7CQkjIGlucHV0IHBvaW50ZXIKCSZtb3YoJkRXUCgxNiwkdG1wMSksJEMpOwoJJmpiKCZsYWJlbCgibG9vcCIpKTsKCgkmc3RhY2tfcG9wKDE2KzMpOwomZnVuY3Rpb25fZW5kKCJzaGExX2Jsb2NrX2RhdGFfb3JkZXIiKTsKCmlmICgkeG1tKSB7CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBUaGUgU1NTRTMgaW1wbGVtZW50YXRpb24uCiMKIyAleG1tWzAtN10gYXJlIHVzZWQgYXMgcmluZyBAWFtdIGJ1ZmZlciBjb250YWluaW5nIHF1YWRydXBsZXMgb2YgbGFzdAojIDMyIGVsZW1lbnRzIG9mIHRoZSBtZXNzYWdlIHNjaGVkdWxlIG9yIFh1cGRhdGUgb3V0cHV0cy4gRmlyc3QgNAojIHF1YWRydXBsZXMgYXJlIHNpbXBseSBieXRlLXN3YXBwZWQgaW5wdXQsIG5leHQgNCBhcmUgY2FsY3VsYXRlZAojIGFjY29yZGluZyB0byBtZXRob2Qgb3JpZ2luYWxseSBzdWdnZXN0ZWQgYnkgRGVhbiBHYXVkZXQgKG1vZHVsbwojIGJlaW5nIGltcGxlbWVudGVkIGluIFNTU0UzKS4gT25jZSA4IHF1YWRydXBsZXMgb3IgMzIgZWxlbWVudHMgYXJlCiMgY29sbGVjdGVkLCBpdCBzd2l0Y2hlcyB0byByb3V0aW5lIHByb3Bvc2VkIGJ5IE1heCBMb2NrdHl1a2hpbi4KIwojIENhbGN1bGF0aW9ucyBpbmV2aXRhYmx5IHJlcXVpcmUgdGVtcG9yYXJ5IHJlcWlzdGVycywgYW5kIHRoZXJlIGFyZQojIG5vICV4bW0gcmVnaXN0ZXJzIGxlZnQgdG8gc3BhcmUuIEZvciB0aGlzIHJlYXNvbiBwYXJ0IG9mIHRoZSByaW5nCiMgYnVmZmVyLCBYWzIuLjRdIHRvIGJlIHNwZWNpZmljLCBpcyBvZmZsb2FkZWQgdG8gMyBxdWFkcmlwbGVzIHJpbmcKIyBidWZmZXIgb24gdGhlIHN0YWNrLiBLZWVwIGluIG1pbmQgdGhhdCBYWzJdIGlzIGFsaWFzIFhbLTZdLCBYWzNdIC0KIyBYWy01XSwgYW5kIFhbNF0gLSBYWy00XS4uLgojCiMgQW5vdGhlciBub3RhYmxlIG9wdGltaXphdGlvbiBpcyBhZ2dyZXNzaXZlIHN0YWNrIGZyYW1lIGNvbXByZXNzaW9uCiMgYWltaW5nIHRvIG1pbmltaXplIGFtb3VudCBvZiA5LWJ5dGUgaW5zdHJ1Y3Rpb25zLi4uCiMKIyBZZXQgYW5vdGhlciBub3RhYmxlIG9wdGltaXphdGlvbiBpcyAianVtcGluZyIgJEIgdmFyaWFibGUuIEl0IG1lYW5zCiMgdGhhdCB0aGVyZSBpcyBubyByZWdpc3RlciBwZXJtYW5lbnRseSBhbGxvY2F0ZWQgZm9yICRCIHZhbHVlLiBUaGlzCiMgYWxsb3dlZCB0byBlbGltaW5hdGUgb25lIGluc3RydWN0aW9uIGZyb20gYm9keV8yMF8zOS4uLgojCm15ICRYaT00OwkJCSMgNHhTSU1EIFh1cGRhdGUgcm91bmQsIHN0YXJ0IHByZS1zZWVkZWQKbXkgQFg9bWFwKCJ4bW0kXyIsKDQuLjcsMC4uMykpOwkjIHByZS1zZWVkZWQgZm9yICRYaT00Cm15IEBWPSgkQSwkQiwkQywkRCwkRSk7Cm15ICRqPTA7CQkJIyBoYXNoIHJvdW5kCm15ICRyeD0wOwpteSBAVD0oJFQsJHRtcDEpOwpteSAkaW5wOwoKbXkgJF9yb2w9c3ViIHsgJnJvbChAXykgfTsKbXkgJF9yb3I9c3ViIHsgJnJvcihAXykgfTsKCiZmdW5jdGlvbl9iZWdpbigiX3NoYTFfYmxvY2tfZGF0YV9vcmRlcl9zc3NlMyIpOwoJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50IikpOwkjIG1ha2UgaXQgUElDIQoJJnNldF9sYWJlbCgicGljX3BvaW50Iik7CgkmYmxpbmRwb3AoJHRtcDEpOwoJJmxlYQkoJHRtcDEsJkRXUCgmbGFiZWwoIktfWFhfWFgiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwkdG1wMSkpOwomc2V0X2xhYmVsKCJzc3NlM19zaG9ydGN1dCIpOwoKCSZtb3ZkcWEJKEBYWzNdLCZRV1AoMCwkdG1wMSkpOwkJIyBLXzAwXzE5CgkmbW92ZHFhCShAWFs0XSwmUVdQKDE2LCR0bXAxKSk7CQkjIEtfMjBfMzkKCSZtb3ZkcWEJKEBYWzVdLCZRV1AoMzIsJHRtcDEpKTsJCSMgS180MF81OQoJJm1vdmRxYQkoQFhbNl0sJlFXUCg0OCwkdG1wMSkpOwkJIyBLXzYwXzc5CgkmbW92ZHFhCShAWFsyXSwmUVdQKDY0LCR0bXAxKSk7CQkjIHBic3dhcCBtYXNrCgoJJm1vdgkoJEUsJndwYXJhbSgwKSk7CQkjIGxvYWQgYXJndW1lbnQgYmxvY2sKCSZtb3YJKCRpbnA9QFRbMV0sJndwYXJhbSgxKSk7CgkmbW92CSgkRCwmd3BhcmFtKDIpKTsKCSZtb3YJKEBUWzBdLCJlc3AiKTsKCgkjIHN0YWNrIGZyYW1lIGxheW91dAoJIwoJIyArMAlYWzBdK0sJWFsxXStLCVhbMl0rSwlYWzNdK0sJIyBYTU0tPklBTFUgeGZlciBhcmVhCgkjCVhbNF0rSwlYWzVdK0sJWFs2XStLCVhbN10rSwoJIwlYWzhdK0sJWFs5XStLCVhbMTBdK0sJWFsxMV0rSwoJIwlYWzEyXStLCVhbMTNdK0sJWFsxNF0rSwlYWzE1XStLCgkjCgkjICs2NAlYWzBdCVhbMV0JWFsyXQlYWzNdCSMgWE1NLT5YTU0gYmFja3RyYWNlIGFyZWEKCSMJWFs0XQlYWzVdCVhbNl0JWFs3XQoJIwlYWzhdCVhbOV0JWFsxMF0JWFsxMV0JIyBldmVuIGJvcnJvd2VkIGZvciBLXzAwXzE5CgkjCgkjICsxMTIJS18yMF8zOQlLXzIwXzM5CUtfMjBfMzkJS18yMF8zOQkjIGNvbnN0YW50cwoJIwlLXzQwXzU5CUtfNDBfNTkJS180MF81OQlLXzQwXzU5CgkjCUtfNjBfNzkJS182MF83OQlLXzYwXzc5CUtfNjBfNzkKCSMJS18wMF8xOQlLXzAwXzE5CUtfMDBfMTkJS18wMF8xOQoJIwlwYnN3YXAgbWFzawoJIwoJIyArMTkyCWN0eAkJCQkjIGFyZ3VtZW50IGJsb2NrCgkjICsxOTYJaW5wCgkjICsyMDAJZW5kCgkjICsyMDQJZXNwCgkmc3ViCSgiZXNwIiwyMDgpOwoJJmFuZAkoImVzcCIsLTY0KTsKCgkmbW92ZHFhCSgmUVdQKDExMiswLCJlc3AiKSxAWFs0XSk7CSMgY29weSBjb25zdGFudHMKCSZtb3ZkcWEJKCZRV1AoMTEyKzE2LCJlc3AiKSxAWFs1XSk7CgkmbW92ZHFhCSgmUVdQKDExMiszMiwiZXNwIiksQFhbNl0pOwoJJnNobAkoJEQsNik7CQkJCSMgbGVuKjY0CgkmbW92ZHFhCSgmUVdQKDExMis0OCwiZXNwIiksQFhbM10pOwoJJmFkZAkoJEQsJGlucCk7CQkJIyBlbmQgb2YgaW5wdXQKCSZtb3ZkcWEJKCZRV1AoMTEyKzY0LCJlc3AiKSxAWFsyXSk7CgkmYWRkCSgkaW5wLDY0KTsKCSZtb3YJKCZEV1AoMTkyKzAsImVzcCIpLCRFKTsJCSMgc2F2ZSBhcmd1bWVudCBibG9jawoJJm1vdgkoJkRXUCgxOTIrNCwiZXNwIiksJGlucCk7CgkmbW92CSgmRFdQKDE5Mis4LCJlc3AiKSwkRCk7CgkmbW92CSgmRFdQKDE5MisxMiwiZXNwIiksQFRbMF0pOwkjIHNhdmUgb3JpZ2luYWwgJWVzcAoKCSZtb3YJKCRBLCZEV1AoMCwkRSkpOwkJIyBsb2FkIGNvbnRleHQKCSZtb3YJKCRCLCZEV1AoNCwkRSkpOwoJJm1vdgkoJEMsJkRXUCg4LCRFKSk7CgkmbW92CSgkRCwmRFdQKDEyLCRFKSk7CgkmbW92CSgkRSwmRFdQKDE2LCRFKSk7CgkmbW92CShAVFswXSwkQik7CQkJIyBtYWdpYyBzZWVkCgoJJm1vdmRxdQkoQFhbLTQmN10sJlFXUCgtNjQsJGlucCkpOwkjIGxvYWQgaW5wdXQgdG8gJXhtbVswLTNdCgkmbW92ZHF1CShAWFstMyY3XSwmUVdQKC00OCwkaW5wKSk7CgkmbW92ZHF1CShAWFstMiY3XSwmUVdQKC0zMiwkaW5wKSk7CgkmbW92ZHF1CShAWFstMSY3XSwmUVdQKC0xNiwkaW5wKSk7CgkmcHNodWZiCShAWFstNCY3XSxAWFsyXSk7CQkjIGJ5dGUgc3dhcAoJJnBzaHVmYgkoQFhbLTMmN10sQFhbMl0pOwoJJnBzaHVmYgkoQFhbLTImN10sQFhbMl0pOwoJJm1vdmRxYQkoJlFXUCgxMTItMTYsImVzcCIpLEBYWzNdKTsJIyBib3Jyb3cgbGFzdCBiYWNrdHJhY2Ugc2xvdAoJJnBzaHVmYgkoQFhbLTEmN10sQFhbMl0pOwoJJnBhZGRkCShAWFstNCY3XSxAWFszXSk7CQkjIGFkZCBLXzAwXzE5CgkmcGFkZGQJKEBYWy0zJjddLEBYWzNdKTsKCSZwYWRkZAkoQFhbLTImN10sQFhbM10pOwoJJm1vdmRxYQkoJlFXUCgwLCJlc3AiKSxAWFstNCY3XSk7CSMgWFtdK0sgeGZlciB0byBJQUxVCgkmcHN1YmQJKEBYWy00JjddLEBYWzNdKTsJCSMgcmVzdG9yZSBYW10KCSZtb3ZkcWEJKCZRV1AoMCsxNiwiZXNwIiksQFhbLTMmN10pOwoJJnBzdWJkCShAWFstMyY3XSxAWFszXSk7CgkmbW92ZHFhCSgmUVdQKDArMzIsImVzcCIpLEBYWy0yJjddKTsKCSZtb3YJKEBUWzFdLCRDKTsKCSZwc3ViZAkoQFhbLTImN10sQFhbM10pOwoJJnhvcgkoQFRbMV0sJEQpOwoJJm1vdmRxYQkoQFhbMF0sQFhbLTMmN10pOwoJJmFuZAkoQFRbMF0sQFRbMV0pOwoJJmptcAkoJmxhYmVsKCJsb29wIikpOwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFNTRSBpbnN0cnVjdGlvbiBzZXF1ZW5jZSBpcyBmaXJzdCBicm9rZW4gdG8gZ3JvdXBzIG9mIGluZGVwZW50ZW50CiMgaW5zdHJ1Y3Rpb25zLCBpbmRlcGVuZGVudCBpbiByZXNwZWN0IHRvIHRoZWlyIGlucHV0cyBhbmQgc2hpZnRlcgojIChub3QgYWxsIGFyY2hpdGVjdHVyZXMgaGF2ZSBtb3JlIHRoYW4gb25lKS4gVGhlbiBJQUxVIGluc3RydWN0aW9ucwojIGFyZSAia25pdHRlZCBpbiIgYmV0d2VlbiB0aGUgU1NFIGdyb3Vwcy4gRGlzdGFuY2UgaXMgbWFpbnRhaW5lZCBmb3IKIyBTU0UgbGF0ZW5jeSBvZiAyIGluIGhvcGUgdGhhdCBpdCBmaXRzIGJldHRlciB1cGNvbWluZyBBTUQgQnVsbGRvemVyCiMgW3doaWNoIGFsbGVnZWRseSBhbHNvIGltcGxlbWVudHMgU1NTRTNdLi4uCiMKIyBUZW1wb3JhcnkgcmVnaXN0ZXJzIHVzYWdlLiBYWzJdIGlzIHZvbGF0aWxlIGF0IHRoZSBlbnRyeSBhbmQgYXQgdGhlCiMgZW5kIGlzIHJlc3RvcmVkIGZyb20gYmFja3RyYWNlIHJpbmcgYnVmZmVyLiBYWzNdIGlzIGV4cGVjdGVkIHRvCiMgY29udGFpbiBjdXJyZW50IEtfWFhfWFggY29uc3RhbnQgYW5kIGlzIHVzZWQgdG8gY2FjbHVsYXRlIFhbLTFdK0sKIyBmcm9tIHByZXZpb3VzIHJvdW5kLCBpdCBiZWNvbWVzIHZvbGF0aWxlIHRoZSBtb21lbnQgdGhlIHZhbHVlIGlzCiMgc2F2ZWQgdG8gc3RhY2sgZm9yIHRyYW5zZmVyIHRvIElBTFUuIFhbNF0gYmVjb21lcyB2b2xhdGlsZSB3aGVuZXZlcgojIFhbLTRdIGlzIGFjY3VtdWxhdGVkIGFuZCBvZmZsb2FkZWQgdG8gYmFja3RyYWNlIHJpbmcgYnVmZmVyLCBhdCB0aGUKIyBlbmQgaXQgaXMgbG9hZGVkIHdpdGggbmV4dCBLX1hYX1hYIFt3aGljaCBiZWNvbWVzIFhbM10gaW4gbmV4dAojIHJvdW5kXS4uLgojCnN1YiBYdXBkYXRlX3Nzc2UzXzE2XzMxKCkJCSMgcmVjYWxsIHRoYXQgJFhpIHN0YXJ0cyB3dGloIDQKeyB1c2UgaW50ZWdlcjsKICBteSAkYm9keSA9IHNoaWZ0OwogIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDQwIGluc3RydWN0aW9ucwogIG15ICgkYSwkYiwkYywkZCwkZSk7CgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSZwYWxpZ25yKEBYWzBdLEBYWy00JjddLDgpOwkjIGNvbXBvc2UgIlhbLTE0XSIgaW4gIlhbMF0iCgkmbW92ZHFhCShAWFsyXSxAWFstMSY3XSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSAgJnBhZGRkCShAWFszXSxAWFstMSY3XSk7CgkgICZtb3ZkcWEJKCZRV1AoNjQrMTYqKCgkWGktNCklMyksImVzcCIpLEBYWy00JjddKTsjIHNhdmUgWFtdIHRvIGJhY2t0cmFjZSBidWZmZXIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkmcHNybGRxCShAWFsyXSw0KTsJCSMgIlhbLTNdIiwgMyBkd29yZHMKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkmcHhvcgkoQFhbMF0sQFhbLTQmN10pOwkjICJYWzBdIl49IlhbLTE2XSIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJJnB4b3IJKEBYWzJdLEBYWy0yJjddKTsJIyAiWFstM10iXiJYWy04XSIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSZweG9yCShAWFswXSxAWFsyXSk7CQkjICJYWzBdIl49IlhbLTNdIl4iWFstOF0iCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJICAmbW92ZHFhCSgmUVdQKDArMTYqKCgkWGktMSkmMyksImVzcCIpLEBYWzNdKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJJm1vdmRxYQkoQFhbNF0sQFhbMF0pOwoJJm1vdmRxYQkoQFhbMl0sQFhbMF0pOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJJnBzbGxkcQkoQFhbNF0sMTIpOwkJIyAiWFswXSI8PDk2LCBleHRyYWN0IG9uZSBkd29yZAoJJnBhZGRkCShAWFswXSxAWFswXSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmcHNybGQJKEBYWzJdLDMxKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkmbW92ZHFhCShAWFszXSxAWFs0XSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSZwc3JsZAkoQFhbNF0sMzApOwoJJnBvcgkoQFhbMF0sQFhbMl0pOwkJIyAiWFswXSI8PDw9MQoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgJm1vdmRxYQkoQFhbMl0sJlFXUCg2NCsxNiooKCRYaS02KSUzKSwiZXNwIikpIGlmICgkWGk+NSk7CSMgcmVzdG9yZSBYW10gZnJvbSBiYWNrdHJhY2UgYnVmZmVyCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSZwc2xsZAkoQFhbM10sMik7CgkmcHhvcgkoQFhbMF0sQFhbNF0pOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgJm1vdmRxYQkoQFhbNF0sJlFXUCgxMTItMTYrMTYqKCgkWGkpLzUpLCJlc3AiKSk7CSMgS19YWF9YWAoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmcHhvcgkoQFhbMF0sQFhbM10pOwkJIyAiWFswXSJePSgiWFswXSI8PDk2KTw8PDIKCSAgJm1vdmRxYQkoQFhbMV0sQFhbLTImN10pCWlmICgkWGk8Nyk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSBmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQkjIHJlbWFpbmluZyBpbnN0cnVjdGlvbnMgW2lmIGFueV0KCiAgJFhpKys7CXB1c2goQFgsc2hpZnQoQFgpKTsJIyAicm90YXRlIiBYW10KfQoKc3ViIFh1cGRhdGVfc3NzZTNfMzJfNzkoKQp7IHVzZSBpbnRlZ2VyOwogIG15ICRib2R5ID0gc2hpZnQ7CiAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMzIgdG8gNDQgaW5zdHJ1Y3Rpb25zCiAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKCgkmbW92ZHFhCShAWFsyXSxAWFstMSY3XSkJaWYgKCRYaT09OCk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQoJJnB4b3IJKEBYWzBdLEBYWy00JjddKTsJIyAiWFswXSI9IlhbLTMyXSJeIlhbLTE2XSIKCSZwYWxpZ25yKEBYWzJdLEBYWy0yJjddLDgpOwkjIGNvbXBvc2UgIlhbLTZdIgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKCgkmcHhvcgkoQFhbMF0sQFhbLTcmN10pOwkjICJYWzBdIl49IlhbLTI4XSIKCSAgJm1vdmRxYQkoJlFXUCg2NCsxNiooKCRYaS00KSUzKSwiZXNwIiksQFhbLTQmN10pOwkjIHNhdmUgWFtdIHRvIGJhY2t0cmFjZSBidWZmZXIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgaWYgKCRYaSU1KSB7CgkgICZtb3ZkcWEJKEBYWzRdLEBYWzNdKTsJIyAicGVycGV0dWF0ZSIgS19YWF9YWC4uLgoJIH0gZWxzZSB7CQkJIyAuLi4gb3IgbG9hZCBuZXh0IG9uZQoJICAmbW92ZHFhCShAWFs0XSwmUVdQKDExMi0xNisxNiooJFhpLzUpLCJlc3AiKSk7CgkgfQoJICAmcGFkZGQJKEBYWzNdLEBYWy0xJjddKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb3IKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSZweG9yCShAWFswXSxAWFsyXSk7CQkjICJYWzBdIl49IlhbLTZdIgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIGJvZHlfMjBfMzkKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9sCgoJJm1vdmRxYQkoQFhbMl0sQFhbMF0pOwoJICAmbW92ZHFhCSgmUVdQKDArMTYqKCgkWGktMSkmMyksImVzcCIpLEBYWzNdKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmcHNsbGQJKEBYWzBdLDIpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIGJvZHlfMjBfMzkKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnBzcmxkCShAWFsyXSwzMCk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmcG9yCShAWFswXSxAWFsyXSk7CQkjICJYWzBdIjw8PD0yCgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgICZtb3ZkcWEJKEBYWzJdLCZRV1AoNjQrMTYqKCgkWGktNiklMyksImVzcCIpKSBpZigkWGk8MTkpOwkjIHJlc3RvcmUgWFtdIGZyb20gYmFja3RyYWNlIGJ1ZmZlcgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9sCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgoJICAmbW92ZHFhCShAWFszXSxAWFswXSkJaWYgKCRYaTwxOSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkgZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0JIyByZW1haW5pbmcgaW5zdHJ1Y3Rpb25zCgogICRYaSsrOwlwdXNoKEBYLHNoaWZ0KEBYKSk7CSMgInJvdGF0ZSIgWFtdCn0KCnN1YiBYdXBsYXN0X3Nzc2UzXzgwKCkKeyB1c2UgaW50ZWdlcjsKICBteSAkYm9keSA9IHNoaWZ0OwogIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIGluc3RydWN0aW9ucwogIG15ICgkYSwkYiwkYywkZCwkZSk7CgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgICZwYWRkZAkoQFhbM10sQFhbLTEmN10pOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJICAmbW92ZHFhCSgmUVdQKDArMTYqKCgkWGktMSkmMyksImVzcCIpLEBYWzNdKTsJIyBYW10rSyB4ZmVyIElBTFUKCgkgZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0JCSMgcmVtYWluaW5nIGluc3RydWN0aW9ucwoKCSZtb3YJKCRpbnA9QFRbMV0sJkRXUCgxOTIrNCwiZXNwIikpOwoJJmNtcAkoJGlucCwmRFdQKDE5Mis4LCJlc3AiKSk7CgkmamUJKCZsYWJlbCgiZG9uZSIpKTsKCgkmbW92ZHFhCShAWFszXSwmUVdQKDExMis0OCwiZXNwIikpOwkjIEtfMDBfMTkKCSZtb3ZkcWEJKEBYWzJdLCZRV1AoMTEyKzY0LCJlc3AiKSk7CSMgcGJzd2FwIG1hc2sKCSZtb3ZkcXUJKEBYWy00JjddLCZRV1AoMCwkaW5wKSk7CSMgbG9hZCBpbnB1dAoJJm1vdmRxdQkoQFhbLTMmN10sJlFXUCgxNiwkaW5wKSk7CgkmbW92ZHF1CShAWFstMiY3XSwmUVdQKDMyLCRpbnApKTsKCSZtb3ZkcXUJKEBYWy0xJjddLCZRV1AoNDgsJGlucCkpOwoJJmFkZAkoJGlucCw2NCk7CgkmcHNodWZiCShAWFstNCY3XSxAWFsyXSk7CQkjIGJ5dGUgc3dhcAoJJm1vdgkoJkRXUCgxOTIrNCwiZXNwIiksJGlucCk7CgkmbW92ZHFhCSgmUVdQKDExMi0xNiwiZXNwIiksQFhbM10pOwkjIGJvcnJvdyBsYXN0IGJhY2t0cmFjZSBzbG90CgogICRYaT0wOwp9CgpzdWIgWGxvb3Bfc3NzZTMoKQp7IHVzZSBpbnRlZ2VyOwogIG15ICRib2R5ID0gc2hpZnQ7CiAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMzIgaW5zdHJ1Y3Rpb25zCiAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnBzaHVmYgkoQFhbKCRYaS0zKSY3XSxAWFsyXSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnBhZGRkCShAWFsoJFhpLTQpJjddLEBYWzNdKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJm1vdmRxYQkoJlFXUCgwKzE2KiRYaSwiZXNwIiksQFhbKCRYaS00KSY3XSk7CSMgWFtdK0sgeGZlciB0byBJQUxVCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnBzdWJkCShAWFsoJFhpLTQpJjddLEBYWzNdKTsKCglmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQogICRYaSsrOwp9CgpzdWIgWHRhaWxfc3NzZTMoKQp7IHVzZSBpbnRlZ2VyOwogIG15ICRib2R5ID0gc2hpZnQ7CiAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMzIgaW5zdHJ1Y3Rpb25zCiAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKCglmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQp9CgpzdWIgYm9keV8wMF8xOSAoKSB7CSMgKChjXmQpJmIpXmQKCSMgb24gc3RhcnQgQFRbMF09KGNeZCkmYgoJcmV0dXJuICZib2R5XzIwXzM5KCkJaWYgKCRyeD09MTkpOwkkcngrKzsKCSgKCScoJGEsJGIsJGMsJGQsJGUpPUBWOycuCgknJiRfcm9yCSgkYiwkaj83OjIpOycsCSMgJGI+Pj4yCgknJnhvcgkoQFRbMF0sJGQpOycsCgknJm1vdgkoQFRbMV0sJGEpOycsCSMgJGIgaW4gbmV4dCByb3VuZAoKCScmYWRkCSgkZSwmRFdQKDQqKCRqJjE1KSwiZXNwIikpOycsCSMgWFtdK0sgeGZlcgoJJyZ4b3IJKCRiLCRjKTsnLAkjICRjXiRkIGZvciBuZXh0IHJvdW5kCgoJJyYkX3JvbAkoJGEsNSk7JywKCScmYWRkCSgkZSxAVFswXSk7JywKCScmYW5kCShAVFsxXSwkYik7JywJIyAoJGImKCRjXiRkKSkgZm9yIG5leHQgcm91bmQKCgknJnhvcgkoJGIsJGMpOycsCSMgcmVzdG9yZSAkYgoJJyZhZGQJKCRlLCRhKTsnCS4nJGorKzsgdW5zaGlmdChAVixwb3AoQFYpKTsgdW5zaGlmdChAVCxwb3AoQFQpKTsnCgkpOwp9CgpzdWIgYm9keV8yMF8zOSAoKSB7CSMgYl5kXmMKCSMgb24gZW50cnkgQFRbMF09Yl5kCglyZXR1cm4gJmJvZHlfNDBfNTkoKQlpZiAoJHJ4PT0zOSk7CSRyeCsrOwoJKAoJJygkYSwkYiwkYywkZCwkZSk9QFY7Jy4KCScmYWRkCSgkZSwmRFdQKDQqKCRqJjE1KSwiZXNwIikpOycsCSMgWFtdK0sgeGZlcgoJJyZ4b3IJKEBUWzBdLCRkKQlpZigkaj09MTkpOycuCgknJnhvcgkoQFRbMF0sJGMpCWlmKCRqPiAxOSk7JywJIyAoJGJeJGReJGMpCgknJm1vdgkoQFRbMV0sJGEpOycsCSMgJGIgaW4gbmV4dCByb3VuZAoKCScmJF9yb2wJKCRhLDUpOycsCgknJmFkZAkoJGUsQFRbMF0pOycsCgknJnhvcgkoQFRbMV0sJGMpCWlmICgkajwgNzkpOycsCSMgJGJeJGQgZm9yIG5leHQgcm91bmQKCgknJiRfcm9yCSgkYiw3KTsnLAkjICRiPj4+MgoJJyZhZGQJKCRlLCRhKTsnCS4nJGorKzsgdW5zaGlmdChAVixwb3AoQFYpKTsgdW5zaGlmdChAVCxwb3AoQFQpKTsnCgkpOwp9CgpzdWIgYm9keV80MF81OSAoKSB7CSMgKChiXmMpJihjXmQpKV5jCgkjIG9uIGVudHJ5IEBUWzBdPShiXmMpLCAoY149ZCkKCSRyeCsrOwoJKAoJJygkYSwkYiwkYywkZCwkZSk9QFY7Jy4KCScmYWRkCSgkZSwmRFdQKDQqKCRqJjE1KSwiZXNwIikpOycsCSMgWFtdK0sgeGZlcgoJJyZhbmQJKEBUWzBdLCRjKQlpZiAoJGo+PTQwKTsnLAkjIChiXmMpJihjXmQpCgknJnhvcgkoJGMsJGQpCQlpZiAoJGo+PTQwKTsnLAkjIHJlc3RvcmUgJGMKCgknJiRfcm9yCSgkYiw3KTsnLAkjICRiPj4+MgoJJyZtb3YJKEBUWzFdLCRhKTsnLAkjICRiIGZvciBuZXh0IHJvdW5kCgknJnhvcgkoQFRbMF0sJGMpOycsCgoJJyYkX3JvbAkoJGEsNSk7JywKCScmYWRkCSgkZSxAVFswXSk7JywKCScmeG9yCShAVFsxXSwkYykJaWYgKCRqPT01OSk7Jy4KCScmeG9yCShAVFsxXSwkYikJaWYgKCRqPCA1OSk7JywJIyBiXmMgZm9yIG5leHQgcm91bmQKCgknJnhvcgkoJGIsJGMpCQlpZiAoJGo8IDU5KTsnLAkjIGNeZCBmb3IgbmV4dCByb3VuZAoJJyZhZGQJKCRlLCRhKTsnCS4nJGorKzsgdW5zaGlmdChAVixwb3AoQFYpKTsgdW5zaGlmdChAVCxwb3AoQFQpKTsnCgkpOwp9Cgomc2V0X2xhYmVsKCJsb29wIiwxNik7CgkmWHVwZGF0ZV9zc3NlM18xNl8zMShcJmJvZHlfMDBfMTkpOwoJJlh1cGRhdGVfc3NzZTNfMTZfMzEoXCZib2R5XzAwXzE5KTsKCSZYdXBkYXRlX3Nzc2UzXzE2XzMxKFwmYm9keV8wMF8xOSk7CgkmWHVwZGF0ZV9zc3NlM18xNl8zMShcJmJvZHlfMDBfMTkpOwoJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzAwXzE5KTsKCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV8yMF8zOSk7CgkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfMjBfMzkpOwoJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzIwXzM5KTsKCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV8yMF8zOSk7CgkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfMjBfMzkpOwoJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzQwXzU5KTsKCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV80MF81OSk7CgkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfNDBfNTkpOwoJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzQwXzU5KTsKCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV80MF81OSk7CgkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfMjBfMzkpOwoJJlh1cGxhc3Rfc3NzZTNfODAoXCZib2R5XzIwXzM5KTsJIyBjYW4ganVtcCB0byAiZG9uZSIKCgkJCQkkc2F2ZWRfaj0kajsgQHNhdmVkX1Y9QFY7CgoJJlhsb29wX3Nzc2UzKFwmYm9keV8yMF8zOSk7CgkmWGxvb3Bfc3NzZTMoXCZib2R5XzIwXzM5KTsKCSZYbG9vcF9zc3NlMyhcJmJvZHlfMjBfMzkpOwoKCSZtb3YJKEBUWzFdLCZEV1AoMTkyLCJlc3AiKSk7CSMgdXBkYXRlIGNvbnRleHQKCSZhZGQJKCRBLCZEV1AoMCxAVFsxXSkpOwoJJmFkZAkoQFRbMF0sJkRXUCg0LEBUWzFdKSk7CQkjICRiCgkmYWRkCSgkQywmRFdQKDgsQFRbMV0pKTsKCSZtb3YJKCZEV1AoMCxAVFsxXSksJEEpOwoJJmFkZAkoJEQsJkRXUCgxMixAVFsxXSkpOwoJJm1vdgkoJkRXUCg0LEBUWzFdKSxAVFswXSk7CgkmYWRkCSgkRSwmRFdQKDE2LEBUWzFdKSk7CgkmbW92CSgmRFdQKDgsQFRbMV0pLCRDKTsKCSZtb3YJKCRCLCRDKTsKCSZtb3YJKCZEV1AoMTIsQFRbMV0pLCREKTsKCSZ4b3IJKCRCLCREKTsKCSZtb3YJKCZEV1AoMTYsQFRbMV0pLCRFKTsKCSZhbmQJKCRCLEBUWzBdKTsKCSZtb3ZkcWEJKEBYWzBdLEBYWy0zJjddKTsKCSZ4Y2hnCSgkQixAVFswXSk7CgoJJmptcAkoJmxhYmVsKCJsb29wIikpOwoKJnNldF9sYWJlbCgiZG9uZSIsMTYpOwkJJGo9JHNhdmVkX2o7IEBWPUBzYXZlZF9WOwoKCSZYdGFpbF9zc3NlMyhcJmJvZHlfMjBfMzkpOwoJJlh0YWlsX3Nzc2UzKFwmYm9keV8yMF8zOSk7CgkmWHRhaWxfc3NzZTMoXCZib2R5XzIwXzM5KTsKCgkmbW92CShAVFsxXSwmRFdQKDE5MiwiZXNwIikpOwkjIHVwZGF0ZSBjb250ZXh0CgkmYWRkCSgkQSwmRFdQKDAsQFRbMV0pKTsKCSZtb3YJKCJlc3AiLCZEV1AoMTkyKzEyLCJlc3AiKSk7CSMgcmVzdG9yZSAlZXNwCgkmYWRkCShAVFswXSwmRFdQKDQsQFRbMV0pKTsJCSMgJGIKCSZhZGQJKCRDLCZEV1AoOCxAVFsxXSkpOwoJJm1vdgkoJkRXUCgwLEBUWzFdKSwkQSk7CgkmYWRkCSgkRCwmRFdQKDEyLEBUWzFdKSk7CgkmbW92CSgmRFdQKDQsQFRbMV0pLEBUWzBdKTsKCSZhZGQJKCRFLCZEV1AoMTYsQFRbMV0pKTsKCSZtb3YJKCZEV1AoOCxAVFsxXSksJEMpOwoJJm1vdgkoJkRXUCgxMixAVFsxXSksJEQpOwoJJm1vdgkoJkRXUCgxNixAVFsxXSksJEUpOwoKJmZ1bmN0aW9uX2VuZCgiX3NoYTFfYmxvY2tfZGF0YV9vcmRlcl9zc3NlMyIpOwoKJHJ4PTA7CSMgcmVzZXQKCmlmICgkeW1tKSB7Cm15ICRYaT00OwkJCSMgNHhTSU1EIFh1cGRhdGUgcm91bmQsIHN0YXJ0IHByZS1zZWVkZWQKbXkgQFg9bWFwKCJ4bW0kXyIsKDQuLjcsMC4uMykpOwkjIHByZS1zZWVkZWQgZm9yICRYaT00Cm15IEBWPSgkQSwkQiwkQywkRCwkRSk7Cm15ICRqPTA7CQkJIyBoYXNoIHJvdW5kCm15IEBUPSgkVCwkdG1wMSk7Cm15ICRpbnA7CgpteSAkX3JvbD1zdWIgeyAmc2hsZChAX1swXSxAXykgfTsKbXkgJF9yb3I9c3ViIHsgJnNocmQoQF9bMF0sQF8pIH07CgomZnVuY3Rpb25fYmVnaW4oIl9zaGExX2Jsb2NrX2RhdGFfb3JkZXJfYXZ4Iik7CgkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQiKSk7CSMgbWFrZSBpdCBQSUMhCgkmc2V0X2xhYmVsKCJwaWNfcG9pbnQiKTsKCSZibGluZHBvcCgkdG1wMSk7CgkmbGVhCSgkdG1wMSwmRFdQKCZsYWJlbCgiS19YWF9YWCIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCR0bXAxKSk7CiZzZXRfbGFiZWwoImF2eF9zaG9ydGN1dCIpOwoJJnZ6ZXJvYWxsKCk7CgoJJnZtb3ZkcWEoQFhbM10sJlFXUCgwLCR0bXAxKSk7CQkjIEtfMDBfMTkKCSZ2bW92ZHFhKEBYWzRdLCZRV1AoMTYsJHRtcDEpKTsJCSMgS18yMF8zOQoJJnZtb3ZkcWEoQFhbNV0sJlFXUCgzMiwkdG1wMSkpOwkJIyBLXzQwXzU5Cgkmdm1vdmRxYShAWFs2XSwmUVdQKDQ4LCR0bXAxKSk7CQkjIEtfNjBfNzkKCSZ2bW92ZHFhKEBYWzJdLCZRV1AoNjQsJHRtcDEpKTsJCSMgcGJzd2FwIG1hc2sKCgkmbW92CSgkRSwmd3BhcmFtKDApKTsJCSMgbG9hZCBhcmd1bWVudCBibG9jawoJJm1vdgkoJGlucD1AVFsxXSwmd3BhcmFtKDEpKTsKCSZtb3YJKCRELCZ3cGFyYW0oMikpOwoJJm1vdgkoQFRbMF0sImVzcCIpOwoKCSMgc3RhY2sgZnJhbWUgbGF5b3V0CgkjCgkjICswCVhbMF0rSwlYWzFdK0sJWFsyXStLCVhbM10rSwkjIFhNTS0+SUFMVSB4ZmVyIGFyZWEKCSMJWFs0XStLCVhbNV0rSwlYWzZdK0sJWFs3XStLCgkjCVhbOF0rSwlYWzldK0sJWFsxMF0rSwlYWzExXStLCgkjCVhbMTJdK0sJWFsxM10rSwlYWzE0XStLCVhbMTVdK0sKCSMKCSMgKzY0CVhbMF0JWFsxXQlYWzJdCVhbM10JIyBYTU0tPlhNTSBiYWNrdHJhY2UgYXJlYQoJIwlYWzRdCVhbNV0JWFs2XQlYWzddCgkjCVhbOF0JWFs5XQlYWzEwXQlYWzExXQkjIGV2ZW4gYm9ycm93ZWQgZm9yIEtfMDBfMTkKCSMKCSMgKzExMglLXzIwXzM5CUtfMjBfMzkJS18yMF8zOQlLXzIwXzM5CSMgY29uc3RhbnRzCgkjCUtfNDBfNTkJS180MF81OQlLXzQwXzU5CUtfNDBfNTkKCSMJS182MF83OQlLXzYwXzc5CUtfNjBfNzkJS182MF83OQoJIwlLXzAwXzE5CUtfMDBfMTkJS18wMF8xOQlLXzAwXzE5CgkjCXBic3dhcCBtYXNrCgkjCgkjICsxOTIJY3R4CQkJCSMgYXJndW1lbnQgYmxvY2sKCSMgKzE5NglpbnAKCSMgKzIwMAllbmQKCSMgKzIwNAllc3AKCSZzdWIJKCJlc3AiLDIwOCk7CgkmYW5kCSgiZXNwIiwtNjQpOwoKCSZ2bW92ZHFhKCZRV1AoMTEyKzAsImVzcCIpLEBYWzRdKTsJIyBjb3B5IGNvbnN0YW50cwoJJnZtb3ZkcWEoJlFXUCgxMTIrMTYsImVzcCIpLEBYWzVdKTsKCSZ2bW92ZHFhKCZRV1AoMTEyKzMyLCJlc3AiKSxAWFs2XSk7Cgkmc2hsCSgkRCw2KTsJCQkJIyBsZW4qNjQKCSZ2bW92ZHFhKCZRV1AoMTEyKzQ4LCJlc3AiKSxAWFszXSk7CgkmYWRkCSgkRCwkaW5wKTsJCQkjIGVuZCBvZiBpbnB1dAoJJnZtb3ZkcWEoJlFXUCgxMTIrNjQsImVzcCIpLEBYWzJdKTsKCSZhZGQJKCRpbnAsNjQpOwoJJm1vdgkoJkRXUCgxOTIrMCwiZXNwIiksJEUpOwkJIyBzYXZlIGFyZ3VtZW50IGJsb2NrCgkmbW92CSgmRFdQKDE5Mis0LCJlc3AiKSwkaW5wKTsKCSZtb3YJKCZEV1AoMTkyKzgsImVzcCIpLCREKTsKCSZtb3YJKCZEV1AoMTkyKzEyLCJlc3AiKSxAVFswXSk7CSMgc2F2ZSBvcmlnaW5hbCAlZXNwCgoJJm1vdgkoJEEsJkRXUCgwLCRFKSk7CQkjIGxvYWQgY29udGV4dAoJJm1vdgkoJEIsJkRXUCg0LCRFKSk7CgkmbW92CSgkQywmRFdQKDgsJEUpKTsKCSZtb3YJKCRELCZEV1AoMTIsJEUpKTsKCSZtb3YJKCRFLCZEV1AoMTYsJEUpKTsKCSZtb3YJKEBUWzBdLCRCKTsJCQkjIG1hZ2ljIHNlZWQKCgkmdm1vdmRxdShAWFstNCY3XSwmUVdQKC02NCwkaW5wKSk7CSMgbG9hZCBpbnB1dCB0byAleG1tWzAtM10KCSZ2bW92ZHF1KEBYWy0zJjddLCZRV1AoLTQ4LCRpbnApKTsKCSZ2bW92ZHF1KEBYWy0yJjddLCZRV1AoLTMyLCRpbnApKTsKCSZ2bW92ZHF1KEBYWy0xJjddLCZRV1AoLTE2LCRpbnApKTsKCSZ2cHNodWZiKEBYWy00JjddLEBYWy00JjddLEBYWzJdKTsJIyBieXRlIHN3YXAKCSZ2cHNodWZiKEBYWy0zJjddLEBYWy0zJjddLEBYWzJdKTsKCSZ2cHNodWZiKEBYWy0yJjddLEBYWy0yJjddLEBYWzJdKTsKCSZ2bW92ZHFhKCZRV1AoMTEyLTE2LCJlc3AiKSxAWFszXSk7CSMgYm9ycm93IGxhc3QgYmFja3RyYWNlIHNsb3QKCSZ2cHNodWZiKEBYWy0xJjddLEBYWy0xJjddLEBYWzJdKTsKCSZ2cGFkZGQJKEBYWzBdLEBYWy00JjddLEBYWzNdKTsJCSMgYWRkIEtfMDBfMTkKCSZ2cGFkZGQJKEBYWzFdLEBYWy0zJjddLEBYWzNdKTsKCSZ2cGFkZGQJKEBYWzJdLEBYWy0yJjddLEBYWzNdKTsKCSZ2bW92ZHFhKCZRV1AoMCwiZXNwIiksQFhbMF0pOwkJIyBYW10rSyB4ZmVyIHRvIElBTFUKCSZtb3YJKEBUWzFdLCRDKTsKCSZ2bW92ZHFhKCZRV1AoMCsxNiwiZXNwIiksQFhbMV0pOwoJJnhvcgkoQFRbMV0sJEQpOwoJJnZtb3ZkcWEoJlFXUCgwKzMyLCJlc3AiKSxAWFsyXSk7CgkmYW5kCShAVFswXSxAVFsxXSk7Cgkmam1wCSgmbGFiZWwoImxvb3AiKSk7CgpzdWIgWHVwZGF0ZV9hdnhfMTZfMzEoKQkJIyByZWNhbGwgdGhhdCAkWGkgc3RhcnRzIHd0aWggNAp7IHVzZSBpbnRlZ2VyOwogIG15ICRib2R5ID0gc2hpZnQ7CiAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgNDAgaW5zdHJ1Y3Rpb25zCiAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnZwYWxpZ25yKEBYWzBdLEBYWy0zJjddLEBYWy00JjddLDgpOwkjIGNvbXBvc2UgIlhbLTE0XSIgaW4gIlhbMF0iCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSAgJnZwYWRkZAkoQFhbM10sQFhbM10sQFhbLTEmN10pOwoJICAmdm1vdmRxYQkoJlFXUCg2NCsxNiooKCRYaS00KSUzKSwiZXNwIiksQFhbLTQmN10pOyMgc2F2ZSBYW10gdG8gYmFja3RyYWNlIGJ1ZmZlcgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSZ2cHNybGRxKEBYWzJdLEBYWy0xJjddLDQpOwkJIyAiWFstM10iLCAzIGR3b3JkcwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSZ2cHhvcgkoQFhbMF0sQFhbMF0sQFhbLTQmN10pOwkJIyAiWFswXSJePSJYWy0xNl0iCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSZ2cHhvcgkoQFhbMl0sQFhbMl0sQFhbLTImN10pOwkJIyAiWFstM10iXiJYWy04XSIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgICZ2bW92ZHFhCSgmUVdQKDArMTYqKCgkWGktMSkmMyksImVzcCIpLEBYWzNdKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJJnZweG9yCShAWFswXSxAWFswXSxAWFsyXSk7CQkjICJYWzBdIl49IlhbLTNdIl4iWFstOF0iCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmdnBzcmxkCShAWFsyXSxAWFswXSwzMSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmdnBzbGxkcShAWFs0XSxAWFswXSwxMik7CQkjICJYWzBdIjw8OTYsIGV4dHJhY3Qgb25lIGR3b3JkCgkmdnBhZGRkCShAWFswXSxAWFswXSxAWFswXSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmdnBzcmxkCShAWFszXSxAWFs0XSwzMCk7CgkmdnBvcgkoQFhbMF0sQFhbMF0sQFhbMl0pOwkJIyAiWFswXSI8PDw9MQoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJJnZwc2xsZAkoQFhbNF0sQFhbNF0sMik7CgkgICZ2bW92ZHFhCShAWFsyXSwmUVdQKDY0KzE2KigoJFhpLTYpJTMpLCJlc3AiKSkgaWYgKCRYaT41KTsJIyByZXN0b3JlIFhbXSBmcm9tIGJhY2t0cmFjZSBidWZmZXIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkmdnB4b3IJKEBYWzBdLEBYWzBdLEBYWzNdKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSZ2cHhvcgkoQFhbMF0sQFhbMF0sQFhbNF0pOwkJIyAiWFswXSJePSgiWFswXSI8PDk2KTw8PDIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgICZ2bW92ZHFhCShAWFs0XSwmUVdQKDExMi0xNisxNiooKCRYaSkvNSksImVzcCIpKTsJIyBLX1hYX1hYCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSBmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQkjIHJlbWFpbmluZyBpbnN0cnVjdGlvbnMgW2lmIGFueV0KCiAgJFhpKys7CXB1c2goQFgsc2hpZnQoQFgpKTsJIyAicm90YXRlIiBYW10KfQoKc3ViIFh1cGRhdGVfYXZ4XzMyXzc5KCkKeyB1c2UgaW50ZWdlcjsKICBteSAkYm9keSA9IHNoaWZ0OwogIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIHRvIDQ0IGluc3RydWN0aW9ucwogIG15ICgkYSwkYiwkYywkZCwkZSk7CgoJJnZwYWxpZ25yKEBYWzJdLEBYWy0xJjddLEBYWy0yJjddLDgpOwkjIGNvbXBvc2UgIlhbLTZdIgoJJnZweG9yCShAWFswXSxAWFswXSxAWFstNCY3XSk7CSMgIlhbMF0iPSJYWy0zMl0iXiJYWy0xNl0iCgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKCgkmdnB4b3IJKEBYWzBdLEBYWzBdLEBYWy03JjddKTsJIyAiWFswXSJePSJYWy0yOF0iCgkgICZ2bW92ZHFhCSgmUVdQKDY0KzE2KigoJFhpLTQpJTMpLCJlc3AiKSxAWFstNCY3XSk7CSMgc2F2ZSBYW10gdG8gYmFja3RyYWNlIGJ1ZmZlcgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBpZiAoJFhpJTUpIHsKCSAgJnZtb3ZkcWEJKEBYWzRdLEBYWzNdKTsJIyAicGVycGV0dWF0ZSIgS19YWF9YWC4uLgoJIH0gZWxzZSB7CQkJIyAuLi4gb3IgbG9hZCBuZXh0IG9uZQoJICAmdm1vdmRxYQkoQFhbNF0sJlFXUCgxMTItMTYrMTYqKCRYaS81KSwiZXNwIikpOwoJIH0KCSAgJnZwYWRkZAkoQFhbM10sQFhbM10sQFhbLTEmN10pOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJJnZweG9yCShAWFswXSxAWFswXSxAWFsyXSk7CQkjICJYWzBdIl49IlhbLTZdIgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIGJvZHlfMjBfMzkKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9sCgoJJnZwc3JsZAkoQFhbMl0sQFhbMF0sMzApOwoJICAmdm1vdmRxYQkoJlFXUCgwKzE2KigoJFhpLTEpJjMpLCJlc3AiKSxAWFszXSk7CSMgWFtdK0sgeGZlciB0byBJQUxVCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJJnZwc2xsZAkoQFhbMF0sQFhbMF0sMik7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmdnBvcgkoQFhbMF0sQFhbMF0sQFhbMl0pOwkjICJYWzBdIjw8PD0yCgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgICZ2bW92ZHFhCShAWFsyXSwmUVdQKDY0KzE2KigoJFhpLTYpJTMpLCJlc3AiKSkgaWYoJFhpPDE5KTsJIyByZXN0b3JlIFhbXSBmcm9tIGJhY2t0cmFjZSBidWZmZXIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb3IKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSBmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQkjIHJlbWFpbmluZyBpbnN0cnVjdGlvbnMKCiAgJFhpKys7CXB1c2goQFgsc2hpZnQoQFgpKTsJIyAicm90YXRlIiBYW10KfQoKc3ViIFh1cGxhc3RfYXZ4XzgwKCkKeyB1c2UgaW50ZWdlcjsKICBteSAkYm9keSA9IHNoaWZ0OwogIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIGluc3RydWN0aW9ucwogIG15ICgkYSwkYiwkYywkZCwkZSk7CgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgICZ2cGFkZGQJKEBYWzNdLEBYWzNdLEBYWy0xJjddKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSAgJnZtb3ZkcWEJKCZRV1AoMCsxNiooKCRYaS0xKSYzKSwiZXNwIiksQFhbM10pOwkjIFhbXStLIHhmZXIgSUFMVQoKCSBmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQkJIyByZW1haW5pbmcgaW5zdHJ1Y3Rpb25zCgoJJm1vdgkoJGlucD1AVFsxXSwmRFdQKDE5Mis0LCJlc3AiKSk7CgkmY21wCSgkaW5wLCZEV1AoMTkyKzgsImVzcCIpKTsKCSZqZQkoJmxhYmVsKCJkb25lIikpOwoKCSZ2bW92ZHFhKEBYWzNdLCZRV1AoMTEyKzQ4LCJlc3AiKSk7CSMgS18wMF8xOQoJJnZtb3ZkcWEoQFhbMl0sJlFXUCgxMTIrNjQsImVzcCIpKTsJIyBwYnN3YXAgbWFzawoJJnZtb3ZkcXUoQFhbLTQmN10sJlFXUCgwLCRpbnApKTsJIyBsb2FkIGlucHV0Cgkmdm1vdmRxdShAWFstMyY3XSwmUVdQKDE2LCRpbnApKTsKCSZ2bW92ZHF1KEBYWy0yJjddLCZRV1AoMzIsJGlucCkpOwoJJnZtb3ZkcXUoQFhbLTEmN10sJlFXUCg0OCwkaW5wKSk7CgkmYWRkCSgkaW5wLDY0KTsKCSZ2cHNodWZiKEBYWy00JjddLEBYWy00JjddLEBYWzJdKTsJCSMgYnl0ZSBzd2FwCgkmbW92CSgmRFdQKDE5Mis0LCJlc3AiKSwkaW5wKTsKCSZ2bW92ZHFhKCZRV1AoMTEyLTE2LCJlc3AiKSxAWFszXSk7CSMgYm9ycm93IGxhc3QgYmFja3RyYWNlIHNsb3QKCiAgJFhpPTA7Cn0KCnN1YiBYbG9vcF9hdngoKQp7IHVzZSBpbnRlZ2VyOwogIG15ICRib2R5ID0gc2hpZnQ7CiAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMzIgaW5zdHJ1Y3Rpb25zCiAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnZwc2h1ZmIJKEBYWygkWGktMykmN10sQFhbKCRYaS0zKSY3XSxAWFsyXSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnZwYWRkZAkoQFhbJFhpJjddLEBYWygkWGktNCkmN10sQFhbM10pOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7Cgkmdm1vdmRxYQkoJlFXUCgwKzE2KiRYaSwiZXNwIiksQFhbJFhpJjddKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0KICAkWGkrKzsKfQoKc3ViIFh0YWlsX2F2eCgpCnsgdXNlIGludGVnZXI7CiAgbXkgJGJvZHkgPSBzaGlmdDsKICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyAzMiBpbnN0cnVjdGlvbnMKICBteSAoJGEsJGIsJGMsJGQsJGUpOwoKCWZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9Cn0KCiZzZXRfbGFiZWwoImxvb3AiLDE2KTsKCSZYdXBkYXRlX2F2eF8xNl8zMShcJmJvZHlfMDBfMTkpOwoJJlh1cGRhdGVfYXZ4XzE2XzMxKFwmYm9keV8wMF8xOSk7CgkmWHVwZGF0ZV9hdnhfMTZfMzEoXCZib2R5XzAwXzE5KTsKCSZYdXBkYXRlX2F2eF8xNl8zMShcJmJvZHlfMDBfMTkpOwoJJlh1cGRhdGVfYXZ4XzMyXzc5KFwmYm9keV8wMF8xOSk7CgkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzIwXzM5KTsKCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOwoJJlh1cGRhdGVfYXZ4XzMyXzc5KFwmYm9keV8yMF8zOSk7CgkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzIwXzM5KTsKCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOwoJJlh1cGRhdGVfYXZ4XzMyXzc5KFwmYm9keV80MF81OSk7CgkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzQwXzU5KTsKCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkpOwoJJlh1cGRhdGVfYXZ4XzMyXzc5KFwmYm9keV80MF81OSk7CgkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzQwXzU5KTsKCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOwoJJlh1cGxhc3RfYXZ4XzgwKFwmYm9keV8yMF8zOSk7CSMgY2FuIGp1bXAgdG8gImRvbmUiCgoJCQkJJHNhdmVkX2o9JGo7IEBzYXZlZF9WPUBWOwoKCSZYbG9vcF9hdngoXCZib2R5XzIwXzM5KTsKCSZYbG9vcF9hdngoXCZib2R5XzIwXzM5KTsKCSZYbG9vcF9hdngoXCZib2R5XzIwXzM5KTsKCgkmbW92CShAVFsxXSwmRFdQKDE5MiwiZXNwIikpOwkjIHVwZGF0ZSBjb250ZXh0CgkmYWRkCSgkQSwmRFdQKDAsQFRbMV0pKTsKCSZhZGQJKEBUWzBdLCZEV1AoNCxAVFsxXSkpOwkJIyAkYgoJJmFkZAkoJEMsJkRXUCg4LEBUWzFdKSk7CgkmbW92CSgmRFdQKDAsQFRbMV0pLCRBKTsKCSZhZGQJKCRELCZEV1AoMTIsQFRbMV0pKTsKCSZtb3YJKCZEV1AoNCxAVFsxXSksQFRbMF0pOwoJJmFkZAkoJEUsJkRXUCgxNixAVFsxXSkpOwoJJm1vdgkoJEIsJEMpOwoJJm1vdgkoJkRXUCg4LEBUWzFdKSwkQyk7CgkmeG9yCSgkQiwkRCk7CgkmbW92CSgmRFdQKDEyLEBUWzFdKSwkRCk7CgkmYW5kCSgkQixAVFswXSk7CgkmbW92CSgmRFdQKDE2LEBUWzFdKSwkRSk7CgkmeGNoZwkoJEIsQFRbMF0pOwoKCSZqbXAJKCZsYWJlbCgibG9vcCIpKTsKCiZzZXRfbGFiZWwoImRvbmUiLDE2KTsJCSRqPSRzYXZlZF9qOyBAVj1Ac2F2ZWRfVjsKCgkmWHRhaWxfYXZ4KFwmYm9keV8yMF8zOSk7CgkmWHRhaWxfYXZ4KFwmYm9keV8yMF8zOSk7CgkmWHRhaWxfYXZ4KFwmYm9keV8yMF8zOSk7CgoJJnZ6ZXJvYWxsKCk7CgoJJm1vdgkoQFRbMV0sJkRXUCgxOTIsImVzcCIpKTsJIyB1cGRhdGUgY29udGV4dAoJJmFkZAkoJEEsJkRXUCgwLEBUWzFdKSk7CgkmbW92CSgiZXNwIiwmRFdQKDE5MisxMiwiZXNwIikpOwkjIHJlc3RvcmUgJWVzcAoJJmFkZAkoQFRbMF0sJkRXUCg0LEBUWzFdKSk7CQkjICRiCgkmYWRkCSgkQywmRFdQKDgsQFRbMV0pKTsKCSZtb3YJKCZEV1AoMCxAVFsxXSksJEEpOwoJJmFkZAkoJEQsJkRXUCgxMixAVFsxXSkpOwoJJm1vdgkoJkRXUCg0LEBUWzFdKSxAVFswXSk7CgkmYWRkCSgkRSwmRFdQKDE2LEBUWzFdKSk7CgkmbW92CSgmRFdQKDgsQFRbMV0pLCRDKTsKCSZtb3YJKCZEV1AoMTIsQFRbMV0pLCREKTsKCSZtb3YJKCZEV1AoMTYsQFRbMV0pLCRFKTsKJmZ1bmN0aW9uX2VuZCgiX3NoYTFfYmxvY2tfZGF0YV9vcmRlcl9hdngiKTsKfQomc2V0X2xhYmVsKCJLX1hYX1hYIiw2NCk7CiZkYXRhX3dvcmQoMHg1YTgyNzk5OSwweDVhODI3OTk5LDB4NWE4Mjc5OTksMHg1YTgyNzk5OSk7CSMgS18wMF8xOQomZGF0YV93b3JkKDB4NmVkOWViYTEsMHg2ZWQ5ZWJhMSwweDZlZDllYmExLDB4NmVkOWViYTEpOwkjIEtfMjBfMzkKJmRhdGFfd29yZCgweDhmMWJiY2RjLDB4OGYxYmJjZGMsMHg4ZjFiYmNkYywweDhmMWJiY2RjKTsJIyBLXzQwXzU5CiZkYXRhX3dvcmQoMHhjYTYyYzFkNiwweGNhNjJjMWQ2LDB4Y2E2MmMxZDYsMHhjYTYyYzFkNik7CSMgS182MF83OQomZGF0YV93b3JkKDB4MDAwMTAyMDMsMHgwNDA1MDYwNywweDA4MDkwYTBiLDB4MGMwZDBlMGYpOwkjIHBic3dhcCBtYXNrCn0KJmFzY2l6KCJTSEExIGJsb2NrIHRyYW5zZm9ybSBmb3IgeDg2LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+Iik7CgomYXNtX2ZpbmlzaCgpOwo=