AgICAgLy8gZWxlbWVudCB3aGljaCBzbm93IHdpbGwgYmUgYXBwZW5kZWQgdG8gKGRvY3VtZW50IGJvZHkgaWYgbnVsbC91bmRlZmluZWQpIC0gY2FuIGJlIGFuIGVsZW1lbnQgSUQgc3RyaW5nLCBvciBhIERPTSBub2RlIHJlZmVyZW5jZQ0KICB0aGlzLmZvbGxvd01vdXNlID0gdHJ1ZTsgICAgICAgIC8vIFNub3cgd2lsbCBjaGFuZ2UgbW92ZW1lbnQgd2l0aCB0aGUgdXNlcidzIG1vdXNlDQogIHRoaXMuc25vd0NvbG9yID0gJyNmZmYnOyAgICAgICAgLy8gRG9uJ3QgZWF0IChvciB1c2U/KSB5ZWxsb3cgc25vdy4NCiAgdGhpcy5zbm93Q2hhcmFjdGVyID0gJyZidWxsOyc7ICAvLyAmYnVsbDsgPSBidWxsZXQsICZtaWRkb3Q7IGlzIHNxdWFyZSBvbiBzb21lIHN5c3RlbXMgZXRjLg0KICB0aGlzLnNub3dTdGljayA9IGZhbHNlOyAgICAgICAgICAvLyBXaGV0aGVyIG9yIG5vdCBzbm93IHNob3VsZCAic3RpY2siIGF0IHRoZSBib3R0b20uIFdoZW4gb2ZmLCB3aWxsIG5ldmVyIGNvbGxlY3QuDQogIHRoaXMudXNlTWVsdEVmZmVjdCA9IHRydWU7ICAgICAgLy8gV2hlbiByZWN5Y2xpbmcgZmFsbGVuIHNub3cgKG9yIHJhcmVseSwgd2hlbiBmYWxsaW5nKSwgaGF2ZSBpdCAibWVsdCIgYW5kIGZhZGUgb3V0IGlmIGJyb3dzZXIgc3VwcG9ydHMgaXQNCiAgdGhpcy51c2VUd2lua2xlRWZmZWN0ID0gZmFsc2U7ICAgLy8gQWxsb3cgc25vdyB0byByYW5kb21seSAiZmxpY2tlciIgaW4gYW5kIG91dCBvZiB2aWV3IHdoaWxlIGZhbGxpbmcNCiAgdGhpcy51c2VQb3NpdGlvbkZpeGVkID0gZmFsc2U7ICAvLyB0cnVlID0gc25vdyBub3QgYWZmZWN0ZWQgYnkgd2luZG93IHNjcm9sbC4gbWF5IGluY3JlYXNlIENQVSBsb2FkLCBkaXNhYmxlZCBieSBkZWZhdWx0IC0gaWYgZW5hYmxlZCwgdXNlZCBvbmx5IHdoZXJlIHN1cHBvcnRlZA0KDQogIC8vIC0tLSBsZXNzLXVzZWQgYml0cyAtLS0NCg0KICB0aGlzLmZsYWtlTGVmdE9mZnNldCA9IDA7ICAgICAgIC8vIGFtb3VudCB0byBzdWJ0cmFjdCBmcm9tIGVkZ2VzIG9mIGNvbnRhaW5lcg0KICB0aGlzLmZsYWtlUmlnaHRPZmZzZXQgPSAwOyAgICAgIC8vIGFtb3VudCB0byBzdWJ0cmFjdCBmcm9tIGVkZ2VzIG9mIGNvbnRhaW5lcg0KICB0aGlzLmZsYWtlV2lkdGggPSA4OyAgICAgICAgICAgIC8vIG1heCBwaXhlbCB3aWR0aCBmb3Igc25vdyBlbGVtZW50DQogIHRoaXMuZmxha2VIZWlnaHQgPSA4OyAgICAgICAgICAgLy8gbWF4IHBpeGVsIGhlaWdodCBmb3Igc25vdyBlbGVtZW50DQogIHRoaXMudk1heFggPSA4OyAgICAgICAgICAgICAgICAgLy8gTWF4aW11bSBYIHZlbG9jaXR5IHJhbmdlIGZvciBzbm93DQogIHRoaXMudk1heFkgPSA2OyAgICAgICAgICAgICAgICAgLy8gTWF4aW11bSBZIHZlbG9jaXR5IHJhbmdlDQogIHRoaXMuekluZGV4ID0gMDsgICAgICAgICAgICAgICAgLy8gQ1NTIHN0YWNraW5nIG9yZGVyIGFwcGxpZWQgdG8gZWFjaCBzbm93Zmxha2UNCg0KICAvLyAtLS0gRW5kIG9mIHVzZXIgc2VjdGlvbiAtLS0NCg0KICAvLyBqc2xpbnQgZ2xvYmFsIGRlY2xhcmF0aW9ucw0KICAvKmdsb2JhbCB3aW5kb3csIGRvY3VtZW50LCBuYXZpZ2F0b3IsIGNsZWFySW50ZXJ2YWwsIHNldEludGVydmFsICovDQoNCiAgdmFyIGFkZEV2ZW50ID0gKHR5cGVvZih3aW5kb3cuYXR0YWNoRXZlbnQpPT0ndW5kZWZpbmVkJz9mdW5jdGlvbihvLGV2dE5hbWUsZXZ0SGFuZGxlcikgew0KICAgIHJldHVybiBvLmFkZEV2ZW50TGlzdGVuZXIoZXZ0TmFtZSxldnRIYW5kbGVyLGZhbHNlKTsNCiAgfTpmdW5jdGlvbihvLGV2dE5hbWUsZXZ0SGFuZGxlcikgew0KICAgIHJldHVybiBvLmF0dGFjaEV2ZW50KCdvbicrZXZ0TmFtZSxldnRIYW5kbGVyKTsNCiAgfSk7DQoNCiAgdmFyIHJlbW92ZUV2ZW50ID0gKHR5cGVvZih3aW5kb3cuYXR0YWNoRXZlbnQpPT0ndW5kZWZpbmVkJz9mdW5jdGlvbihvLGV2dE5hbWUsZXZ0SGFuZGxlcikgew0KICAgIHJldHVybiBvLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZ0TmFtZSxldnRIYW5kbGVyLGZhbHNlKTsNCiAgfTpmdW5jdGlvbihvLGV2dE5hbWUsZXZ0SGFuZGxlcikgew0KICAgIHJldHVybiBvLmRldGFjaEV2ZW50KCdvbicrZXZ0TmFtZSxldnRIYW5kbGVyKTsNCiAgfSk7DQoNCiAgZnVuY3Rpb24gcm5kKG4sbWluKSB7DQogICAgaWYgKGlzTmFOKG1pbikpIHsNCiAgICAgIG1pbiA9IDA7DQogICAgfQ0KICAgIHJldHVybiAoTWF0aC5yYW5kb20oKSpuKSttaW47DQogIH0NCg0KICBmdW5jdGlvbiBwbHVzTWludXMobikgew0KICAgIHJldHVybiAocGFyc2VJbnQocm5kKDIpLDEwKT09MT9uKi0xOm4pOw0KICB9DQoNCiAgdmFyIHMgPSB0aGlzOw0KICB2YXIgc3Rvcm0gPSB0aGlzOw0KICB0aGlzLnRpbWVycyA9IFtdOw0KICB0aGlzLmZsYWtlcyA9IFtdOw0KICB0aGlzLmRpc2FibGVkID0gZmFsc2U7DQogIHRoaXMuYWN0aXZlID0gZmFsc2U7DQoNCiAgdmFyIGlzSUUgPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9tc2llL2kpOw0KICB2YXIgaXNJRTYgPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9tc2llIDYvaSk7DQogIHZhciBpc09sZElFID0gKGlzSUUgJiYgKGlzSUU2IHx8IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL21zaWUgNS9pKSkpOw0KICB2YXIgaXNXaW45WCA9IG5hdmlnYXRvci5hcHBWZXJzaW9uLm1hdGNoKC93aW5kb3dzIDk4L2kpOw0KICB2YXIgaXNpUGhvbmUgPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pcGhvbmUvaSk7DQogIHZhciBpc0JhY2tDb21wYXRJRSA9IChpc0lFICYmIGRvY3VtZW50LmNvbXBhdE1vZGUgPT0gJ0JhY2tDb21wYXQnKTsNCiAgdmFyIG5vRml4ZWQgPSAoKGlzQmFja0NvbXBhdElFIHx8IGlzSUU2IHx8IGlzaVBob25lKT90cnVlOmZhbHNlKTsNCiAgdmFyIHNjcmVlblggPSBudWxsOw0KICB2YXIgc2NyZWVuWDIgPSBudWxsOw0KICB2YXIgc2NyZWVuWSA9IG51bGw7DQogIHZhciBzY3JvbGxZID0gbnVsbDsNCiAgdmFyIHZSbmRYID0gbnVsbDsNCiAgdmFyIHZSbmRZID0gbnVsbDsNCiAgdmFyIHdpbmRPZmZzZXQgPSAxOw0KICB2YXIgd2luZE11bHRpcGxpZXIgPSAyOw0KICB2YXIgZmxha2VUeXBlcyA9IDU7DQogIHZhciBmaXhlZEZvckV2ZXJ5dGhpbmcgPSBmYWxzZTsNCiAgdmFyIG9wYWNpdHlTdXBwb3J0ZWQgPSAoZnVuY3Rpb24oKXsNCiAgICB0cnkgew0KICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGUub3BhY2l0eSA9ICcwLjUnOw0KICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogICAgcmV0dXJuIHRydWU7DQogIH0pKCk7DQogIHZhciBkb2NGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOw0KICBpZiAocy5mbGFrZUxlZnRPZmZzZXQgPT09IG51bGwpIHsNCiAgICBzLmZsYWtlTGVmdE9mZnNldCA9IDA7DQogIH0NCiAgaWYgKHMuZmxha2VSaWdodE9mZnNldCA9PT0gbnVsbCkgew0KICAgIHMuZmxha2VSaWdodE9mZnNldCA9IDA7DQogIH0NCg0KICB0aGlzLm1lbHRGcmFtZUNvdW50ID0gMjA7DQogIHRoaXMubWVsdEZyYW1lcyA9IFtdOw0KICBmb3IgKHZhciBpPTA7IGk8dGhpcy5tZWx0RnJhbWVDb3VudDsgaSsrKSB7DQogICAgdGhpcy5tZWx0RnJhbWVzLnB1c2goMS0oaS90aGlzLm1lbHRGcmFtZUNvdW50KSk7DQogIH0NCg0KICB0aGlzLnJhbmRvbWl6ZVdpbmQgPSBmdW5jdGlvbigpIHsNCiAgICB2Um5kWCA9IHBsdXNNaW51cyhybmQocy52TWF4WCwwLjIpKTsNCiAgICB2Um5kWSA9IHJuZChzLnZNYXhZLDAuMik7DQogICAgaWYgKHRoaXMuZmxha2VzKSB7DQogICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5mbGFrZXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgaWYgKHRoaXMuZmxha2VzW2ldLmFjdGl2ZSkgew0KICAgICAgICAgIHRoaXMuZmxha2VzW2ldLnNldFZlbG9jaXRpZXMoKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgfTsNCg0KICB0aGlzLnNjcm9sbEhhbmRsZXIgPSBmdW5jdGlvbigpIHsNCiAgICAvLyAiYXR0YWNoIiBzbm93Zmxha2VzIHRvIGJvdHRvbSBvZiB3aW5kb3cgaWYgbm8gYWJzb2x1dGUgYm90dG9tIHZhbHVlIHdhcyBnaXZlbg0KICAgIHNjcm9sbFkgPSAocy5mbGFrZUJvdHRvbT8wOnBhcnNlSW50KHdpbmRvdy5zY3JvbGxZfHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCwxMCkpOw0KICAgIGlmIChpc05hTihzY3JvbGxZKSkgew0KICAgICAgc2Nyb2xsWSA9IDA7IC8vIE5ldHNjYXBlIDYgc2Nyb2xsIGZpeA0KICAgIH0NCiAgICBpZiAoIWZpeGVkRm9yRXZlcnl0aGluZyAmJiAhcy5mbGFrZUJvdHRvbSAmJiBzLmZsYWtlcykgew0KICAgICAgZm9yICh2YXIgaT1zLmZsYWtlcy5sZW5ndGg7IGktLTspIHsNCiAgICAgICAgaWYgKHMuZmxha2VzW2ldLmFjdGl2ZSA9PT0gMCkgew0KICAgICAgICAgIHMuZmxha2VzW2ldLnN0aWNrKCk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogIH07DQoNCiAgdGhpcy5yZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oKSB7DQogICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIHx8IHdpbmRvdy5pbm5lckhlaWdodCkgew0KICAgICAgc2NyZWVuWCA9IHdpbmRvdy5pbm5lcldpZHRoLSghaXNJRT8xNjoyKS1zLmZsYWtlUmlnaHRPZmZzZXQ7DQogICAgICBzY3JlZW5ZID0gKHMuZmxha2VCb3R0b20/cy5mbGFrZUJvdHRvbTp3aW5kb3cuaW5uZXJIZWlnaHQpOw0KICAgIH0gZWxzZSB7DQogICAgICBzY3JlZW5YID0gKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aHx8ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxXaWR0aCktKCFpc0lFPzg6MCktcy5mbGFrZVJpZ2h0T2Zmc2V0Ow0KICAgICAgc2NyZWVuWSA9IHMuZmxha2VCb3R0b20/cy5mbGFrZUJvdHRvbTooZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodHx8ZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHR8fGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0KTsNCiAgICB9DQogICAgc2NyZWVuWDIgPSBwYXJzZUludChzY3JlZW5YLzIsMTApOw0KICB9Ow0KDQogIHRoaXMucmVzaXplSGFuZGxlckFsdCA9IGZ1bmN0aW9uKCkgew0KICAgIHNjcmVlblggPSBzLnRhcmdldEVsZW1lbnQub2Zmc2V0TGVmdCtzLnRhcmdldEVsZW1lbnQub2Zmc2V0V2lkdGgtcy5mbGFrZVJpZ2h0T2Zmc2V0Ow0KICAgIHNjcmVlblkgPSBzLmZsYWtlQm90dG9tP3MuZmxha2VCb3R0b206cy50YXJnZXRFbGVtZW50Lm9mZnNldFRvcCtzLnRhcmdldEVsZW1lbnQub2Zmc2V0SGVpZ2h0Ow0KICAgIHNjcmVlblgyID0gcGFyc2VJbnQoc2NyZWVuWC8yLDEwKTsNCiAgfTsNCg0KICB0aGlzLmZyZWV6ZSA9IGZ1bmN0aW9uKCkgew0KICAgIC8vIHBhdXNlIGFuaW1hdGlvbg0KICAgIGlmICghcy5kaXNhYmxlZCkgew0KICAgICAgcy5kaXNhYmxlZCA9IDE7DQogICAgfSBlbHNlIHsNCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogICAgZm9yICh2YXIgaT1zLnRpbWVycy5sZW5ndGg7IGktLTspIHsNCiAgICAgIGNsZWFySW50ZXJ2YWwocy50aW1lcnNbaV0pOw0KICAgIH0NCiAgfTsNCg0KICB0aGlzLnJlc3VtZSA9IGZ1bmN0aW9uKCkgew0KICAgIGlmIChzLmRpc2FibGVkKSB7DQogICAgICAgcy5kaXNhYmxlZCA9IDA7DQogICAgfSBlbHNlIHsNCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogICAgcy50aW1lckluaXQoKTsNCiAgfTsNCg0KICB0aGlzLnRvZ2dsZVNub3cgPSBmdW5jdGlvbigpIHsNCiAgICBpZiAoIXMuZmxha2VzLmxlbmd0aCkgew0KICAgICAgLy8gZmlyc3QgcnVuDQogICAgICBzLnN0YXJ0KCk7DQogICAgfSBlbHNlIHsNCiAgICAgIHMuYWN0aXZlID0gIXMuYWN0aXZlOw0KICAgICAgaWYgKHMuYWN0aXZlKSB7DQogICAgICAgIHMuc2hvdygpOw0KICAgICAgICBzLnJlc3VtZSgpOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgcy5zdG9wKCk7DQogICAgICAgIHMuZnJlZXplKCk7DQogICAgICB9DQogICAgfQ0KICB9Ow0KDQogIHRoaXMuc3RvcCA9IGZ1bmN0aW9uKCkgew0KICAgIHRoaXMuZnJlZXplKCk7DQogICAgZm9yICh2YXIgaT10aGlzLmZsYWtlcy5sZW5ndGg7IGktLTspIHsNCiAgICAgIHRoaXMuZmxha2VzW2ldLm8uc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICB9DQogICAgcmVtb3ZlRXZlbnQod2luZG93LCdzY3JvbGwnLHMuc2Nyb2xsSGFuZGxlcik7DQogICAgcmVtb3ZlRXZlbnQod2luZG93LCdyZXNpemUnLHMucmVzaXplSGFuZGxlcik7DQogICAgaWYgKCFpc09sZElFKSB7DQogICAgICByZW1vdmVFdmVudCh3aW5kb3csJ2JsdXInLHMuZnJlZXplKTsNCiAgICAgIHJlbW92ZUV2ZW50KHdpbmRvdywnZm9jdXMnLHMucmVzdW1lKTsNCiAgICB9DQogIH07DQoNCiAgdGhpcy5zaG93ID0gZnVuY3Rpb24oKSB7DQogICAgZm9yICh2YXIgaT10aGlzLmZsYWtlcy5sZW5ndGg7IGktLTspIHsNCiAgICAgIHRoaXMuZmxha2VzW2ldLm8uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgfQ0KICB9Ow0KDQogIHRoaXMuU25vd0ZsYWtlID0gZnVuY3Rpb24ocGFyZW50LHR5cGUseCx5KSB7DQogICAgdmFyIHMgPSB0aGlzOw0KICAgIHZhciBzdG9ybSA9IHBhcmVudDsNCiAgICB0aGlzLnR5cGUgPSB0eXBlOw0KICAgIHRoaXMueCA9IHh8fHBhcnNlSW50KHJuZChzY3JlZW5YLTIwKSwxMCk7DQogICAgdGhpcy55ID0gKCFpc05hTih5KT95Oi1ybmQoc2NyZWVuWSktMTIpOw0KICAgIHRoaXMudlggPSBudWxsOw0KICAgIHRoaXMudlkgPSBudWxsOw0KICAgIHRoaXMudkFtcFR5cGVzID0gWzEsMS4yLDEuNCwxLjYsMS44XTsgLy8gImFtcGxpZmljYXRpb24iIGZvciB2WC92WSAoYmFzZWQgb24gZmxha2Ugc2l6ZS90eXBlKQ0KICAgIHRoaXMudkFtcCA9IHRoaXMudkFtcFR5cGVzW3RoaXMudHlwZV07DQogICAgdGhpcy5tZWx0aW5nID0gZmFsc2U7DQogICAgdGhpcy5tZWx0RnJhbWVDb3VudCA9IHN0b3JtLm1lbHRGcmFtZUNvdW50Ow0KICAgIHRoaXMubWVsdEZyYW1lcyA9IHN0b3JtLm1lbHRGcmFtZXM7DQogICAgdGhpcy5tZWx0RnJhbWUgPSAwOw0KICAgIHRoaXMudHdpbmtsZUZyYW1lID0gMDsNCiAgICB0aGlzLmFjdGl2ZSA9IDE7DQogICAgdGhpcy5mb250U2l6ZSA9ICgxMCsodGhpcy50eXBlLzUpKjEwKTsNCiAgICB0aGlzLm8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCiAgICB0aGlzLm8uaW5uZXJIVE1MID0gc3Rvcm0uc25vd0NoYXJhY3RlcjsNCiAgICB0aGlzLm8uc3R5bGUuY29sb3IgPSBzdG9ybS5zbm93Q29sb3I7DQogICAgdGhpcy5vLnN0eWxlLnBvc2l0aW9uID0gKGZpeGVkRm9yRXZlcnl0aGluZz8nZml4ZWQnOidhYnNvbHV0ZScpOw0KICAgIHRoaXMuby5zdHlsZS53aWR0aCA9IHN0b3JtLmZsYWtlV2lkdGgrJ3B4JzsNCiAgICB0aGlzLm8uc3R5bGUuaGVpZ2h0ID0gc3Rvcm0uZmxha2VIZWlnaHQrJ3B4JzsNCiAgICB0aGlzLm8uc3R5bGUuZm9udEZhbWlseSA9ICdhcmlhbCx2ZXJkYW5hJzsNCiAgICB0aGlzLm8uc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJzsNCiAgICB0aGlzLm8uc3R5bGUuZm9udFdlaWdodCA9ICdub3JtYWwnOw0KICAgIHRoaXMuby5zdHlsZS56SW5kZXggPSBzdG9ybS56SW5kZXg7DQogICAgZG9jRnJhZy5hcHBlbmRDaGlsZCh0aGlzLm8pOw0KDQogICAgdGhpcy5yZWZyZXNoID0gZnVuY3Rpb24oKSB7DQogICAgICBpZiAoaXNOYU4ocy54KSB8fCBpc05hTihzLnkpKSB7DQogICAgICAgIC8vIHNhZmV0eSBjaGVjaw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgICBzLm8uc3R5bGUubGVmdCA9IHMueCsncHgnOw0KICAgICAgcy5vLnN0eWxlLnRvcCA9IHMueSsncHgnOw0KICAgIH07DQoNCiAgICB0aGlzLnN0aWNrID0gZnVuY3Rpb24oKSB7DQogICAgICBpZiAobm9GaXhlZCB8fCAoc3Rvcm0udGFyZ2V0RWxlbWVudCAhPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgc3Rvcm0udGFyZ2V0RWxlbWVudCAhPSBkb2N1bWVudC5ib2R5KSkgew0KICAgICAgICBzLm8uc3R5bGUudG9wID0gKHNjcmVlblkrc2Nyb2xsWS1zdG9ybS5mbGFrZUhlaWdodCkrJ3B4JzsNCiAgICAgIH0gZWxzZSBpZiAoc3Rvcm0uZmxha2VCb3R0b20pIHsNCiAgICAgICAgcy5vLnN0eWxlLnRvcCA9IHN0b3JtLmZsYWtlQm90dG9tKydweCc7DQogICAgICB9IGVsc2Ugew0KICAgICAgICBzLm8uc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgcy5vLnN0eWxlLnRvcCA9ICdhdXRvJzsNCiAgICAgICAgcy5vLnN0eWxlLmJvdHRvbSA9ICcwcHgnOw0KICAgICAgICBzLm8uc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnOw0KICAgICAgICBzLm8uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICB9DQogICAgfTsNCg0KICAgIHRoaXMudkNoZWNrID0gZnVuY3Rpb24oKSB7DQogICAgICBpZiAocy52WD49MCAmJiBzLnZYPDAuMikgew0KICAgICAgICBzLnZYID0gMC4yOw0KICAgICAgfSBlbHNlIGlmIChzLnZYPDAgJiYgcy52WD4tMC4yKSB7DQogICAgICAgIHMudlggPSAtMC4yOw0KICAgICAgfQ0KICAgICAgaWYgKHMudlk+PTAgJiYgcy52WTwwLjIpIHsNCiAgICAgICAgcy52WSA9IDAuMjsNCiAgICAgIH0NCiAgICB9Ow0KDQogICAgdGhpcy5tb3ZlID0gZnVuY3Rpb24oKSB7DQogICAgICB2YXIgdlggPSBzLnZYKndpbmRPZmZzZXQ7DQogICAgICBzLnggKz0gdlg7DQogICAgICBzLnkgKz0gKHMudlkqcy52QW1wKTsNCiAgICAgIGlmIChzLnggPj0gc2NyZWVuWCB8fCBzY3JlZW5YLXMueCA8IHN0b3JtLmZsYWtlV2lkdGgpIHsgLy8gWC1heGlzIHNjcm9sbCBjaGVjaw0KICAgICAgICBzLnggPSAwOw0KICAgICAgfSBlbHNlIGlmICh2WCA8IDAgJiYgcy54LXN0b3JtLmZsYWtlTGVmdE9mZnNldDwwLXN0b3JtLmZsYWtlV2lkdGgpIHsNCiAgICAgICAgcy54ID0gc2NyZWVuWC1zdG9ybS5mbGFrZVdpZHRoLTE7IC8vIGZsYWtlV2lkdGg7DQogICAgICB9DQogICAgICBzLnJlZnJlc2goKTsNCiAgICAgIHZhciB5RGlmZiA9IHNjcmVlblkrc2Nyb2xsWS1zLnk7DQogICAgICBpZiAoeURpZmY8c3Rvcm0uZmxha2VIZWlnaHQpIHsNCiAgICAgICAgcy5hY3RpdmUgPSAwOw0KICAgICAgICBpZiAoc3Rvcm0uc25vd1N0aWNrKSB7DQogICAgICAgICAgcy5zdGljaygpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHMucmVjeWNsZSgpOw0KICAgICAgICB9DQogICAgICB9IGVsc2Ugew0KICAgICAgICBpZiAoc3Rvcm0udXNlTWVsdEVmZmVjdCAmJiBzLmFjdGl2ZSAmJiBzLnR5cGUgPCAzICYmICFzLm1lbHRpbmcgJiYgTWF0aC5yYW5kb20oKT4wLjk5OCkgew0KICAgICAgICAgIC8vIH4xLzEwMDAgY2hhbmNlIG9mIG1lbHRpbmcgbWlkLWFpciwgd2l0aCBlYWNoIGZyYW1lDQogICAgICAgICAgcy5tZWx0aW5nID0gdHJ1ZTsNCiAgICAgICAgICBzLm1lbHQoKTsNCiAgICAgICAgICAvLyBvbmx5IGluY3JlbWVudGFsbHkgbWVsdCBvbmUgZnJhbWUNCiAgICAgICAgICAvLyBzLm1lbHRpbmcgPSBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoc3Rvcm0udXNlVHdpbmtsZUVmZmVjdCkgew0KICAgICAgICAgIGlmICghcy50d2lua2xlRnJhbWUpIHsNCiAgICAgICAgICAgIGlmIChNYXRoLnJhbmRvbSgpPjAuOSkgew0KICAgICAgICAgICAgICBzLnR3aW5rbGVGcmFtZSA9IHBhcnNlSW50KE1hdGgucmFuZG9tKCkqMjAsMTApOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBzLnR3aW5rbGVGcmFtZS0tOw0KICAgICAgICAgICAgcy5vLnN0eWxlLnZpc2liaWxpdHkgPSAocy50d2lua2xlRnJhbWUgJiYgcy50d2lua2xlRnJhbWUlMj09PTA/J2hpZGRlbic6J3Zpc2libGUnKTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9Ow0KDQogICAgdGhpcy5hbmltYXRlID0gZnVuY3Rpb24oKSB7DQogICAgICAvLyBtYWluIGFuaW1hdGlvbiBsb29wDQogICAgICAvLyBtb3ZlLCBjaGVjayBzdGF0dXMsIGRpZSBldGMuDQogICAgICBzLm1vdmUoKTsNCiAgICB9Ow0KDQogICAgdGhpcy5zZXRWZWxvY2l0aWVzID0gZnVuY3Rpb24oKSB7DQogICAgICBzLnZYID0gdlJuZFgrcm5kKHN0b3JtLnZNYXhYKjAuMTIsMC4xKTsNCiAgICAgIHMudlkgPSB2Um5kWStybmQoc3Rvcm0udk1heFkqMC4xMiwwLjEpOw0KICAgIH07DQoNCiAgICB0aGlzLnNldE9wYWNpdHkgPSBmdW5jdGlvbihvLG9wYWNpdHkpIHsNCiAgICAgIGlmICghb3BhY2l0eVN1cHBvcnRlZCkgew0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgICBvLnN0eWxlLm9wYWNpdHkgPSBvcGFjaXR5Ow0KICAgIH07DQoNCiAgICB0aGlzLm1lbHQgPSBmdW5jdGlvbigpIHsNCiAgICAgIGlmICghc3Rvcm0udXNlTWVsdEVmZmVjdCB8fCAhcy5tZWx0aW5nKSB7DQogICAgICAgIHMucmVjeWNsZSgpOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgaWYgKHMubWVsdEZyYW1lIDwgcy5tZWx0RnJhbWVDb3VudCkgew0KICAgICAgICAgIHMubWVsdEZyYW1lKys7DQogICAgICAgICAgcy5zZXRPcGFjaXR5KHMubyxzLm1lbHRGcmFtZXNbcy5tZWx0RnJhbWVdKTsNCiAgICAgICAgICBzLm8uc3R5bGUuZm9udFNpemUgPSBzLmZvbnRTaXplLShzLmZvbnRTaXplKihzLm1lbHRGcmFtZS9zLm1lbHRGcmFtZUNvdW50KSkrJ3B4JzsNCiAgICAgICAgICBzLm8uc3R5bGUubGluZUhlaWdodCA9IHN0b3JtLmZsYWtlSGVpZ2h0KzIrKHN0b3JtLmZsYWtlSGVpZ2h0KjAuNzUqKHMubWVsdEZyYW1lL3MubWVsdEZyYW1lQ291bnQpKSsncHgnOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHMucmVjeWNsZSgpOw0KICAgICAgICB9DQogICAgICB9DQogICAgfTsNCg0KICAgIHRoaXMucmVjeWNsZSA9IGZ1bmN0aW9uKCkgew0KICAgICAgcy5vLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICBzLm8uc3R5bGUucG9zaXRpb24gPSAoZml4ZWRGb3JFdmVyeXRoaW5nPydmaXhlZCc6J2Fic29sdXRlJyk7DQogICAgICBzLm8uc3R5bGUuYm90dG9tID0gJ2F1dG8nOw0KICAgICAgcy5zZXRWZWxvY2l0aWVzKCk7DQogICAgICBzLnZDaGVjaygpOw0KICAgICAgcy5tZWx0RnJhbWUgPSAwOw0KICAgICAgcy5tZWx0aW5nID0gZmFsc2U7DQogICAgICBzLnNldE9wYWNpdHkocy5vLDEpOw0KICAgICAgcy5vLnN0eWxlLnBhZGRpbmcgPSAnMHB4JzsNCiAgICAgIHMuby5zdHlsZS5tYXJnaW4gPSAnMHB4JzsNCiAgICAgIHMuby5zdHlsZS5mb250U2l6ZSA9IHMuZm9udFNpemUrJ3B4JzsNCiAgICAgIHMuby5zdHlsZS5saW5lSGVpZ2h0ID0gKHN0b3JtLmZsYWtlSGVpZ2h0KzIpKydweCc7DQogICAgICBzLm8uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7DQogICAgICBzLm8uc3R5bGUudmVydGljYWxBbGlnbiA9ICdiYXNlbGluZSc7DQogICAgICBzLnggPSBwYXJzZUludChybmQoc2NyZWVuWC1zdG9ybS5mbGFrZVdpZHRoLTIwKSwxMCk7DQogICAgICBzLnkgPSBwYXJzZUludChybmQoc2NyZWVuWSkqLTEsMTApLXN0b3JtLmZsYWtlSGVpZ2h0Ow0KICAgICAgcy5yZWZyZXNoKCk7DQogICAgICBzLm8uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICBzLmFjdGl2ZSA9IDE7DQogICAgfTsNCg0KICAgIHRoaXMucmVjeWNsZSgpOyAvLyBzZXQgdXAgeC95IGNvb3JkcyBldGMuDQogICAgdGhpcy5yZWZyZXNoKCk7DQoNCiAgfTsNCg0KICB0aGlzLnNub3cgPSBmdW5jdGlvbigpIHsNCiAgICB2YXIgYWN0aXZlID0gMDsNCiAgICB2YXIgdXNlZCA9IDA7DQogICAgdmFyIHdhaXRpbmcgPSAwOw0KICAgIHZhciBmbGFrZSA9IG51bGw7DQogICAgZm9yICh2YXIgaT1zLmZsYWtlcy5sZW5ndGg7IGktLTspIHsNCiAgICAgIGlmIChzLmZsYWtlc1tpXS5hY3RpdmUgPT0gMSkgew0KICAgICAgICBzLmZsYWtlc1tpXS5tb3ZlKCk7DQogICAgICAgIGFjdGl2ZSsrOw0KICAgICAgfSBlbHNlIGlmIChzLmZsYWtlc1tpXS5hY3RpdmUgPT09IDApIHsNCiAgICAgICAgdXNlZCsrOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgd2FpdGluZysrOw0KICAgICAgfQ0KICAgICAgaWYgKHMuZmxha2VzW2ldLm1lbHRpbmcpIHsNCiAgICAgICAgcy5mbGFrZXNbaV0ubWVsdCgpOw0KICAgICAgfQ0KICAgIH0NCiAgICBpZiAoYWN0aXZlPHMuZmxha2VzTWF4QWN0aXZlKSB7DQogICAgICBmbGFrZSA9IHMuZmxha2VzW3BhcnNlSW50KHJuZChzLmZsYWtlcy5sZW5ndGgpLDEwKV07DQogICAgICBpZiAoZmxha2UuYWN0aXZlID09PSAwKSB7DQogICAgICAgIGZsYWtlLm1lbHRpbmcgPSB0cnVlOw0KICAgICAgfQ0KICAgIH0NCiAgfTsNCg0KICB0aGlzLm1vdXNlTW92ZSA9IGZ1bmN0aW9uKGUpIHsNCiAgICBpZiAoIXMuZm9sbG93TW91c2UpIHsNCiAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCiAgICB2YXIgeCA9IHBhcnNlSW50KGUuY2xpZW50WCwxMCk7DQogICAgaWYgKHg8c2NyZWVuWDIpIHsNCiAgICAgIHdpbmRPZmZzZXQgPSAtd2luZE11bHRpcGxpZXIrKHgvc2NyZWVuWDIqd2luZE11bHRpcGxpZXIpOw0KICAgIH0gZWxzZSB7DQogICAgICB4IC09IHNjcmVlblgyOw0KICAgICAgd2luZE9mZnNldCA9ICh4L3NjcmVlblgyKSp3aW5kTXVsdGlwbGllcjsNCiAgICB9DQogIH07DQoNCiAgdGhpcy5jcmVhdGVTbm93ID0gZnVuY3Rpb24obGltaXQsYWxsb3dJbmFjdGl2ZSkgew0KICAgIGZvciAodmFyIGk9MDsgaTxsaW1pdDsgaSsrKSB7DQogICAgICBzLmZsYWtlc1tzLmZsYWtlcy5sZW5ndGhdID0gbmV3IHMuU25vd0ZsYWtlKHMscGFyc2VJbnQocm5kKGZsYWtlVHlwZXMpLDEwKSk7DQogICAgICBpZiAoYWxsb3dJbmFjdGl2ZSB8fCBpPnMuZmxha2VzTWF4QWN0aXZlKSB7DQogICAgICAgIHMuZmxha2VzW3MuZmxha2VzLmxlbmd0aC0xXS5hY3RpdmUgPSAtMTsNCiAgICAgIH0NCiAgICB9DQogICAgc3Rvcm0udGFyZ2V0RWxlbWVudC5hcHBlbmRDaGlsZChkb2NGcmFnKTsNCiAgfTsNCg0KICB0aGlzLnRpbWVySW5pdCA9IGZ1bmN0aW9uKCkgew0KICAgIHMudGltZXJzID0gKCFpc1dpbjlYP1tzZXRJbnRlcnZhbChzLnNub3cscy5hbmltYXRpb25JbnRlcnZhbCldOltzZXRJbnRlcnZhbChzLnNub3cscy5hbmltYXRpb25JbnRlcnZhbCozKSxzZXRJbnRlcnZhbChzLnNub3cscy5hbmltYXRpb25JbnRlcnZhbCldKTsNCiAgfTsNCg0KICB0aGlzLmluaXQgPSBmdW5jdGlvbigpIHsNCiAgICBzLnJhbmRvbWl6ZVdpbmQoKTsNCiAgICBzLmNyZWF0ZVNub3cocy5mbGFrZXNNYXgpOyAvLyBjcmVhdGUgaW5pdGlhbCBiYXRjaA0KICAgIGFkZEV2ZW50KHdpbmRvdywncmVzaXplJyxzLnJlc2l6ZUhhbmRsZXIpOw0KICAgIGFkZEV2ZW50KHdpbmRvdywnc2Nyb2xsJyxzLnNjcm9sbEhhbmRsZXIpOw0KICAgIGlmICghaXNPbGRJRSkgew0KICAgICAgYWRkRXZlbnQod2luZG93LCdibHVyJyxzLmZyZWV6ZSk7DQogICAgICBhZGRFdmVudCh3aW5kb3csJ2ZvY3VzJyxzLnJlc3VtZSk7DQogICAgfQ0KICAgIHMucmVzaXplSGFuZGxlcigpOw0KICAgIHMuc2Nyb2xsSGFuZGxlcigpOw0KICAgIGlmIChzLmZvbGxvd01vdXNlKSB7DQogICAgICBhZGRFdmVudChkb2N1bWVudCwnbW91c2Vtb3ZlJyxzLm1vdXNlTW92ZSk7DQogICAgfQ0KICAgIHMuYW5pbWF0aW9uSW50ZXJ2YWwgPSBNYXRoLm1heCgyMCxzLmFuaW1hdGlvbkludGVydmFsKTsNCiAgICBzLnRpbWVySW5pdCgpOw0KICB9Ow0KDQogIHZhciBkaWRJbml0ID0gZmFsc2U7DQoNCiAgdGhpcy5zdGFydCA9IGZ1bmN0aW9uKGJGcm9tT25Mb2FkKSB7DQogICAgaWYgKCFkaWRJbml0KSB7DQogICAgICBkaWRJbml0ID0gdHJ1ZTsNCiAgICB9IGVsc2UgaWYgKGJGcm9tT25Mb2FkKSB7DQogICAgICAvLyBhbHJlYWR5IGxvYWRlZCBhbmQgcnVubmluZw0KICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KICAgIGlmICh0eXBlb2Ygcy50YXJnZXRFbGVtZW50ID09ICdzdHJpbmcnKSB7DQogICAgICB2YXIgdGFyZ2V0SUQgPSBzLnRhcmdldEVsZW1lbnQ7DQogICAgICBzLnRhcmdldEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXRJRCk7DQogICAgICBpZiAoIXMudGFyZ2V0RWxlbWVudCkgew0KICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nub3dzdG9ybTogVW5hYmxlIHRvIGdldCB0YXJnZXRFbGVtZW50ICInK3RhcmdldElEKyciJyk7DQogICAgICB9DQogICAgfQ0KICAgIGlmICghcy50YXJnZXRFbGVtZW50KSB7DQogICAgICBzLnRhcmdldEVsZW1lbnQgPSAoIWlzSUU/KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudD9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ6ZG9jdW1lbnQuYm9keSk6ZG9jdW1lbnQuYm9keSk7DQogICAgfQ0KICAgIGlmIChzLnRhcmdldEVsZW1lbnQgIT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIHMudGFyZ2V0RWxlbWVudCAhPSBkb2N1bWVudC5ib2R5KSB7DQogICAgICBzLnJlc2l6ZUhhbmRsZXIgPSBzLnJlc2l6ZUhhbmRsZXJBbHQ7IC8vIHJlLW1hcCBoYW5kbGVyIHRvIGdldCBlbGVtZW50IGluc3RlYWQgb2Ygc2NyZWVuIGRpbWVuc2lvbnMNCiAgICB9DQogICAgcy5yZXNpemVIYW5kbGVyKCk7IC8vIGdldCBib3VuZGluZyBib3ggZWxlbWVudHMNCiAgICBzLnVzZVBvc2l0aW9uRml4ZWQgPSAocy51c2VQb3NpdGlvbkZpeGVkICYmICFub0ZpeGVkKTsgLy8gd2hldGhlciBvciBub3QgcG9zaXRpb246Zml4ZWQgaXMgc3VwcG9ydGVkDQogICAgZml4ZWRGb3JFdmVyeXRoaW5nID0gcy51c2VQb3NpdGlvbkZpeGVkOw0KICAgIGlmIChzY3JlZW5YICYmIHNjcmVlblkgJiYgIXMuZGlzYWJsZWQpIHsNCiAgICAgIHMuaW5pdCgpOw0KICAgICAgcy5hY3RpdmUgPSB0cnVlOw0KICAgIH0NCiAgfTsNCg0KICBmdW5jdGlvbiBkb1N0YXJ0KCkgew0KICAgICAgcy5zdGFydCh0cnVlKTsNCiAgfQ0KDQogIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7DQogICAgLy8gc2FmYXJpIDMuMC40IGRvZXNuJ3QgZG8gRE9NQ29udGVudExvYWRlZCwgbWF5YmUgb3RoZXJzIC0gdXNlIGEgZmFsbGJhY2sgdG8gYmUgc2FmZS4NCiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJyxkb1N0YXJ0LGZhbHNlKTsNCiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsZG9TdGFydCxmYWxzZSk7DQogIH0gZWxzZSB7DQogICAgYWRkRXZlbnQod2luZG93LCdsb2FkJyxkb1N0YXJ0KTsNCiAgfQ0KDQp9DQoNCnNub3dTdG9ybSA9IG5ldyBTbm93U3Rvcm0oKTs8L3NjcmlwdD4iO3M6MTc6ImJhbm5lcl90b3BfZW5hYmxlIjtzOjE6IjAiO3M6MTM6ImJhbm5lcl9ib3R0b20iO3M6MDoiIjtzOjIwOiJiYW5uZXJfYm90dG9tX2VuYWJsZSI7czoxOiIwIjtzOjEzOiJoZWFkZXJfZW5hYmxlIjtzOjE6IjAiO3M6MTQ6Im5vdF9lZGl0X2FkbWluIjtzOjE6IjAiO3M6MTI6InN0YWZmX2ZvcnVtcyI7czoxOiIxIjtzOjEyOiJzdGFmZl9lbmFibGUiO3M6MToiMSI7czoxNToic21pbGllc19jb2x1bW5zIjtzOjE6IjQiO3M6MTI6InNtaWxpZXNfcm93cyI7czoxOiI4IjtzOjE3OiJzbWlsaWVzX3dfY29sdW1ucyI7czoxOiI4IjtzOjEzOiJnZW5lcmF0ZV90aW1lIjtzOjE6IjEiO3M6MTA6Im5hbWVfY29sb3IiO3M6MDoiIjtzOjEwOiJkZXNjX2NvbG9yIjtzOjA6IiI7czoxNDoibW9kX25pY2tfY29sb3IiO3M6MDoiIjtzOjE1OiJ3YXJuaW5nc19lbmFibGUiO3M6MToiMSI7czoxMjoibW9kX3dhcm5pbmdzIjtzOjE6IjEiO3M6MTc6Im1vZF9lZGl0X3dhcm5pbmdzIjtzOjE6IjAiO3M6MTc6Im1vZF92YWx1ZV93YXJuaW5nIjtzOjE6IjEiO3M6MTQ6IndyaXRlX3dhcm5pbmdzIjtzOjE6IjMiO3M6MTI6ImJhbl93YXJuaW5ncyI7czoxOiI2IjtzOjE1OiJleHBpcmVfd2FybmluZ3MiO3M6MToiMCI7czoyMDoid2FybmluZ3NfbW9kc19wdWJsaWMiO3M6MToiMSI7czoxODoidmlld3RvcGljX3dhcm5pbmdzIjtzOjE6IjEiO3M6MTY6ImJvYXJkX21zZ19lbmFibGUiO3M6MToiMCI7czo5OiJib2FyZF9tc2ciO3M6MzMwOiI8QlI+DQo8QlI+DQo8ZGl2IGFsaWduPSJDZW50ZXIiPjxiPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3Lmtpbm9wcmFoYS5wbCI+PGltZyBzcmM9Imh0dHA6Ly93d3cubGlwc2thLm5ldC9ib2xzaG9pMi5qcGciIGFsdD0iQm9sc2hvaSBCYWxsZXQgTGl2ZSB3IEtpbmllIFByYWhhIj48L2E+PEJSPjxCUj4NCjxhIGhyZWY9Imh0dHA6Ly93d3cuYmFsZXQucGwvZm9ydW1fYmFsZXQvdmlld3RvcGljLnBocD9wPTE2ODU3MiI+QSB1IG5hcyBtb79uYSB3eWdyYeYgYmlsZXQgbmEgZG93b2xueSB6ZSBzcGVrdGFrbGkgITwvYT48L2I+DQo8QlI+PEJSPg0KPC9kaXY+DQoiO3M6MTE6IndpZHRoX2ZvcnVtIjtzOjE6IjAiO3M6MTE6IndpZHRoX3RhYmxlIjtzOjM6IjgwMCI7czoxMjoid2lkdGhfY29sb3IxIjtzOjA6IiI7czoxMjoid2lkdGhfY29sb3IyIjtzOjA6IiI7czoxMjoidGFibGVfYm9yZGVyIjtzOjE6IjYiO3M6MTQ6InJlYnVpbGRfc2VhcmNoIjtzOjA6IiI7czoxOToiZ2VuZXJhdGVfdGltZV9hZG1pbiI7czoxOiIwIjtzOjEwOiJyX2Ffcl90aW1lIjtzOjE6IjEiO3M6ODoidmlzaXRvcnMiO3M6NzoiMjE0NTg0OSI7czoxNzoiZW1haWxfcmV0dXJuX3BhdGgiO3M6MDoiIjtzOjEwOiJlbWFpbF9mcm9tIjtzOjA6IiI7czoxMjoicG9zdGVyX3Bvc3RzIjtzOjE6IjEiO3M6OToic3ViX2ZvcnVtIjtzOjE6IjEiO3M6MTQ6InN1Yl9mb3J1bV9vdmVyIjtzOjE6IjAiO3M6OToic3BsaXRfY2F0IjtzOjE6IjEiO3M6MTQ6InNwbGl0X2NhdF9vdmVyIjtzOjE6IjAiO3M6MTY6Imxhc3RfdG9waWNfdGl0bGUiO3M6MToiMSI7czoyMToibGFzdF90b3BpY190aXRsZV9vdmVyIjtzOjE6IjAiO3M6MjM6Imxhc3RfdG9waWNfdGl0bGVfbGVuZ3RoIjtzOjI6IjI0IjtzOjE1OiJzdWJfbGV2ZWxfbGlua3MiO3M6MToiMiI7czoyMDoic3ViX2xldmVsX2xpbmtzX292ZXIiO3M6MToiMCI7czoxODoiZGlzcGxheV92aWV3b25saW5lIjtzOjE6IjIiO3M6MjM6ImRpc3BsYXlfdmlld29ubGluZV9vdmVyIjtzOjE6IjAiO3M6MTM6Imlnbm9yZV90b3BpY3MiO3M6MToiMSI7czoxMToidG9waWNfY29sb3IiO3M6MToiMSI7czoxNToidG9waWNfY29sb3JfYWxsIjtzOjE6IjAiO3M6MTU6InRvcGljX2NvbG9yX21vZCI7czoxOiIxIjtzOjE5OiJhbGxvd19zaWdfaW1hZ2VfaW1nIjtzOjE6IjAiO3M6MTg6Imxhc3RfZHRhYmxlX25vdGlmeSI7czowOiIiO3M6MTc6InJlcG9ydF9ub19ndWVzdGVzIjtzOjE6IjEiO3M6MjA6InJlcG9ydF9ub19hdXRoX3VzZXJzIjtzOjA6IiI7czoyMToicmVwb3J0X25vX2F1dGhfZ3JvdXBzIjtzOjA6IiI7czoyMToicmVwb3J0X2Rpc2FibGVkX3VzZXJzIjtzOjA6IiI7czoyMjoicmVwb3J0X2Rpc2FibGVkX2dyb3VwcyI7czowOiIiO3M6MTc6InJlcG9ydF9vbmx5X2FkbWluIjtzOjE6IjAiO3M6MTk6InJlcG9ydF9wb3B1cF9oZWlnaHQiO3M6MzoiMjUwIjtzOjE4OiJyZXBvcnRfcG9wdXBfd2lkdGgiO3M6MzoiNzAwIjtzOjI1OiJyZXBvcnRfcG9wdXBfbGlua3NfdGFyZ2V0IjtzOjE6IjIiO3M6MTQ6InJlcG9ydF9kaXNhYmxlIjtzOjE6IjEiO3M6MTI6ImFsbG93X2F2YXRhciI7czoxOiIwIjtzOjE4OiJsYXN0X3Zpc2l0b3JzX3RpbWUiO3M6MjoiMjQiO3M6MTk6Im1heF9zaWdfY2hhcnNfYWRtaW4iO3M6MToiNiI7czoxNzoibWF4X3NpZ19jaGFyc19tb2QiO3M6MToiMyI7czoxMDoidmlld29ubGluZSI7czoxOiIwIjtzOjE2OiJyZXN0cmljdF9zbWlsaWVzIjtzOjE6IjAiO3M6MTM6InRvcGljX3ByZXZpZXciO3M6MToiMSI7czoyMToibm90X2Fub255bW91c19wb3N0aW5nIjtzOjE6IjAiO3M6MjQ6Im5vdF9hbm9ueW1vdXNfcXVpY2tyZXBseSI7czoxOiIwIjtzOjExOiJtYXhfc21pbGllcyI7czoyOiIyNCI7czoxMToicG9ydGFsX2xpbmsiO3M6MToiMCI7czoxMzoic2VhcmNoX2VuYWJsZSI7czoxOiIxIjtzOjc6Im92ZXJsaWIiO3M6MToiMSI7czo5OiJub3RpZnlfZ2ciO3M6MToiMCI7czoxNToiYWRtaW5fbm90aWZ5X2dnIjtzOjA6IiI7czoxODoiYWRtaW5fbm90aWZ5X3JlcGx5IjtzOjE6IjEiO3M6MjA6ImFkbWluX25vdGlmeV9tZXNzYWdlIjtzOjE6IjAiO3M6MTY6InRvcGljX3N0YXJ0X2RhdGUiO3M6MToiMSI7czoyMjoidG9waWNfc3RhcnRfZGF0ZWZvcm1hdCI7czo1OiJkLW0teSI7czoxNzoiYXV0b3JlcGFpcl90YWJsZXMiO3M6MToiMSI7czoxMzoiY2hlY2tfYWRkcmVzcyI7czoxOiIwIjtzOjE0OiJlY2hhbmdlX2Jhbm5lciI7czoxOiIwIjtzOjEyOiJiYW5uZXJzX2xpc3QiO3M6MjU1OiI8Y2VudGVyPjxhIGhyZWY9Imh0dHA6Ly9waHBiYi5jb20iIHRhcmdldD0iX2JsYW5rIj48aW1nIHNyYz0iaW1hZ2VzL2xpbmtfcGhwYmIuZ2lmIiBhbHQ9IiIgYm9yZGVyPSIwIiAvPjwvYT48L2NlbnRlcj48YnIgLz5bYmFubmVyXTxjZW50ZXI+PGEgaHJlZj0iaHR0cDovL2ZvcnVtaW1hZ2VzLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgc3JjPSJpbWFnZXMvbGlua19mb3J1bWltYWdlcy5naWYiIGFsdD0iIiBib3JkZXI9IjAiIC8+PC9hPjwvY2UiO3M6MTQ6InNwbGl0X21lc3NhZ2VzIjtzOjE6IjAiO3M6MjA6InNwbGl0X21lc3NhZ2VzX2FkbWluIjtzOjE6IjAiO3M6MTg6InNwbGl0X21lc3NhZ2VzX21vZCI7czoxOiIwIjtzOjEwOiJhZG1pbl9odG1sIjtzOjE6IjAiO3M6MTM6ImpyX2FkbWluX2h0bWwiO3M6MToiMCI7czo4OiJtb2RfaHRtbCI7czoxOiIwIjtzOjY6ImhlbHBlZCI7czoxOiIwIjtzOjE3OiJkZWxfbm90aWZ5X21ldGhvZCI7czoxOiIxIjtzOjE3OiJkZWxfbm90aWZ5X2VuYWJsZSI7czoxOiIxIjtzOjE3OiJkZWxfbm90aWZ5X2Nob2ljZSI7czoxOiIxIjtzOjE1OiJvcGVuX2luX3dpbmRvd3MiO3M6MToiMSI7czoxMzoidGl0bGVfZXhwbGFpbiI7czoxOiIxIjtzOjIwOiJzaG93X2FjdGlvbl91bmxvY2tlZCI7czoxOiIxIjtzOjE4OiJzaG93X2FjdGlvbl9sb2NrZWQiO3M6MToiMSI7czoxNzoic2hvd19hY3Rpb25fbW92ZWQiO3M6MToiMSI7czoxOToic2hvd19hY3Rpb25fZXhwaXJlZCI7czoxOiIxIjtzOjI4OiJzaG93X2FjdGlvbl9lZGl0ZWRfYnlfb3RoZXJzIjtzOjE6IjEiO3M6MjM6InNob3dfYWN0aW9uX2VkaXRlZF9zZWxmIjtzOjE6IjEiO3M6Mjc6InNob3dfYWN0aW9uX2VkaXRlZF9zZWxmX2FsbCI7czoxOiIwIjtzOjI0OiJhbGxvd19tb2RfZGVsZXRlX2FjdGlvbnMiO3M6MToiMCI7czoxMDoic2hvd19ydWxlcyI7czoxOiIwIjtzOjc6Im1vZF9zcHkiO3M6MToiMCI7czoxMzoibW9kX3NweV9hZG1pbiI7czoxOiIwIjtzOjEyOiJwb3N0X292ZXJsaWIiO3M6MToiMSI7czo3OiJwaF9kYXlzIjtzOjI6IjE0IjtzOjY6InBoX2xlbiI7czoxOiI4IjtzOjY6InBoX21vZCI7czoxOiIwIjtzOjEzOiJwaF9tb2RfZGVsZXRlIjtzOjE6IjAiO3M6MTA6Im5ld2VzdHVzZXIiO3M6NjQ6ImE6Mjp7czo4OiJ1c2VybmFtZSI7czoxMDoiam9obnNvY2FyYSI7czo3OiJ1c2VyX2lkIjtzOjQ6Ijc5NzYiO30iO3M6MTA6InRvcGljY291bnQiO3M6NDoiNDQxNCI7czo5OiJwb3N0Y291bnQiO3M6NjoiMTA3MDI3IjtzOjk6InVzZXJjb3VudCI7czo0OiIzODcyIjtzOjg6Imxhc3Rwb3N0IjtzOjEwOiIxNjMzMDkwNDQ4IjtzOjE2OiJhbm9ueW1vdXNfc2ltcGxlIjtzOjE6IjAiO3M6Nzoib25tb3VzZSI7czoxOiIxIjtzOjEzOiJiaXJ0aGRheV9kYXRhIjtzOjQyMTM6ImE6Mjp7aTowO2k6MTcxNDIzMTA3NDtpOjE7YToxOTp7aTowO2E6Nzp7czo3OiJ1c2VyX2lkIjtzOjQ6IjU0NjMiO3M6ODoidXNlcm5hbWUiO3M6NToiQWduZSQiO3M6MTA6InVzZXJfZW1haWwiO3M6MjA6ImFnbmVzNzBAYnV6aWFjemVrLnBsIjtzOjk6InVzZXJfbGFuZyI7czo2OiJwb2xpc2giO3M6MTM6InVzZXJfYmlydGhkYXkiO3M6NToiMTAzNDUiO3M6MTA6InVzZXJfbGV2ZWwiO3M6MToiMCI7czo3OiJ1c2VyX2pyIjtzOjE6IjAiO31pOjE7YTo3OntzOjc6InVzZXJfaWQiO3M6NDoiNDgxMCI7czo4OiJ1c2VybmFtZSI7czo2OiJBbGV4aWsiO3M6MTA6InVzZXJfZW1haWwiO3M6MTU6ImFsZXhpazJAb25ldC5ldSI7czo5OiJ1c2VyX2xhbmciO3M6NjoicG9saXNoIjtzOjEzOiJ1c2VyX2JpcnRoZGF5IjtzOjQ6Ijg4ODQiO3M6MTA6InVzZXJfbGV2ZWwiO3M6MToiMCI7czo3OiJ1c2VyX2pyIjtzOjE6IjAiO31pOjI7YTo3OntzOjc6InVzZXJfaWQiO3M6NDoiNzMyOCI7czo4OiJ1c2VybmFtZSI7czoxMToiQWxpY2phIHogTkgiO3M6MTA6InVzZXJfZW1haWwiO3M6MzA6InBvbGEuYW5uYS5taWNoYWxza2FhQGdtYWlsLmNvbSI7czo5OiJ1c2VyX2xhbmciO3M6NjoicG9saXNoIjtzOjEzOiJ1c2VyX2JpcnRoZGF5IjtzOjU6IjEwMzQ2IjtzOjEwOiJ1c2VyX2xldmVsIjtzOjE6IjAiO3M6NzoidXNlcl9qciI7czoxOiIwIjt9aTozO2E6Nzp7czo3OiJ1c2VyX2lkIjtzOjQ6Ijc3OTEiO3M6ODoidXNlcm5hbWUiO3M6NjoiYW1nMTIzIjtzOjEwOiJ1c2VyX2VtYWlsIjtzOjEwOiJvbWZiQG8yLnBsIjtzOjk6InVzZXJfbGFuZyI7czo2OiJwb2xpc2giO3M6MTM6InVzZXJfYmlydGhkYXkiO3M6NToiMTAzNDkiO3M6MTA6InVzZXJfbGV2ZWwiO3M6MToiMCI7czo3OiJ1c2VyX2pyIjtzOjE6IjAiO31pOjQ7YTo3OntzOjc6InVzZXJfaWQiO3M6NDoiNzc4MSI7czo4OiJ1c2VybmFtZSI7czo0OiJCRVRJIjtzOjEwOiJ1c2VyX2VtYWlsIjtzOjMwOiJiZWF0YS5kYW5pZWxza2FAemVzcG9sc2xhc2sucGwiO3M6OToidXNlcl9sYW5nIjtzOjY6InBvbGlzaCI7czoxMzoidXNlcl9iaXJ0aGRheSI7czo0OiItMjQ4IjtzOjEwOiJ1c2VyX2xldmVsIjtzOjE6IjAiO3M6NzoidXNlcl9qciI7czoxOiIwIjt9aTo1O2E6Nzp7czo3OiJ1c2VyX2lkIjtzOjQ6IjUxNDUiO3M6ODoidXNlcm5hbWUiO3M6MTE6ImNhbGF3dHJhd2llIjtzOjEwOiJ1c2VyX2VtYWlsIjtzOjIyOiJhc2lhbWFuaWExOUBpbnRlcmlhLnBsIjtzOjk6InVzZXJfbGFuZyI7czo2OiJwb2xpc2giO3M6MTM6InVzZXJfYmlydGhkYXkiO3M6NDoiNzQyMSI7czoxMDoidXNlcl9sZXZlbCI7czoxOiIwIjtzOjc6InVzZXJfanIiO3M6MToiMCI7fWk6NjthOjc6e3M6NzoidXNlcl9pZCI7czo0OiI0NTA5IjtzOjg6InVzZXJuYW1lIjtzOjU6ImZsb2h4IjtzOjEwOiJ1c2VyX2VtYWlsIjtzOjI5OiJ3YXR5Y2hvd2ljei5rbGF1ZGlhQGdtYWlsLmNvbSI7czo5OiJ1c2VyX2xhbmciO3M6NjoicG9saXNoIjtzOjEzOiJ1c2VyX2JpcnRoZGF5IjtzOjQ6IjkyNTIiO3M6MTA6InVzZXJfbGV2ZWwiO3M6MToiMCI7czo3OiJ1c2VyX2pyIjtzOjE6IjAiO31pOjc7YTo3OntzOjc6InVzZXJfaWQiO3M6NDoiNjI4OCI7czo4OiJ1c2VybmFtZSI7czo1OiJHdeZrYSI7czoxMDoidXNlcl9lbWFpbCI7czoyMToiYWdhdGF3c2tpMjRAZ21haWwuY29tIjtzOjk6InVzZXJfbGFuZyI7czo2OiJwb2xpc2giO3M6MTM6InVzZXJfYmlydGhkYXkiO3M6NDoiOTk4MCI7czoxMDoidXNlcl9sZXZlbCI7czoxOiIwIjtzOjc6InVzZXJfanIiO3M6MToiMCI7fWk6ODthOjc6e3M6NzoidXNlcl9pZCI7czo0OiI3OTAwIjtzOjg6InVzZXJuYW1lIjtzOjY6ImlkYXRodSI7czoxMDoidXNlcl9lbWFpbCI7czoxOToidWxpb3dsYXRpQGdtYWlsLmNvbSI7czo5OiJ1c2VyX2xhbmciO3M6NjoicG9saXNoIjtzOjEzOiJ1c2VyX2JpcnRoZGF5IjtzOjQ6Ijg1MjMiO3M6MTA6InVzZXJfbGV2ZWwiO3M6MToiMCI7czo3OiJ1c2VyX2pyIjtzOjE6IjAiO31pOjk7YTo3OntzOjc6InVzZXJfaWQiO3M6NDoiNzcwOCI7czo4OiJ1c2VybmFtZSI7czo1OiJJcmVuYSI7czoxMDoidXNlcl9lbWFpbCI7czoxOToiaXJtaW5hLnJ1QGdtYWlsLmNvbSI7czo5OiJ1c2VyX2xhbmciO3M6NjoicG9saXNoIjtzOjEzOiJ1c2VyX2JpcnRoZGF5IjtzOjU6Ii00NjI3IjtzOjEwOiJ1c2VyX2xldmVsIjtzOjE6IjAiO3M6NzoidXNlcl9qciI7czoxOiIwIjt9aToxMDthOjc6e3M6NzoidXNlcl9pZCI7czo0OiI3ODIxIjtzOjg6InVzZXJuYW1lIjtzOjk6IktrcmFrZXJzcyI7czoxMDoidXNlcl9lbWFpbCI7czoyMjoiS3Jha2Vyc3MxMjNAaWNsb3VkLmNvbSI7czo5OiJ1c2VyX2xhbmciO3M6NjoicG9saXNoIjtzOjEzOiJ1c2VyX2JpcnRoZGF5IjtzOjQ6Ijk5ODAiO3M6MTA6InVzZXJfbGV2ZWwiO3M6MToiMCI7czo3OiJ1c2VyX2pyIjtzOjE6IjAiO31pOjExO2E6Nzp7czo3OiJ1c2VyX2lkIjtzOjQ6IjUzMTIiO3M6ODoidXNlcm5hbWUiO3M6ODoia29udHJhc3QiO3M6MTA6InVzZXJfZW1haWwiO3M6MTM6InRtYWN1cmFAbzIucGwiO3M6OToidXNlcl9sYW5nIjtzOjY6InBvbGlzaCI7czoxMzoidXNlcl9iaXJ0aGRheSI7czo0OiIyMzEwIjtzOjEwOiJ1c2VyX2xldmVsIjtzOjE6IjAiO3M6NzoidXNlcl9qciI7czoxOiIwIjt9aToxMjthOjc6e3M6NzoidXNlcl9pZCI7czo0OiI2NzE1IjtzOjg6InVzZXJuYW1lIjtzOjEyOiJMb3ZlU3RvcnkwMDciO3M6MTA6InVzZXJfZW1haWwiO3M6MjI6Im5pZXpuYWpvbWEwNDk4QG9uZXQuZXUiO3M6OToidXNlcl9sYW5nIjtzOjY6InBvbGlzaCI7czoxMzoidXNlcl9iaXJ0aGRheSI7czo1OiIxMDM0NCI7czoxMDoidXNlcl9sZXZlbCI7czoxOiIwIjtzOjc6InVzZXJfanIiO3M6MToiMCI7fWk6MTM7YTo3OntzOjc6InVzZXJfaWQiO3M6NDoiMzU2MSI7czo4OiJ1c2VybmFtZSI7czo2OiJsdXNpYWsiO3M6MTA6InVzZXJfZW1haWwiO3M6MTg6Imx1c2lhYWFrQGdtYWlsLmNvbSI7czo5OiJ1c2VyX2xhbmciO3M6NjoicG9saXNoIjtzOjEzOiJ1c2VyX2JpcnRoZGF5IjtzOjQ6IjgxNTMiO3M6MTA6InVzZXJfbGV2ZWwiO3M6MToiMCI7czo3OiJ1c2VyX2pyIjtzOjE6IjAiO31pOjE0O2E6Nzp7czo3OiJ1c2VyX2lkIjtzOjQ6IjcxNTkiO3M6ODoidXNlcm5hbWUiO3M6NDoiTWVyeSI7czoxMDoidXNlcl9lbWFpbCI7czoyMjoibWVyeS5jaWVzbGlrQGdtYWlsLmNvbSI7czo5OiJ1c2VyX2xhbmciO3M6NjoicG9saXNoIjtzOjEzOiJ1c2VyX2JpcnRoZGF5IjtzOjQ6Ijg4ODUiO3M6MTA6InVzZXJfbGV2ZWwiO3M6MToiMCI7czo3OiJ1c2VyX2pyIjtzOjE6IjAiO31pOjE1O2E6Nzp7czo3OiJ1c2VyX2lkIjtzOjQ6IjUwNDYiO3M6ODoidXNlcm5hbWUiO3M6NjoibWlsYWdlIjtzOjEwOiJ1c2VyX2VtYWlsIjtzOjEyOiJtaWxhZ2VAbzIucGwiO3M6OToidXNlcl9sYW5nIjtzOjY6InBvbGlzaCI7czoxMzoidXNlcl9iaXJ0aGRheSI7czo0OiI5NjE0IjtzOjEwOiJ1c2VyX2xldmVsIjtzOjE6IjAiO3M6NzoidXNlcl9qciI7czoxOiIwIjt9aToxNjthOjc6e3M6NzoidXNlcl9pZCI7czo0OiI3NTcyIjtzOjg6InVzZXJuYW1lIjtzOjU6Im5hd2F6IjtzOjEwOiJ1c2VyX2VtYWlsIjtzOjIxOiJiYXNpdHNhamlkOEBnbWFpbC5jb20iO3M6OToidXNlcl9sYW5nIjtzOjY6InBvbGlzaCI7czoxMzoidXNlcl9iaXJ0aGRheSI7czo0OiI3MDYyIjtzOjEwOiJ1c2VyX2xldmVsIjtzOjE6IjAiO3M6NzoidXNlcl9qciI7czoxOiIwIjt9aToxNzthOjc6e3M6NzoidXNlcl9pZCI7czo0OiI3MTk3IjtzOjg6InVzZXJuYW1lIjtzOjU6IlNpc3NpIjtzOjEwOiJ1c2VyX2VtYWlsIjtzOjIyOiJhbm5hX2pha3ViaWtAcG9jenRhLmZtIjtzOjk6InVzZXJfbGFuZyI7czo2OiJwb2xpc2giO3M6MTM6InVzZXJfYmlydGhkYXkiO3M6NDoiNzA2MCI7czoxMDoidXNlcl9sZXZlbCI7czoxOiIwIjtzOjc6InVzZXJfanIiO3M6MToiMCI7fWk6MTg7YTo3OntzOjc6InVzZXJfaWQiO3M6NDoiNjE4NiI7czo4OiJ1c2VybmFtZSI7czo3OiJ0b3NpYWFhIjtzOjEwOiJ1c2VyX2VtYWlsIjtzOjIxOiJpbWllbmF6d2lza28xMTZAd3AucGwiO3M6OToidXNlcl9sYW5nIjtzOjY6InBvbGlzaCI7czoxMzoidXNlcl9iaXJ0aGRheSI7czo0OiI5MjUxIjtzOjEwOiJ1c2VyX2xldmVsIjtzOjE6IjAiO3M6NzoidXNlcl9qciI7czoxOiIwIjt9fX0iO3M6NDoiZGF0YSI7czoxMDoiMTI5OTI1NDY0MyI7czoxMToibGFzdF9yZXN5bmMiO3M6MTA6IjE1OTQ1NTk2MzAiO3M6NjoiYWR2ZXJ0IjtzOjA6IiI7czoxMToiYWR2ZXJ0X2Zvb3QiO3M6MDoiIjtzOjEwOiJ2aWV3X2FkX2J5IjtzOjE6IjEiO3M6MTI6ImFkdmVydF93aWR0aCI7czozOiIxNTAiO3M6MTY6ImFkdmVydF9zZXBhcmF0b3IiO3M6NzoiICZidWxsOyI7czoxODoiYWR2ZXJ0X3NlcGFyYXRvcl9sIjtzOjEyOiI8YnIgLz48aHIgLz4iO3M6MTU6ImFkdl9wZXJzb25fdGltZSI7czoyOiIzMCI7czoyMzoiZ3JvdXBfcmFua19oYWNrX3ZlcnNpb24iO3M6MToiMCI7czoxMjoiZGlzYWJsZV90eXBlIjtzOjA6IiI7czoxNToicmhfd2l0aG91dF9kYXlzIjtzOjE6IjMiO3M6MTI6InJoX21heF9wb3N0cyI7czo0OiIxMDAwIjtzOjE1OiJwdWJsaWNfY2F0ZWdvcnkiO3M6MDoiIjtzOjE1OiJ4c19hdXRvX2NvbXBpbGUiO3M6MToiMSI7czoxNzoieHNfYXV0b19yZWNvbXBpbGUiO3M6MToiMSI7czoxMjoieHNfdXNlX2NhY2hlIjtzOjE6IjEiO3M6NjoieHNfcGhwIjtzOjM6InBocCI7czoxNToieHNfZGVmX3RlbXBsYXRlIjtzOjk6InN1YlNpbHZlciI7czoxNzoieHNfY2hlY2tfc3dpdGNoZXMiO3M6MToiMSI7czoxNjoieHNfd2Fybl9pbmNsdWRlcyI7czoxOiIxIjtzOjExOiJ4c19mdHBfaG9zdCI7czowOiIiO3M6MTI6InhzX2Z0cF9sb2dpbiI7czowOiIiO3M6MTE6InhzX2Z0cF9wYXRoIjtzOjA6IiI7czoxODoieHNfZG93bmxvYWRzX2NvdW50IjtzOjE6IjAiO3M6MjA6InhzX2Rvd25sb2Fkc19kZWZhdWx0IjtzOjE6IjAiO3M6MTA6InhzX3Nob3duYXYiO3M6MToiMSI7czoxNjoieHNfdGVtcGxhdGVfdGltZSI7czoxMDoiMTcxNDIxNTMwNyI7czoxMDoieHNfdmVyc2lvbiI7czoxOiI3IjtzOjE2OiJkYl9iYWNrdXBfZW5hYmxlIjtzOjE6IjAiO3M6MTY6ImRiX2JhY2t1cF9jb3BpZXMiO3M6MToiMiI7czoxNjoiZGJfYmFja3VwX3NlYXJjaCI7czoxOiIwIjtzOjEyOiJkYl9iYWNrdXBfcmgiO3M6MToiMCI7czoxNDoiZGJfYmFja3VwX3RpbWUiO3M6MTA6IjEzMjM3Njc1MzAiO30=')); ?> :: Log in
Warning ! cookie path is empty! Check in in the Admin Control Panel or set it in the PhpMyAdmin table: prefix_config - cookie_path row
 Forum Index


FAQFAQ  SearchSearch  MemberlistMemberlist  UsergroupsUsergroups
RegisterRegister  Log inLog in
Please enter your username and password to log in.
 
Username:
Password:
Log me on automatically each visit:
I forgot my password

Powered by phpBB modified by Przemo © 2003 phpBB Group