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ICAgICAgICAgIyBpdHMgbWV0YXR5cGUKICAgIDx0eXBlICd0eXBlJz4KICAgID4+PiBhID0gZGVmYXVsdGRpY3QoZGVmYXVsdD0wLjApICAgICMgY3JlYXRlIGFuIGluc3RhbmNlCiAgICA+Pj4gcHJpbnQgYSAgICAgICAgICAgICAgICAgICAgICAgICAjIHNob3cgdGhlIGluc3RhbmNlCiAgICB7fQogICAgPj4+IHByaW50IHR5cGUoYSkgICAgICAgICAgICAgICAgICAgIyBzaG93IGl0cyB0eXBlCiAgICA8Y2xhc3MgJ3Rlc3QudGVzdF9kZXNjcnR1dC5kZWZhdWx0ZGljdCc+CiAgICA+Pj4gcHJpbnQgYS5fX2NsYXNzX18gICAgICAgICAgICAgICAjIHNob3cgaXRzIGNsYXNzCiAgICA8Y2xhc3MgJ3Rlc3QudGVzdF9kZXNjcnR1dC5kZWZhdWx0ZGljdCc+CiAgICA+Pj4gcHJpbnQgdHlwZShhKSBpcyBhLl9fY2xhc3NfXyAgICAjIGl0cyB0eXBlIGlzIGl0cyBjbGFzcwogICAgVHJ1ZQogICAgPj4+IGFbMV0gPSAzLjI1ICAgICAgICAgICAgICAgICAgICAgIyBtb2RpZnkgdGhlIGluc3RhbmNlCiAgICA+Pj4gcHJpbnQgYSAgICAgICAgICAgICAgICAgICAgICAgICAjIHNob3cgdGhlIG5ldyB2YWx1ZQogICAgezE6IDMuMjV9CiAgICA+Pj4gcHJpbnQgYVsxXSAgICAgICAgICAgICAgICAgICAgICAjIHNob3cgdGhlIG5ldyBpdGVtCiAgICAzLjI1CiAgICA+Pj4gcHJpbnQgYVswXSAgICAgICAgICAgICAgICAgICAgICAjIGEgbm9uLWV4aXN0ZW50IGl0ZW0KICAgIDAuMAogICAgPj4+IGEubWVyZ2UoezE6MTAwLCAyOjIwMH0pICAgICAgICAgIyB1c2UgYSBkaWN0IG1ldGhvZAogICAgPj4+IHByaW50IHNvcnRkaWN0KGEpICAgICAgICAgICAgICAgIyBzaG93IHRoZSByZXN1bHQKICAgIHsxOiAzLjI1LCAyOiAyMDB9CiAgICA+Pj4KCldlIGNhbiBhbHNvIHVzZSB0aGUgbmV3IHR5cGUgaW4gY29udGV4dHMgd2hlcmUgY2xhc3NpYyBvbmx5IGFsbG93cyAicmVhbCIKZGljdGlvbmFyaWVzLCBzdWNoIGFzIHRoZSBsb2NhbHMvZ2xvYmFscyBkaWN0aW9uYXJpZXMgZm9yIHRoZSBleGVjCnN0YXRlbWVudCBvciB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gZXZhbCgpOgoKICAgID4+PiBkZWYgc29ydGVkKHNlcSk6CiAgICAuLi4gICAgIHNlcS5zb3J0KGtleT1zdHIpCiAgICAuLi4gICAgIHJldHVybiBzZXEKICAgID4+PiBwcmludCBzb3J0ZWQoYS5rZXlzKCkpCiAgICBbMSwgMl0KICAgID4+PiBleGVjICJ4ID0gMzsgcHJpbnQgeCIgaW4gYQogICAgMwogICAgPj4+IHByaW50IHNvcnRlZChhLmtleXMoKSkKICAgIFsxLCAyLCAnX19idWlsdGluc19fJywgJ3gnXQogICAgPj4+IHByaW50IGFbJ3gnXQogICAgMwogICAgPj4+CgpOb3cgSSdsbCBzaG93IHRoYXQgZGVmYXVsdGRpY3QgaW5zdGFuY2VzIGhhdmUgZHluYW1pYyBpbnN0YW5jZSB2YXJpYWJsZXMsCmp1c3QgbGlrZSBjbGFzc2ljIGNsYXNzZXM6CgogICAgPj4+IGEuZGVmYXVsdCA9IC0xCiAgICA+Pj4gcHJpbnQgYVsibm93YXkiXQogICAgLTEKICAgID4+PiBhLmRlZmF1bHQgPSAtMTAwMAogICAgPj4+IHByaW50IGFbIm5vd2F5Il0KICAgIC0xMDAwCiAgICA+Pj4gJ2RlZmF1bHQnIGluIGRpcihhKQogICAgVHJ1ZQogICAgPj4+IGEueDEgPSAxMDAKICAgID4+PiBhLngyID0gMjAwCiAgICA+Pj4gcHJpbnQgYS54MQogICAgMTAwCiAgICA+Pj4gZCA9IGRpcihhKQogICAgPj4+ICdkZWZhdWx0JyBpbiBkIGFuZCAneDEnIGluIGQgYW5kICd4MicgaW4gZAogICAgVHJ1ZQogICAgPj4+IHByaW50IHNvcnRkaWN0KGEuX19kaWN0X18pCiAgICB7J2RlZmF1bHQnOiAtMTAwMCwgJ3gxJzogMTAwLCAneDInOiAyMDB9CiAgICA+Pj4KdAwAAABkZWZhdWx0ZGljdDJjAAAAAAAAAAACAAAAQgAAAHM4AAAAZQAAWgEAZAAAZwEAWgIAZAUAZAEAhAEAWgQAZAIAhAAAWgUAZAMAhAAAWgYAZAQAhAAAWgcAUlMoBgAAAFIEAAAAYwIAAAACAAAAAgAAAEMAAABzGgAAAHQAAGoBAHwAAIMBAAF8AQB8AABfAgBkAABTKAEAAABOKAMAAABSAgAAAFIDAAAAUgQAAAAoAgAAAFIFAAAAUgQAAAAoAAAAACgAAAAAc1kAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kZXNjcnR1dC5weVIDAAAAawAAAHMEAAAAAAENAWMCAAAAAgAAAAUAAABDAAAAczAAAAB5FAB0AABqAQB8AAB8AQCDAgBTV24VAAR0AgBrCgByKwABAQF8AABqAwBTWGQAAFMoAQAAAE4oBAAAAFICAAAAUgYAAABSBwAAAFIEAAAAKAIAAABSBQAAAFIIAAAAKAAAAAAoAAAAAHNZAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZGVzY3J0dXQucHlSBgAAAG8AAABzCAAAAAABAwEUAQ0BYwIAAAADAAAABAAAAEcAAABzKAAAAHwCAHMVAHwAAGoAAGYBAH0CAG4AAHQBAGoCAHwAAHwBAHwCAIwCAFMoAQAAAE4oAwAAAFIEAAAAUgIAAABSCQAAACgDAAAAUgUAAABSCAAAAFIKAAAAKAAAAAAoAAAAAHNZAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZGVzY3J0dXQucHlSCQAAAHUAAABzBgAAAAABBgEPAWMCAAAAAwAAAAQAAABDAAAAczIAAAB4KwB8AQBEXSMAfQIAfAIAfAAAawcAcgcAfAEAfAIAGXwAAHwCADxxBwBxBwBXZAAAUygBAAAATigAAAAAKAMAAABSBQAAAFILAAAAUggAAAAoAAAAACgAAAAAc1kAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kZXNjcnR1dC5weVIMAAAAegAAAHMGAAAAAAENAQwBTigIAAAAUg0AAABSDgAAAHQJAAAAX19zbG90c19fUg8AAABSAwAAAFIGAAAAUgkAAABSDAAAACgAAAAAKAAAAAAoAAAAAHNZAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZGVzY3J0dXQucHlSEAAAAGgAAABzCgAAAAYBCQIMBAkGCQVzyQEAAAoKVGhlIF9fc2xvdHNfXyBkZWNsYXJhdGlvbiB0YWtlcyBhIGxpc3Qgb2YgaW5zdGFuY2UgdmFyaWFibGVzLCBhbmQgcmVzZXJ2ZXMKc3BhY2UgZm9yIGV4YWN0bHkgdGhlc2UgaW4gdGhlIGluc3RhbmNlLiBXaGVuIF9fc2xvdHNfXyBpcyB1c2VkLCBvdGhlcgppbnN0YW5jZSB2YXJpYWJsZXMgY2Fubm90IGJlIGFzc2lnbmVkIHRvOgoKICAgID4+PiBhID0gZGVmYXVsdGRpY3QyKGRlZmF1bHQ9MC4wKQogICAgPj4+IGFbMV0KICAgIDAuMAogICAgPj4+IGEuZGVmYXVsdCA9IC0xCiAgICA+Pj4gYVsxXQogICAgLTEKICAgID4+PiBhLngxID0gMQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CiAgICBBdHRyaWJ1dGVFcnJvcjogJ2RlZmF1bHRkaWN0Micgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ3gxJwogICAgPj4+CgpzIggAAAoKSW50cm9zcGVjdGluZyBpbnN0YW5jZXMgb2YgYnVpbHQtaW4gdHlwZXMKCkZvciBpbnN0YW5jZSBvZiBidWlsdC1pbiB0eXBlcywgeC5fX2NsYXNzX18gaXMgbm93IHRoZSBzYW1lIGFzIHR5cGUoeCk6CgogICAgPj4+IHR5cGUoW10pCiAgICA8dHlwZSAnbGlzdCc+CiAgICA+Pj4gW10uX19jbGFzc19fCiAgICA8dHlwZSAnbGlzdCc+CiAgICA+Pj4gbGlzdAogICAgPHR5cGUgJ2xpc3QnPgogICAgPj4+IGlzaW5zdGFuY2UoW10sIGxpc3QpCiAgICBUcnVlCiAgICA+Pj4gaXNpbnN0YW5jZShbXSwgZGljdCkKICAgIEZhbHNlCiAgICA+Pj4gaXNpbnN0YW5jZShbXSwgb2JqZWN0KQogICAgVHJ1ZQogICAgPj4+CgpVbmRlciB0aGUgbmV3IHByb3Bvc2FsLCB0aGUgX19tZXRob2RzX18gYXR0cmlidXRlIG5vIGxvbmdlciBleGlzdHM6CgogICAgPj4+IFtdLl9fbWV0aG9kc19fCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KICAgIEF0dHJpYnV0ZUVycm9yOiAnbGlzdCcgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ19fbWV0aG9kc19fJwogICAgPj4+CgpJbnN0ZWFkLCB5b3UgY2FuIGdldCB0aGUgc2FtZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBsaXN0IHR5cGU6CgogICAgPj4+IHBwcmludC5wcHJpbnQoZGlyKGxpc3QpKSAgICAjIGxpa2UgbGlzdC5fX2RpY3RfXy5rZXlzKCksIGJ1dCBzb3J0ZWQKICAgIFsnX19hZGRfXycsCiAgICAgJ19fY2xhc3NfXycsCiAgICAgJ19fY29udGFpbnNfXycsCiAgICAgJ19fZGVsYXR0cl9fJywKICAgICAnX19kZWxpdGVtX18nLAogICAgICdfX2RlbHNsaWNlX18nLAogICAgICdfX2RvY19fJywKICAgICAnX19lcV9fJywKICAgICAnX19mb3JtYXRfXycsCiAgICAgJ19fZ2VfXycsCiAgICAgJ19fZ2V0YXR0cmlidXRlX18nLAogICAgICdfX2dldGl0ZW1fXycsCiAgICAgJ19fZ2V0c2xpY2VfXycsCiAgICAgJ19fZ3RfXycsCiAgICAgJ19faGFzaF9fJywKICAgICAnX19pYWRkX18nLAogICAgICdfX2ltdWxfXycsCiAgICAgJ19faW5pdF9fJywKICAgICAnX19pdGVyX18nLAogICAgICdfX2xlX18nLAogICAgICdfX2xlbl9fJywKICAgICAnX19sdF9fJywKICAgICAnX19tdWxfXycsCiAgICAgJ19fbmVfXycsCiAgICAgJ19fbmV3X18nLAogICAgICdfX3JlZHVjZV9fJywKICAgICAnX19yZWR1Y2VfZXhfXycsCiAgICAgJ19fcmVwcl9fJywKICAgICAnX19yZXZlcnNlZF9fJywKICAgICAnX19ybXVsX18nLAogICAgICdfX3NldGF0dHJfXycsCiAgICAgJ19fc2V0aXRlbV9fJywKICAgICAnX19zZXRzbGljZV9fJywKICAgICAnX19zaXplb2ZfXycsCiAgICAgJ19fc3RyX18nLAogICAgICdfX3N1YmNsYXNzaG9va19fJywKICAgICAnYXBwZW5kJywKICAgICAnY291bnQnLAogICAgICdleHRlbmQnLAogICAgICdpbmRleCcsCiAgICAgJ2luc2VydCcsCiAgICAgJ3BvcCcsCiAgICAgJ3JlbW92ZScsCiAgICAgJ3JldmVyc2UnLAogICAgICdzb3J0J10KClRoZSBuZXcgaW50cm9zcGVjdGlvbiBBUEkgZ2l2ZXMgbW9yZSBpbmZvcm1hdGlvbiB0aGFuIHRoZSBvbGQgb25lOiAgaW4KYWRkaXRpb24gdG8gdGhlIHJlZ3VsYXIgbWV0aG9kcywgaXQgYWxzbyBzaG93cyB0aGUgbWV0aG9kcyB0aGF0IGFyZQpub3JtYWxseSBpbnZva2VkIHRocm91Z2ggc3BlY2lhbCBub3RhdGlvbnMsIGUuZy4gX19pYWRkX18gKCs9KSwgX19sZW5fXwoobGVuKSwgX19uZV9fICghPSkuIFlvdSBjYW4gaW52b2tlIGFueSBtZXRob2QgZnJvbSB0aGlzIGxpc3QgZGlyZWN0bHk6CgogICAgPj4+IGEgPSBbJ3RpYycsICd0YWMnXQogICAgPj4+IGxpc3QuX19sZW5fXyhhKSAgICAgICAgICAjIHNhbWUgYXMgbGVuKGEpCiAgICAyCiAgICA+Pj4gYS5fX2xlbl9fKCkgICAgICAgICAgICAgICMgZGl0dG8KICAgIDIKICAgID4+PiBsaXN0LmFwcGVuZChhLCAndG9lJykgICAgIyBzYW1lIGFzIGEuYXBwZW5kKCd0b2UnKQogICAgPj4+IGEKICAgIFsndGljJywgJ3RhYycsICd0b2UnXQogICAgPj4+CgpUaGlzIGlzIGp1c3QgbGlrZSBpdCBpcyBmb3IgdXNlci1kZWZpbmVkIGNsYXNzZXMuCnN2BwAACgpTdGF0aWMgbWV0aG9kcyBhbmQgY2xhc3MgbWV0aG9kcwoKVGhlIG5ldyBpbnRyb3NwZWN0aW9uIEFQSSBtYWtlcyBpdCBwb3NzaWJsZSB0byBhZGQgc3RhdGljIG1ldGhvZHMgYW5kIGNsYXNzCm1ldGhvZHMuIFN0YXRpYyBtZXRob2RzIGFyZSBlYXN5IHRvIGRlc2NyaWJlOiB0aGV5IGJlaGF2ZSBwcmV0dHkgbXVjaCBsaWtlCnN0YXRpYyBtZXRob2RzIGluIEMrKyBvciBKYXZhLiBIZXJlJ3MgYW4gZXhhbXBsZToKCiAgICA+Pj4gY2xhc3MgQzoKICAgIC4uLgogICAgLi4uICAgICBAc3RhdGljbWV0aG9kCiAgICAuLi4gICAgIGRlZiBmb28oeCwgeSk6CiAgICAuLi4gICAgICAgICBwcmludCAic3RhdGljbWV0aG9kIiwgeCwgeQoKICAgID4+PiBDLmZvbygxLCAyKQogICAgc3RhdGljbWV0aG9kIDEgMgogICAgPj4+IGMgPSBDKCkKICAgID4+PiBjLmZvbygxLCAyKQogICAgc3RhdGljbWV0aG9kIDEgMgoKQ2xhc3MgbWV0aG9kcyB1c2UgYSBzaW1pbGFyIHBhdHRlcm4gdG8gZGVjbGFyZSBtZXRob2RzIHRoYXQgcmVjZWl2ZSBhbgppbXBsaWNpdCBmaXJzdCBhcmd1bWVudCB0aGF0IGlzIHRoZSAqY2xhc3MqIGZvciB3aGljaCB0aGV5IGFyZSBpbnZva2VkLgoKICAgID4+PiBjbGFzcyBDOgogICAgLi4uICAgICBAY2xhc3NtZXRob2QKICAgIC4uLiAgICAgZGVmIGZvbyhjbHMsIHkpOgogICAgLi4uICAgICAgICAgcHJpbnQgImNsYXNzbWV0aG9kIiwgY2xzLCB5CgogICAgPj4+IEMuZm9vKDEpCiAgICBjbGFzc21ldGhvZCB0ZXN0LnRlc3RfZGVzY3J0dXQuQyAxCiAgICA+Pj4gYyA9IEMoKQogICAgPj4+IGMuZm9vKDEpCiAgICBjbGFzc21ldGhvZCB0ZXN0LnRlc3RfZGVzY3J0dXQuQyAxCgogICAgPj4+IGNsYXNzIEQoQyk6CiAgICAuLi4gICAgIHBhc3MKCiAgICA+Pj4gRC5mb28oMSkKICAgIGNsYXNzbWV0aG9kIHRlc3QudGVzdF9kZXNjcnR1dC5EIDEKICAgID4+PiBkID0gRCgpCiAgICA+Pj4gZC5mb28oMSkKICAgIGNsYXNzbWV0aG9kIHRlc3QudGVzdF9kZXNjcnR1dC5EIDEKClRoaXMgcHJpbnRzICJjbGFzc21ldGhvZCBfX21haW5fXy5EIDEiIGJvdGggdGltZXM7IGluIG90aGVyIHdvcmRzLCB0aGUKY2xhc3MgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCBvZiBmb28oKSBpcyB0aGUgY2xhc3MgaW52b2x2ZWQgaW4gdGhlCmNhbGwsIG5vdCB0aGUgY2xhc3MgaW52b2x2ZWQgaW4gdGhlIGRlZmluaXRpb24gb2YgZm9vKCkuCgpCdXQgbm90aWNlIHRoaXM6CgogICAgPj4+IGNsYXNzIEUoQyk6CiAgICAuLi4gICAgIEBjbGFzc21ldGhvZAogICAgLi4uICAgICBkZWYgZm9vKGNscywgeSk6ICMgb3ZlcnJpZGUgQy5mb28KICAgIC4uLiAgICAgICAgIHByaW50ICJFLmZvbygpIGNhbGxlZCIKICAgIC4uLiAgICAgICAgIEMuZm9vKHkpCgogICAgPj4+IEUuZm9vKDEpCiAgICBFLmZvbygpIGNhbGxlZAogICAgY2xhc3NtZXRob2QgdGVzdC50ZXN0X2Rlc2NydHV0LkMgMQogICAgPj4+IGUgPSBFKCkKICAgID4+PiBlLmZvbygxKQogICAgRS5mb28oKSBjYWxsZWQKICAgIGNsYXNzbWV0aG9kIHRlc3QudGVzdF9kZXNjcnR1dC5DIDEKCkluIHRoaXMgZXhhbXBsZSwgdGhlIGNhbGwgdG8gQy5mb28oKSBmcm9tIEUuZm9vKCkgd2lsbCBzZWUgY2xhc3MgQyBhcyBpdHMKZmlyc3QgYXJndW1lbnQsIG5vdCBjbGFzcyBFLiBUaGlzIGlzIHRvIGJlIGV4cGVjdGVkLCBzaW5jZSB0aGUgY2FsbApzcGVjaWZpZXMgdGhlIGNsYXNzIEMuIEJ1dCBpdCBzdHJlc3NlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZXNlIGNsYXNzCm1ldGhvZHMgYW5kIG1ldGhvZHMgZGVmaW5lZCBpbiBtZXRhY2xhc3NlcyAod2hlcmUgYW4gdXBjYWxsIHRvIGEgbWV0YW1ldGhvZAp3b3VsZCBwYXNzIHRoZSB0YXJnZXQgY2xhc3MgYXMgYW4gZXhwbGljaXQgZmlyc3QgYXJndW1lbnQpLgpzKAYAAAoKQXR0cmlidXRlcyBkZWZpbmVkIGJ5IGdldC9zZXQgbWV0aG9kcwoKCiAgICA+Pj4gY2xhc3MgcHJvcGVydHkob2JqZWN0KToKICAgIC4uLgogICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgZ2V0LCBzZXQ9Tm9uZSk6CiAgICAuLi4gICAgICAgICBzZWxmLl9fZ2V0ID0gZ2V0CiAgICAuLi4gICAgICAgICBzZWxmLl9fc2V0ID0gc2V0CiAgICAuLi4KICAgIC4uLiAgICAgZGVmIF9fZ2V0X18oc2VsZiwgaW5zdCwgdHlwZT1Ob25lKToKICAgIC4uLiAgICAgICAgIHJldHVybiBzZWxmLl9fZ2V0KGluc3QpCiAgICAuLi4KICAgIC4uLiAgICAgZGVmIF9fc2V0X18oc2VsZiwgaW5zdCwgdmFsdWUpOgogICAgLi4uICAgICAgICAgaWYgc2VsZi5fX3NldCBpcyBOb25lOgogICAgLi4uICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yLCAidGhpcyBhdHRyaWJ1dGUgaXMgcmVhZC1vbmx5IgogICAgLi4uICAgICAgICAgcmV0dXJuIHNlbGYuX19zZXQoaW5zdCwgdmFsdWUpCgpOb3cgbGV0J3MgZGVmaW5lIGEgY2xhc3Mgd2l0aCBhbiBhdHRyaWJ1dGUgeCBkZWZpbmVkIGJ5IGEgcGFpciBvZiBtZXRob2RzLApnZXR4KCkgYW5kIHNldHgoKToKCiAgICA+Pj4gY2xhc3MgQyhvYmplY3QpOgogICAgLi4uCiAgICAuLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgIC4uLiAgICAgICAgIHNlbGYuX194ID0gMAogICAgLi4uCiAgICAuLi4gICAgIGRlZiBnZXR4KHNlbGYpOgogICAgLi4uICAgICAgICAgcmV0dXJuIHNlbGYuX194CiAgICAuLi4KICAgIC4uLiAgICAgZGVmIHNldHgoc2VsZiwgeCk6CiAgICAuLi4gICAgICAgICBpZiB4IDwgMDogeCA9IDAKICAgIC4uLiAgICAgICAgIHNlbGYuX194ID0geAogICAgLi4uCiAgICAuLi4gICAgIHggPSBwcm9wZXJ0eShnZXR4LCBzZXR4KQoKSGVyZSdzIGEgc21hbGwgZGVtb25zdHJhdGlvbjoKCiAgICA+Pj4gYSA9IEMoKQogICAgPj4+IGEueCA9IDEwCiAgICA+Pj4gcHJpbnQgYS54CiAgICAxMAogICAgPj4+IGEueCA9IC0xMAogICAgPj4+IHByaW50IGEueAogICAgMAogICAgPj4+CgpIbW0gLS0gcHJvcGVydHkgaXMgYnVpbHRpbiBub3csIHNvIGxldCdzIHRyeSBpdCB0aGF0IHdheSB0b28uCgogICAgPj4+IGRlbCBwcm9wZXJ0eSAgIyB1bm1hc2sgdGhlIGJ1aWx0aW4KICAgID4+PiBwcm9wZXJ0eQogICAgPHR5cGUgJ3Byb3BlcnR5Jz4KCiAgICA+Pj4gY2xhc3MgQyhvYmplY3QpOgogICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAuLi4gICAgICAgICBzZWxmLl9feCA9IDAKICAgIC4uLiAgICAgZGVmIGdldHgoc2VsZik6CiAgICAuLi4gICAgICAgICByZXR1cm4gc2VsZi5fX3gKICAgIC4uLiAgICAgZGVmIHNldHgoc2VsZiwgeCk6CiAgICAuLi4gICAgICAgICBpZiB4IDwgMDogeCA9IDAKICAgIC4uLiAgICAgICAgIHNlbGYuX194ID0geAogICAgLi4uICAgICB4ID0gcHJvcGVydHkoZ2V0eCwgc2V0eCkKCgogICAgPj4+IGEgPSBDKCkKICAgID4+PiBhLnggPSAxMAogICAgPj4+IHByaW50IGEueAogICAg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