dm_tools大谋工具箱https://www.imlgm.com/482.html自动标签、图片本地化等小工具set.phpinclude.php1大谋76453189@qq.comhttps://www.imlgm.com/1517401.32014-08-272017-08-1205.2
dm_tools/articleimg/dm_tools/autotags/dm_tools/codeMirror/dm_tools/plugin/remoteimage/dm_tools/plugin/tinymcebuttons/dm_tools/plugin/uebuttons/images/dm_tools/plugin/uebuttons/dm_tools/plugin/dm_tools/remoteimg/dm_tools/thumb/dm_tools/action.phpPD9waHANCnJlcXVpcmUgJy4uLy4uLy4uL3piX3N5c3RlbS9mdW5jdGlvbi9jX3N5c3RlbV9iYXNlLnBocCc7DQpyZXF1aXJlICcuLi8uLi8uLi96Yl9zeXN0ZW0vZnVuY3Rpb24vY19zeXN0ZW1fYWRtaW4ucGhwJzsNCg0KJHpicC0+TG9hZCgpOw0KJGFjdGlvbj0ncm9vdCc7DQppZiAoISR6YnAtPkNoZWNrUmlnaHRzKCRhY3Rpb24pKSB7JHpicC0+U2hvd0Vycm9yKDYpO2RpZSgpO30NCmlmICghJHpicC0+Q2hlY2tQbHVnaW4oJGRtX3Rvb2xzWyduYW1lJ10pKSB7JHpicC0+U2hvd0Vycm9yKDQ4KTtkaWUoKTt9DQoNCmlmKCRfR0VUWyd0eXBlJ10gPT0gImRlbHRodW1iIil7DQoJZG1fdG9vbHNfZGVsZXRlRGlyKCRibG9ncGF0aC4ndGh1bWJzLycpOw0KCSR6YnAtPlNldEhpbnQoJ2dvb2QnLCfnvKnnlaXlm77nvJPlrZjlt7LooqvmuIXnkIYnKTsNCglSZWRpcmVjdCgnc2V0LnBocCcpOw0KfQ0KPz4=dm_tools/articleimg/dm_tools_articleimg.phpPD9waHAKZnVuY3Rpb24gZG1fdG9vbHNfYXJ0aWNsZWltZ19tYWluKCYkdGVtcGxhdGUpewoJZ2xvYmFsICR6YnAsJGRtX3Rvb2xzOwoJCglpZiAoJHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+ZG1fdG9vbHNfYXJ0aWNsZWltZ194dGl0bGUpewoJJGFydGljbGUgPSAkdGVtcGxhdGUtPkdldFRhZ3MoJ2FydGljbGUnKTsKCQkvLyBBcmd1bWVudHMKCQkvLwkkdGhpcy0+Z2V0X3Byb3BlcnRpZXMoKTsJCQkKCQkJJG51bSA9IHByZWdfbWF0Y2hfYWxsKCAnLzxpbWcuKj8+L2knLCAkYXJ0aWNsZS0+Q29udGVudCwgJG1hdGNoZXMgKTsKCQkJCgkJCS8vIE9uZSBpbWFnZQoJCQlpZiggMSA9PSAkbnVtICkgewoJCQkJCgkJCQkvLyBHZXQgb3JpZ2luYWwgdGl0bGUgYW5kIGFsdAoJCQkJcHJlZ19tYXRjaCggJy88aW1nLio/dGl0bGU9W1wiXCddKC4qPylbXCJcJ10uKj8+LycsICRhcnRpY2xlLT5Db250ZW50LCAkbWF0Y2hfdGl0bGUgKTsKCQkJCSR0aXRsZSA9IGlzc2V0KCAkbWF0Y2hfdGl0bGVbMV0gKSA/ICRtYXRjaF90aXRsZVsxXSA6ICcnOwkJCQkKCQkJCQoJCQkJLy8gQ2xlYXIgdGl0bGUgYW5kIGFsdAoJCQkJJGFydGljbGUtPkNvbnRlbnQgPSBwcmVnX3JlcGxhY2UoICcvKDxpbWcuKj8pIHRpdGxlPVsiXCddLio/WyJcJ10vaScsICckezF9JywgJGFydGljbGUtPkNvbnRlbnQgKTsKCQkJCQoJCQkJLy8gUmVwbGFjZQoJCQkvLwkkYXJ0aWNsZS0+Q29udGVudCA9IHByZWdfcmVwbGFjZSggJy88aW1nL2knLCAnPGltZycgLiAnIHRpdGxlPSInIC4kdGl0bGUuJyAnLiRhcnRpY2xlLT5UaXRsZSAuJyAnLiRhcnRpY2xlLT5DYXRlZ29yeS0+TmFtZSAuICAnIiBhbHQ9IicgLiAkYWx0LicgJyAuICAkYXJ0aWNsZS0+VGl0bGUuJyAnIC4kYXJ0aWNsZS0+Q2F0ZWdvcnktPk5hbWUgLiciJywgJGFydGljbGUtPkNvbnRlbnQsIDEgKTsKCQkJaWYoJHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+ZG1fdG9vbHNfYXJ0aWNsZWltZ194dGl0bGUgPT0gJzEnKXsKCQkJCQkJaWYoJGFydGljbGUtPlR5cGU9PTApewogICAgICAgICAgICAkYXJ0aWNsZS0+Q29udGVudCA9IHByZWdfcmVwbGFjZSggJy88aW1nL2knLCAnPGltZycgLiAnIHRpdGxlPSInLiRhcnRpY2xlLT5UaXRsZSAuJyAnLiRhcnRpY2xlLT5DYXRlZ29yeS0+TmFtZSAuICAnIicsICRhcnRpY2xlLT5Db250ZW50LCAxICk7CiAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAkYXJ0aWNsZS0+Q29udGVudCA9IHByZWdfcmVwbGFjZSggJy88aW1nL2knLCAnPGltZycgLiAnIHRpdGxlPSInLiRhcnRpY2xlLT5UaXRsZSAuJyInLCAkYXJ0aWNsZS0+Q29udGVudCwgMSApOwogICAgICAgICAgICB9CgkJCQoJCQkKCQkJfWVsc2V7CgkJCQoJCQkJCQlpZigkYXJ0aWNsZS0+VHlwZT09MCl7CiAgICAgICAgICAgICRhcnRpY2xlLT5Db250ZW50ID0gcHJlZ19yZXBsYWNlKCAnLzxpbWcvaScsICc8aW1nJyAuICcgdGl0bGU9IicuJHRpdGxlLicgJy4kYXJ0aWNsZS0+VGl0bGUgLicgJy4kYXJ0aWNsZS0+Q2F0ZWdvcnktPk5hbWUgLiAgJyInLCAkYXJ0aWNsZS0+Q29udGVudCwgMSApOwogICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgJGFydGljbGUtPkNvbnRlbnQgPSBwcmVnX3JlcGxhY2UoICcvPGltZy9pJywgJzxpbWcnIC4gJyB0aXRsZT0iJy4kdGl0bGUuJyAnLiRhcnRpY2xlLT5UaXRsZSAuJyInLCAkYXJ0aWNsZS0+Q29udGVudCwgMSApOwogICAgICAgICAgICB9CiAgICAgICB9CgkJCX0KCQkJCgkJCS8vIG11bHRpIGltYWdlcyBhZGQgc3VmZml4CgkJCWlmKCAxIDwgJG51bSApIHsKCQkJCSR0ZW1wID0gJypAQCMjQEAqJzsKCQkJCWZvciggJGkgPSAxOyAkaSA8PSAkbnVtOyAkaSsrICkgewoJCQkJCQoJCQkJCS8vIEdldCBvcmlnaW5hbCB0aXRsZSBhbmQgYWx0CgkJCQkJcHJlZ19tYXRjaCggJy88aW1nLio/Pi8nLCAkYXJ0aWNsZS0+Q29udGVudCwgJG1hdGNoX2ltZyApOwoJCQkJCSRpbWcgPSBpc3NldCggJG1hdGNoX2ltZ1swXSApID8gJG1hdGNoX2ltZ1swXSA6ICcnOwoJCQkJCXByZWdfbWF0Y2goICcvPGltZy4qP3RpdGxlPVtcIlwnXSguKj8pW1wiXCddLio/Pi8nLCAkaW1nLCAkbWF0Y2hfdGl0bGUgKTsKCQkJCQkkdGl0bGUgPSBpc3NldCggJG1hdGNoX3RpdGxlWzFdICkgPyAkbWF0Y2hfdGl0bGVbMV0gOiAnJzsJCQkJCgkJCQkJCgkJCQkJLy8gU2V0IHN1ZmZpeAoJCQkJCSR0aXRsZV9zdWZmaXggPSAgZG1fdG9vbHNfYXJ0aWNsZWltZ190aXRsZV9zdWZmaXgoICRpICkgOwoJCQkJCQoJCQkJCS8vIENsZWFyIHRpdGxlIGFuZCBhbHQKCQkJCQlpZiggJHRpdGxlICkKCQkJCQkJJGFydGljbGUtPkNvbnRlbnQgPSBwcmVnX3JlcGxhY2UoICcvKDxpbWcuKj8pIHRpdGxlPVsiXCddLio/WyJcJ10vaScsICckezF9JywgJGFydGljbGUtPkNvbnRlbnQsIDEgKTsKCQkJCQkKCQkJCQkvLyBSZXBsYWNlIHRvIHRlbXAKCQkJLy8JCSRyZXBsYWNlID0gJzwnIC4gJHRlbXAgLiAnIHRpdGxlPSInIC4gJHRpdGxlLicgJyAuICRhcnRpY2xlLT5UaXRsZSAuJyAnLiRhcnRpY2xlLT5DYXRlZ29yeS0+TmFtZSAgLiAkdGl0bGVfc3VmZml4IC4gJyIgYWx0PSInIC4gICRhbHQuJyAnLiAkYXJ0aWNsZS0+VGl0bGUgLicgJy4kYXJ0aWNsZS0+Q2F0ZWdvcnktPk5hbWUgICAuICRhbHRfc3VmZml4IC4gJyInOwoJCQkKCQkJaWYoJHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+ZG1fdG9vbHNfYXJ0aWNsZWltZ194dGl0bGUgPT0gJzEnKXsKCQkJaWYoJGFydGljbGUtPlR5cGU9PTApewoJCQkJCSRyZXBsYWNlID0gJzwnIC4gJHRlbXAgLiAnIHRpdGxlPSInIC4gJGFydGljbGUtPlRpdGxlIC4nICcuJGFydGljbGUtPkNhdGVnb3J5LT5OYW1lICAuICR0aXRsZV9zdWZmaXggLiAnIic7CQkJCQkKCQkJCX1lbHNlewoJCQkJCSRyZXBsYWNlID0gJzwnIC4gJHRlbXAgLiAnIHRpdGxlPSInIC4gJGFydGljbGUtPlRpdGxlIC4nICcuICR0aXRsZV9zdWZmaXggLiAnIic7CQkJCQkKCQkJCX0KCQkJCX1lbHNlewoJCQlpZigkYXJ0aWNsZS0+VHlwZT09MCl7CgkJCQkJJHJlcGxhY2UgPSAnPCcgLiAkdGVtcCAuICcgdGl0bGU9IicuJHRpdGxlLicgJyAuICRhcnRpY2xlLT5UaXRsZSAuJyAnLiRhcnRpY2xlLT5DYXRlZ29yeS0+TmFtZSAgLiAkdGl0bGVfc3VmZml4IC4gJyInOwkJCQkJCgkJCQl9ZWxzZXsKCQkJCQkkcmVwbGFjZSA9ICc8JyAuICR0ZW1wIC4gJyB0aXRsZT0iJy4kdGl0bGUuJyAnIC4gJGFydGljbGUtPlRpdGxlIC4nICcuICR0aXRsZV9zdWZmaXggLiAnIic7CQkJCQkKCQkJCX0KCQkJCX0KCQkJCQoJCQkJCgkJCQkJJGFydGljbGUtPkNvbnRlbnQgPSBwcmVnX3JlcGxhY2UoICcvPGltZy9pJywgJHJlcGxhY2UsICRhcnRpY2xlLT5Db250ZW50LCAxICk7CgkJCQl9CgkJCQkKCQkJCSRhcnRpY2xlLT5Db250ZW50ID0gc3RyX3JlcGxhY2UoICR0ZW1wLCAnaW1nJywgJGFydGljbGUtPkNvbnRlbnQgKTsJCgkJCX0KCn0KCgoJaWYgKCR6YnAtPkNvbmZpZygkZG1fdG9vbHNbJ25hbWUnXSktPmRtX3Rvb2xzX2FydGljbGVpbWdfeGFsdCl7CgkkYXJ0aWNsZSA9ICR0ZW1wbGF0ZS0+R2V0VGFncygnYXJ0aWNsZScpOwoJCS8vIEFyZ3VtZW50cwoJCS8vCSR0aGlzLT5nZXRfcHJvcGVydGllcygpOwkJCQoJCQkkbnVtID0gcHJlZ19tYXRjaF9hbGwoICcvPGltZy4qPz4vaScsICRhcnRpY2xlLT5Db250ZW50LCAkbWF0Y2hlcyApOwoJCQkKCQkJLy8gT25lIGltYWdlCgkJCWlmKCAxID09ICRudW0gKSB7CgkJCQkKCQkJCS8vIEdldCBvcmlnaW5hbCB0aXRsZSBhbmQgYWx0CgkJCQlwcmVnX21hdGNoKCAnLzxpbWcuKj9hbHQ9W1wiXCddKC4qPylbXCJcJ10uKj8+LycsICRhcnRpY2xlLT5Db250ZW50LCAkbWF0Y2hfYWx0ICk7CgkJCQkkYWx0ID0gaXNzZXQoICRtYXRjaF9hbHRbMV0gKSA/ICRtYXRjaF9hbHRbMV0gOiAnJzsKCQkJCQoJCQkJLy8gQ2xlYXIgdGl0bGUgYW5kIGFsdAoJCQkJJGFydGljbGUtPkNvbnRlbnQgPSBwcmVnX3JlcGxhY2UoICcvKDxpbWcuKj8pIGFsdD1bIlwnXS4qP1siXCddL2knLCckezF9JywgJGFydGljbGUtPkNvbnRlbnQgKTsJCQkJCgkJCQkKCQkJCS8vIFJlcGxhY2UKCQkJLy8JJGFydGljbGUtPkNvbnRlbnQgPSBwcmVnX3JlcGxhY2UoICcvPGltZy9pJywgJzxpbWcnIC4gJyB0aXRsZT0iJyAuJHRpdGxlLicgJy4kYXJ0aWNsZS0+VGl0bGUgLicgJy4kYXJ0aWNsZS0+Q2F0ZWdvcnktPk5hbWUgLiAgJyIgYWx0PSInIC4gJGFsdC4nICcgLiAgJGFydGljbGUtPlRpdGxlLicgJyAuJGFydGljbGUtPkNhdGVnb3J5LT5OYW1lIC4nIicsICRhcnRpY2xlLT5Db250ZW50LCAxICk7CgkJCWlmKCR6YnAtPkNvbmZpZygkZG1fdG9vbHNbJ25hbWUnXSktPmRtX3Rvb2xzX2FydGljbGVpbWdfeGFsdCA9PSAnMScpewoJCQkJCQlpZigkYXJ0aWNsZS0+VHlwZT09MCl7CiAgICAgICAgICAgICRhcnRpY2xlLT5Db250ZW50ID0gcHJlZ19yZXBsYWNlKCAnLzxpbWcvaScsICc8aW1nJyAuICcgYWx0PSInIC4gICRhcnRpY2xlLT5UaXRsZS4nICcgLiRhcnRpY2xlLT5DYXRlZ29yeS0+TmFtZSAuJyInLCAkYXJ0aWNsZS0+Q29udGVudCwgMSApOwogICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgJGFydGljbGUtPkNvbnRlbnQgPSBwcmVnX3JlcGxhY2UoICcvPGltZy9pJywgJzxpbWcnIC4gJyBhbHQ9IicgLiAgJGFydGljbGUtPlRpdGxlLiciJywgJGFydGljbGUtPkNvbnRlbnQsIDEgKTsKICAgICAgICAgICAgfQoJCQkKCQkJCgkJCX1lbHNlewoJCQkKCQkJCQkJaWYoJGFydGljbGUtPlR5cGU9PTApewogICAgICAgICAgICAkYXJ0aWNsZS0+Q29udGVudCA9IHByZWdfcmVwbGFjZSggJy88aW1nL2knLCAnPGltZycgLiAnIGFsdD0iJyAuICRhbHQuJyAnIC4gICRhcnRpY2xlLT5UaXRsZS4nICcgLiRhcnRpY2xlLT5DYXRlZ29yeS0+TmFtZSAuJyInLCAkYXJ0aWNsZS0+Q29udGVudCwgMSApOwogICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgJGFydGljbGUtPkNvbnRlbnQgPSBwcmVnX3JlcGxhY2UoICcvPGltZy9pJywgJzxpbWcnIC4gJyBhbHQ9IicgLiAkYWx0LicgJyAuICAkYXJ0aWNsZS0+VGl0bGUuJyInLCAkYXJ0aWNsZS0+Q29udGVudCwgMSApOwogICAgICAgICAgICB9CiAgICAgICB9CgkJCX0KCQkJCgkJCS8vIG11bHRpIGltYWdlcyBhZGQgc3VmZml4CgkJCWlmKCAxIDwgJG51bSApIHsKCQkJCSR0ZW1wID0gJypAQCMjQEAqJzsKCQkJCWZvciggJGkgPSAxOyAkaSA8PSAkbnVtOyAkaSsrICkgewoJCQkJCQoJCQkJCS8vIEdldCBvcmlnaW5hbCB0aXRsZSBhbmQgYWx0CgkJCQkJcHJlZ19tYXRjaCggJy88aW1nLio/Pi8nLCAkYXJ0aWNsZS0+Q29udGVudCwgJG1hdGNoX2ltZyApOwoJCQkJCSRpbWcgPSBpc3NldCggJG1hdGNoX2ltZ1swXSApID8gJG1hdGNoX2ltZ1swXSA6ICcnOwoJCQkJCXByZWdfbWF0Y2goICcvPGltZy4qP2FsdD1bXCJcJ10oLio/KVtcIlwnXS4qPz4vJywgJGltZywgJG1hdGNoX2FsdCApOwoJCQkJCSRhbHQgPSBpc3NldCggJG1hdGNoX2FsdFsxXSApID8gJG1hdGNoX2FsdFsxXSA6ICcnOwkJCQoJCQkJCQoJCQkJCS8vIFNldCBzdWZmaXgKCQkJCQkkYWx0X3N1ZmZpeCA9ICBkbV90b29sc19hcnRpY2xlaW1nX3RpdGxlX3N1ZmZpeCggJGkgKSA7CgkJCQkJCgkJCQkJLy8gQ2xlYXIgdGl0bGUgYW5kIGFsdAoJCQkJCWlmKCAkYWx0ICkKCQkJCQkJJGFydGljbGUtPkNvbnRlbnQgPSBwcmVnX3JlcGxhY2UoICcvKDxpbWcuKj8pIGFsdD1bIlwnXS4qP1siXCddL2knLCckezF9JywgJGFydGljbGUtPkNvbnRlbnQsIDEgKTsJCQkJCgkJCQkJCgkJCQkJLy8gUmVwbGFjZSB0byB0ZW1wCgkJCS8vCQkkcmVwbGFjZSA9ICc8JyAuICR0ZW1wIC4gJyB0aXRsZT0iJyAuICR0aXRsZS4nICcgLiAkYXJ0aWNsZS0+VGl0bGUgLicgJy4kYXJ0aWNsZS0+Q2F0ZWdvcnktPk5hbWUgIC4gJHRpdGxlX3N1ZmZpeCAuICciIGFsdD0iJyAuICAkYWx0LicgJy4gJGFydGljbGUtPlRpdGxlIC4nICcuJGFydGljbGUtPkNhdGVnb3J5LT5OYW1lICAgLiAkYWx0X3N1ZmZpeCAuICciJzsKCQkJCgkJCWlmKCR6YnAtPkNvbmZpZygkZG1fdG9vbHNbJ25hbWUnXSktPmRtX3Rvb2xzX2FydGljbGVpbWdfeGFsdCA9PSAnMicpewoJCQlpZigkYXJ0aWNsZS0+VHlwZT09MCl7CgkJCQkJJHJlcGxhY2UgPSAnPCcgLiAkdGVtcCAuICcgYWx0PSInLiAkYXJ0aWNsZS0+VGl0bGUgLicgJy4kYXJ0aWNsZS0+Q2F0ZWdvcnktPk5hbWUgICAuICRhbHRfc3VmZml4IC4gJyInOwkJCQkJCgkJCQl9ZWxzZXsKCQkJCQkkcmVwbGFjZSA9ICc8JyAuICR0ZW1wIC4gJyBhbHQ9IicuICRhcnRpY2xlLT5UaXRsZSAuJyAnLiRhcnRpY2xlLT5DYXRlZ29yeS0+TmFtZSAgIC4gJGFsdF9zdWZmaXggLiAnIic7CQkJCQkKCQkJCX0KCQkJCX1lbHNlewoJCQlpZigkYXJ0aWNsZS0+VHlwZT09MCl7CgkJCQkJJHJlcGxhY2UgPSAnPCcgLiAkdGVtcCAuICcgYWx0PSInIC4gICRhbHQuJyAnLiAkYXJ0aWNsZS0+VGl0bGUgLicgJy4kYXJ0aWNsZS0+Q2F0ZWdvcnktPk5hbWUgICAuICRhbHRfc3VmZml4IC4gJyInOwkJCQkJCgkJCQl9ZWxzZXsKCQkJCQkkcmVwbGFjZSA9ICc8JyAuICR0ZW1wIC4gJyBhbHQ9IicgLiAgJGFsdC4nICcuICRhcnRpY2xlLT5UaXRsZSAuJyAnLiRhcnRpY2xlLT5DYXRlZ29yeS0+TmFtZSAgIC4gJGFsdF9zdWZmaXggLiAnIic7CQkJCQkKCQkJCX0KCQkJCX0KCQkJCQoJCQkJCgkJCQkJJGFydGljbGUtPkNvbnRlbnQgPSBwcmVnX3JlcGxhY2UoICcvPGltZy9pJywgJHJlcGxhY2UsICRhcnRpY2xlLT5Db250ZW50LCAxICk7CgkJCQl9CgkJCQkKCQkJCSRhcnRpY2xlLT5Db250ZW50ID0gc3RyX3JlcGxhY2UoICR0ZW1wLCAnaW1nJywgJGFydGljbGUtPkNvbnRlbnQgKTsJCgkJCX0KCn0KfQoKCQoJLyoqCgkgKiBUaXRsZSBzdWZmaXgKCSAqLwoJZnVuY3Rpb24gZG1fdG9vbHNfYXJ0aWNsZWltZ190aXRsZV9zdWZmaXgoICRpICkgewoJCWdsb2JhbCAkemJwLCRkbV90b29sczsKCgkJaWYoICR6YnAtPkNvbmZpZygkZG1fdG9vbHNbJ25hbWUnXSktPmRtX3Rvb2xzX2FydGljbGVpbWdfbGFzdHR4dCApIHsKCQkJJHN1ZmZpeCA9IHN0cl9yZXBsYWNlKCAnJWQnLCAkaSwgJHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+ZG1fdG9vbHNfYXJ0aWNsZWltZ19sYXN0dHh0ICk7CgkJCXJldHVybiAnICcgLiB0cmltKCAkc3VmZml4ICk7CgkJfQoJCXJldHVybiAnJzsKCX0KCgoKPz4=dm_tools/autotags/_old_do.phpPD9waHAKcmVxdWlyZSAnLi4vLi4vLi4vLi4vemJfc3lzdGVtL2Z1bmN0aW9uL2Nfc3lzdGVtX2Jhc2UucGhwJzsKJHpicC0+TG9hZCgpOwoKaWYgKCEkemJwLT5DaGVja1JpZ2h0cygnQXJ0aWNsZVBzdCcpKSB7JHpicC0+U2hvd0Vycm9yKDYpO2RpZSgpO30KaWYgKCEkemJwLT5DaGVja1BsdWdpbigkZG1fdG9vbHNbJ25hbWUnXSkpIHskemJwLT5TaG93RXJyb3IoNDgpO2RpZSgpO30KCi8qKgogKiBEWuWcqOe6v+S4reaWh+WIhuivjQogKiBAcGFyYW0gJHRpdGxlIHN0cmluZyDov5vooYzliIbor43nmoTmoIfpopgKICogQHBhcmFtICRjb250ZW50IHN0cmluZyDov5vooYzliIbor43nmoTlhoXlrrkKICogQHBhcmFtICRlbmNvZGUgc3RyaW5nIEFQSei/lOWbnueahOaVsOaNrue8lueggQogKiBAcmV0dXJuICBhcnJheSDlvpfliLDnmoTlhbPplK7or43mlbDnu4QKICovCiR0aXRsZSA9IHJhd3VybGVuY29kZShzdHJpcF90YWdzKEdldFZhcnMoJ3RpdGxlJywgJ1BPU1QnKSkpOwokY29udGVudCA9IHJhd3VybGVuY29kZShzdHJpcF90YWdzKEdldFZhcnMoJ2NvbnRlbnQnLCAnUE9TVCcpKSk7CiRlbmNvZGUgPSAndXRmLTgnOwokdXJsID0gImh0dHA6Ly9rZXl3b3JkLmRpc2N1ei5jb20vcmVsYXRlZF9rdy5odG1sP3RpdGxlPSR0aXRsZSZjb250ZW50PSRjb250ZW50Jmljcz11dGYtOCZvY3M9JGVuY29kZSI7CgokYWpheCA9IE5ldHdvcms6OkNyZWF0ZSgpOwokYWpheC0+b3BlbignR0VUJywgJHVybCk7CiRhamF4LT5zZXRSZXF1ZXN0SGVhZGVyKCdVc2VyLUFnZW50JywgJ0JhaWR1c3BpZGVyKygraHR0cDovL3d3dy5iYWlkdS5jb20vc2VhcmNoL3NwaWRlci5odG0pJyk7CiRhamF4LT5zZW5kKCk7CgokZGF0YSA9ICRhamF4LT5yZXNwb25zZVRleHQ7CmlmKGNvdW50KCRkYXRhKSA+IDApIHsKCSRwYXJzZXIgPSB4bWxfcGFyc2VyX2NyZWF0ZSgpOwoJeG1sX3BhcnNlcl9zZXRfb3B0aW9uKCRwYXJzZXIsIFhNTF9PUFRJT05fQ0FTRV9GT0xESU5HLCAwKTsKCXhtbF9wYXJzZXJfc2V0X29wdGlvbigkcGFyc2VyLCBYTUxfT1BUSU9OX1NLSVBfV0hJVEUsIDEpOwoJeG1sX3BhcnNlX2ludG9fc3RydWN0KCRwYXJzZXIsICRkYXRhLCAkdmFsdWVzLCAkaW5kZXgpOwoJeG1sX3BhcnNlcl9mcmVlKCRwYXJzZXIpOwoKCSRrd3MgPSBhcnJheSgpOwoJZm9yZWFjaCgkdmFsdWVzIGFzICR2YWx1ZWFycmF5KSB7CgkJaWYoJHZhbHVlYXJyYXlbJ3RhZyddID09ICdrdycgfHwgJHZhbHVlYXJyYXlbJ3RhZyddID09ICdla3cnKSB7CgkJCQkka3dzW10gPSB0cmltKCR2YWx1ZWFycmF5Wyd2YWx1ZSddKTsKCQl9Cgl9CgoJJHJldHVybiA9ICcnOwoJaWYoJGt3cykgewoJCWZvcmVhY2goJGt3cyBhcyAka3cpIHsKCQkJJGt3ID0gZG1fdG9vbHNfYXV0b3RhZ3NfY2hhcnMoJGt3KTsKCQkJJHJldHVybiAuPSAka3cuJywnOwoJCX0KCQkkcmV0dXJuID0gdHJpbSgkcmV0dXJuLCcsJyk7Cgl9CgkkYXJyYXk9YXJyYXkoKTsKCSRhcnJheVsncmVzdWx0J109JHJldHVybjsKCWVjaG8ganNvbl9lbmNvZGUoJGFycmF5KTsKfQoKZnVuY3Rpb24gZG1fdG9vbHNfYXV0b3RhZ3NfY2hhcnMoJHN0cmluZykgewoJaWYoaXNfYXJyYXkoJHN0cmluZykpIHsKCQlmb3JlYWNoKCRzdHJpbmcgYXMgJGtleSA9PiAkdmFsKSB7CgkJJHN0cmluZ1ska2V5XSA9IGRtX3Rvb2xzX2F1dG90YWdzX2NoYXJzKCR2YWwpOwoJCX0KCX0gZWxzZSB7CgkJJHN0cmluZyA9IHN0cl9yZXBsYWNlKGFycmF5KCcmJywgJyInLCAnPCcsICc+JyksCgkJYXJyYXkoJyZhbXA7JywgJyZxdW90OycsICcmbHQ7JywgJyZndDsnKSwgJHN0cmluZyk7CgkJaWYoc3RycG9zKCRzdHJpbmcsICcmIycpICE9PSBmYWxzZSkgewoJCQkkc3RyaW5nID0gcHJlZ19yZXBsYWNlKCcvJigoIyhcZHszLDV9fHhbYS1mQS1GMC05XXs0fSkpOykvJywnJlxcMScsICRzdHJpbmcpOwoJCX0KCX0KCXJldHVybiAkc3RyaW5nOwp9CiA=dm_tools/autotags/baiduwords.phpPD9waHAKcmVxdWlyZSAnLi4vLi4vLi4vLi4vemJfc3lzdGVtL2Z1bmN0aW9uL2Nfc3lzdGVtX2Jhc2UucGhwJzsKJHpicC0+TG9hZCgpOwoKaWYgKCEkemJwLT5DaGVja1JpZ2h0cygnQXJ0aWNsZVBzdCcpKSB7JHpicC0+U2hvd0Vycm9yKDYpO2RpZSgpO30KaWYgKCEkemJwLT5DaGVja1BsdWdpbigkZG1fdG9vbHNbJ25hbWUnXSkpIHskemJwLT5TaG93RXJyb3IoNDgpO2RpZSgpO30KLyoqCiAqIERa5Zyo57q/5Lit5paH5YiG6K+NCiAqLwokdGl0bGUgPSBHZXRWYXJzKCd0aXRsZScsICdQT1NUJyk7CiR0aXRsZSA9IHN0cmlwX3RhZ3MoJHRpdGxlKTsKJHRpdGxlID0gcmF3dXJsZW5jb2RlKCR0aXRsZSk7CiRlbmNvZGUgPSAndXRmLTgnOwokY29udGVudCA9IEdldFZhcnMoJ2NvbnRlbnQnLCAnUE9TVCcpOwokY29udGVudCA9IHN0cmlwX3RhZ3MoJGNvbnRlbnQpOwovLyRjb250ZW50ID0gcHJlZ19yZXBsYWNlKCIvXFsuKz9cXS9VIiwgJycsICRjb250ZW50KTsgCi8vJGNvbnRlbnQgPSBwcmVnX3JlcGxhY2UoJy9cVy8nLCcnLCRjb250ZW50KTsKLy/lnKjnur/liIbor43mnI3liqHmnInplb/luqbpmZDliLYKaWYoc3RybGVuKCRjb250ZW50KT4yNDAwKXsKJGNvbnRlbnQgPSAgbWJfc3Vic3RyKCRjb250ZW50LCAwLCA4MDAsICRlbmNvZGUpOwp9CiRjb250ZW50ID0gcmF3dXJsZW5jb2RlKCRjb250ZW50KTsKCiR1cmwgPSAnaHR0cDovL2tleXdvcmQuZGlzY3V6LmNvbS9yZWxhdGVkX2t3Lmh0bWw/dGl0bGU9Jy4kdGl0bGUuJyZjb250ZW50PScuJGNvbnRlbnQuJyZpY3M9Jy4kZW5jb2RlLicmb2NzPScuJGVuY29kZTsKCiR4bWwgPSBHZXRIdHRwQ29udGVudCgkdXJsKTsKaWYoY291bnQoJHhtbCkgPiAwKSB7CgkkcGFyc2VyID0geG1sX3BhcnNlcl9jcmVhdGUoKTsKCXhtbF9wYXJzZXJfc2V0X29wdGlvbigkcGFyc2VyLCBYTUxfT1BUSU9OX0NBU0VfRk9MRElORywgMCk7Cgl4bWxfcGFyc2VyX3NldF9vcHRpb24oJHBhcnNlciwgWE1MX09QVElPTl9TS0lQX1dISVRFLCAxKTsKCXhtbF9wYXJzZV9pbnRvX3N0cnVjdCgkcGFyc2VyLCAkeG1sLCAkdmFsdWVfYXJyLCAkaW5kZXhfYXJyKTsKCXhtbF9wYXJzZXJfZnJlZSgkcGFyc2VyKTsKCgkka3dzID0gYXJyYXkoKTsKCWZvcmVhY2goJHZhbHVlX2FyciBhcyAkdmFsdWVhcnJheSkgewoJCWlmKCR2YWx1ZWFycmF5Wyd0YWcnXSA9PSAna3cnIHx8ICR2YWx1ZWFycmF5Wyd0YWcnXSA9PSAnZWt3JykgewoJCQkka3dzW10gPSB0cmltKCR2YWx1ZWFycmF5Wyd2YWx1ZSddKTsKCQl9Cgl9CgoJJHRhZ19lY2hvID0gJyc7CglpZigka3dzKSB7CgkJZm9yZWFjaCgka3dzIGFzICRrdykgewoJCQkkdGFnX2VjaG8gLj0gJGt3LicsJzsKCQl9CgkJJHRhZ19lY2hvID0gdHJpbSgkdGFnX2VjaG8sJywnKTsKCX0KCWVjaG8ganNvbl9lbmNvZGUoJHRhZ19lY2hvKTsKfWVsc2V7CgllY2hvIGpzb25fZW5jb2RlKCfojrflj5Z4bWzlpLHotKUnLiR4bWwpOwp9dm_tools/autotags/gettags.phpPD9waHAKcmVxdWlyZSAnLi4vLi4vLi4vLi4vemJfc3lzdGVtL2Z1bmN0aW9uL2Nfc3lzdGVtX2Jhc2UucGhwJzsKJHpicC0+TG9hZCgpOwoKaWYgKCEkemJwLT5DaGVja1JpZ2h0cygnQXJ0aWNsZVBzdCcpKSB7JHpicC0+U2hvd0Vycm9yKDYpO2RpZSgpO30KaWYgKCEkemJwLT5DaGVja1BsdWdpbigkZG1fdG9vbHNbJ25hbWUnXSkpIHskemJwLT5TaG93RXJyb3IoNDgpO2RpZSgpO30KLyoqCiAqIERa5Zyo57q/5Lit5paH5YiG6K+NCiAqLwokdGl0bGUgPSBHZXRWYXJzKCd0aXRsZScsICdQT1NUJyk7CiR0aXRsZSA9IHN0cmlwX3RhZ3MoJHRpdGxlKTsKJHRpdGxlID0gcmF3dXJsZW5jb2RlKCR0aXRsZSk7CiRlbmNvZGUgPSAndXRmLTgnOwokY29udGVudCA9IEdldFZhcnMoJ2NvbnRlbnQnLCAnUE9TVCcpOwokY29udGVudCA9IHN0cmlwX3RhZ3MoJGNvbnRlbnQpOwovLyRjb250ZW50ID0gcHJlZ19yZXBsYWNlKCIvXFsuKz9cXS9VIiwgJycsICRjb250ZW50KTsgCi8vJGNvbnRlbnQgPSBwcmVnX3JlcGxhY2UoJy9cVy8nLCcnLCRjb250ZW50KTsKLy/lnKjnur/liIbor43mnI3liqHmnInplb/luqbpmZDliLYKaWYoc3RybGVuKCRjb250ZW50KT4yNDAwKXsKJGNvbnRlbnQgPSAgbWJfc3Vic3RyKCRjb250ZW50LCAwLCA4MDAsICRlbmNvZGUpOwp9CiRjb250ZW50ID0gcmF3dXJsZW5jb2RlKCRjb250ZW50KTsKCiR1cmwgPSAnaHR0cDovL2tleXdvcmQuZGlzY3V6LmNvbS9yZWxhdGVkX2t3Lmh0bWw/dGl0bGU9Jy4kdGl0bGUuJyZjb250ZW50PScuJGNvbnRlbnQuJyZpY3M9Jy4kZW5jb2RlLicmb2NzPScuJGVuY29kZTsKCiR4bWwgPSBHZXRIdHRwQ29udGVudCgkdXJsKTsKaWYoY291bnQoJHhtbCkgPiAwKSB7CgkkcGFyc2VyID0geG1sX3BhcnNlcl9jcmVhdGUoKTsKCXhtbF9wYXJzZXJfc2V0X29wdGlvbigkcGFyc2VyLCBYTUxfT1BUSU9OX0NBU0VfRk9MRElORywgMCk7Cgl4bWxfcGFyc2VyX3NldF9vcHRpb24oJHBhcnNlciwgWE1MX09QVElPTl9TS0lQX1dISVRFLCAxKTsKCXhtbF9wYXJzZV9pbnRvX3N0cnVjdCgkcGFyc2VyLCAkeG1sLCAkdmFsdWVfYXJyLCAkaW5kZXhfYXJyKTsKCXhtbF9wYXJzZXJfZnJlZSgkcGFyc2VyKTsKCgkka3dzID0gYXJyYXkoKTsKCWZvcmVhY2goJHZhbHVlX2FyciBhcyAkdmFsdWVhcnJheSkgewoJCWlmKCR2YWx1ZWFycmF5Wyd0YWcnXSA9PSAna3cnIHx8ICR2YWx1ZWFycmF5Wyd0YWcnXSA9PSAnZWt3JykgewoJCQkka3dzW10gPSB0cmltKCR2YWx1ZWFycmF5Wyd2YWx1ZSddKTsKCQl9Cgl9CgoJJHRhZ19lY2hvID0gJyc7CglpZigka3dzKSB7CgkJZm9yZWFjaCgka3dzIGFzICRrdykgewoJCQkkdGFnX2VjaG8gLj0gJGt3LicsJzsKCQl9CgkJJHRhZ19lY2hvID0gdHJpbSgkdGFnX2VjaG8sJywnKTsKCX0KCWVjaG8ganNvbl9lbmNvZGUoJHRhZ19lY2hvKTsKfWVsc2V7CgllY2hvIGpzb25fZW5jb2RlKCfojrflj5Z4bWzlpLHotKUnLiR4bWwpOwp9dm_tools/autotags/plugin.jsJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsgDQoJJCgiI2VkdFRhZyIpLmFmdGVyKCc8YSBjbGFzcz0iZ2V0dGFnc19idXR0b24iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSI+IFvmj5Dlj5bmoIfnrb5dPC9hPicpOw0KCSQoJy5nZXR0YWdzX2J1dHRvbicpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQkkKCIjZWR0VGFnIikuYXR0cigicGxhY2Vob2xkZXIiLCLmoIfnrb7mj5Dlj5bkuK0uLi4iKTsNCgkJdmFyIHRpdGxlID0gJCgnI2VkdFRpdGxlJykudmFsKCk/JCgnI2VkdFRpdGxlJykudmFsKCk6Jyc7DQoJCXZhciBjb250ZW50ID0gZWRpdG9yX2FwaS5lZGl0b3IuY29udGVudC5vYmouZ2V0Q29udGVudFR4dCgpP2VkaXRvcl9hcGkuZWRpdG9yLmNvbnRlbnQub2JqLmdldENvbnRlbnRUeHQoKTonJzsNCg0KCQkkLmFqYXgoew0KCQkJdHlwZToncG9zdCcsDQoJCQlhc3luYzp0cnVlLA0KCQkJdXJsOmJsb2dob3N0ICsgInpiX3VzZXJzL3BsdWdpbi9kbV90b29scy9hdXRvdGFncy9nZXR0YWdzLnBocCIsDQoJCQlkYXRhOnsNCgkJCQl0aXRsZTp0aXRsZSwNCgkJCQljb250ZW50OmNvbnRlbnQNCgkJCX0sDQoJCQl0aW1lb3V0OjMwMDAwLA0KCQkJZGF0YVR5cGU6J2pzb24nLA0KCQkJY29tcGxldGU6ZnVuY3Rpb24oKXt9LA0KCQkJc3VjY2VzczpmdW5jdGlvbihkYXRhKXsNCgkJCQkkKCIjZWR0VGFnIikuYXR0cigicGxhY2Vob2xkZXIiLCIiKTsNCgkJCQkkKCcjZWR0VGFnJykudmFsKGRhdGEpOw0KCQkJfQ0KCQl9KTsNCgl9KTsNCn0pOw0Kdm_tools/codeMirror/codeMirror.cssLyogQkFTSUNTICovDQoNCi5Db2RlTWlycm9yIHsNCiAgLyogU2V0IGhlaWdodCwgd2lkdGgsIGJvcmRlcnMsIGFuZCBnbG9iYWwgZm9udCBwcm9wZXJ0aWVzIGhlcmUgKi8NCiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsNCiAgaGVpZ2h0OiBhdXRvOw0KICBjb2xvcjogYmxhY2s7DQp9DQoNCi8qIFBBRERJTkcgKi8NCg0KLkNvZGVNaXJyb3ItbGluZXMgew0KICBwYWRkaW5nOiA0cHggMDsgLyogVmVydGljYWwgcGFkZGluZyBhcm91bmQgY29udGVudCAqLw0KfQ0KLkNvZGVNaXJyb3IgcHJlIHsNCiAgcGFkZGluZzogMCA0cHg7IC8qIEhvcml6b250YWwgcGFkZGluZyBvZiBjb250ZW50ICovDQp9DQoNCi5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIsIC5Db2RlTWlycm9yLWd1dHRlci1maWxsZXIgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgLyogVGhlIGxpdHRsZSBzcXVhcmUgYmV0d2VlbiBIIGFuZCBWIHNjcm9sbGJhcnMgKi8NCn0NCg0KLyogR1VUVEVSICovDQoNCi5Db2RlTWlycm9yLWd1dHRlcnMgew0KICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZGRkOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3Ow0KICB3aGl0ZS1zcGFjZTogbm93cmFwOw0KfQ0KLkNvZGVNaXJyb3ItbGluZW51bWJlcnMge30NCi5Db2RlTWlycm9yLWxpbmVudW1iZXIgew0KICBwYWRkaW5nOiAwIDNweCAwIDVweDsNCiAgbWluLXdpZHRoOiAyMHB4Ow0KICB0ZXh0LWFsaWduOiByaWdodDsNCiAgY29sb3I6ICM5OTk7DQogIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7DQogIGJveC1zaXppbmc6IGNvbnRlbnQtYm94Ow0KfQ0KDQouQ29kZU1pcnJvci1ndXR0ZXJtYXJrZXIgeyBjb2xvcjogYmxhY2s7IH0NCi5Db2RlTWlycm9yLWd1dHRlcm1hcmtlci1zdWJ0bGUgeyBjb2xvcjogIzk5OTsgfQ0KDQovKiBDVVJTT1IgKi8NCg0KLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsNCiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBibGFjazsNCn0NCi8qIFNob3duIHdoZW4gbW92aW5nIGluIGJpLWRpcmVjdGlvbmFsIHRleHQgKi8NCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciB7DQogIGJvcmRlci1sZWZ0OiAxcHggc29saWQgc2lsdmVyOw0KfQ0KLkNvZGVNaXJyb3IuY20tZmF0LWN1cnNvciBkaXYuQ29kZU1pcnJvci1jdXJzb3Igew0KICB3aWR0aDogYXV0bzsNCiAgYm9yZGVyOiAwOw0KICBiYWNrZ3JvdW5kOiAjN2U3Ow0KfQ0KLkNvZGVNaXJyb3IuY20tZmF0LWN1cnNvciBkaXYuQ29kZU1pcnJvci1jdXJzb3JzIHsNCiAgei1pbmRleDogMTsNCn0NCg0KLmNtLWFuaW1hdGUtZmF0LWN1cnNvciB7DQogIHdpZHRoOiBhdXRvOw0KICBib3JkZXI6IDA7DQogIC13ZWJraXQtYW5pbWF0aW9uOiBibGluayAxLjA2cyBzdGVwcygxKSBpbmZpbml0ZTsNCiAgLW1vei1hbmltYXRpb246IGJsaW5rIDEuMDZzIHN0ZXBzKDEpIGluZmluaXRlOw0KICBhbmltYXRpb246IGJsaW5rIDEuMDZzIHN0ZXBzKDEpIGluZmluaXRlOw0KfQ0KQC1tb3ota2V5ZnJhbWVzIGJsaW5rIHsNCiAgMCUgeyBiYWNrZ3JvdW5kOiAjN2U3OyB9DQogIDUwJSB7IGJhY2tncm91bmQ6IG5vbmU7IH0NCiAgMTAwJSB7IGJhY2tncm91bmQ6ICM3ZTc7IH0NCn0NCkAtd2Via2l0LWtleWZyYW1lcyBibGluayB7DQogIDAlIHsgYmFja2dyb3VuZDogIzdlNzsgfQ0KICA1MCUgeyBiYWNrZ3JvdW5kOiBub25lOyB9DQogIDEwMCUgeyBiYWNrZ3JvdW5kOiAjN2U3OyB9DQp9DQpAa2V5ZnJhbWVzIGJsaW5rIHsNCiAgMCUgeyBiYWNrZ3JvdW5kOiAjN2U3OyB9DQogIDUwJSB7IGJhY2tncm91bmQ6IG5vbmU7IH0NCiAgMTAwJSB7IGJhY2tncm91bmQ6ICM3ZTc7IH0NCn0NCg0KLyogQ2FuIHN0eWxlIGN1cnNvciBkaWZmZXJlbnQgaW4gb3ZlcndyaXRlIChub24taW5zZXJ0KSBtb2RlICovDQpkaXYuQ29kZU1pcnJvci1vdmVyd3JpdGUgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHt9DQoNCi5jbS10YWIgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHRleHQtZGVjb3JhdGlvbjogaW5oZXJpdDsgfQ0KDQouQ29kZU1pcnJvci1ydWxlciB7DQogIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2NjYzsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KfQ0KDQovKiBERUZBVUxUIFRIRU1FICovDQoNCi5jbS1zLWRlZmF1bHQgLmNtLWtleXdvcmQge2NvbG9yOiAjNzA4O30NCi5jbS1zLWRlZmF1bHQgLmNtLWF0b20ge2NvbG9yOiAjMjE5O30NCi5jbS1zLWRlZmF1bHQgLmNtLW51bWJlciB7Y29sb3I6ICMxNjQ7fQ0KLmNtLXMtZGVmYXVsdCAuY20tZGVmIHtjb2xvcjogIzAwZjt9DQouY20tcy1kZWZhdWx0IC5jbS12YXJpYWJsZSwNCi5jbS1zLWRlZmF1bHQgLmNtLXB1bmN0dWF0aW9uLA0KLmNtLXMtZGVmYXVsdCAuY20tcHJvcGVydHksDQouY20tcy1kZWZhdWx0IC5jbS1vcGVyYXRvciB7fQ0KLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMiB7Y29sb3I6ICMwNWE7fQ0KLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMyB7Y29sb3I6ICMwODU7fQ0KLmNtLXMtZGVmYXVsdCAuY20tY29tbWVudCB7Y29sb3I6ICNhNTA7fQ0KLmNtLXMtZGVmYXVsdCAuY20tc3RyaW5nIHtjb2xvcjogI2ExMTt9DQouY20tcy1kZWZhdWx0IC5jbS1zdHJpbmctMiB7Y29sb3I6ICNmNTA7fQ0KLmNtLXMtZGVmYXVsdCAuY20tbWV0YSB7Y29sb3I6ICM1NTU7fQ0KLmNtLXMtZGVmYXVsdCAuY20tcXVhbGlmaWVyIHtjb2xvcjogIzU1NTt9DQouY20tcy1kZWZhdWx0IC5jbS1idWlsdGluIHtjb2xvcjogIzMwYTt9DQouY20tcy1kZWZhdWx0IC5jbS1icmFja2V0IHtjb2xvcjogIzk5Nzt9DQouY20tcy1kZWZhdWx0IC5jbS10YWcge2NvbG9yOiAjMTcwO30NCi5jbS1zLWRlZmF1bHQgLmNtLWF0dHJpYnV0ZSB7Y29sb3I6ICMwMGM7fQ0KLmNtLXMtZGVmYXVsdCAuY20taGVhZGVyIHtjb2xvcjogYmx1ZTt9DQouY20tcy1kZWZhdWx0IC5jbS1xdW90ZSB7Y29sb3I6ICMwOTA7fQ0KLmNtLXMtZGVmYXVsdCAuY20taHIge2NvbG9yOiAjOTk5O30NCi5jbS1zLWRlZmF1bHQgLmNtLWxpbmsge2NvbG9yOiAjMDBjO30NCg0KLmNtLW5lZ2F0aXZlIHtjb2xvcjogI2Q0NDt9DQouY20tcG9zaXRpdmUge2NvbG9yOiAjMjkyO30NCi5jbS1oZWFkZXIsIC5jbS1zdHJvbmcge2ZvbnQtd2VpZ2h0OiBib2xkO30NCi5jbS1lbSB7Zm9udC1zdHlsZTogaXRhbGljO30NCi5jbS1saW5rIHt0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTt9DQouY20tc3RyaWtldGhyb3VnaCB7dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7fQ0KDQouY20tcy1kZWZhdWx0IC5jbS1lcnJvciB7Y29sb3I6ICNmMDA7fQ0KLmNtLWludmFsaWRjaGFyIHtjb2xvcjogI2YwMDt9DQoNCi8qIERlZmF1bHQgc3R5bGVzIGZvciBjb21tb24gYWRkb25zICovDQoNCmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjMGYwO30NCmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjZjIyO30NCi5Db2RlTWlycm9yLW1hdGNoaW5ndGFnIHsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDE1MCwgMCwgLjMpOyB9DQouQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQge2JhY2tncm91bmQ6ICNlOGYyZmY7fQ0KDQovKiBTVE9QICovDQoNCi8qIFRoZSByZXN0IG9mIHRoaXMgZmlsZSBjb250YWlucyBzdHlsZXMgcmVsYXRlZCB0byB0aGUgbWVjaGFuaWNzIG9mDQogICB0aGUgZWRpdG9yLiBZb3UgcHJvYmFibHkgc2hvdWxkbid0IHRvdWNoIHRoZW0uICovDQoNCi5Db2RlTWlycm9yIHsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICBvdmVyZmxvdzogaGlkZGVuOw0KICBiYWNrZ3JvdW5kOiB3aGl0ZTsNCn0NCg0KLkNvZGVNaXJyb3Itc2Nyb2xsIHsNCiAgb3ZlcmZsb3c6IHNjcm9sbCAhaW1wb3J0YW50OyAvKiBUaGluZ3Mgd2lsbCBicmVhayBpZiB0aGlzIGlzIG92ZXJyaWRkZW4gKi8NCiAgLyogMzBweCBpcyB0aGUgbWFnaWMgbWFyZ2luIHVzZWQgdG8gaGlkZSB0aGUgZWxlbWVudCdzIHJlYWwgc2Nyb2xsYmFycyAqLw0KICAvKiBTZWUgb3ZlcmZsb3c6IGhpZGRlbiBpbiAuQ29kZU1pcnJvciAqLw0KICBtYXJnaW4tYm90dG9tOiAtMzBweDsgbWFyZ2luLXJpZ2h0OiAtMzBweDsNCiAgcGFkZGluZy1ib3R0b206IDMwcHg7DQogIGhlaWdodDogMTAwJTsNCiAgb3V0bGluZTogbm9uZTsgLyogUHJldmVudCBkcmFnZ2luZyBmcm9tIGhpZ2hsaWdodGluZyB0aGUgZWxlbWVudCAqLw0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7DQogIGJveC1zaXppbmc6IGNvbnRlbnQtYm94Ow0KfQ0KLkNvZGVNaXJyb3Itc2l6ZXIgew0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIGJvcmRlci1yaWdodDogMzBweCBzb2xpZCB0cmFuc3BhcmVudDsNCiAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsNCiAgYm94LXNpemluZzogY29udGVudC1ib3g7DQp9DQoNCi8qIFRoZSBmYWtlLCB2aXNpYmxlIHNjcm9sbGJhcnMuIFVzZWQgdG8gZm9yY2UgcmVkcmF3IGR1cmluZyBzY3JvbGxpbmcNCiAgIGJlZm9yZSBhY3R1YWxsIHNjcm9sbGluZyBoYXBwZW5zLCB0aHVzIHByZXZlbnRpbmcgc2hha2luZyBhbmQNCiAgIGZsaWNrZXJpbmcgYXJ0aWZhY3RzLiAqLw0KLkNvZGVNaXJyb3ItdnNjcm9sbGJhciwgLkNvZGVNaXJyb3ItaHNjcm9sbGJhciwgLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgei1pbmRleDogNjsNCiAgZGlzcGxheTogbm9uZTsNCn0NCi5Db2RlTWlycm9yLXZzY3JvbGxiYXIgew0KICByaWdodDogMDsgdG9wOiAwOw0KICBvdmVyZmxvdy14OiBoaWRkZW47DQogIG92ZXJmbG93LXk6IHNjcm9sbDsNCn0NCi5Db2RlTWlycm9yLWhzY3JvbGxiYXIgew0KICBib3R0b206IDA7IGxlZnQ6IDA7DQogIG92ZXJmbG93LXk6IGhpZGRlbjsNCiAgb3ZlcmZsb3cteDogc2Nyb2xsOw0KfQ0KLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciB7DQogIHJpZ2h0OiAwOyBib3R0b206IDA7DQp9DQouQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsNCiAgbGVmdDogMDsgYm90dG9tOiAwOw0KfQ0KDQouQ29kZU1pcnJvci1ndXR0ZXJzIHsNCiAgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyB0b3A6IDA7DQogIHotaW5kZXg6IDM7DQp9DQouQ29kZU1pcnJvci1ndXR0ZXIgew0KICB3aGl0ZS1zcGFjZTogbm9ybWFsOw0KICBoZWlnaHQ6IDEwMCU7DQogIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7DQogIGJveC1zaXppbmc6IGNvbnRlbnQtYm94Ow0KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogIG1hcmdpbi1ib3R0b206IC0zMHB4Ow0KICAvKiBIYWNrIHRvIG1ha2UgSUU3IGJlaGF2ZSAqLw0KICAqem9vbToxOw0KICAqZGlzcGxheTppbmxpbmU7DQp9DQouQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlciB7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgei1pbmRleDogNDsNCiAgaGVpZ2h0OiAxMDAlOw0KfQ0KLkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCB7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgY3Vyc29yOiBkZWZhdWx0Ow0KICB6LWluZGV4OiA0Ow0KfQ0KLkNvZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXIgew0KICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOw0KICAtbW96LXVzZXItc2VsZWN0OiBub25lOw0KICB1c2VyLXNlbGVjdDogbm9uZTsNCn0NCg0KLkNvZGVNaXJyb3ItbGluZXMgew0KICBjdXJzb3I6IHRleHQ7DQogIG1pbi1oZWlnaHQ6IDFweDsgLyogcHJldmVudHMgY29sbGFwc2luZyBiZWZvcmUgZmlyc3QgZHJhdyAqLw0KfQ0KLkNvZGVNaXJyb3IgcHJlIHsNCiAgLyogUmVzZXQgc29tZSBzdHlsZXMgdGhhdCB0aGUgcmVzdCBvZiB0aGUgcGFnZSBtaWdodCBoYXZlIHNldCAqLw0KICAtbW96LWJvcmRlci1yYWRpdXM6IDA7IC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsgYm9yZGVyLXJhZGl1czogMDsNCiAgYm9yZGVyLXdpZHRoOiAwOw0KICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsNCiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7DQogIGZvbnQtc2l6ZTogaW5oZXJpdDsNCiAgbWFyZ2luOiAwOw0KICB3aGl0ZS1zcGFjZTogcHJlOw0KICB3b3JkLXdyYXA6IG5vcm1hbDsNCiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7DQogIGNvbG9yOiBpbmhlcml0Ow0KICB6LWluZGV4OiAyOw0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIG92ZXJmbG93OiB2aXNpYmxlOw0KICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50Ow0KfQ0KLkNvZGVNaXJyb3Itd3JhcCBwcmUgew0KICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7DQogIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsNCiAgd29yZC1icmVhazogbm9ybWFsOw0KfQ0KDQouQ29kZU1pcnJvci1saW5lYmFja2dyb3VuZCB7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgbGVmdDogMDsgcmlnaHQ6IDA7IHRvcDogMDsgYm90dG9tOiAwOw0KICB6LWluZGV4OiAwOw0KfQ0KDQouQ29kZU1pcnJvci1saW5ld2lkZ2V0IHsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICB6LWluZGV4OiAyOw0KICBvdmVyZmxvdzogYXV0bzsNCn0NCg0KLkNvZGVNaXJyb3Itd2lkZ2V0IHt9DQoNCi5Db2RlTWlycm9yLWNvZGUgew0KICBvdXRsaW5lOiBub25lOw0KfQ0KDQouQ29kZU1pcnJvci1tZWFzdXJlIHsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB3aWR0aDogMTAwJTsNCiAgaGVpZ2h0OiAwOw0KICBvdmVyZmxvdzogaGlkZGVuOw0KICB2aXNpYmlsaXR5OiBoaWRkZW47DQp9DQouQ29kZU1pcnJvci1tZWFzdXJlIHByZSB7IHBvc2l0aW9uOiBzdGF0aWM7IH0NCg0KLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICBib3JkZXItcmlnaHQ6IG5vbmU7DQogIHdpZHRoOiAwOw0KfQ0KDQpkaXYuQ29kZU1pcnJvci1jdXJzb3JzIHsNCiAgdmlzaWJpbGl0eTogaGlkZGVuOw0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIHotaW5kZXg6IDM7DQp9DQouQ29kZU1pcnJvci1mb2N1c2VkIGRpdi5Db2RlTWlycm9yLWN1cnNvcnMgew0KICB2aXNpYmlsaXR5OiB2aXNpYmxlOw0KfQ0KDQouQ29kZU1pcnJvci1zZWxlY3RlZCB7IGJhY2tncm91bmQ6ICNkOWQ5ZDk7IH0NCi5Db2RlTWlycm9yLWZvY3VzZWQgLkNvZGVNaXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjZDdkNGYwOyB9DQouQ29kZU1pcnJvci1jcm9zc2hhaXIgeyBjdXJzb3I6IGNyb3NzaGFpcjsgfQ0KLkNvZGVNaXJyb3IgOjpzZWxlY3Rpb24geyBiYWNrZ3JvdW5kOiAjZDdkNGYwOyB9DQouQ29kZU1pcnJvciA6Oi1tb3otc2VsZWN0aW9uIHsgYmFja2dyb3VuZDogI2Q3ZDRmMDsgfQ0KDQouY20tc2VhcmNoaW5nIHsNCiAgYmFja2dyb3VuZDogI2ZmYTsNCiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMCwgLjQpOw0KfQ0KDQovKiBJRTcgaGFjayB0byBwcmV2ZW50IGl0IGZyb20gcmV0dXJuaW5nIGZ1bm55IG9mZnNldFRvcHMgb24gdGhlIHNwYW5zICovDQouQ29kZU1pcnJvciBzcGFuIHsgKnZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTsgfQ0KDQovKiBVc2VkIHRvIGZvcmNlIGEgYm9yZGVyIG1vZGVsIGZvciBhIG5vZGUgKi8NCi5jbS1mb3JjZS1ib3JkZXIgeyBwYWRkaW5nLXJpZ2h0OiAuMXB4OyB9DQoNCkBtZWRpYSBwcmludCB7DQogIC8qIEhpZGUgdGhlIGN1cnNvciB3aGVuIHByaW50aW5nICovDQogIC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvcnMgew0KICAgIHZpc2liaWxpdHk6IGhpZGRlbjsNCiAgfQ0KfQ0KDQovKiBTZWUgaXNzdWUgIzI5MDEgKi8NCi5jbS10YWItd3JhcC1oYWNrOmFmdGVyIHsgY29udGVudDogJyc7IH0NCg0KLyogSGVscCB1c2VycyB1c2UgbWFya3NlbGVjdGlvbiB0byBzYWZlbHkgc3R5bGUgdGV4dCBiYWNrZ3JvdW5kICovDQpzcGFuLkNvZGVNaXJyb3Itc2VsZWN0ZWR0ZXh0IHsgYmFja2dyb3VuZDogbm9uZTsgfQ0KDQouQ29kZU1pcnJvci1oaW50cyB7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgei1pbmRleDogMTA7DQogIG92ZXJmbG93OiBoaWRkZW47DQogIGxpc3Qtc3R5bGU6IG5vbmU7DQoNCiAgbWFyZ2luOiAwOw0KICBwYWRkaW5nOiAycHg7DQoNCiAgLXdlYmtpdC1ib3gtc2hhZG93OiAycHggM3B4IDVweCByZ2JhKDAsMCwwLC4yKTsNCiAgLW1vei1ib3gtc2hhZG93OiAycHggM3B4IDVweCByZ2JhKDAsMCwwLC4yKTsNCiAgYm94LXNoYWRvdzogMnB4IDNweCA1cHggcmdiYSgwLDAsMCwuMik7DQogIGJvcmRlci1yYWRpdXM6IDNweDsNCiAgYm9yZGVyOiAxcHggc29saWQgc2lsdmVyOw0KDQogIGJhY2tncm91bmQ6IHdoaXRlOw0KICBmb250LXNpemU6IDkwJTsNCiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsNCg0KICBtYXgtaGVpZ2h0OiAyMGVtOw0KICBvdmVyZmxvdy15OiBhdXRvOw0KfQ0KDQouQ29kZU1pcnJvci1oaW50IHsNCiAgbWFyZ2luOiAwOw0KICBwYWRkaW5nOiAwIDRweDsNCiAgYm9yZGVyLXJhZGl1czogMnB4Ow0KICBtYXgtd2lkdGg6IDE5ZW07DQogIG92ZXJmbG93OiBoaWRkZW47DQogIHdoaXRlLXNwYWNlOiBwcmU7DQogIGNvbG9yOiBibGFjazsNCiAgY3Vyc29yOiBwb2ludGVyOw0KfQ0KDQpsaS5Db2RlTWlycm9yLWhpbnQtYWN0aXZlIHsNCiAgYmFja2dyb3VuZDogIzA4ZjsNCiAgY29sb3I6IHdoaXRlOw0KfQ==dm_tools/codeMirror/codeMirror.jsLyogQ29kZU1pcnJvciAtIE1pbmlmaWVkICYgQnVuZGxlZA0KICAgR2VuZXJhdGVkIG9uIDIwMTUvMy8xNyB3aXRoIGh0dHA6Ly9jb2RlbWlycm9yLm5ldC9kb2MvY29tcHJlc3MuaHRtbA0KICAgVmVyc2lvbjogNS4wDQoNCiAgIENvZGVNaXJyb3IgTGlicmFyeToNCiAgIC0gY29kZW1pcnJvci5qcw0KICAgTW9kZXM6DQogICAtIGNzcy5qcw0KICAgLSBodG1sbWl4ZWQuanMNCiAgIC0gcGhwLmpzDQogICAtIHhtbC5qcw0KICAgQWRkLW9uczoNCiAgIC0gY3NzLWhpbnQuanMNCiAgIC0gaHRtbC1oaW50LmpzDQogKi8NCg0KIWZ1bmN0aW9uKGEpe2lmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9YSgpO2Vsc2V7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClyZXR1cm4gZGVmaW5lKFtdLGEpO3RoaXMuQ29kZU1pcnJvcj1hKCl9fShmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB2KGEsYil7aWYoISh0aGlzIGluc3RhbmNlb2YgdikpcmV0dXJuIG5ldyB2KGEsYik7dGhpcy5vcHRpb25zPWI9Yj9iaChiKTp7fSxiaCh1ZSxiLCExKSxJKGIpO3ZhciBjPWIudmFsdWU7InN0cmluZyI9PXR5cGVvZiBjJiYoYz1uZXcgWGYoYyxiLm1vZGUpKSx0aGlzLmRvYz1jO3ZhciBnPW5ldyB2LmlucHV0U3R5bGVzW2IuaW5wdXRTdHlsZV0odGhpcyksaD10aGlzLmRpc3BsYXk9bmV3IHcoYSxjLGcpO2gud3JhcHBlci5Db2RlTWlycm9yPXRoaXMsRSh0aGlzKSxDKHRoaXMpLGIubGluZVdyYXBwaW5nJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itd3JhcCIpLGIuYXV0b2ZvY3VzJiYhbiYmaC5pbnB1dC5mb2N1cygpLE0odGhpcyksdGhpcy5zdGF0ZT17a2V5TWFwczpbXSxvdmVybGF5czpbXSxtb2RlR2VuOjAsb3ZlcndyaXRlOiExLGZvY3VzZWQ6ITEsc3VwcHJlc3NFZGl0czohMSxwYXN0ZUluY29taW5nOiExLGN1dEluY29taW5nOiExLGRyYWdnaW5nVGV4dDohMSxoaWdobGlnaHQ6bmV3IFNnLGtleVNlcTpudWxsfTt2YXIgaT10aGlzO2QmJjExPmUmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLmRpc3BsYXkuaW5wdXQucmVzZXQoITApfSwyMCksbmQodGhpcyksdmgoKSxUYyh0aGlzKSx0aGlzLmN1ck9wLmZvcmNlVXBkYXRlPSEwLF9mKHRoaXMsYyksYi5hdXRvZm9jdXMmJiFufHxpLmhhc0ZvY3VzKCk/c2V0VGltZW91dChjaChUZCx0aGlzKSwyMCk6VWQodGhpcyk7Zm9yKHZhciBqIGluIHZlKXZlLmhhc093blByb3BlcnR5KGopJiZ2ZVtqXSh0aGlzLGJbal0seGUpO1IodGhpcyksYi5maW5pc2hJbml0JiZiLmZpbmlzaEluaXQodGhpcyk7Zm9yKHZhciBrPTA7azxCZS5sZW5ndGg7KytrKUJlW2tdKHRoaXMpO1ZjKHRoaXMpLGYmJmIubGluZVdyYXBwaW5nJiYib3B0aW1pemVsZWdpYmlsaXR5Ij09Z2V0Q29tcHV0ZWRTdHlsZShoLmxpbmVEaXYpLnRleHRSZW5kZXJpbmcmJihoLmxpbmVEaXYuc3R5bGUudGV4dFJlbmRlcmluZz0iYXV0byIpfWZ1bmN0aW9uIHcoYixjLGcpe3ZhciBoPXRoaXM7dGhpcy5pbnB1dD1nLGguc2Nyb2xsYmFyRmlsbGVyPWpoKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciIpLGguc2Nyb2xsYmFyRmlsbGVyLnNldEF0dHJpYnV0ZSgiY20tbm90LWNvbnRlbnQiLCJ0cnVlIiksaC5ndXR0ZXJGaWxsZXI9amgoImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIiksaC5ndXR0ZXJGaWxsZXIuc2V0QXR0cmlidXRlKCJjbS1ub3QtY29udGVudCIsInRydWUiKSxoLmxpbmVEaXY9amgoImRpdiIsbnVsbCwiQ29kZU1pcnJvci1jb2RlIiksaC5zZWxlY3Rpb25EaXY9amgoImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogcmVsYXRpdmU7IHotaW5kZXg6IDEiKSxoLmN1cnNvckRpdj1qaCgiZGl2IixudWxsLCJDb2RlTWlycm9yLWN1cnNvcnMiKSxoLm1lYXN1cmU9amgoImRpdiIsbnVsbCwiQ29kZU1pcnJvci1tZWFzdXJlIiksaC5saW5lTWVhc3VyZT1qaCgiZGl2IixudWxsLCJDb2RlTWlycm9yLW1lYXN1cmUiKSxoLmxpbmVTcGFjZT1qaCgiZGl2IixbaC5tZWFzdXJlLGgubGluZU1lYXN1cmUsaC5zZWxlY3Rpb25EaXYsaC5jdXJzb3JEaXYsaC5saW5lRGl2XSxudWxsLCJwb3NpdGlvbjogcmVsYXRpdmU7IG91dGxpbmU6IG5vbmUiKSxoLm1vdmVyPWpoKCJkaXYiLFtqaCgiZGl2IixbaC5saW5lU3BhY2VdLCJDb2RlTWlycm9yLWxpbmVzIildLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpLGguc2l6ZXI9amgoImRpdiIsW2gubW92ZXJdLCJDb2RlTWlycm9yLXNpemVyIiksaC5zaXplcldpZHRoPW51bGwsaC5oZWlnaHRGb3JjZXI9amgoImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IGhlaWdodDogIitOZysicHg7IHdpZHRoOiAxcHg7IiksaC5ndXR0ZXJzPWpoKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVycyIpLGgubGluZUd1dHRlcj1udWxsLGguc2Nyb2xsZXI9amgoImRpdiIsW2guc2l6ZXIsaC5oZWlnaHRGb3JjZXIsaC5ndXR0ZXJzXSwiQ29kZU1pcnJvci1zY3JvbGwiKSxoLnNjcm9sbGVyLnNldEF0dHJpYnV0ZSgidGFiSW5kZXgiLCItMSIpLGgud3JhcHBlcj1qaCgiZGl2IixbaC5zY3JvbGxiYXJGaWxsZXIsaC5ndXR0ZXJGaWxsZXIsaC5zY3JvbGxlcl0sIkNvZGVNaXJyb3IiKSxkJiY4PmUmJihoLmd1dHRlcnMuc3R5bGUuekluZGV4PS0xLGguc2Nyb2xsZXIuc3R5bGUucGFkZGluZ1JpZ2h0PTApLGZ8fGEmJm58fChoLnNjcm9sbGVyLmRyYWdnYWJsZT0hMCksYiYmKGIuYXBwZW5kQ2hpbGQ/Yi5hcHBlbmRDaGlsZChoLndyYXBwZXIpOmIoaC53cmFwcGVyKSksaC52aWV3RnJvbT1oLnZpZXdUbz1jLmZpcnN0LGgucmVwb3J0ZWRWaWV3RnJvbT1oLnJlcG9ydGVkVmlld1RvPWMuZmlyc3QsaC52aWV3PVtdLGgucmVuZGVyZWRWaWV3PW51bGwsaC5leHRlcm5hbE1lYXN1cmVkPW51bGwsaC52aWV3T2Zmc2V0PTAsaC5sYXN0V3JhcEhlaWdodD1oLmxhc3RXcmFwV2lkdGg9MCxoLnVwZGF0ZUxpbmVOdW1iZXJzPW51bGwsaC5uYXRpdmVCYXJXaWR0aD1oLmJhckhlaWdodD1oLmJhcldpZHRoPTAsaC5zY3JvbGxiYXJzQ2xpcHBlZD0hMSxoLmxpbmVOdW1XaWR0aD1oLmxpbmVOdW1Jbm5lcldpZHRoPWgubGluZU51bUNoYXJzPW51bGwsaC5hbGlnbldpZGdldHM9ITEsaC5jYWNoZWRDaGFyV2lkdGg9aC5jYWNoZWRUZXh0SGVpZ2h0PWguY2FjaGVkUGFkZGluZ0g9bnVsbCxoLm1heExpbmU9bnVsbCxoLm1heExpbmVMZW5ndGg9MCxoLm1heExpbmVDaGFuZ2VkPSExLGgud2hlZWxEWD1oLndoZWVsRFk9aC53aGVlbFN0YXJ0WD1oLndoZWVsU3RhcnRZPW51bGwsaC5zaGlmdD0hMSxoLnNlbEZvckNvbnRleHRNZW51PW51bGwsaC5hY3RpdmVUb3VjaD1udWxsLGcuaW5pdChoKX1mdW5jdGlvbiB4KGEpe2EuZG9jLm1vZGU9di5nZXRNb2RlKGEub3B0aW9ucyxhLmRvYy5tb2RlT3B0aW9uKSx5KGEpfWZ1bmN0aW9uIHkoYSl7YS5kb2MuaXRlcihmdW5jdGlvbihhKXthLnN0YXRlQWZ0ZXImJihhLnN0YXRlQWZ0ZXI9bnVsbCksYS5zdHlsZXMmJihhLnN0eWxlcz1udWxsKX0pLGEuZG9jLmZyb250aWVyPWEuZG9jLmZpcnN0LGdjKGEsMTAwKSxhLnN0YXRlLm1vZGVHZW4rKyxhLmN1ck9wJiZnZChhKX1mdW5jdGlvbiB6KGEpe2Eub3B0aW9ucy5saW5lV3JhcHBpbmc/KHJoKGEuZGlzcGxheS53cmFwcGVyLCJDb2RlTWlycm9yLXdyYXAiKSxhLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGg9IiIsYS5kaXNwbGF5LnNpemVyV2lkdGg9bnVsbCk6KHFoKGEuZGlzcGxheS53cmFwcGVyLCJDb2RlTWlycm9yLXdyYXAiKSxIKGEpKSxCKGEpLGdkKGEpLERjKGEpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtOKGEpfSwxMDApfWZ1bmN0aW9uIEEoYSl7dmFyIGI9UGMoYS5kaXNwbGF5KSxjPWEub3B0aW9ucy5saW5lV3JhcHBpbmcsZD1jJiZNYXRoLm1heCg1LGEuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aC9RYyhhLmRpc3BsYXkpLTMpO3JldHVybiBmdW5jdGlvbihlKXtpZihyZihhLmRvYyxlKSlyZXR1cm4gMDt2YXIgZj0wO2lmKGUud2lkZ2V0cylmb3IodmFyIGc9MDtnPGUud2lkZ2V0cy5sZW5ndGg7ZysrKWUud2lkZ2V0c1tnXS5oZWlnaHQmJihmKz1lLndpZGdldHNbZ10uaGVpZ2h0KTtyZXR1cm4gYz9mKyhNYXRoLmNlaWwoZS50ZXh0Lmxlbmd0aC9kKXx8MSkqYjpmK2J9fWZ1bmN0aW9uIEIoYSl7dmFyIGI9YS5kb2MsYz1BKGEpO2IuaXRlcihmdW5jdGlvbihhKXt2YXIgYj1jKGEpO2IhPWEuaGVpZ2h0JiZkZyhhLGIpfSl9ZnVuY3Rpb24gQyhhKXthLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9YS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmNtLXMtXFMrL2csIiIpK2Eub3B0aW9ucy50aGVtZS5yZXBsYWNlKC8oXnxccylccyovZywiIGNtLXMtIiksRGMoYSl9ZnVuY3Rpb24gRChhKXtFKGEpLGdkKGEpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtRKGEpfSwyMCl9ZnVuY3Rpb24gRShhKXt2YXIgYj1hLmRpc3BsYXkuZ3V0dGVycyxjPWEub3B0aW9ucy5ndXR0ZXJzO2xoKGIpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7KytkKXt2YXIgZT1jW2RdLGY9Yi5hcHBlbmRDaGlsZChqaCgiZGl2IixudWxsLCJDb2RlTWlycm9yLWd1dHRlciAiK2UpKTsiQ29kZU1pcnJvci1saW5lbnVtYmVycyI9PWUmJihhLmRpc3BsYXkubGluZUd1dHRlcj1mLGYuc3R5bGUud2lkdGg9KGEuZGlzcGxheS5saW5lTnVtV2lkdGh8fDEpKyJweCIpfWIuc3R5bGUuZGlzcGxheT1kPyIiOiJub25lIixGKGEpfWZ1bmN0aW9uIEYoYSl7dmFyIGI9YS5kaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7YS5kaXNwbGF5LnNpemVyLnN0eWxlLm1hcmdpbkxlZnQ9YisicHgifWZ1bmN0aW9uIEcoYSl7aWYoMD09YS5oZWlnaHQpcmV0dXJuIDA7Zm9yKHZhciBjLGI9YS50ZXh0Lmxlbmd0aCxkPWE7Yz1rZihkKTspe3ZhciBlPWMuZmluZCgwLCEwKTtkPWUuZnJvbS5saW5lLGIrPWUuZnJvbS5jaC1lLnRvLmNofWZvcihkPWE7Yz1sZihkKTspe3ZhciBlPWMuZmluZCgwLCEwKTtiLT1kLnRleHQubGVuZ3RoLWUuZnJvbS5jaCxkPWUudG8ubGluZSxiKz1kLnRleHQubGVuZ3RoLWUudG8uY2h9cmV0dXJuIGJ9ZnVuY3Rpb24gSChhKXt2YXIgYj1hLmRpc3BsYXksYz1hLmRvYztiLm1heExpbmU9YWcoYyxjLmZpcnN0KSxiLm1heExpbmVMZW5ndGg9RyhiLm1heExpbmUpLGIubWF4TGluZUNoYW5nZWQ9ITAsYy5pdGVyKGZ1bmN0aW9uKGEpe3ZhciBjPUcoYSk7Yz5iLm1heExpbmVMZW5ndGgmJihiLm1heExpbmVMZW5ndGg9YyxiLm1heExpbmU9YSl9KX1mdW5jdGlvbiBJKGEpe3ZhciBiPVpnKGEuZ3V0dGVycywiQ29kZU1pcnJvci1saW5lbnVtYmVycyIpOy0xPT1iJiZhLmxpbmVOdW1iZXJzP2EuZ3V0dGVycz1hLmd1dHRlcnMuY29uY2F0KFsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdKTpiPi0xJiYhYS5saW5lTnVtYmVycyYmKGEuZ3V0dGVycz1hLmd1dHRlcnMuc2xpY2UoMCksYS5ndXR0ZXJzLnNwbGljZShiLDEpKX1mdW5jdGlvbiBKKGEpe3ZhciBiPWEuZGlzcGxheSxjPWIuZ3V0dGVycy5vZmZzZXRXaWR0aCxkPU1hdGgucm91bmQoYS5kb2MuaGVpZ2h0K2xjKGEuZGlzcGxheSkpO3JldHVybntjbGllbnRIZWlnaHQ6Yi5zY3JvbGxlci5jbGllbnRIZWlnaHQsdmlld0hlaWdodDpiLndyYXBwZXIuY2xpZW50SGVpZ2h0LHNjcm9sbFdpZHRoOmIuc2Nyb2xsZXIuc2Nyb2xsV2lkdGgsY2xpZW50V2lkdGg6Yi5zY3JvbGxlci5jbGllbnRXaWR0aCx2aWV3V2lkdGg6Yi53cmFwcGVyLmNsaWVudFdpZHRoLGJhckxlZnQ6YS5vcHRpb25zLmZpeGVkR3V0dGVyP2M6MCxkb2NIZWlnaHQ6ZCxzY3JvbGxIZWlnaHQ6ZCtuYyhhKStiLmJhckhlaWdodCxuYXRpdmVCYXJXaWR0aDpiLm5hdGl2ZUJhcldpZHRoLGd1dHRlcldpZHRoOmN9fWZ1bmN0aW9uIEsoYSxiLGMpe3RoaXMuY209Yzt2YXIgZj10aGlzLnZlcnQ9amgoImRpdiIsW2poKCJkaXYiLG51bGwsbnVsbCwibWluLXdpZHRoOiAxcHgiKV0sIkNvZGVNaXJyb3ItdnNjcm9sbGJhciIpLGc9dGhpcy5ob3Jpej1qaCgiZGl2IixbamgoImRpdiIsbnVsbCxudWxsLCJoZWlnaHQ6IDEwMCU7IG1pbi1oZWlnaHQ6IDFweCIpXSwiQ29kZU1pcnJvci1oc2Nyb2xsYmFyIik7YShmKSxhKGcpLERnKGYsInNjcm9sbCIsZnVuY3Rpb24oKXtmLmNsaWVudEhlaWdodCYmYihmLnNjcm9sbFRvcCwidmVydGljYWwiKX0pLERnKGcsInNjcm9sbCIsZnVuY3Rpb24oKXtnLmNsaWVudFdpZHRoJiZiKGcuc2Nyb2xsTGVmdCwiaG9yaXpvbnRhbCIpfSksdGhpcy5jaGVja2VkT3ZlcmxheT0hMSxkJiY4PmUmJih0aGlzLmhvcml6LnN0eWxlLm1pbkhlaWdodD10aGlzLnZlcnQuc3R5bGUubWluV2lkdGg9IjE4cHgiKX1mdW5jdGlvbiBMKCl7fWZ1bmN0aW9uIE0oYSl7YS5kaXNwbGF5LnNjcm9sbGJhcnMmJihhLmRpc3BsYXkuc2Nyb2xsYmFycy5jbGVhcigpLGEuZGlzcGxheS5zY3JvbGxiYXJzLmFkZENsYXNzJiZxaChhLmRpc3BsYXkud3JhcHBlcixhLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcykpLGEuZGlzcGxheS5zY3JvbGxiYXJzPW5ldyB2LnNjcm9sbGJhck1vZGVsW2Eub3B0aW9ucy5zY3JvbGxiYXJTdHlsZV0oZnVuY3Rpb24oYil7YS5kaXNwbGF5LndyYXBwZXIuaW5zZXJ0QmVmb3JlKGIsYS5kaXNwbGF5LnNjcm9sbGJhckZpbGxlciksRGcoYiwibW91c2Vkb3duIixmdW5jdGlvbigpe2Euc3RhdGUuZm9jdXNlZCYmc2V0VGltZW91dChmdW5jdGlvbigpe2EuZGlzcGxheS5pbnB1dC5mb2N1cygpfSwwKX0pLGIuc2V0QXR0cmlidXRlKCJjbS1ub3QtY29udGVudCIsInRydWUiKX0sZnVuY3Rpb24oYixjKXsiaG9yaXpvbnRhbCI9PWM/RGQoYSxiKTpDZChhLGIpfSxhKSxhLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcyYmcmgoYS5kaXNwbGF5LndyYXBwZXIsYS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MpfWZ1bmN0aW9uIE4oYSxiKXtifHwoYj1KKGEpKTt2YXIgYz1hLmRpc3BsYXkuYmFyV2lkdGgsZD1hLmRpc3BsYXkuYmFySGVpZ2h0O08oYSxiKTtmb3IodmFyIGU9MDs0PmUmJmMhPWEuZGlzcGxheS5iYXJXaWR0aHx8ZCE9YS5kaXNwbGF5LmJhckhlaWdodDtlKyspYyE9YS5kaXNwbGF5LmJhcldpZHRoJiZhLm9wdGlvbnMubGluZVdyYXBwaW5nJiYkKGEpLE8oYSxKKGEpKSxjPWEuZGlzcGxheS5iYXJXaWR0aCxkPWEuZGlzcGxheS5iYXJIZWlnaHR9ZnVuY3Rpb24gTyhhLGIpe3ZhciBjPWEuZGlzcGxheSxkPWMuc2Nyb2xsYmFycy51cGRhdGUoYik7Yy5zaXplci5zdHlsZS5wYWRkaW5nUmlnaHQ9KGMuYmFyV2lkdGg9ZC5yaWdodCkrInB4IixjLnNpemVyLnN0eWxlLnBhZGRpbmdCb3R0b209KGMuYmFySGVpZ2h0PWQuYm90dG9tKSsicHgiLGQucmlnaHQmJmQuYm90dG9tPyhjLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsYy5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuaGVpZ2h0PWQuYm90dG9tKyJweCIsYy5zY3JvbGxiYXJGaWxsZXIuc3R5bGUud2lkdGg9ZC5yaWdodCsicHgiKTpjLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5PSIiLGQuYm90dG9tJiZhLm9wdGlvbnMuY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXImJmEub3B0aW9ucy5maXhlZEd1dHRlcj8oYy5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siLGMuZ3V0dGVyRmlsbGVyLnN0eWxlLmhlaWdodD1kLmJvdHRvbSsicHgiLGMuZ3V0dGVyRmlsbGVyLnN0eWxlLndpZHRoPWIuZ3V0dGVyV2lkdGgrInB4Iik6Yy5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iIn1mdW5jdGlvbiBQKGEsYixjKXt2YXIgZD1jJiZudWxsIT1jLnRvcD9NYXRoLm1heCgwLGMudG9wKTphLnNjcm9sbGVyLnNjcm9sbFRvcDtkPU1hdGguZmxvb3IoZC1rYyhhKSk7dmFyIGU9YyYmbnVsbCE9Yy5ib3R0b20/Yy5ib3R0b206ZCthLndyYXBwZXIuY2xpZW50SGVpZ2h0LGY9ZmcoYixkKSxnPWZnKGIsZSk7aWYoYyYmYy5lbnN1cmUpe3ZhciBoPWMuZW5zdXJlLmZyb20ubGluZSxpPWMuZW5zdXJlLnRvLmxpbmU7Zj5oPyhmPWgsZz1mZyhiLGdnKGFnKGIsaCkpK2Eud3JhcHBlci5jbGllbnRIZWlnaHQpKTpNYXRoLm1pbihpLGIubGFzdExpbmUoKSk+PWcmJihmPWZnKGIsZ2coYWcoYixpKSktYS53cmFwcGVyLmNsaWVudEhlaWdodCksZz1pKX1yZXR1cm57ZnJvbTpmLHRvOk1hdGgubWF4KGcsZisxKX19ZnVuY3Rpb24gUShhKXt2YXIgYj1hLmRpc3BsYXksYz1iLnZpZXc7aWYoYi5hbGlnbldpZGdldHN8fGIuZ3V0dGVycy5maXJzdENoaWxkJiZhLm9wdGlvbnMuZml4ZWRHdXR0ZXIpe2Zvcih2YXIgZD1UKGIpLWIuc2Nyb2xsZXIuc2Nyb2xsTGVmdCthLmRvYy5zY3JvbGxMZWZ0LGU9Yi5ndXR0ZXJzLm9mZnNldFdpZHRoLGY9ZCsicHgiLGc9MDtnPGMubGVuZ3RoO2crKylpZighY1tnXS5oaWRkZW4pe2Eub3B0aW9ucy5maXhlZEd1dHRlciYmY1tnXS5ndXR0ZXImJihjW2ddLmd1dHRlci5zdHlsZS5sZWZ0PWYpO3ZhciBoPWNbZ10uYWxpZ25hYmxlO2lmKGgpZm9yKHZhciBpPTA7aTxoLmxlbmd0aDtpKyspaFtpXS5zdHlsZS5sZWZ0PWZ9YS5vcHRpb25zLmZpeGVkR3V0dGVyJiYoYi5ndXR0ZXJzLnN0eWxlLmxlZnQ9ZCtlKyJweCIpfX1mdW5jdGlvbiBSKGEpe2lmKCFhLm9wdGlvbnMubGluZU51bWJlcnMpcmV0dXJuITE7dmFyIGI9YS5kb2MsYz1TKGEub3B0aW9ucyxiLmZpcnN0K2Iuc2l6ZS0xKSxkPWEuZGlzcGxheTtpZihjLmxlbmd0aCE9ZC5saW5lTnVtQ2hhcnMpe3ZhciBlPWQubWVhc3VyZS5hcHBlbmRDaGlsZChqaCgiZGl2IixbamgoImRpdiIsYyldLCJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0IikpLGY9ZS5maXJzdENoaWxkLm9mZnNldFdpZHRoLGc9ZS5vZmZzZXRXaWR0aC1mO3JldHVybiBkLmxpbmVHdXR0ZXIuc3R5bGUud2lkdGg9IiIsZC5saW5lTnVtSW5uZXJXaWR0aD1NYXRoLm1heChmLGQubGluZUd1dHRlci5vZmZzZXRXaWR0aC1nKSxkLmxpbmVOdW1XaWR0aD1kLmxpbmVOdW1Jbm5lcldpZHRoK2csZC5saW5lTnVtQ2hhcnM9ZC5saW5lTnVtSW5uZXJXaWR0aD9jLmxlbmd0aDotMSxkLmxpbmVHdXR0ZXIuc3R5bGUud2lkdGg9ZC5saW5lTnVtV2lkdGgrInB4IixGKGEpLCEwfXJldHVybiExfWZ1bmN0aW9uIFMoYSxiKXtyZXR1cm4gU3RyaW5nKGEubGluZU51bWJlckZvcm1hdHRlcihiK2EuZmlyc3RMaW5lTnVtYmVyKSl9ZnVuY3Rpb24gVChhKXtyZXR1cm4gYS5zY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LWEuc2l6ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH1mdW5jdGlvbiBVKGEsYixjKXt2YXIgZD1hLmRpc3BsYXk7dGhpcy52aWV3cG9ydD1iLHRoaXMudmlzaWJsZT1QKGQsYS5kb2MsYiksdGhpcy5lZGl0b3JJc0hpZGRlbj0hZC53cmFwcGVyLm9mZnNldFdpZHRoLHRoaXMud3JhcHBlckhlaWdodD1kLndyYXBwZXIuY2xpZW50SGVpZ2h0LHRoaXMud3JhcHBlcldpZHRoPWQud3JhcHBlci5jbGllbnRXaWR0aCx0aGlzLm9sZERpc3BsYXlXaWR0aD1vYyhhKSx0aGlzLmZvcmNlPWMsdGhpcy5kaW1zPWFiKGEpLHRoaXMuZXZlbnRzPVtdfWZ1bmN0aW9uIFYoYSl7dmFyIGI9YS5kaXNwbGF5OyFiLnNjcm9sbGJhcnNDbGlwcGVkJiZiLnNjcm9sbGVyLm9mZnNldFdpZHRoJiYoYi5uYXRpdmVCYXJXaWR0aD1iLnNjcm9sbGVyLm9mZnNldFdpZHRoLWIuc2Nyb2xsZXIuY2xpZW50V2lkdGgsYi5oZWlnaHRGb3JjZXIuc3R5bGUuaGVpZ2h0PW5jKGEpKyJweCIsYi5zaXplci5zdHlsZS5tYXJnaW5Cb3R0b209LWIubmF0aXZlQmFyV2lkdGgrInB4IixiLnNpemVyLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9bmMoYSkrInB4IixiLnNjcm9sbGJhcnNDbGlwcGVkPSEwKX1mdW5jdGlvbiBXKGEsYil7dmFyIGM9YS5kaXNwbGF5LGQ9YS5kb2M7aWYoYi5lZGl0b3JJc0hpZGRlbilyZXR1cm4gaWQoYSksITE7aWYoIWIuZm9yY2UmJmIudmlzaWJsZS5mcm9tPj1jLnZpZXdGcm9tJiZiLnZpc2libGUudG88PWMudmlld1RvJiYobnVsbD09Yy51cGRhdGVMaW5lTnVtYmVyc3x8Yy51cGRhdGVMaW5lTnVtYmVycz49Yy52aWV3VG8pJiZjLnJlbmRlcmVkVmlldz09Yy52aWV3JiYwPT1tZChhKSlyZXR1cm4hMTtSKGEpJiYoaWQoYSksYi5kaW1zPWFiKGEpKTt2YXIgZT1kLmZpcnN0K2Quc2l6ZSxmPU1hdGgubWF4KGIudmlzaWJsZS5mcm9tLWEub3B0aW9ucy52aWV3cG9ydE1hcmdpbixkLmZpcnN0KSxnPU1hdGgubWluKGUsYi52aXNpYmxlLnRvK2Eub3B0aW9ucy52aWV3cG9ydE1hcmdpbik7Yy52aWV3RnJvbTxmJiZmLWMudmlld0Zyb208MjAmJihmPU1hdGgubWF4KGQuZmlyc3QsYy52aWV3RnJvbSkpLGMudmlld1RvPmcmJmMudmlld1RvLWc8MjAmJihnPU1hdGgubWluKGUsYy52aWV3VG8pKSx1JiYoZj1wZihhLmRvYyxmKSxnPXFmKGEuZG9jLGcpKTt2YXIgaD1mIT1jLnZpZXdGcm9tfHxnIT1jLnZpZXdUb3x8Yy5sYXN0V3JhcEhlaWdodCE9Yi53cmFwcGVySGVpZ2h0fHxjLmxhc3RXcmFwV2lkdGghPWIud3JhcHBlcldpZHRoO2xkKGEsZixnKSxjLnZpZXdPZmZzZXQ9Z2coYWcoYS5kb2MsYy52aWV3RnJvbSkpLGEuZGlzcGxheS5tb3Zlci5zdHlsZS50b3A9Yy52aWV3T2Zmc2V0KyJweCI7dmFyIGk9bWQoYSk7aWYoIWgmJjA9PWkmJiFiLmZvcmNlJiZjLnJlbmRlcmVkVmlldz09Yy52aWV3JiYobnVsbD09Yy51cGRhdGVMaW5lTnVtYmVyc3x8Yy51cGRhdGVMaW5lTnVtYmVycz49Yy52aWV3VG8pKXJldHVybiExO3ZhciBqPW9oKCk7cmV0dXJuIGk+NCYmKGMubGluZURpdi5zdHlsZS5kaXNwbGF5PSJub25lIiksYmIoYSxjLnVwZGF0ZUxpbmVOdW1iZXJzLGIuZGltcyksaT40JiYoYy5saW5lRGl2LnN0eWxlLmRpc3BsYXk9IiIpLGMucmVuZGVyZWRWaWV3PWMudmlldyxqJiZvaCgpIT1qJiZqLm9mZnNldEhlaWdodCYmai5mb2N1cygpLGxoKGMuY3Vyc29yRGl2KSxsaChjLnNlbGVjdGlvbkRpdiksYy5ndXR0ZXJzLnN0eWxlLmhlaWdodD0wLGgmJihjLmxhc3RXcmFwSGVpZ2h0PWIud3JhcHBlckhlaWdodCxjLmxhc3RXcmFwV2lkdGg9Yi53cmFwcGVyV2lkdGgsZ2MoYSw0MDApKSxjLnVwZGF0ZUxpbmVOdW1iZXJzPW51bGwsITB9ZnVuY3Rpb24gWChhLGIpe2Zvcih2YXIgYz1iLmZvcmNlLGQ9Yi52aWV3cG9ydCxlPSEwOztlPSExKXtpZihlJiZhLm9wdGlvbnMubGluZVdyYXBwaW5nJiZiLm9sZERpc3BsYXlXaWR0aCE9b2MoYSkpYz0hMDtlbHNlIGlmKGM9ITEsZCYmbnVsbCE9ZC50b3AmJihkPXt0b3A6TWF0aC5taW4oYS5kb2MuaGVpZ2h0K2xjKGEuZGlzcGxheSktcGMoYSksZC50b3ApfSksYi52aXNpYmxlPVAoYS5kaXNwbGF5LGEuZG9jLGQpLGIudmlzaWJsZS5mcm9tPj1hLmRpc3BsYXkudmlld0Zyb20mJmIudmlzaWJsZS50bzw9YS5kaXNwbGF5LnZpZXdUbylicmVhaztpZighVyhhLGIpKWJyZWFrOyQoYSk7dmFyIGY9SihhKTtiYyhhKSxaKGEsZiksTihhLGYpfWIuc2lnbmFsKGEsInVwZGF0ZSIsYSksKGEuZGlzcGxheS52aWV3RnJvbSE9YS5kaXNwbGF5LnJlcG9ydGVkVmlld0Zyb218fGEuZGlzcGxheS52aWV3VG8hPWEuZGlzcGxheS5yZXBvcnRlZFZpZXdUbykmJihiLnNpZ25hbChhLCJ2aWV3cG9ydENoYW5nZSIsYSxhLmRpc3BsYXkudmlld0Zyb20sYS5kaXNwbGF5LnZpZXdUbyksYS5kaXNwbGF5LnJlcG9ydGVkVmlld0Zyb209YS5kaXNwbGF5LnZpZXdGcm9tLGEuZGlzcGxheS5yZXBvcnRlZFZpZXdUbz1hLmRpc3BsYXkudmlld1RvKX1mdW5jdGlvbiBZKGEsYil7dmFyIGM9bmV3IFUoYSxiKTtpZihXKGEsYykpeyQoYSksWChhLGMpO3ZhciBkPUooYSk7YmMoYSksWihhLGQpLE4oYSxkKSxjLmZpbmlzaCgpfX1mdW5jdGlvbiBaKGEsYil7YS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbkhlaWdodD1iLmRvY0hlaWdodCsicHgiO3ZhciBjPWIuZG9jSGVpZ2h0K2EuZGlzcGxheS5iYXJIZWlnaHQ7YS5kaXNwbGF5LmhlaWdodEZvcmNlci5zdHlsZS50b3A9YysicHgiLGEuZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmhlaWdodD1NYXRoLm1heChjK25jKGEpLGIuY2xpZW50SGVpZ2h0KSsicHgifWZ1bmN0aW9uICQoYSl7Zm9yKHZhciBiPWEuZGlzcGxheSxjPWIubGluZURpdi5vZmZzZXRUb3AsZj0wO2Y8Yi52aWV3Lmxlbmd0aDtmKyspe3ZhciBoLGc9Yi52aWV3W2ZdO2lmKCFnLmhpZGRlbil7aWYoZCYmOD5lKXt2YXIgaT1nLm5vZGUub2Zmc2V0VG9wK2cubm9kZS5vZmZzZXRIZWlnaHQ7aD1pLWMsYz1pfWVsc2V7dmFyIGo9Zy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2g9ai5ib3R0b20tai50b3B9dmFyIGs9Zy5saW5lLmhlaWdodC1oO2lmKDI+aCYmKGg9UGMoYikpLChrPi4wMDF8fC0uMDAxPmspJiYoZGcoZy5saW5lLGgpLF8oZy5saW5lKSxnLnJlc3QpKWZvcih2YXIgbD0wO2w8Zy5yZXN0Lmxlbmd0aDtsKyspXyhnLnJlc3RbbF0pfX19ZnVuY3Rpb24gXyhhKXtpZihhLndpZGdldHMpZm9yKHZhciBiPTA7YjxhLndpZGdldHMubGVuZ3RoOysrYilhLndpZGdldHNbYl0uaGVpZ2h0PWEud2lkZ2V0c1tiXS5ub2RlLm9mZnNldEhlaWdodH1mdW5jdGlvbiBhYihhKXtmb3IodmFyIGI9YS5kaXNwbGF5LGM9e30sZD17fSxlPWIuZ3V0dGVycy5jbGllbnRMZWZ0LGY9Yi5ndXR0ZXJzLmZpcnN0Q2hpbGQsZz0wO2Y7Zj1mLm5leHRTaWJsaW5nLCsrZyljW2Eub3B0aW9ucy5ndXR0ZXJzW2ddXT1mLm9mZnNldExlZnQrZi5jbGllbnRMZWZ0K2UsZFthLm9wdGlvbnMuZ3V0dGVyc1tnXV09Zi5jbGllbnRXaWR0aDtyZXR1cm57Zml4ZWRQb3M6VChiKSxndXR0ZXJUb3RhbFdpZHRoOmIuZ3V0dGVycy5vZmZzZXRXaWR0aCxndXR0ZXJMZWZ0OmMsZ3V0dGVyV2lkdGg6ZCx3cmFwcGVyV2lkdGg6Yi53cmFwcGVyLmNsaWVudFdpZHRofX1mdW5jdGlvbiBiYihhLGIsYyl7ZnVuY3Rpb24gaShiKXt2YXIgYz1iLm5leHRTaWJsaW5nO3JldHVybiBmJiZvJiZhLmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0PT1iP2Iuc3R5bGUuZGlzcGxheT0ibm9uZSI6Yi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGN9Zm9yKHZhciBkPWEuZGlzcGxheSxlPWEub3B0aW9ucy5saW5lTnVtYmVycyxnPWQubGluZURpdixoPWcuZmlyc3RDaGlsZCxqPWQudmlldyxrPWQudmlld0Zyb20sbD0wO2w8ai5sZW5ndGg7bCsrKXt2YXIgbT1qW2xdO2lmKG0uaGlkZGVuKTtlbHNlIGlmKG0ubm9kZSYmbS5ub2RlLnBhcmVudE5vZGU9PWcpe2Zvcig7aCE9bS5ub2RlOyloPWkoaCk7dmFyIHA9ZSYmbnVsbCE9YiYmaz49YiYmbS5saW5lTnVtYmVyO20uY2hhbmdlcyYmKFpnKG0uY2hhbmdlcywiZ3V0dGVyIik+LTEmJihwPSExKSxjYihhLG0sayxjKSkscCYmKGxoKG0ubGluZU51bWJlciksbS5saW5lTnVtYmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFMoYS5vcHRpb25zLGspKSkpLGg9bS5ub2RlLm5leHRTaWJsaW5nfWVsc2V7dmFyIG49a2IoYSxtLGssYyk7Zy5pbnNlcnRCZWZvcmUobixoKX1rKz1tLnNpemV9Zm9yKDtoOyloPWkoaCl9ZnVuY3Rpb24gY2IoYSxiLGMsZCl7Zm9yKHZhciBlPTA7ZTxiLmNoYW5nZXMubGVuZ3RoO2UrKyl7dmFyIGY9Yi5jaGFuZ2VzW2VdOyJ0ZXh0Ij09Zj9nYihhLGIpOiJndXR0ZXIiPT1mP2liKGEsYixjLGQpOiJjbGFzcyI9PWY/aGIoYik6IndpZGdldCI9PWYmJmpiKGEsYixkKX1iLmNoYW5nZXM9bnVsbH1mdW5jdGlvbiBkYihhKXtyZXR1cm4gYS5ub2RlPT1hLnRleHQmJihhLm5vZGU9amgoImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogcmVsYXRpdmUiKSxhLnRleHQucGFyZW50Tm9kZSYmYS50ZXh0LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGEubm9kZSxhLnRleHQpLGEubm9kZS5hcHBlbmRDaGlsZChhLnRleHQpLGQmJjg+ZSYmKGEubm9kZS5zdHlsZS56SW5kZXg9MikpLGEubm9kZX1mdW5jdGlvbiBlYihhKXt2YXIgYj1hLmJnQ2xhc3M/YS5iZ0NsYXNzKyIgIisoYS5saW5lLmJnQ2xhc3N8fCIiKTphLmxpbmUuYmdDbGFzcztpZihiJiYoYis9IiBDb2RlTWlycm9yLWxpbmViYWNrZ3JvdW5kIiksYS5iYWNrZ3JvdW5kKWI/YS5iYWNrZ3JvdW5kLmNsYXNzTmFtZT1iOihhLmJhY2tncm91bmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhLmJhY2tncm91bmQpLGEuYmFja2dyb3VuZD1udWxsKTtlbHNlIGlmKGIpe3ZhciBjPWRiKGEpO2EuYmFja2dyb3VuZD1jLmluc2VydEJlZm9yZShqaCgiZGl2IixudWxsLGIpLGMuZmlyc3RDaGlsZCl9fWZ1bmN0aW9uIGZiKGEsYil7dmFyIGM9YS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7cmV0dXJuIGMmJmMubGluZT09Yi5saW5lPyhhLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZD1udWxsLGIubWVhc3VyZT1jLm1lYXN1cmUsYy5idWlsdCk6TGYoYSxiKX1mdW5jdGlvbiBnYihhLGIpe3ZhciBjPWIudGV4dC5jbGFzc05hbWUsZD1mYihhLGIpO2IudGV4dD09Yi5ub2RlJiYoYi5ub2RlPWQucHJlKSxiLnRleHQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZC5wcmUsYi50ZXh0KSxiLnRleHQ9ZC5wcmUsZC5iZ0NsYXNzIT1iLmJnQ2xhc3N8fGQudGV4dENsYXNzIT1iLnRleHRDbGFzcz8oYi5iZ0NsYXNzPWQuYmdDbGFzcyxiLnRleHRDbGFzcz1kLnRleHRDbGFzcyxoYihiKSk6YyYmKGIudGV4dC5jbGFzc05hbWU9Yyl9ZnVuY3Rpb24gaGIoYSl7ZWIoYSksYS5saW5lLndyYXBDbGFzcz9kYihhKS5jbGFzc05hbWU9YS5saW5lLndyYXBDbGFzczphLm5vZGUhPWEudGV4dCYmKGEubm9kZS5jbGFzc05hbWU9IiIpO3ZhciBiPWEudGV4dENsYXNzP2EudGV4dENsYXNzKyIgIisoYS5saW5lLnRleHRDbGFzc3x8IiIpOmEubGluZS50ZXh0Q2xhc3M7YS50ZXh0LmNsYXNzTmFtZT1ifHwiIn1mdW5jdGlvbiBpYihhLGIsYyxkKXtiLmd1dHRlciYmKGIubm9kZS5yZW1vdmVDaGlsZChiLmd1dHRlciksYi5ndXR0ZXI9bnVsbCk7dmFyIGU9Yi5saW5lLmd1dHRlck1hcmtlcnM7aWYoYS5vcHRpb25zLmxpbmVOdW1iZXJzfHxlKXt2YXIgZj1kYihiKSxnPWIuZ3V0dGVyPWpoKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXIiLCJsZWZ0OiAiKyhhLm9wdGlvbnMuZml4ZWRHdXR0ZXI/ZC5maXhlZFBvczotZC5ndXR0ZXJUb3RhbFdpZHRoKSsicHg7IHdpZHRoOiAiK2QuZ3V0dGVyVG90YWxXaWR0aCsicHgiKTtpZihhLmRpc3BsYXkuaW5wdXQuc2V0VW5lZGl0YWJsZShnKSxmLmluc2VydEJlZm9yZShnLGIudGV4dCksYi5saW5lLmd1dHRlckNsYXNzJiYoZy5jbGFzc05hbWUrPSIgIitiLmxpbmUuZ3V0dGVyQ2xhc3MpLCFhLm9wdGlvbnMubGluZU51bWJlcnN8fGUmJmVbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXXx8KGIubGluZU51bWJlcj1nLmFwcGVuZENoaWxkKGpoKCJkaXYiLFMoYS5vcHRpb25zLGMpLCJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0IiwibGVmdDogIitkLmd1dHRlckxlZnRbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSsicHg7IHdpZHRoOiAiK2EuZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCsicHgiKSkpLGUpZm9yKHZhciBoPTA7aDxhLm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7KytoKXt2YXIgaT1hLm9wdGlvbnMuZ3V0dGVyc1toXSxqPWUuaGFzT3duUHJvcGVydHkoaSkmJmVbaV07aiYmZy5hcHBlbmRDaGlsZChqaCgiZGl2Iixbal0sIkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCIsImxlZnQ6ICIrZC5ndXR0ZXJMZWZ0W2ldKyJweDsgd2lkdGg6ICIrZC5ndXR0ZXJXaWR0aFtpXSsicHgiKSl9fX1mdW5jdGlvbiBqYihhLGIsYyl7Yi5hbGlnbmFibGUmJihiLmFsaWduYWJsZT1udWxsKTtmb3IodmFyIGUsZD1iLm5vZGUuZmlyc3RDaGlsZDtkO2Q9ZSl7dmFyIGU9ZC5uZXh0U2libGluZzsiQ29kZU1pcnJvci1saW5ld2lkZ2V0Ij09ZC5jbGFzc05hbWUmJmIubm9kZS5yZW1vdmVDaGlsZChkKX1sYihhLGIsYyl9ZnVuY3Rpb24ga2IoYSxiLGMsZCl7dmFyIGU9ZmIoYSxiKTtyZXR1cm4gYi50ZXh0PWIubm9kZT1lLnByZSxlLmJnQ2xhc3MmJihiLmJnQ2xhc3M9ZS5iZ0NsYXNzKSxlLnRleHRDbGFzcyYmKGIudGV4dENsYXNzPWUudGV4dENsYXNzKSxoYihiKSxpYihhLGIsYyxkKSxsYihhLGIsZCksYi5ub2RlfWZ1bmN0aW9uIGxiKGEsYixjKXtpZihtYihhLGIubGluZSxiLGMsITApLGIucmVzdClmb3IodmFyIGQ9MDtkPGIucmVzdC5sZW5ndGg7ZCsrKW1iKGEsYi5yZXN0W2RdLGIsYywhMSl9ZnVuY3Rpb24gbWIoYSxiLGMsZCxlKXtpZihiLndpZGdldHMpZm9yKHZhciBmPWRiKGMpLGc9MCxoPWIud2lkZ2V0cztnPGgubGVuZ3RoOysrZyl7dmFyIGk9aFtnXSxqPWpoKCJkaXYiLFtpLm5vZGVdLCJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKTtpLmhhbmRsZU1vdXNlRXZlbnRzfHxqLnNldEF0dHJpYnV0ZSgiY20taWdub3JlLWV2ZW50cyIsInRydWUiKSxuYihpLGosYyxkKSxhLmRpc3BsYXkuaW5wdXQuc2V0VW5lZGl0YWJsZShqKSxlJiZpLmFib3ZlP2YuaW5zZXJ0QmVmb3JlKGosYy5ndXR0ZXJ8fGMudGV4dCk6Zi5hcHBlbmRDaGlsZChqKSxIZyhpLCJyZWRyYXciKX19ZnVuY3Rpb24gbmIoYSxiLGMsZCl7aWYoYS5ub0hTY3JvbGwpeyhjLmFsaWduYWJsZXx8KGMuYWxpZ25hYmxlPVtdKSkucHVzaChiKTt2YXIgZT1kLndyYXBwZXJXaWR0aDtiLnN0eWxlLmxlZnQ9ZC5maXhlZFBvcysicHgiLGEuY292ZXJHdXR0ZXJ8fChlLT1kLmd1dHRlclRvdGFsV2lkdGgsYi5zdHlsZS5wYWRkaW5nTGVmdD1kLmd1dHRlclRvdGFsV2lkdGgrInB4IiksYi5zdHlsZS53aWR0aD1lKyJweCJ9YS5jb3Zlckd1dHRlciYmKGIuc3R5bGUuekluZGV4PTUsYi5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGEubm9IU2Nyb2xsfHwoYi5zdHlsZS5tYXJnaW5MZWZ0PS1kLmd1dHRlclRvdGFsV2lkdGgrInB4IikpfWZ1bmN0aW9uIHFiKGEpe3JldHVybiBvYihhLmxpbmUsYS5jaCl9ZnVuY3Rpb24gcmIoYSxiKXtyZXR1cm4gcGIoYSxiKTwwP2I6YX1mdW5jdGlvbiBzYihhLGIpe3JldHVybiBwYihhLGIpPDA/YTpifWZ1bmN0aW9uIHRiKGEpe2Euc3RhdGUuZm9jdXNlZHx8KGEuZGlzcGxheS5pbnB1dC5mb2N1cygpLFRkKGEpKX1mdW5jdGlvbiB1YihhKXtyZXR1cm4gYS5vcHRpb25zLnJlYWRPbmx5fHxhLmRvYy5jYW50RWRpdH1mdW5jdGlvbiB3YihhLGIsYyxkKXt2YXIgZT1hLmRvYzthLmRpc3BsYXkuc2hpZnQ9ITEsZHx8KGQ9ZS5zZWwpO3ZhciBmPUNoKGIpLGc9bnVsbDthLnN0YXRlLnBhc3RlSW5jb21pbmcmJmQucmFuZ2VzLmxlbmd0aD4xJiYodmImJnZiLmpvaW4oIlxuIik9PWI/Zz0wPT1kLnJhbmdlcy5sZW5ndGgldmIubGVuZ3RoJiYkZyh2YixDaCk6Zi5sZW5ndGg9PWQucmFuZ2VzLmxlbmd0aCYmKGc9JGcoZixmdW5jdGlvbihhKXtyZXR1cm5bYV19KSkpO2Zvcih2YXIgaD1kLnJhbmdlcy5sZW5ndGgtMTtoPj0wO2gtLSl7dmFyIGk9ZC5yYW5nZXNbaF0saj1pLmZyb20oKSxrPWkudG8oKTtpLmVtcHR5KCkmJihjJiZjPjA/aj1vYihqLmxpbmUsai5jaC1jKTphLnN0YXRlLm92ZXJ3cml0ZSYmIWEuc3RhdGUucGFzdGVJbmNvbWluZyYmKGs9b2Ioay5saW5lLE1hdGgubWluKGFnKGUsay5saW5lKS50ZXh0Lmxlbmd0aCxrLmNoK1hnKGYpLmxlbmd0aCkpKSk7dmFyIGw9YS5jdXJPcC51cGRhdGVJbnB1dCxtPXtmcm9tOmosdG86ayx0ZXh0Omc/Z1toJWcubGVuZ3RoXTpmLG9yaWdpbjphLnN0YXRlLnBhc3RlSW5jb21pbmc/InBhc3RlIjphLnN0YXRlLmN1dEluY29taW5nPyJjdXQiOiIraW5wdXQifTtpZihiZShhLmRvYyxtKSxIZyhhLCJpbnB1dFJlYWQiLGEsbSksYiYmIWEuc3RhdGUucGFzdGVJbmNvbWluZyYmYS5vcHRpb25zLmVsZWN0cmljQ2hhcnMmJmEub3B0aW9ucy5zbWFydEluZGVudCYmaS5oZWFkLmNoPDEwMCYmKCFofHxkLnJhbmdlc1toLTFdLmhlYWQubGluZSE9aS5oZWFkLmxpbmUpKXt2YXIgbj1hLmdldE1vZGVBdChpLmhlYWQpLG89WGQobSk7aWYobi5lbGVjdHJpY0NoYXJzKXtmb3IodmFyIHA9MDtwPG4uZWxlY3RyaWNDaGFycy5sZW5ndGg7cCsrKWlmKGIuaW5kZXhPZihuLmVsZWN0cmljQ2hhcnMuY2hhckF0KHApKT4tMSl7cGUoYSxvLmxpbmUsInNtYXJ0Iik7YnJlYWt9fWVsc2Ugbi5lbGVjdHJpY0lucHV0JiZuLmVsZWN0cmljSW5wdXQudGVzdChhZyhlLG8ubGluZSkudGV4dC5zbGljZSgwLG8uY2gpKSYmcGUoYSxvLmxpbmUsInNtYXJ0Iil9fW5lKGEpLGEuY3VyT3AudXBkYXRlSW5wdXQ9bCxhLmN1ck9wLnR5cGluZz0hMCxhLnN0YXRlLnBhc3RlSW5jb21pbmc9YS5zdGF0ZS5jdXRJbmNvbWluZz0hMX1mdW5jdGlvbiB4YihhKXtmb3IodmFyIGI9W10sYz1bXSxkPTA7ZDxhLmRvYy5zZWwucmFuZ2VzLmxlbmd0aDtkKyspe3ZhciBlPWEuZG9jLnNlbC5yYW5nZXNbZF0uaGVhZC5saW5lLGY9e2FuY2hvcjpvYihlLDApLGhlYWQ6b2IoZSsxLDApfTtjLnB1c2goZiksYi5wdXNoKGEuZ2V0UmFuZ2UoZi5hbmNob3IsZi5oZWFkKSl9cmV0dXJue3RleHQ6YixyYW5nZXM6Y319ZnVuY3Rpb24geWIoYSl7YS5zZXRBdHRyaWJ1dGUoImF1dG9jb3JyZWN0Iiwib2ZmIiksYS5zZXRBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwib2ZmIiksYS5zZXRBdHRyaWJ1dGUoInNwZWxsY2hlY2siLCJmYWxzZSIpfWZ1bmN0aW9uIHpiKGEpe3RoaXMuY209YSx0aGlzLnByZXZJbnB1dD0iIix0aGlzLnBvbGxpbmdGYXN0PSExLHRoaXMucG9sbGluZz1uZXcgU2csdGhpcy5pbmFjY3VyYXRlU2VsZWN0aW9uPSExLHRoaXMuaGFzU2VsZWN0aW9uPSExfWZ1bmN0aW9uIEFiKCl7dmFyIGE9amgoInRleHRhcmVhIixudWxsLG51bGwsInBvc2l0aW9uOiBhYnNvbHV0ZTsgcGFkZGluZzogMDsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxZW07IG91dGxpbmU6IG5vbmUiKSxiPWpoKCJkaXYiLFthXSxudWxsLCJvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAzcHg7IGhlaWdodDogMHB4OyIpO3JldHVybiBmP2Euc3R5bGUud2lkdGg9IjEwMDBweCI6YS5zZXRBdHRyaWJ1dGUoIndyYXAiLCJvZmYiKSxtJiYoYS5zdHlsZS5ib3JkZXI9IjFweCBzb2xpZCBibGFjayIpLHliKGEpLGJ9ZnVuY3Rpb24gQmIoYSl7dGhpcy5jbT1hLHRoaXMubGFzdEFuY2hvck5vZGU9dGhpcy5sYXN0QW5jaG9yT2Zmc2V0PXRoaXMubGFzdEZvY3VzTm9kZT10aGlzLmxhc3RGb2N1c09mZnNldD1udWxsLHRoaXMucG9sbGluZz1uZXcgU2d9ZnVuY3Rpb24gQ2IoYSxiKXt2YXIgYz11YyhhLGIubGluZSk7aWYoIWN8fGMuaGlkZGVuKXJldHVybiBudWxsO3ZhciBkPWFnKGEuZG9jLGIubGluZSksZT1yYyhjLGQsYi5saW5lKSxmPWhnKGQpLGc9ImxlZnQiO2lmKGYpe3ZhciBoPVNoKGYsYi5jaCk7Zz1oJTI/InJpZ2h0IjoibGVmdCJ9dmFyIGk9eWMoZS5tYXAsYi5jaCwibGVmdCIpO3JldHVybiBpLm9mZnNldD0icmlnaHQiPT1pLmNvbGxhcHNlP2kuZW5kOmkuc3RhcnQsaX1mdW5jdGlvbiBEYihhLGIpe3JldHVybiBiJiYoYS5iYWQ9ITApLGF9ZnVuY3Rpb24gRWIoYSxiLGMpe3ZhciBkO2lmKGI9PWEuZGlzcGxheS5saW5lRGl2KXtpZihkPWEuZGlzcGxheS5saW5lRGl2LmNoaWxkTm9kZXNbY10sIWQpcmV0dXJuIERiKGEuY2xpcFBvcyhvYihhLmRpc3BsYXkudmlld1RvLTEpKSwhMCk7Yj1udWxsLGM9MH1lbHNlIGZvcihkPWI7O2Q9ZC5wYXJlbnROb2RlKXtpZighZHx8ZD09YS5kaXNwbGF5LmxpbmVEaXYpcmV0dXJuIG51bGw7aWYoZC5wYXJlbnROb2RlJiZkLnBhcmVudE5vZGU9PWEuZGlzcGxheS5saW5lRGl2KWJyZWFrfWZvcih2YXIgZT0wO2U8YS5kaXNwbGF5LnZpZXcubGVuZ3RoO2UrKyl7dmFyIGY9YS5kaXNwbGF5LnZpZXdbZV07aWYoZi5ub2RlPT1kKXJldHVybiBGYihmLGIsYyl9fWZ1bmN0aW9uIEZiKGEsYixjKXtmdW5jdGlvbiBrKGIsYyxkKXtmb3IodmFyIGU9LTE7ZTwoaj9qLmxlbmd0aDowKTtlKyspZm9yKHZhciBmPTA+ZT9pLm1hcDpqW2VdLGc9MDtnPGYubGVuZ3RoO2crPTMpe3ZhciBoPWZbZysyXTtpZihoPT1ifHxoPT1jKXt2YXIgaz1lZygwPmU/YS5saW5lOmEucmVzdFtlXSksbD1mW2ddK2Q7cmV0dXJuKDA+ZHx8aCE9YikmJihsPWZbZysoZD8xOjApXSksb2IoayxsKX19fXZhciBkPWEudGV4dC5maXJzdENoaWxkLGU9ITE7aWYoIWJ8fCFuaChkLGIpKXJldHVybiBEYihvYihlZyhhLmxpbmUpLDApLCEwKTtpZihiPT1kJiYoZT0hMCxiPWQuY2hpbGROb2Rlc1tjXSxjPTAsIWIpKXt2YXIgZj1hLnJlc3Q/WGcoYS5yZXN0KTphLmxpbmU7cmV0dXJuIERiKG9iKGVnKGYpLGYudGV4dC5sZW5ndGgpLGUpfXZhciBnPTM9PWIubm9kZVR5cGU/YjpudWxsLGg9Yjtmb3IoZ3x8MSE9Yi5jaGlsZE5vZGVzLmxlbmd0aHx8MyE9Yi5maXJzdENoaWxkLm5vZGVUeXBlfHwoZz1iLmZpcnN0Q2hpbGQsYyYmKGM9Zy5ub2RlVmFsdWUubGVuZ3RoKSk7aC5wYXJlbnROb2RlIT1kOyloPWgucGFyZW50Tm9kZTt2YXIgaT1hLm1lYXN1cmUsaj1pLm1hcHMsbD1rKGcsaCxjKTtpZihsKXJldHVybiBEYihsLGUpO2Zvcih2YXIgbT1oLm5leHRTaWJsaW5nLG49Zz9nLm5vZGVWYWx1ZS5sZW5ndGgtYzowO207bT1tLm5leHRTaWJsaW5nKXtpZihsPWsobSxtLmZpcnN0Q2hpbGQsMCkpcmV0dXJuIERiKG9iKGwubGluZSxsLmNoLW4pLGUpO24rPW0udGV4dENvbnRlbnQubGVuZ3RofWZvcih2YXIgbz1oLnByZXZpb3VzU2libGluZyxuPWM7bztvPW8ucHJldmlvdXNTaWJsaW5nKXtpZihsPWsobyxvLmZpcnN0Q2hpbGQsLTEpKXJldHVybiBEYihvYihsLmxpbmUsbC5jaCtuKSxlKTtuKz1tLnRleHRDb250ZW50Lmxlbmd0aH19ZnVuY3Rpb24gR2IoYSxiLGMsZCxlKXtmdW5jdGlvbiBoKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gYi5pZD09YX19ZnVuY3Rpb24gaShiKXtpZigxPT1iLm5vZGVUeXBlKXt2YXIgYz1iLmdldEF0dHJpYnV0ZSgiY20tdGV4dCIpO2lmKG51bGwhPWMpcmV0dXJuIiI9PWMmJihjPWIudGV4dENvbnRlbnQucmVwbGFjZSgvXHUyMDBiL2csIiIpKSxmKz1jLHZvaWQgMDt2YXIgayxqPWIuZ2V0QXR0cmlidXRlKCJjbS1tYXJrZXIiKTtpZihqKXt2YXIgbD1hLmZpbmRNYXJrcyhvYihkLDApLG9iKGUrMSwwKSxoKCtqKSk7cmV0dXJuIGwubGVuZ3RoJiYoaz1sWzBdLmZpbmQoKSkmJihmKz1iZyhhLmRvYyxrLmZyb20say50bykuam9pbigiXG4iKSksdm9pZCAwfWlmKCJmYWxzZSI9PWIuZ2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSlyZXR1cm47Zm9yKHZhciBtPTA7bTxiLmNoaWxkTm9kZXMubGVuZ3RoO20rKylpKGIuY2hpbGROb2Rlc1ttXSk7L14ocHJlfGRpdnxwKSQvaS50ZXN0KGIubm9kZU5hbWUpJiYoZz0hMCl9ZWxzZSBpZigzPT1iLm5vZGVUeXBlKXt2YXIgbj1iLm5vZGVWYWx1ZTtpZighbilyZXR1cm47ZyYmKGYrPSJcbiIsZz0hMSksZis9bn19Zm9yKHZhciBmPSIiLGc9ITE7aShiKSxiIT1jOyliPWIubmV4dFNpYmxpbmc7cmV0dXJuIGZ9ZnVuY3Rpb24gSGIoYSxiKXt0aGlzLnJhbmdlcz1hLHRoaXMucHJpbUluZGV4PWJ9ZnVuY3Rpb24gSWIoYSxiKXt0aGlzLmFuY2hvcj1hLHRoaXMuaGVhZD1ifWZ1bmN0aW9uIEpiKGEsYil7dmFyIGM9YVtiXTthLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gcGIoYS5mcm9tKCksYi5mcm9tKCkpfSksYj1aZyhhLGMpO2Zvcih2YXIgZD0xO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZT1hW2RdLGY9YVtkLTFdO2lmKHBiKGYudG8oKSxlLmZyb20oKSk+PTApe3ZhciBnPXNiKGYuZnJvbSgpLGUuZnJvbSgpKSxoPXJiKGYudG8oKSxlLnRvKCkpLGk9Zi5lbXB0eSgpP2UuZnJvbSgpPT1lLmhlYWQ6Zi5mcm9tKCk9PWYuaGVhZDtiPj1kJiYtLWIsYS5zcGxpY2UoLS1kLDIsbmV3IEliKGk/aDpnLGk/ZzpoKSl9fXJldHVybiBuZXcgSGIoYSxiKX1mdW5jdGlvbiBLYihhLGIpe3JldHVybiBuZXcgSGIoW25ldyBJYihhLGJ8fGEpXSwwKX1mdW5jdGlvbiBMYihhLGIpe3JldHVybiBNYXRoLm1heChhLmZpcnN0LE1hdGgubWluKGIsYS5maXJzdCthLnNpemUtMSkpfWZ1bmN0aW9uIE1iKGEsYil7aWYoYi5saW5lPGEuZmlyc3QpcmV0dXJuIG9iKGEuZmlyc3QsMCk7dmFyIGM9YS5maXJzdCthLnNpemUtMTtyZXR1cm4gYi5saW5lPmM/b2IoYyxhZyhhLGMpLnRleHQubGVuZ3RoKTpOYihiLGFnKGEsYi5saW5lKS50ZXh0Lmxlbmd0aCl9ZnVuY3Rpb24gTmIoYSxiKXt2YXIgYz1hLmNoO3JldHVybiBudWxsPT1jfHxjPmI/b2IoYS5saW5lLGIpOjA+Yz9vYihhLmxpbmUsMCk6YX1mdW5jdGlvbiBPYihhLGIpe3JldHVybiBiPj1hLmZpcnN0JiZiPGEuZmlyc3QrYS5zaXplfWZ1bmN0aW9uIFBiKGEsYil7Zm9yKHZhciBjPVtdLGQ9MDtkPGIubGVuZ3RoO2QrKyljW2RdPU1iKGEsYltkXSk7cmV0dXJuIGN9ZnVuY3Rpb24gUWIoYSxiLGMsZCl7aWYoYS5jbSYmYS5jbS5kaXNwbGF5LnNoaWZ0fHxhLmV4dGVuZCl7dmFyIGU9Yi5hbmNob3I7aWYoZCl7dmFyIGY9cGIoYyxlKTwwO2YhPXBiKGQsZSk8MD8oZT1jLGM9ZCk6ZiE9cGIoYyxkKTwwJiYoYz1kKX1yZXR1cm4gbmV3IEliKGUsYyl9cmV0dXJuIG5ldyBJYihkfHxjLGMpfWZ1bmN0aW9uIFJiKGEsYixjLGQpe1hiKGEsbmV3IEhiKFtRYihhLGEuc2VsLnByaW1hcnkoKSxiLGMpXSwwKSxkKX1mdW5jdGlvbiBTYihhLGIsYyl7Zm9yKHZhciBkPVtdLGU9MDtlPGEuc2VsLnJhbmdlcy5sZW5ndGg7ZSsrKWRbZV09UWIoYSxhLnNlbC5yYW5nZXNbZV0sYltlXSxudWxsKTt2YXIgZj1KYihkLGEuc2VsLnByaW1JbmRleCk7WGIoYSxmLGMpfWZ1bmN0aW9uIFRiKGEsYixjLGQpe3ZhciBlPWEuc2VsLnJhbmdlcy5zbGljZSgwKTtlW2JdPWMsWGIoYSxKYihlLGEuc2VsLnByaW1JbmRleCksZCl9ZnVuY3Rpb24gVWIoYSxiLGMsZCl7WGIoYSxLYihiLGMpLGQpfWZ1bmN0aW9uIFZiKGEsYil7dmFyIGM9e3JhbmdlczpiLnJhbmdlcyx1cGRhdGU6ZnVuY3Rpb24oYil7dGhpcy5yYW5nZXM9W107Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspdGhpcy5yYW5nZXNbY109bmV3IEliKE1iKGEsYltjXS5hbmNob3IpLE1iKGEsYltjXS5oZWFkKSl9fTtyZXR1cm4gRmcoYSwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIixhLGMpLGEuY20mJkZnKGEuY20sImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsYS5jbSxjKSxjLnJhbmdlcyE9Yi5yYW5nZXM/SmIoYy5yYW5nZXMsYy5yYW5nZXMubGVuZ3RoLTEpOmJ9ZnVuY3Rpb24gV2IoYSxiLGMpe3ZhciBkPWEuaGlzdG9yeS5kb25lLGU9WGcoZCk7ZSYmZS5yYW5nZXM/KGRbZC5sZW5ndGgtMV09YixZYihhLGIsYykpOlhiKGEsYixjKX1mdW5jdGlvbiBYYihhLGIsYyl7WWIoYSxiLGMpLG9nKGEsYS5zZWwsYS5jbT9hLmNtLmN1ck9wLmlkOjAvMCxjKX1mdW5jdGlvbiBZYihhLGIsYyl7KExnKGEsImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIpfHxhLmNtJiZMZyhhLmNtLCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiKSkmJihiPVZiKGEsYikpO3ZhciBkPWMmJmMuYmlhc3x8KHBiKGIucHJpbWFyeSgpLmhlYWQsYS5zZWwucHJpbWFyeSgpLmhlYWQpPDA/LTE6MSk7WmIoYSxfYihhLGIsZCwhMCkpLGMmJmMuc2Nyb2xsPT09ITF8fCFhLmNtfHxuZShhLmNtKX1mdW5jdGlvbiBaYihhLGIpe2IuZXF1YWxzKGEuc2VsKXx8KGEuc2VsPWIsYS5jbSYmKGEuY20uY3VyT3AudXBkYXRlSW5wdXQ9YS5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPSEwLEtnKGEuY20pKSxIZyhhLCJjdXJzb3JBY3Rpdml0eSIsYSkpfWZ1bmN0aW9uICRiKGEpe1piKGEsX2IoYSxhLnNlbCxudWxsLCExKSxQZyl9ZnVuY3Rpb24gX2IoYSxiLGMsZCl7Zm9yKHZhciBlLGY9MDtmPGIucmFuZ2VzLmxlbmd0aDtmKyspe3ZhciBnPWIucmFuZ2VzW2ZdLGg9YWMoYSxnLmFuY2hvcixjLGQpLGk9YWMoYSxnLmhlYWQsYyxkKTsoZXx8aCE9Zy5hbmNob3J8fGkhPWcuaGVhZCkmJihlfHwoZT1iLnJhbmdlcy5zbGljZSgwLGYpKSxlW2ZdPW5ldyBJYihoLGkpKX1yZXR1cm4gZT9KYihlLGIucHJpbUluZGV4KTpifWZ1bmN0aW9uIGFjKGEsYixjLGQpe3ZhciBlPSExLGY9YixnPWN8fDE7YS5jYW50RWRpdD0hMTthOmZvcig7Oyl7dmFyIGg9YWcoYSxmLmxpbmUpO2lmKGgubWFya2VkU3BhbnMpZm9yKHZhciBpPTA7aTxoLm1hcmtlZFNwYW5zLmxlbmd0aDsrK2kpe3ZhciBqPWgubWFya2VkU3BhbnNbaV0saz1qLm1hcmtlcjtpZigobnVsbD09ai5mcm9tfHwoay5pbmNsdXNpdmVMZWZ0P2ouZnJvbTw9Zi5jaDpqLmZyb208Zi5jaCkpJiYobnVsbD09ai50b3x8KGsuaW5jbHVzaXZlUmlnaHQ/ai50bz49Zi5jaDpqLnRvPmYuY2gpKSl7aWYoZCYmKEZnKGssImJlZm9yZUN1cnNvckVudGVyIiksay5leHBsaWNpdGx5Q2xlYXJlZCkpe2lmKGgubWFya2VkU3BhbnMpey0taTtjb250aW51ZX1icmVha31pZighay5hdG9taWMpY29udGludWU7dmFyIGw9ay5maW5kKDA+Zz8tMToxKTtpZigwPT1wYihsLGYpJiYobC5jaCs9ZyxsLmNoPDA/bD1sLmxpbmU+YS5maXJzdD9NYihhLG9iKGwubGluZS0xKSk6bnVsbDpsLmNoPmgudGV4dC5sZW5ndGgmJihsPWwubGluZTxhLmZpcnN0K2Euc2l6ZS0xP29iKGwubGluZSsxLDApOm51bGwpLCFsKSl7aWYoZSlyZXR1cm4gZD8oYS5jYW50RWRpdD0hMCxvYihhLmZpcnN0LDApKTphYyhhLGIsYywhMCk7ZT0hMCxsPWIsZz0tZ31mPWw7Y29udGludWUgYX19cmV0dXJuIGZ9fWZ1bmN0aW9uIGJjKGEpe2EuZGlzcGxheS5pbnB1dC5zaG93U2VsZWN0aW9uKGEuZGlzcGxheS5pbnB1dC5wcmVwYXJlU2VsZWN0aW9uKCkpfWZ1bmN0aW9uIGNjKGEsYil7Zm9yKHZhciBjPWEuZG9jLGQ9e30sZT1kLmN1cnNvcnM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGY9ZC5zZWxlY3Rpb249ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGc9MDtnPGMuc2VsLnJhbmdlcy5sZW5ndGg7ZysrKWlmKGIhPT0hMXx8ZyE9Yy5zZWwucHJpbUluZGV4KXt2YXIgaD1jLnNlbC5yYW5nZXNbZ10saT1oLmVtcHR5KCk7KGl8fGEub3B0aW9ucy5zaG93Q3Vyc29yV2hlblNlbGVjdGluZykmJmRjKGEsaCxlKSxpfHxlYyhhLGgsZil9cmV0dXJuIGR9ZnVuY3Rpb24gZGMoYSxiLGMpe3ZhciBkPUpjKGEsYi5oZWFkLCJkaXYiLG51bGwsbnVsbCwhYS5vcHRpb25zLnNpbmdsZUN1cnNvckhlaWdodFBlckxpbmUpLGU9Yy5hcHBlbmRDaGlsZChqaCgiZGl2IiwiXHhhMCIsIkNvZGVNaXJyb3ItY3Vyc29yIikpO2lmKGUuc3R5bGUubGVmdD1kLmxlZnQrInB4IixlLnN0eWxlLnRvcD1kLnRvcCsicHgiLGUuc3R5bGUuaGVpZ2h0PU1hdGgubWF4KDAsZC5ib3R0b20tZC50b3ApKmEub3B0aW9ucy5jdXJzb3JIZWlnaHQrInB4IixkLm90aGVyKXt2YXIgZj1jLmFwcGVuZENoaWxkKGpoKCJkaXYiLCJceGEwIiwiQ29kZU1pcnJvci1jdXJzb3IgQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3IiKSk7Zi5zdHlsZS5kaXNwbGF5PSIiLGYuc3R5bGUubGVmdD1kLm90aGVyLmxlZnQrInB4IixmLnN0eWxlLnRvcD1kLm90aGVyLnRvcCsicHgiLGYuc3R5bGUuaGVpZ2h0PS44NSooZC5vdGhlci5ib3R0b20tZC5vdGhlci50b3ApKyJweCJ9fWZ1bmN0aW9uIGVjKGEsYixjKXtmdW5jdGlvbiBqKGEsYixjLGQpezA+YiYmKGI9MCksYj1NYXRoLnJvdW5kKGIpLGQ9TWF0aC5yb3VuZChkKSxmLmFwcGVuZENoaWxkKGpoKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2VsZWN0ZWQiLCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIrYSsicHg7IHRvcDogIitiKyJweDsgd2lkdGg6ICIrKG51bGw9PWM/aS1hOmMpKyJweDsgaGVpZ2h0OiAiKyhkLWIpKyJweCIpKX1mdW5jdGlvbiBrKGIsYyxkKXtmdW5jdGlvbiBtKGMsZCl7cmV0dXJuIEljKGEsb2IoYixjKSwiZGl2IixmLGQpfXZhciBrLGwsZj1hZyhlLGIpLGc9Zi50ZXh0Lmxlbmd0aDtyZXR1cm4gSWgoaGcoZiksY3x8MCxudWxsPT1kP2c6ZCxmdW5jdGlvbihhLGIsZSl7dmFyIG4sbyxwLGY9bShhLCJsZWZ0Iik7aWYoYT09YiluPWYsbz1wPWYubGVmdDtlbHNle2lmKG49bShiLTEsInJpZ2h0IiksInJ0bCI9PWUpe3ZhciBxPWY7Zj1uLG49cX1vPWYubGVmdCxwPW4ucmlnaHR9bnVsbD09YyYmMD09YSYmKG89aCksbi50b3AtZi50b3A+MyYmKGoobyxmLnRvcCxudWxsLGYuYm90dG9tKSxvPWgsZi5ib3R0b208bi50b3AmJmoobyxmLmJvdHRvbSxudWxsLG4udG9wKSksbnVsbD09ZCYmYj09ZyYmKHA9aSksKCFrfHxmLnRvcDxrLnRvcHx8Zi50b3A9PWsudG9wJiZmLmxlZnQ8ay5sZWZ0KSYmKGs9ZiksKCFsfHxuLmJvdHRvbT5sLmJvdHRvbXx8bi5ib3R0b209PWwuYm90dG9tJiZuLnJpZ2h0PmwucmlnaHQpJiYobD1uKSxoKzE+byYmKG89aCksaihvLG4udG9wLHAtbyxuLmJvdHRvbSl9KSx7c3RhcnQ6ayxlbmQ6bH19dmFyIGQ9YS5kaXNwbGF5LGU9YS5kb2MsZj1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZz1tYyhhLmRpc3BsYXkpLGg9Zy5sZWZ0LGk9TWF0aC5tYXgoZC5zaXplcldpZHRoLG9jKGEpLWQuc2l6ZXIub2Zmc2V0TGVmdCktZy5yaWdodCxsPWIuZnJvbSgpLG09Yi50bygpO2lmKGwubGluZT09bS5saW5lKWsobC5saW5lLGwuY2gsbS5jaCk7ZWxzZXt2YXIgbj1hZyhlLGwubGluZSksbz1hZyhlLG0ubGluZSkscD1uZihuKT09bmYobykscT1rKGwubGluZSxsLmNoLHA/bi50ZXh0Lmxlbmd0aCsxOm51bGwpLmVuZCxyPWsobS5saW5lLHA/MDpudWxsLG0uY2gpLnN0YXJ0O3AmJihxLnRvcDxyLnRvcC0yPyhqKHEucmlnaHQscS50b3AsbnVsbCxxLmJvdHRvbSksaihoLHIudG9wLHIubGVmdCxyLmJvdHRvbSkpOmoocS5yaWdodCxxLnRvcCxyLmxlZnQtcS5yaWdodCxxLmJvdHRvbSkpLHEuYm90dG9tPHIudG9wJiZqKGgscS5ib3R0b20sbnVsbCxyLnRvcCl9Yy5hcHBlbmRDaGlsZChmKX1mdW5jdGlvbiBmYyhhKXtpZihhLnN0YXRlLmZvY3VzZWQpe3ZhciBiPWEuZGlzcGxheTtjbGVhckludGVydmFsKGIuYmxpbmtlcik7dmFyIGM9ITA7Yi5jdXJzb3JEaXYuc3R5bGUudmlzaWJpbGl0eT0iIixhLm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlPjA/Yi5ibGlua2VyPXNldEludGVydmFsKGZ1bmN0aW9uKCl7Yi5jdXJzb3JEaXYuc3R5bGUudmlzaWJpbGl0eT0oYz0hYyk/IiI6ImhpZGRlbiJ9LGEub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpOmEub3B0aW9ucy5jdXJzb3JCbGlua1JhdGU8MCYmKGIuY3Vyc29yRGl2LnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIpfX1mdW5jdGlvbiBnYyhhLGIpe2EuZG9jLm1vZGUuc3RhcnRTdGF0ZSYmYS5kb2MuZnJvbnRpZXI8YS5kaXNwbGF5LnZpZXdUbyYmYS5zdGF0ZS5oaWdobGlnaHQuc2V0KGIsY2goaGMsYSkpfWZ1bmN0aW9uIGhjKGEpe3ZhciBiPWEuZG9jO2lmKGIuZnJvbnRpZXI8Yi5maXJzdCYmKGIuZnJvbnRpZXI9Yi5maXJzdCksIShiLmZyb250aWVyPj1hLmRpc3BsYXkudmlld1RvKSl7dmFyIGM9K25ldyBEYXRlK2Eub3B0aW9ucy53b3JrVGltZSxkPURlKGIubW9kZSxqYyhhLGIuZnJvbnRpZXIpKSxlPVtdO2IuaXRlcihiLmZyb250aWVyLE1hdGgubWluKGIuZmlyc3QrYi5zaXplLGEuZGlzcGxheS52aWV3VG8rNTAwKSxmdW5jdGlvbihmKXtpZihiLmZyb250aWVyPj1hLmRpc3BsYXkudmlld0Zyb20pe3ZhciBnPWYuc3R5bGVzLGg9RmYoYSxmLGQsITApO2Yuc3R5bGVzPWguc3R5bGVzO3ZhciBpPWYuc3R5bGVDbGFzc2VzLGo9aC5jbGFzc2VzO2o/Zi5zdHlsZUNsYXNzZXM9ajppJiYoZi5zdHlsZUNsYXNzZXM9bnVsbCk7Zm9yKHZhciBrPSFnfHxnLmxlbmd0aCE9Zi5zdHlsZXMubGVuZ3RofHxpIT1qJiYoIWl8fCFqfHxpLmJnQ2xhc3MhPWouYmdDbGFzc3x8aS50ZXh0Q2xhc3MhPWoudGV4dENsYXNzKSxsPTA7IWsmJmw8Zy5sZW5ndGg7KytsKWs9Z1tsXSE9Zi5zdHlsZXNbbF07ayYmZS5wdXNoKGIuZnJvbnRpZXIpLGYuc3RhdGVBZnRlcj1EZShiLm1vZGUsZCl9ZWxzZSBIZihhLGYudGV4dCxkKSxmLnN0YXRlQWZ0ZXI9MD09Yi5mcm9udGllciU1P0RlKGIubW9kZSxkKTpudWxsO3JldHVybisrYi5mcm9udGllciwrbmV3IERhdGU+Yz8oZ2MoYSxhLm9wdGlvbnMud29ya0RlbGF5KSwhMCk6dm9pZCAwfSksZS5sZW5ndGgmJmFkKGEsZnVuY3Rpb24oKXtmb3IodmFyIGI9MDtiPGUubGVuZ3RoO2IrKyloZChhLGVbYl0sInRleHQiKX0pfX1mdW5jdGlvbiBpYyhhLGIsYyl7Zm9yKHZhciBkLGUsZj1hLmRvYyxnPWM/LTE6Yi0oYS5kb2MubW9kZS5pbm5lck1vZGU/MWUzOjEwMCksaD1iO2g+ZzstLWgpe2lmKGg8PWYuZmlyc3QpcmV0dXJuIGYuZmlyc3Q7dmFyIGk9YWcoZixoLTEpO2lmKGkuc3RhdGVBZnRlciYmKCFjfHxoPD1mLmZyb250aWVyKSlyZXR1cm4gaDt2YXIgaj1UZyhpLnRleHQsbnVsbCxhLm9wdGlvbnMudGFiU2l6ZSk7KG51bGw9PWV8fGQ+aikmJihlPWgtMSxkPWopfXJldHVybiBlfWZ1bmN0aW9uIGpjKGEsYixjKXt2YXIgZD1hLmRvYyxlPWEuZGlzcGxheTtpZighZC5tb2RlLnN0YXJ0U3RhdGUpcmV0dXJuITA7dmFyIGY9aWMoYSxiLGMpLGc9Zj5kLmZpcnN0JiZhZyhkLGYtMSkuc3RhdGVBZnRlcjtyZXR1cm4gZz1nP0RlKGQubW9kZSxnKTpFZShkLm1vZGUpLGQuaXRlcihmLGIsZnVuY3Rpb24oYyl7SGYoYSxjLnRleHQsZyk7dmFyIGg9Zj09Yi0xfHwwPT1mJTV8fGY+PWUudmlld0Zyb20mJmY8ZS52aWV3VG87Yy5zdGF0ZUFmdGVyPWg/RGUoZC5tb2RlLGcpOm51bGwsKytmfSksYyYmKGQuZnJvbnRpZXI9ZiksZ31mdW5jdGlvbiBrYyhhKXtyZXR1cm4gYS5saW5lU3BhY2Uub2Zmc2V0VG9wfWZ1bmN0aW9uIGxjKGEpe3JldHVybiBhLm1vdmVyLm9mZnNldEhlaWdodC1hLmxpbmVTcGFjZS5vZmZzZXRIZWlnaHR9ZnVuY3Rpb24gbWMoYSl7aWYoYS5jYWNoZWRQYWRkaW5nSClyZXR1cm4gYS5jYWNoZWRQYWRkaW5nSDt2YXIgYj1taChhLm1lYXN1cmUsamgoInByZSIsIngiKSksYz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZT93aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShiKTpiLmN1cnJlbnRTdHlsZSxkPXtsZWZ0OnBhcnNlSW50KGMucGFkZGluZ0xlZnQpLHJpZ2h0OnBhcnNlSW50KGMucGFkZGluZ1JpZ2h0KX07cmV0dXJuIGlzTmFOKGQubGVmdCl8fGlzTmFOKGQucmlnaHQpfHwoYS5jYWNoZWRQYWRkaW5nSD1kKSxkfWZ1bmN0aW9uIG5jKGEpe3JldHVybiBOZy1hLmRpc3BsYXkubmF0aXZlQmFyV2lkdGh9ZnVuY3Rpb24gb2MoYSl7cmV0dXJuIGEuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aC1uYyhhKS1hLmRpc3BsYXkuYmFyV2lkdGh9ZnVuY3Rpb24gcGMoYSl7cmV0dXJuIGEuZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQtbmMoYSktYS5kaXNwbGF5LmJhckhlaWdodH1mdW5jdGlvbiBxYyhhLGIsYyl7dmFyIGQ9YS5vcHRpb25zLmxpbmVXcmFwcGluZyxlPWQmJm9jKGEpO2lmKCFiLm1lYXN1cmUuaGVpZ2h0c3x8ZCYmYi5tZWFzdXJlLndpZHRoIT1lKXt2YXIgZj1iLm1lYXN1cmUuaGVpZ2h0cz1bXTtpZihkKXtiLm1lYXN1cmUud2lkdGg9ZTtmb3IodmFyIGc9Yi50ZXh0LmZpcnN0Q2hpbGQuZ2V0Q2xpZW50UmVjdHMoKSxoPTA7aDxnLmxlbmd0aC0xO2grKyl7dmFyIGk9Z1toXSxqPWdbaCsxXTtNYXRoLmFicyhpLmJvdHRvbS1qLmJvdHRvbSk+MiYmZi5wdXNoKChpLmJvdHRvbStqLnRvcCkvMi1jLnRvcCl9fWYucHVzaChjLmJvdHRvbS1jLnRvcCl9fWZ1bmN0aW9uIHJjKGEsYixjKXtpZihhLmxpbmU9PWIpcmV0dXJue21hcDphLm1lYXN1cmUubWFwLGNhY2hlOmEubWVhc3VyZS5jYWNoZX07Zm9yKHZhciBkPTA7ZDxhLnJlc3QubGVuZ3RoO2QrKylpZihhLnJlc3RbZF09PWIpcmV0dXJue21hcDphLm1lYXN1cmUubWFwc1tkXSxjYWNoZTphLm1lYXN1cmUuY2FjaGVzW2RdfTtmb3IodmFyIGQ9MDtkPGEucmVzdC5sZW5ndGg7ZCsrKWlmKGVnKGEucmVzdFtkXSk+YylyZXR1cm57bWFwOmEubWVhc3VyZS5tYXBzW2RdLGNhY2hlOmEubWVhc3VyZS5jYWNoZXNbZF0sYmVmb3JlOiEwfX1mdW5jdGlvbiBzYyhhLGIpe2I9bmYoYik7dmFyIGM9ZWcoYiksZD1hLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZD1uZXcgZWQoYS5kb2MsYixjKTtkLmxpbmVOPWM7dmFyIGU9ZC5idWlsdD1MZihhLGQpO3JldHVybiBkLnRleHQ9ZS5wcmUsbWgoYS5kaXNwbGF5LmxpbmVNZWFzdXJlLGUucHJlKSxkfWZ1bmN0aW9uIHRjKGEsYixjLGQpe3JldHVybiB3YyhhLHZjKGEsYiksYyxkKX1mdW5jdGlvbiB1YyhhLGIpe2lmKGI+PWEuZGlzcGxheS52aWV3RnJvbSYmYjxhLmRpc3BsYXkudmlld1RvKXJldHVybiBhLmRpc3BsYXkudmlld1tqZChhLGIpXTt2YXIgYz1hLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZDtyZXR1cm4gYyYmYj49Yy5saW5lTiYmYjxjLmxpbmVOK2Muc2l6ZT9jOnZvaWQgMH1mdW5jdGlvbiB2YyhhLGIpe3ZhciBjPWVnKGIpLGQ9dWMoYSxjKTtkJiYhZC50ZXh0P2Q9bnVsbDpkJiZkLmNoYW5nZXMmJmNiKGEsZCxjLGFiKGEpKSxkfHwoZD1zYyhhLGIpKTt2YXIgZT1yYyhkLGIsYyk7cmV0dXJue2xpbmU6Yix2aWV3OmQscmVjdDpudWxsLG1hcDplLm1hcCxjYWNoZTplLmNhY2hlLGJlZm9yZTplLmJlZm9yZSxoYXNIZWlnaHRzOiExfX1mdW5jdGlvbiB3YyhhLGIsYyxkLGUpe2IuYmVmb3JlJiYoYz0tMSk7dmFyIGcsZj1jKyhkfHwiIik7cmV0dXJuIGIuY2FjaGUuaGFzT3duUHJvcGVydHkoZik/Zz1iLmNhY2hlW2ZdOihiLnJlY3R8fChiLnJlY3Q9Yi52aWV3LnRleHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLGIuaGFzSGVpZ2h0c3x8KHFjKGEsYi52aWV3LGIucmVjdCksYi5oYXNIZWlnaHRzPSEwKSxnPXpjKGEsYixjLGQpLGcuYm9ndXN8fChiLmNhY2hlW2ZdPWcpKSx7bGVmdDpnLmxlZnQscmlnaHQ6Zy5yaWdodCx0b3A6ZT9nLnJ0b3A6Zy50b3AsYm90dG9tOmU/Zy5yYm90dG9tOmcuYm90dG9tfX1mdW5jdGlvbiB5YyhhLGIsYyl7Zm9yKHZhciBkLGUsZixnLGg9MDtoPGEubGVuZ3RoO2grPTMpe3ZhciBpPWFbaF0saj1hW2grMV07aWYoaT5iPyhlPTAsZj0xLGc9ImxlZnQiKTpqPmI/KGU9Yi1pLGY9ZSsxKTooaD09YS5sZW5ndGgtM3x8Yj09aiYmYVtoKzNdPmIpJiYoZj1qLWksZT1mLTEsYj49aiYmKGc9InJpZ2h0IikpLG51bGwhPWUpe2lmKGQ9YVtoKzJdLGk9PWomJmM9PShkLmluc2VydExlZnQ/ImxlZnQiOiJyaWdodCIpJiYoZz1jKSwibGVmdCI9PWMmJjA9PWUpZm9yKDtoJiZhW2gtMl09PWFbaC0zXSYmYVtoLTFdLmluc2VydExlZnQ7KWQ9YVsoaC09MykrMl0sZz0ibGVmdCI7aWYoInJpZ2h0Ij09YyYmZT09ai1pKWZvcig7aDxhLmxlbmd0aC0zJiZhW2grM109PWFbaCs0XSYmIWFbaCs1XS5pbnNlcnRMZWZ0OylkPWFbKGgrPTMpKzJdLGc9InJpZ2h0IjticmVha319cmV0dXJue25vZGU6ZCxzdGFydDplLGVuZDpmLGNvbGxhcHNlOmcsY292ZXJTdGFydDppLGNvdmVyRW5kOmp9fWZ1bmN0aW9uIHpjKGEsYixjLGYpe3ZhciBsLGc9eWMoYi5tYXAsYyxmKSxoPWcubm9kZSxpPWcuc3RhcnQsaj1nLmVuZCxrPWcuY29sbGFwc2U7aWYoMz09aC5ub2RlVHlwZSl7Zm9yKHZhciBtPTA7ND5tO20rKyl7Zm9yKDtpJiZpaChiLmxpbmUudGV4dC5jaGFyQXQoZy5jb3ZlclN0YXJ0K2kpKTspLS1pO2Zvcig7Zy5jb3ZlclN0YXJ0K2o8Zy5jb3ZlckVuZCYmaWgoYi5saW5lLnRleHQuY2hhckF0KGcuY292ZXJTdGFydCtqKSk7KSsrajtpZihkJiY5PmUmJjA9PWkmJmo9PWcuY292ZXJFbmQtZy5jb3ZlclN0YXJ0KWw9aC5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Vsc2UgaWYoZCYmYS5vcHRpb25zLmxpbmVXcmFwcGluZyl7dmFyIG49a2goaCxpLGopLmdldENsaWVudFJlY3RzKCk7bD1uLmxlbmd0aD9uWyJyaWdodCI9PWY/bi5sZW5ndGgtMTowXTp4Y31lbHNlIGw9a2goaCxpLGopLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfHx4YztpZihsLmxlZnR8fGwucmlnaHR8fDA9PWkpYnJlYWs7aj1pLGktPTEsaz0icmlnaHQifWQmJjExPmUmJihsPUFjKGEuZGlzcGxheS5tZWFzdXJlLGwpKX1lbHNle2k+MCYmKGs9Zj0icmlnaHQiKTt2YXIgbjtsPWEub3B0aW9ucy5saW5lV3JhcHBpbmcmJihuPWguZ2V0Q2xpZW50UmVjdHMoKSkubGVuZ3RoPjE/blsicmlnaHQiPT1mP24ubGVuZ3RoLTE6MF06aC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1pZihkJiY5PmUmJiFpJiYoIWx8fCFsLmxlZnQmJiFsLnJpZ2h0KSl7dmFyIG89aC5wYXJlbnROb2RlLmdldENsaWVudFJlY3RzKClbMF07bD1vP3tsZWZ0Om8ubGVmdCxyaWdodDpvLmxlZnQrUWMoYS5kaXNwbGF5KSx0b3A6by50b3AsYm90dG9tOm8uYm90dG9tfTp4Y31mb3IodmFyIHA9bC50b3AtYi5yZWN0LnRvcCxxPWwuYm90dG9tLWIucmVjdC50b3Ascj0ocCtxKS8yLHM9Yi52aWV3Lm1lYXN1cmUuaGVpZ2h0cyxtPTA7bTxzLmxlbmd0aC0xJiYhKHI8c1ttXSk7bSsrKTt2YXIgdD1tP3NbbS0xXTowLHU9c1ttXSx2PXtsZWZ0OigicmlnaHQiPT1rP2wucmlnaHQ6bC5sZWZ0KS1iLnJlY3QubGVmdCxyaWdodDooImxlZnQiPT1rP2wubGVmdDpsLnJpZ2h0KS1iLnJlY3QubGVmdCx0b3A6dCxib3R0b206dX07cmV0dXJuIGwubGVmdHx8bC5yaWdodHx8KHYuYm9ndXM9ITApLGEub3B0aW9ucy5zaW5nbGVDdXJzb3JIZWlnaHRQZXJMaW5lfHwodi5ydG9wPXAsdi5yYm90dG9tPXEpLHYNCn1mdW5jdGlvbiBBYyhhLGIpe2lmKCF3aW5kb3cuc2NyZWVufHxudWxsPT1zY3JlZW4ubG9naWNhbFhEUEl8fHNjcmVlbi5sb2dpY2FsWERQST09c2NyZWVuLmRldmljZVhEUEl8fCFHaChhKSlyZXR1cm4gYjt2YXIgYz1zY3JlZW4ubG9naWNhbFhEUEkvc2NyZWVuLmRldmljZVhEUEksZD1zY3JlZW4ubG9naWNhbFlEUEkvc2NyZWVuLmRldmljZVlEUEk7cmV0dXJue2xlZnQ6Yi5sZWZ0KmMscmlnaHQ6Yi5yaWdodCpjLHRvcDpiLnRvcCpkLGJvdHRvbTpiLmJvdHRvbSpkfX1mdW5jdGlvbiBCYyhhKXtpZihhLm1lYXN1cmUmJihhLm1lYXN1cmUuY2FjaGU9e30sYS5tZWFzdXJlLmhlaWdodHM9bnVsbCxhLnJlc3QpKWZvcih2YXIgYj0wO2I8YS5yZXN0Lmxlbmd0aDtiKyspYS5tZWFzdXJlLmNhY2hlc1tiXT17fX1mdW5jdGlvbiBDYyhhKXthLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlPW51bGwsbGgoYS5kaXNwbGF5LmxpbmVNZWFzdXJlKTtmb3IodmFyIGI9MDtiPGEuZGlzcGxheS52aWV3Lmxlbmd0aDtiKyspQmMoYS5kaXNwbGF5LnZpZXdbYl0pfWZ1bmN0aW9uIERjKGEpe0NjKGEpLGEuZGlzcGxheS5jYWNoZWRDaGFyV2lkdGg9YS5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQ9YS5kaXNwbGF5LmNhY2hlZFBhZGRpbmdIPW51bGwsYS5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KGEuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMCksYS5kaXNwbGF5LmxpbmVOdW1DaGFycz1udWxsfWZ1bmN0aW9uIEVjKCl7cmV0dXJuIHdpbmRvdy5wYWdlWE9mZnNldHx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsTGVmdH1mdW5jdGlvbiBGYygpe3JldHVybiB3aW5kb3cucGFnZVlPZmZzZXR8fChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fGRvY3VtZW50LmJvZHkpLnNjcm9sbFRvcH1mdW5jdGlvbiBHYyhhLGIsYyxkKXtpZihiLndpZGdldHMpZm9yKHZhciBlPTA7ZTxiLndpZGdldHMubGVuZ3RoOysrZSlpZihiLndpZGdldHNbZV0uYWJvdmUpe3ZhciBmPXZmKGIud2lkZ2V0c1tlXSk7Yy50b3ArPWYsYy5ib3R0b20rPWZ9aWYoImxpbmUiPT1kKXJldHVybiBjO2R8fChkPSJsb2NhbCIpO3ZhciBnPWdnKGIpO2lmKCJsb2NhbCI9PWQ/Zys9a2MoYS5kaXNwbGF5KTpnLT1hLmRpc3BsYXkudmlld09mZnNldCwicGFnZSI9PWR8fCJ3aW5kb3ciPT1kKXt2YXIgaD1hLmRpc3BsYXkubGluZVNwYWNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2crPWgudG9wKygid2luZG93Ij09ZD8wOkZjKCkpO3ZhciBpPWgubGVmdCsoIndpbmRvdyI9PWQ/MDpFYygpKTtjLmxlZnQrPWksYy5yaWdodCs9aX1yZXR1cm4gYy50b3ArPWcsYy5ib3R0b20rPWcsY31mdW5jdGlvbiBIYyhhLGIsYyl7aWYoImRpdiI9PWMpcmV0dXJuIGI7dmFyIGQ9Yi5sZWZ0LGU9Yi50b3A7aWYoInBhZ2UiPT1jKWQtPUVjKCksZS09RmMoKTtlbHNlIGlmKCJsb2NhbCI9PWN8fCFjKXt2YXIgZj1hLmRpc3BsYXkuc2l6ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZCs9Zi5sZWZ0LGUrPWYudG9wfXZhciBnPWEuZGlzcGxheS5saW5lU3BhY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue2xlZnQ6ZC1nLmxlZnQsdG9wOmUtZy50b3B9fWZ1bmN0aW9uIEljKGEsYixjLGQsZSl7cmV0dXJuIGR8fChkPWFnKGEuZG9jLGIubGluZSkpLEdjKGEsZCx0YyhhLGQsYi5jaCxlKSxjKX1mdW5jdGlvbiBKYyhhLGIsYyxkLGUsZil7ZnVuY3Rpb24gZyhiLGcpe3ZhciBoPXdjKGEsZSxiLGc/InJpZ2h0IjoibGVmdCIsZik7cmV0dXJuIGc/aC5sZWZ0PWgucmlnaHQ6aC5yaWdodD1oLmxlZnQsR2MoYSxkLGgsYyl9ZnVuY3Rpb24gaChhLGIpe3ZhciBjPWlbYl0sZD1jLmxldmVsJTI7cmV0dXJuIGE9PUpoKGMpJiZiJiZjLmxldmVsPGlbYi0xXS5sZXZlbD8oYz1pWy0tYl0sYT1LaChjKS0oYy5sZXZlbCUyPzA6MSksZD0hMCk6YT09S2goYykmJmI8aS5sZW5ndGgtMSYmYy5sZXZlbDxpW2IrMV0ubGV2ZWwmJihjPWlbKytiXSxhPUpoKGMpLWMubGV2ZWwlMixkPSExKSxkJiZhPT1jLnRvJiZhPmMuZnJvbT9nKGEtMSk6ZyhhLGQpfWQ9ZHx8YWcoYS5kb2MsYi5saW5lKSxlfHwoZT12YyhhLGQpKTt2YXIgaT1oZyhkKSxqPWIuY2g7aWYoIWkpcmV0dXJuIGcoaik7dmFyIGs9U2goaSxqKSxsPWgoaixrKTtyZXR1cm4gbnVsbCE9UmgmJihsLm90aGVyPWgoaixSaCkpLGx9ZnVuY3Rpb24gS2MoYSxiKXt2YXIgYz0wLGI9TWIoYS5kb2MsYik7YS5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KGM9UWMoYS5kaXNwbGF5KSpiLmNoKTt2YXIgZD1hZyhhLmRvYyxiLmxpbmUpLGU9Z2coZCkra2MoYS5kaXNwbGF5KTtyZXR1cm57bGVmdDpjLHJpZ2h0OmMsdG9wOmUsYm90dG9tOmUrZC5oZWlnaHR9fWZ1bmN0aW9uIExjKGEsYixjLGQpe3ZhciBlPW9iKGEsYik7cmV0dXJuIGUueFJlbD1kLGMmJihlLm91dHNpZGU9ITApLGV9ZnVuY3Rpb24gTWMoYSxiLGMpe3ZhciBkPWEuZG9jO2lmKGMrPWEuZGlzcGxheS52aWV3T2Zmc2V0LDA+YylyZXR1cm4gTGMoZC5maXJzdCwwLCEwLC0xKTt2YXIgZT1mZyhkLGMpLGY9ZC5maXJzdCtkLnNpemUtMTtpZihlPmYpcmV0dXJuIExjKGQuZmlyc3QrZC5zaXplLTEsYWcoZCxmKS50ZXh0Lmxlbmd0aCwhMCwxKTswPmImJihiPTApO2Zvcih2YXIgZz1hZyhkLGUpOzspe3ZhciBoPU5jKGEsZyxlLGIsYyksaT1sZihnKSxqPWkmJmkuZmluZCgwLCEwKTtpZighaXx8IShoLmNoPmouZnJvbS5jaHx8aC5jaD09ai5mcm9tLmNoJiZoLnhSZWw+MCkpcmV0dXJuIGg7ZT1lZyhnPWoudG8ubGluZSl9fWZ1bmN0aW9uIE5jKGEsYixjLGQsZSl7ZnVuY3Rpb24gaihkKXt2YXIgZT1KYyhhLG9iKGMsZCksImxpbmUiLGIsaSk7cmV0dXJuIGc9ITAsZj5lLmJvdHRvbT9lLmxlZnQtaDpmPGUudG9wP2UubGVmdCtoOihnPSExLGUubGVmdCl9dmFyIGY9ZS1nZyhiKSxnPSExLGg9MiphLmRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aCxpPXZjKGEsYiksaz1oZyhiKSxsPWIudGV4dC5sZW5ndGgsbT1MaChiKSxuPU1oKGIpLG89aihtKSxwPWcscT1qKG4pLHI9ZztpZihkPnEpcmV0dXJuIExjKGMsbixyLDEpO2Zvcig7Oyl7aWYoaz9uPT1tfHxuPT1VaChiLG0sMSk6MT49bi1tKXtmb3IodmFyIHM9bz5kfHxxLWQ+PWQtbz9tOm4sdD1kLShzPT1tP286cSk7aWgoYi50ZXh0LmNoYXJBdChzKSk7KSsrczt2YXIgdT1MYyhjLHMscz09bT9wOnIsLTE+dD8tMTp0PjE/MTowKTtyZXR1cm4gdX12YXIgdj1NYXRoLmNlaWwobC8yKSx3PW0rdjtpZihrKXt3PW07Zm9yKHZhciB4PTA7dj54OysreCl3PVVoKGIsdywxKX12YXIgeT1qKHcpO3k+ZD8obj13LHE9eSwocj1nKSYmKHErPTFlMyksbD12KToobT13LG89eSxwPWcsbC09dil9fWZ1bmN0aW9uIFBjKGEpe2lmKG51bGwhPWEuY2FjaGVkVGV4dEhlaWdodClyZXR1cm4gYS5jYWNoZWRUZXh0SGVpZ2h0O2lmKG51bGw9PU9jKXtPYz1qaCgicHJlIik7Zm9yKHZhciBiPTA7NDk+YjsrK2IpT2MuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSksT2MuYXBwZW5kQ2hpbGQoamgoImJyIikpO09jLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IikpfW1oKGEubWVhc3VyZSxPYyk7dmFyIGM9T2Mub2Zmc2V0SGVpZ2h0LzUwO3JldHVybiBjPjMmJihhLmNhY2hlZFRleHRIZWlnaHQ9YyksbGgoYS5tZWFzdXJlKSxjfHwxfWZ1bmN0aW9uIFFjKGEpe2lmKG51bGwhPWEuY2FjaGVkQ2hhcldpZHRoKXJldHVybiBhLmNhY2hlZENoYXJXaWR0aDt2YXIgYj1qaCgic3BhbiIsInh4eHh4eHh4eHgiKSxjPWpoKCJwcmUiLFtiXSk7bWgoYS5tZWFzdXJlLGMpO3ZhciBkPWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZT0oZC5yaWdodC1kLmxlZnQpLzEwO3JldHVybiBlPjImJihhLmNhY2hlZENoYXJXaWR0aD1lKSxlfHwxMH1mdW5jdGlvbiBUYyhhKXthLmN1ck9wPXtjbTphLHZpZXdDaGFuZ2VkOiExLHN0YXJ0SGVpZ2h0OmEuZG9jLmhlaWdodCxmb3JjZVVwZGF0ZTohMSx1cGRhdGVJbnB1dDpudWxsLHR5cGluZzohMSxjaGFuZ2VPYmpzOm51bGwsY3Vyc29yQWN0aXZpdHlIYW5kbGVyczpudWxsLGN1cnNvckFjdGl2aXR5Q2FsbGVkOjAsc2VsZWN0aW9uQ2hhbmdlZDohMSx1cGRhdGVNYXhMaW5lOiExLHNjcm9sbExlZnQ6bnVsbCxzY3JvbGxUb3A6bnVsbCxzY3JvbGxUb1BvczpudWxsLGlkOisrU2N9LFJjP1JjLm9wcy5wdXNoKGEuY3VyT3ApOmEuY3VyT3Aub3duc0dyb3VwPVJjPXtvcHM6W2EuY3VyT3BdLGRlbGF5ZWRDYWxsYmFja3M6W119fWZ1bmN0aW9uIFVjKGEpe3ZhciBiPWEuZGVsYXllZENhbGxiYWNrcyxjPTA7ZG97Zm9yKDtjPGIubGVuZ3RoO2MrKyliW2NdKCk7Zm9yKHZhciBkPTA7ZDxhLm9wcy5sZW5ndGg7ZCsrKXt2YXIgZT1hLm9wc1tkXTtpZihlLmN1cnNvckFjdGl2aXR5SGFuZGxlcnMpZm9yKDtlLmN1cnNvckFjdGl2aXR5Q2FsbGVkPGUuY3Vyc29yQWN0aXZpdHlIYW5kbGVycy5sZW5ndGg7KWUuY3Vyc29yQWN0aXZpdHlIYW5kbGVyc1tlLmN1cnNvckFjdGl2aXR5Q2FsbGVkKytdKGUuY20pfX13aGlsZShjPGIubGVuZ3RoKX1mdW5jdGlvbiBWYyhhKXt2YXIgYj1hLmN1ck9wLGM9Yi5vd25zR3JvdXA7aWYoYyl0cnl7VWMoYyl9ZmluYWxseXtSYz1udWxsO2Zvcih2YXIgZD0wO2Q8Yy5vcHMubGVuZ3RoO2QrKyljLm9wc1tkXS5jbS5jdXJPcD1udWxsO1djKGMpfX1mdW5jdGlvbiBXYyhhKXtmb3IodmFyIGI9YS5vcHMsYz0wO2M8Yi5sZW5ndGg7YysrKVhjKGJbY10pO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKVljKGJbY10pO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKVpjKGJbY10pO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKSRjKGJbY10pO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKV9jKGJbY10pfWZ1bmN0aW9uIFhjKGEpe3ZhciBiPWEuY20sYz1iLmRpc3BsYXk7VihiKSxhLnVwZGF0ZU1heExpbmUmJkgoYiksYS5tdXN0VXBkYXRlPWEudmlld0NoYW5nZWR8fGEuZm9yY2VVcGRhdGV8fG51bGwhPWEuc2Nyb2xsVG9wfHxhLnNjcm9sbFRvUG9zJiYoYS5zY3JvbGxUb1Bvcy5mcm9tLmxpbmU8Yy52aWV3RnJvbXx8YS5zY3JvbGxUb1Bvcy50by5saW5lPj1jLnZpZXdUbyl8fGMubWF4TGluZUNoYW5nZWQmJmIub3B0aW9ucy5saW5lV3JhcHBpbmcsYS51cGRhdGU9YS5tdXN0VXBkYXRlJiZuZXcgVShiLGEubXVzdFVwZGF0ZSYme3RvcDphLnNjcm9sbFRvcCxlbnN1cmU6YS5zY3JvbGxUb1Bvc30sYS5mb3JjZVVwZGF0ZSl9ZnVuY3Rpb24gWWMoYSl7YS51cGRhdGVkRGlzcGxheT1hLm11c3RVcGRhdGUmJlcoYS5jbSxhLnVwZGF0ZSl9ZnVuY3Rpb24gWmMoYSl7dmFyIGI9YS5jbSxjPWIuZGlzcGxheTthLnVwZGF0ZWREaXNwbGF5JiYkKGIpLGEuYmFyTWVhc3VyZT1KKGIpLGMubWF4TGluZUNoYW5nZWQmJiFiLm9wdGlvbnMubGluZVdyYXBwaW5nJiYoYS5hZGp1c3RXaWR0aFRvPXRjKGIsYy5tYXhMaW5lLGMubWF4TGluZS50ZXh0Lmxlbmd0aCkubGVmdCszLGIuZGlzcGxheS5zaXplcldpZHRoPWEuYWRqdXN0V2lkdGhUbyxhLmJhck1lYXN1cmUuc2Nyb2xsV2lkdGg9TWF0aC5tYXgoYy5zY3JvbGxlci5jbGllbnRXaWR0aCxjLnNpemVyLm9mZnNldExlZnQrYS5hZGp1c3RXaWR0aFRvK25jKGIpK2IuZGlzcGxheS5iYXJXaWR0aCksYS5tYXhTY3JvbGxMZWZ0PU1hdGgubWF4KDAsYy5zaXplci5vZmZzZXRMZWZ0K2EuYWRqdXN0V2lkdGhUby1vYyhiKSkpLChhLnVwZGF0ZWREaXNwbGF5fHxhLnNlbGVjdGlvbkNoYW5nZWQpJiYoYS5wcmVwYXJlZFNlbGVjdGlvbj1jLmlucHV0LnByZXBhcmVTZWxlY3Rpb24oKSl9ZnVuY3Rpb24gJGMoYSl7dmFyIGI9YS5jbTtudWxsIT1hLmFkanVzdFdpZHRoVG8mJihiLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGg9YS5hZGp1c3RXaWR0aFRvKyJweCIsYS5tYXhTY3JvbGxMZWZ0PGIuZG9jLnNjcm9sbExlZnQmJkRkKGIsTWF0aC5taW4oYi5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQsYS5tYXhTY3JvbGxMZWZ0KSwhMCksYi5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkPSExKSxhLnByZXBhcmVkU2VsZWN0aW9uJiZiLmRpc3BsYXkuaW5wdXQuc2hvd1NlbGVjdGlvbihhLnByZXBhcmVkU2VsZWN0aW9uKSxhLnVwZGF0ZWREaXNwbGF5JiZaKGIsYS5iYXJNZWFzdXJlKSwoYS51cGRhdGVkRGlzcGxheXx8YS5zdGFydEhlaWdodCE9Yi5kb2MuaGVpZ2h0KSYmTihiLGEuYmFyTWVhc3VyZSksYS5zZWxlY3Rpb25DaGFuZ2VkJiZmYyhiKSxiLnN0YXRlLmZvY3VzZWQmJmEudXBkYXRlSW5wdXQmJmIuZGlzcGxheS5pbnB1dC5yZXNldChhLnR5cGluZyl9ZnVuY3Rpb24gX2MoYSl7dmFyIGI9YS5jbSxjPWIuZGlzcGxheSxkPWIuZG9jO2lmKGEudXBkYXRlZERpc3BsYXkmJlgoYixhLnVwZGF0ZSksbnVsbD09Yy53aGVlbFN0YXJ0WHx8bnVsbD09YS5zY3JvbGxUb3AmJm51bGw9PWEuc2Nyb2xsTGVmdCYmIWEuc2Nyb2xsVG9Qb3N8fChjLndoZWVsU3RhcnRYPWMud2hlZWxTdGFydFk9bnVsbCksbnVsbD09YS5zY3JvbGxUb3B8fGMuc2Nyb2xsZXIuc2Nyb2xsVG9wPT1hLnNjcm9sbFRvcCYmIWEuZm9yY2VTY3JvbGx8fChkLnNjcm9sbFRvcD1NYXRoLm1heCgwLE1hdGgubWluKGMuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0LWMuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LGEuc2Nyb2xsVG9wKSksYy5zY3JvbGxiYXJzLnNldFNjcm9sbFRvcChkLnNjcm9sbFRvcCksYy5zY3JvbGxlci5zY3JvbGxUb3A9ZC5zY3JvbGxUb3ApLG51bGw9PWEuc2Nyb2xsTGVmdHx8Yy5zY3JvbGxlci5zY3JvbGxMZWZ0PT1hLnNjcm9sbExlZnQmJiFhLmZvcmNlU2Nyb2xsfHwoZC5zY3JvbGxMZWZ0PU1hdGgubWF4KDAsTWF0aC5taW4oYy5zY3JvbGxlci5zY3JvbGxXaWR0aC1vYyhiKSxhLnNjcm9sbExlZnQpKSxjLnNjcm9sbGJhcnMuc2V0U2Nyb2xsTGVmdChkLnNjcm9sbExlZnQpLGMuc2Nyb2xsZXIuc2Nyb2xsTGVmdD1kLnNjcm9sbExlZnQsUShiKSksYS5zY3JvbGxUb1Bvcyl7dmFyIGU9amUoYixNYihkLGEuc2Nyb2xsVG9Qb3MuZnJvbSksTWIoZCxhLnNjcm9sbFRvUG9zLnRvKSxhLnNjcm9sbFRvUG9zLm1hcmdpbik7YS5zY3JvbGxUb1Bvcy5pc0N1cnNvciYmYi5zdGF0ZS5mb2N1c2VkJiZpZShiLGUpfXZhciBmPWEubWF5YmVIaWRkZW5NYXJrZXJzLGc9YS5tYXliZVVuaGlkZGVuTWFya2VycztpZihmKWZvcih2YXIgaD0wO2g8Zi5sZW5ndGg7KytoKWZbaF0ubGluZXMubGVuZ3RofHxGZyhmW2hdLCJoaWRlIik7aWYoZylmb3IodmFyIGg9MDtoPGcubGVuZ3RoOysraClnW2hdLmxpbmVzLmxlbmd0aCYmRmcoZ1toXSwidW5oaWRlIik7Yy53cmFwcGVyLm9mZnNldEhlaWdodCYmKGQuc2Nyb2xsVG9wPWIuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3ApLGEuY2hhbmdlT2JqcyYmRmcoYiwiY2hhbmdlcyIsYixhLmNoYW5nZU9ianMpLGEudXBkYXRlJiZhLnVwZGF0ZS5maW5pc2goKX1mdW5jdGlvbiBhZChhLGIpe2lmKGEuY3VyT3ApcmV0dXJuIGIoKTtUYyhhKTt0cnl7cmV0dXJuIGIoKX1maW5hbGx5e1ZjKGEpfX1mdW5jdGlvbiBiZChhLGIpe3JldHVybiBmdW5jdGlvbigpe2lmKGEuY3VyT3ApcmV0dXJuIGIuYXBwbHkoYSxhcmd1bWVudHMpO1RjKGEpO3RyeXtyZXR1cm4gYi5hcHBseShhLGFyZ3VtZW50cyl9ZmluYWxseXtWYyhhKX19fWZ1bmN0aW9uIGNkKGEpe3JldHVybiBmdW5jdGlvbigpe2lmKHRoaXMuY3VyT3ApcmV0dXJuIGEuYXBwbHkodGhpcyxhcmd1bWVudHMpO1RjKHRoaXMpO3RyeXtyZXR1cm4gYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtWYyh0aGlzKX19fWZ1bmN0aW9uIGRkKGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBiPXRoaXMuY207aWYoIWJ8fGIuY3VyT3ApcmV0dXJuIGEuYXBwbHkodGhpcyxhcmd1bWVudHMpO1RjKGIpO3RyeXtyZXR1cm4gYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtWYyhiKX19fWZ1bmN0aW9uIGVkKGEsYixjKXt0aGlzLmxpbmU9Yix0aGlzLnJlc3Q9b2YoYiksdGhpcy5zaXplPXRoaXMucmVzdD9lZyhYZyh0aGlzLnJlc3QpKS1jKzE6MSx0aGlzLm5vZGU9dGhpcy50ZXh0PW51bGwsdGhpcy5oaWRkZW49cmYoYSxiKX1mdW5jdGlvbiBmZChhLGIsYyl7Zm9yKHZhciBlLGQ9W10sZj1iO2M+ZjtmPWUpe3ZhciBnPW5ldyBlZChhLmRvYyxhZyhhLmRvYyxmKSxmKTtlPWYrZy5zaXplLGQucHVzaChnKX1yZXR1cm4gZH1mdW5jdGlvbiBnZChhLGIsYyxkKXtudWxsPT1iJiYoYj1hLmRvYy5maXJzdCksbnVsbD09YyYmKGM9YS5kb2MuZmlyc3QrYS5kb2Muc2l6ZSksZHx8KGQ9MCk7dmFyIGU9YS5kaXNwbGF5O2lmKGQmJmM8ZS52aWV3VG8mJihudWxsPT1lLnVwZGF0ZUxpbmVOdW1iZXJzfHxlLnVwZGF0ZUxpbmVOdW1iZXJzPmIpJiYoZS51cGRhdGVMaW5lTnVtYmVycz1iKSxhLmN1ck9wLnZpZXdDaGFuZ2VkPSEwLGI+PWUudmlld1RvKXUmJnBmKGEuZG9jLGIpPGUudmlld1RvJiZpZChhKTtlbHNlIGlmKGM8PWUudmlld0Zyb20pdSYmcWYoYS5kb2MsYytkKT5lLnZpZXdGcm9tP2lkKGEpOihlLnZpZXdGcm9tKz1kLGUudmlld1RvKz1kKTtlbHNlIGlmKGI8PWUudmlld0Zyb20mJmM+PWUudmlld1RvKWlkKGEpO2Vsc2UgaWYoYjw9ZS52aWV3RnJvbSl7dmFyIGY9a2QoYSxjLGMrZCwxKTtmPyhlLnZpZXc9ZS52aWV3LnNsaWNlKGYuaW5kZXgpLGUudmlld0Zyb209Zi5saW5lTixlLnZpZXdUbys9ZCk6aWQoYSl9ZWxzZSBpZihjPj1lLnZpZXdUbyl7dmFyIGY9a2QoYSxiLGIsLTEpO2Y/KGUudmlldz1lLnZpZXcuc2xpY2UoMCxmLmluZGV4KSxlLnZpZXdUbz1mLmxpbmVOKTppZChhKX1lbHNle3ZhciBnPWtkKGEsYixiLC0xKSxoPWtkKGEsYyxjK2QsMSk7ZyYmaD8oZS52aWV3PWUudmlldy5zbGljZSgwLGcuaW5kZXgpLmNvbmNhdChmZChhLGcubGluZU4saC5saW5lTikpLmNvbmNhdChlLnZpZXcuc2xpY2UoaC5pbmRleCkpLGUudmlld1RvKz1kKTppZChhKX12YXIgaT1lLmV4dGVybmFsTWVhc3VyZWQ7aSYmKGM8aS5saW5lTj9pLmxpbmVOKz1kOmI8aS5saW5lTitpLnNpemUmJihlLmV4dGVybmFsTWVhc3VyZWQ9bnVsbCkpfWZ1bmN0aW9uIGhkKGEsYixjKXthLmN1ck9wLnZpZXdDaGFuZ2VkPSEwO3ZhciBkPWEuZGlzcGxheSxlPWEuZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkO2lmKGUmJmI+PWUubGluZU4mJmI8ZS5saW5lTitlLnNpemUmJihkLmV4dGVybmFsTWVhc3VyZWQ9bnVsbCksIShiPGQudmlld0Zyb218fGI+PWQudmlld1RvKSl7dmFyIGY9ZC52aWV3W2pkKGEsYildO2lmKG51bGwhPWYubm9kZSl7dmFyIGc9Zi5jaGFuZ2VzfHwoZi5jaGFuZ2VzPVtdKTstMT09WmcoZyxjKSYmZy5wdXNoKGMpfX19ZnVuY3Rpb24gaWQoYSl7YS5kaXNwbGF5LnZpZXdGcm9tPWEuZGlzcGxheS52aWV3VG89YS5kb2MuZmlyc3QsYS5kaXNwbGF5LnZpZXc9W10sYS5kaXNwbGF5LnZpZXdPZmZzZXQ9MH1mdW5jdGlvbiBqZChhLGIpe2lmKGI+PWEuZGlzcGxheS52aWV3VG8pcmV0dXJuIG51bGw7aWYoYi09YS5kaXNwbGF5LnZpZXdGcm9tLDA+YilyZXR1cm4gbnVsbDtmb3IodmFyIGM9YS5kaXNwbGF5LnZpZXcsZD0wO2Q8Yy5sZW5ndGg7ZCsrKWlmKGItPWNbZF0uc2l6ZSwwPmIpcmV0dXJuIGR9ZnVuY3Rpb24ga2QoYSxiLGMsZCl7dmFyIGYsZT1qZChhLGIpLGc9YS5kaXNwbGF5LnZpZXc7aWYoIXV8fGM9PWEuZG9jLmZpcnN0K2EuZG9jLnNpemUpcmV0dXJue2luZGV4OmUsbGluZU46Y307Zm9yKHZhciBoPTAsaT1hLmRpc3BsYXkudmlld0Zyb207ZT5oO2grKylpKz1nW2hdLnNpemU7aWYoaSE9Yil7aWYoZD4wKXtpZihlPT1nLmxlbmd0aC0xKXJldHVybiBudWxsO2Y9aStnW2VdLnNpemUtYixlKyt9ZWxzZSBmPWktYjtiKz1mLGMrPWZ9Zm9yKDtwZihhLmRvYyxjKSE9Yzspe2lmKGU9PSgwPmQ/MDpnLmxlbmd0aC0xKSlyZXR1cm4gbnVsbDtjKz1kKmdbZS0oMD5kPzE6MCldLnNpemUsZSs9ZH1yZXR1cm57aW5kZXg6ZSxsaW5lTjpjfX1mdW5jdGlvbiBsZChhLGIsYyl7dmFyIGQ9YS5kaXNwbGF5LGU9ZC52aWV3OzA9PWUubGVuZ3RofHxiPj1kLnZpZXdUb3x8Yzw9ZC52aWV3RnJvbT8oZC52aWV3PWZkKGEsYixjKSxkLnZpZXdGcm9tPWIpOihkLnZpZXdGcm9tPmI/ZC52aWV3PWZkKGEsYixkLnZpZXdGcm9tKS5jb25jYXQoZC52aWV3KTpkLnZpZXdGcm9tPGImJihkLnZpZXc9ZC52aWV3LnNsaWNlKGpkKGEsYikpKSxkLnZpZXdGcm9tPWIsZC52aWV3VG88Yz9kLnZpZXc9ZC52aWV3LmNvbmNhdChmZChhLGQudmlld1RvLGMpKTpkLnZpZXdUbz5jJiYoZC52aWV3PWQudmlldy5zbGljZSgwLGpkKGEsYykpKSksZC52aWV3VG89Y31mdW5jdGlvbiBtZChhKXtmb3IodmFyIGI9YS5kaXNwbGF5LnZpZXcsYz0wLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGU9YltkXTtlLmhpZGRlbnx8ZS5ub2RlJiYhZS5jaGFuZ2VzfHwrK2N9cmV0dXJuIGN9ZnVuY3Rpb24gbmQoYSl7ZnVuY3Rpb24gZygpe2IuYWN0aXZlVG91Y2gmJihjPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtiLmFjdGl2ZVRvdWNoPW51bGx9LDFlMyksZj1iLmFjdGl2ZVRvdWNoLGYuZW5kPStuZXcgRGF0ZSl9ZnVuY3Rpb24gaChhKXtpZigxIT1hLnRvdWNoZXMubGVuZ3RoKXJldHVybiExO3ZhciBiPWEudG91Y2hlc1swXTtyZXR1cm4gYi5yYWRpdXNYPD0xJiZiLnJhZGl1c1k8PTF9ZnVuY3Rpb24gaShhLGIpe2lmKG51bGw9PWIubGVmdClyZXR1cm4hMDt2YXIgYz1iLmxlZnQtYS5sZWZ0LGQ9Yi50b3AtYS50b3A7cmV0dXJuIGMqYytkKmQ+NDAwfWZ1bmN0aW9uIGooYil7SmcoYSxiKXx8QWcoYil9dmFyIGI9YS5kaXNwbGF5O0RnKGIuc2Nyb2xsZXIsIm1vdXNlZG93biIsYmQoYSxyZCkpLGQmJjExPmU/RGcoYi5zY3JvbGxlciwiZGJsY2xpY2siLGJkKGEsZnVuY3Rpb24oYil7aWYoIUpnKGEsYikpe3ZhciBjPXFkKGEsYik7aWYoYyYmIXlkKGEsYikmJiFwZChhLmRpc3BsYXksYikpe3hnKGIpO3ZhciBkPWEuZmluZFdvcmRBdChjKTtSYihhLmRvYyxkLmFuY2hvcixkLmhlYWQpfX19KSk6RGcoYi5zY3JvbGxlciwiZGJsY2xpY2siLGZ1bmN0aW9uKGIpe0pnKGEsYil8fHhnKGIpfSksc3x8RGcoYi5zY3JvbGxlciwiY29udGV4dG1lbnUiLGZ1bmN0aW9uKGIpe1ZkKGEsYil9KTt2YXIgYyxmPXtlbmQ6MH07RGcoYi5zY3JvbGxlciwidG91Y2hzdGFydCIsZnVuY3Rpb24oYSl7aWYoIWgoYSkpe2NsZWFyVGltZW91dChjKTt2YXIgZD0rbmV3IERhdGU7Yi5hY3RpdmVUb3VjaD17c3RhcnQ6ZCxtb3ZlZDohMSxwcmV2OmQtZi5lbmQ8PTMwMD9mOm51bGx9LDE9PWEudG91Y2hlcy5sZW5ndGgmJihiLmFjdGl2ZVRvdWNoLmxlZnQ9YS50b3VjaGVzWzBdLnBhZ2VYLGIuYWN0aXZlVG91Y2gudG9wPWEudG91Y2hlc1swXS5wYWdlWSl9fSksRGcoYi5zY3JvbGxlciwidG91Y2htb3ZlIixmdW5jdGlvbigpe2IuYWN0aXZlVG91Y2gmJihiLmFjdGl2ZVRvdWNoLm1vdmVkPSEwKX0pLERnKGIuc2Nyb2xsZXIsInRvdWNoZW5kIixmdW5jdGlvbihjKXt2YXIgZD1iLmFjdGl2ZVRvdWNoO2lmKGQmJiFwZChiLGMpJiZudWxsIT1kLmxlZnQmJiFkLm1vdmVkJiZuZXcgRGF0ZS1kLnN0YXJ0PDMwMCl7dmFyIGYsZT1hLmNvb3Jkc0NoYXIoYi5hY3RpdmVUb3VjaCwicGFnZSIpO2Y9IWQucHJldnx8aShkLGQucHJldik/bmV3IEliKGUsZSk6IWQucHJldi5wcmV2fHxpKGQsZC5wcmV2LnByZXYpP2EuZmluZFdvcmRBdChlKTpuZXcgSWIob2IoZS5saW5lLDApLE1iKGEuZG9jLG9iKGUubGluZSsxLDApKSksYS5zZXRTZWxlY3Rpb24oZi5hbmNob3IsZi5oZWFkKSxhLmZvY3VzKCkseGcoYyl9ZygpfSksRGcoYi5zY3JvbGxlciwidG91Y2hjYW5jZWwiLGcpLERnKGIuc2Nyb2xsZXIsInNjcm9sbCIsZnVuY3Rpb24oKXtiLnNjcm9sbGVyLmNsaWVudEhlaWdodCYmKENkKGEsYi5zY3JvbGxlci5zY3JvbGxUb3ApLERkKGEsYi5zY3JvbGxlci5zY3JvbGxMZWZ0LCEwKSxGZyhhLCJzY3JvbGwiLGEpKX0pLERnKGIuc2Nyb2xsZXIsIm1vdXNld2hlZWwiLGZ1bmN0aW9uKGIpe0hkKGEsYil9KSxEZyhiLnNjcm9sbGVyLCJET01Nb3VzZVNjcm9sbCIsZnVuY3Rpb24oYil7SGQoYSxiKX0pLERnKGIud3JhcHBlciwic2Nyb2xsIixmdW5jdGlvbigpe2Iud3JhcHBlci5zY3JvbGxUb3A9Yi53cmFwcGVyLnNjcm9sbExlZnQ9MH0pLGEub3B0aW9ucy5kcmFnRHJvcCYmKERnKGIuc2Nyb2xsZXIsImRyYWdzdGFydCIsZnVuY3Rpb24oYil7QmQoYSxiKX0pLERnKGIuc2Nyb2xsZXIsImRyYWdlbnRlciIsaiksRGcoYi5zY3JvbGxlciwiZHJhZ292ZXIiLGopLERnKGIuc2Nyb2xsZXIsImRyb3AiLGJkKGEsQWQpKSk7dmFyIGs9Yi5pbnB1dC5nZXRGaWVsZCgpO0RnKGssImtleXVwIixmdW5jdGlvbihiKXtSZC5jYWxsKGEsYil9KSxEZyhrLCJrZXlkb3duIixiZChhLFBkKSksRGcoaywia2V5cHJlc3MiLGJkKGEsU2QpKSxEZyhrLCJmb2N1cyIsY2goVGQsYSkpLERnKGssImJsdXIiLGNoKFVkLGEpKX1mdW5jdGlvbiBvZChhKXt2YXIgYj1hLmRpc3BsYXk7KGIubGFzdFdyYXBIZWlnaHQhPWIud3JhcHBlci5jbGllbnRIZWlnaHR8fGIubGFzdFdyYXBXaWR0aCE9Yi53cmFwcGVyLmNsaWVudFdpZHRoKSYmKGIuY2FjaGVkQ2hhcldpZHRoPWIuY2FjaGVkVGV4dEhlaWdodD1iLmNhY2hlZFBhZGRpbmdIPW51bGwsYi5zY3JvbGxiYXJzQ2xpcHBlZD0hMSxhLnNldFNpemUoKSl9ZnVuY3Rpb24gcGQoYSxiKXtmb3IodmFyIGM9QmcoYik7YyE9YS53cmFwcGVyO2M9Yy5wYXJlbnROb2RlKWlmKCFjfHwxPT1jLm5vZGVUeXBlJiYidHJ1ZSI9PWMuZ2V0QXR0cmlidXRlKCJjbS1pZ25vcmUtZXZlbnRzIil8fGMucGFyZW50Tm9kZT09YS5zaXplciYmYyE9YS5tb3ZlcilyZXR1cm4hMH1mdW5jdGlvbiBxZChhLGIsYyxkKXt2YXIgZT1hLmRpc3BsYXk7aWYoIWMmJiJ0cnVlIj09QmcoYikuZ2V0QXR0cmlidXRlKCJjbS1ub3QtY29udGVudCIpKXJldHVybiBudWxsO3ZhciBmLGcsaD1lLmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0cnl7Zj1iLmNsaWVudFgtaC5sZWZ0LGc9Yi5jbGllbnRZLWgudG9wfWNhdGNoKGIpe3JldHVybiBudWxsfXZhciBqLGk9TWMoYSxmLGcpO2lmKGQmJjE9PWkueFJlbCYmKGo9YWcoYS5kb2MsaS5saW5lKS50ZXh0KS5sZW5ndGg9PWkuY2gpe3ZhciBrPVRnKGosai5sZW5ndGgsYS5vcHRpb25zLnRhYlNpemUpLWoubGVuZ3RoO2k9b2IoaS5saW5lLE1hdGgubWF4KDAsTWF0aC5yb3VuZCgoZi1tYyhhLmRpc3BsYXkpLmxlZnQpL1FjKGEuZGlzcGxheSkpLWspKX1yZXR1cm4gaX1mdW5jdGlvbiByZChhKXt2YXIgYj10aGlzLGM9Yi5kaXNwbGF5O2lmKCEoYy5hY3RpdmVUb3VjaCYmYy5pbnB1dC5zdXBwb3J0c1RvdWNoKCl8fEpnKGIsYSkpKXtpZihjLnNoaWZ0PWEuc2hpZnRLZXkscGQoYyxhKSlyZXR1cm4gZnx8KGMuc2Nyb2xsZXIuZHJhZ2dhYmxlPSExLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLnNjcm9sbGVyLmRyYWdnYWJsZT0hMH0sMTAwKSksdm9pZCAwO2lmKCF5ZChiLGEpKXt2YXIgZD1xZChiLGEpO3N3aXRjaCh3aW5kb3cuZm9jdXMoKSxDZyhhKSl7Y2FzZSAxOmQ/dWQoYixhLGQpOkJnKGEpPT1jLnNjcm9sbGVyJiZ4ZyhhKTticmVhaztjYXNlIDI6ZiYmKGIuc3RhdGUubGFzdE1pZGRsZURvd249K25ldyBEYXRlKSxkJiZSYihiLmRvYyxkKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5pbnB1dC5mb2N1cygpfSwyMCkseGcoYSk7YnJlYWs7Y2FzZSAzOnMmJlZkKGIsYSl9fX19ZnVuY3Rpb24gdWQoYSxiLGMpe2Q/c2V0VGltZW91dChjaCh0YixhKSwwKTp0YihhKTt2YXIgZixlPStuZXcgRGF0ZTt0ZCYmdGQudGltZT5lLTQwMCYmMD09cGIodGQucG9zLGMpP2Y9InRyaXBsZSI6c2QmJnNkLnRpbWU+ZS00MDAmJjA9PXBiKHNkLnBvcyxjKT8oZj0iZG91YmxlIix0ZD17dGltZTplLHBvczpjfSk6KGY9InNpbmdsZSIsc2Q9e3RpbWU6ZSxwb3M6Y30pO3ZhciBpLGc9YS5kb2Muc2VsLGg9bz9iLm1ldGFLZXk6Yi5jdHJsS2V5O2Eub3B0aW9ucy5kcmFnRHJvcCYmeGgmJiF1YihhKSYmInNpbmdsZSI9PWYmJihpPWcuY29udGFpbnMoYykpPi0xJiYhZy5yYW5nZXNbaV0uZW1wdHkoKT92ZChhLGIsYyxoKTp3ZChhLGIsYyxmLGgpfWZ1bmN0aW9uIHZkKGEsYixjLGcpe3ZhciBoPWEuZGlzcGxheSxpPWJkKGEsZnVuY3Rpb24oail7ZiYmKGguc2Nyb2xsZXIuZHJhZ2dhYmxlPSExKSxhLnN0YXRlLmRyYWdnaW5nVGV4dD0hMSxFZyhkb2N1bWVudCwibW91c2V1cCIsaSksRWcoaC5zY3JvbGxlciwiZHJvcCIsaSksTWF0aC5hYnMoYi5jbGllbnRYLWouY2xpZW50WCkrTWF0aC5hYnMoYi5jbGllbnRZLWouY2xpZW50WSk8MTAmJih4ZyhqKSxnfHxSYihhLmRvYyxjKSxoLmlucHV0LmZvY3VzKCksZCYmOT09ZSYmc2V0VGltZW91dChmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuZm9jdXMoKSxoLmlucHV0LmZvY3VzKCl9LDIwKSl9KTtmJiYoaC5zY3JvbGxlci5kcmFnZ2FibGU9ITApLGEuc3RhdGUuZHJhZ2dpbmdUZXh0PWksaC5zY3JvbGxlci5kcmFnRHJvcCYmaC5zY3JvbGxlci5kcmFnRHJvcCgpLERnKGRvY3VtZW50LCJtb3VzZXVwIixpKSxEZyhoLnNjcm9sbGVyLCJkcm9wIixpKX1mdW5jdGlvbiB3ZChhLGIsYyxkLGUpe2Z1bmN0aW9uIG8oYil7aWYoMCE9cGIobixiKSlpZihuPWIsInJlY3QiPT1kKXtmb3IodmFyIGU9W10sZj1hLm9wdGlvbnMudGFiU2l6ZSxrPVRnKGFnKGcsYy5saW5lKS50ZXh0LGMuY2gsZiksbD1UZyhhZyhnLGIubGluZSkudGV4dCxiLmNoLGYpLG09TWF0aC5taW4oayxsKSxvPU1hdGgubWF4KGssbCkscD1NYXRoLm1pbihjLmxpbmUsYi5saW5lKSxxPU1hdGgubWluKGEubGFzdExpbmUoKSxNYXRoLm1heChjLmxpbmUsYi5saW5lKSk7cT49cDtwKyspe3ZhciByPWFnKGcscCkudGV4dCxzPVVnKHIsbSxmKTttPT1vP2UucHVzaChuZXcgSWIob2IocCxzKSxvYihwLHMpKSk6ci5sZW5ndGg+cyYmZS5wdXNoKG5ldyBJYihvYihwLHMpLG9iKHAsVWcocixvLGYpKSkpfWUubGVuZ3RofHxlLnB1c2gobmV3IEliKGMsYykpLFhiKGcsSmIoai5yYW5nZXMuc2xpY2UoMCxpKS5jb25jYXQoZSksaSkse29yaWdpbjoiKm1vdXNlIixzY3JvbGw6ITF9KSxhLnNjcm9sbEludG9WaWV3KGIpfWVsc2V7dmFyIHQ9aCx1PXQuYW5jaG9yLHY9YjtpZigic2luZ2xlIiE9ZCl7aWYoImRvdWJsZSI9PWQpdmFyIHc9YS5maW5kV29yZEF0KGIpO2Vsc2UgdmFyIHc9bmV3IEliKG9iKGIubGluZSwwKSxNYihnLG9iKGIubGluZSsxLDApKSk7cGIody5hbmNob3IsdSk+MD8odj13LmhlYWQsdT1zYih0LmZyb20oKSx3LmFuY2hvcikpOih2PXcuYW5jaG9yLHU9cmIodC50bygpLHcuaGVhZCkpfXZhciBlPWoucmFuZ2VzLnNsaWNlKDApO2VbaV09bmV3IEliKE1iKGcsdSksdiksWGIoZyxKYihlLGkpLFFnKX19ZnVuY3Rpb24gcihiKXt2YXIgYz0rK3EsZT1xZChhLGIsITAsInJlY3QiPT1kKTtpZihlKWlmKDAhPXBiKGUsbikpe3RiKGEpLG8oZSk7dmFyIGg9UChmLGcpOyhlLmxpbmU+PWgudG98fGUubGluZTxoLmZyb20pJiZzZXRUaW1lb3V0KGJkKGEsZnVuY3Rpb24oKXtxPT1jJiZyKGIpfSksMTUwKX1lbHNle3ZhciBpPWIuY2xpZW50WTxwLnRvcD8tMjA6Yi5jbGllbnRZPnAuYm90dG9tPzIwOjA7aSYmc2V0VGltZW91dChiZChhLGZ1bmN0aW9uKCl7cT09YyYmKGYuc2Nyb2xsZXIuc2Nyb2xsVG9wKz1pLHIoYikpfSksNTApfX1mdW5jdGlvbiBzKGEpe3E9MS8wLHhnKGEpLGYuaW5wdXQuZm9jdXMoKSxFZyhkb2N1bWVudCwibW91c2Vtb3ZlIix0KSxFZyhkb2N1bWVudCwibW91c2V1cCIsdSksZy5oaXN0b3J5Lmxhc3RTZWxPcmlnaW49bnVsbH12YXIgZj1hLmRpc3BsYXksZz1hLmRvYzt4ZyhiKTt2YXIgaCxpLGo9Zy5zZWwsaz1qLnJhbmdlcztpZihlJiYhYi5zaGlmdEtleT8oaT1nLnNlbC5jb250YWlucyhjKSxoPWk+LTE/a1tpXTpuZXcgSWIoYyxjKSk6aD1nLnNlbC5wcmltYXJ5KCksYi5hbHRLZXkpZD0icmVjdCIsZXx8KGg9bmV3IEliKGMsYykpLGM9cWQoYSxiLCEwLCEwKSxpPS0xO2Vsc2UgaWYoImRvdWJsZSI9PWQpe3ZhciBsPWEuZmluZFdvcmRBdChjKTtoPWEuZGlzcGxheS5zaGlmdHx8Zy5leHRlbmQ/UWIoZyxoLGwuYW5jaG9yLGwuaGVhZCk6bH1lbHNlIGlmKCJ0cmlwbGUiPT1kKXt2YXIgbT1uZXcgSWIob2IoYy5saW5lLDApLE1iKGcsb2IoYy5saW5lKzEsMCkpKTtoPWEuZGlzcGxheS5zaGlmdHx8Zy5leHRlbmQ/UWIoZyxoLG0uYW5jaG9yLG0uaGVhZCk6bX1lbHNlIGg9UWIoZyxoLGMpO2U/LTE9PWk/KGk9ay5sZW5ndGgsWGIoZyxKYihrLmNvbmNhdChbaF0pLGkpLHtzY3JvbGw6ITEsb3JpZ2luOiIqbW91c2UifSkpOmsubGVuZ3RoPjEmJmtbaV0uZW1wdHkoKSYmInNpbmdsZSI9PWQ/KFhiKGcsSmIoay5zbGljZSgwLGkpLmNvbmNhdChrLnNsaWNlKGkrMSkpLDApKSxqPWcuc2VsKTpUYihnLGksaCxRZyk6KGk9MCxYYihnLG5ldyBIYihbaF0sMCksUWcpLGo9Zy5zZWwpO3ZhciBuPWMscD1mLndyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscT0wLHQ9YmQoYSxmdW5jdGlvbihhKXtDZyhhKT9yKGEpOnMoYSl9KSx1PWJkKGEscyk7RGcoZG9jdW1lbnQsIm1vdXNlbW92ZSIsdCksRGcoZG9jdW1lbnQsIm1vdXNldXAiLHUpfWZ1bmN0aW9uIHhkKGEsYixjLGQsZSl7dHJ5e3ZhciBmPWIuY2xpZW50WCxnPWIuY2xpZW50WX1jYXRjaChiKXtyZXR1cm4hMX1pZihmPj1NYXRoLmZsb29yKGEuZGlzcGxheS5ndXR0ZXJzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KSlyZXR1cm4hMTtkJiZ4ZyhiKTt2YXIgaD1hLmRpc3BsYXksaT1oLmxpbmVEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoZz5pLmJvdHRvbXx8IUxnKGEsYykpcmV0dXJuIHpnKGIpO2ctPWkudG9wLWgudmlld09mZnNldDtmb3IodmFyIGo9MDtqPGEub3B0aW9ucy5ndXR0ZXJzLmxlbmd0aDsrK2ope3ZhciBrPWguZ3V0dGVycy5jaGlsZE5vZGVzW2pdO2lmKGsmJmsuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ+PWYpe3ZhciBsPWZnKGEuZG9jLGcpLG09YS5vcHRpb25zLmd1dHRlcnNbal07cmV0dXJuIGUoYSxjLGEsbCxtLGIpLHpnKGIpfX19ZnVuY3Rpb24geWQoYSxiKXtyZXR1cm4geGQoYSxiLCJndXR0ZXJDbGljayIsITAsSGcpfWZ1bmN0aW9uIEFkKGEpe3ZhciBiPXRoaXM7aWYoIUpnKGIsYSkmJiFwZChiLmRpc3BsYXksYSkpe3hnKGEpLGQmJih6ZD0rbmV3IERhdGUpO3ZhciBjPXFkKGIsYSwhMCksZT1hLmRhdGFUcmFuc2Zlci5maWxlcztpZihjJiYhdWIoYikpaWYoZSYmZS5sZW5ndGgmJndpbmRvdy5GaWxlUmVhZGVyJiZ3aW5kb3cuRmlsZSlmb3IodmFyIGY9ZS5sZW5ndGgsZz1BcnJheShmKSxoPTAsaT1mdW5jdGlvbihhLGQpe3ZhciBlPW5ldyBGaWxlUmVhZGVyO2Uub25sb2FkPWJkKGIsZnVuY3Rpb24oKXtpZihnW2RdPWUucmVzdWx0LCsraD09Zil7Yz1NYihiLmRvYyxjKTt2YXIgYT17ZnJvbTpjLHRvOmMsdGV4dDpDaChnLmpvaW4oIlxuIikpLG9yaWdpbjoicGFzdGUifTtiZShiLmRvYyxhKSxXYihiLmRvYyxLYihjLFhkKGEpKSl9fSksZS5yZWFkQXNUZXh0KGEpfSxqPTA7Zj5qOysrailpKGVbal0saik7ZWxzZXtpZihiLnN0YXRlLmRyYWdnaW5nVGV4dCYmYi5kb2Muc2VsLmNvbnRhaW5zKGMpPi0xKXJldHVybiBiLnN0YXRlLmRyYWdnaW5nVGV4dChhKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi5kaXNwbGF5LmlucHV0LmZvY3VzKCl9LDIwKSx2b2lkIDA7dHJ5e3ZhciBnPWEuZGF0YVRyYW5zZmVyLmdldERhdGEoIlRleHQiKTtpZihnKXtpZihiLnN0YXRlLmRyYWdnaW5nVGV4dCYmIShvP2EubWV0YUtleTphLmN0cmxLZXkpKXZhciBrPWIubGlzdFNlbGVjdGlvbnMoKTtpZihZYihiLmRvYyxLYihjLGMpKSxrKWZvcih2YXIgaj0wO2o8ay5sZW5ndGg7KytqKWhlKGIuZG9jLCIiLGtbal0uYW5jaG9yLGtbal0uaGVhZCwiZHJhZyIpO2IucmVwbGFjZVNlbGVjdGlvbihnLCJhcm91bmQiLCJwYXN0ZSIpLGIuZGlzcGxheS5pbnB1dC5mb2N1cygpfX1jYXRjaChhKXt9fX19ZnVuY3Rpb24gQmQoYSxiKXtpZihkJiYoIWEuc3RhdGUuZHJhZ2dpbmdUZXh0fHwrbmV3IERhdGUtemQ8MTAwKSlyZXR1cm4gQWcoYiksdm9pZCAwO2lmKCFKZyhhLGIpJiYhcGQoYS5kaXNwbGF5LGIpJiYoYi5kYXRhVHJhbnNmZXIuc2V0RGF0YSgiVGV4dCIsYS5nZXRTZWxlY3Rpb24oKSksYi5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlJiYhaikpe3ZhciBjPWpoKCJpbWciLG51bGwsbnVsbCwicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7Iik7Yy5zcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUFBQUNINUJBRUtBQUVBTEFBQUFBQUJBQUVBQUFJQ1RBRUFPdz09IixpJiYoYy53aWR0aD1jLmhlaWdodD0xLGEuZGlzcGxheS53cmFwcGVyLmFwcGVuZENoaWxkKGMpLGMuX3RvcD1jLm9mZnNldFRvcCksYi5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKGMsMCwwKSxpJiZjLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYyl9fWZ1bmN0aW9uIENkKGIsYyl7TWF0aC5hYnMoYi5kb2Muc2Nyb2xsVG9wLWMpPDJ8fChiLmRvYy5zY3JvbGxUb3A9YyxhfHxZKGIse3RvcDpjfSksYi5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCE9YyYmKGIuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A9YyksYi5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKGMpLGEmJlkoYiksZ2MoYiwxMDApKX1mdW5jdGlvbiBEZChhLGIsYyl7KGM/Yj09YS5kb2Muc2Nyb2xsTGVmdDpNYXRoLmFicyhhLmRvYy5zY3JvbGxMZWZ0LWIpPDIpfHwoYj1NYXRoLm1pbihiLGEuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxXaWR0aC1hLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgpLGEuZG9jLnNjcm9sbExlZnQ9YixRKGEpLGEuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0IT1iJiYoYS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQ9YiksYS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsTGVmdChiKSl9ZnVuY3Rpb24gSGQoYixjKXt2YXIgZD1HZChjKSxlPWQueCxnPWQueSxoPWIuZGlzcGxheSxqPWguc2Nyb2xsZXI7aWYoZSYmai5zY3JvbGxXaWR0aD5qLmNsaWVudFdpZHRofHxnJiZqLnNjcm9sbEhlaWdodD5qLmNsaWVudEhlaWdodCl7aWYoZyYmbyYmZilhOmZvcih2YXIgaz1jLnRhcmdldCxsPWgudmlldztrIT1qO2s9ay5wYXJlbnROb2RlKWZvcih2YXIgbT0wO208bC5sZW5ndGg7bSsrKWlmKGxbbV0ubm9kZT09ayl7Yi5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldD1rO2JyZWFrIGF9aWYoZSYmIWEmJiFpJiZudWxsIT1GZClyZXR1cm4gZyYmQ2QoYixNYXRoLm1heCgwLE1hdGgubWluKGouc2Nyb2xsVG9wK2cqRmQsai5zY3JvbGxIZWlnaHQtai5jbGllbnRIZWlnaHQpKSksRGQoYixNYXRoLm1heCgwLE1hdGgubWluKGouc2Nyb2xsTGVmdCtlKkZkLGouc2Nyb2xsV2lkdGgtai5jbGllbnRXaWR0aCkpKSx4ZyhjKSxoLndoZWVsU3RhcnRYPW51bGwsdm9pZCAwO2lmKGcmJm51bGwhPUZkKXt2YXIgbj1nKkZkLHA9Yi5kb2Muc2Nyb2xsVG9wLHE9cCtoLndyYXBwZXIuY2xpZW50SGVpZ2h0OzA+bj9wPU1hdGgubWF4KDAscCtuLTUwKTpxPU1hdGgubWluKGIuZG9jLmhlaWdodCxxK24rNTApLFkoYix7dG9wOnAsYm90dG9tOnF9KX0yMD5FZCYmKG51bGw9PWgud2hlZWxTdGFydFg/KGgud2hlZWxTdGFydFg9ai5zY3JvbGxMZWZ0LGgud2hlZWxTdGFydFk9ai5zY3JvbGxUb3AsaC53aGVlbERYPWUsaC53aGVlbERZPWcsc2V0VGltZW91dChmdW5jdGlvbigpe2lmKG51bGwhPWgud2hlZWxTdGFydFgpe3ZhciBhPWouc2Nyb2xsTGVmdC1oLndoZWVsU3RhcnRYLGI9ai5zY3JvbGxUb3AtaC53aGVlbFN0YXJ0WSxjPWImJmgud2hlZWxEWSYmYi9oLndoZWVsRFl8fGEmJmgud2hlZWxEWCYmYS9oLndoZWVsRFg7aC53aGVlbFN0YXJ0WD1oLndoZWVsU3RhcnRZPW51bGwsYyYmKEZkPShGZCpFZCtjKS8oRWQrMSksKytFZCl9fSwyMDApKTooaC53aGVlbERYKz1lLGgud2hlZWxEWSs9ZykpfX1mdW5jdGlvbiBJZChhLGIsYyl7aWYoInN0cmluZyI9PXR5cGVvZiBiJiYoYj1GZVtiXSwhYikpcmV0dXJuITE7YS5kaXNwbGF5LmlucHV0LmVuc3VyZVBvbGxlZCgpO3ZhciBkPWEuZGlzcGxheS5zaGlmdCxlPSExO3RyeXt1YihhKSYmKGEuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMCksYyYmKGEuZGlzcGxheS5zaGlmdD0hMSksZT1iKGEpIT1PZ31maW5hbGx5e2EuZGlzcGxheS5zaGlmdD1kLGEuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMX1yZXR1cm4gZX1mdW5jdGlvbiBKZChhLGIsYyl7Zm9yKHZhciBkPTA7ZDxhLnN0YXRlLmtleU1hcHMubGVuZ3RoO2QrKyl7dmFyIGU9SWUoYixhLnN0YXRlLmtleU1hcHNbZF0sYyxhKTtpZihlKXJldHVybiBlfXJldHVybiBhLm9wdGlvbnMuZXh0cmFLZXlzJiZJZShiLGEub3B0aW9ucy5leHRyYUtleXMsYyxhKXx8SWUoYixhLm9wdGlvbnMua2V5TWFwLGMsYSl9ZnVuY3Rpb24gTGQoYSxiLGMsZCl7dmFyIGU9YS5zdGF0ZS5rZXlTZXE7aWYoZSl7aWYoSmUoYikpcmV0dXJuImhhbmRsZWQiO0tkLnNldCg1MCxmdW5jdGlvbigpe2Euc3RhdGUua2V5U2VxPT1lJiYoYS5zdGF0ZS5rZXlTZXE9bnVsbCxhLmRpc3BsYXkuaW5wdXQucmVzZXQoKSl9KSxiPWUrIiAiK2J9dmFyIGY9SmQoYSxiLGQpO3JldHVybiJtdWx0aSI9PWYmJihhLnN0YXRlLmtleVNlcT1iKSwiaGFuZGxlZCI9PWYmJkhnKGEsImtleUhhbmRsZWQiLGEsYixjKSwoImhhbmRsZWQiPT1mfHwibXVsdGkiPT1mKSYmKHhnKGMpLGZjKGEpKSxlJiYhZiYmL1wnJC8udGVzdChiKT8oeGcoYyksITApOiEhZn1mdW5jdGlvbiBNZChhLGIpe3ZhciBjPUtlKGIsITApO3JldHVybiBjP2Iuc2hpZnRLZXkmJiFhLnN0YXRlLmtleVNlcT9MZChhLCJTaGlmdC0iK2MsYixmdW5jdGlvbihiKXtyZXR1cm4gSWQoYSxiLCEwKX0pfHxMZChhLGMsYixmdW5jdGlvbihiKXtyZXR1cm4oInN0cmluZyI9PXR5cGVvZiBiPy9eZ29bQS1aXS8udGVzdChiKTpiLm1vdGlvbik/SWQoYSxiKTp2b2lkIDB9KTpMZChhLGMsYixmdW5jdGlvbihiKXtyZXR1cm4gSWQoYSxiKX0pOiExfWZ1bmN0aW9uIE5kKGEsYixjKXtyZXR1cm4gTGQoYSwiJyIrYysiJyIsYixmdW5jdGlvbihiKXtyZXR1cm4gSWQoYSxiLCEwKX0pfWZ1bmN0aW9uIFBkKGEpe3ZhciBiPXRoaXM7aWYodGIoYiksIUpnKGIsYSkpe2QmJjExPmUmJjI3PT1hLmtleUNvZGUmJihhLnJldHVyblZhbHVlPSExKTt2YXIgYz1hLmtleUNvZGU7Yi5kaXNwbGF5LnNoaWZ0PTE2PT1jfHxhLnNoaWZ0S2V5O3ZhciBmPU1kKGIsYSk7aSYmKE9kPWY/YzpudWxsLCFmJiY4OD09YyYmIUVoJiYobz9hLm1ldGFLZXk6YS5jdHJsS2V5KSYmYi5yZXBsYWNlU2VsZWN0aW9uKCIiLG51bGwsImN1dCIpKSwxOCE9Y3x8L1xiQ29kZU1pcnJvci1jcm9zc2hhaXJcYi8udGVzdChiLmRpc3BsYXkubGluZURpdi5jbGFzc05hbWUpfHxRZChiKX19ZnVuY3Rpb24gUWQoYSl7ZnVuY3Rpb24gYyhhKXsxOCE9YS5rZXlDb2RlJiZhLmFsdEtleXx8KHFoKGIsIkNvZGVNaXJyb3ItY3Jvc3NoYWlyIiksRWcoZG9jdW1lbnQsImtleXVwIixjKSxFZyhkb2N1bWVudCwibW91c2VvdmVyIixjKSl9dmFyIGI9YS5kaXNwbGF5LmxpbmVEaXY7cmgoYiwiQ29kZU1pcnJvci1jcm9zc2hhaXIiKSxEZyhkb2N1bWVudCwia2V5dXAiLGMpLERnKGRvY3VtZW50LCJtb3VzZW92ZXIiLGMpfWZ1bmN0aW9uIFJkKGEpezE2PT1hLmtleUNvZGUmJih0aGlzLmRvYy5zZWwuc2hpZnQ9ITEpLEpnKHRoaXMsYSl9ZnVuY3Rpb24gU2QoYSl7dmFyIGI9dGhpcztpZighKHBkKGIuZGlzcGxheSxhKXx8SmcoYixhKXx8YS5jdHJsS2V5JiYhYS5hbHRLZXl8fG8mJmEubWV0YUtleSkpe3ZhciBjPWEua2V5Q29kZSxkPWEuY2hhckNvZGU7aWYoaSYmYz09T2QpcmV0dXJuIE9kPW51bGwseGcoYSksdm9pZCAwO2lmKCFpfHxhLndoaWNoJiYhKGEud2hpY2g8MTApfHwhTWQoYixhKSl7dmFyIGU9U3RyaW5nLmZyb21DaGFyQ29kZShudWxsPT1kP2M6ZCk7TmQoYixhLGUpfHxiLmRpc3BsYXkuaW5wdXQub25LZXlQcmVzcyhhKX19fWZ1bmN0aW9uIFRkKGEpeyJub2N1cnNvciIhPWEub3B0aW9ucy5yZWFkT25seSYmKGEuc3RhdGUuZm9jdXNlZHx8KEZnKGEsImZvY3VzIixhKSxhLnN0YXRlLmZvY3VzZWQ9ITAscmgoYS5kaXNwbGF5LndyYXBwZXIsIkNvZGVNaXJyb3ItZm9jdXNlZCIpLGEuY3VyT3B8fGEuZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudT09YS5kb2Muc2VsfHwoYS5kaXNwbGF5LmlucHV0LnJlc2V0KCksZiYmc2V0VGltZW91dChmdW5jdGlvbigpe2EuZGlzcGxheS5pbnB1dC5yZXNldCghMCl9LDIwKSksYS5kaXNwbGF5LmlucHV0LnJlY2VpdmVkRm9jdXMoKSksZmMoYSkpfWZ1bmN0aW9uIFVkKGEpe2Euc3RhdGUuZm9jdXNlZCYmKEZnKGEsImJsdXIiLGEpLGEuc3RhdGUuZm9jdXNlZD0hMSxxaChhLmRpc3BsYXkud3JhcHBlciwiQ29kZU1pcnJvci1mb2N1c2VkIikpLGNsZWFySW50ZXJ2YWwoYS5kaXNwbGF5LmJsaW5rZXIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXthLnN0YXRlLmZvY3VzZWR8fChhLmRpc3BsYXkuc2hpZnQ9ITEpfSwxNTApfWZ1bmN0aW9uIFZkKGEsYil7cGQoYS5kaXNwbGF5LGIpfHxXZChhLGIpfHxhLmRpc3BsYXkuaW5wdXQub25Db250ZXh0TWVudShiKX1mdW5jdGlvbiBXZChhLGIpe3JldHVybiBMZyhhLCJndXR0ZXJDb250ZXh0TWVudSIpP3hkKGEsYiwiZ3V0dGVyQ29udGV4dE1lbnUiLCExLEZnKTohMX1mdW5jdGlvbiBZZChhLGIpe2lmKHBiKGEsYi5mcm9tKTwwKXJldHVybiBhO2lmKHBiKGEsYi50byk8PTApcmV0dXJuIFhkKGIpO3ZhciBjPWEubGluZStiLnRleHQubGVuZ3RoLShiLnRvLmxpbmUtYi5mcm9tLmxpbmUpLTEsZD1hLmNoO3JldHVybiBhLmxpbmU9PWIudG8ubGluZSYmKGQrPVhkKGIpLmNoLWIudG8uY2gpLG9iKGMsZCl9ZnVuY3Rpb24gWmQoYSxiKXtmb3IodmFyIGM9W10sZD0wO2Q8YS5zZWwucmFuZ2VzLmxlbmd0aDtkKyspe3ZhciBlPWEuc2VsLnJhbmdlc1tkXTtjLnB1c2gobmV3IEliKFlkKGUuYW5jaG9yLGIpLFlkKGUuaGVhZCxiKSkpfXJldHVybiBKYihjLGEuc2VsLnByaW1JbmRleCl9ZnVuY3Rpb24gJGQoYSxiLGMpe3JldHVybiBhLmxpbmU9PWIubGluZT9vYihjLmxpbmUsYS5jaC1iLmNoK2MuY2gpOm9iKGMubGluZSsoYS5saW5lLWIubGluZSksYS5jaCl9ZnVuY3Rpb24gX2QoYSxiLGMpe2Zvcih2YXIgZD1bXSxlPW9iKGEuZmlyc3QsMCksZj1lLGc9MDtnPGIubGVuZ3RoO2crKyl7dmFyIGg9YltnXSxpPSRkKGguZnJvbSxlLGYpLGo9JGQoWGQoaCksZSxmKTtpZihlPWgudG8sZj1qLCJhcm91bmQiPT1jKXt2YXIgaz1hLnNlbC5yYW5nZXNbZ10sbD1wYihrLmhlYWQsay5hbmNob3IpPDA7ZFtnXT1uZXcgSWIobD9qOmksbD9pOmopfWVsc2UgZFtnXT1uZXcgSWIoaSxpKX1yZXR1cm4gbmV3IEhiKGQsYS5zZWwucHJpbUluZGV4KX1mdW5jdGlvbiBhZShhLGIsYyl7dmFyIGQ9e2NhbmNlbGVkOiExLGZyb206Yi5mcm9tLHRvOmIudG8sdGV4dDpiLnRleHQsb3JpZ2luOmIub3JpZ2luLGNhbmNlbDpmdW5jdGlvbigpe3RoaXMuY2FuY2VsZWQ9ITB9fTtyZXR1cm4gYyYmKGQudXBkYXRlPWZ1bmN0aW9uKGIsYyxkLGUpe2ImJih0aGlzLmZyb209TWIoYSxiKSksYyYmKHRoaXMudG89TWIoYSxjKSksZCYmKHRoaXMudGV4dD1kKSx2b2lkIDAhPT1lJiYodGhpcy5vcmlnaW49ZSl9KSxGZyhhLCJiZWZvcmVDaGFuZ2UiLGEsZCksYS5jbSYmRmcoYS5jbSwiYmVmb3JlQ2hhbmdlIixhLmNtLGQpLGQuY2FuY2VsZWQ/bnVsbDp7ZnJvbTpkLmZyb20sdG86ZC50byx0ZXh0OmQudGV4dCxvcmlnaW46ZC5vcmlnaW59fWZ1bmN0aW9uIGJlKGEsYixjKXtpZihhLmNtKXtpZighYS5jbS5jdXJPcClyZXR1cm4gYmQoYS5jbSxiZSkoYSxiLGMpO2lmKGEuY20uc3RhdGUuc3VwcHJlc3NFZGl0cylyZXR1cm59aWYoIShMZyhhLCJiZWZvcmVDaGFuZ2UiKXx8YS5jbSYmTGcoYS5jbSwiYmVmb3JlQ2hhbmdlIikpfHwoYj1hZShhLGIsITApKSl7dmFyIGQ9dCYmIWMmJmNmKGEsYi5mcm9tLGIudG8pO2lmKGQpZm9yKHZhciBlPWQubGVuZ3RoLTE7ZT49MDstLWUpY2UoYSx7ZnJvbTpkW2VdLmZyb20sdG86ZFtlXS50byx0ZXh0OmU/WyIiXTpiLnRleHR9KTtlbHNlIGNlKGEsYil9fWZ1bmN0aW9uIGNlKGEsYil7aWYoMSE9Yi50ZXh0Lmxlbmd0aHx8IiIhPWIudGV4dFswXXx8MCE9cGIoYi5mcm9tLGIudG8pKXt2YXIgYz1aZChhLGIpO21nKGEsYixjLGEuY20/YS5jbS5jdXJPcC5pZDowLzApLGZlKGEsYixjLF9lKGEsYikpO3ZhciBkPVtdOyRmKGEsZnVuY3Rpb24oYSxjKXtjfHwtMSE9WmcoZCxhLmhpc3RvcnkpfHwod2coYS5oaXN0b3J5LGIpLGQucHVzaChhLmhpc3RvcnkpKSxmZShhLGIsbnVsbCxfZShhLGIpKX0pfX1mdW5jdGlvbiBkZShhLGIsYyl7aWYoIWEuY218fCFhLmNtLnN0YXRlLnN1cHByZXNzRWRpdHMpe2Zvcih2YXIgZSxkPWEuaGlzdG9yeSxmPWEuc2VsLGc9InVuZG8iPT1iP2QuZG9uZTpkLnVuZG9uZSxoPSJ1bmRvIj09Yj9kLnVuZG9uZTpkLmRvbmUsaT0wO2k8Zy5sZW5ndGgmJihlPWdbaV0sYz8hZS5yYW5nZXN8fGUuZXF1YWxzKGEuc2VsKTplLnJhbmdlcyk7aSsrKTtpZihpIT1nLmxlbmd0aCl7Zm9yKGQubGFzdE9yaWdpbj1kLmxhc3RTZWxPcmlnaW49bnVsbDtlPWcucG9wKCksZS5yYW5nZXM7KXtpZihwZyhlLGgpLGMmJiFlLmVxdWFscyhhLnNlbCkpcmV0dXJuIFhiKGEsZSx7Y2xlYXJSZWRvOiExfSksdm9pZCAwO2Y9ZX12YXIgaj1bXTtwZyhmLGgpLGgucHVzaCh7Y2hhbmdlczpqLGdlbmVyYXRpb246ZC5nZW5lcmF0aW9ufSksZC5nZW5lcmF0aW9uPWUuZ2VuZXJhdGlvbnx8KytkLm1heEdlbmVyYXRpb247Zm9yKHZhciBrPUxnKGEsImJlZm9yZUNoYW5nZSIpfHxhLmNtJiZMZyhhLmNtLCJiZWZvcmVDaGFuZ2UiKSxpPWUuY2hhbmdlcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGw9ZS5jaGFuZ2VzW2ldO2lmKGwub3JpZ2luPWIsayYmIWFlKGEsbCwhMSkpcmV0dXJuIGcubGVuZ3RoPTAsdm9pZCAwO2oucHVzaChqZyhhLGwpKTt2YXIgbT1pP1pkKGEsbCk6WGcoZyk7ZmUoYSxsLG0sYmYoYSxsKSksIWkmJmEuY20mJmEuY20uc2Nyb2xsSW50b1ZpZXcoe2Zyb206bC5mcm9tLHRvOlhkKGwpfSk7dmFyIG49W107JGYoYSxmdW5jdGlvbihhLGIpe2J8fC0xIT1aZyhuLGEuaGlzdG9yeSl8fCh3ZyhhLmhpc3RvcnksbCksbi5wdXNoKGEuaGlzdG9yeSkpLGZlKGEsbCxudWxsLGJmKGEsbCkpfSl9fX19ZnVuY3Rpb24gZWUoYSxiKXtpZigwIT1iJiYoYS5maXJzdCs9YixhLnNlbD1uZXcgSGIoJGcoYS5zZWwucmFuZ2VzLGZ1bmN0aW9uKGEpe3JldHVybiBuZXcgSWIob2IoYS5hbmNob3IubGluZStiLGEuYW5jaG9yLmNoKSxvYihhLmhlYWQubGluZStiLGEuaGVhZC5jaCkpfSksYS5zZWwucHJpbUluZGV4KSxhLmNtKSl7Z2QoYS5jbSxhLmZpcnN0LGEuZmlyc3QtYixiKTtmb3IodmFyIGM9YS5jbS5kaXNwbGF5LGQ9Yy52aWV3RnJvbTtkPGMudmlld1RvO2QrKyloZChhLmNtLGQsImd1dHRlciIpfX1mdW5jdGlvbiBmZShhLGIsYyxkKXtpZihhLmNtJiYhYS5jbS5jdXJPcClyZXR1cm4gYmQoYS5jbSxmZSkoYSxiLGMsZCk7aWYoYi50by5saW5lPGEuZmlyc3QpcmV0dXJuIGVlKGEsYi50ZXh0Lmxlbmd0aC0xLShiLnRvLmxpbmUtYi5mcm9tLmxpbmUpKSx2b2lkIDA7aWYoIShiLmZyb20ubGluZT5hLmxhc3RMaW5lKCkpKXtpZihiLmZyb20ubGluZTxhLmZpcnN0KXt2YXIgZT1iLnRleHQubGVuZ3RoLTEtKGEuZmlyc3QtYi5mcm9tLmxpbmUpO2VlKGEsZSksYj17ZnJvbTpvYihhLmZpcnN0LDApLHRvOm9iKGIudG8ubGluZStlLGIudG8uY2gpLHRleHQ6W1hnKGIudGV4dCldLG9yaWdpbjpiLm9yaWdpbn19dmFyIGY9YS5sYXN0TGluZSgpO2IudG8ubGluZT5mJiYoYj17ZnJvbTpiLmZyb20sdG86b2IoZixhZyhhLGYpLnRleHQubGVuZ3RoKSx0ZXh0OltiLnRleHRbMF1dLG9yaWdpbjpiLm9yaWdpbn0pLGIucmVtb3ZlZD1iZyhhLGIuZnJvbSxiLnRvKSxjfHwoYz1aZChhLGIpKSxhLmNtP2dlKGEuY20sYixkKTpUZihhLGIsZCksWWIoYSxjLFBnKX19ZnVuY3Rpb24gZ2UoYSxiLGMpe3ZhciBkPWEuZG9jLGU9YS5kaXNwbGF5LGY9Yi5mcm9tLGc9Yi50byxoPSExLGk9Zi5saW5lO2Eub3B0aW9ucy5saW5lV3JhcHBpbmd8fChpPWVnKG5mKGFnKGQsZi5saW5lKSkpLGQuaXRlcihpLGcubGluZSsxLGZ1bmN0aW9uKGEpe3JldHVybiBhPT1lLm1heExpbmU/KGg9ITAsITApOnZvaWQgMH0pKSxkLnNlbC5jb250YWlucyhiLmZyb20sYi50byk+LTEmJktnKGEpLFRmKGQsYixjLEEoYSkpLGEub3B0aW9ucy5saW5lV3JhcHBpbmd8fChkLml0ZXIoaSxmLmxpbmUrYi50ZXh0Lmxlbmd0aCxmdW5jdGlvbihhKXt2YXIgYj1HKGEpO2I+ZS5tYXhMaW5lTGVuZ3RoJiYoZS5tYXhMaW5lPWEsZS5tYXhMaW5lTGVuZ3RoPWIsZS5tYXhMaW5lQ2hhbmdlZD0hMCxoPSExKX0pLGgmJihhLmN1ck9wLnVwZGF0ZU1heExpbmU9ITApKSxkLmZyb250aWVyPU1hdGgubWluKGQuZnJvbnRpZXIsZi5saW5lKSxnYyhhLDQwMCk7dmFyIGo9Yi50ZXh0Lmxlbmd0aC0oZy5saW5lLWYubGluZSktMTtiLmZ1bGw/Z2QoYSk6Zi5saW5lIT1nLmxpbmV8fDEhPWIudGV4dC5sZW5ndGh8fFNmKGEuZG9jLGIpP2dkKGEsZi5saW5lLGcubGluZSsxLGopOmhkKGEsZi5saW5lLCJ0ZXh0Iik7dmFyIGs9TGcoYSwiY2hhbmdlcyIpLGw9TGcoYSwiY2hhbmdlIik7aWYobHx8ayl7dmFyIG09e2Zyb206Zix0bzpnLHRleHQ6Yi50ZXh0LHJlbW92ZWQ6Yi5yZW1vdmVkLG9yaWdpbjpiLm9yaWdpbn07bCYmSGcoYSwiY2hhbmdlIixhLG0pLGsmJihhLmN1ck9wLmNoYW5nZU9ianN8fChhLmN1ck9wLmNoYW5nZU9ianM9W10pKS5wdXNoKG0pfWEuZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudT1udWxsfWZ1bmN0aW9uIGhlKGEsYixjLGQsZSl7aWYoZHx8KGQ9YykscGIoZCxjKTwwKXt2YXIgZj1kO2Q9YyxjPWZ9InN0cmluZyI9PXR5cGVvZiBiJiYoYj1DaChiKSksYmUoYSx7ZnJvbTpjLHRvOmQsdGV4dDpiLG9yaWdpbjplfSl9ZnVuY3Rpb24gaWUoYSxiKXtpZighSmcoYSwic2Nyb2xsQ3Vyc29ySW50b1ZpZXciKSl7dmFyIGM9YS5kaXNwbGF5LGQ9Yy5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlPW51bGw7aWYoYi50b3ArZC50b3A8MD9lPSEwOmIuYm90dG9tK2QudG9wPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpJiYoZT0hMSksbnVsbCE9ZSYmIWwpe3ZhciBmPWpoKCJkaXYiLCJcdTIwMGIiLG51bGwsInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAiKyhiLnRvcC1jLnZpZXdPZmZzZXQta2MoYS5kaXNwbGF5KSkrInB4OyBoZWlnaHQ6ICIrKGIuYm90dG9tLWIudG9wK25jKGEpK2MuYmFySGVpZ2h0KSsicHg7IGxlZnQ6ICIrYi5sZWZ0KyJweDsgd2lkdGg6IDJweDsiKTthLmRpc3BsYXkubGluZVNwYWNlLmFwcGVuZENoaWxkKGYpLGYuc2Nyb2xsSW50b1ZpZXcoZSksYS5kaXNwbGF5LmxpbmVTcGFjZS5yZW1vdmVDaGlsZChmKX19fWZ1bmN0aW9uIGplKGEsYixjLGQpe251bGw9PWQmJihkPTApO2Zvcih2YXIgZT0wOzU+ZTtlKyspe3ZhciBmPSExLGc9SmMoYSxiKSxoPWMmJmMhPWI/SmMoYSxjKTpnLGk9bGUoYSxNYXRoLm1pbihnLmxlZnQsaC5sZWZ0KSxNYXRoLm1pbihnLnRvcCxoLnRvcCktZCxNYXRoLm1heChnLmxlZnQsaC5sZWZ0KSxNYXRoLm1heChnLmJvdHRvbSxoLmJvdHRvbSkrZCksaj1hLmRvYy5zY3JvbGxUb3Asaz1hLmRvYy5zY3JvbGxMZWZ0O2lmKG51bGwhPWkuc2Nyb2xsVG9wJiYoQ2QoYSxpLnNjcm9sbFRvcCksTWF0aC5hYnMoYS5kb2Muc2Nyb2xsVG9wLWopPjEmJihmPSEwKSksbnVsbCE9aS5zY3JvbGxMZWZ0JiYoRGQoYSxpLnNjcm9sbExlZnQpLE1hdGguYWJzKGEuZG9jLnNjcm9sbExlZnQtayk+MSYmKGY9ITApKSwhZilicmVha31yZXR1cm4gZ31mdW5jdGlvbiBrZShhLGIsYyxkLGUpe3ZhciBmPWxlKGEsYixjLGQsZSk7bnVsbCE9Zi5zY3JvbGxUb3AmJkNkKGEsZi5zY3JvbGxUb3ApLG51bGwhPWYuc2Nyb2xsTGVmdCYmRGQoYSxmLnNjcm9sbExlZnQpfWZ1bmN0aW9uIGxlKGEsYixjLGQsZSl7dmFyIGY9YS5kaXNwbGF5LGc9UGMoYS5kaXNwbGF5KTswPmMmJihjPTApO3ZhciBoPWEuY3VyT3AmJm51bGwhPWEuY3VyT3Auc2Nyb2xsVG9wP2EuY3VyT3Auc2Nyb2xsVG9wOmYuc2Nyb2xsZXIuc2Nyb2xsVG9wLGk9cGMoYSksaj17fTtlLWM+aSYmKGU9YytpKTt2YXIgaz1hLmRvYy5oZWlnaHQrbGMoZiksbD1nPmMsbT1lPmstZztpZihoPmMpai5zY3JvbGxUb3A9bD8wOmM7ZWxzZSBpZihlPmgraSl7dmFyIG49TWF0aC5taW4oYywobT9rOmUpLWkpO24hPWgmJihqLnNjcm9sbFRvcD1uKX12YXIgbz1hLmN1ck9wJiZudWxsIT1hLmN1ck9wLnNjcm9sbExlZnQ/YS5jdXJPcC5zY3JvbGxMZWZ0OmYuc2Nyb2xsZXIuc2Nyb2xsTGVmdCxwPW9jKGEpLShhLm9wdGlvbnMuZml4ZWRHdXR0ZXI/Zi5ndXR0ZXJzLm9mZnNldFdpZHRoOjApLHE9ZC1iPnA7cmV0dXJuIHEmJihkPWIrcCksMTA+Yj9qLnNjcm9sbExlZnQ9MDpvPmI/ai5zY3JvbGxMZWZ0PU1hdGgubWF4KDAsYi0ocT8wOjEwKSk6ZD5wK28tMyYmKGouc2Nyb2xsTGVmdD1kKyhxPzA6MTApLXApLGp9ZnVuY3Rpb24gbWUoYSxiLGMpeyhudWxsIT1ifHxudWxsIT1jKSYmb2UoYSksbnVsbCE9YiYmKGEuY3VyT3Auc2Nyb2xsTGVmdD0obnVsbD09YS5jdXJPcC5zY3JvbGxMZWZ0P2EuZG9jLnNjcm9sbExlZnQ6YS5jdXJPcC5zY3JvbGxMZWZ0KStiKSxudWxsIT1jJiYoYS5jdXJPcC5zY3JvbGxUb3A9KG51bGw9PWEuY3VyT3Auc2Nyb2xsVG9wP2EuZG9jLnNjcm9sbFRvcDphLmN1ck9wLnNjcm9sbFRvcCkrYyl9ZnVuY3Rpb24gbmUoYSl7b2UoYSk7dmFyIGI9YS5nZXRDdXJzb3IoKSxjPWIsZD1iO2Eub3B0aW9ucy5saW5lV3JhcHBpbmd8fChjPWIuY2g/b2IoYi5saW5lLGIuY2gtMSk6YixkPW9iKGIubGluZSxiLmNoKzEpKSxhLmN1ck9wLnNjcm9sbFRvUG9zPXtmcm9tOmMsdG86ZCxtYXJnaW46YS5vcHRpb25zLmN1cnNvclNjcm9sbE1hcmdpbixpc0N1cnNvcjohMH19ZnVuY3Rpb24gb2UoYSl7dmFyIGI9YS5jdXJPcC5zY3JvbGxUb1BvcztpZihiKXthLmN1ck9wLnNjcm9sbFRvUG9zPW51bGw7dmFyIGM9S2MoYSxiLmZyb20pLGQ9S2MoYSxiLnRvKSxlPWxlKGEsTWF0aC5taW4oYy5sZWZ0LGQubGVmdCksTWF0aC5taW4oYy50b3AsZC50b3ApLWIubWFyZ2luLE1hdGgubWF4KGMucmlnaHQsZC5yaWdodCksTWF0aC5tYXgoYy5ib3R0b20sZC5ib3R0b20pK2IubWFyZ2luKTthLnNjcm9sbFRvKGUuc2Nyb2xsTGVmdCxlLnNjcm9sbFRvcCl9fWZ1bmN0aW9uIHBlKGEsYixjLGQpe3ZhciBmLGU9YS5kb2M7bnVsbD09YyYmKGM9ImFkZCIpLCJzbWFydCI9PWMmJihlLm1vZGUuaW5kZW50P2Y9amMoYSxiKTpjPSJwcmV2Iik7dmFyIGc9YS5vcHRpb25zLnRhYlNpemUsaD1hZyhlLGIpLGk9VGcoaC50ZXh0LG51bGwsZyk7aC5zdGF0ZUFmdGVyJiYoaC5zdGF0ZUFmdGVyPW51bGwpO3ZhciBrLGo9aC50ZXh0Lm1hdGNoKC9eXHMqLylbMF07aWYoZHx8L1xTLy50ZXN0KGgudGV4dCkpe2lmKCJzbWFydCI9PWMmJihrPWUubW9kZS5pbmRlbnQoZixoLnRleHQuc2xpY2Uoai5sZW5ndGgpLGgudGV4dCksaz09T2d8fGs+MTUwKSl7aWYoIWQpcmV0dXJuO2M9InByZXYifX1lbHNlIGs9MCxjPSJub3QiOyJwcmV2Ij09Yz9rPWI+ZS5maXJzdD9UZyhhZyhlLGItMSkudGV4dCxudWxsLGcpOjA6ImFkZCI9PWM/az1pK2Eub3B0aW9ucy5pbmRlbnRVbml0OiJzdWJ0cmFjdCI9PWM/az1pLWEub3B0aW9ucy5pbmRlbnRVbml0OiJudW1iZXIiPT10eXBlb2YgYyYmKGs9aStjKSxrPU1hdGgubWF4KDAsayk7dmFyIGw9IiIsbT0wO2lmKGEub3B0aW9ucy5pbmRlbnRXaXRoVGFicylmb3IodmFyIG49TWF0aC5mbG9vcihrL2cpO247LS1uKW0rPWcsbCs9IgkiO2lmKGs+bSYmKGwrPVdnKGstbSkpLGwhPWopaGUoZSxsLG9iKGIsMCksb2IoYixqLmxlbmd0aCksIitpbnB1dCIpO2Vsc2UgZm9yKHZhciBuPTA7bjxlLnNlbC5yYW5nZXMubGVuZ3RoO24rKyl7dmFyIG89ZS5zZWwucmFuZ2VzW25dO2lmKG8uaGVhZC5saW5lPT1iJiZvLmhlYWQuY2g8ai5sZW5ndGgpe3ZhciBtPW9iKGIsai5sZW5ndGgpO1RiKGUsbixuZXcgSWIobSxtKSk7YnJlYWt9fWguc3RhdGVBZnRlcj1udWxsfWZ1bmN0aW9uIHFlKGEsYixjLGQpe3ZhciBlPWIsZj1iO3JldHVybiJudW1iZXIiPT10eXBlb2YgYj9mPWFnKGEsTGIoYSxiKSk6ZT1lZyhiKSxudWxsPT1lP251bGw6KGQoZixlKSYmYS5jbSYmaGQoYS5jbSxlLGMpLGYpfWZ1bmN0aW9uIHJlKGEsYil7Zm9yKHZhciBjPWEuZG9jLnNlbC5yYW5nZXMsZD1bXSxlPTA7ZTxjLmxlbmd0aDtlKyspe2Zvcih2YXIgZj1iKGNbZV0pO2QubGVuZ3RoJiZwYihmLmZyb20sWGcoZCkudG8pPD0wOyl7dmFyIGc9ZC5wb3AoKTtpZihwYihnLmZyb20sZi5mcm9tKTwwKXtmLmZyb209Zy5mcm9tO2JyZWFrfX1kLnB1c2goZil9YWQoYSxmdW5jdGlvbigpe2Zvcih2YXIgYj1kLmxlbmd0aC0xO2I+PTA7Yi0tKWhlKGEuZG9jLCIiLGRbYl0uZnJvbSxkW2JdLnRvLCIrZGVsZXRlIik7bmUoYSl9KX1mdW5jdGlvbiBzZShhLGIsYyxkLGUpe2Z1bmN0aW9uIGsoKXt2YXIgYj1mK2M7cmV0dXJuIGI8YS5maXJzdHx8Yj49YS5maXJzdCthLnNpemU/aj0hMTooZj1iLGk9YWcoYSxiKSl9ZnVuY3Rpb24gbChhKXt2YXIgYj0oZT9VaDpWaCkoaSxnLGMsITApO2lmKG51bGw9PWIpe2lmKGF8fCFrKCkpcmV0dXJuIGo9ITE7Zz1lPygwPmM/TWg6TGgpKGkpOjA+Yz9pLnRleHQubGVuZ3RoOjB9ZWxzZSBnPWI7cmV0dXJuITB9dmFyIGY9Yi5saW5lLGc9Yi5jaCxoPWMsaT1hZyhhLGYpLGo9ITA7aWYoImNoYXIiPT1kKWwoKTtlbHNlIGlmKCJjb2x1bW4iPT1kKWwoITApO2Vsc2UgaWYoIndvcmQiPT1kfHwiZ3JvdXAiPT1kKWZvcih2YXIgbT1udWxsLG49Imdyb3VwIj09ZCxvPWEuY20mJmEuY20uZ2V0SGVscGVyKGIsIndvcmRDaGFycyIpLHA9ITA7ISgwPmMpfHxsKCFwKTtwPSExKXt2YXIgcT1pLnRleHQuY2hhckF0KGcpfHwiXG4iLHI9ZmgocSxvKT8idyI6biYmIlxuIj09cT8ibiI6IW58fC9ccy8udGVzdChxKT9udWxsOiJwIjtpZighbnx8cHx8cnx8KHI9InMiKSxtJiZtIT1yKXswPmMmJihjPTEsbCgpKTticmVha31pZihyJiYobT1yKSxjPjAmJiFsKCFwKSlicmVha312YXIgcz1hYyhhLG9iKGYsZyksaCwhMCk7cmV0dXJuIGp8fChzLmhpdFNpZGU9ITApLHN9ZnVuY3Rpb24gdGUoYSxiLGMsZCl7dmFyIGcsZT1hLmRvYyxmPWIubGVmdDtpZigicGFnZSI9PWQpe3ZhciBoPU1hdGgubWluKGEuZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCx3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpO2c9Yi50b3ArYyooaC0oMD5jPzEuNTouNSkqUGMoYS5kaXNwbGF5KSl9ZWxzZSJsaW5lIj09ZCYmKGc9Yz4wP2IuYm90dG9tKzM6Yi50b3AtMyk7Zm9yKDs7KXt2YXIgaT1NYyhhLGYsZyk7aWYoIWkub3V0c2lkZSlicmVhaztpZigwPmM/MD49ZzpnPj1lLmhlaWdodCl7aS5oaXRTaWRlPSEwO2JyZWFrfWcrPTUqY31yZXR1cm4gaX1mdW5jdGlvbiB3ZShhLGIsYyxkKXt2LmRlZmF1bHRzW2FdPWIsYyYmKHZlW2FdPWQ/ZnVuY3Rpb24oYSxiLGQpe2QhPXhlJiZjKGEsYixkKX06Yyl9ZnVuY3Rpb24gSGUoYSl7Zm9yKHZhciBjLGQsZSxmLGI9YS5zcGxpdCgvLSg/ISQpLyksYT1iW2IubGVuZ3RoLTFdLGc9MDtnPGIubGVuZ3RoLTE7ZysrKXt2YXIgaD1iW2ddO2lmKC9eKGNtZHxtZXRhfG0pJC9pLnRlc3QoaCkpZj0hMDtlbHNlIGlmKC9eYShsdCk/JC9pLnRlc3QoaCkpYz0hMDtlbHNlIGlmKC9eKGN8Y3RybHxjb250cm9sKSQvaS50ZXN0KGgpKWQ9ITA7ZWxzZXtpZighL15zKGhpZnQpJC9pLnRlc3QoaCkpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgbW9kaWZpZXIgbmFtZTogIitoKTtlPSEwfX1yZXR1cm4gYyYmKGE9IkFsdC0iK2EpLGQmJihhPSJDdHJsLSIrYSksZiYmKGE9IkNtZC0iK2EpLGUmJihhPSJTaGlmdC0iK2EpLGF9ZnVuY3Rpb24gTGUoYSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhP0dlW2FdOmENCn1mdW5jdGlvbiBQZShhLGIsYyxkLGUpe2lmKGQmJmQuc2hhcmVkKXJldHVybiBSZShhLGIsYyxkLGUpO2lmKGEuY20mJiFhLmNtLmN1ck9wKXJldHVybiBiZChhLmNtLFBlKShhLGIsYyxkLGUpO3ZhciBmPW5ldyBPZShhLGUpLGc9cGIoYixjKTtpZihkJiZiaChkLGYsITEpLGc+MHx8MD09ZyYmZi5jbGVhcldoZW5FbXB0eSE9PSExKXJldHVybiBmO2lmKGYucmVwbGFjZWRXaXRoJiYoZi5jb2xsYXBzZWQ9ITAsZi53aWRnZXROb2RlPWpoKCJzcGFuIixbZi5yZXBsYWNlZFdpdGhdLCJDb2RlTWlycm9yLXdpZGdldCIpLGQuaGFuZGxlTW91c2VFdmVudHN8fGYud2lkZ2V0Tm9kZS5zZXRBdHRyaWJ1dGUoImNtLWlnbm9yZS1ldmVudHMiLCJ0cnVlIiksZC5pbnNlcnRMZWZ0JiYoZi53aWRnZXROb2RlLmluc2VydExlZnQ9ITApKSxmLmNvbGxhcHNlZCl7aWYobWYoYSxiLmxpbmUsYixjLGYpfHxiLmxpbmUhPWMubGluZSYmbWYoYSxjLmxpbmUsYixjLGYpKXRocm93IG5ldyBFcnJvcigiSW5zZXJ0aW5nIGNvbGxhcHNlZCBtYXJrZXIgcGFydGlhbGx5IG92ZXJsYXBwaW5nIGFuIGV4aXN0aW5nIG9uZSIpO3U9ITB9Zi5hZGRUb0hpc3RvcnkmJm1nKGEse2Zyb206Yix0bzpjLG9yaWdpbjoibWFya1RleHQifSxhLnNlbCwwLzApO3ZhciBqLGg9Yi5saW5lLGk9YS5jbTtpZihhLml0ZXIoaCxjLmxpbmUrMSxmdW5jdGlvbihhKXtpJiZmLmNvbGxhcHNlZCYmIWkub3B0aW9ucy5saW5lV3JhcHBpbmcmJm5mKGEpPT1pLmRpc3BsYXkubWF4TGluZSYmKGo9ITApLGYuY29sbGFwc2VkJiZoIT1iLmxpbmUmJmRnKGEsMCksWWUoYSxuZXcgVmUoZixoPT1iLmxpbmU/Yi5jaDpudWxsLGg9PWMubGluZT9jLmNoOm51bGwpKSwrK2h9KSxmLmNvbGxhcHNlZCYmYS5pdGVyKGIubGluZSxjLmxpbmUrMSxmdW5jdGlvbihiKXtyZihhLGIpJiZkZyhiLDApfSksZi5jbGVhck9uRW50ZXImJkRnKGYsImJlZm9yZUN1cnNvckVudGVyIixmdW5jdGlvbigpe2YuY2xlYXIoKX0pLGYucmVhZE9ubHkmJih0PSEwLChhLmhpc3RvcnkuZG9uZS5sZW5ndGh8fGEuaGlzdG9yeS51bmRvbmUubGVuZ3RoKSYmYS5jbGVhckhpc3RvcnkoKSksZi5jb2xsYXBzZWQmJihmLmlkPSsrTmUsZi5hdG9taWM9ITApLGkpe2lmKGomJihpLmN1ck9wLnVwZGF0ZU1heExpbmU9ITApLGYuY29sbGFwc2VkKWdkKGksYi5saW5lLGMubGluZSsxKTtlbHNlIGlmKGYuY2xhc3NOYW1lfHxmLnRpdGxlfHxmLnN0YXJ0U3R5bGV8fGYuZW5kU3R5bGV8fGYuY3NzKWZvcih2YXIgaz1iLmxpbmU7azw9Yy5saW5lO2srKyloZChpLGssInRleHQiKTtmLmF0b21pYyYmJGIoaS5kb2MpLEhnKGksIm1hcmtlckFkZGVkIixpLGYpfXJldHVybiBmfWZ1bmN0aW9uIFJlKGEsYixjLGQsZSl7ZD1iaChkKSxkLnNoYXJlZD0hMTt2YXIgZj1bUGUoYSxiLGMsZCxlKV0sZz1mWzBdLGg9ZC53aWRnZXROb2RlO3JldHVybiAkZihhLGZ1bmN0aW9uKGEpe2gmJihkLndpZGdldE5vZGU9aC5jbG9uZU5vZGUoITApKSxmLnB1c2goUGUoYSxNYihhLGIpLE1iKGEsYyksZCxlKSk7Zm9yKHZhciBpPTA7aTxhLmxpbmtlZC5sZW5ndGg7KytpKWlmKGEubGlua2VkW2ldLmlzUGFyZW50KXJldHVybjtnPVhnKGYpfSksbmV3IFFlKGYsZyl9ZnVuY3Rpb24gU2UoYSl7cmV0dXJuIGEuZmluZE1hcmtzKG9iKGEuZmlyc3QsMCksYS5jbGlwUG9zKG9iKGEubGFzdExpbmUoKSkpLGZ1bmN0aW9uKGEpe3JldHVybiBhLnBhcmVudH0pfWZ1bmN0aW9uIFRlKGEsYil7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY10sZT1kLmZpbmQoKSxmPWEuY2xpcFBvcyhlLmZyb20pLGc9YS5jbGlwUG9zKGUudG8pO2lmKHBiKGYsZykpe3ZhciBoPVBlKGEsZixnLGQucHJpbWFyeSxkLnByaW1hcnkudHlwZSk7ZC5tYXJrZXJzLnB1c2goaCksaC5wYXJlbnQ9ZH19fWZ1bmN0aW9uIFVlKGEpe2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKXt2YXIgYz1hW2JdLGQ9W2MucHJpbWFyeS5kb2NdOyRmKGMucHJpbWFyeS5kb2MsZnVuY3Rpb24oYSl7ZC5wdXNoKGEpfSk7Zm9yKHZhciBlPTA7ZTxjLm1hcmtlcnMubGVuZ3RoO2UrKyl7dmFyIGY9Yy5tYXJrZXJzW2VdOy0xPT1aZyhkLGYuZG9jKSYmKGYucGFyZW50PW51bGwsYy5tYXJrZXJzLnNwbGljZShlLS0sMSkpfX19ZnVuY3Rpb24gVmUoYSxiLGMpe3RoaXMubWFya2VyPWEsdGhpcy5mcm9tPWIsdGhpcy50bz1jfWZ1bmN0aW9uIFdlKGEsYil7aWYoYSlmb3IodmFyIGM9MDtjPGEubGVuZ3RoOysrYyl7dmFyIGQ9YVtjXTtpZihkLm1hcmtlcj09YilyZXR1cm4gZH19ZnVuY3Rpb24gWGUoYSxiKXtmb3IodmFyIGMsZD0wO2Q8YS5sZW5ndGg7KytkKWFbZF0hPWImJihjfHwoYz1bXSkpLnB1c2goYVtkXSk7cmV0dXJuIGN9ZnVuY3Rpb24gWWUoYSxiKXthLm1hcmtlZFNwYW5zPWEubWFya2VkU3BhbnM/YS5tYXJrZWRTcGFucy5jb25jYXQoW2JdKTpbYl0sYi5tYXJrZXIuYXR0YWNoTGluZShhKX1mdW5jdGlvbiBaZShhLGIsYyl7aWYoYSlmb3IodmFyIGUsZD0wO2Q8YS5sZW5ndGg7KytkKXt2YXIgZj1hW2RdLGc9Zi5tYXJrZXIsaD1udWxsPT1mLmZyb218fChnLmluY2x1c2l2ZUxlZnQ/Zi5mcm9tPD1iOmYuZnJvbTxiKTtpZihofHxmLmZyb209PWImJiJib29rbWFyayI9PWcudHlwZSYmKCFjfHwhZi5tYXJrZXIuaW5zZXJ0TGVmdCkpe3ZhciBpPW51bGw9PWYudG98fChnLmluY2x1c2l2ZVJpZ2h0P2YudG8+PWI6Zi50bz5iKTsoZXx8KGU9W10pKS5wdXNoKG5ldyBWZShnLGYuZnJvbSxpP251bGw6Zi50bykpfX1yZXR1cm4gZX1mdW5jdGlvbiAkZShhLGIsYyl7aWYoYSlmb3IodmFyIGUsZD0wO2Q8YS5sZW5ndGg7KytkKXt2YXIgZj1hW2RdLGc9Zi5tYXJrZXIsaD1udWxsPT1mLnRvfHwoZy5pbmNsdXNpdmVSaWdodD9mLnRvPj1iOmYudG8+Yik7aWYoaHx8Zi5mcm9tPT1iJiYiYm9va21hcmsiPT1nLnR5cGUmJighY3x8Zi5tYXJrZXIuaW5zZXJ0TGVmdCkpe3ZhciBpPW51bGw9PWYuZnJvbXx8KGcuaW5jbHVzaXZlTGVmdD9mLmZyb208PWI6Zi5mcm9tPGIpOyhlfHwoZT1bXSkpLnB1c2gobmV3IFZlKGcsaT9udWxsOmYuZnJvbS1iLG51bGw9PWYudG8/bnVsbDpmLnRvLWIpKX19cmV0dXJuIGV9ZnVuY3Rpb24gX2UoYSxiKXtpZihiLmZ1bGwpcmV0dXJuIG51bGw7dmFyIGM9T2IoYSxiLmZyb20ubGluZSkmJmFnKGEsYi5mcm9tLmxpbmUpLm1hcmtlZFNwYW5zLGQ9T2IoYSxiLnRvLmxpbmUpJiZhZyhhLGIudG8ubGluZSkubWFya2VkU3BhbnM7aWYoIWMmJiFkKXJldHVybiBudWxsO3ZhciBlPWIuZnJvbS5jaCxmPWIudG8uY2gsZz0wPT1wYihiLmZyb20sYi50byksaD1aZShjLGUsZyksaT0kZShkLGYsZyksaj0xPT1iLnRleHQubGVuZ3RoLGs9WGcoYi50ZXh0KS5sZW5ndGgrKGo/ZTowKTtpZihoKWZvcih2YXIgbD0wO2w8aC5sZW5ndGg7KytsKXt2YXIgbT1oW2xdO2lmKG51bGw9PW0udG8pe3ZhciBuPVdlKGksbS5tYXJrZXIpO24/aiYmKG0udG89bnVsbD09bi50bz9udWxsOm4udG8rayk6bS50bz1lfX1pZihpKWZvcih2YXIgbD0wO2w8aS5sZW5ndGg7KytsKXt2YXIgbT1pW2xdO2lmKG51bGwhPW0udG8mJihtLnRvKz1rKSxudWxsPT1tLmZyb20pe3ZhciBuPVdlKGgsbS5tYXJrZXIpO258fChtLmZyb209ayxqJiYoaHx8KGg9W10pKS5wdXNoKG0pKX1lbHNlIG0uZnJvbSs9ayxqJiYoaHx8KGg9W10pKS5wdXNoKG0pfWgmJihoPWFmKGgpKSxpJiZpIT1oJiYoaT1hZihpKSk7dmFyIG89W2hdO2lmKCFqKXt2YXIgcSxwPWIudGV4dC5sZW5ndGgtMjtpZihwPjAmJmgpZm9yKHZhciBsPTA7bDxoLmxlbmd0aDsrK2wpbnVsbD09aFtsXS50byYmKHF8fChxPVtdKSkucHVzaChuZXcgVmUoaFtsXS5tYXJrZXIsbnVsbCxudWxsKSk7Zm9yKHZhciBsPTA7cD5sOysrbClvLnB1c2gocSk7by5wdXNoKGkpfXJldHVybiBvfWZ1bmN0aW9uIGFmKGEpe2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7KytiKXt2YXIgYz1hW2JdO251bGwhPWMuZnJvbSYmYy5mcm9tPT1jLnRvJiZjLm1hcmtlci5jbGVhcldoZW5FbXB0eSE9PSExJiZhLnNwbGljZShiLS0sMSl9cmV0dXJuIGEubGVuZ3RoP2E6bnVsbH1mdW5jdGlvbiBiZihhLGIpe3ZhciBjPXNnKGEsYiksZD1fZShhLGIpO2lmKCFjKXJldHVybiBkO2lmKCFkKXJldHVybiBjO2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7KytlKXt2YXIgZj1jW2VdLGc9ZFtlXTtpZihmJiZnKWE6Zm9yKHZhciBoPTA7aDxnLmxlbmd0aDsrK2gpe2Zvcih2YXIgaT1nW2hdLGo9MDtqPGYubGVuZ3RoOysrailpZihmW2pdLm1hcmtlcj09aS5tYXJrZXIpY29udGludWUgYTtmLnB1c2goaSl9ZWxzZSBnJiYoY1tlXT1nKX1yZXR1cm4gY31mdW5jdGlvbiBjZihhLGIsYyl7dmFyIGQ9bnVsbDtpZihhLml0ZXIoYi5saW5lLGMubGluZSsxLGZ1bmN0aW9uKGEpe2lmKGEubWFya2VkU3BhbnMpZm9yKHZhciBiPTA7YjxhLm1hcmtlZFNwYW5zLmxlbmd0aDsrK2Ipe3ZhciBjPWEubWFya2VkU3BhbnNbYl0ubWFya2VyOyFjLnJlYWRPbmx5fHxkJiYtMSE9WmcoZCxjKXx8KGR8fChkPVtdKSkucHVzaChjKX19KSwhZClyZXR1cm4gbnVsbDtmb3IodmFyIGU9W3tmcm9tOmIsdG86Y31dLGY9MDtmPGQubGVuZ3RoOysrZilmb3IodmFyIGc9ZFtmXSxoPWcuZmluZCgwKSxpPTA7aTxlLmxlbmd0aDsrK2kpe3ZhciBqPWVbaV07aWYoIShwYihqLnRvLGguZnJvbSk8MHx8cGIoai5mcm9tLGgudG8pPjApKXt2YXIgaz1baSwxXSxsPXBiKGouZnJvbSxoLmZyb20pLG09cGIoai50byxoLnRvKTsoMD5sfHwhZy5pbmNsdXNpdmVMZWZ0JiYhbCkmJmsucHVzaCh7ZnJvbTpqLmZyb20sdG86aC5mcm9tfSksKG0+MHx8IWcuaW5jbHVzaXZlUmlnaHQmJiFtKSYmay5wdXNoKHtmcm9tOmgudG8sdG86ai50b30pLGUuc3BsaWNlLmFwcGx5KGUsayksaSs9ay5sZW5ndGgtMX19cmV0dXJuIGV9ZnVuY3Rpb24gZGYoYSl7dmFyIGI9YS5tYXJrZWRTcGFucztpZihiKXtmb3IodmFyIGM9MDtjPGIubGVuZ3RoOysrYyliW2NdLm1hcmtlci5kZXRhY2hMaW5lKGEpO2EubWFya2VkU3BhbnM9bnVsbH19ZnVuY3Rpb24gZWYoYSxiKXtpZihiKXtmb3IodmFyIGM9MDtjPGIubGVuZ3RoOysrYyliW2NdLm1hcmtlci5hdHRhY2hMaW5lKGEpO2EubWFya2VkU3BhbnM9Yn19ZnVuY3Rpb24gZmYoYSl7cmV0dXJuIGEuaW5jbHVzaXZlTGVmdD8tMTowfWZ1bmN0aW9uIGdmKGEpe3JldHVybiBhLmluY2x1c2l2ZVJpZ2h0PzE6MH1mdW5jdGlvbiBoZihhLGIpe3ZhciBjPWEubGluZXMubGVuZ3RoLWIubGluZXMubGVuZ3RoO2lmKDAhPWMpcmV0dXJuIGM7dmFyIGQ9YS5maW5kKCksZT1iLmZpbmQoKSxmPXBiKGQuZnJvbSxlLmZyb20pfHxmZihhKS1mZihiKTtpZihmKXJldHVybi1mO3ZhciBnPXBiKGQudG8sZS50byl8fGdmKGEpLWdmKGIpO3JldHVybiBnP2c6Yi5pZC1hLmlkfWZ1bmN0aW9uIGpmKGEsYil7dmFyIGQsYz11JiZhLm1hcmtlZFNwYW5zO2lmKGMpZm9yKHZhciBlLGY9MDtmPGMubGVuZ3RoOysrZillPWNbZl0sZS5tYXJrZXIuY29sbGFwc2VkJiZudWxsPT0oYj9lLmZyb206ZS50bykmJighZHx8aGYoZCxlLm1hcmtlcik8MCkmJihkPWUubWFya2VyKTtyZXR1cm4gZH1mdW5jdGlvbiBrZihhKXtyZXR1cm4gamYoYSwhMCl9ZnVuY3Rpb24gbGYoYSl7cmV0dXJuIGpmKGEsITEpfWZ1bmN0aW9uIG1mKGEsYixjLGQsZSl7dmFyIGY9YWcoYSxiKSxnPXUmJmYubWFya2VkU3BhbnM7aWYoZylmb3IodmFyIGg9MDtoPGcubGVuZ3RoOysraCl7dmFyIGk9Z1toXTtpZihpLm1hcmtlci5jb2xsYXBzZWQpe3ZhciBqPWkubWFya2VyLmZpbmQoMCksaz1wYihqLmZyb20sYyl8fGZmKGkubWFya2VyKS1mZihlKSxsPXBiKGoudG8sZCl8fGdmKGkubWFya2VyKS1nZihlKTtpZighKGs+PTAmJjA+PWx8fDA+PWsmJmw+PTApJiYoMD49ayYmKHBiKGoudG8sYyk+MHx8aS5tYXJrZXIuaW5jbHVzaXZlUmlnaHQmJmUuaW5jbHVzaXZlTGVmdCl8fGs+PTAmJihwYihqLmZyb20sZCk8MHx8aS5tYXJrZXIuaW5jbHVzaXZlTGVmdCYmZS5pbmNsdXNpdmVSaWdodCkpKXJldHVybiEwfX19ZnVuY3Rpb24gbmYoYSl7Zm9yKHZhciBiO2I9a2YoYSk7KWE9Yi5maW5kKC0xLCEwKS5saW5lO3JldHVybiBhfWZ1bmN0aW9uIG9mKGEpe2Zvcih2YXIgYixjO2I9bGYoYSk7KWE9Yi5maW5kKDEsITApLmxpbmUsKGN8fChjPVtdKSkucHVzaChhKTtyZXR1cm4gY31mdW5jdGlvbiBwZihhLGIpe3ZhciBjPWFnKGEsYiksZD1uZihjKTtyZXR1cm4gYz09ZD9iOmVnKGQpfWZ1bmN0aW9uIHFmKGEsYil7aWYoYj5hLmxhc3RMaW5lKCkpcmV0dXJuIGI7dmFyIGQsYz1hZyhhLGIpO2lmKCFyZihhLGMpKXJldHVybiBiO2Zvcig7ZD1sZihjKTspYz1kLmZpbmQoMSwhMCkubGluZTtyZXR1cm4gZWcoYykrMX1mdW5jdGlvbiByZihhLGIpe3ZhciBjPXUmJmIubWFya2VkU3BhbnM7aWYoYylmb3IodmFyIGQsZT0wO2U8Yy5sZW5ndGg7KytlKWlmKGQ9Y1tlXSxkLm1hcmtlci5jb2xsYXBzZWQpe2lmKG51bGw9PWQuZnJvbSlyZXR1cm4hMDtpZighZC5tYXJrZXIud2lkZ2V0Tm9kZSYmMD09ZC5mcm9tJiZkLm1hcmtlci5pbmNsdXNpdmVMZWZ0JiZzZihhLGIsZCkpcmV0dXJuITB9fWZ1bmN0aW9uIHNmKGEsYixjKXtpZihudWxsPT1jLnRvKXt2YXIgZD1jLm1hcmtlci5maW5kKDEsITApO3JldHVybiBzZihhLGQubGluZSxXZShkLmxpbmUubWFya2VkU3BhbnMsYy5tYXJrZXIpKX1pZihjLm1hcmtlci5pbmNsdXNpdmVSaWdodCYmYy50bz09Yi50ZXh0Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIGUsZj0wO2Y8Yi5tYXJrZWRTcGFucy5sZW5ndGg7KytmKWlmKGU9Yi5tYXJrZWRTcGFuc1tmXSxlLm1hcmtlci5jb2xsYXBzZWQmJiFlLm1hcmtlci53aWRnZXROb2RlJiZlLmZyb209PWMudG8mJihudWxsPT1lLnRvfHxlLnRvIT1jLmZyb20pJiYoZS5tYXJrZXIuaW5jbHVzaXZlTGVmdHx8Yy5tYXJrZXIuaW5jbHVzaXZlUmlnaHQpJiZzZihhLGIsZSkpcmV0dXJuITB9ZnVuY3Rpb24gdWYoYSxiLGMpe2dnKGIpPChhLmN1ck9wJiZhLmN1ck9wLnNjcm9sbFRvcHx8YS5kb2Muc2Nyb2xsVG9wKSYmbWUoYSxudWxsLGMpfWZ1bmN0aW9uIHZmKGEpe2lmKG51bGwhPWEuaGVpZ2h0KXJldHVybiBhLmhlaWdodDtpZighbmgoZG9jdW1lbnQuYm9keSxhLm5vZGUpKXt2YXIgYj0icG9zaXRpb246IHJlbGF0aXZlOyI7YS5jb3Zlckd1dHRlciYmKGIrPSJtYXJnaW4tbGVmdDogLSIrYS5jbS5kaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGgrInB4OyIpLGEubm9IU2Nyb2xsJiYoYis9IndpZHRoOiAiK2EuY20uZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoKyJweDsiKSxtaChhLmNtLmRpc3BsYXkubWVhc3VyZSxqaCgiZGl2IixbYS5ub2RlXSxudWxsLGIpKX1yZXR1cm4gYS5oZWlnaHQ9YS5ub2RlLm9mZnNldEhlaWdodH1mdW5jdGlvbiB3ZihhLGIsYyxkKXt2YXIgZT1uZXcgdGYoYSxjLGQpO3JldHVybiBlLm5vSFNjcm9sbCYmKGEuZGlzcGxheS5hbGlnbldpZGdldHM9ITApLHFlKGEuZG9jLGIsIndpZGdldCIsZnVuY3Rpb24oYil7dmFyIGM9Yi53aWRnZXRzfHwoYi53aWRnZXRzPVtdKTtpZihudWxsPT1lLmluc2VydEF0P2MucHVzaChlKTpjLnNwbGljZShNYXRoLm1pbihjLmxlbmd0aC0xLE1hdGgubWF4KDAsZS5pbnNlcnRBdCkpLDAsZSksZS5saW5lPWIsIXJmKGEuZG9jLGIpKXt2YXIgZD1nZyhiKTxhLmRvYy5zY3JvbGxUb3A7ZGcoYixiLmhlaWdodCt2ZihlKSksZCYmbWUoYSxudWxsLGUuaGVpZ2h0KSxhLmN1ck9wLmZvcmNlVXBkYXRlPSEwfXJldHVybiEwfSksZX1mdW5jdGlvbiB5ZihhLGIsYyxkKXthLnRleHQ9YixhLnN0YXRlQWZ0ZXImJihhLnN0YXRlQWZ0ZXI9bnVsbCksYS5zdHlsZXMmJihhLnN0eWxlcz1udWxsKSxudWxsIT1hLm9yZGVyJiYoYS5vcmRlcj1udWxsKSxkZihhKSxlZihhLGMpO3ZhciBlPWQ/ZChhKToxO2UhPWEuaGVpZ2h0JiZkZyhhLGUpfWZ1bmN0aW9uIHpmKGEpe2EucGFyZW50PW51bGwsZGYoYSl9ZnVuY3Rpb24gQWYoYSxiKXtpZihhKWZvcig7Oyl7dmFyIGM9YS5tYXRjaCgvKD86XnxccyspbGluZS0oYmFja2dyb3VuZC0pPyhcUyspLyk7aWYoIWMpYnJlYWs7YT1hLnNsaWNlKDAsYy5pbmRleCkrYS5zbGljZShjLmluZGV4K2NbMF0ubGVuZ3RoKTt2YXIgZD1jWzFdPyJiZ0NsYXNzIjoidGV4dENsYXNzIjtudWxsPT1iW2RdP2JbZF09Y1syXTpuZXcgUmVnRXhwKCIoPzpefHMpIitjWzJdKyIoPzokfHMpIikudGVzdChiW2RdKXx8KGJbZF0rPSIgIitjWzJdKX1yZXR1cm4gYX1mdW5jdGlvbiBCZihhLGIpe2lmKGEuYmxhbmtMaW5lKXJldHVybiBhLmJsYW5rTGluZShiKTtpZihhLmlubmVyTW9kZSl7dmFyIGM9di5pbm5lck1vZGUoYSxiKTtyZXR1cm4gYy5tb2RlLmJsYW5rTGluZT9jLm1vZGUuYmxhbmtMaW5lKGMuc3RhdGUpOnZvaWQgMH19ZnVuY3Rpb24gQ2YoYSxiLGMsZCl7Zm9yKHZhciBlPTA7MTA+ZTtlKyspe2QmJihkWzBdPXYuaW5uZXJNb2RlKGEsYykubW9kZSk7dmFyIGY9YS50b2tlbihiLGMpO2lmKGIucG9zPmIuc3RhcnQpcmV0dXJuIGZ9dGhyb3cgbmV3IEVycm9yKCJNb2RlICIrYS5uYW1lKyIgZmFpbGVkIHRvIGFkdmFuY2Ugc3RyZWFtLiIpfWZ1bmN0aW9uIERmKGEsYixjLGQpe2Z1bmN0aW9uIGUoYSl7cmV0dXJue3N0YXJ0Omsuc3RhcnQsZW5kOmsucG9zLHN0cmluZzprLmN1cnJlbnQoKSx0eXBlOmh8fG51bGwsc3RhdGU6YT9EZShmLm1vZGUsaik6an19dmFyIGgsZj1hLmRvYyxnPWYubW9kZTtiPU1iKGYsYik7dmFyIGwsaT1hZyhmLGIubGluZSksaj1qYyhhLGIubGluZSxjKSxrPW5ldyBNZShpLnRleHQsYS5vcHRpb25zLnRhYlNpemUpO2ZvcihkJiYobD1bXSk7KGR8fGsucG9zPGIuY2gpJiYhay5lb2woKTspay5zdGFydD1rLnBvcyxoPUNmKGcsayxqKSxkJiZsLnB1c2goZSghMCkpO3JldHVybiBkP2w6ZSgpfWZ1bmN0aW9uIEVmKGEsYixjLGQsZSxmLGcpe3ZhciBoPWMuZmxhdHRlblNwYW5zO251bGw9PWgmJihoPWEub3B0aW9ucy5mbGF0dGVuU3BhbnMpO3ZhciBsLGk9MCxqPW51bGwsaz1uZXcgTWUoYixhLm9wdGlvbnMudGFiU2l6ZSksbT1hLm9wdGlvbnMuYWRkTW9kZUNsYXNzJiZbbnVsbF07Zm9yKCIiPT1iJiZBZihCZihjLGQpLGYpOyFrLmVvbCgpOyl7aWYoay5wb3M+YS5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aD8oaD0hMSxnJiZIZihhLGIsZCxrLnBvcyksay5wb3M9Yi5sZW5ndGgsbD1udWxsKTpsPUFmKENmKGMsayxkLG0pLGYpLG0pe3ZhciBuPW1bMF0ubmFtZTtuJiYobD0ibS0iKyhsP24rIiAiK2w6bikpfWlmKCFofHxqIT1sKXtmb3IoO2k8ay5zdGFydDspaT1NYXRoLm1pbihrLnN0YXJ0LGkrNWU0KSxlKGksaik7aj1sfWsuc3RhcnQ9ay5wb3N9Zm9yKDtpPGsucG9zOyl7dmFyIG89TWF0aC5taW4oay5wb3MsaSs1ZTQpO2UobyxqKSxpPW99fWZ1bmN0aW9uIEZmKGEsYixjLGQpe3ZhciBlPVthLnN0YXRlLm1vZGVHZW5dLGY9e307RWYoYSxiLnRleHQsYS5kb2MubW9kZSxjLGZ1bmN0aW9uKGEsYil7ZS5wdXNoKGEsYil9LGYsZCk7Zm9yKHZhciBnPTA7ZzxhLnN0YXRlLm92ZXJsYXlzLmxlbmd0aDsrK2cpe3ZhciBoPWEuc3RhdGUub3ZlcmxheXNbZ10saT0xLGo9MDtFZihhLGIudGV4dCxoLm1vZGUsITAsZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9aTthPmo7KXt2YXIgZD1lW2ldO2Q+YSYmZS5zcGxpY2UoaSwxLGEsZVtpKzFdLGQpLGkrPTIsaj1NYXRoLm1pbihhLGQpfWlmKGIpaWYoaC5vcGFxdWUpZS5zcGxpY2UoYyxpLWMsYSwiY20tb3ZlcmxheSAiK2IpLGk9YysyO2Vsc2UgZm9yKDtpPmM7Yys9Mil7dmFyIGY9ZVtjKzFdO2VbYysxXT0oZj9mKyIgIjoiIikrImNtLW92ZXJsYXkgIitifX0sZil9cmV0dXJue3N0eWxlczplLGNsYXNzZXM6Zi5iZ0NsYXNzfHxmLnRleHRDbGFzcz9mOm51bGx9fWZ1bmN0aW9uIEdmKGEsYixjKXtpZighYi5zdHlsZXN8fGIuc3R5bGVzWzBdIT1hLnN0YXRlLm1vZGVHZW4pe3ZhciBkPUZmKGEsYixiLnN0YXRlQWZ0ZXI9amMoYSxlZyhiKSkpO2Iuc3R5bGVzPWQuc3R5bGVzLGQuY2xhc3Nlcz9iLnN0eWxlQ2xhc3Nlcz1kLmNsYXNzZXM6Yi5zdHlsZUNsYXNzZXMmJihiLnN0eWxlQ2xhc3Nlcz1udWxsKSxjPT09YS5kb2MuZnJvbnRpZXImJmEuZG9jLmZyb250aWVyKyt9cmV0dXJuIGIuc3R5bGVzfWZ1bmN0aW9uIEhmKGEsYixjLGQpe3ZhciBlPWEuZG9jLm1vZGUsZj1uZXcgTWUoYixhLm9wdGlvbnMudGFiU2l6ZSk7Zm9yKGYuc3RhcnQ9Zi5wb3M9ZHx8MCwiIj09YiYmQmYoZSxjKTshZi5lb2woKSYmZi5wb3M8PWEub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGg7KUNmKGUsZixjKSxmLnN0YXJ0PWYucG9zfWZ1bmN0aW9uIEtmKGEsYil7aWYoIWF8fC9eXHMqJC8udGVzdChhKSlyZXR1cm4gbnVsbDt2YXIgYz1iLmFkZE1vZGVDbGFzcz9KZjpJZjtyZXR1cm4gY1thXXx8KGNbYV09YS5yZXBsYWNlKC9cUysvZywiY20tJCYiKSl9ZnVuY3Rpb24gTGYoYSxiKXt2YXIgYz1qaCgic3BhbiIsbnVsbCxudWxsLGY/InBhZGRpbmctcmlnaHQ6IC4xcHgiOm51bGwpLGU9e3ByZTpqaCgicHJlIixbY10pLGNvbnRlbnQ6Yyxjb2w6MCxwb3M6MCxjbTphfTtiLm1lYXN1cmU9e307Zm9yKHZhciBnPTA7Zzw9KGIucmVzdD9iLnJlc3QubGVuZ3RoOjApO2crKyl7dmFyIGksaD1nP2IucmVzdFtnLTFdOmIubGluZTtlLnBvcz0wLGUuYWRkVG9rZW49TmYsKGR8fGYpJiZhLmdldE9wdGlvbigibGluZVdyYXBwaW5nIikmJihlLmFkZFRva2VuPU9mKGUuYWRkVG9rZW4pKSxCaChhLmRpc3BsYXkubWVhc3VyZSkmJihpPWhnKGgpKSYmKGUuYWRkVG9rZW49UGYoZS5hZGRUb2tlbixpKSksZS5tYXA9W107dmFyIGo9YiE9YS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQmJmVnKGgpO1JmKGgsZSxHZihhLGgsaikpLGguc3R5bGVDbGFzc2VzJiYoaC5zdHlsZUNsYXNzZXMuYmdDbGFzcyYmKGUuYmdDbGFzcz1zaChoLnN0eWxlQ2xhc3Nlcy5iZ0NsYXNzLGUuYmdDbGFzc3x8IiIpKSxoLnN0eWxlQ2xhc3Nlcy50ZXh0Q2xhc3MmJihlLnRleHRDbGFzcz1zaChoLnN0eWxlQ2xhc3Nlcy50ZXh0Q2xhc3MsZS50ZXh0Q2xhc3N8fCIiKSkpLDA9PWUubWFwLmxlbmd0aCYmZS5tYXAucHVzaCgwLDAsZS5jb250ZW50LmFwcGVuZENoaWxkKHpoKGEuZGlzcGxheS5tZWFzdXJlKSkpLDA9PWc/KGIubWVhc3VyZS5tYXA9ZS5tYXAsYi5tZWFzdXJlLmNhY2hlPXt9KTooKGIubWVhc3VyZS5tYXBzfHwoYi5tZWFzdXJlLm1hcHM9W10pKS5wdXNoKGUubWFwKSwoYi5tZWFzdXJlLmNhY2hlc3x8KGIubWVhc3VyZS5jYWNoZXM9W10pKS5wdXNoKHt9KSl9cmV0dXJuIGYmJi9cYmNtLXRhYlxiLy50ZXN0KGUuY29udGVudC5sYXN0Q2hpbGQuY2xhc3NOYW1lKSYmKGUuY29udGVudC5jbGFzc05hbWU9ImNtLXRhYi13cmFwLWhhY2siKSxGZyhhLCJyZW5kZXJMaW5lIixhLGIubGluZSxlLnByZSksZS5wcmUuY2xhc3NOYW1lJiYoZS50ZXh0Q2xhc3M9c2goZS5wcmUuY2xhc3NOYW1lLGUudGV4dENsYXNzfHwiIikpLGV9ZnVuY3Rpb24gTWYoYSl7dmFyIGI9amgoInNwYW4iLCJcdTIwMjIiLCJjbS1pbnZhbGlkY2hhciIpO3JldHVybiBiLnRpdGxlPSJcXHUiK2EuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNiksYi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGIudGl0bGUpLGJ9ZnVuY3Rpb24gTmYoYSxiLGMsZixnLGgsaSl7aWYoYil7dmFyIGo9YS5jbS5vcHRpb25zLnNwZWNpYWxDaGFycyxrPSExO2lmKGoudGVzdChiKSlmb3IodmFyIGw9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLG09MDs7KXtqLmxhc3RJbmRleD1tO3ZhciBuPWouZXhlYyhiKSxvPW4/bi5pbmRleC1tOmIubGVuZ3RoLW07aWYobyl7dmFyIHA9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYi5zbGljZShtLG0rbykpO2QmJjk+ZT9sLmFwcGVuZENoaWxkKGpoKCJzcGFuIixbcF0pKTpsLmFwcGVuZENoaWxkKHApLGEubWFwLnB1c2goYS5wb3MsYS5wb3MrbyxwKSxhLmNvbCs9byxhLnBvcys9b31pZighbilicmVhaztpZihtKz1vKzEsIgkiPT1uWzBdKXt2YXIgcT1hLmNtLm9wdGlvbnMudGFiU2l6ZSxyPXEtYS5jb2wlcSxwPWwuYXBwZW5kQ2hpbGQoamgoInNwYW4iLFdnKHIpLCJjbS10YWIiKSk7cC5zZXRBdHRyaWJ1dGUoInJvbGUiLCJwcmVzZW50YXRpb24iKSxwLnNldEF0dHJpYnV0ZSgiY20tdGV4dCIsIgkiKSxhLmNvbCs9cn1lbHNle3ZhciBwPWEuY20ub3B0aW9ucy5zcGVjaWFsQ2hhclBsYWNlaG9sZGVyKG5bMF0pO3Auc2V0QXR0cmlidXRlKCJjbS10ZXh0IixuWzBdKSxkJiY5PmU/bC5hcHBlbmRDaGlsZChqaCgic3BhbiIsW3BdKSk6bC5hcHBlbmRDaGlsZChwKSxhLmNvbCs9MX1hLm1hcC5wdXNoKGEucG9zLGEucG9zKzEscCksYS5wb3MrK31lbHNle2EuY29sKz1iLmxlbmd0aDt2YXIgbD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShiKTthLm1hcC5wdXNoKGEucG9zLGEucG9zK2IubGVuZ3RoLGwpLGQmJjk+ZSYmKGs9ITApLGEucG9zKz1iLmxlbmd0aH1pZihjfHxmfHxnfHxrfHxpKXt2YXIgcz1jfHwiIjtmJiYocys9ZiksZyYmKHMrPWcpO3ZhciB0PWpoKCJzcGFuIixbbF0scyxpKTtyZXR1cm4gaCYmKHQudGl0bGU9aCksYS5jb250ZW50LmFwcGVuZENoaWxkKHQpfWEuY29udGVudC5hcHBlbmRDaGlsZChsKX19ZnVuY3Rpb24gT2YoYSl7ZnVuY3Rpb24gYihhKXtmb3IodmFyIGI9IiAiLGM9MDtjPGEubGVuZ3RoLTI7KytjKWIrPWMlMj8iICI6Ilx4YTAiO3JldHVybiBiKz0iICJ9cmV0dXJuIGZ1bmN0aW9uKGMsZCxlLGYsZyxoKXthKGMsZC5yZXBsYWNlKC8gezMsfS9nLGIpLGUsZixnLGgpfX1mdW5jdGlvbiBQZihhLGIpe3JldHVybiBmdW5jdGlvbihjLGQsZSxmLGcsaCl7ZT1lP2UrIiBjbS1mb3JjZS1ib3JkZXIiOiJjbS1mb3JjZS1ib3JkZXIiO2Zvcih2YXIgaT1jLnBvcyxqPWkrZC5sZW5ndGg7Oyl7Zm9yKHZhciBrPTA7azxiLmxlbmd0aDtrKyspe3ZhciBsPWJba107aWYobC50bz5pJiZsLmZyb208PWkpYnJlYWt9aWYobC50bz49ailyZXR1cm4gYShjLGQsZSxmLGcsaCk7YShjLGQuc2xpY2UoMCxsLnRvLWkpLGUsZixudWxsLGgpLGY9bnVsbCxkPWQuc2xpY2UobC50by1pKSxpPWwudG99fX1mdW5jdGlvbiBRZihhLGIsYyxkKXt2YXIgZT0hZCYmYy53aWRnZXROb2RlO2UmJmEubWFwLnB1c2goYS5wb3MsYS5wb3MrYixlKSwhZCYmYS5jbS5kaXNwbGF5LmlucHV0Lm5lZWRzQ29udGVudEF0dHJpYnV0ZSYmKGV8fChlPWEuY29udGVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIikpKSxlLnNldEF0dHJpYnV0ZSgiY20tbWFya2VyIixjLmlkKSksZSYmKGEuY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKGUpLGEuY29udGVudC5hcHBlbmRDaGlsZChlKSksYS5wb3MrPWJ9ZnVuY3Rpb24gUmYoYSxiLGMpe3ZhciBkPWEubWFya2VkU3BhbnMsZT1hLnRleHQsZj0wO2lmKGQpZm9yKHZhciBrLGwsbixvLHAscSxyLGg9ZS5sZW5ndGgsaT0wLGc9MSxqPSIiLG09MDs7KXtpZihtPT1pKXtuPW89cD1xPWw9IiIscj1udWxsLG09MS8wO2Zvcih2YXIgcz1bXSx0PTA7dDxkLmxlbmd0aDsrK3Qpe3ZhciB1PWRbdF0sdj11Lm1hcmtlcjt1LmZyb208PWkmJihudWxsPT11LnRvfHx1LnRvPmkpPyhudWxsIT11LnRvJiZtPnUudG8mJihtPXUudG8sbz0iIiksdi5jbGFzc05hbWUmJihuKz0iICIrdi5jbGFzc05hbWUpLHYuY3NzJiYobD12LmNzcyksdi5zdGFydFN0eWxlJiZ1LmZyb209PWkmJihwKz0iICIrdi5zdGFydFN0eWxlKSx2LmVuZFN0eWxlJiZ1LnRvPT1tJiYobys9IiAiK3YuZW5kU3R5bGUpLHYudGl0bGUmJiFxJiYocT12LnRpdGxlKSx2LmNvbGxhcHNlZCYmKCFyfHxoZihyLm1hcmtlcix2KTwwKSYmKHI9dSkpOnUuZnJvbT5pJiZtPnUuZnJvbSYmKG09dS5mcm9tKSwiYm9va21hcmsiPT12LnR5cGUmJnUuZnJvbT09aSYmdi53aWRnZXROb2RlJiZzLnB1c2godil9aWYociYmKHIuZnJvbXx8MCk9PWkmJihRZihiLChudWxsPT1yLnRvP2grMTpyLnRvKS1pLHIubWFya2VyLG51bGw9PXIuZnJvbSksbnVsbD09ci50bykpcmV0dXJuO2lmKCFyJiZzLmxlbmd0aClmb3IodmFyIHQ9MDt0PHMubGVuZ3RoOysrdClRZihiLDAsc1t0XSl9aWYoaT49aClicmVhaztmb3IodmFyIHc9TWF0aC5taW4oaCxtKTs7KXtpZihqKXt2YXIgeD1pK2oubGVuZ3RoO2lmKCFyKXt2YXIgeT14Pnc/ai5zbGljZSgwLHctaSk6ajtiLmFkZFRva2VuKGIseSxrP2srbjpuLHAsaSt5Lmxlbmd0aD09bT9vOiIiLHEsbCl9aWYoeD49dyl7aj1qLnNsaWNlKHctaSksaT13O2JyZWFrfWk9eCxwPSIifWo9ZS5zbGljZShmLGY9Y1tnKytdKSxrPUtmKGNbZysrXSxiLmNtLm9wdGlvbnMpfX1lbHNlIGZvcih2YXIgZz0xO2c8Yy5sZW5ndGg7Zys9MiliLmFkZFRva2VuKGIsZS5zbGljZShmLGY9Y1tnXSksS2YoY1tnKzFdLGIuY20ub3B0aW9ucykpfWZ1bmN0aW9uIFNmKGEsYil7cmV0dXJuIDA9PWIuZnJvbS5jaCYmMD09Yi50by5jaCYmIiI9PVhnKGIudGV4dCkmJighYS5jbXx8YS5jbS5vcHRpb25zLndob2xlTGluZVVwZGF0ZUJlZm9yZSl9ZnVuY3Rpb24gVGYoYSxiLGMsZCl7ZnVuY3Rpb24gZShhKXtyZXR1cm4gYz9jW2FdOm51bGx9ZnVuY3Rpb24gZihhLGMsZSl7eWYoYSxjLGUsZCksSGcoYSwiY2hhbmdlIixhLGIpfWZ1bmN0aW9uIGcoYSxiKXtmb3IodmFyIGM9YSxmPVtdO2I+YzsrK2MpZi5wdXNoKG5ldyB4ZihqW2NdLGUoYyksZCkpO3JldHVybiBmfXZhciBoPWIuZnJvbSxpPWIudG8saj1iLnRleHQsaz1hZyhhLGgubGluZSksbD1hZyhhLGkubGluZSksbT1YZyhqKSxuPWUoai5sZW5ndGgtMSksbz1pLmxpbmUtaC5saW5lO2lmKGIuZnVsbClhLmluc2VydCgwLGcoMCxqLmxlbmd0aCkpLGEucmVtb3ZlKGoubGVuZ3RoLGEuc2l6ZS1qLmxlbmd0aCk7ZWxzZSBpZihTZihhLGIpKXt2YXIgcD1nKDAsai5sZW5ndGgtMSk7ZihsLGwudGV4dCxuKSxvJiZhLnJlbW92ZShoLmxpbmUsbykscC5sZW5ndGgmJmEuaW5zZXJ0KGgubGluZSxwKX1lbHNlIGlmKGs9PWwpaWYoMT09ai5sZW5ndGgpZihrLGsudGV4dC5zbGljZSgwLGguY2gpK20ray50ZXh0LnNsaWNlKGkuY2gpLG4pO2Vsc2V7dmFyIHA9ZygxLGoubGVuZ3RoLTEpO3AucHVzaChuZXcgeGYobStrLnRleHQuc2xpY2UoaS5jaCksbixkKSksZihrLGsudGV4dC5zbGljZSgwLGguY2gpK2pbMF0sZSgwKSksYS5pbnNlcnQoaC5saW5lKzEscCl9ZWxzZSBpZigxPT1qLmxlbmd0aClmKGssay50ZXh0LnNsaWNlKDAsaC5jaCkralswXStsLnRleHQuc2xpY2UoaS5jaCksZSgwKSksYS5yZW1vdmUoaC5saW5lKzEsbyk7ZWxzZXtmKGssay50ZXh0LnNsaWNlKDAsaC5jaCkralswXSxlKDApKSxmKGwsbStsLnRleHQuc2xpY2UoaS5jaCksbik7dmFyIHA9ZygxLGoubGVuZ3RoLTEpO28+MSYmYS5yZW1vdmUoaC5saW5lKzEsby0xKSxhLmluc2VydChoLmxpbmUrMSxwKX1IZyhhLCJjaGFuZ2UiLGEsYil9ZnVuY3Rpb24gVWYoYSl7dGhpcy5saW5lcz1hLHRoaXMucGFyZW50PW51bGw7Zm9yKHZhciBiPTAsYz0wO2I8YS5sZW5ndGg7KytiKWFbYl0ucGFyZW50PXRoaXMsYys9YVtiXS5oZWlnaHQ7dGhpcy5oZWlnaHQ9Y31mdW5jdGlvbiBWZihhKXt0aGlzLmNoaWxkcmVuPWE7Zm9yKHZhciBiPTAsYz0wLGQ9MDtkPGEubGVuZ3RoOysrZCl7dmFyIGU9YVtkXTtiKz1lLmNodW5rU2l6ZSgpLGMrPWUuaGVpZ2h0LGUucGFyZW50PXRoaXN9dGhpcy5zaXplPWIsdGhpcy5oZWlnaHQ9Yyx0aGlzLnBhcmVudD1udWxsfWZ1bmN0aW9uICRmKGEsYixjKXtmdW5jdGlvbiBkKGEsZSxmKXtpZihhLmxpbmtlZClmb3IodmFyIGc9MDtnPGEubGlua2VkLmxlbmd0aDsrK2cpe3ZhciBoPWEubGlua2VkW2ddO2lmKGguZG9jIT1lKXt2YXIgaT1mJiZoLnNoYXJlZEhpc3Q7KCFjfHxpKSYmKGIoaC5kb2MsaSksZChoLmRvYyxhLGkpKX19fWQoYSxudWxsLCEwKX1mdW5jdGlvbiBfZihhLGIpe2lmKGIuY20pdGhyb3cgbmV3IEVycm9yKCJUaGlzIGRvY3VtZW50IGlzIGFscmVhZHkgaW4gdXNlLiIpO2EuZG9jPWIsYi5jbT1hLEIoYSkseChhKSxhLm9wdGlvbnMubGluZVdyYXBwaW5nfHxIKGEpLGEub3B0aW9ucy5tb2RlPWIubW9kZU9wdGlvbixnZChhKX1mdW5jdGlvbiBhZyhhLGIpe2lmKGItPWEuZmlyc3QsMD5ifHxiPj1hLnNpemUpdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBpcyBubyBsaW5lICIrKGIrYS5maXJzdCkrIiBpbiB0aGUgZG9jdW1lbnQuIik7Zm9yKHZhciBjPWE7IWMubGluZXM7KWZvcih2YXIgZD0wOzsrK2Qpe3ZhciBlPWMuY2hpbGRyZW5bZF0sZj1lLmNodW5rU2l6ZSgpO2lmKGY+Yil7Yz1lO2JyZWFrfWItPWZ9cmV0dXJuIGMubGluZXNbYl19ZnVuY3Rpb24gYmcoYSxiLGMpe3ZhciBkPVtdLGU9Yi5saW5lO3JldHVybiBhLml0ZXIoYi5saW5lLGMubGluZSsxLGZ1bmN0aW9uKGEpe3ZhciBmPWEudGV4dDtlPT1jLmxpbmUmJihmPWYuc2xpY2UoMCxjLmNoKSksZT09Yi5saW5lJiYoZj1mLnNsaWNlKGIuY2gpKSxkLnB1c2goZiksKytlfSksZH1mdW5jdGlvbiBjZyhhLGIsYyl7dmFyIGQ9W107cmV0dXJuIGEuaXRlcihiLGMsZnVuY3Rpb24oYSl7ZC5wdXNoKGEudGV4dCl9KSxkfWZ1bmN0aW9uIGRnKGEsYil7dmFyIGM9Yi1hLmhlaWdodDtpZihjKWZvcih2YXIgZD1hO2Q7ZD1kLnBhcmVudClkLmhlaWdodCs9Y31mdW5jdGlvbiBlZyhhKXtpZihudWxsPT1hLnBhcmVudClyZXR1cm4gbnVsbDtmb3IodmFyIGI9YS5wYXJlbnQsYz1aZyhiLmxpbmVzLGEpLGQ9Yi5wYXJlbnQ7ZDtiPWQsZD1kLnBhcmVudClmb3IodmFyIGU9MDtkLmNoaWxkcmVuW2VdIT1iOysrZSljKz1kLmNoaWxkcmVuW2VdLmNodW5rU2l6ZSgpO3JldHVybiBjK2IuZmlyc3R9ZnVuY3Rpb24gZmcoYSxiKXt2YXIgYz1hLmZpcnN0O2E6ZG97Zm9yKHZhciBkPTA7ZDxhLmNoaWxkcmVuLmxlbmd0aDsrK2Qpe3ZhciBlPWEuY2hpbGRyZW5bZF0sZj1lLmhlaWdodDtpZihmPmIpe2E9ZTtjb250aW51ZSBhfWItPWYsYys9ZS5jaHVua1NpemUoKX1yZXR1cm4gY313aGlsZSghYS5saW5lcyk7Zm9yKHZhciBkPTA7ZDxhLmxpbmVzLmxlbmd0aDsrK2Qpe3ZhciBnPWEubGluZXNbZF0saD1nLmhlaWdodDtpZihoPmIpYnJlYWs7Yi09aH1yZXR1cm4gYytkfWZ1bmN0aW9uIGdnKGEpe2E9bmYoYSk7Zm9yKHZhciBiPTAsYz1hLnBhcmVudCxkPTA7ZDxjLmxpbmVzLmxlbmd0aDsrK2Qpe3ZhciBlPWMubGluZXNbZF07aWYoZT09YSlicmVhaztiKz1lLmhlaWdodH1mb3IodmFyIGY9Yy5wYXJlbnQ7ZjtjPWYsZj1jLnBhcmVudClmb3IodmFyIGQ9MDtkPGYuY2hpbGRyZW4ubGVuZ3RoOysrZCl7dmFyIGc9Zi5jaGlsZHJlbltkXTtpZihnPT1jKWJyZWFrO2IrPWcuaGVpZ2h0fXJldHVybiBifWZ1bmN0aW9uIGhnKGEpe3ZhciBiPWEub3JkZXI7cmV0dXJuIG51bGw9PWImJihiPWEub3JkZXI9V2goYS50ZXh0KSksYn1mdW5jdGlvbiBpZyhhKXt0aGlzLmRvbmU9W10sdGhpcy51bmRvbmU9W10sdGhpcy51bmRvRGVwdGg9MS8wLHRoaXMubGFzdE1vZFRpbWU9dGhpcy5sYXN0U2VsVGltZT0wLHRoaXMubGFzdE9wPXRoaXMubGFzdFNlbE9wPW51bGwsdGhpcy5sYXN0T3JpZ2luPXRoaXMubGFzdFNlbE9yaWdpbj1udWxsLHRoaXMuZ2VuZXJhdGlvbj10aGlzLm1heEdlbmVyYXRpb249YXx8MX1mdW5jdGlvbiBqZyhhLGIpe3ZhciBjPXtmcm9tOnFiKGIuZnJvbSksdG86WGQoYiksdGV4dDpiZyhhLGIuZnJvbSxiLnRvKX07cmV0dXJuIHFnKGEsYyxiLmZyb20ubGluZSxiLnRvLmxpbmUrMSksJGYoYSxmdW5jdGlvbihhKXtxZyhhLGMsYi5mcm9tLmxpbmUsYi50by5saW5lKzEpfSwhMCksY31mdW5jdGlvbiBrZyhhKXtmb3IoO2EubGVuZ3RoOyl7dmFyIGI9WGcoYSk7aWYoIWIucmFuZ2VzKWJyZWFrO2EucG9wKCl9fWZ1bmN0aW9uIGxnKGEsYil7cmV0dXJuIGI/KGtnKGEuZG9uZSksWGcoYS5kb25lKSk6YS5kb25lLmxlbmd0aCYmIVhnKGEuZG9uZSkucmFuZ2VzP1hnKGEuZG9uZSk6YS5kb25lLmxlbmd0aD4xJiYhYS5kb25lW2EuZG9uZS5sZW5ndGgtMl0ucmFuZ2VzPyhhLmRvbmUucG9wKCksWGcoYS5kb25lKSk6dm9pZCAwfWZ1bmN0aW9uIG1nKGEsYixjLGQpe3ZhciBlPWEuaGlzdG9yeTtlLnVuZG9uZS5sZW5ndGg9MDt2YXIgZyxmPStuZXcgRGF0ZTtpZigoZS5sYXN0T3A9PWR8fGUubGFzdE9yaWdpbj09Yi5vcmlnaW4mJmIub3JpZ2luJiYoIisiPT1iLm9yaWdpbi5jaGFyQXQoMCkmJmEuY20mJmUubGFzdE1vZFRpbWU+Zi1hLmNtLm9wdGlvbnMuaGlzdG9yeUV2ZW50RGVsYXl8fCIqIj09Yi5vcmlnaW4uY2hhckF0KDApKSkmJihnPWxnKGUsZS5sYXN0T3A9PWQpKSl7dmFyIGg9WGcoZy5jaGFuZ2VzKTswPT1wYihiLmZyb20sYi50bykmJjA9PXBiKGIuZnJvbSxoLnRvKT9oLnRvPVhkKGIpOmcuY2hhbmdlcy5wdXNoKGpnKGEsYikpfWVsc2V7dmFyIGk9WGcoZS5kb25lKTtmb3IoaSYmaS5yYW5nZXN8fHBnKGEuc2VsLGUuZG9uZSksZz17Y2hhbmdlczpbamcoYSxiKV0sZ2VuZXJhdGlvbjplLmdlbmVyYXRpb259LGUuZG9uZS5wdXNoKGcpO2UuZG9uZS5sZW5ndGg+ZS51bmRvRGVwdGg7KWUuZG9uZS5zaGlmdCgpLGUuZG9uZVswXS5yYW5nZXN8fGUuZG9uZS5zaGlmdCgpfWUuZG9uZS5wdXNoKGMpLGUuZ2VuZXJhdGlvbj0rK2UubWF4R2VuZXJhdGlvbixlLmxhc3RNb2RUaW1lPWUubGFzdFNlbFRpbWU9ZixlLmxhc3RPcD1lLmxhc3RTZWxPcD1kLGUubGFzdE9yaWdpbj1lLmxhc3RTZWxPcmlnaW49Yi5vcmlnaW4saHx8RmcoYSwiaGlzdG9yeUFkZGVkIil9ZnVuY3Rpb24gbmcoYSxiLGMsZCl7dmFyIGU9Yi5jaGFyQXQoMCk7cmV0dXJuIioiPT1lfHwiKyI9PWUmJmMucmFuZ2VzLmxlbmd0aD09ZC5yYW5nZXMubGVuZ3RoJiZjLnNvbWV0aGluZ1NlbGVjdGVkKCk9PWQuc29tZXRoaW5nU2VsZWN0ZWQoKSYmbmV3IERhdGUtYS5oaXN0b3J5Lmxhc3RTZWxUaW1lPD0oYS5jbT9hLmNtLm9wdGlvbnMuaGlzdG9yeUV2ZW50RGVsYXk6NTAwKX1mdW5jdGlvbiBvZyhhLGIsYyxkKXt2YXIgZT1hLmhpc3RvcnksZj1kJiZkLm9yaWdpbjtjPT1lLmxhc3RTZWxPcHx8ZiYmZS5sYXN0U2VsT3JpZ2luPT1mJiYoZS5sYXN0TW9kVGltZT09ZS5sYXN0U2VsVGltZSYmZS5sYXN0T3JpZ2luPT1mfHxuZyhhLGYsWGcoZS5kb25lKSxiKSk/ZS5kb25lW2UuZG9uZS5sZW5ndGgtMV09YjpwZyhiLGUuZG9uZSksZS5sYXN0U2VsVGltZT0rbmV3IERhdGUsZS5sYXN0U2VsT3JpZ2luPWYsZS5sYXN0U2VsT3A9YyxkJiZkLmNsZWFyUmVkbyE9PSExJiZrZyhlLnVuZG9uZSl9ZnVuY3Rpb24gcGcoYSxiKXt2YXIgYz1YZyhiKTtjJiZjLnJhbmdlcyYmYy5lcXVhbHMoYSl8fGIucHVzaChhKX1mdW5jdGlvbiBxZyhhLGIsYyxkKXt2YXIgZT1iWyJzcGFuc18iK2EuaWRdLGY9MDthLml0ZXIoTWF0aC5tYXgoYS5maXJzdCxjKSxNYXRoLm1pbihhLmZpcnN0K2Euc2l6ZSxkKSxmdW5jdGlvbihjKXtjLm1hcmtlZFNwYW5zJiYoKGV8fChlPWJbInNwYW5zXyIrYS5pZF09e30pKVtmXT1jLm1hcmtlZFNwYW5zKSwrK2Z9KX1mdW5jdGlvbiByZyhhKXtpZighYSlyZXR1cm4gbnVsbDtmb3IodmFyIGMsYj0wO2I8YS5sZW5ndGg7KytiKWFbYl0ubWFya2VyLmV4cGxpY2l0bHlDbGVhcmVkP2N8fChjPWEuc2xpY2UoMCxiKSk6YyYmYy5wdXNoKGFbYl0pO3JldHVybiBjP2MubGVuZ3RoP2M6bnVsbDphfWZ1bmN0aW9uIHNnKGEsYil7dmFyIGM9Ylsic3BhbnNfIithLmlkXTtpZighYylyZXR1cm4gbnVsbDtmb3IodmFyIGQ9MCxlPVtdO2Q8Yi50ZXh0Lmxlbmd0aDsrK2QpZS5wdXNoKHJnKGNbZF0pKTtyZXR1cm4gZX1mdW5jdGlvbiB0ZyhhLGIsYyl7Zm9yKHZhciBkPTAsZT1bXTtkPGEubGVuZ3RoOysrZCl7dmFyIGY9YVtkXTtpZihmLnJhbmdlcyllLnB1c2goYz9IYi5wcm90b3R5cGUuZGVlcENvcHkuY2FsbChmKTpmKTtlbHNle3ZhciBnPWYuY2hhbmdlcyxoPVtdO2UucHVzaCh7Y2hhbmdlczpofSk7Zm9yKHZhciBpPTA7aTxnLmxlbmd0aDsrK2kpe3ZhciBrLGo9Z1tpXTtpZihoLnB1c2goe2Zyb206ai5mcm9tLHRvOmoudG8sdGV4dDpqLnRleHR9KSxiKWZvcih2YXIgbCBpbiBqKShrPWwubWF0Y2goL15zcGFuc18oXGQrKSQvKSkmJlpnKGIsTnVtYmVyKGtbMV0pKT4tMSYmKFhnKGgpW2xdPWpbbF0sZGVsZXRlIGpbbF0pfX19cmV0dXJuIGV9ZnVuY3Rpb24gdWcoYSxiLGMsZCl7YzxhLmxpbmU/YS5saW5lKz1kOmI8YS5saW5lJiYoYS5saW5lPWIsYS5jaD0wKX1mdW5jdGlvbiB2ZyhhLGIsYyxkKXtmb3IodmFyIGU9MDtlPGEubGVuZ3RoOysrZSl7dmFyIGY9YVtlXSxnPSEwO2lmKGYucmFuZ2VzKXtmLmNvcGllZHx8KGY9YVtlXT1mLmRlZXBDb3B5KCksZi5jb3BpZWQ9ITApO2Zvcih2YXIgaD0wO2g8Zi5yYW5nZXMubGVuZ3RoO2grKyl1ZyhmLnJhbmdlc1toXS5hbmNob3IsYixjLGQpLHVnKGYucmFuZ2VzW2hdLmhlYWQsYixjLGQpfWVsc2V7Zm9yKHZhciBoPTA7aDxmLmNoYW5nZXMubGVuZ3RoOysraCl7dmFyIGk9Zi5jaGFuZ2VzW2hdO2lmKGM8aS5mcm9tLmxpbmUpaS5mcm9tPW9iKGkuZnJvbS5saW5lK2QsaS5mcm9tLmNoKSxpLnRvPW9iKGkudG8ubGluZStkLGkudG8uY2gpO2Vsc2UgaWYoYjw9aS50by5saW5lKXtnPSExO2JyZWFrfX1nfHwoYS5zcGxpY2UoMCxlKzEpLGU9MCl9fX1mdW5jdGlvbiB3ZyhhLGIpe3ZhciBjPWIuZnJvbS5saW5lLGQ9Yi50by5saW5lLGU9Yi50ZXh0Lmxlbmd0aC0oZC1jKS0xO3ZnKGEuZG9uZSxjLGQsZSksdmcoYS51bmRvbmUsYyxkLGUpfWZ1bmN0aW9uIHpnKGEpe3JldHVybiBudWxsIT1hLmRlZmF1bHRQcmV2ZW50ZWQ/YS5kZWZhdWx0UHJldmVudGVkOjA9PWEucmV0dXJuVmFsdWV9ZnVuY3Rpb24gQmcoYSl7cmV0dXJuIGEudGFyZ2V0fHxhLnNyY0VsZW1lbnR9ZnVuY3Rpb24gQ2coYSl7dmFyIGI9YS53aGljaDtyZXR1cm4gbnVsbD09YiYmKDEmYS5idXR0b24/Yj0xOjImYS5idXR0b24/Yj0zOjQmYS5idXR0b24mJihiPTIpKSxvJiZhLmN0cmxLZXkmJjE9PWImJihiPTMpLGJ9ZnVuY3Rpb24gSGcoYSxiKXtmdW5jdGlvbiBmKGEpe3JldHVybiBmdW5jdGlvbigpe2EuYXBwbHkobnVsbCxkKX19dmFyIGM9YS5faGFuZGxlcnMmJmEuX2hhbmRsZXJzW2JdO2lmKGMpe3ZhciBlLGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO1JjP2U9UmMuZGVsYXllZENhbGxiYWNrczpHZz9lPUdnOihlPUdnPVtdLHNldFRpbWVvdXQoSWcsMCkpO2Zvcih2YXIgZz0wO2c8Yy5sZW5ndGg7KytnKWUucHVzaChmKGNbZ10pKX19ZnVuY3Rpb24gSWcoKXt2YXIgYT1HZztHZz1udWxsO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7KytiKWFbYl0oKX1mdW5jdGlvbiBKZyhhLGIsYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBiJiYoYj17dHlwZTpiLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0UHJldmVudGVkPSEwfX0pLEZnKGEsY3x8Yi50eXBlLGEsYiksemcoYil8fGIuY29kZW1pcnJvcklnbm9yZX1mdW5jdGlvbiBLZyhhKXt2YXIgYj1hLl9oYW5kbGVycyYmYS5faGFuZGxlcnMuY3Vyc29yQWN0aXZpdHk7aWYoYilmb3IodmFyIGM9YS5jdXJPcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzfHwoYS5jdXJPcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzPVtdKSxkPTA7ZDxiLmxlbmd0aDsrK2QpLTE9PVpnKGMsYltkXSkmJmMucHVzaChiW2RdKX1mdW5jdGlvbiBMZyhhLGIpe3ZhciBjPWEuX2hhbmRsZXJzJiZhLl9oYW5kbGVyc1tiXTtyZXR1cm4gYyYmYy5sZW5ndGg+MH1mdW5jdGlvbiBNZyhhKXthLnByb3RvdHlwZS5vbj1mdW5jdGlvbihhLGIpe0RnKHRoaXMsYSxiKX0sYS5wcm90b3R5cGUub2ZmPWZ1bmN0aW9uKGEsYil7RWcodGhpcyxhLGIpfX1mdW5jdGlvbiBTZygpe3RoaXMuaWQ9bnVsbH1mdW5jdGlvbiBVZyhhLGIsYyl7Zm9yKHZhciBkPTAsZT0wOzspe3ZhciBmPWEuaW5kZXhPZigiCSIsZCk7LTE9PWYmJihmPWEubGVuZ3RoKTt2YXIgZz1mLWQ7aWYoZj09YS5sZW5ndGh8fGUrZz49YilyZXR1cm4gZCtNYXRoLm1pbihnLGItZSk7aWYoZSs9Zi1kLGUrPWMtZSVjLGQ9ZisxLGU+PWIpcmV0dXJuIGR9fWZ1bmN0aW9uIFdnKGEpe2Zvcig7VmcubGVuZ3RoPD1hOylWZy5wdXNoKFhnKFZnKSsiICIpO3JldHVybiBWZ1thXX1mdW5jdGlvbiBYZyhhKXtyZXR1cm4gYVthLmxlbmd0aC0xXX1mdW5jdGlvbiBaZyhhLGIpe2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7KytjKWlmKGFbY109PWIpcmV0dXJuIGM7cmV0dXJuLTF9ZnVuY3Rpb24gJGcoYSxiKXtmb3IodmFyIGM9W10sZD0wO2Q8YS5sZW5ndGg7ZCsrKWNbZF09YihhW2RdLGQpO3JldHVybiBjfWZ1bmN0aW9uIF9nKCl7fWZ1bmN0aW9uIGFoKGEsYil7dmFyIGM7cmV0dXJuIE9iamVjdC5jcmVhdGU/Yz1PYmplY3QuY3JlYXRlKGEpOihfZy5wcm90b3R5cGU9YSxjPW5ldyBfZyksYiYmYmgoYixjKSxjfWZ1bmN0aW9uIGJoKGEsYixjKXtifHwoYj17fSk7Zm9yKHZhciBkIGluIGEpIWEuaGFzT3duUHJvcGVydHkoZCl8fGM9PT0hMSYmYi5oYXNPd25Qcm9wZXJ0eShkKXx8KGJbZF09YVtkXSk7cmV0dXJuIGJ9ZnVuY3Rpb24gY2goYSl7dmFyIGI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KG51bGwsYil9fWZ1bmN0aW9uIGZoKGEsYil7cmV0dXJuIGI/Yi5zb3VyY2UuaW5kZXhPZigiXFx3Iik+LTEmJmVoKGEpPyEwOmIudGVzdChhKTplaChhKX1mdW5jdGlvbiBnaChhKXtmb3IodmFyIGIgaW4gYSlpZihhLmhhc093blByb3BlcnR5KGIpJiZhW2JdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGloKGEpe3JldHVybiBhLmNoYXJDb2RlQXQoMCk+PTc2OCYmaGgudGVzdChhKX1mdW5jdGlvbiBqaChhLGIsYyxkKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGEpO2lmKGMmJihlLmNsYXNzTmFtZT1jKSxkJiYoZS5zdHlsZS5jc3NUZXh0PWQpLCJzdHJpbmciPT10eXBlb2YgYillLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGIpKTtlbHNlIGlmKGIpZm9yKHZhciBmPTA7ZjxiLmxlbmd0aDsrK2YpZS5hcHBlbmRDaGlsZChiW2ZdKTtyZXR1cm4gZX1mdW5jdGlvbiBsaChhKXtmb3IodmFyIGI9YS5jaGlsZE5vZGVzLmxlbmd0aDtiPjA7LS1iKWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKTtyZXR1cm4gYX1mdW5jdGlvbiBtaChhLGIpe3JldHVybiBsaChhKS5hcHBlbmRDaGlsZChiKX1mdW5jdGlvbiBvaCgpe3JldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50fWZ1bmN0aW9uIHBoKGEpe3JldHVybiBuZXcgUmVnRXhwKCIoXnxcXHMpIithKyIoPzokfFxccylcXHMqIil9ZnVuY3Rpb24gc2goYSxiKXtmb3IodmFyIGM9YS5zcGxpdCgiICIpLGQ9MDtkPGMubGVuZ3RoO2QrKyljW2RdJiYhcGgoY1tkXSkudGVzdChiKSYmKGIrPSIgIitjW2RdKTtyZXR1cm4gYn1mdW5jdGlvbiB0aChhKXtpZihkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpZm9yKHZhciBiPWRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiQ29kZU1pcnJvciIpLGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXS5Db2RlTWlycm9yO2QmJmEoZCl9fWZ1bmN0aW9uIHZoKCl7dWh8fCh3aCgpLHVoPSEwKX1mdW5jdGlvbiB3aCgpe3ZhciBhO0RnKHdpbmRvdywicmVzaXplIixmdW5jdGlvbigpe251bGw9PWEmJihhPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthPW51bGwsdGgob2QpfSwxMDApKX0pLERnKHdpbmRvdywiYmx1ciIsZnVuY3Rpb24oKXt0aChVZCl9KX1mdW5jdGlvbiB6aChhKXtpZihudWxsPT15aCl7dmFyIGI9amgoInNwYW4iLCJcdTIwMGIiKTttaChhLGpoKCJzcGFuIixbYixkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIpXSkpLDAhPWEuZmlyc3RDaGlsZC5vZmZzZXRIZWlnaHQmJih5aD1iLm9mZnNldFdpZHRoPD0xJiZiLm9mZnNldEhlaWdodD4yJiYhKGQmJjg+ZSkpfXZhciBjPXloP2poKCJzcGFuIiwiXHUyMDBiIik6amgoInNwYW4iLCJceGEwIixudWxsLCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxcHg7IG1hcmdpbi1yaWdodDogLTFweCIpO3JldHVybiBjLnNldEF0dHJpYnV0ZSgiY20tdGV4dCIsIiIpLGN9ZnVuY3Rpb24gQmgoYSl7aWYobnVsbCE9QWgpcmV0dXJuIEFoO3ZhciBiPW1oKGEsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIkFcdTA2MmVBIikpLGM9a2goYiwwLDEpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFjfHxjLmxlZnQ9PWMucmlnaHQpcmV0dXJuITE7dmFyIGQ9a2goYiwxLDIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBBaD1kLnJpZ2h0LWMucmlnaHQ8M31mdW5jdGlvbiBHaChhKXtpZihudWxsIT1GaClyZXR1cm4gRmg7dmFyIGI9bWgoYSxqaCgic3BhbiIsIngiKSksYz1iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9a2goYiwwLDEpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBGaD1NYXRoLmFicyhjLmxlZnQtZC5sZWZ0KT4xfWZ1bmN0aW9uIEloKGEsYixjLGQpe2lmKCFhKXJldHVybiBkKGIsYywibHRyIik7Zm9yKHZhciBlPSExLGY9MDtmPGEubGVuZ3RoOysrZil7dmFyIGc9YVtmXTsoZy5mcm9tPGMmJmcudG8+Ynx8Yj09YyYmZy50bz09YikmJihkKE1hdGgubWF4KGcuZnJvbSxiKSxNYXRoLm1pbihnLnRvLGMpLDE9PWcubGV2ZWw/InJ0bCI6Imx0ciIpLGU9ITApfWV8fGQoYixjLCJsdHIiKX1mdW5jdGlvbiBKaChhKXtyZXR1cm4gYS5sZXZlbCUyP2EudG86YS5mcm9tfWZ1bmN0aW9uIEtoKGEpe3JldHVybiBhLmxldmVsJTI/YS5mcm9tOmEudG99ZnVuY3Rpb24gTGgoYSl7dmFyIGI9aGcoYSk7cmV0dXJuIGI/SmgoYlswXSk6MH1mdW5jdGlvbiBNaChhKXt2YXIgYj1oZyhhKTtyZXR1cm4gYj9LaChYZyhiKSk6YS50ZXh0Lmxlbmd0aH1mdW5jdGlvbiBOaChhLGIpe3ZhciBjPWFnKGEuZG9jLGIpLGQ9bmYoYyk7ZCE9YyYmKGI9ZWcoZCkpO3ZhciBlPWhnKGQpLGY9ZT9lWzBdLmxldmVsJTI/TWgoZCk6TGgoZCk6MDtyZXR1cm4gb2IoYixmKX1mdW5jdGlvbiBPaChhLGIpe2Zvcih2YXIgYyxkPWFnKGEuZG9jLGIpO2M9bGYoZCk7KWQ9Yy5maW5kKDEsITApLmxpbmUsYj1udWxsO3ZhciBlPWhnKGQpLGY9ZT9lWzBdLmxldmVsJTI/TGgoZCk6TWgoZCk6ZC50ZXh0Lmxlbmd0aDtyZXR1cm4gb2IobnVsbD09Yj9lZyhkKTpiLGYpfWZ1bmN0aW9uIFBoKGEsYil7dmFyIGM9TmgoYSxiLmxpbmUpLGQ9YWcoYS5kb2MsYy5saW5lKSxlPWhnKGQpO2lmKCFlfHwwPT1lWzBdLmxldmVsKXt2YXIgZj1NYXRoLm1heCgwLGQudGV4dC5zZWFyY2goL1xTLykpLGc9Yi5saW5lPT1jLmxpbmUmJmIuY2g8PWYmJmIuY2g7cmV0dXJuIG9iKGMubGluZSxnPzA6Zil9cmV0dXJuIGN9ZnVuY3Rpb24gUWgoYSxiLGMpe3ZhciBkPWFbMF0ubGV2ZWw7cmV0dXJuIGI9PWQ/ITA6Yz09ZD8hMTpjPmJ9ZnVuY3Rpb24gU2goYSxiKXtSaD1udWxsO2Zvcih2YXIgZCxjPTA7YzxhLmxlbmd0aDsrK2Mpe3ZhciBlPWFbY107aWYoZS5mcm9tPGImJmUudG8+YilyZXR1cm4gYztpZihlLmZyb209PWJ8fGUudG89PWIpe2lmKG51bGwhPWQpcmV0dXJuIFFoKGEsZS5sZXZlbCxhW2RdLmxldmVsKT8oZS5mcm9tIT1lLnRvJiYoUmg9ZCksYyk6KGUuZnJvbSE9ZS50byYmKFJoPWMpLGQpO2Q9Y319cmV0dXJuIGR9ZnVuY3Rpb24gVGgoYSxiLGMsZCl7aWYoIWQpcmV0dXJuIGIrYztkbyBiKz1jO3doaWxlKGI+MCYmaWgoYS50ZXh0LmNoYXJBdChiKSkpO3JldHVybiBifWZ1bmN0aW9uIFVoKGEsYixjLGQpe3ZhciBlPWhnKGEpO2lmKCFlKXJldHVybiBWaChhLGIsYyxkKTtmb3IodmFyIGY9U2goZSxiKSxnPWVbZl0saD1UaChhLGIsZy5sZXZlbCUyPy1jOmMsZCk7Oyl7aWYoaD5nLmZyb20mJmg8Zy50bylyZXR1cm4gaDtpZihoPT1nLmZyb218fGg9PWcudG8pcmV0dXJuIFNoKGUsaCk9PWY/aDooZz1lW2YrPWNdLGM+MD09Zy5sZXZlbCUyP2cudG86Zy5mcm9tKTtpZihnPWVbZis9Y10sIWcpcmV0dXJuIG51bGw7aD1jPjA9PWcubGV2ZWwlMj9UaChhLGcudG8sLTEsZCk6VGgoYSxnLmZyb20sMSxkKX19ZnVuY3Rpb24gVmgoYSxiLGMsZCl7dmFyIGU9YitjO2lmKGQpZm9yKDtlPjAmJmloKGEudGV4dC5jaGFyQXQoZSkpOyllKz1jO3JldHVybiAwPmV8fGU+YS50ZXh0Lmxlbmd0aD9udWxsOmV9dmFyIGE9L2dlY2tvXC9cZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksYj0vTVNJRSBcZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxjPS9UcmlkZW50XC8oPzpbNy05XXxcZHsyLH0pXC4uKnJ2OihcZCspLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpLGQ9Ynx8YyxlPWQmJihiP2RvY3VtZW50LmRvY3VtZW50TW9kZXx8NjpjWzFdKSxmPS9XZWJLaXRcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxnPWYmJi9RdFwvXGQrXC5cZCsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksaD0vQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksaT0vT3BlcmFcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxqPS9BcHBsZSBDb21wdXRlci8udGVzdChuYXZpZ2F0b3IudmVuZG9yKSxrPS9NYWMgT1MgWCAxXGRcRChbOC05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGw9L1BoYW50b21KUy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxtPS9BcHBsZVdlYktpdC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmL01vYmlsZVwvXHcrLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLG49bXx8L0FuZHJvaWR8d2ViT1N8QmxhY2tCZXJyeXxPcGVyYSBNaW5pfE9wZXJhIE1vYml8SUVNb2JpbGUvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLG89bXx8L01hYy8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pLHA9L3dpbi9pLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSxxPWkmJm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1ZlcnNpb25cLyhcZCpcLlxkKikvKTtxJiYocT1OdW1iZXIocVsxXSkpLHEmJnE+PTE1JiYoaT0hMSxmPSEwKTt2YXIgcj1vJiYoZ3x8aSYmKG51bGw9PXF8fDEyLjExPnEpKSxzPWF8fGQmJmU+PTksdD0hMSx1PSExO0sucHJvdG90eXBlPWJoKHt1cGRhdGU6ZnVuY3Rpb24oYSl7dmFyIGI9YS5zY3JvbGxXaWR0aD5hLmNsaWVudFdpZHRoKzEsYz1hLnNjcm9sbEhlaWdodD5hLmNsaWVudEhlaWdodCsxLGQ9YS5uYXRpdmVCYXJXaWR0aDtpZihjKXt0aGlzLnZlcnQuc3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMudmVydC5zdHlsZS5ib3R0b209Yj9kKyJweCI6IjAiO3ZhciBlPWEudmlld0hlaWdodC0oYj9kOjApO3RoaXMudmVydC5maXJzdENoaWxkLnN0eWxlLmhlaWdodD1NYXRoLm1heCgwLGEuc2Nyb2xsSGVpZ2h0LWEuY2xpZW50SGVpZ2h0K2UpKyJweCJ9ZWxzZSB0aGlzLnZlcnQuc3R5bGUuZGlzcGxheT0iIix0aGlzLnZlcnQuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9IjAiO2lmKGIpe3RoaXMuaG9yaXouc3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuaG9yaXouc3R5bGUucmlnaHQ9Yz9kKyJweCI6IjAiLHRoaXMuaG9yaXouc3R5bGUubGVmdD1hLmJhckxlZnQrInB4Ijt2YXIgZj1hLnZpZXdXaWR0aC1hLmJhckxlZnQtKGM/ZDowKTt0aGlzLmhvcml6LmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9YS5zY3JvbGxXaWR0aC1hLmNsaWVudFdpZHRoK2YrInB4In1lbHNlIHRoaXMuaG9yaXouc3R5bGUuZGlzcGxheT0iIix0aGlzLmhvcml6LmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9IjAiO3JldHVybiF0aGlzLmNoZWNrZWRPdmVybGF5JiZhLmNsaWVudEhlaWdodD4wJiYoMD09ZCYmdGhpcy5vdmVybGF5SGFjaygpLHRoaXMuY2hlY2tlZE92ZXJsYXk9ITApLHtyaWdodDpjP2Q6MCxib3R0b206Yj9kOjB9fSxzZXRTY3JvbGxMZWZ0OmZ1bmN0aW9uKGEpe3RoaXMuaG9yaXouc2Nyb2xsTGVmdCE9YSYmKHRoaXMuaG9yaXouc2Nyb2xsTGVmdD1hKX0sc2V0U2Nyb2xsVG9wOmZ1bmN0aW9uKGEpe3RoaXMudmVydC5zY3JvbGxUb3AhPWEmJih0aGlzLnZlcnQuc2Nyb2xsVG9wPWEpfSxvdmVybGF5SGFjazpmdW5jdGlvbigpe3ZhciBhPW8mJiFrPyIxMnB4IjoiMThweCI7dGhpcy5ob3Jpei5zdHlsZS5taW5IZWlnaHQ9dGhpcy52ZXJ0LnN0eWxlLm1pbldpZHRoPWE7dmFyIGI9dGhpcyxjPWZ1bmN0aW9uKGEpe0JnKGEpIT1iLnZlcnQmJkJnKGEpIT1iLmhvcml6JiZiZChiLmNtLHJkKShhKX07RGcodGhpcy52ZXJ0LCJtb3VzZWRvd24iLGMpLERnKHRoaXMuaG9yaXosIm1vdXNlZG93biIsYyl9LGNsZWFyOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ob3Jpei5wYXJlbnROb2RlO2EucmVtb3ZlQ2hpbGQodGhpcy5ob3JpeiksYS5yZW1vdmVDaGlsZCh0aGlzLnZlcnQpfX0sSy5wcm90b3R5cGUpLEwucHJvdG90eXBlPWJoKHt1cGRhdGU6ZnVuY3Rpb24oKXtyZXR1cm57Ym90dG9tOjAscmlnaHQ6MH19LHNldFNjcm9sbExlZnQ6ZnVuY3Rpb24oKXt9LHNldFNjcm9sbFRvcDpmdW5jdGlvbigpe30sY2xlYXI6ZnVuY3Rpb24oKXt9fSxMLnByb3RvdHlwZSksdi5zY3JvbGxiYXJNb2RlbD17Im5hdGl2ZSI6SywibnVsbCI6TH0sVS5wcm90b3R5cGUuc2lnbmFsPWZ1bmN0aW9uKGEsYil7TGcoYSxiKSYmdGhpcy5ldmVudHMucHVzaChhcmd1bWVudHMpfSxVLnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPHRoaXMuZXZlbnRzLmxlbmd0aDthKyspRmcuYXBwbHkobnVsbCx0aGlzLmV2ZW50c1thXSl9O3ZhciBvYj12LlBvcz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygb2I/KHRoaXMubGluZT1hLHRoaXMuY2g9Yix2b2lkIDApOm5ldyBvYihhLGIpfSxwYj12LmNtcFBvcz1mdW5jdGlvbihhLGIpe3JldHVybiBhLmxpbmUtYi5saW5lfHxhLmNoLWIuY2h9LHZiPW51bGw7emIucHJvdG90eXBlPWJoKHtpbml0OmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGkoYSl7aWYoYy5zb21ldGhpbmdTZWxlY3RlZCgpKXZiPWMuZ2V0U2VsZWN0aW9ucygpLGIuaW5hY2N1cmF0ZVNlbGVjdGlvbiYmKGIucHJldklucHV0PSIiLGIuaW5hY2N1cmF0ZVNlbGVjdGlvbj0hMSxoLnZhbHVlPXZiLmpvaW4oIlxuIiksWWcoaCkpO2Vsc2V7dmFyIGQ9eGIoYyk7dmI9ZC50ZXh0LCJjdXQiPT1hLnR5cGU/Yy5zZXRTZWxlY3Rpb25zKGQucmFuZ2VzLG51bGwsUGcpOihiLnByZXZJbnB1dD0iIixoLnZhbHVlPWQudGV4dC5qb2luKCJcbiIpLFlnKGgpKX0iY3V0Ij09YS50eXBlJiYoYy5zdGF0ZS5jdXRJbmNvbWluZz0hMCl9dmFyIGI9dGhpcyxjPXRoaXMuY20sZz10aGlzLndyYXBwZXI9QWIoKSxoPXRoaXMudGV4dGFyZWE9Zy5maXJzdENoaWxkO2Eud3JhcHBlci5pbnNlcnRCZWZvcmUoZyxhLndyYXBwZXIuZmlyc3RDaGlsZCksbSYmKGguc3R5bGUud2lkdGg9IjBweCIpLERnKGgsImlucHV0IixmdW5jdGlvbigpe2QmJmU+PTkmJmIuaGFzU2VsZWN0aW9uJiYoYi5oYXNTZWxlY3Rpb249bnVsbCksYi5wb2xsKCl9KSxEZyhoLCJwYXN0ZSIsZnVuY3Rpb24oKXtpZihmJiYhYy5zdGF0ZS5mYWtlZExhc3RDaGFyJiYhKG5ldyBEYXRlLWMuc3RhdGUubGFzdE1pZGRsZURvd248MjAwKSl7dmFyIGE9aC5zZWxlY3Rpb25TdGFydCxkPWguc2VsZWN0aW9uRW5kO2gudmFsdWUrPSIkIixoLnNlbGVjdGlvbkVuZD1kLGguc2VsZWN0aW9uU3RhcnQ9YSxjLnN0YXRlLmZha2VkTGFzdENoYXI9ITB9Yy5zdGF0ZS5wYXN0ZUluY29taW5nPSEwLGIuZmFzdFBvbGwoKX0pLERnKGgsImN1dCIsaSksRGcoaCwiY29weSIsaSksRGcoYS5zY3JvbGxlciwicGFzdGUiLGZ1bmN0aW9uKGQpe3BkKGEsZCl8fChjLnN0YXRlLnBhc3RlSW5jb21pbmc9ITAsYi5mb2N1cygpKX0pLERnKGEubGluZVNwYWNlLCJzZWxlY3RzdGFydCIsZnVuY3Rpb24oYil7cGQoYSxiKXx8eGcoYil9KX0scHJlcGFyZVNlbGVjdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY20sYj1hLmRpc3BsYXksYz1hLmRvYyxkPWNjKGEpO2lmKGEub3B0aW9ucy5tb3ZlSW5wdXRXaXRoQ3Vyc29yKXt2YXIgZT1KYyhhLGMuc2VsLnByaW1hcnkoKS5oZWFkLCJkaXYiKSxmPWIud3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPWIubGluZURpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkLnRlVG9wPU1hdGgubWF4KDAsTWF0aC5taW4oYi53cmFwcGVyLmNsaWVudEhlaWdodC0xMCxlLnRvcCtnLnRvcC1mLnRvcCkpLGQudGVMZWZ0PU1hdGgubWF4KDAsTWF0aC5taW4oYi53cmFwcGVyLmNsaWVudFdpZHRoLTEwLGUubGVmdCtnLmxlZnQtZi5sZWZ0KSl9cmV0dXJuIGR9LHNob3dTZWxlY3Rpb246ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jbSxjPWIuZGlzcGxheTttaChjLmN1cnNvckRpdixhLmN1cnNvcnMpLG1oKGMuc2VsZWN0aW9uRGl2LGEuc2VsZWN0aW9uKSxudWxsIT1hLnRlVG9wJiYodGhpcy53cmFwcGVyLnN0eWxlLnRvcD1hLnRlVG9wKyJweCIsdGhpcy53cmFwcGVyLnN0eWxlLmxlZnQ9YS50ZUxlZnQrInB4Iil9LHJlc2V0OmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmNvbnRleHRNZW51UGVuZGluZyl7dmFyIGIsYyxmPXRoaXMuY20sZz1mLmRvYztpZihmLnNvbWV0aGluZ1NlbGVjdGVkKCkpe3RoaXMucHJldklucHV0PSIiO3ZhciBoPWcuc2VsLnByaW1hcnkoKTtiPUVoJiYoaC50bygpLmxpbmUtaC5mcm9tKCkubGluZT4xMDB8fChjPWYuZ2V0U2VsZWN0aW9uKCkpLmxlbmd0aD4xZTMpO3ZhciBpPWI/Ii0iOmN8fGYuZ2V0U2VsZWN0aW9uKCk7dGhpcy50ZXh0YXJlYS52YWx1ZT1pLGYuc3RhdGUuZm9jdXNlZCYmWWcodGhpcy50ZXh0YXJlYSksZCYmZT49OSYmKHRoaXMuaGFzU2VsZWN0aW9uPWkpfWVsc2UgYXx8KHRoaXMucHJldklucHV0PXRoaXMudGV4dGFyZWEudmFsdWU9IiIsZCYmZT49OSYmKHRoaXMuaGFzU2VsZWN0aW9uPW51bGwpKTt0aGlzLmluYWNjdXJhdGVTZWxlY3Rpb249Yn19LGdldEZpZWxkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dGFyZWF9LHN1cHBvcnRzVG91Y2g6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZm9jdXM6ZnVuY3Rpb24oKXtpZigibm9jdXJzb3IiIT10aGlzLmNtLm9wdGlvbnMucmVhZE9ubHkmJighbnx8b2goKSE9dGhpcy50ZXh0YXJlYSkpdHJ5e3RoaXMudGV4dGFyZWEuZm9jdXMoKX1jYXRjaChhKXt9fSxibHVyOmZ1bmN0aW9uKCl7dGhpcy50ZXh0YXJlYS5ibHVyKCl9LHJlc2V0UG9zaXRpb246ZnVuY3Rpb24oKXt0aGlzLndyYXBwZXIuc3R5bGUudG9wPXRoaXMud3JhcHBlci5zdHlsZS5sZWZ0PTB9LHJlY2VpdmVkRm9jdXM6ZnVuY3Rpb24oKXt0aGlzLnNsb3dQb2xsKCl9LHNsb3dQb2xsOmZ1bmN0aW9uKCl7dmFyIGE9dGhpczthLnBvbGxpbmdGYXN0fHxhLnBvbGxpbmcuc2V0KHRoaXMuY20ub3B0aW9ucy5wb2xsSW50ZXJ2YWwsZnVuY3Rpb24oKXthLnBvbGwoKSxhLmNtLnN0YXRlLmZvY3VzZWQmJmEuc2xvd1BvbGwoKX0pfSxmYXN0UG9sbDpmdW5jdGlvbigpe2Z1bmN0aW9uIGMoKXt2YXIgZD1iLnBvbGwoKTtkfHxhPyhiLnBvbGxpbmdGYXN0PSExLGIuc2xvd1BvbGwoKSk6KGE9ITAsYi5wb2xsaW5nLnNldCg2MCxjKSl9dmFyIGE9ITEsYj10aGlzO2IucG9sbGluZ0Zhc3Q9ITAsYi5wb2xsaW5nLnNldCgyMCxjKX0scG9sbDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY20sYj10aGlzLnRleHRhcmVhLGM9dGhpcy5wcmV2SW5wdXQ7aWYoIWEuc3RhdGUuZm9jdXNlZHx8RGgoYikmJiFjfHx1YihhKXx8YS5vcHRpb25zLmRpc2FibGVJbnB1dHx8YS5zdGF0ZS5rZXlTZXEpcmV0dXJuITE7YS5zdGF0ZS5wYXN0ZUluY29taW5nJiZhLnN0YXRlLmZha2VkTGFzdENoYXImJihiLnZhbHVlPWIudmFsdWUuc3Vic3RyaW5nKDAsYi52YWx1ZS5sZW5ndGgtMSksYS5zdGF0ZS5mYWtlZExhc3RDaGFyPSExKTt2YXIgZj1iLnZhbHVlO2lmKGY9PWMmJiFhLnNvbWV0aGluZ1NlbGVjdGVkKCkpcmV0dXJuITE7aWYoZCYmZT49OSYmdGhpcy5oYXNTZWxlY3Rpb249PT1mfHxvJiYvW1x1ZjcwMC1cdWY3ZmZdLy50ZXN0KGYpKXJldHVybiBhLmRpc3BsYXkuaW5wdXQucmVzZXQoKSwhMTs4MjAzIT1mLmNoYXJDb2RlQXQoMCl8fGEuZG9jLnNlbCE9YS5kaXNwbGF5LnNlbEZvckNvbnRleHRNZW51fHxjfHwoYz0iXHUyMDBiIik7Zm9yKHZhciBnPTAsaD1NYXRoLm1pbihjLmxlbmd0aCxmLmxlbmd0aCk7aD5nJiZjLmNoYXJDb2RlQXQoZyk9PWYuY2hhckNvZGVBdChnKTspKytnO3ZhciBpPXRoaXM7cmV0dXJuIGFkKGEsZnVuY3Rpb24oKXt3YihhLGYuc2xpY2UoZyksYy5sZW5ndGgtZyksZi5sZW5ndGg+MWUzfHxmLmluZGV4T2YoIlxuIik+LTE/Yi52YWx1ZT1pLnByZXZJbnB1dD0iIjppLnByZXZJbnB1dD1mDQp9KSwhMH0sZW5zdXJlUG9sbGVkOmZ1bmN0aW9uKCl7dGhpcy5wb2xsaW5nRmFzdCYmdGhpcy5wb2xsKCkmJih0aGlzLnBvbGxpbmdGYXN0PSExKX0sb25LZXlQcmVzczpmdW5jdGlvbigpe2QmJmU+PTkmJih0aGlzLmhhc1NlbGVjdGlvbj1udWxsKSx0aGlzLmZhc3RQb2xsKCl9LG9uQ29udGV4dE1lbnU6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gbygpe2lmKG51bGwhPWguc2VsZWN0aW9uU3RhcnQpe3ZhciBhPWMuc29tZXRoaW5nU2VsZWN0ZWQoKSxkPWgudmFsdWU9Ilx1MjAwYiIrKGE/aC52YWx1ZToiIik7Yi5wcmV2SW5wdXQ9YT8iIjoiXHUyMDBiIixoLnNlbGVjdGlvblN0YXJ0PTEsaC5zZWxlY3Rpb25FbmQ9ZC5sZW5ndGgsZy5zZWxGb3JDb250ZXh0TWVudT1jLmRvYy5zZWx9fWZ1bmN0aW9uIHAoKXtpZihiLmNvbnRleHRNZW51UGVuZGluZz0hMSxiLndyYXBwZXIuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixoLnN0eWxlLmNzc1RleHQ9bSxkJiY5PmUmJmcuc2Nyb2xsYmFycy5zZXRTY3JvbGxUb3AoZy5zY3JvbGxlci5zY3JvbGxUb3A9ayksbnVsbCE9aC5zZWxlY3Rpb25TdGFydCl7KCFkfHxkJiY5PmUpJiZvKCk7dmFyIGE9MCxmPWZ1bmN0aW9uKCl7Zy5zZWxGb3JDb250ZXh0TWVudT09Yy5kb2Muc2VsJiYwPT1oLnNlbGVjdGlvblN0YXJ0P2JkKGMsRmUuc2VsZWN0QWxsKShjKTphKys8MTA/Zy5kZXRlY3RpbmdTZWxlY3RBbGw9c2V0VGltZW91dChmLDUwMCk6Zy5pbnB1dC5yZXNldCgpfTtnLmRldGVjdGluZ1NlbGVjdEFsbD1zZXRUaW1lb3V0KGYsMjAwKX19dmFyIGI9dGhpcyxjPWIuY20sZz1jLmRpc3BsYXksaD1iLnRleHRhcmVhLGo9cWQoYyxhKSxrPWcuc2Nyb2xsZXIuc2Nyb2xsVG9wO2lmKGomJiFpKXt2YXIgbD1jLm9wdGlvbnMucmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51O2wmJi0xPT1jLmRvYy5zZWwuY29udGFpbnMoaikmJmJkKGMsWGIpKGMuZG9jLEtiKGopLFBnKTt2YXIgbT1oLnN0eWxlLmNzc1RleHQ7aWYoYi53cmFwcGVyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7IHRvcDogIisoYS5jbGllbnRZLTUpKyJweDsgbGVmdDogIisoYS5jbGllbnRYLTUpKyJweDsgei1pbmRleDogMTAwMDsgYmFja2dyb3VuZDogIisoZD8icmdiYSgyNTUsIDI1NSwgMjU1LCAuMDUpIjoidHJhbnNwYXJlbnQiKSsiOyBvdXRsaW5lOiBub25lOyBib3JkZXItd2lkdGg6IDA7IG91dGxpbmU6IG5vbmU7IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IC4wNTsgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUpOyIsZil2YXIgbj13aW5kb3cuc2Nyb2xsWTtpZihnLmlucHV0LmZvY3VzKCksZiYmd2luZG93LnNjcm9sbFRvKG51bGwsbiksZy5pbnB1dC5yZXNldCgpLGMuc29tZXRoaW5nU2VsZWN0ZWQoKXx8KGgudmFsdWU9Yi5wcmV2SW5wdXQ9IiAiKSxiLmNvbnRleHRNZW51UGVuZGluZz0hMCxnLnNlbEZvckNvbnRleHRNZW51PWMuZG9jLnNlbCxjbGVhclRpbWVvdXQoZy5kZXRlY3RpbmdTZWxlY3RBbGwpLGQmJmU+PTkmJm8oKSxzKXtBZyhhKTt2YXIgcT1mdW5jdGlvbigpe0VnKHdpbmRvdywibW91c2V1cCIscSksc2V0VGltZW91dChwLDIwKX07RGcod2luZG93LCJtb3VzZXVwIixxKX1lbHNlIHNldFRpbWVvdXQocCw1MCl9fSxzZXRVbmVkaXRhYmxlOl9nLG5lZWRzQ29udGVudEF0dHJpYnV0ZTohMX0semIucHJvdG90eXBlKSxCYi5wcm90b3R5cGU9Ymgoe2luaXQ6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gZShhKXtpZihjLnNvbWV0aGluZ1NlbGVjdGVkKCkpdmI9Yy5nZXRTZWxlY3Rpb25zKCksImN1dCI9PWEudHlwZSYmYy5yZXBsYWNlU2VsZWN0aW9uKCIiLG51bGwsImN1dCIpO2Vsc2V7dmFyIGI9eGIoYyk7dmI9Yi50ZXh0LCJjdXQiPT1hLnR5cGUmJmMub3BlcmF0aW9uKGZ1bmN0aW9uKCl7Yy5zZXRTZWxlY3Rpb25zKGIucmFuZ2VzLDAsUGcpLGMucmVwbGFjZVNlbGVjdGlvbigiIixudWxsLCJjdXQiKX0pfWlmKGEuY2xpcGJvYXJkRGF0YSYmIW0pYS5wcmV2ZW50RGVmYXVsdCgpLGEuY2xpcGJvYXJkRGF0YS5jbGVhckRhdGEoKSxhLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9wbGFpbiIsdmIuam9pbigiXG4iKSk7ZWxzZXt2YXIgZD1BYigpLGU9ZC5maXJzdENoaWxkO2MuZGlzcGxheS5saW5lU3BhY2UuaW5zZXJ0QmVmb3JlKGQsYy5kaXNwbGF5LmxpbmVTcGFjZS5maXJzdENoaWxkKSxlLnZhbHVlPXZiLmpvaW4oIlxuIik7dmFyIGY9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtZZyhlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5kaXNwbGF5LmxpbmVTcGFjZS5yZW1vdmVDaGlsZChkKSxmLmZvY3VzKCl9LDUwKX19dmFyIGI9dGhpcyxjPWIuY20sZD1iLmRpdj1hLmxpbmVEaXY7ZC5jb250ZW50RWRpdGFibGU9InRydWUiLHliKGQpLERnKGQsInBhc3RlIixmdW5jdGlvbihhKXt2YXIgYj1hLmNsaXBib2FyZERhdGEmJmEuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0L3BsYWluIik7YiYmKGEucHJldmVudERlZmF1bHQoKSxjLnJlcGxhY2VTZWxlY3Rpb24oYixudWxsLCJwYXN0ZSIpKX0pLERnKGQsImNvbXBvc2l0aW9uc3RhcnQiLGZ1bmN0aW9uKGEpe3ZhciBkPWEuZGF0YTtpZihiLmNvbXBvc2luZz17c2VsOmMuZG9jLnNlbCxkYXRhOmQsc3RhcnREYXRhOmR9LGQpe3ZhciBlPWMuZG9jLnNlbC5wcmltYXJ5KCksZj1jLmdldExpbmUoZS5oZWFkLmxpbmUpLGc9Zi5pbmRleE9mKGQsTWF0aC5tYXgoMCxlLmhlYWQuY2gtZC5sZW5ndGgpKTtnPi0xJiZnPD1lLmhlYWQuY2gmJihiLmNvbXBvc2luZy5zZWw9S2Iob2IoZS5oZWFkLmxpbmUsZyksb2IoZS5oZWFkLmxpbmUsZytkLmxlbmd0aCkpKX19KSxEZyhkLCJjb21wb3NpdGlvbnVwZGF0ZSIsZnVuY3Rpb24oYSl7Yi5jb21wb3NpbmcuZGF0YT1hLmRhdGF9KSxEZyhkLCJjb21wb3NpdGlvbmVuZCIsZnVuY3Rpb24oYSl7dmFyIGM9Yi5jb21wb3Npbmc7YyYmKGEuZGF0YT09Yy5zdGFydERhdGF8fC9cdTIwMGIvLnRlc3QoYS5kYXRhKXx8KGMuZGF0YT1hLmRhdGEpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmhhbmRsZWR8fGIuYXBwbHlDb21wb3NpdGlvbihjKSxiLmNvbXBvc2luZz09YyYmKGIuY29tcG9zaW5nPW51bGwpfSw1MCkpfSksRGcoZCwidG91Y2hzdGFydCIsZnVuY3Rpb24oKXtiLmZvcmNlQ29tcG9zaXRpb25FbmQoKX0pLERnKGQsImlucHV0IixmdW5jdGlvbigpe2IuY29tcG9zaW5nfHxiLnBvbGxDb250ZW50KCl8fGFkKGIuY20sZnVuY3Rpb24oKXtnZChjKX0pfSksRGcoZCwiY29weSIsZSksRGcoZCwiY3V0IixlKX0scHJlcGFyZVNlbGVjdGlvbjpmdW5jdGlvbigpe3ZhciBhPWNjKHRoaXMuY20sITEpO3JldHVybiBhLmZvY3VzPXRoaXMuY20uc3RhdGUuZm9jdXNlZCxhfSxzaG93U2VsZWN0aW9uOmZ1bmN0aW9uKGEpe2EmJnRoaXMuY20uZGlzcGxheS52aWV3Lmxlbmd0aCYmKGEuZm9jdXMmJnRoaXMuc2hvd1ByaW1hcnlTZWxlY3Rpb24oKSx0aGlzLnNob3dNdWx0aXBsZVNlbGVjdGlvbnMoYSkpfSxzaG93UHJpbWFyeVNlbGVjdGlvbjpmdW5jdGlvbigpe3ZhciBhPXdpbmRvdy5nZXRTZWxlY3Rpb24oKSxiPXRoaXMuY20uZG9jLnNlbC5wcmltYXJ5KCksYz1FYih0aGlzLmNtLGEuYW5jaG9yTm9kZSxhLmFuY2hvck9mZnNldCksZD1FYih0aGlzLmNtLGEuZm9jdXNOb2RlLGEuZm9jdXNPZmZzZXQpO2lmKCFjfHxjLmJhZHx8IWR8fGQuYmFkfHwwIT1wYihzYihjLGQpLGIuZnJvbSgpKXx8MCE9cGIocmIoYyxkKSxiLnRvKCkpKXt2YXIgZT1DYih0aGlzLmNtLGIuZnJvbSgpKSxmPUNiKHRoaXMuY20sYi50bygpKTtpZihlfHxmKXt2YXIgZz10aGlzLmNtLmRpc3BsYXkudmlldyxoPWEucmFuZ2VDb3VudCYmYS5nZXRSYW5nZUF0KDApO2lmKGUpe2lmKCFmKXt2YXIgaT1nW2cubGVuZ3RoLTFdLm1lYXN1cmUsaj1pLm1hcHM/aS5tYXBzW2kubWFwcy5sZW5ndGgtMV06aS5tYXA7Zj17bm9kZTpqW2oubGVuZ3RoLTFdLG9mZnNldDpqW2oubGVuZ3RoLTJdLWpbai5sZW5ndGgtM119fX1lbHNlIGU9e25vZGU6Z1swXS5tZWFzdXJlLm1hcFsyXSxvZmZzZXQ6MH07dHJ5e3ZhciBrPWtoKGUubm9kZSxlLm9mZnNldCxmLm9mZnNldCxmLm5vZGUpfWNhdGNoKGwpe31rJiYoYS5yZW1vdmVBbGxSYW5nZXMoKSxhLmFkZFJhbmdlKGspLGgmJm51bGw9PWEuYW5jaG9yTm9kZSYmYS5hZGRSYW5nZShoKSksdGhpcy5yZW1lbWJlclNlbGVjdGlvbigpfX19LHNob3dNdWx0aXBsZVNlbGVjdGlvbnM6ZnVuY3Rpb24oYSl7bWgodGhpcy5jbS5kaXNwbGF5LmN1cnNvckRpdixhLmN1cnNvcnMpLG1oKHRoaXMuY20uZGlzcGxheS5zZWxlY3Rpb25EaXYsYS5zZWxlY3Rpb24pfSxyZW1lbWJlclNlbGVjdGlvbjpmdW5jdGlvbigpe3ZhciBhPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTt0aGlzLmxhc3RBbmNob3JOb2RlPWEuYW5jaG9yTm9kZSx0aGlzLmxhc3RBbmNob3JPZmZzZXQ9YS5hbmNob3JPZmZzZXQsdGhpcy5sYXN0Rm9jdXNOb2RlPWEuZm9jdXNOb2RlLHRoaXMubGFzdEZvY3VzT2Zmc2V0PWEuZm9jdXNPZmZzZXR9LHNlbGVjdGlvbkluRWRpdG9yOmZ1bmN0aW9uKCl7dmFyIGE9d2luZG93LmdldFNlbGVjdGlvbigpO2lmKCFhLnJhbmdlQ291bnQpcmV0dXJuITE7dmFyIGI9YS5nZXRSYW5nZUF0KDApLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO3JldHVybiBuaCh0aGlzLmRpdixiKX0sZm9jdXM6ZnVuY3Rpb24oKXsibm9jdXJzb3IiIT10aGlzLmNtLm9wdGlvbnMucmVhZE9ubHkmJnRoaXMuZGl2LmZvY3VzKCl9LGJsdXI6ZnVuY3Rpb24oKXt0aGlzLmRpdi5ibHVyKCl9LGdldEZpZWxkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGl2fSxzdXBwb3J0c1RvdWNoOmZ1bmN0aW9uKCl7cmV0dXJuITB9LHJlY2VpdmVkRm9jdXM6ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7YS5jbS5zdGF0ZS5mb2N1c2VkJiYoYS5wb2xsU2VsZWN0aW9uKCksYS5wb2xsaW5nLnNldChhLmNtLm9wdGlvbnMucG9sbEludGVydmFsLGIpKX12YXIgYT10aGlzO3RoaXMuc2VsZWN0aW9uSW5FZGl0b3IoKT90aGlzLnBvbGxTZWxlY3Rpb24oKTphZCh0aGlzLmNtLGZ1bmN0aW9uKCl7YS5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPSEwfSksdGhpcy5wb2xsaW5nLnNldCh0aGlzLmNtLm9wdGlvbnMucG9sbEludGVydmFsLGIpfSxwb2xsU2VsZWN0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY29tcG9zaW5nKXt2YXIgYT13aW5kb3cuZ2V0U2VsZWN0aW9uKCksYj10aGlzLmNtO2lmKGEuYW5jaG9yTm9kZSE9dGhpcy5sYXN0QW5jaG9yTm9kZXx8YS5hbmNob3JPZmZzZXQhPXRoaXMubGFzdEFuY2hvck9mZnNldHx8YS5mb2N1c05vZGUhPXRoaXMubGFzdEZvY3VzTm9kZXx8YS5mb2N1c09mZnNldCE9dGhpcy5sYXN0Rm9jdXNPZmZzZXQpe3RoaXMucmVtZW1iZXJTZWxlY3Rpb24oKTt2YXIgYz1FYihiLGEuYW5jaG9yTm9kZSxhLmFuY2hvck9mZnNldCksZD1FYihiLGEuZm9jdXNOb2RlLGEuZm9jdXNPZmZzZXQpO2MmJmQmJmFkKGIsZnVuY3Rpb24oKXtYYihiLmRvYyxLYihjLGQpLFBnKSwoYy5iYWR8fGQuYmFkKSYmKGIuY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD0hMCl9KX19fSxwb2xsQ29udGVudDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY20sYj1hLmRpc3BsYXksYz1hLmRvYy5zZWwucHJpbWFyeSgpLGQ9Yy5mcm9tKCksZT1jLnRvKCk7aWYoZC5saW5lPGIudmlld0Zyb218fGUubGluZT5iLnZpZXdUby0xKXJldHVybiExO3ZhciBmO2lmKGQubGluZT09Yi52aWV3RnJvbXx8MD09KGY9amQoYSxkLmxpbmUpKSl2YXIgZz1lZyhiLnZpZXdbMF0ubGluZSksaD1iLnZpZXdbMF0ubm9kZTtlbHNlIHZhciBnPWVnKGIudmlld1tmXS5saW5lKSxoPWIudmlld1tmLTFdLm5vZGUubmV4dFNpYmxpbmc7dmFyIGk9amQoYSxlLmxpbmUpO2lmKGk9PWIudmlldy5sZW5ndGgtMSl2YXIgaj1iLnZpZXdUby0xLGs9Yi52aWV3W2ldLm5vZGU7ZWxzZSB2YXIgaj1lZyhiLnZpZXdbaSsxXS5saW5lKS0xLGs9Yi52aWV3W2krMV0ubm9kZS5wcmV2aW91c1NpYmxpbmc7Zm9yKHZhciBsPUNoKEdiKGEsaCxrLGcsaikpLG09YmcoYS5kb2Msb2IoZywwKSxvYihqLGFnKGEuZG9jLGopLnRleHQubGVuZ3RoKSk7bC5sZW5ndGg+MSYmbS5sZW5ndGg+MTspaWYoWGcobCk9PVhnKG0pKWwucG9wKCksbS5wb3AoKSxqLS07ZWxzZXtpZihsWzBdIT1tWzBdKWJyZWFrO2wuc2hpZnQoKSxtLnNoaWZ0KCksZysrfWZvcih2YXIgbj0wLG89MCxwPWxbMF0scT1tWzBdLHI9TWF0aC5taW4ocC5sZW5ndGgscS5sZW5ndGgpO3I+biYmcC5jaGFyQ29kZUF0KG4pPT1xLmNoYXJDb2RlQXQobik7KSsrbjtmb3IodmFyIHM9WGcobCksdD1YZyhtKSx1PU1hdGgubWluKHMubGVuZ3RoLSgxPT1sLmxlbmd0aD9uOjApLHQubGVuZ3RoLSgxPT1tLmxlbmd0aD9uOjApKTt1Pm8mJnMuY2hhckNvZGVBdChzLmxlbmd0aC1vLTEpPT10LmNoYXJDb2RlQXQodC5sZW5ndGgtby0xKTspKytvO2xbbC5sZW5ndGgtMV09cy5zbGljZSgwLHMubGVuZ3RoLW8pLGxbMF09bFswXS5zbGljZShuKTt2YXIgdj1vYihnLG4pLHc9b2IoaixtLmxlbmd0aD9YZyhtKS5sZW5ndGgtbzowKTtyZXR1cm4gbC5sZW5ndGg+MXx8bFswXXx8cGIodix3KT8oaGUoYS5kb2MsbCx2LHcsIitpbnB1dCIpLCEwKTp2b2lkIDB9LGVuc3VyZVBvbGxlZDpmdW5jdGlvbigpe3RoaXMuZm9yY2VDb21wb3NpdGlvbkVuZCgpfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuZm9yY2VDb21wb3NpdGlvbkVuZCgpfSxmb3JjZUNvbXBvc2l0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5jb21wb3NpbmcmJiF0aGlzLmNvbXBvc2luZy5oYW5kbGVkJiYodGhpcy5hcHBseUNvbXBvc2l0aW9uKHRoaXMuY29tcG9zaW5nKSx0aGlzLmNvbXBvc2luZy5oYW5kbGVkPSEwLHRoaXMuZGl2LmJsdXIoKSx0aGlzLmRpdi5mb2N1cygpKX0sYXBwbHlDb21wb3NpdGlvbjpmdW5jdGlvbihhKXthLmRhdGEmJmEuZGF0YSE9YS5zdGFydERhdGEmJmJkKHRoaXMuY20sd2IpKHRoaXMuY20sYS5kYXRhLDAsYS5zZWwpfSxzZXRVbmVkaXRhYmxlOmZ1bmN0aW9uKGEpe2Euc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCJmYWxzZSIpfSxvbktleVByZXNzOmZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKSxiZCh0aGlzLmNtLHdiKSh0aGlzLmNtLFN0cmluZy5mcm9tQ2hhckNvZGUobnVsbD09YS5jaGFyQ29kZT9hLmtleUNvZGU6YS5jaGFyQ29kZSksMCl9LG9uQ29udGV4dE1lbnU6X2cscmVzZXRQb3NpdGlvbjpfZyxuZWVkc0NvbnRlbnRBdHRyaWJ1dGU6ITB9LEJiLnByb3RvdHlwZSksdi5pbnB1dFN0eWxlcz17dGV4dGFyZWE6emIsY29udGVudGVkaXRhYmxlOkJifSxIYi5wcm90b3R5cGU9e3ByaW1hcnk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYW5nZXNbdGhpcy5wcmltSW5kZXhdfSxlcXVhbHM6ZnVuY3Rpb24oYSl7aWYoYT09dGhpcylyZXR1cm4hMDtpZihhLnByaW1JbmRleCE9dGhpcy5wcmltSW5kZXh8fGEucmFuZ2VzLmxlbmd0aCE9dGhpcy5yYW5nZXMubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgYj0wO2I8dGhpcy5yYW5nZXMubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5yYW5nZXNbYl0sZD1hLnJhbmdlc1tiXTtpZigwIT1wYihjLmFuY2hvcixkLmFuY2hvcil8fDAhPXBiKGMuaGVhZCxkLmhlYWQpKXJldHVybiExfXJldHVybiEwfSxkZWVwQ29weTpmdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxiPTA7Yjx0aGlzLnJhbmdlcy5sZW5ndGg7YisrKWFbYl09bmV3IEliKHFiKHRoaXMucmFuZ2VzW2JdLmFuY2hvcikscWIodGhpcy5yYW5nZXNbYl0uaGVhZCkpO3JldHVybiBuZXcgSGIoYSx0aGlzLnByaW1JbmRleCl9LHNvbWV0aGluZ1NlbGVjdGVkOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTx0aGlzLnJhbmdlcy5sZW5ndGg7YSsrKWlmKCF0aGlzLnJhbmdlc1thXS5lbXB0eSgpKXJldHVybiEwO3JldHVybiExfSxjb250YWluczpmdW5jdGlvbihhLGIpe2J8fChiPWEpO2Zvcih2YXIgYz0wO2M8dGhpcy5yYW5nZXMubGVuZ3RoO2MrKyl7dmFyIGQ9dGhpcy5yYW5nZXNbY107aWYocGIoYixkLmZyb20oKSk+PTAmJnBiKGEsZC50bygpKTw9MClyZXR1cm4gY31yZXR1cm4tMX19LEliLnByb3RvdHlwZT17ZnJvbTpmdW5jdGlvbigpe3JldHVybiBzYih0aGlzLmFuY2hvcix0aGlzLmhlYWQpfSx0bzpmdW5jdGlvbigpe3JldHVybiByYih0aGlzLmFuY2hvcix0aGlzLmhlYWQpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlYWQubGluZT09dGhpcy5hbmNob3IubGluZSYmdGhpcy5oZWFkLmNoPT10aGlzLmFuY2hvci5jaH19O3ZhciBPYyxzZCx0ZCx4Yz17bGVmdDowLHJpZ2h0OjAsdG9wOjAsYm90dG9tOjB9LFJjPW51bGwsU2M9MCx6ZD0wLEVkPTAsRmQ9bnVsbDtkP0ZkPS0uNTM6YT9GZD0xNTpoP0ZkPS0uNzpqJiYoRmQ9LTEvMyk7dmFyIEdkPWZ1bmN0aW9uKGEpe3ZhciBiPWEud2hlZWxEZWx0YVgsYz1hLndoZWVsRGVsdGFZO3JldHVybiBudWxsPT1iJiZhLmRldGFpbCYmYS5heGlzPT1hLkhPUklaT05UQUxfQVhJUyYmKGI9YS5kZXRhaWwpLG51bGw9PWMmJmEuZGV0YWlsJiZhLmF4aXM9PWEuVkVSVElDQUxfQVhJUz9jPWEuZGV0YWlsOm51bGw9PWMmJihjPWEud2hlZWxEZWx0YSkse3g6Yix5OmN9fTt2LndoZWVsRXZlbnRQaXhlbHM9ZnVuY3Rpb24oYSl7dmFyIGI9R2QoYSk7cmV0dXJuIGIueCo9RmQsYi55Kj1GZCxifTt2YXIgS2Q9bmV3IFNnLE9kPW51bGwsWGQ9di5jaGFuZ2VFbmQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEudGV4dD9vYihhLmZyb20ubGluZSthLnRleHQubGVuZ3RoLTEsWGcoYS50ZXh0KS5sZW5ndGgrKDE9PWEudGV4dC5sZW5ndGg/YS5mcm9tLmNoOjApKTphLnRvfTt2LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dixmb2N1czpmdW5jdGlvbigpe3dpbmRvdy5mb2N1cygpLHRoaXMuZGlzcGxheS5pbnB1dC5mb2N1cygpfSxzZXRPcHRpb246ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLm9wdGlvbnMsZD1jW2FdOyhjW2FdIT1ifHwibW9kZSI9PWEpJiYoY1thXT1iLHZlLmhhc093blByb3BlcnR5KGEpJiZiZCh0aGlzLHZlW2FdKSh0aGlzLGIsZCkpfSxnZXRPcHRpb246ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub3B0aW9uc1thXX0sZ2V0RG9jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9jfSxhZGRLZXlNYXA6ZnVuY3Rpb24oYSxiKXt0aGlzLnN0YXRlLmtleU1hcHNbYj8icHVzaCI6InVuc2hpZnQiXShMZShhKSl9LHJlbW92ZUtleU1hcDpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5zdGF0ZS5rZXlNYXBzLGM9MDtjPGIubGVuZ3RoOysrYylpZihiW2NdPT1hfHxiW2NdLm5hbWU9PWEpcmV0dXJuIGIuc3BsaWNlKGMsMSksITB9LGFkZE92ZXJsYXk6Y2QoZnVuY3Rpb24oYSxiKXt2YXIgYz1hLnRva2VuP2E6di5nZXRNb2RlKHRoaXMub3B0aW9ucyxhKTtpZihjLnN0YXJ0U3RhdGUpdGhyb3cgbmV3IEVycm9yKCJPdmVybGF5cyBtYXkgbm90IGJlIHN0YXRlZnVsLiIpO3RoaXMuc3RhdGUub3ZlcmxheXMucHVzaCh7bW9kZTpjLG1vZGVTcGVjOmEsb3BhcXVlOmImJmIub3BhcXVlfSksdGhpcy5zdGF0ZS5tb2RlR2VuKyssZ2QodGhpcyl9KSxyZW1vdmVPdmVybGF5OmNkKGZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLnN0YXRlLm92ZXJsYXlzLGM9MDtjPGIubGVuZ3RoOysrYyl7dmFyIGQ9YltjXS5tb2RlU3BlYztpZihkPT1hfHwic3RyaW5nIj09dHlwZW9mIGEmJmQubmFtZT09YSlyZXR1cm4gYi5zcGxpY2UoYywxKSx0aGlzLnN0YXRlLm1vZGVHZW4rKyxnZCh0aGlzKSx2b2lkIDB9fSksaW5kZW50TGluZTpjZChmdW5jdGlvbihhLGIsYyl7InN0cmluZyIhPXR5cGVvZiBiJiYibnVtYmVyIiE9dHlwZW9mIGImJihiPW51bGw9PWI/dGhpcy5vcHRpb25zLnNtYXJ0SW5kZW50PyJzbWFydCI6InByZXYiOmI/ImFkZCI6InN1YnRyYWN0IiksT2IodGhpcy5kb2MsYSkmJnBlKHRoaXMsYSxiLGMpfSksaW5kZW50U2VsZWN0aW9uOmNkKGZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLmRvYy5zZWwucmFuZ2VzLGM9LTEsZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgZT1iW2RdO2lmKGUuZW1wdHkoKSllLmhlYWQubGluZT5jJiYocGUodGhpcyxlLmhlYWQubGluZSxhLCEwKSxjPWUuaGVhZC5saW5lLGQ9PXRoaXMuZG9jLnNlbC5wcmltSW5kZXgmJm5lKHRoaXMpKTtlbHNle3ZhciBmPWUuZnJvbSgpLGc9ZS50bygpLGg9TWF0aC5tYXgoYyxmLmxpbmUpO2M9TWF0aC5taW4odGhpcy5sYXN0TGluZSgpLGcubGluZS0oZy5jaD8wOjEpKSsxO2Zvcih2YXIgaT1oO2M+aTsrK2kpcGUodGhpcyxpLGEpO3ZhciBqPXRoaXMuZG9jLnNlbC5yYW5nZXM7MD09Zi5jaCYmYi5sZW5ndGg9PWoubGVuZ3RoJiZqW2RdLmZyb20oKS5jaD4wJiZUYih0aGlzLmRvYyxkLG5ldyBJYihmLGpbZF0udG8oKSksUGcpfX19KSxnZXRUb2tlbkF0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIERmKHRoaXMsYSxiKX0sZ2V0TGluZVRva2VuczpmdW5jdGlvbihhLGIpe3JldHVybiBEZih0aGlzLG9iKGEpLGIsITApfSxnZXRUb2tlblR5cGVBdDpmdW5jdGlvbihhKXthPU1iKHRoaXMuZG9jLGEpO3ZhciBmLGI9R2YodGhpcyxhZyh0aGlzLmRvYyxhLmxpbmUpKSxjPTAsZD0oYi5sZW5ndGgtMSkvMixlPWEuY2g7aWYoMD09ZSlmPWJbMl07ZWxzZSBmb3IoOzspe3ZhciBnPWMrZD4+MTtpZigoZz9iWzIqZy0xXTowKT49ZSlkPWc7ZWxzZXtpZighKGJbMipnKzFdPGUpKXtmPWJbMipnKzJdO2JyZWFrfWM9ZysxfX12YXIgaD1mP2YuaW5kZXhPZigiY20tb3ZlcmxheSAiKTotMTtyZXR1cm4gMD5oP2Y6MD09aD9udWxsOmYuc2xpY2UoMCxoLTEpfSxnZXRNb2RlQXQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kb2MubW9kZTtyZXR1cm4gYi5pbm5lck1vZGU/di5pbm5lck1vZGUoYix0aGlzLmdldFRva2VuQXQoYSkuc3RhdGUpLm1vZGU6Yn0sZ2V0SGVscGVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZ2V0SGVscGVycyhhLGIpWzBdfSxnZXRIZWxwZXJzOmZ1bmN0aW9uKGEsYil7dmFyIGM9W107aWYoIUNlLmhhc093blByb3BlcnR5KGIpKXJldHVybiBDZTt2YXIgZD1DZVtiXSxlPXRoaXMuZ2V0TW9kZUF0KGEpO2lmKCJzdHJpbmciPT10eXBlb2YgZVtiXSlkW2VbYl1dJiZjLnB1c2goZFtlW2JdXSk7ZWxzZSBpZihlW2JdKWZvcih2YXIgZj0wO2Y8ZVtiXS5sZW5ndGg7ZisrKXt2YXIgZz1kW2VbYl1bZl1dO2cmJmMucHVzaChnKX1lbHNlIGUuaGVscGVyVHlwZSYmZFtlLmhlbHBlclR5cGVdP2MucHVzaChkW2UuaGVscGVyVHlwZV0pOmRbZS5uYW1lXSYmYy5wdXNoKGRbZS5uYW1lXSk7Zm9yKHZhciBmPTA7ZjxkLl9nbG9iYWwubGVuZ3RoO2YrKyl7dmFyIGg9ZC5fZ2xvYmFsW2ZdO2gucHJlZChlLHRoaXMpJiYtMT09WmcoYyxoLnZhbCkmJmMucHVzaChoLnZhbCl9cmV0dXJuIGN9LGdldFN0YXRlQWZ0ZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmRvYztyZXR1cm4gYT1MYihjLG51bGw9PWE/Yy5maXJzdCtjLnNpemUtMTphKSxqYyh0aGlzLGErMSxiKX0sY3Vyc29yQ29vcmRzOmZ1bmN0aW9uKGEsYil7dmFyIGMsZD10aGlzLmRvYy5zZWwucHJpbWFyeSgpO3JldHVybiBjPW51bGw9PWE/ZC5oZWFkOiJvYmplY3QiPT10eXBlb2YgYT9NYih0aGlzLmRvYyxhKTphP2QuZnJvbSgpOmQudG8oKSxKYyh0aGlzLGMsYnx8InBhZ2UiKX0sY2hhckNvb3JkczpmdW5jdGlvbihhLGIpe3JldHVybiBJYyh0aGlzLE1iKHRoaXMuZG9jLGEpLGJ8fCJwYWdlIil9LGNvb3Jkc0NoYXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1IYyh0aGlzLGEsYnx8InBhZ2UiKSxNYyh0aGlzLGEubGVmdCxhLnRvcCl9LGxpbmVBdEhlaWdodDpmdW5jdGlvbihhLGIpe3JldHVybiBhPUhjKHRoaXMse3RvcDphLGxlZnQ6MH0sYnx8InBhZ2UiKS50b3AsZmcodGhpcy5kb2MsYSt0aGlzLmRpc3BsYXkudmlld09mZnNldCl9LGhlaWdodEF0TGluZTpmdW5jdGlvbihhLGIpe3ZhciBjPSExLGQ9dGhpcy5kb2MuZmlyc3QrdGhpcy5kb2Muc2l6ZS0xO2E8dGhpcy5kb2MuZmlyc3Q/YT10aGlzLmRvYy5maXJzdDphPmQmJihhPWQsYz0hMCk7dmFyIGU9YWcodGhpcy5kb2MsYSk7cmV0dXJuIEdjKHRoaXMsZSx7dG9wOjAsbGVmdDowfSxifHwicGFnZSIpLnRvcCsoYz90aGlzLmRvYy5oZWlnaHQtZ2coZSk6MCl9LGRlZmF1bHRUZXh0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIFBjKHRoaXMuZGlzcGxheSl9LGRlZmF1bHRDaGFyV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gUWModGhpcy5kaXNwbGF5KX0sc2V0R3V0dGVyTWFya2VyOmNkKGZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gcWUodGhpcy5kb2MsYSwiZ3V0dGVyIixmdW5jdGlvbihhKXt2YXIgZD1hLmd1dHRlck1hcmtlcnN8fChhLmd1dHRlck1hcmtlcnM9e30pO3JldHVybiBkW2JdPWMsIWMmJmdoKGQpJiYoYS5ndXR0ZXJNYXJrZXJzPW51bGwpLCEwfSl9KSxjbGVhckd1dHRlcjpjZChmdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi5kb2MsZD1jLmZpcnN0O2MuaXRlcihmdW5jdGlvbihjKXtjLmd1dHRlck1hcmtlcnMmJmMuZ3V0dGVyTWFya2Vyc1thXSYmKGMuZ3V0dGVyTWFya2Vyc1thXT1udWxsLGhkKGIsZCwiZ3V0dGVyIiksZ2goYy5ndXR0ZXJNYXJrZXJzKSYmKGMuZ3V0dGVyTWFya2Vycz1udWxsKSksKytkfSl9KSxhZGRMaW5lV2lkZ2V0OmNkKGZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gd2YodGhpcyxhLGIsYyl9KSxyZW1vdmVMaW5lV2lkZ2V0OmZ1bmN0aW9uKGEpe2EuY2xlYXIoKX0sbGluZUluZm86ZnVuY3Rpb24oYSl7aWYoIm51bWJlciI9PXR5cGVvZiBhKXtpZighT2IodGhpcy5kb2MsYSkpcmV0dXJuIG51bGw7dmFyIGI9YTtpZihhPWFnKHRoaXMuZG9jLGEpLCFhKXJldHVybiBudWxsfWVsc2V7dmFyIGI9ZWcoYSk7aWYobnVsbD09YilyZXR1cm4gbnVsbH1yZXR1cm57bGluZTpiLGhhbmRsZTphLHRleHQ6YS50ZXh0LGd1dHRlck1hcmtlcnM6YS5ndXR0ZXJNYXJrZXJzLHRleHRDbGFzczphLnRleHRDbGFzcyxiZ0NsYXNzOmEuYmdDbGFzcyx3cmFwQ2xhc3M6YS53cmFwQ2xhc3Msd2lkZ2V0czphLndpZGdldHN9fSxnZXRWaWV3cG9ydDpmdW5jdGlvbigpe3JldHVybntmcm9tOnRoaXMuZGlzcGxheS52aWV3RnJvbSx0bzp0aGlzLmRpc3BsYXkudmlld1RvfX0sYWRkV2lkZ2V0OmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9dGhpcy5kaXNwbGF5O2E9SmModGhpcyxNYih0aGlzLmRvYyxhKSk7dmFyIGc9YS5ib3R0b20saD1hLmxlZnQ7aWYoYi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGIuc2V0QXR0cmlidXRlKCJjbS1pZ25vcmUtZXZlbnRzIiwidHJ1ZSIpLHRoaXMuZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKGIpLGYuc2l6ZXIuYXBwZW5kQ2hpbGQoYiksIm92ZXIiPT1kKWc9YS50b3A7ZWxzZSBpZigiYWJvdmUiPT1kfHwibmVhciI9PWQpe3ZhciBpPU1hdGgubWF4KGYud3JhcHBlci5jbGllbnRIZWlnaHQsdGhpcy5kb2MuaGVpZ2h0KSxqPU1hdGgubWF4KGYuc2l6ZXIuY2xpZW50V2lkdGgsZi5saW5lU3BhY2UuY2xpZW50V2lkdGgpOygiYWJvdmUiPT1kfHxhLmJvdHRvbStiLm9mZnNldEhlaWdodD5pKSYmYS50b3A+Yi5vZmZzZXRIZWlnaHQ/Zz1hLnRvcC1iLm9mZnNldEhlaWdodDphLmJvdHRvbStiLm9mZnNldEhlaWdodDw9aSYmKGc9YS5ib3R0b20pLGgrYi5vZmZzZXRXaWR0aD5qJiYoaD1qLWIub2Zmc2V0V2lkdGgpfWIuc3R5bGUudG9wPWcrInB4IixiLnN0eWxlLmxlZnQ9Yi5zdHlsZS5yaWdodD0iIiwicmlnaHQiPT1lPyhoPWYuc2l6ZXIuY2xpZW50V2lkdGgtYi5vZmZzZXRXaWR0aCxiLnN0eWxlLnJpZ2h0PSIwcHgiKTooImxlZnQiPT1lP2g9MDoibWlkZGxlIj09ZSYmKGg9KGYuc2l6ZXIuY2xpZW50V2lkdGgtYi5vZmZzZXRXaWR0aCkvMiksYi5zdHlsZS5sZWZ0PWgrInB4IiksYyYma2UodGhpcyxoLGcsaCtiLm9mZnNldFdpZHRoLGcrYi5vZmZzZXRIZWlnaHQpfSx0cmlnZ2VyT25LZXlEb3duOmNkKFBkKSx0cmlnZ2VyT25LZXlQcmVzczpjZChTZCksdHJpZ2dlck9uS2V5VXA6UmQsZXhlY0NvbW1hbmQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEZlLmhhc093blByb3BlcnR5KGEpP0ZlW2FdKHRoaXMpOnZvaWQgMH0sZmluZFBvc0g6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9MTswPmImJihlPS0xLGI9LWIpO2Zvcih2YXIgZj0wLGc9TWIodGhpcy5kb2MsYSk7Yj5mJiYoZz1zZSh0aGlzLmRvYyxnLGUsYyxkKSwhZy5oaXRTaWRlKTsrK2YpO3JldHVybiBnfSxtb3ZlSDpjZChmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Yy5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24oZCl7cmV0dXJuIGMuZGlzcGxheS5zaGlmdHx8Yy5kb2MuZXh0ZW5kfHxkLmVtcHR5KCk/c2UoYy5kb2MsZC5oZWFkLGEsYixjLm9wdGlvbnMucnRsTW92ZVZpc3VhbGx5KTowPmE/ZC5mcm9tKCk6ZC50bygpfSxSZyl9KSxkZWxldGVIOmNkKGZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5kb2Muc2VsLGQ9dGhpcy5kb2M7Yy5zb21ldGhpbmdTZWxlY3RlZCgpP2QucmVwbGFjZVNlbGVjdGlvbigiIixudWxsLCIrZGVsZXRlIik6cmUodGhpcyxmdW5jdGlvbihjKXt2YXIgZT1zZShkLGMuaGVhZCxhLGIsITEpO3JldHVybiAwPmE/e2Zyb206ZSx0bzpjLmhlYWR9Ontmcm9tOmMuaGVhZCx0bzplfX0pfSksZmluZFBvc1Y6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9MSxmPWQ7MD5iJiYoZT0tMSxiPS1iKTtmb3IodmFyIGc9MCxoPU1iKHRoaXMuZG9jLGEpO2I+ZzsrK2cpe3ZhciBpPUpjKHRoaXMsaCwiZGl2Iik7aWYobnVsbD09Zj9mPWkubGVmdDppLmxlZnQ9ZixoPXRlKHRoaXMsaSxlLGMpLGguaGl0U2lkZSlicmVha31yZXR1cm4gaH0sbW92ZVY6Y2QoZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLGQ9dGhpcy5kb2MsZT1bXSxmPSFjLmRpc3BsYXkuc2hpZnQmJiFkLmV4dGVuZCYmZC5zZWwuc29tZXRoaW5nU2VsZWN0ZWQoKTtpZihkLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihnKXtpZihmKXJldHVybiAwPmE/Zy5mcm9tKCk6Zy50bygpO3ZhciBoPUpjKGMsZy5oZWFkLCJkaXYiKTtudWxsIT1nLmdvYWxDb2x1bW4mJihoLmxlZnQ9Zy5nb2FsQ29sdW1uKSxlLnB1c2goaC5sZWZ0KTt2YXIgaT10ZShjLGgsYSxiKTtyZXR1cm4icGFnZSI9PWImJmc9PWQuc2VsLnByaW1hcnkoKSYmbWUoYyxudWxsLEljKGMsaSwiZGl2IikudG9wLWgudG9wKSxpfSxSZyksZS5sZW5ndGgpZm9yKHZhciBnPTA7ZzxkLnNlbC5yYW5nZXMubGVuZ3RoO2crKylkLnNlbC5yYW5nZXNbZ10uZ29hbENvbHVtbj1lW2ddfSksZmluZFdvcmRBdDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmRvYyxjPWFnKGIsYS5saW5lKS50ZXh0LGQ9YS5jaCxlPWEuY2g7aWYoYyl7dmFyIGY9dGhpcy5nZXRIZWxwZXIoYSwid29yZENoYXJzIik7KGEueFJlbDwwfHxlPT1jLmxlbmd0aCkmJmQ/LS1kOisrZTtmb3IodmFyIGc9Yy5jaGFyQXQoZCksaD1maChnLGYpP2Z1bmN0aW9uKGEpe3JldHVybiBmaChhLGYpfTovXHMvLnRlc3QoZyk/ZnVuY3Rpb24oYSl7cmV0dXJuL1xzLy50ZXN0KGEpfTpmdW5jdGlvbihhKXtyZXR1cm4hL1xzLy50ZXN0KGEpJiYhZmgoYSl9O2Q+MCYmaChjLmNoYXJBdChkLTEpKTspLS1kO2Zvcig7ZTxjLmxlbmd0aCYmaChjLmNoYXJBdChlKSk7KSsrZX1yZXR1cm4gbmV3IEliKG9iKGEubGluZSxkKSxvYihhLmxpbmUsZSkpfSx0b2dnbGVPdmVyd3JpdGU6ZnVuY3Rpb24oYSl7KG51bGw9PWF8fGEhPXRoaXMuc3RhdGUub3ZlcndyaXRlKSYmKCh0aGlzLnN0YXRlLm92ZXJ3cml0ZT0hdGhpcy5zdGF0ZS5vdmVyd3JpdGUpP3JoKHRoaXMuZGlzcGxheS5jdXJzb3JEaXYsIkNvZGVNaXJyb3Itb3ZlcndyaXRlIik6cWgodGhpcy5kaXNwbGF5LmN1cnNvckRpdiwiQ29kZU1pcnJvci1vdmVyd3JpdGUiKSxGZyh0aGlzLCJvdmVyd3JpdGVUb2dnbGUiLHRoaXMsdGhpcy5zdGF0ZS5vdmVyd3JpdGUpKX0saGFzRm9jdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0LmdldEZpZWxkKCk9PW9oKCl9LHNjcm9sbFRvOmNkKGZ1bmN0aW9uKGEsYil7KG51bGwhPWF8fG51bGwhPWIpJiZvZSh0aGlzKSxudWxsIT1hJiYodGhpcy5jdXJPcC5zY3JvbGxMZWZ0PWEpLG51bGwhPWImJih0aGlzLmN1ck9wLnNjcm9sbFRvcD1iKX0pLGdldFNjcm9sbEluZm86ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRpc3BsYXkuc2Nyb2xsZXI7cmV0dXJue2xlZnQ6YS5zY3JvbGxMZWZ0LHRvcDphLnNjcm9sbFRvcCxoZWlnaHQ6YS5zY3JvbGxIZWlnaHQtbmModGhpcyktdGhpcy5kaXNwbGF5LmJhckhlaWdodCx3aWR0aDphLnNjcm9sbFdpZHRoLW5jKHRoaXMpLXRoaXMuZGlzcGxheS5iYXJXaWR0aCxjbGllbnRIZWlnaHQ6cGModGhpcyksY2xpZW50V2lkdGg6b2ModGhpcyl9fSxzY3JvbGxJbnRvVmlldzpjZChmdW5jdGlvbihhLGIpe2lmKG51bGw9PWE/KGE9e2Zyb206dGhpcy5kb2Muc2VsLnByaW1hcnkoKS5oZWFkLHRvOm51bGx9LG51bGw9PWImJihiPXRoaXMub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW4pKToibnVtYmVyIj09dHlwZW9mIGE/YT17ZnJvbTpvYihhLDApLHRvOm51bGx9Om51bGw9PWEuZnJvbSYmKGE9e2Zyb206YSx0bzpudWxsfSksYS50b3x8KGEudG89YS5mcm9tKSxhLm1hcmdpbj1ifHwwLG51bGwhPWEuZnJvbS5saW5lKW9lKHRoaXMpLHRoaXMuY3VyT3Auc2Nyb2xsVG9Qb3M9YTtlbHNle3ZhciBjPWxlKHRoaXMsTWF0aC5taW4oYS5mcm9tLmxlZnQsYS50by5sZWZ0KSxNYXRoLm1pbihhLmZyb20udG9wLGEudG8udG9wKS1hLm1hcmdpbixNYXRoLm1heChhLmZyb20ucmlnaHQsYS50by5yaWdodCksTWF0aC5tYXgoYS5mcm9tLmJvdHRvbSxhLnRvLmJvdHRvbSkrYS5tYXJnaW4pO3RoaXMuc2Nyb2xsVG8oYy5zY3JvbGxMZWZ0LGMuc2Nyb2xsVG9wKX19KSxzZXRTaXplOmNkKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gZChhKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGF8fC9eXGQrJC8udGVzdChTdHJpbmcoYSkpP2ErInB4IjphfXZhciBjPXRoaXM7bnVsbCE9YSYmKGMuZGlzcGxheS53cmFwcGVyLnN0eWxlLndpZHRoPWQoYSkpLG51bGwhPWImJihjLmRpc3BsYXkud3JhcHBlci5zdHlsZS5oZWlnaHQ9ZChiKSksYy5vcHRpb25zLmxpbmVXcmFwcGluZyYmQ2ModGhpcyk7dmFyIGU9Yy5kaXNwbGF5LnZpZXdGcm9tO2MuZG9jLml0ZXIoZSxjLmRpc3BsYXkudmlld1RvLGZ1bmN0aW9uKGEpe2lmKGEud2lkZ2V0cylmb3IodmFyIGI9MDtiPGEud2lkZ2V0cy5sZW5ndGg7YisrKWlmKGEud2lkZ2V0c1tiXS5ub0hTY3JvbGwpe2hkKGMsZSwid2lkZ2V0Iik7YnJlYWt9KytlfSksYy5jdXJPcC5mb3JjZVVwZGF0ZT0hMCxGZyhjLCJyZWZyZXNoIix0aGlzKX0pLG9wZXJhdGlvbjpmdW5jdGlvbihhKXtyZXR1cm4gYWQodGhpcyxhKX0scmVmcmVzaDpjZChmdW5jdGlvbigpe3ZhciBhPXRoaXMuZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0O2dkKHRoaXMpLHRoaXMuY3VyT3AuZm9yY2VVcGRhdGU9ITAsRGModGhpcyksdGhpcy5zY3JvbGxUbyh0aGlzLmRvYy5zY3JvbGxMZWZ0LHRoaXMuZG9jLnNjcm9sbFRvcCksRih0aGlzKSwobnVsbD09YXx8TWF0aC5hYnMoYS1QYyh0aGlzLmRpc3BsYXkpKT4uNSkmJkIodGhpcyksRmcodGhpcywicmVmcmVzaCIsdGhpcyl9KSxzd2FwRG9jOmNkKGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZG9jO3JldHVybiBiLmNtPW51bGwsX2YodGhpcyxhKSxEYyh0aGlzKSx0aGlzLmRpc3BsYXkuaW5wdXQucmVzZXQoKSx0aGlzLnNjcm9sbFRvKGEuc2Nyb2xsTGVmdCxhLnNjcm9sbFRvcCksdGhpcy5jdXJPcC5mb3JjZVNjcm9sbD0hMCxIZyh0aGlzLCJzd2FwRG9jIix0aGlzLGIpLGJ9KSxnZXRJbnB1dEZpZWxkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1dC5nZXRGaWVsZCgpfSxnZXRXcmFwcGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkud3JhcHBlcn0sZ2V0U2Nyb2xsZXJFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5zY3JvbGxlcn0sZ2V0R3V0dGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuZ3V0dGVyc319LE1nKHYpO3ZhciB1ZT12LmRlZmF1bHRzPXt9LHZlPXYub3B0aW9uSGFuZGxlcnM9e30seGU9di5Jbml0PXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDb2RlTWlycm9yLkluaXQifX07d2UoInZhbHVlIiwiIixmdW5jdGlvbihhLGIpe2Euc2V0VmFsdWUoYil9LCEwKSx3ZSgibW9kZSIsbnVsbCxmdW5jdGlvbihhLGIpe2EuZG9jLm1vZGVPcHRpb249Yix4KGEpfSwhMCksd2UoImluZGVudFVuaXQiLDIseCwhMCksd2UoImluZGVudFdpdGhUYWJzIiwhMSksd2UoInNtYXJ0SW5kZW50IiwhMCksd2UoInRhYlNpemUiLDQsZnVuY3Rpb24oYSl7eShhKSxEYyhhKSxnZChhKX0sITApLHdlKCJzcGVjaWFsQ2hhcnMiLC9bXHRcdTAwMDAtXHUwMDE5XHUwMGFkXHUyMDBiLVx1MjAwZlx1MjAyOFx1MjAyOVx1ZmVmZl0vZyxmdW5jdGlvbihhLGIpe2Eub3B0aW9ucy5zcGVjaWFsQ2hhcnM9bmV3IFJlZ0V4cChiLnNvdXJjZSsoYi50ZXN0KCIJIik/IiI6InwJIiksImciKSxhLnJlZnJlc2goKX0sITApLHdlKCJzcGVjaWFsQ2hhclBsYWNlaG9sZGVyIixNZixmdW5jdGlvbihhKXthLnJlZnJlc2goKX0sITApLHdlKCJlbGVjdHJpY0NoYXJzIiwhMCksd2UoImlucHV0U3R5bGUiLG4/ImNvbnRlbnRlZGl0YWJsZSI6InRleHRhcmVhIixmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiaW5wdXRTdHlsZSBjYW4gbm90ICh5ZXQpIGJlIGNoYW5nZWQgaW4gYSBydW5uaW5nIGVkaXRvciIpfSwhMCksd2UoInJ0bE1vdmVWaXN1YWxseSIsIXApLHdlKCJ3aG9sZUxpbmVVcGRhdGVCZWZvcmUiLCEwKSx3ZSgidGhlbWUiLCJkZWZhdWx0IixmdW5jdGlvbihhKXtDKGEpLEQoYSl9LCEwKSx3ZSgia2V5TWFwIiwiZGVmYXVsdCIsZnVuY3Rpb24oYSxiLGMpe3ZhciBkPUxlKGIpLGU9YyE9di5Jbml0JiZMZShjKTtlJiZlLmRldGFjaCYmZS5kZXRhY2goYSxkKSxkLmF0dGFjaCYmZC5hdHRhY2goYSxlfHxudWxsKX0pLHdlKCJleHRyYUtleXMiLG51bGwpLHdlKCJsaW5lV3JhcHBpbmciLCExLHosITApLHdlKCJndXR0ZXJzIixbXSxmdW5jdGlvbihhKXtJKGEub3B0aW9ucyksRChhKX0sITApLHdlKCJmaXhlZEd1dHRlciIsITAsZnVuY3Rpb24oYSxiKXthLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5sZWZ0PWI/VChhLmRpc3BsYXkpKyJweCI6IjAiLGEucmVmcmVzaCgpfSwhMCksd2UoImNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyIiwhMSxmdW5jdGlvbihhKXtOKGEpfSwhMCksd2UoInNjcm9sbGJhclN0eWxlIiwibmF0aXZlIixmdW5jdGlvbihhKXtNKGEpLE4oYSksYS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKGEuZG9jLnNjcm9sbFRvcCksYS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsTGVmdChhLmRvYy5zY3JvbGxMZWZ0KX0sITApLHdlKCJsaW5lTnVtYmVycyIsITEsZnVuY3Rpb24oYSl7SShhLm9wdGlvbnMpLEQoYSl9LCEwKSx3ZSgiZmlyc3RMaW5lTnVtYmVyIiwxLEQsITApLHdlKCJsaW5lTnVtYmVyRm9ybWF0dGVyIixmdW5jdGlvbihhKXtyZXR1cm4gYX0sRCwhMCksd2UoInNob3dDdXJzb3JXaGVuU2VsZWN0aW5nIiwhMSxiYywhMCksd2UoInJlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudSIsITApLHdlKCJyZWFkT25seSIsITEsZnVuY3Rpb24oYSxiKXsibm9jdXJzb3IiPT1iPyhVZChhKSxhLmRpc3BsYXkuaW5wdXQuYmx1cigpLGEuZGlzcGxheS5kaXNhYmxlZD0hMCk6KGEuZGlzcGxheS5kaXNhYmxlZD0hMSxifHxhLmRpc3BsYXkuaW5wdXQucmVzZXQoKSl9KSx3ZSgiZGlzYWJsZUlucHV0IiwhMSxmdW5jdGlvbihhLGIpe2J8fGEuZGlzcGxheS5pbnB1dC5yZXNldCgpfSwhMCksd2UoImRyYWdEcm9wIiwhMCksd2UoImN1cnNvckJsaW5rUmF0ZSIsNTMwKSx3ZSgiY3Vyc29yU2Nyb2xsTWFyZ2luIiwwKSx3ZSgiY3Vyc29ySGVpZ2h0IiwxLGJjLCEwKSx3ZSgic2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSIsITAsYmMsITApLHdlKCJ3b3JrVGltZSIsMTAwKSx3ZSgid29ya0RlbGF5IiwxMDApLHdlKCJmbGF0dGVuU3BhbnMiLCEwLHksITApLHdlKCJhZGRNb2RlQ2xhc3MiLCExLHksITApLHdlKCJwb2xsSW50ZXJ2YWwiLDEwMCksd2UoInVuZG9EZXB0aCIsMjAwLGZ1bmN0aW9uKGEsYil7YS5kb2MuaGlzdG9yeS51bmRvRGVwdGg9Yn0pLHdlKCJoaXN0b3J5RXZlbnREZWxheSIsMTI1MCksd2UoInZpZXdwb3J0TWFyZ2luIiwxMCxmdW5jdGlvbihhKXthLnJlZnJlc2goKX0sITApLHdlKCJtYXhIaWdobGlnaHRMZW5ndGgiLDFlNCx5LCEwKSx3ZSgibW92ZUlucHV0V2l0aEN1cnNvciIsITAsZnVuY3Rpb24oYSxiKXtifHxhLmRpc3BsYXkuaW5wdXQucmVzZXRQb3NpdGlvbigpfSksd2UoInRhYmluZGV4IixudWxsLGZ1bmN0aW9uKGEsYil7YS5kaXNwbGF5LmlucHV0LmdldEZpZWxkKCkudGFiSW5kZXg9Ynx8IiJ9KSx3ZSgiYXV0b2ZvY3VzIixudWxsKTt2YXIgeWU9di5tb2Rlcz17fSx6ZT12Lm1pbWVNb2Rlcz17fTt2LmRlZmluZU1vZGU9ZnVuY3Rpb24oYSxiKXt2LmRlZmF1bHRzLm1vZGV8fCJudWxsIj09YXx8KHYuZGVmYXVsdHMubW9kZT1hKSxhcmd1bWVudHMubGVuZ3RoPjImJihiLmRlcGVuZGVuY2llcz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLHllW2FdPWJ9LHYuZGVmaW5lTUlNRT1mdW5jdGlvbihhLGIpe3plW2FdPWJ9LHYucmVzb2x2ZU1vZGU9ZnVuY3Rpb24oYSl7aWYoInN0cmluZyI9PXR5cGVvZiBhJiZ6ZS5oYXNPd25Qcm9wZXJ0eShhKSlhPXplW2FdO2Vsc2UgaWYoYSYmInN0cmluZyI9PXR5cGVvZiBhLm5hbWUmJnplLmhhc093blByb3BlcnR5KGEubmFtZSkpe3ZhciBiPXplW2EubmFtZV07InN0cmluZyI9PXR5cGVvZiBiJiYoYj17bmFtZTpifSksYT1haChiLGEpLGEubmFtZT1iLm5hbWV9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGEmJi9eW1x3XC1dK1wvW1x3XC1dK1wreG1sJC8udGVzdChhKSlyZXR1cm4gdi5yZXNvbHZlTW9kZSgiYXBwbGljYXRpb24veG1sIik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhP3tuYW1lOmF9OmF8fHtuYW1lOiJudWxsIn19LHYuZ2V0TW9kZT1mdW5jdGlvbihhLGIpe3ZhciBiPXYucmVzb2x2ZU1vZGUoYiksYz15ZVtiLm5hbWVdO2lmKCFjKXJldHVybiB2LmdldE1vZGUoYSwidGV4dC9wbGFpbiIpO3ZhciBkPWMoYSxiKTtpZihBZS5oYXNPd25Qcm9wZXJ0eShiLm5hbWUpKXt2YXIgZT1BZVtiLm5hbWVdO2Zvcih2YXIgZiBpbiBlKWUuaGFzT3duUHJvcGVydHkoZikmJihkLmhhc093blByb3BlcnR5KGYpJiYoZFsiXyIrZl09ZFtmXSksZFtmXT1lW2ZdKX1pZihkLm5hbWU9Yi5uYW1lLGIuaGVscGVyVHlwZSYmKGQuaGVscGVyVHlwZT1iLmhlbHBlclR5cGUpLGIubW9kZVByb3BzKWZvcih2YXIgZiBpbiBiLm1vZGVQcm9wcylkW2ZdPWIubW9kZVByb3BzW2ZdO3JldHVybiBkfSx2LmRlZmluZU1vZGUoIm51bGwiLGZ1bmN0aW9uKCl7cmV0dXJue3Rva2VuOmZ1bmN0aW9uKGEpe2Euc2tpcFRvRW5kKCl9fX0pLHYuZGVmaW5lTUlNRSgidGV4dC9wbGFpbiIsIm51bGwiKTt2YXIgQWU9di5tb2RlRXh0ZW5zaW9ucz17fTt2LmV4dGVuZE1vZGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1BZS5oYXNPd25Qcm9wZXJ0eShhKT9BZVthXTpBZVthXT17fTtiaChiLGMpfSx2LmRlZmluZUV4dGVuc2lvbj1mdW5jdGlvbihhLGIpe3YucHJvdG90eXBlW2FdPWJ9LHYuZGVmaW5lRG9jRXh0ZW5zaW9uPWZ1bmN0aW9uKGEsYil7WGYucHJvdG90eXBlW2FdPWJ9LHYuZGVmaW5lT3B0aW9uPXdlO3ZhciBCZT1bXTt2LmRlZmluZUluaXRIb29rPWZ1bmN0aW9uKGEpe0JlLnB1c2goYSl9O3ZhciBDZT12LmhlbHBlcnM9e307di5yZWdpc3RlckhlbHBlcj1mdW5jdGlvbihhLGIsYyl7Q2UuaGFzT3duUHJvcGVydHkoYSl8fChDZVthXT12W2FdPXtfZ2xvYmFsOltdfSksQ2VbYV1bYl09Y30sdi5yZWdpc3Rlckdsb2JhbEhlbHBlcj1mdW5jdGlvbihhLGIsYyxkKXt2LnJlZ2lzdGVySGVscGVyKGEsYixkKSxDZVthXS5fZ2xvYmFsLnB1c2goe3ByZWQ6Yyx2YWw6ZH0pfTt2YXIgRGU9di5jb3B5U3RhdGU9ZnVuY3Rpb24oYSxiKXtpZihiPT09ITApcmV0dXJuIGI7aWYoYS5jb3B5U3RhdGUpcmV0dXJuIGEuY29weVN0YXRlKGIpO3ZhciBjPXt9O2Zvcih2YXIgZCBpbiBiKXt2YXIgZT1iW2RdO2UgaW5zdGFuY2VvZiBBcnJheSYmKGU9ZS5jb25jYXQoW10pKSxjW2RdPWV9cmV0dXJuIGN9LEVlPXYuc3RhcnRTdGF0ZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEuc3RhcnRTdGF0ZT9hLnN0YXJ0U3RhdGUoYixjKTohMH07di5pbm5lck1vZGU9ZnVuY3Rpb24oYSxiKXtmb3IoO2EuaW5uZXJNb2RlOyl7dmFyIGM9YS5pbm5lck1vZGUoYik7aWYoIWN8fGMubW9kZT09YSlicmVhaztiPWMuc3RhdGUsYT1jLm1vZGV9cmV0dXJuIGN8fHttb2RlOmEsc3RhdGU6Yn19O3ZhciBGZT12LmNvbW1hbmRzPXtzZWxlY3RBbGw6ZnVuY3Rpb24oYSl7YS5zZXRTZWxlY3Rpb24ob2IoYS5maXJzdExpbmUoKSwwKSxvYihhLmxhc3RMaW5lKCkpLFBnKX0sc2luZ2xlU2VsZWN0aW9uOmZ1bmN0aW9uKGEpe2Euc2V0U2VsZWN0aW9uKGEuZ2V0Q3Vyc29yKCJhbmNob3IiKSxhLmdldEN1cnNvcigiaGVhZCIpLFBnKX0sa2lsbExpbmU6ZnVuY3Rpb24oYSl7cmUoYSxmdW5jdGlvbihiKXtpZihiLmVtcHR5KCkpe3ZhciBjPWFnKGEuZG9jLGIuaGVhZC5saW5lKS50ZXh0Lmxlbmd0aDtyZXR1cm4gYi5oZWFkLmNoPT1jJiZiLmhlYWQubGluZTxhLmxhc3RMaW5lKCk/e2Zyb206Yi5oZWFkLHRvOm9iKGIuaGVhZC5saW5lKzEsMCl9Ontmcm9tOmIuaGVhZCx0bzpvYihiLmhlYWQubGluZSxjKX19cmV0dXJue2Zyb206Yi5mcm9tKCksdG86Yi50bygpfX0pfSxkZWxldGVMaW5lOmZ1bmN0aW9uKGEpe3JlKGEsZnVuY3Rpb24oYil7cmV0dXJue2Zyb206b2IoYi5mcm9tKCkubGluZSwwKSx0bzpNYihhLmRvYyxvYihiLnRvKCkubGluZSsxLDApKX19KX0sZGVsTGluZUxlZnQ6ZnVuY3Rpb24oYSl7cmUoYSxmdW5jdGlvbihhKXtyZXR1cm57ZnJvbTpvYihhLmZyb20oKS5saW5lLDApLHRvOmEuZnJvbSgpfX0pfSxkZWxXcmFwcGVkTGluZUxlZnQ6ZnVuY3Rpb24oYSl7cmUoYSxmdW5jdGlvbihiKXt2YXIgYz1hLmNoYXJDb29yZHMoYi5oZWFkLCJkaXYiKS50b3ArNSxkPWEuY29vcmRzQ2hhcih7bGVmdDowLHRvcDpjfSwiZGl2Iik7cmV0dXJue2Zyb206ZCx0bzpiLmZyb20oKX19KX0sZGVsV3JhcHBlZExpbmVSaWdodDpmdW5jdGlvbihhKXtyZShhLGZ1bmN0aW9uKGIpe3ZhciBjPWEuY2hhckNvb3JkcyhiLmhlYWQsImRpdiIpLnRvcCs1LGQ9YS5jb29yZHNDaGFyKHtsZWZ0OmEuZGlzcGxheS5saW5lRGl2Lm9mZnNldFdpZHRoKzEwMCx0b3A6Y30sImRpdiIpO3JldHVybntmcm9tOmIuZnJvbSgpLHRvOmR9fSl9LHVuZG86ZnVuY3Rpb24oYSl7YS51bmRvKCl9LHJlZG86ZnVuY3Rpb24oYSl7YS5yZWRvKCl9LHVuZG9TZWxlY3Rpb246ZnVuY3Rpb24oYSl7YS51bmRvU2VsZWN0aW9uKCl9LHJlZG9TZWxlY3Rpb246ZnVuY3Rpb24oYSl7YS5yZWRvU2VsZWN0aW9uKCl9LGdvRG9jU3RhcnQ6ZnVuY3Rpb24oYSl7YS5leHRlbmRTZWxlY3Rpb24ob2IoYS5maXJzdExpbmUoKSwwKSl9LGdvRG9jRW5kOmZ1bmN0aW9uKGEpe2EuZXh0ZW5kU2VsZWN0aW9uKG9iKGEubGFzdExpbmUoKSkpfSxnb0xpbmVTdGFydDpmdW5jdGlvbihhKXthLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihiKXtyZXR1cm4gTmgoYSxiLmhlYWQubGluZSl9LHtvcmlnaW46Iittb3ZlIixiaWFzOjF9KX0sZ29MaW5lU3RhcnRTbWFydDpmdW5jdGlvbihhKXthLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihiKXtyZXR1cm4gUGgoYSxiLmhlYWQpfSx7b3JpZ2luOiIrbW92ZSIsYmlhczoxfSl9LGdvTGluZUVuZDpmdW5jdGlvbihhKXthLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihiKXtyZXR1cm4gT2goYSxiLmhlYWQubGluZSl9LHtvcmlnaW46Iittb3ZlIixiaWFzOi0xfSl9LGdvTGluZVJpZ2h0OmZ1bmN0aW9uKGEpe2EuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKGIpe3ZhciBjPWEuY2hhckNvb3JkcyhiLmhlYWQsImRpdiIpLnRvcCs1O3JldHVybiBhLmNvb3Jkc0NoYXIoe2xlZnQ6YS5kaXNwbGF5LmxpbmVEaXYub2Zmc2V0V2lkdGgrMTAwLHRvcDpjfSwiZGl2Iil9LFJnKX0sZ29MaW5lTGVmdDpmdW5jdGlvbihhKXthLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihiKXt2YXIgYz1hLmNoYXJDb29yZHMoYi5oZWFkLCJkaXYiKS50b3ArNTtyZXR1cm4gYS5jb29yZHNDaGFyKHtsZWZ0OjAsdG9wOmN9LCJkaXYiKX0sUmcpfSxnb0xpbmVMZWZ0U21hcnQ6ZnVuY3Rpb24oYSl7YS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24oYil7dmFyIGM9YS5jaGFyQ29vcmRzKGIuaGVhZCwiZGl2IikudG9wKzUsZD1hLmNvb3Jkc0NoYXIoe2xlZnQ6MCx0b3A6Y30sImRpdiIpO3JldHVybiBkLmNoPGEuZ2V0TGluZShkLmxpbmUpLnNlYXJjaCgvXFMvKT9QaChhLGIuaGVhZCk6ZH0sUmcpfSxnb0xpbmVVcDpmdW5jdGlvbihhKXthLm1vdmVWKC0xLCJsaW5lIil9LGdvTGluZURvd246ZnVuY3Rpb24oYSl7YS5tb3ZlVigxLCJsaW5lIil9LGdvUGFnZVVwOmZ1bmN0aW9uKGEpe2EubW92ZVYoLTEsInBhZ2UiKX0sZ29QYWdlRG93bjpmdW5jdGlvbihhKXthLm1vdmVWKDEsInBhZ2UiKX0sZ29DaGFyTGVmdDpmdW5jdGlvbihhKXthLm1vdmVIKC0xLCJjaGFyIil9LGdvQ2hhclJpZ2h0OmZ1bmN0aW9uKGEpe2EubW92ZUgoMSwiY2hhciIpfSxnb0NvbHVtbkxlZnQ6ZnVuY3Rpb24oYSl7YS5tb3ZlSCgtMSwiY29sdW1uIil9LGdvQ29sdW1uUmlnaHQ6ZnVuY3Rpb24oYSl7YS5tb3ZlSCgxLCJjb2x1bW4iKX0sZ29Xb3JkTGVmdDpmdW5jdGlvbihhKXthLm1vdmVIKC0xLCJ3b3JkIil9LGdvR3JvdXBSaWdodDpmdW5jdGlvbihhKXthLm1vdmVIKDEsImdyb3VwIil9LGdvR3JvdXBMZWZ0OmZ1bmN0aW9uKGEpe2EubW92ZUgoLTEsImdyb3VwIil9LGdvV29yZFJpZ2h0OmZ1bmN0aW9uKGEpe2EubW92ZUgoMSwid29yZCIpfSxkZWxDaGFyQmVmb3JlOmZ1bmN0aW9uKGEpe2EuZGVsZXRlSCgtMSwiY2hhciIpfSxkZWxDaGFyQWZ0ZXI6ZnVuY3Rpb24oYSl7YS5kZWxldGVIKDEsImNoYXIiKX0sZGVsV29yZEJlZm9yZTpmdW5jdGlvbihhKXthLmRlbGV0ZUgoLTEsIndvcmQiKX0sZGVsV29yZEFmdGVyOmZ1bmN0aW9uKGEpe2EuZGVsZXRlSCgxLCJ3b3JkIil9LGRlbEdyb3VwQmVmb3JlOmZ1bmN0aW9uKGEpe2EuZGVsZXRlSCgtMSwiZ3JvdXAiKX0sZGVsR3JvdXBBZnRlcjpmdW5jdGlvbihhKXthLmRlbGV0ZUgoMSwiZ3JvdXAiKX0saW5kZW50QXV0bzpmdW5jdGlvbihhKXthLmluZGVudFNlbGVjdGlvbigic21hcnQiKX0saW5kZW50TW9yZTpmdW5jdGlvbihhKXthLmluZGVudFNlbGVjdGlvbigiYWRkIil9LGluZGVudExlc3M6ZnVuY3Rpb24oYSl7YS5pbmRlbnRTZWxlY3Rpb24oInN1YnRyYWN0Iil9LGluc2VydFRhYjpmdW5jdGlvbihhKXthLnJlcGxhY2VTZWxlY3Rpb24oIgkiKX0saW5zZXJ0U29mdFRhYjpmdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz1hLmxpc3RTZWxlY3Rpb25zKCksZD1hLm9wdGlvbnMudGFiU2l6ZSxlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPWNbZV0uZnJvbSgpLGc9VGcoYS5nZXRMaW5lKGYubGluZSksZi5jaCxkKTtiLnB1c2gobmV3IEFycmF5KGQtZyVkKzEpLmpvaW4oIiAiKSl9YS5yZXBsYWNlU2VsZWN0aW9ucyhiKX0sZGVmYXVsdFRhYjpmdW5jdGlvbihhKXthLnNvbWV0aGluZ1NlbGVjdGVkKCk/YS5pbmRlbnRTZWxlY3Rpb24oImFkZCIpOmEuZXhlY0NvbW1hbmQoImluc2VydFRhYiIpfSx0cmFuc3Bvc2VDaGFyczpmdW5jdGlvbihhKXthZChhLGZ1bmN0aW9uKCl7Zm9yKHZhciBiPWEubGlzdFNlbGVjdGlvbnMoKSxjPVtdLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGU9YltkXS5oZWFkLGY9YWcoYS5kb2MsZS5saW5lKS50ZXh0O2lmKGYpaWYoZS5jaD09Zi5sZW5ndGgmJihlPW5ldyBvYihlLmxpbmUsZS5jaC0xKSksZS5jaD4wKWU9bmV3IG9iKGUubGluZSxlLmNoKzEpLGEucmVwbGFjZVJhbmdlKGYuY2hhckF0KGUuY2gtMSkrZi5jaGFyQXQoZS5jaC0yKSxvYihlLmxpbmUsZS5jaC0yKSxlLCIrdHJhbnNwb3NlIik7ZWxzZSBpZihlLmxpbmU+YS5kb2MuZmlyc3Qpe3ZhciBnPWFnKGEuZG9jLGUubGluZS0xKS50ZXh0O2cmJmEucmVwbGFjZVJhbmdlKGYuY2hhckF0KDApKyJcbiIrZy5jaGFyQXQoZy5sZW5ndGgtMSksb2IoZS5saW5lLTEsZy5sZW5ndGgtMSksb2IoZS5saW5lLDEpLCIrdHJhbnNwb3NlIil9Yy5wdXNoKG5ldyBJYihlLGUpKX1hLnNldFNlbGVjdGlvbnMoYyl9KX0sbmV3bGluZUFuZEluZGVudDpmdW5jdGlvbihhKXthZChhLGZ1bmN0aW9uKCl7Zm9yKHZhciBiPWEubGlzdFNlbGVjdGlvbnMoKS5sZW5ndGgsYz0wO2I+YztjKyspe3ZhciBkPWEubGlzdFNlbGVjdGlvbnMoKVtjXTthLnJlcGxhY2VSYW5nZSgiXG4iLGQuYW5jaG9yLGQuaGVhZCwiK2lucHV0IiksYS5pbmRlbnRMaW5lKGQuZnJvbSgpLmxpbmUrMSxudWxsLCEwKSxuZShhKX19KX0sdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKGEpe2EudG9nZ2xlT3ZlcndyaXRlKCl9fSxHZT12LmtleU1hcD17fTtHZS5iYXNpYz17TGVmdDoiZ29DaGFyTGVmdCIsUmlnaHQ6ImdvQ2hhclJpZ2h0IixVcDoiZ29MaW5lVXAiLERvd246ImdvTGluZURvd24iLEVuZDoiZ29MaW5lRW5kIixIb21lOiJnb0xpbmVTdGFydFNtYXJ0IixQYWdlVXA6ImdvUGFnZVVwIixQYWdlRG93bjoiZ29QYWdlRG93biIsRGVsZXRlOiJkZWxDaGFyQWZ0ZXIiLEJhY2tzcGFjZToiZGVsQ2hhckJlZm9yZSIsIlNoaWZ0LUJhY2tzcGFjZSI6ImRlbENoYXJCZWZvcmUiLFRhYjoiZGVmYXVsdFRhYiIsIlNoaWZ0LVRhYiI6ImluZGVudEF1dG8iLEVudGVyOiJuZXdsaW5lQW5kSW5kZW50IixJbnNlcnQ6InRvZ2dsZU92ZXJ3cml0ZSIsRXNjOiJzaW5nbGVTZWxlY3Rpb24ifSxHZS5wY0RlZmF1bHQ9eyJDdHJsLUEiOiJzZWxlY3RBbGwiLCJDdHJsLUQiOiJkZWxldGVMaW5lIiwiQ3RybC1aIjoidW5kbyIsIlNoaWZ0LUN0cmwtWiI6InJlZG8iLCJDdHJsLVkiOiJyZWRvIiwiQ3RybC1Ib21lIjoiZ29Eb2NTdGFydCIsIkN0cmwtRW5kIjoiZ29Eb2NFbmQiLCJDdHJsLVVwIjoiZ29MaW5lVXAiLCJDdHJsLURvd24iOiJnb0xpbmVEb3duIiwiQ3RybC1MZWZ0IjoiZ29Hcm91cExlZnQiLCJDdHJsLVJpZ2h0IjoiZ29Hcm91cFJpZ2h0IiwiQWx0LUxlZnQiOiJnb0xpbmVTdGFydCIsIkFsdC1SaWdodCI6ImdvTGluZUVuZCIsIkN0cmwtQmFja3NwYWNlIjoiZGVsR3JvdXBCZWZvcmUiLCJDdHJsLURlbGV0ZSI6ImRlbEdyb3VwQWZ0ZXIiLCJDdHJsLVMiOiJzYXZlIiwiQ3RybC1GIjoiZmluZCIsIkN0cmwtRyI6ImZpbmROZXh0IiwiU2hpZnQtQ3RybC1HIjoiZmluZFByZXYiLCJTaGlmdC1DdHJsLUYiOiJyZXBsYWNlIiwiU2hpZnQtQ3RybC1SIjoicmVwbGFjZUFsbCIsIkN0cmwtWyI6ImluZGVudExlc3MiLCJDdHJsLV0iOiJpbmRlbnRNb3JlIiwiQ3RybC1VIjoidW5kb1NlbGVjdGlvbiIsIlNoaWZ0LUN0cmwtVSI6InJlZG9TZWxlY3Rpb24iLCJBbHQtVSI6InJlZG9TZWxlY3Rpb24iLGZhbGx0aHJvdWdoOiJiYXNpYyJ9LEdlLmVtYWNzeT17IkN0cmwtRiI6ImdvQ2hhclJpZ2h0IiwiQ3RybC1CIjoiZ29DaGFyTGVmdCIsIkN0cmwtUCI6ImdvTGluZVVwIiwiQ3RybC1OIjoiZ29MaW5lRG93biIsIkFsdC1GIjoiZ29Xb3JkUmlnaHQiLCJBbHQtQiI6ImdvV29yZExlZnQiLCJDdHJsLUEiOiJnb0xpbmVTdGFydCIsIkN0cmwtRSI6ImdvTGluZUVuZCIsIkN0cmwtViI6ImdvUGFnZURvd24iLCJTaGlmdC1DdHJsLVYiOiJnb1BhZ2VVcCIsIkN0cmwtRCI6ImRlbENoYXJBZnRlciIsIkN0cmwtSCI6ImRlbENoYXJCZWZvcmUiLCJBbHQtRCI6ImRlbFdvcmRBZnRlciIsIkFsdC1CYWNrc3BhY2UiOiJkZWxXb3JkQmVmb3JlIiwiQ3RybC1LIjoia2lsbExpbmUiLCJDdHJsLVQiOiJ0cmFuc3Bvc2VDaGFycyJ9LEdlLm1hY0RlZmF1bHQ9eyJDbWQtQSI6InNlbGVjdEFsbCIsIkNtZC1EIjoiZGVsZXRlTGluZSIsIkNtZC1aIjoidW5kbyIsIlNoaWZ0LUNtZC1aIjoicmVkbyIsIkNtZC1ZIjoicmVkbyIsIkNtZC1Ib21lIjoiZ29Eb2NTdGFydCIsIkNtZC1VcCI6ImdvRG9jU3RhcnQiLCJDbWQtRW5kIjoiZ29Eb2NFbmQiLCJDbWQtRG93biI6ImdvRG9jRW5kIiwiQWx0LUxlZnQiOiJnb0dyb3VwTGVmdCIsIkFsdC1SaWdodCI6ImdvR3JvdXBSaWdodCIsIkNtZC1MZWZ0IjoiZ29MaW5lTGVmdCIsIkNtZC1SaWdodCI6ImdvTGluZVJpZ2h0IiwiQWx0LUJhY2tzcGFjZSI6ImRlbEdyb3VwQmVmb3JlIiwiQ3RybC1BbHQtQmFja3NwYWNlIjoiZGVsR3JvdXBBZnRlciIsIkFsdC1EZWxldGUiOiJkZWxHcm91cEFmdGVyIiwiQ21kLVMiOiJzYXZlIiwiQ21kLUYiOiJmaW5kIiwiQ21kLUciOiJmaW5kTmV4dCIsIlNoaWZ0LUNtZC1HIjoiZmluZFByZXYiLCJDbWQtQWx0LUYiOiJyZXBsYWNlIiwiU2hpZnQtQ21kLUFsdC1GIjoicmVwbGFjZUFsbCIsIkNtZC1bIjoiaW5kZW50TGVzcyIsIkNtZC1dIjoiaW5kZW50TW9yZSIsIkNtZC1CYWNrc3BhY2UiOiJkZWxXcmFwcGVkTGluZUxlZnQiLCJDbWQtRGVsZXRlIjoiZGVsV3JhcHBlZExpbmVSaWdodCIsIkNtZC1VIjoidW5kb1NlbGVjdGlvbiIsIlNoaWZ0LUNtZC1VIjoicmVkb1NlbGVjdGlvbiIsIkN0cmwtVXAiOiJnb0RvY1N0YXJ0IiwiQ3RybC1Eb3duIjoiZ29Eb2NFbmQiLGZhbGx0aHJvdWdoOlsiYmFzaWMiLCJlbWFjc3kiXX0sR2VbImRlZmF1bHQiXT1vP0dlLm1hY0RlZmF1bHQ6R2UucGNEZWZhdWx0LHYubm9ybWFsaXplS2V5TWFwPWZ1bmN0aW9uKGEpe3ZhciBiPXt9O2Zvcih2YXIgYyBpbiBhKWlmKGEuaGFzT3duUHJvcGVydHkoYykpe3ZhciBkPWFbY107aWYoL14obmFtZXxmYWxsdGhyb3VnaHwoZGV8YXQpdGFjaCkkLy50ZXN0KGMpKWNvbnRpbnVlO2lmKCIuLi4iPT1kKXtkZWxldGUgYVtjXTtjb250aW51ZX1mb3IodmFyIGU9JGcoYy5zcGxpdCgiICIpLEhlKSxmPTA7ZjxlLmxlbmd0aDtmKyspe3ZhciBnLGg7Zj09ZS5sZW5ndGgtMT8oaD1jLGc9ZCk6KGg9ZS5zbGljZSgwLGYrMSkuam9pbigiICIpLGc9Ii4uLiIpO3ZhciBpPWJbaF07aWYoaSl7aWYoaSE9Zyl0aHJvdyBuZXcgRXJyb3IoIkluY29uc2lzdGVudCBiaW5kaW5ncyBmb3IgIitoKX1lbHNlIGJbaF09Z31kZWxldGUgYVtjXX1mb3IodmFyIGogaW4gYilhW2pdPWJbal07cmV0dXJuIGF9O3ZhciBJZT12Lmxvb2t1cEtleT1mdW5jdGlvbihhLGIsYyxkKXtiPUxlKGIpO3ZhciBlPWIuY2FsbD9iLmNhbGwoYSxkKTpiW2FdO2lmKGU9PT0hMSlyZXR1cm4ibm90aGluZyI7aWYoIi4uLiI9PT1lKXJldHVybiJtdWx0aSI7aWYobnVsbCE9ZSYmYyhlKSlyZXR1cm4iaGFuZGxlZCI7aWYoYi5mYWxsdGhyb3VnaCl7aWYoIltvYmplY3QgQXJyYXldIiE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGIuZmFsbHRocm91Z2gpKXJldHVybiBJZShhLGIuZmFsbHRocm91Z2gsYyxkKTtmb3IodmFyIGY9MDtmPGIuZmFsbHRocm91Z2gubGVuZ3RoO2YrKyl7dmFyIGc9SWUoYSxiLmZhbGx0aHJvdWdoW2ZdLGMsZCk7aWYoZylyZXR1cm4gZ319fSxKZT12LmlzTW9kaWZpZXJLZXk9ZnVuY3Rpb24oYSl7dmFyIGI9InN0cmluZyI9PXR5cGVvZiBhP2E6SGhbYS5rZXlDb2RlXTtyZXR1cm4iQ3RybCI9PWJ8fCJBbHQiPT1ifHwiU2hpZnQiPT1ifHwiTW9kIj09Yn0sS2U9di5rZXlOYW1lPWZ1bmN0aW9uKGEsYil7aWYoaSYmMzQ9PWEua2V5Q29kZSYmYVsiY2hhciJdKXJldHVybiExO3ZhciBjPUhoW2Eua2V5Q29kZV0sZD1jO3JldHVybiBudWxsPT1kfHxhLmFsdEdyYXBoS2V5PyExOihhLmFsdEtleSYmIkFsdCIhPWMmJihkPSJBbHQtIitkKSwocj9hLm1ldGFLZXk6YS5jdHJsS2V5KSYmIkN0cmwiIT1jJiYoZD0iQ3RybC0iK2QpLChyP2EuY3RybEtleTphLm1ldGFLZXkpJiYiQ21kIiE9YyYmKGQ9IkNtZC0iK2QpLCFiJiZhLnNoaWZ0S2V5JiYiU2hpZnQiIT1jJiYoZD0iU2hpZnQtIitkKSxkKX07di5mcm9tVGV4dEFyZWE9ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBkKCl7YS52YWx1ZT1pLmdldFZhbHVlKCl9aWYoYj1iP2JoKGIpOnt9LGIudmFsdWU9YS52YWx1ZSwhYi50YWJpbmRleCYmYS50YWJJbmRleCYmKGIudGFiaW5kZXg9YS50YWJJbmRleCksIWIucGxhY2Vob2xkZXImJmEucGxhY2Vob2xkZXImJihiLnBsYWNlaG9sZGVyPWEucGxhY2Vob2xkZXIpLG51bGw9PWIuYXV0b2ZvY3VzKXt2YXIgYz1vaCgpO2IuYXV0b2ZvY3VzPWM9PWF8fG51bGwhPWEuZ2V0QXR0cmlidXRlKCJhdXRvZm9jdXMiKSYmYz09ZG9jdW1lbnQuYm9keX1pZihhLmZvcm0mJihEZyhhLmZvcm0sInN1Ym1pdCIsZCksIWIubGVhdmVTdWJtaXRNZXRob2RBbG9uZSkpe3ZhciBlPWEuZm9ybSxmPWUuc3VibWl0O3RyeXt2YXIgZz1lLnN1Ym1pdD1mdW5jdGlvbigpe2QoKSxlLnN1Ym1pdD1mLGUuc3VibWl0KCksZS5zdWJtaXQ9Z319Y2F0Y2goaCl7fX1iLmZpbmlzaEluaXQ9ZnVuY3Rpb24oYil7Yi5zYXZlPWQsYi5nZXRUZXh0QXJlYT1mdW5jdGlvbigpe3JldHVybiBhfSxiLnRvVGV4dEFyZWE9ZnVuY3Rpb24oKXtiLnRvVGV4dEFyZWE9aXNOYU4sZCgpLGEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiLmdldFdyYXBwZXJFbGVtZW50KCkpLGEuc3R5bGUuZGlzcGxheT0iIixhLmZvcm0mJihFZyhhLmZvcm0sInN1Ym1pdCIsZCksImZ1bmN0aW9uIj09dHlwZW9mIGEuZm9ybS5zdWJtaXQmJihhLmZvcm0uc3VibWl0PWYpKX19LGEuc3R5bGUuZGlzcGxheT0ibm9uZSI7dmFyIGk9dihmdW5jdGlvbihiKXthLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsYS5uZXh0U2libGluZyl9LGIpO3JldHVybiBpfTt2YXIgTWU9di5TdHJpbmdTdHJlYW09ZnVuY3Rpb24oYSxiKXt0aGlzLnBvcz10aGlzLnN0YXJ0PTAsdGhpcy5zdHJpbmc9YSx0aGlzLnRhYlNpemU9Ynx8OCx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5sYXN0Q29sdW1uVmFsdWU9MCx0aGlzLmxpbmVTdGFydD0wfTtNZS5wcm90b3R5cGU9e2VvbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvcz49dGhpcy5zdHJpbmcubGVuZ3RofSxzb2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3M9PXRoaXMubGluZVN0YXJ0fSxwZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyl8fHZvaWQgMH0sbmV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvczx0aGlzLnN0cmluZy5sZW5ndGg/dGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspOnZvaWQgMH0sZWF0OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyk7aWYoInN0cmluZyI9PXR5cGVvZiBhKXZhciBjPWI9PWE7ZWxzZSB2YXIgYz1iJiYoYS50ZXN0P2EudGVzdChiKTphKGIpKTtyZXR1cm4gYz8oKyt0aGlzLnBvcyxiKTp2b2lkIDB9LGVhdFdoaWxlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLnBvczt0aGlzLmVhdChhKTspO3JldHVybiB0aGlzLnBvcz5ifSxlYXRTcGFjZTpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLnBvczsvW1xzXHUwMGEwXS8udGVzdCh0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpKTspKyt0aGlzLnBvcztyZXR1cm4gdGhpcy5wb3M+YX0sc2tpcFRvRW5kOmZ1bmN0aW9uKCl7dGhpcy5wb3M9dGhpcy5zdHJpbmcubGVuZ3RofSxza2lwVG86ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zdHJpbmcuaW5kZXhPZihhLHRoaXMucG9zKTtyZXR1cm4gYj4tMT8odGhpcy5wb3M9YiwhMCk6dm9pZCAwfSxiYWNrVXA6ZnVuY3Rpb24oYSl7dGhpcy5wb3MtPWF9LGNvbHVtbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxhc3RDb2x1bW5Qb3M8dGhpcy5zdGFydCYmKHRoaXMubGFzdENvbHVtblZhbHVlPVRnKHRoaXMuc3RyaW5nLHRoaXMuc3RhcnQsdGhpcy50YWJTaXplLHRoaXMubGFzdENvbHVtblBvcyx0aGlzLmxhc3RDb2x1bW5WYWx1ZSksdGhpcy5sYXN0Q29sdW1uUG9zPXRoaXMuc3RhcnQpLHRoaXMubGFzdENvbHVtblZhbHVlLSh0aGlzLmxpbmVTdGFydD9UZyh0aGlzLnN0cmluZyx0aGlzLmxpbmVTdGFydCx0aGlzLnRhYlNpemUpOjApfSxpbmRlbnRhdGlvbjpmdW5jdGlvbigpe3JldHVybiBUZyh0aGlzLnN0cmluZyxudWxsLHRoaXMudGFiU2l6ZSktKHRoaXMubGluZVN0YXJ0P1RnKHRoaXMuc3RyaW5nLHRoaXMubGluZVN0YXJ0LHRoaXMudGFiU2l6ZSk6MCkNCn0sbWF0Y2g6ZnVuY3Rpb24oYSxiLGMpe2lmKCJzdHJpbmciIT10eXBlb2YgYSl7dmFyIGY9dGhpcy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNoKGEpO3JldHVybiBmJiZmLmluZGV4PjA/bnVsbDooZiYmYiE9PSExJiYodGhpcy5wb3MrPWZbMF0ubGVuZ3RoKSxmKX12YXIgZD1mdW5jdGlvbihhKXtyZXR1cm4gYz9hLnRvTG93ZXJDYXNlKCk6YX0sZT10aGlzLnN0cmluZy5zdWJzdHIodGhpcy5wb3MsYS5sZW5ndGgpO3JldHVybiBkKGUpPT1kKGEpPyhiIT09ITEmJih0aGlzLnBvcys9YS5sZW5ndGgpLCEwKTp2b2lkIDB9LGN1cnJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5zdGFydCx0aGlzLnBvcyl9LGhpZGVGaXJzdENoYXJzOmZ1bmN0aW9uKGEsYil7dGhpcy5saW5lU3RhcnQrPWE7dHJ5e3JldHVybiBiKCl9ZmluYWxseXt0aGlzLmxpbmVTdGFydC09YX19fTt2YXIgTmU9MCxPZT12LlRleHRNYXJrZXI9ZnVuY3Rpb24oYSxiKXt0aGlzLmxpbmVzPVtdLHRoaXMudHlwZT1iLHRoaXMuZG9jPWEsdGhpcy5pZD0rK05lfTtNZyhPZSksT2UucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZXhwbGljaXRseUNsZWFyZWQpe3ZhciBhPXRoaXMuZG9jLmNtLGI9YSYmIWEuY3VyT3A7aWYoYiYmVGMoYSksTGcodGhpcywiY2xlYXIiKSl7dmFyIGM9dGhpcy5maW5kKCk7YyYmSGcodGhpcywiY2xlYXIiLGMuZnJvbSxjLnRvKX1mb3IodmFyIGQ9bnVsbCxlPW51bGwsZj0wO2Y8dGhpcy5saW5lcy5sZW5ndGg7KytmKXt2YXIgZz10aGlzLmxpbmVzW2ZdLGg9V2UoZy5tYXJrZWRTcGFucyx0aGlzKTthJiYhdGhpcy5jb2xsYXBzZWQ/aGQoYSxlZyhnKSwidGV4dCIpOmEmJihudWxsIT1oLnRvJiYoZT1lZyhnKSksbnVsbCE9aC5mcm9tJiYoZD1lZyhnKSkpLGcubWFya2VkU3BhbnM9WGUoZy5tYXJrZWRTcGFucyxoKSxudWxsPT1oLmZyb20mJnRoaXMuY29sbGFwc2VkJiYhcmYodGhpcy5kb2MsZykmJmEmJmRnKGcsUGMoYS5kaXNwbGF5KSl9aWYoYSYmdGhpcy5jb2xsYXBzZWQmJiFhLm9wdGlvbnMubGluZVdyYXBwaW5nKWZvcih2YXIgZj0wO2Y8dGhpcy5saW5lcy5sZW5ndGg7KytmKXt2YXIgaT1uZih0aGlzLmxpbmVzW2ZdKSxqPUcoaSk7aj5hLmRpc3BsYXkubWF4TGluZUxlbmd0aCYmKGEuZGlzcGxheS5tYXhMaW5lPWksYS5kaXNwbGF5Lm1heExpbmVMZW5ndGg9aixhLmRpc3BsYXkubWF4TGluZUNoYW5nZWQ9ITApfW51bGwhPWQmJmEmJnRoaXMuY29sbGFwc2VkJiZnZChhLGQsZSsxKSx0aGlzLmxpbmVzLmxlbmd0aD0wLHRoaXMuZXhwbGljaXRseUNsZWFyZWQ9ITAsdGhpcy5hdG9taWMmJnRoaXMuZG9jLmNhbnRFZGl0JiYodGhpcy5kb2MuY2FudEVkaXQ9ITEsYSYmJGIoYS5kb2MpKSxhJiZIZyhhLCJtYXJrZXJDbGVhcmVkIixhLHRoaXMpLGImJlZjKGEpLHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5jbGVhcigpfX0sT2UucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oYSxiKXtudWxsPT1hJiYiYm9va21hcmsiPT10aGlzLnR5cGUmJihhPTEpO2Zvcih2YXIgYyxkLGU9MDtlPHRoaXMubGluZXMubGVuZ3RoOysrZSl7dmFyIGY9dGhpcy5saW5lc1tlXSxnPVdlKGYubWFya2VkU3BhbnMsdGhpcyk7aWYobnVsbCE9Zy5mcm9tJiYoYz1vYihiP2Y6ZWcoZiksZy5mcm9tKSwtMT09YSkpcmV0dXJuIGM7aWYobnVsbCE9Zy50byYmKGQ9b2IoYj9mOmVnKGYpLGcudG8pLDE9PWEpKXJldHVybiBkfXJldHVybiBjJiZ7ZnJvbTpjLHRvOmR9fSxPZS5wcm90b3R5cGUuY2hhbmdlZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZmluZCgtMSwhMCksYj10aGlzLGM9dGhpcy5kb2MuY207YSYmYyYmYWQoYyxmdW5jdGlvbigpe3ZhciBkPWEubGluZSxlPWVnKGEubGluZSksZj11YyhjLGUpO2lmKGYmJihCYyhmKSxjLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQ9Yy5jdXJPcC5mb3JjZVVwZGF0ZT0hMCksYy5jdXJPcC51cGRhdGVNYXhMaW5lPSEwLCFyZihiLmRvYyxkKSYmbnVsbCE9Yi5oZWlnaHQpe3ZhciBnPWIuaGVpZ2h0O2IuaGVpZ2h0PW51bGw7dmFyIGg9dmYoYiktZztoJiZkZyhkLGQuaGVpZ2h0K2gpfX0pfSxPZS5wcm90b3R5cGUuYXR0YWNoTGluZT1mdW5jdGlvbihhKXtpZighdGhpcy5saW5lcy5sZW5ndGgmJnRoaXMuZG9jLmNtKXt2YXIgYj10aGlzLmRvYy5jbS5jdXJPcDtiLm1heWJlSGlkZGVuTWFya2VycyYmLTEhPVpnKGIubWF5YmVIaWRkZW5NYXJrZXJzLHRoaXMpfHwoYi5tYXliZVVuaGlkZGVuTWFya2Vyc3x8KGIubWF5YmVVbmhpZGRlbk1hcmtlcnM9W10pKS5wdXNoKHRoaXMpfXRoaXMubGluZXMucHVzaChhKX0sT2UucHJvdG90eXBlLmRldGFjaExpbmU9ZnVuY3Rpb24oYSl7aWYodGhpcy5saW5lcy5zcGxpY2UoWmcodGhpcy5saW5lcyxhKSwxKSwhdGhpcy5saW5lcy5sZW5ndGgmJnRoaXMuZG9jLmNtKXt2YXIgYj10aGlzLmRvYy5jbS5jdXJPcDsoYi5tYXliZUhpZGRlbk1hcmtlcnN8fChiLm1heWJlSGlkZGVuTWFya2Vycz1bXSkpLnB1c2godGhpcyl9fTt2YXIgTmU9MCxRZT12LlNoYXJlZFRleHRNYXJrZXI9ZnVuY3Rpb24oYSxiKXt0aGlzLm1hcmtlcnM9YSx0aGlzLnByaW1hcnk9Yjtmb3IodmFyIGM9MDtjPGEubGVuZ3RoOysrYylhW2NdLnBhcmVudD10aGlzfTtNZyhRZSksUWUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZXhwbGljaXRseUNsZWFyZWQpe3RoaXMuZXhwbGljaXRseUNsZWFyZWQ9ITA7Zm9yKHZhciBhPTA7YTx0aGlzLm1hcmtlcnMubGVuZ3RoOysrYSl0aGlzLm1hcmtlcnNbYV0uY2xlYXIoKTtIZyh0aGlzLCJjbGVhciIpfX0sUWUucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5wcmltYXJ5LmZpbmQoYSxiKX07dmFyIHRmPXYuTGluZVdpZGdldD1mdW5jdGlvbihhLGIsYyl7aWYoYylmb3IodmFyIGQgaW4gYyljLmhhc093blByb3BlcnR5KGQpJiYodGhpc1tkXT1jW2RdKTt0aGlzLmNtPWEsdGhpcy5ub2RlPWJ9O01nKHRmKSx0Zi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNtLGI9dGhpcy5saW5lLndpZGdldHMsYz10aGlzLmxpbmUsZD1lZyhjKTtpZihudWxsIT1kJiZiKXtmb3IodmFyIGU9MDtlPGIubGVuZ3RoOysrZSliW2VdPT10aGlzJiZiLnNwbGljZShlLS0sMSk7Yi5sZW5ndGh8fChjLndpZGdldHM9bnVsbCk7dmFyIGY9dmYodGhpcyk7YWQoYSxmdW5jdGlvbigpe3VmKGEsYywtZiksaGQoYSxkLCJ3aWRnZXQiKSxkZyhjLE1hdGgubWF4KDAsYy5oZWlnaHQtZikpfSl9fSx0Zi5wcm90b3R5cGUuY2hhbmdlZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaGVpZ2h0LGI9dGhpcy5jbSxjPXRoaXMubGluZTt0aGlzLmhlaWdodD1udWxsO3ZhciBkPXZmKHRoaXMpLWE7ZCYmYWQoYixmdW5jdGlvbigpe2IuY3VyT3AuZm9yY2VVcGRhdGU9ITAsdWYoYixjLGQpLGRnKGMsYy5oZWlnaHQrZCl9KX07dmFyIHhmPXYuTGluZT1mdW5jdGlvbihhLGIsYyl7dGhpcy50ZXh0PWEsZWYodGhpcyxiKSx0aGlzLmhlaWdodD1jP2ModGhpcyk6MX07TWcoeGYpLHhmLnByb3RvdHlwZS5saW5lTm89ZnVuY3Rpb24oKXtyZXR1cm4gZWcodGhpcyl9O3ZhciBJZj17fSxKZj17fTtVZi5wcm90b3R5cGU9e2NodW5rU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxpbmVzLmxlbmd0aH0scmVtb3ZlSW5uZXI6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9YSxkPWErYjtkPmM7KytjKXt2YXIgZT10aGlzLmxpbmVzW2NdO3RoaXMuaGVpZ2h0LT1lLmhlaWdodCx6ZihlKSxIZyhlLCJkZWxldGUiKX10aGlzLmxpbmVzLnNwbGljZShhLGIpfSxjb2xsYXBzZTpmdW5jdGlvbihhKXthLnB1c2guYXBwbHkoYSx0aGlzLmxpbmVzKX0saW5zZXJ0SW5uZXI6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuaGVpZ2h0Kz1jLHRoaXMubGluZXM9dGhpcy5saW5lcy5zbGljZSgwLGEpLmNvbmNhdChiKS5jb25jYXQodGhpcy5saW5lcy5zbGljZShhKSk7Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDsrK2QpYltkXS5wYXJlbnQ9dGhpc30saXRlck46ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD1hK2I7ZD5hOysrYSlpZihjKHRoaXMubGluZXNbYV0pKXJldHVybiEwfX0sVmYucHJvdG90eXBlPXtjaHVua1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplfSxyZW1vdmVJbm5lcjpmdW5jdGlvbihhLGIpe3RoaXMuc2l6ZS09Yjtmb3IodmFyIGM9MDtjPHRoaXMuY2hpbGRyZW4ubGVuZ3RoOysrYyl7dmFyIGQ9dGhpcy5jaGlsZHJlbltjXSxlPWQuY2h1bmtTaXplKCk7aWYoZT5hKXt2YXIgZj1NYXRoLm1pbihiLGUtYSksZz1kLmhlaWdodDtpZihkLnJlbW92ZUlubmVyKGEsZiksdGhpcy5oZWlnaHQtPWctZC5oZWlnaHQsZT09ZiYmKHRoaXMuY2hpbGRyZW4uc3BsaWNlKGMtLSwxKSxkLnBhcmVudD1udWxsKSwwPT0oYi09ZikpYnJlYWs7YT0wfWVsc2UgYS09ZX1pZih0aGlzLnNpemUtYjwyNSYmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjF8fCEodGhpcy5jaGlsZHJlblswXWluc3RhbmNlb2YgVWYpKSl7dmFyIGg9W107dGhpcy5jb2xsYXBzZShoKSx0aGlzLmNoaWxkcmVuPVtuZXcgVWYoaCldLHRoaXMuY2hpbGRyZW5bMF0ucGFyZW50PXRoaXN9fSxjb2xsYXBzZTpmdW5jdGlvbihhKXtmb3IodmFyIGI9MDtiPHRoaXMuY2hpbGRyZW4ubGVuZ3RoOysrYil0aGlzLmNoaWxkcmVuW2JdLmNvbGxhcHNlKGEpfSxpbnNlcnRJbm5lcjpmdW5jdGlvbihhLGIsYyl7dGhpcy5zaXplKz1iLmxlbmd0aCx0aGlzLmhlaWdodCs9Yztmb3IodmFyIGQ9MDtkPHRoaXMuY2hpbGRyZW4ubGVuZ3RoOysrZCl7dmFyIGU9dGhpcy5jaGlsZHJlbltkXSxmPWUuY2h1bmtTaXplKCk7aWYoZj49YSl7aWYoZS5pbnNlcnRJbm5lcihhLGIsYyksZS5saW5lcyYmZS5saW5lcy5sZW5ndGg+NTApe2Zvcig7ZS5saW5lcy5sZW5ndGg+NTA7KXt2YXIgZz1lLmxpbmVzLnNwbGljZShlLmxpbmVzLmxlbmd0aC0yNSwyNSksaD1uZXcgVWYoZyk7ZS5oZWlnaHQtPWguaGVpZ2h0LHRoaXMuY2hpbGRyZW4uc3BsaWNlKGQrMSwwLGgpLGgucGFyZW50PXRoaXN9dGhpcy5tYXliZVNwaWxsKCl9YnJlYWt9YS09Zn19LG1heWJlU3BpbGw6ZnVuY3Rpb24oKXtpZighKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPD0xMCkpe3ZhciBhPXRoaXM7ZG97dmFyIGI9YS5jaGlsZHJlbi5zcGxpY2UoYS5jaGlsZHJlbi5sZW5ndGgtNSw1KSxjPW5ldyBWZihiKTtpZihhLnBhcmVudCl7YS5zaXplLT1jLnNpemUsYS5oZWlnaHQtPWMuaGVpZ2h0O3ZhciBlPVpnKGEucGFyZW50LmNoaWxkcmVuLGEpO2EucGFyZW50LmNoaWxkcmVuLnNwbGljZShlKzEsMCxjKX1lbHNle3ZhciBkPW5ldyBWZihhLmNoaWxkcmVuKTtkLnBhcmVudD1hLGEuY2hpbGRyZW49W2QsY10sYT1kfWMucGFyZW50PWEucGFyZW50fXdoaWxlKGEuY2hpbGRyZW4ubGVuZ3RoPjEwKTthLnBhcmVudC5tYXliZVNwaWxsKCl9fSxpdGVyTjpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDsrK2Qpe3ZhciBlPXRoaXMuY2hpbGRyZW5bZF0sZj1lLmNodW5rU2l6ZSgpO2lmKGY+YSl7dmFyIGc9TWF0aC5taW4oYixmLWEpO2lmKGUuaXRlck4oYSxnLGMpKXJldHVybiEwO2lmKDA9PShiLT1nKSlicmVhazthPTB9ZWxzZSBhLT1mfX19O3ZhciBXZj0wLFhmPXYuRG9jPWZ1bmN0aW9uKGEsYixjKXtpZighKHRoaXMgaW5zdGFuY2VvZiBYZikpcmV0dXJuIG5ldyBYZihhLGIsYyk7bnVsbD09YyYmKGM9MCksVmYuY2FsbCh0aGlzLFtuZXcgVWYoW25ldyB4ZigiIixudWxsKV0pXSksdGhpcy5maXJzdD1jLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsTGVmdD0wLHRoaXMuY2FudEVkaXQ9ITEsdGhpcy5jbGVhbkdlbmVyYXRpb249MSx0aGlzLmZyb250aWVyPWM7dmFyIGQ9b2IoYywwKTt0aGlzLnNlbD1LYihkKSx0aGlzLmhpc3Rvcnk9bmV3IGlnKG51bGwpLHRoaXMuaWQ9KytXZix0aGlzLm1vZGVPcHRpb249Yiwic3RyaW5nIj09dHlwZW9mIGEmJihhPUNoKGEpKSxUZih0aGlzLHtmcm9tOmQsdG86ZCx0ZXh0OmF9KSxYYih0aGlzLEtiKGQpLFBnKX07WGYucHJvdG90eXBlPWFoKFZmLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6WGYsaXRlcjpmdW5jdGlvbihhLGIsYyl7Yz90aGlzLml0ZXJOKGEtdGhpcy5maXJzdCxiLWEsYyk6dGhpcy5pdGVyTih0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplLGEpfSxpbnNlcnQ6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MCxkPTA7ZDxiLmxlbmd0aDsrK2QpYys9YltkXS5oZWlnaHQ7dGhpcy5pbnNlcnRJbm5lcihhLXRoaXMuZmlyc3QsYixjKX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7dGhpcy5yZW1vdmVJbm5lcihhLXRoaXMuZmlyc3QsYil9LGdldFZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBiPWNnKHRoaXMsdGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSk7cmV0dXJuIGE9PT0hMT9iOmIuam9pbihhfHwiXG4iKX0sc2V0VmFsdWU6ZGQoZnVuY3Rpb24oYSl7dmFyIGI9b2IodGhpcy5maXJzdCwwKSxjPXRoaXMuZmlyc3QrdGhpcy5zaXplLTE7YmUodGhpcyx7ZnJvbTpiLHRvOm9iKGMsYWcodGhpcyxjKS50ZXh0Lmxlbmd0aCksdGV4dDpDaChhKSxvcmlnaW46InNldFZhbHVlIixmdWxsOiEwfSwhMCksWGIodGhpcyxLYihiKSl9KSxyZXBsYWNlUmFuZ2U6ZnVuY3Rpb24oYSxiLGMsZCl7Yj1NYih0aGlzLGIpLGM9Yz9NYih0aGlzLGMpOmIsaGUodGhpcyxhLGIsYyxkKX0sZ2V0UmFuZ2U6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWJnKHRoaXMsTWIodGhpcyxhKSxNYih0aGlzLGIpKTtyZXR1cm4gYz09PSExP2Q6ZC5qb2luKGN8fCJcbiIpfSxnZXRMaW5lOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ2V0TGluZUhhbmRsZShhKTtyZXR1cm4gYiYmYi50ZXh0fSxnZXRMaW5lSGFuZGxlOmZ1bmN0aW9uKGEpe3JldHVybiBPYih0aGlzLGEpP2FnKHRoaXMsYSk6dm9pZCAwfSxnZXRMaW5lTnVtYmVyOmZ1bmN0aW9uKGEpe3JldHVybiBlZyhhKX0sZ2V0TGluZUhhbmRsZVZpc3VhbFN0YXJ0OmZ1bmN0aW9uKGEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYSYmKGE9YWcodGhpcyxhKSksbmYoYSl9LGxpbmVDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LGZpcnN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0fSxsYXN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0K3RoaXMuc2l6ZS0xfSxjbGlwUG9zOmZ1bmN0aW9uKGEpe3JldHVybiBNYih0aGlzLGEpfSxnZXRDdXJzb3I6ZnVuY3Rpb24oYSl7dmFyIGMsYj10aGlzLnNlbC5wcmltYXJ5KCk7cmV0dXJuIGM9bnVsbD09YXx8ImhlYWQiPT1hP2IuaGVhZDoiYW5jaG9yIj09YT9iLmFuY2hvcjoiZW5kIj09YXx8InRvIj09YXx8YT09PSExP2IudG8oKTpiLmZyb20oKX0sbGlzdFNlbGVjdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWwucmFuZ2VzfSxzb21ldGhpbmdTZWxlY3RlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbC5zb21ldGhpbmdTZWxlY3RlZCgpfSxzZXRDdXJzb3I6ZGQoZnVuY3Rpb24oYSxiLGMpe1ViKHRoaXMsTWIodGhpcywibnVtYmVyIj09dHlwZW9mIGE/b2IoYSxifHwwKTphKSxudWxsLGMpfSksc2V0U2VsZWN0aW9uOmRkKGZ1bmN0aW9uKGEsYixjKXtVYih0aGlzLE1iKHRoaXMsYSksTWIodGhpcyxifHxhKSxjKX0pLGV4dGVuZFNlbGVjdGlvbjpkZChmdW5jdGlvbihhLGIsYyl7UmIodGhpcyxNYih0aGlzLGEpLGImJk1iKHRoaXMsYiksYyl9KSxleHRlbmRTZWxlY3Rpb25zOmRkKGZ1bmN0aW9uKGEsYil7U2IodGhpcyxQYih0aGlzLGEsYikpfSksZXh0ZW5kU2VsZWN0aW9uc0J5OmRkKGZ1bmN0aW9uKGEsYil7U2IodGhpcywkZyh0aGlzLnNlbC5yYW5nZXMsYSksYil9KSxzZXRTZWxlY3Rpb25zOmRkKGZ1bmN0aW9uKGEsYixjKXtpZihhLmxlbmd0aCl7Zm9yKHZhciBkPTAsZT1bXTtkPGEubGVuZ3RoO2QrKyllW2RdPW5ldyBJYihNYih0aGlzLGFbZF0uYW5jaG9yKSxNYih0aGlzLGFbZF0uaGVhZCkpO251bGw9PWImJihiPU1hdGgubWluKGEubGVuZ3RoLTEsdGhpcy5zZWwucHJpbUluZGV4KSksWGIodGhpcyxKYihlLGIpLGMpfX0pLGFkZFNlbGVjdGlvbjpkZChmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5zZWwucmFuZ2VzLnNsaWNlKDApO2QucHVzaChuZXcgSWIoTWIodGhpcyxhKSxNYih0aGlzLGJ8fGEpKSksWGIodGhpcyxKYihkLGQubGVuZ3RoLTEpLGMpfSksZ2V0U2VsZWN0aW9uOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxiPXRoaXMuc2VsLnJhbmdlcyxkPTA7ZDxiLmxlbmd0aDtkKyspe3ZhciBlPWJnKHRoaXMsYltkXS5mcm9tKCksYltkXS50bygpKTtjPWM/Yy5jb25jYXQoZSk6ZX1yZXR1cm4gYT09PSExP2M6Yy5qb2luKGF8fCJcbiIpfSxnZXRTZWxlY3Rpb25zOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPXRoaXMuc2VsLnJhbmdlcyxkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWJnKHRoaXMsY1tkXS5mcm9tKCksY1tkXS50bygpKTthIT09ITEmJihlPWUuam9pbihhfHwiXG4iKSksYltkXT1lfXJldHVybiBifSxyZXBsYWNlU2VsZWN0aW9uOmZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9W10sZT0wO2U8dGhpcy5zZWwucmFuZ2VzLmxlbmd0aDtlKyspZFtlXT1hO3RoaXMucmVwbGFjZVNlbGVjdGlvbnMoZCxiLGN8fCIraW5wdXQiKX0scmVwbGFjZVNlbGVjdGlvbnM6ZGQoZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD1bXSxlPXRoaXMuc2VsLGY9MDtmPGUucmFuZ2VzLmxlbmd0aDtmKyspe3ZhciBnPWUucmFuZ2VzW2ZdO2RbZl09e2Zyb206Zy5mcm9tKCksdG86Zy50bygpLHRleHQ6Q2goYVtmXSksb3JpZ2luOmN9fWZvcih2YXIgaD1iJiYiZW5kIiE9YiYmX2QodGhpcyxkLGIpLGY9ZC5sZW5ndGgtMTtmPj0wO2YtLSliZSh0aGlzLGRbZl0pO2g/V2IodGhpcyxoKTp0aGlzLmNtJiZuZSh0aGlzLmNtKX0pLHVuZG86ZGQoZnVuY3Rpb24oKXtkZSh0aGlzLCJ1bmRvIil9KSxyZWRvOmRkKGZ1bmN0aW9uKCl7ZGUodGhpcywicmVkbyIpfSksdW5kb1NlbGVjdGlvbjpkZChmdW5jdGlvbigpe2RlKHRoaXMsInVuZG8iLCEwKX0pLHJlZG9TZWxlY3Rpb246ZGQoZnVuY3Rpb24oKXtkZSh0aGlzLCJyZWRvIiwhMCl9KSxzZXRFeHRlbmRpbmc6ZnVuY3Rpb24oYSl7dGhpcy5leHRlbmQ9YX0sZ2V0RXh0ZW5kaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXh0ZW5kfSxoaXN0b3J5U2l6ZTpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLmhpc3RvcnksYj0wLGM9MCxkPTA7ZDxhLmRvbmUubGVuZ3RoO2QrKylhLmRvbmVbZF0ucmFuZ2VzfHwrK2I7Zm9yKHZhciBkPTA7ZDxhLnVuZG9uZS5sZW5ndGg7ZCsrKWEudW5kb25lW2RdLnJhbmdlc3x8KytjO3JldHVybnt1bmRvOmIscmVkbzpjfX0sY2xlYXJIaXN0b3J5OmZ1bmN0aW9uKCl7dGhpcy5oaXN0b3J5PW5ldyBpZyh0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbil9LG1hcmtDbGVhbjpmdW5jdGlvbigpe3RoaXMuY2xlYW5HZW5lcmF0aW9uPXRoaXMuY2hhbmdlR2VuZXJhdGlvbighMCl9LGNoYW5nZUdlbmVyYXRpb246ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJih0aGlzLmhpc3RvcnkubGFzdE9wPXRoaXMuaGlzdG9yeS5sYXN0U2VsT3A9dGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW49bnVsbCksdGhpcy5oaXN0b3J5LmdlbmVyYXRpb259LGlzQ2xlYW46ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9uPT0oYXx8dGhpcy5jbGVhbkdlbmVyYXRpb24pfSxnZXRIaXN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6dGcodGhpcy5oaXN0b3J5LmRvbmUpLHVuZG9uZTp0Zyh0aGlzLmhpc3RvcnkudW5kb25lKX19LHNldEhpc3Rvcnk6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5oaXN0b3J5PW5ldyBpZyh0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7Yi5kb25lPXRnKGEuZG9uZS5zbGljZSgwKSxudWxsLCEwKSxiLnVuZG9uZT10ZyhhLnVuZG9uZS5zbGljZSgwKSxudWxsLCEwKX0sYWRkTGluZUNsYXNzOmRkKGZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gcWUodGhpcyxhLCJndXR0ZXIiPT1iPyJndXR0ZXIiOiJjbGFzcyIsZnVuY3Rpb24oYSl7dmFyIGQ9InRleHQiPT1iPyJ0ZXh0Q2xhc3MiOiJiYWNrZ3JvdW5kIj09Yj8iYmdDbGFzcyI6Imd1dHRlciI9PWI/Imd1dHRlckNsYXNzIjoid3JhcENsYXNzIjtpZihhW2RdKXtpZihwaChjKS50ZXN0KGFbZF0pKXJldHVybiExO2FbZF0rPSIgIitjfWVsc2UgYVtkXT1jO3JldHVybiEwfSl9KSxyZW1vdmVMaW5lQ2xhc3M6ZGQoZnVuY3Rpb24oYSxiLGMpe3JldHVybiBxZSh0aGlzLGEsImd1dHRlciI9PWI/Imd1dHRlciI6ImNsYXNzIixmdW5jdGlvbihhKXt2YXIgZD0idGV4dCI9PWI/InRleHRDbGFzcyI6ImJhY2tncm91bmQiPT1iPyJiZ0NsYXNzIjoiZ3V0dGVyIj09Yj8iZ3V0dGVyQ2xhc3MiOiJ3cmFwQ2xhc3MiLGU9YVtkXTtpZighZSlyZXR1cm4hMTtpZihudWxsPT1jKWFbZF09bnVsbDtlbHNle3ZhciBmPWUubWF0Y2gocGgoYykpO2lmKCFmKXJldHVybiExO3ZhciBnPWYuaW5kZXgrZlswXS5sZW5ndGg7YVtkXT1lLnNsaWNlKDAsZi5pbmRleCkrKGYuaW5kZXgmJmchPWUubGVuZ3RoPyIgIjoiIikrZS5zbGljZShnKXx8bnVsbH1yZXR1cm4hMH0pfSksbWFya1RleHQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBQZSh0aGlzLE1iKHRoaXMsYSksTWIodGhpcyxiKSxjLCJyYW5nZSIpfSxzZXRCb29rbWFyazpmdW5jdGlvbihhLGIpe3ZhciBjPXtyZXBsYWNlZFdpdGg6YiYmKG51bGw9PWIubm9kZVR5cGU/Yi53aWRnZXQ6YiksaW5zZXJ0TGVmdDpiJiZiLmluc2VydExlZnQsY2xlYXJXaGVuRW1wdHk6ITEsc2hhcmVkOmImJmIuc2hhcmVkfTtyZXR1cm4gYT1NYih0aGlzLGEpLFBlKHRoaXMsYSxhLGMsImJvb2ttYXJrIil9LGZpbmRNYXJrc0F0OmZ1bmN0aW9uKGEpe2E9TWIodGhpcyxhKTt2YXIgYj1bXSxjPWFnKHRoaXMsYS5saW5lKS5tYXJrZWRTcGFucztpZihjKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7KytkKXt2YXIgZT1jW2RdOyhudWxsPT1lLmZyb218fGUuZnJvbTw9YS5jaCkmJihudWxsPT1lLnRvfHxlLnRvPj1hLmNoKSYmYi5wdXNoKGUubWFya2VyLnBhcmVudHx8ZS5tYXJrZXIpfXJldHVybiBifSxmaW5kTWFya3M6ZnVuY3Rpb24oYSxiLGMpe2E9TWIodGhpcyxhKSxiPU1iKHRoaXMsYik7dmFyIGQ9W10sZT1hLmxpbmU7cmV0dXJuIHRoaXMuaXRlcihhLmxpbmUsYi5saW5lKzEsZnVuY3Rpb24oZil7dmFyIGc9Zi5tYXJrZWRTcGFucztpZihnKWZvcih2YXIgaD0wO2g8Zy5sZW5ndGg7aCsrKXt2YXIgaT1nW2hdO2U9PWEubGluZSYmYS5jaD5pLnRvfHxudWxsPT1pLmZyb20mJmUhPWEubGluZXx8ZT09Yi5saW5lJiZpLmZyb20+Yi5jaHx8YyYmIWMoaS5tYXJrZXIpfHxkLnB1c2goaS5tYXJrZXIucGFyZW50fHxpLm1hcmtlcil9KytlfSksZH0sZ2V0QWxsTWFya3M6ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5pdGVyKGZ1bmN0aW9uKGIpe3ZhciBjPWIubWFya2VkU3BhbnM7aWYoYylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoOysrZCludWxsIT1jW2RdLmZyb20mJmEucHVzaChjW2RdLm1hcmtlcil9KSxhfSxwb3NGcm9tSW5kZXg6ZnVuY3Rpb24oYSl7dmFyIGIsYz10aGlzLmZpcnN0O3JldHVybiB0aGlzLml0ZXIoZnVuY3Rpb24oZCl7dmFyIGU9ZC50ZXh0Lmxlbmd0aCsxO3JldHVybiBlPmE/KGI9YSwhMCk6KGEtPWUsKytjLHZvaWQgMCl9KSxNYih0aGlzLG9iKGMsYikpfSxpbmRleEZyb21Qb3M6ZnVuY3Rpb24oYSl7YT1NYih0aGlzLGEpO3ZhciBiPWEuY2g7cmV0dXJuIGEubGluZTx0aGlzLmZpcnN0fHxhLmNoPDA/MDoodGhpcy5pdGVyKHRoaXMuZmlyc3QsYS5saW5lLGZ1bmN0aW9uKGEpe2IrPWEudGV4dC5sZW5ndGgrMX0pLGIpfSxjb3B5OmZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBYZihjZyh0aGlzLHRoaXMuZmlyc3QsdGhpcy5maXJzdCt0aGlzLnNpemUpLHRoaXMubW9kZU9wdGlvbix0aGlzLmZpcnN0KTtyZXR1cm4gYi5zY3JvbGxUb3A9dGhpcy5zY3JvbGxUb3AsYi5zY3JvbGxMZWZ0PXRoaXMuc2Nyb2xsTGVmdCxiLnNlbD10aGlzLnNlbCxiLmV4dGVuZD0hMSxhJiYoYi5oaXN0b3J5LnVuZG9EZXB0aD10aGlzLmhpc3RvcnkudW5kb0RlcHRoLGIuc2V0SGlzdG9yeSh0aGlzLmdldEhpc3RvcnkoKSkpLGJ9LGxpbmtlZERvYzpmdW5jdGlvbihhKXthfHwoYT17fSk7dmFyIGI9dGhpcy5maXJzdCxjPXRoaXMuZmlyc3QrdGhpcy5zaXplO251bGwhPWEuZnJvbSYmYS5mcm9tPmImJihiPWEuZnJvbSksbnVsbCE9YS50byYmYS50bzxjJiYoYz1hLnRvKTt2YXIgZD1uZXcgWGYoY2codGhpcyxiLGMpLGEubW9kZXx8dGhpcy5tb2RlT3B0aW9uLGIpO3JldHVybiBhLnNoYXJlZEhpc3QmJihkLmhpc3Rvcnk9dGhpcy5oaXN0b3J5KSwodGhpcy5saW5rZWR8fCh0aGlzLmxpbmtlZD1bXSkpLnB1c2goe2RvYzpkLHNoYXJlZEhpc3Q6YS5zaGFyZWRIaXN0fSksZC5saW5rZWQ9W3tkb2M6dGhpcyxpc1BhcmVudDohMCxzaGFyZWRIaXN0OmEuc2hhcmVkSGlzdH1dLFRlKGQsU2UodGhpcykpLGR9LHVubGlua0RvYzpmdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgdiYmKGE9YS5kb2MpLHRoaXMubGlua2VkKWZvcih2YXIgYj0wO2I8dGhpcy5saW5rZWQubGVuZ3RoOysrYil7dmFyIGM9dGhpcy5saW5rZWRbYl07aWYoYy5kb2M9PWEpe3RoaXMubGlua2VkLnNwbGljZShiLDEpLGEudW5saW5rRG9jKHRoaXMpLFVlKFNlKHRoaXMpKTticmVha319aWYoYS5oaXN0b3J5PT10aGlzLmhpc3Rvcnkpe3ZhciBkPVthLmlkXTskZihhLGZ1bmN0aW9uKGEpe2QucHVzaChhLmlkKX0sITApLGEuaGlzdG9yeT1uZXcgaWcobnVsbCksYS5oaXN0b3J5LmRvbmU9dGcodGhpcy5oaXN0b3J5LmRvbmUsZCksYS5oaXN0b3J5LnVuZG9uZT10Zyh0aGlzLmhpc3RvcnkudW5kb25lLGQpfX0saXRlckxpbmtlZERvY3M6ZnVuY3Rpb24oYSl7JGYodGhpcyxhKX0sZ2V0TW9kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGV9LGdldEVkaXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNtfX0pLFhmLnByb3RvdHlwZS5lYWNoTGluZT1YZi5wcm90b3R5cGUuaXRlcjt2YXIgWWY9Iml0ZXIgaW5zZXJ0IHJlbW92ZSBjb3B5IGdldEVkaXRvciIuc3BsaXQoIiAiKTtmb3IodmFyIFpmIGluIFhmLnByb3RvdHlwZSlYZi5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoWmYpJiZaZyhZZixaZik8MCYmKHYucHJvdG90eXBlW1pmXT1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseSh0aGlzLmRvYyxhcmd1bWVudHMpfX0oWGYucHJvdG90eXBlW1pmXSkpO01nKFhmKTt2YXIgeGc9di5lX3ByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmEucmV0dXJuVmFsdWU9ITF9LHlnPXYuZV9zdG9wUHJvcGFnYXRpb249ZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24/YS5zdG9wUHJvcGFnYXRpb24oKTphLmNhbmNlbEJ1YmJsZT0hMH0sQWc9di5lX3N0b3A9ZnVuY3Rpb24oYSl7eGcoYSkseWcoYSl9LERnPXYub249ZnVuY3Rpb24oYSxiLGMpe2lmKGEuYWRkRXZlbnRMaXN0ZW5lcilhLmFkZEV2ZW50TGlzdGVuZXIoYixjLCExKTtlbHNlIGlmKGEuYXR0YWNoRXZlbnQpYS5hdHRhY2hFdmVudCgib24iK2IsYyk7ZWxzZXt2YXIgZD1hLl9oYW5kbGVyc3x8KGEuX2hhbmRsZXJzPXt9KSxlPWRbYl18fChkW2JdPVtdKTtlLnB1c2goYyl9fSxFZz12Lm9mZj1mdW5jdGlvbihhLGIsYyl7aWYoYS5yZW1vdmVFdmVudExpc3RlbmVyKWEucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGMsITEpO2Vsc2UgaWYoYS5kZXRhY2hFdmVudClhLmRldGFjaEV2ZW50KCJvbiIrYixjKTtlbHNle3ZhciBkPWEuX2hhbmRsZXJzJiZhLl9oYW5kbGVyc1tiXTtpZighZClyZXR1cm47Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDsrK2UpaWYoZFtlXT09Yyl7ZC5zcGxpY2UoZSwxKTticmVha319fSxGZz12LnNpZ25hbD1mdW5jdGlvbihhLGIpe3ZhciBjPWEuX2hhbmRsZXJzJiZhLl9oYW5kbGVyc1tiXTtpZihjKWZvcih2YXIgZD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMiksZT0wO2U8Yy5sZW5ndGg7KytlKWNbZV0uYXBwbHkobnVsbCxkKX0sR2c9bnVsbCxOZz0zMCxPZz12LlBhc3M9e3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkNvZGVNaXJyb3IuUGFzcyJ9fSxQZz17c2Nyb2xsOiExfSxRZz17b3JpZ2luOiIqbW91c2UifSxSZz17b3JpZ2luOiIrbW92ZSJ9O1NnLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXtjbGVhclRpbWVvdXQodGhpcy5pZCksdGhpcy5pZD1zZXRUaW1lb3V0KGIsYSl9O3ZhciBUZz12LmNvdW50Q29sdW1uPWZ1bmN0aW9uKGEsYixjLGQsZSl7bnVsbD09YiYmKGI9YS5zZWFyY2goL1teXHNcdTAwYTBdLyksLTE9PWImJihiPWEubGVuZ3RoKSk7Zm9yKHZhciBmPWR8fDAsZz1lfHwwOzspe3ZhciBoPWEuaW5kZXhPZigiCSIsZik7aWYoMD5ofHxoPj1iKXJldHVybiBnKyhiLWYpO2crPWgtZixnKz1jLWclYyxmPWgrMX19LFZnPVsiIl0sWWc9ZnVuY3Rpb24oYSl7YS5zZWxlY3QoKX07bT9ZZz1mdW5jdGlvbihhKXthLnNlbGVjdGlvblN0YXJ0PTAsYS5zZWxlY3Rpb25FbmQ9YS52YWx1ZS5sZW5ndGh9OmQmJihZZz1mdW5jdGlvbihhKXt0cnl7YS5zZWxlY3QoKX1jYXRjaChiKXt9fSk7dmFyIGtoLGRoPS9bXHUwMGRmXHUwNTkwLVx1MDVmNFx1MDYwMC1cdTA2ZmZcdTMwNDAtXHUzMDlmXHUzMGEwLVx1MzBmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhYzAwLVx1ZDdhZl0vLGVoPXYuaXNXb3JkQ2hhcj1mdW5jdGlvbihhKXtyZXR1cm4vXHcvLnRlc3QoYSl8fGE+Ilx4ODAiJiYoYS50b1VwcGVyQ2FzZSgpIT1hLnRvTG93ZXJDYXNlKCl8fGRoLnRlc3QoYSkpfSxoaD0vW1x1MDMwMC1cdTAzNmZcdTA0ODMtXHUwNDg5XHUwNTkxLVx1MDViZFx1MDViZlx1MDVjMVx1MDVjMlx1MDVjNFx1MDVjNVx1MDVjN1x1MDYxMC1cdTA2MWFcdTA2NGItXHUwNjVlXHUwNjcwXHUwNmQ2LVx1MDZkY1x1MDZkZS1cdTA2ZTRcdTA2ZTdcdTA2ZThcdTA2ZWEtXHUwNmVkXHUwNzExXHUwNzMwLVx1MDc0YVx1MDdhNi1cdTA3YjBcdTA3ZWItXHUwN2YzXHUwODE2LVx1MDgxOVx1MDgxYi1cdTA4MjNcdTA4MjUtXHUwODI3XHUwODI5LVx1MDgyZFx1MDkwMC1cdTA5MDJcdTA5M2NcdTA5NDEtXHUwOTQ4XHUwOTRkXHUwOTUxLVx1MDk1NVx1MDk2Mlx1MDk2M1x1MDk4MVx1MDliY1x1MDliZVx1MDljMS1cdTA5YzRcdTA5Y2RcdTA5ZDdcdTA5ZTJcdTA5ZTNcdTBhMDFcdTBhMDJcdTBhM2NcdTBhNDFcdTBhNDJcdTBhNDdcdTBhNDhcdTBhNGItXHUwYTRkXHUwYTUxXHUwYTcwXHUwYTcxXHUwYTc1XHUwYTgxXHUwYTgyXHUwYWJjXHUwYWMxLVx1MGFjNVx1MGFjN1x1MGFjOFx1MGFjZFx1MGFlMlx1MGFlM1x1MGIwMVx1MGIzY1x1MGIzZVx1MGIzZlx1MGI0MS1cdTBiNDRcdTBiNGRcdTBiNTZcdTBiNTdcdTBiNjJcdTBiNjNcdTBiODJcdTBiYmVcdTBiYzBcdTBiY2RcdTBiZDdcdTBjM2UtXHUwYzQwXHUwYzQ2LVx1MGM0OFx1MGM0YS1cdTBjNGRcdTBjNTVcdTBjNTZcdTBjNjJcdTBjNjNcdTBjYmNcdTBjYmZcdTBjYzJcdTBjYzZcdTBjY2NcdTBjY2RcdTBjZDVcdTBjZDZcdTBjZTJcdTBjZTNcdTBkM2VcdTBkNDEtXHUwZDQ0XHUwZDRkXHUwZDU3XHUwZDYyXHUwZDYzXHUwZGNhXHUwZGNmXHUwZGQyLVx1MGRkNFx1MGRkNlx1MGRkZlx1MGUzMVx1MGUzNC1cdTBlM2FcdTBlNDctXHUwZTRlXHUwZWIxXHUwZWI0LVx1MGViOVx1MGViYlx1MGViY1x1MGVjOC1cdTBlY2RcdTBmMThcdTBmMTlcdTBmMzVcdTBmMzdcdTBmMzlcdTBmNzEtXHUwZjdlXHUwZjgwLVx1MGY4NFx1MGY4Nlx1MGY4N1x1MGY5MC1cdTBmOTdcdTBmOTktXHUwZmJjXHUwZmM2XHUxMDJkLVx1MTAzMFx1MTAzMi1cdTEwMzdcdTEwMzlcdTEwM2FcdTEwM2RcdTEwM2VcdTEwNThcdTEwNTlcdTEwNWUtXHUxMDYwXHUxMDcxLVx1MTA3NFx1MTA4Mlx1MTA4NVx1MTA4Nlx1MTA4ZFx1MTA5ZFx1MTM1Zlx1MTcxMi1cdTE3MTRcdTE3MzItXHUxNzM0XHUxNzUyXHUxNzUzXHUxNzcyXHUxNzczXHUxN2I3LVx1MTdiZFx1MTdjNlx1MTdjOS1cdTE3ZDNcdTE3ZGRcdTE4MGItXHUxODBkXHUxOGE5XHUxOTIwLVx1MTkyMlx1MTkyN1x1MTkyOFx1MTkzMlx1MTkzOS1cdTE5M2JcdTFhMTdcdTFhMThcdTFhNTZcdTFhNTgtXHUxYTVlXHUxYTYwXHUxYTYyXHUxYTY1LVx1MWE2Y1x1MWE3My1cdTFhN2NcdTFhN2ZcdTFiMDAtXHUxYjAzXHUxYjM0XHUxYjM2LVx1MWIzYVx1MWIzY1x1MWI0Mlx1MWI2Yi1cdTFiNzNcdTFiODBcdTFiODFcdTFiYTItXHUxYmE1XHUxYmE4XHUxYmE5XHUxYzJjLVx1MWMzM1x1MWMzNlx1MWMzN1x1MWNkMC1cdTFjZDJcdTFjZDQtXHUxY2UwXHUxY2UyLVx1MWNlOFx1MWNlZFx1MWRjMC1cdTFkZTZcdTFkZmQtXHUxZGZmXHUyMDBjXHUyMDBkXHUyMGQwLVx1MjBmMFx1MmNlZi1cdTJjZjFcdTJkZTAtXHUyZGZmXHUzMDJhLVx1MzAyZlx1MzA5OVx1MzA5YVx1YTY2Zi1cdWE2NzJcdWE2N2NcdWE2N2RcdWE2ZjBcdWE2ZjFcdWE4MDJcdWE4MDZcdWE4MGJcdWE4MjVcdWE4MjZcdWE4YzRcdWE4ZTAtXHVhOGYxXHVhOTI2LVx1YTkyZFx1YTk0Ny1cdWE5NTFcdWE5ODAtXHVhOTgyXHVhOWIzXHVhOWI2LVx1YTliOVx1YTliY1x1YWEyOS1cdWFhMmVcdWFhMzFcdWFhMzJcdWFhMzVcdWFhMzZcdWFhNDNcdWFhNGNcdWFhYjBcdWFhYjItXHVhYWI0XHVhYWI3XHVhYWI4XHVhYWJlXHVhYWJmXHVhYWMxXHVhYmU1XHVhYmU4XHVhYmVkXHVkYzAwLVx1ZGZmZlx1ZmIxZVx1ZmUwMC1cdWZlMGZcdWZlMjAtXHVmZTI2XHVmZjllXHVmZjlmXS87a2g9ZG9jdW1lbnQuY3JlYXRlUmFuZ2U/ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtyZXR1cm4gZS5zZXRFbmQoZHx8YSxjKSxlLnNldFN0YXJ0KGEsYiksZX06ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWRvY3VtZW50LmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7dHJ5e2QubW92ZVRvRWxlbWVudFRleHQoYS5wYXJlbnROb2RlKX1jYXRjaChlKXtyZXR1cm4gZH1yZXR1cm4gZC5jb2xsYXBzZSghMCksZC5tb3ZlRW5kKCJjaGFyYWN0ZXIiLGMpLGQubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLGIpLGR9O3ZhciBuaD12LmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7aWYoMz09Yi5ub2RlVHlwZSYmKGI9Yi5wYXJlbnROb2RlKSxhLmNvbnRhaW5zKXJldHVybiBhLmNvbnRhaW5zKGIpO2RvIGlmKDExPT1iLm5vZGVUeXBlJiYoYj1iLmhvc3QpLGI9PWEpcmV0dXJuITA7d2hpbGUoYj1iLnBhcmVudE5vZGUpfTtkJiYxMT5lJiYob2g9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYSl7cmV0dXJuIGRvY3VtZW50LmJvZHl9fSk7dmFyIHloLEFoLHFoPXYucm1DbGFzcz1mdW5jdGlvbihhLGIpe3ZhciBjPWEuY2xhc3NOYW1lLGQ9cGgoYikuZXhlYyhjKTtpZihkKXt2YXIgZT1jLnNsaWNlKGQuaW5kZXgrZFswXS5sZW5ndGgpO2EuY2xhc3NOYW1lPWMuc2xpY2UoMCxkLmluZGV4KSsoZT9kWzFdK2U6IiIpfX0scmg9di5hZGRDbGFzcz1mdW5jdGlvbihhLGIpe3ZhciBjPWEuY2xhc3NOYW1lO3BoKGIpLnRlc3QoYyl8fChhLmNsYXNzTmFtZSs9KGM/IiAiOiIiKStiKX0sdWg9ITEseGg9ZnVuY3Rpb24oKXtpZihkJiY5PmUpcmV0dXJuITE7dmFyIGE9amgoImRpdiIpO3JldHVybiJkcmFnZ2FibGUiaW4gYXx8ImRyYWdEcm9wImluIGF9KCksQ2g9di5zcGxpdExpbmVzPTMhPSJcblxuYiIuc3BsaXQoL1xuLykubGVuZ3RoP2Z1bmN0aW9uKGEpe2Zvcih2YXIgYj0wLGM9W10sZD1hLmxlbmd0aDtkPj1iOyl7dmFyIGU9YS5pbmRleE9mKCJcbiIsYik7LTE9PWUmJihlPWEubGVuZ3RoKTt2YXIgZj1hLnNsaWNlKGIsIlxyIj09YS5jaGFyQXQoZS0xKT9lLTE6ZSksZz1mLmluZGV4T2YoIlxyIik7LTEhPWc/KGMucHVzaChmLnNsaWNlKDAsZykpLGIrPWcrMSk6KGMucHVzaChmKSxiPWUrMSl9cmV0dXJuIGN9OmZ1bmN0aW9uKGEpe3JldHVybiBhLnNwbGl0KC9cclxuP3xcbi8pfSxEaD13aW5kb3cuZ2V0U2VsZWN0aW9uP2Z1bmN0aW9uKGEpe3RyeXtyZXR1cm4gYS5zZWxlY3Rpb25TdGFydCE9YS5zZWxlY3Rpb25FbmR9Y2F0Y2goYil7cmV0dXJuITF9fTpmdW5jdGlvbihhKXt0cnl7dmFyIGI9YS5vd25lckRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpfWNhdGNoKGMpe31yZXR1cm4gYiYmYi5wYXJlbnRFbGVtZW50KCk9PWE/MCE9Yi5jb21wYXJlRW5kUG9pbnRzKCJTdGFydFRvRW5kIixiKTohMX0sRWg9ZnVuY3Rpb24oKXt2YXIgYT1qaCgiZGl2Iik7cmV0dXJuIm9uY29weSJpbiBhPyEwOihhLnNldEF0dHJpYnV0ZSgib25jb3B5IiwicmV0dXJuOyIpLCJmdW5jdGlvbiI9PXR5cGVvZiBhLm9uY29weSl9KCksRmg9bnVsbCxIaD17MzoiRW50ZXIiLDg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMzoiRW50ZXIiLDE2OiJTaGlmdCIsMTc6IkN0cmwiLDE4OiJBbHQiLDE5OiJQYXVzZSIsMjA6IkNhcHNMb2NrIiwyNzoiRXNjIiwzMjoiU3BhY2UiLDMzOiJQYWdlVXAiLDM0OiJQYWdlRG93biIsMzU6IkVuZCIsMzY6IkhvbWUiLDM3OiJMZWZ0IiwzODoiVXAiLDM5OiJSaWdodCIsNDA6IkRvd24iLDQ0OiJQcmludFNjcm4iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDU5OiI7Iiw2MToiPSIsOTE6Ik1vZCIsOTI6Ik1vZCIsOTM6Ik1vZCIsMTA3OiI9IiwxMDk6Ii0iLDEyNzoiRGVsZXRlIiwxNzM6Ii0iLDE4NjoiOyIsMTg3OiI9IiwxODg6IiwiLDE4OToiLSIsMTkwOiIuIiwxOTE6Ii8iLDE5MjoiYCIsMjE5OiJbIiwyMjA6IlxcIiwyMjE6Il0iLDIyMjoiJyIsNjMyMzI6IlVwIiw2MzIzMzoiRG93biIsNjMyMzQ6IkxlZnQiLDYzMjM1OiJSaWdodCIsNjMyNzI6IkRlbGV0ZSIsNjMyNzM6IkhvbWUiLDYzMjc1OiJFbmQiLDYzMjc2OiJQYWdlVXAiLDYzMjc3OiJQYWdlRG93biIsNjMzMDI6Ikluc2VydCJ9O3Yua2V5TmFtZXM9SGgsZnVuY3Rpb24oKXtmb3IodmFyIGE9MDsxMD5hO2ErKylIaFthKzQ4XT1IaFthKzk2XT1TdHJpbmcoYSk7Zm9yKHZhciBhPTY1OzkwPj1hO2ErKylIaFthXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpO2Zvcih2YXIgYT0xOzEyPj1hO2ErKylIaFthKzExMV09SGhbYSs2MzIzNV09IkYiK2F9KCk7dmFyIFJoLFdoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYyhjKXtyZXR1cm4gMjQ3Pj1jP2EuY2hhckF0KGMpOmM+PTE0MjQmJjE1MjQ+PWM/IlIiOmM+PTE1MzYmJjE3NzM+PWM/Yi5jaGFyQXQoYy0xNTM2KTpjPj0xNzc0JiYyMjIwPj1jPyJyIjpjPj04MTkyJiY4MjAzPj1jPyJ3Ijo4MjA0PT1jPyJiIjoiTCJ9ZnVuY3Rpb24gaihhLGIsYyl7dGhpcy5sZXZlbD1hLHRoaXMuZnJvbT1iLHRoaXMudG89Y312YXIgYT0iYmJiYmJiYmJidHN0d3NiYmJiYmJiYmJiYmJiYnNzc3R3Tk4lJSVOTk5OTk4sTixOMTExMTExMTExMU5OTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTmJiYmJiYnNiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYixOJSUlJU5OTk5MTk5OTk4lJTExTkxOTk4xTE5OTk5OTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE4iLGI9InJycnJycnJycnJycixyTk5tbW1tbW1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tcnJycnJycm5ubm5ubm5ubm4lbm5ycnJtcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbW1tbW1tbW1tbW1tTm1tbW0iLGQ9L1tcdTA1OTAtXHUwNWY0XHUwNjAwLVx1MDZmZlx1MDcwMC1cdTA4YWNdLyxlPS9bc3R3Tl0vLGY9L1tMUnJdLyxnPS9bTGIxbl0vLGg9L1sxbl0vLGk9IkwiO3JldHVybiBmdW5jdGlvbihhKXtpZighZC50ZXN0KGEpKXJldHVybiExO2Zvcih2YXIgbSxiPWEubGVuZ3RoLGs9W10sbD0wO2I+bDsrK2wpay5wdXNoKG09YyhhLmNoYXJDb2RlQXQobCkpKTtmb3IodmFyIGw9MCxuPWk7Yj5sOysrbCl7dmFyIG09a1tsXTsibSI9PW0/a1tsXT1uOm49bX1mb3IodmFyIGw9MCxvPWk7Yj5sOysrbCl7dmFyIG09a1tsXTsiMSI9PW0mJiJyIj09bz9rW2xdPSJuIjpmLnRlc3QobSkmJihvPW0sInIiPT1tJiYoa1tsXT0iUiIpKX1mb3IodmFyIGw9MSxuPWtbMF07Yi0xPmw7KytsKXt2YXIgbT1rW2xdOyIrIj09bSYmIjEiPT1uJiYiMSI9PWtbbCsxXT9rW2xdPSIxIjoiLCIhPW18fG4hPWtbbCsxXXx8IjEiIT1uJiYibiIhPW58fChrW2xdPW4pLG49bX1mb3IodmFyIGw9MDtiPmw7KytsKXt2YXIgbT1rW2xdO2lmKCIsIj09bSlrW2xdPSJOIjtlbHNlIGlmKCIlIj09bSl7Zm9yKHZhciBwPWwrMTtiPnAmJiIlIj09a1twXTsrK3ApO2Zvcih2YXIgcT1sJiYiISI9PWtbbC0xXXx8Yj5wJiYiMSI9PWtbcF0/IjEiOiJOIixyPWw7cD5yOysrcilrW3JdPXE7bD1wLTF9fWZvcih2YXIgbD0wLG89aTtiPmw7KytsKXt2YXIgbT1rW2xdOyJMIj09byYmIjEiPT1tP2tbbF09IkwiOmYudGVzdChtKSYmKG89bSl9Zm9yKHZhciBsPTA7Yj5sOysrbClpZihlLnRlc3Qoa1tsXSkpe2Zvcih2YXIgcD1sKzE7Yj5wJiZlLnRlc3Qoa1twXSk7KytwKTtmb3IodmFyIHM9IkwiPT0obD9rW2wtMV06aSksdD0iTCI9PShiPnA/a1twXTppKSxxPXN8fHQ/IkwiOiJSIixyPWw7cD5yOysrcilrW3JdPXE7bD1wLTF9Zm9yKHZhciB2LHU9W10sbD0wO2I+bDspaWYoZy50ZXN0KGtbbF0pKXt2YXIgdz1sO2ZvcigrK2w7Yj5sJiZnLnRlc3Qoa1tsXSk7KytsKTt1LnB1c2gobmV3IGooMCx3LGwpKX1lbHNle3ZhciB4PWwseT11Lmxlbmd0aDtmb3IoKytsO2I+bCYmIkwiIT1rW2xdOysrbCk7Zm9yKHZhciByPXg7bD5yOylpZihoLnRlc3Qoa1tyXSkpe3I+eCYmdS5zcGxpY2UoeSwwLG5ldyBqKDEseCxyKSk7dmFyIHo9cjtmb3IoKytyO2w+ciYmaC50ZXN0KGtbcl0pOysrcik7dS5zcGxpY2UoeSwwLG5ldyBqKDIseixyKSkseD1yfWVsc2UrK3I7bD54JiZ1LnNwbGljZSh5LDAsbmV3IGooMSx4LGwpKX1yZXR1cm4gMT09dVswXS5sZXZlbCYmKHY9YS5tYXRjaCgvXlxzKy8pKSYmKHVbMF0uZnJvbT12WzBdLmxlbmd0aCx1LnVuc2hpZnQobmV3IGooMCwwLHZbMF0ubGVuZ3RoKSkpLDE9PVhnKHUpLmxldmVsJiYodj1hLm1hdGNoKC9ccyskLykpJiYoWGcodSkudG8tPXZbMF0ubGVuZ3RoLHUucHVzaChuZXcgaigwLGItdlswXS5sZW5ndGgsYikpKSx1WzBdLmxldmVsIT1YZyh1KS5sZXZlbCYmdS5wdXNoKG5ldyBqKHVbMF0ubGV2ZWwsYixiKSksdX19KCk7cmV0dXJuIHYudmVyc2lvbj0iNS4wLjAiLHZ9KSxmdW5jdGlvbihhKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlP2EocmVxdWlyZSgiLi4vLi4vbGliL2NvZGVtaXJyb3IiKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyIuLi8uLi9saWIvY29kZW1pcnJvciJdLGEpOmEoQ29kZU1pcnJvcil9KGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGEpe2Zvcih2YXIgYj17fSxjPTA7YzxhLmxlbmd0aDsrK2MpYlthW2NdXT0hMDtyZXR1cm4gYn1mdW5jdGlvbiB2KGEsYil7Zm9yKHZhciBkLGM9ITE7bnVsbCE9KGQ9YS5uZXh0KCkpOyl7aWYoYyYmIi8iPT1kKXtiLnRva2VuaXplPW51bGw7YnJlYWt9Yz0iKiI9PWR9cmV0dXJuWyJjb21tZW50IiwiY29tbWVudCJdfWZ1bmN0aW9uIHcoYSxiKXtyZXR1cm4gYS5za2lwVG8oIi0tPiIpPyhhLm1hdGNoKCItLT4iKSxiLnRva2VuaXplPW51bGwpOmEuc2tpcFRvRW5kKCksWyJjb21tZW50IiwiY29tbWVudCJdfWEuZGVmaW5lTW9kZSgiY3NzIixmdW5jdGlvbihiLGMpe2Z1bmN0aW9uIHIoYSxiKXtyZXR1cm4gcD1iLGF9ZnVuY3Rpb24gcyhhLGIpe3ZhciBjPWEubmV4dCgpO2lmKGVbY10pe3ZhciBkPWVbY10oYSxiKTtpZihkIT09ITEpcmV0dXJuIGR9cmV0dXJuIkAiPT1jPyhhLmVhdFdoaWxlKC9bXHdcXFwtXS8pLHIoImRlZiIsYS5jdXJyZW50KCkpKToiPSI9PWN8fCgifiI9PWN8fCJ8Ij09YykmJmEuZWF0KCI9Iik/cihudWxsLCJjb21wYXJlIik6JyInPT1jfHwiJyI9PWM/KGIudG9rZW5pemU9dChjKSxiLnRva2VuaXplKGEsYikpOiIjIj09Yz8oYS5lYXRXaGlsZSgvW1x3XFxcLV0vKSxyKCJhdG9tIiwiaGFzaCIpKToiISI9PWM/KGEubWF0Y2goL15ccypcdyovKSxyKCJrZXl3b3JkIiwiaW1wb3J0YW50IikpOi9cZC8udGVzdChjKXx8Ii4iPT1jJiZhLmVhdCgvXGQvKT8oYS5lYXRXaGlsZSgvW1x3LiVdLykscigibnVtYmVyIiwidW5pdCIpKToiLSIhPT1jPy9bLCs+KlwvXS8udGVzdChjKT9yKG51bGwsInNlbGVjdC1vcCIpOiIuIj09YyYmYS5tYXRjaCgvXi0/W19hLXpdW19hLXowLTktXSovaSk/cigicXVhbGlmaWVyIiwicXVhbGlmaWVyIik6L1s6O3t9XFtcXVwoXCldLy50ZXN0KGMpP3IobnVsbCxjKToidSI9PWMmJmEubWF0Y2goL3JsKC1wcmVmaXgpP1woLyl8fCJkIj09YyYmYS5tYXRjaCgib21haW4oIil8fCJyIj09YyYmYS5tYXRjaCgiZWdleHAoIik/KGEuYmFja1VwKDEpLGIudG9rZW5pemU9dSxyKCJwcm9wZXJ0eSIsIndvcmQiKSk6L1tcd1xcXC1dLy50ZXN0KGMpPyhhLmVhdFdoaWxlKC9bXHdcXFwtXS8pLHIoInByb3BlcnR5Iiwid29yZCIpKTpyKG51bGwsbnVsbCk6L1tcZC5dLy50ZXN0KGEucGVlaygpKT8oYS5lYXRXaGlsZSgvW1x3LiVdLykscigibnVtYmVyIiwidW5pdCIpKTphLm1hdGNoKC9eLVtcd1xcXC1dKy8pPyhhLmVhdFdoaWxlKC9bXHdcXFwtXS8pLGEubWF0Y2goL15ccyo6LywhMSk/cigidmFyaWFibGUtMiIsInZhcmlhYmxlLWRlZmluaXRpb24iKTpyKCJ2YXJpYWJsZS0yIiwidmFyaWFibGUiKSk6YS5tYXRjaCgvXlx3Ky0vKT9yKCJtZXRhIiwibWV0YSIpOnZvaWQgMH1mdW5jdGlvbiB0KGEpe3JldHVybiBmdW5jdGlvbihiLGMpe2Zvcih2YXIgZSxkPSExO251bGwhPShlPWIubmV4dCgpKTspe2lmKGU9PWEmJiFkKXsiKSI9PWEmJmIuYmFja1VwKDEpO2JyZWFrfWQ9IWQmJiJcXCI9PWV9cmV0dXJuKGU9PWF8fCFkJiYiKSIhPWEpJiYoYy50b2tlbml6ZT1udWxsKSxyKCJzdHJpbmciLCJzdHJpbmciKX19ZnVuY3Rpb24gdShhLGIpe3JldHVybiBhLm5leHQoKSxiLnRva2VuaXplPWEubWF0Y2goL1xzKltcIlwnKV0vLCExKT9udWxsOnQoIikiKSxyKG51bGwsIigiKX1mdW5jdGlvbiB2KGEsYixjKXt0aGlzLnR5cGU9YSx0aGlzLmluZGVudD1iLHRoaXMucHJldj1jfWZ1bmN0aW9uIHcoYSxiLGMpe3JldHVybiBhLmNvbnRleHQ9bmV3IHYoYyxiLmluZGVudGF0aW9uKCkrZCxhLmNvbnRleHQpLGN9ZnVuY3Rpb24geChhKXtyZXR1cm4gYS5jb250ZXh0PWEuY29udGV4dC5wcmV2LGEuY29udGV4dC50eXBlfWZ1bmN0aW9uIHkoYSxiLGMpe3JldHVybiBCW2MuY29udGV4dC50eXBlXShhLGIsYyl9ZnVuY3Rpb24geihhLGIsYyxkKXtmb3IodmFyIGU9ZHx8MTtlPjA7ZS0tKWMuY29udGV4dD1jLmNvbnRleHQucHJldjtyZXR1cm4geShhLGIsYyl9ZnVuY3Rpb24gQShhKXt2YXIgYj1hLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpO3E9bi5oYXNPd25Qcm9wZXJ0eShiKT8iYXRvbSI6bS5oYXNPd25Qcm9wZXJ0eShiKT8ia2V5d29yZCI6InZhcmlhYmxlIn1jLnByb3BlcnR5S2V5d29yZHN8fChjPWEucmVzb2x2ZU1vZGUoInRleHQvY3NzIikpO3ZhciBwLHEsZD1iLmluZGVudFVuaXQsZT1jLnRva2VuSG9va3MsZj1jLmRvY3VtZW50VHlwZXN8fHt9LGc9Yy5tZWRpYVR5cGVzfHx7fSxoPWMubWVkaWFGZWF0dXJlc3x8e30saT1jLnByb3BlcnR5S2V5d29yZHN8fHt9LGo9Yy5ub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHN8fHt9LGs9Yy5mb250UHJvcGVydGllc3x8e30sbD1jLmNvdW50ZXJEZXNjcmlwdG9yc3x8e30sbT1jLmNvbG9yS2V5d29yZHN8fHt9LG49Yy52YWx1ZUtleXdvcmRzfHx7fSxvPWMuYWxsb3dOZXN0ZWQsQj17fTtyZXR1cm4gQi50b3A9ZnVuY3Rpb24oYSxiLGMpe2lmKCJ7Ij09YSlyZXR1cm4gdyhjLGIsImJsb2NrIik7aWYoIn0iPT1hJiZjLmNvbnRleHQucHJldilyZXR1cm4geChjKTtpZigvQChtZWRpYXxzdXBwb3J0c3woLW1vei0pP2RvY3VtZW50KS8udGVzdChhKSlyZXR1cm4gdyhjLGIsImF0QmxvY2siKTtpZigvQChmb250LWZhY2V8Y291bnRlci1zdHlsZSkvLnRlc3QoYSkpcmV0dXJuIGMuc3RhdGVBcmc9YSwicmVzdHJpY3RlZF9hdEJsb2NrX2JlZm9yZSI7aWYoL15AKC0obW96fG1zfG98d2Via2l0KS0pP2tleWZyYW1lcyQvLnRlc3QoYSkpcmV0dXJuImtleWZyYW1lcyI7aWYoYSYmIkAiPT1hLmNoYXJBdCgwKSlyZXR1cm4gdyhjLGIsImF0Iik7aWYoImhhc2giPT1hKXE9ImJ1aWx0aW4iO2Vsc2UgaWYoIndvcmQiPT1hKXE9InRhZyI7ZWxzZXtpZigidmFyaWFibGUtZGVmaW5pdGlvbiI9PWEpcmV0dXJuIm1heWJlcHJvcCI7aWYoImludGVycG9sYXRpb24iPT1hKXJldHVybiB3KGMsYiwiaW50ZXJwb2xhdGlvbiIpO2lmKCI6Ij09YSlyZXR1cm4icHNldWRvIjtpZihvJiYiKCI9PWEpcmV0dXJuIHcoYyxiLCJwYXJlbnMiKX1yZXR1cm4gYy5jb250ZXh0LnR5cGV9LEIuYmxvY2s9ZnVuY3Rpb24oYSxiLGMpe2lmKCJ3b3JkIj09YSl7dmFyIGQ9Yi5jdXJyZW50KCkudG9Mb3dlckNhc2UoKTtyZXR1cm4gaS5oYXNPd25Qcm9wZXJ0eShkKT8ocT0icHJvcGVydHkiLCJtYXliZXByb3AiKTpqLmhhc093blByb3BlcnR5KGQpPyhxPSJzdHJpbmctMiIsIm1heWJlcHJvcCIpOm8/KHE9Yi5tYXRjaCgvXlxzKjooPzpcc3wkKS8sITEpPyJwcm9wZXJ0eSI6InRhZyIsImJsb2NrIik6KHErPSIgZXJyb3IiLCJtYXliZXByb3AiKX1yZXR1cm4ibWV0YSI9PWE/ImJsb2NrIjpvfHwiaGFzaCIhPWEmJiJxdWFsaWZpZXIiIT1hP0IudG9wKGEsYixjKToocT0iZXJyb3IiLCJibG9jayIpfSxCLm1heWJlcHJvcD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIjoiPT1hP3coYyxiLCJwcm9wIik6eShhLGIsYyl9LEIucHJvcD1mdW5jdGlvbihhLGIsYyl7aWYoIjsiPT1hKXJldHVybiB4KGMpO2lmKCJ7Ij09YSYmbylyZXR1cm4gdyhjLGIsInByb3BCbG9jayIpO2lmKCJ9Ij09YXx8InsiPT1hKXJldHVybiB6KGEsYixjKTtpZigiKCI9PWEpcmV0dXJuIHcoYyxiLCJwYXJlbnMiKTtpZigiaGFzaCIhPWF8fC9eIyhbMC05YS1mQS1mXXszfXxbMC05YS1mQS1mXXs2fSkkLy50ZXN0KGIuY3VycmVudCgpKSl7aWYoIndvcmQiPT1hKUEoYik7ZWxzZSBpZigiaW50ZXJwb2xhdGlvbiI9PWEpcmV0dXJuIHcoYyxiLCJpbnRlcnBvbGF0aW9uIil9ZWxzZSBxKz0iIGVycm9yIjtyZXR1cm4icHJvcCJ9LEIucHJvcEJsb2NrPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4ifSI9PWE/eChjKToid29yZCI9PWE/KHE9InByb3BlcnR5IiwibWF5YmVwcm9wIik6Yy5jb250ZXh0LnR5cGV9LEIucGFyZW5zPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4ieyI9PWF8fCJ9Ij09YT96KGEsYixjKToiKSI9PWE/eChjKToiKCI9PWE/dyhjLGIsInBhcmVucyIpOigid29yZCI9PWEmJkEoYiksInBhcmVucyIpfSxCLnBzZXVkbz1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIndvcmQiPT1hPyhxPSJ2YXJpYWJsZS0zIixjLmNvbnRleHQudHlwZSk6eShhLGIsYyl9LEIuYXRCbG9jaz1mdW5jdGlvbihhLGIsYyl7aWYoIigiPT1hKXJldHVybiB3KGMsYiwiYXRCbG9ja19wYXJlbnMiKTtpZigifSI9PWEpcmV0dXJuIHooYSxiLGMpO2lmKCJ7Ij09YSlyZXR1cm4geChjKSYmdyhjLGIsbz8iYmxvY2siOiJ0b3AiKTtpZigid29yZCI9PWEpe3ZhciBkPWIuY3VycmVudCgpLnRvTG93ZXJDYXNlKCk7cT0ib25seSI9PWR8fCJub3QiPT1kfHwiYW5kIj09ZHx8Im9yIj09ZD8ia2V5d29yZCI6Zi5oYXNPd25Qcm9wZXJ0eShkKT8idGFnIjpnLmhhc093blByb3BlcnR5KGQpPyJhdHRyaWJ1dGUiOmguaGFzT3duUHJvcGVydHkoZCk/InByb3BlcnR5IjppLmhhc093blByb3BlcnR5KGQpPyJwcm9wZXJ0eSI6ai5oYXNPd25Qcm9wZXJ0eShkKT8ic3RyaW5nLTIiOm4uaGFzT3duUHJvcGVydHkoZCk/ImF0b20iOiJlcnJvciJ9cmV0dXJuIGMuY29udGV4dC50eXBlfSxCLmF0QmxvY2tfcGFyZW5zPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4iKSI9PWE/eChjKToieyI9PWF8fCJ9Ij09YT96KGEsYixjLDIpOkIuYXRCbG9jayhhLGIsYyl9LEIucmVzdHJpY3RlZF9hdEJsb2NrX2JlZm9yZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuInsiPT1hP3coYyxiLCJyZXN0cmljdGVkX2F0QmxvY2siKToid29yZCI9PWEmJiJAY291bnRlci1zdHlsZSI9PWMuc3RhdGVBcmc/KHE9InZhcmlhYmxlIiwicmVzdHJpY3RlZF9hdEJsb2NrX2JlZm9yZSIpOnkoYSxiLGMpfSxCLnJlc3RyaWN0ZWRfYXRCbG9jaz1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIn0iPT1hPyhjLnN0YXRlQXJnPW51bGwseChjKSk6IndvcmQiPT1hPyhxPSJAZm9udC1mYWNlIj09Yy5zdGF0ZUFyZyYmIWsuaGFzT3duUHJvcGVydHkoYi5jdXJyZW50KCkudG9Mb3dlckNhc2UoKSl8fCJAY291bnRlci1zdHlsZSI9PWMuc3RhdGVBcmcmJiFsLmhhc093blByb3BlcnR5KGIuY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpPyJlcnJvciI6InByb3BlcnR5IiwibWF5YmVwcm9wIik6InJlc3RyaWN0ZWRfYXRCbG9jayJ9LEIua2V5ZnJhbWVzPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4id29yZCI9PWE/KHE9InZhcmlhYmxlIiwia2V5ZnJhbWVzIik6InsiPT1hP3coYyxiLCJ0b3AiKTp5KGEsYixjKX0sQi5hdD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIjsiPT1hP3goYyk6InsiPT1hfHwifSI9PWE/eihhLGIsYyk6KCJ3b3JkIj09YT9xPSJ0YWciOiJoYXNoIj09YSYmKHE9ImJ1aWx0aW4iKSwiYXQiKX0sQi5pbnRlcnBvbGF0aW9uPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4ifSI9PWE/eChjKToieyI9PWF8fCI7Ij09YT96KGEsYixjKTooInZhcmlhYmxlIiE9YSYmKHE9ImVycm9yIiksImludGVycG9sYXRpb24iKX0se3N0YXJ0U3RhdGU6ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuaXplOm51bGwsc3RhdGU6InRvcCIsc3RhdGVBcmc6bnVsbCxjb250ZXh0Om5ldyB2KCJ0b3AiLGF8fDAsbnVsbCl9fSx0b2tlbjpmdW5jdGlvbihhLGIpe2lmKCFiLnRva2VuaXplJiZhLmVhdFNwYWNlKCkpcmV0dXJuIG51bGw7dmFyIGM9KGIudG9rZW5pemV8fHMpKGEsYik7cmV0dXJuIGMmJiJvYmplY3QiPT10eXBlb2YgYyYmKHA9Y1sxXSxjPWNbMF0pLHE9YyxiLnN0YXRlPUJbYi5zdGF0ZV0ocCxhLGIpLHF9LGluZGVudDpmdW5jdGlvbihhLGIpe3ZhciBjPWEuY29udGV4dCxlPWImJmIuY2hhckF0KDApLGY9Yy5pbmRlbnQ7cmV0dXJuInByb3AiIT1jLnR5cGV8fCJ9IiE9ZSYmIikiIT1lfHwoYz1jLnByZXYpLCFjLnByZXZ8fCgifSIhPWV8fCJibG9jayIhPWMudHlwZSYmInRvcCIhPWMudHlwZSYmImludGVycG9sYXRpb24iIT1jLnR5cGUmJiJyZXN0cmljdGVkX2F0QmxvY2siIT1jLnR5cGUpJiYoIikiIT1lfHwicGFyZW5zIiE9Yy50eXBlJiYiYXRCbG9ja19wYXJlbnMiIT1jLnR5cGUpJiYoInsiIT1lfHwiYXQiIT1jLnR5cGUmJiJhdEJsb2NrIiE9Yy50eXBlKXx8KGY9Yy5pbmRlbnQtZCxjPWMucHJldiksZn0sZWxlY3RyaWNDaGFyczoifSIsYmxvY2tDb21tZW50U3RhcnQ6Ii8qIixibG9ja0NvbW1lbnRFbmQ6IiovIixmb2xkOiJicmFjZSJ9fSk7dmFyIGM9WyJkb21haW4iLCJyZWdleHAiLCJ1cmwiLCJ1cmwtcHJlZml4Il0sZD1iKGMpLGU9WyJhbGwiLCJhdXJhbCIsImJyYWlsbGUiLCJoYW5kaGVsZCIsInByaW50IiwicHJvamVjdGlvbiIsInNjcmVlbiIsInR0eSIsInR2IiwiZW1ib3NzZWQiXSxmPWIoZSksZz1bIndpZHRoIiwibWluLXdpZHRoIiwibWF4LXdpZHRoIiwiaGVpZ2h0IiwibWluLWhlaWdodCIsIm1heC1oZWlnaHQiLCJkZXZpY2Utd2lkdGgiLCJtaW4tZGV2aWNlLXdpZHRoIiwibWF4LWRldmljZS13aWR0aCIsImRldmljZS1oZWlnaHQiLCJtaW4tZGV2aWNlLWhlaWdodCIsIm1heC1kZXZpY2UtaGVpZ2h0IiwiYXNwZWN0LXJhdGlvIiwibWluLWFzcGVjdC1yYXRpbyIsIm1heC1hc3BlY3QtcmF0aW8iLCJkZXZpY2UtYXNwZWN0LXJhdGlvIiwibWluLWRldmljZS1hc3BlY3QtcmF0aW8iLCJtYXgtZGV2aWNlLWFzcGVjdC1yYXRpbyIsImNvbG9yIiwibWluLWNvbG9yIiwibWF4LWNvbG9yIiwiY29sb3ItaW5kZXgiLCJtaW4tY29sb3ItaW5kZXgiLCJtYXgtY29sb3ItaW5kZXgiLCJtb25vY2hyb21lIiwibWluLW1vbm9jaHJvbWUiLCJtYXgtbW9ub2Nocm9tZSIsInJlc29sdXRpb24iLCJtaW4tcmVzb2x1dGlvbiIsIm1heC1yZXNvbHV0aW9uIiwic2NhbiIsImdyaWQiXSxoPWIoZyksaT1bImFsaWduLWNvbnRlbnQiLCJhbGlnbi1pdGVtcyIsImFsaWduLXNlbGYiLCJhbGlnbm1lbnQtYWRqdXN0IiwiYWxpZ25tZW50LWJhc2VsaW5lIiwiYW5jaG9yLXBvaW50IiwiYW5pbWF0aW9uIiwiYW5pbWF0aW9uLWRlbGF5IiwiYW5pbWF0aW9uLWRpcmVjdGlvbiIsImFuaW1hdGlvbi1kdXJhdGlvbiIsImFuaW1hdGlvbi1maWxsLW1vZGUiLCJhbmltYXRpb24taXRlcmF0aW9uLWNvdW50IiwiYW5pbWF0aW9uLW5hbWUiLCJhbmltYXRpb24tcGxheS1zdGF0ZSIsImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iLCJhcHBlYXJhbmNlIiwiYXppbXV0aCIsImJhY2tmYWNlLXZpc2liaWxpdHkiLCJiYWNrZ3JvdW5kIiwiYmFja2dyb3VuZC1hdHRhY2htZW50IiwiYmFja2dyb3VuZC1jbGlwIiwiYmFja2dyb3VuZC1jb2xvciIsImJhY2tncm91bmQtaW1hZ2UiLCJiYWNrZ3JvdW5kLW9yaWdpbiIsImJhY2tncm91bmQtcG9zaXRpb24iLCJiYWNrZ3JvdW5kLXJlcGVhdCIsImJhY2tncm91bmQtc2l6ZSIsImJhc2VsaW5lLXNoaWZ0IiwiYmluZGluZyIsImJsZWVkIiwiYm9va21hcmstbGFiZWwiLCJib29rbWFyay1sZXZlbCIsImJvb2ttYXJrLXN0YXRlIiwiYm9va21hcmstdGFyZ2V0IiwiYm9yZGVyIiwiYm9yZGVyLWJvdHRvbSIsImJvcmRlci1ib3R0b20tY29sb3IiLCJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIiwiYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMiLCJib3JkZXItYm90dG9tLXN0eWxlIiwiYm9yZGVyLWJvdHRvbS13aWR0aCIsImJvcmRlci1jb2xsYXBzZSIsImJvcmRlci1jb2xvciIsImJvcmRlci1pbWFnZSIsImJvcmRlci1pbWFnZS1vdXRzZXQiLCJib3JkZXItaW1hZ2UtcmVwZWF0IiwiYm9yZGVyLWltYWdlLXNsaWNlIiwiYm9yZGVyLWltYWdlLXNvdXJjZSIsImJvcmRlci1pbWFnZS13aWR0aCIsImJvcmRlci1sZWZ0IiwiYm9yZGVyLWxlZnQtY29sb3IiLCJib3JkZXItbGVmdC1zdHlsZSIsImJvcmRlci1sZWZ0LXdpZHRoIiwiYm9yZGVyLXJhZGl1cyIsImJvcmRlci1yaWdodCIsImJvcmRlci1yaWdodC1jb2xvciIsImJvcmRlci1yaWdodC1zdHlsZSIsImJvcmRlci1yaWdodC13aWR0aCIsImJvcmRlci1zcGFjaW5nIiwiYm9yZGVyLXN0eWxlIiwiYm9yZGVyLXRvcCIsImJvcmRlci10b3AtY29sb3IiLCJib3JkZXItdG9wLWxlZnQtcmFkaXVzIiwiYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMiLCJib3JkZXItdG9wLXN0eWxlIiwiYm9yZGVyLXRvcC13aWR0aCIsImJvcmRlci13aWR0aCIsImJvdHRvbSIsImJveC1kZWNvcmF0aW9uLWJyZWFrIiwiYm94LXNoYWRvdyIsImJveC1zaXppbmciLCJicmVhay1hZnRlciIsImJyZWFrLWJlZm9yZSIsImJyZWFrLWluc2lkZSIsImNhcHRpb24tc2lkZSIsImNsZWFyIiwiY2xpcCIsImNvbG9yIiwiY29sb3ItcHJvZmlsZSIsImNvbHVtbi1jb3VudCIsImNvbHVtbi1maWxsIiwiY29sdW1uLWdhcCIsImNvbHVtbi1ydWxlIiwiY29sdW1uLXJ1bGUtY29sb3IiLCJjb2x1bW4tcnVsZS1zdHlsZSIsImNvbHVtbi1ydWxlLXdpZHRoIiwiY29sdW1uLXNwYW4iLCJjb2x1bW4td2lkdGgiLCJjb2x1bW5zIiwiY29udGVudCIsImNvdW50ZXItaW5jcmVtZW50IiwiY291bnRlci1yZXNldCIsImNyb3AiLCJjdWUiLCJjdWUtYWZ0ZXIiLCJjdWUtYmVmb3JlIiwiY3Vyc29yIiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImRvbWluYW50LWJhc2VsaW5lIiwiZHJvcC1pbml0aWFsLWFmdGVyLWFkanVzdCIsImRyb3AtaW5pdGlhbC1hZnRlci1hbGlnbiIsImRyb3AtaW5pdGlhbC1iZWZvcmUtYWRqdXN0IiwiZHJvcC1pbml0aWFsLWJlZm9yZS1hbGlnbiIsImRyb3AtaW5pdGlhbC1zaXplIiwiZHJvcC1pbml0aWFsLXZhbHVlIiwiZWxldmF0aW9uIiwiZW1wdHktY2VsbHMiLCJmaXQiLCJmaXQtcG9zaXRpb24iLCJmbGV4IiwiZmxleC1iYXNpcyIsImZsZXgtZGlyZWN0aW9uIiwiZmxleC1mbG93IiwiZmxleC1ncm93IiwiZmxleC1zaHJpbmsiLCJmbGV4LXdyYXAiLCJmbG9hdCIsImZsb2F0LW9mZnNldCIsImZsb3ctZnJvbSIsImZsb3ctaW50byIsImZvbnQiLCJmb250LWZlYXR1cmUtc2V0dGluZ3MiLCJmb250LWZhbWlseSIsImZvbnQta2VybmluZyIsImZvbnQtbGFuZ3VhZ2Utb3ZlcnJpZGUiLCJmb250LXNpemUiLCJmb250LXNpemUtYWRqdXN0IiwiZm9udC1zdHJldGNoIiwiZm9udC1zdHlsZSIsImZvbnQtc3ludGhlc2lzIiwiZm9udC12YXJpYW50IiwiZm9udC12YXJpYW50LWFsdGVybmF0ZXMiLCJmb250LXZhcmlhbnQtY2FwcyIsImZvbnQtdmFyaWFudC1lYXN0LWFzaWFuIiwiZm9udC12YXJpYW50LWxpZ2F0dXJlcyIsImZvbnQtdmFyaWFudC1udW1lcmljIiwiZm9udC12YXJpYW50LXBvc2l0aW9uIiwiZm9udC13ZWlnaHQiLCJncmlkIiwiZ3JpZC1hcmVhIiwiZ3JpZC1hdXRvLWNvbHVtbnMiLCJncmlkLWF1dG8tZmxvdyIsImdyaWQtYXV0by1wb3NpdGlvbiIsImdyaWQtYXV0by1yb3dzIiwiZ3JpZC1jb2x1bW4iLCJncmlkLWNvbHVtbi1lbmQiLCJncmlkLWNvbHVtbi1zdGFydCIsImdyaWQtcm93IiwiZ3JpZC1yb3ctZW5kIiwiZ3JpZC1yb3ctc3RhcnQiLCJncmlkLXRlbXBsYXRlIiwiZ3JpZC10ZW1wbGF0ZS1hcmVhcyIsImdyaWQtdGVtcGxhdGUtY29sdW1ucyIsImdyaWQtdGVtcGxhdGUtcm93cyIsImhhbmdpbmctcHVuY3R1YXRpb24iLCJoZWlnaHQiLCJoeXBoZW5zIiwiaWNvbiIsImltYWdlLW9yaWVudGF0aW9uIiwiaW1hZ2UtcmVuZGVyaW5nIiwiaW1hZ2UtcmVzb2x1dGlvbiIsImlubGluZS1ib3gtYWxpZ24iLCJqdXN0aWZ5LWNvbnRlbnQiLCJsZWZ0IiwibGV0dGVyLXNwYWNpbmciLCJsaW5lLWJyZWFrIiwibGluZS1oZWlnaHQiLCJsaW5lLXN0YWNraW5nIiwibGluZS1zdGFja2luZy1ydWJ5IiwibGluZS1zdGFja2luZy1zaGlmdCIsImxpbmUtc3RhY2tpbmctc3RyYXRlZ3kiLCJsaXN0LXN0eWxlIiwibGlzdC1zdHlsZS1pbWFnZSIsImxpc3Qtc3R5bGUtcG9zaXRpb24iLCJsaXN0LXN0eWxlLXR5cGUiLCJtYXJnaW4iLCJtYXJnaW4tYm90dG9tIiwibWFyZ2luLWxlZnQiLCJtYXJnaW4tcmlnaHQiLCJtYXJnaW4tdG9wIiwibWFya2VyLW9mZnNldCIsIm1hcmtzIiwibWFycXVlZS1kaXJlY3Rpb24iLCJtYXJxdWVlLWxvb3AiLCJtYXJxdWVlLXBsYXktY291bnQiLCJtYXJxdWVlLXNwZWVkIiwibWFycXVlZS1zdHlsZSIsIm1heC1oZWlnaHQiLCJtYXgtd2lkdGgiLCJtaW4taGVpZ2h0IiwibWluLXdpZHRoIiwibW92ZS10byIsIm5hdi1kb3duIiwibmF2LWluZGV4IiwibmF2LWxlZnQiLCJuYXYtcmlnaHQiLCJuYXYtdXAiLCJvYmplY3QtZml0Iiwib2JqZWN0LXBvc2l0aW9uIiwib3BhY2l0eSIsIm9yZGVyIiwib3JwaGFucyIsIm91dGxpbmUiLCJvdXRsaW5lLWNvbG9yIiwib3V0bGluZS1vZmZzZXQiLCJvdXRsaW5lLXN0eWxlIiwib3V0bGluZS13aWR0aCIsIm92ZXJmbG93Iiwib3ZlcmZsb3ctc3R5bGUiLCJvdmVyZmxvdy13cmFwIiwib3ZlcmZsb3cteCIsIm92ZXJmbG93LXkiLCJwYWRkaW5nIiwicGFkZGluZy1ib3R0b20iLCJwYWRkaW5nLWxlZnQiLCJwYWRkaW5nLXJpZ2h0IiwicGFkZGluZy10b3AiLCJwYWdlIiwicGFnZS1icmVhay1hZnRlciIsInBhZ2UtYnJlYWstYmVmb3JlIiwicGFnZS1icmVhay1pbnNpZGUiLCJwYWdlLXBvbGljeSIsInBhdXNlIiwicGF1c2UtYWZ0ZXIiLCJwYXVzZS1iZWZvcmUiLCJwZXJzcGVjdGl2ZSIsInBlcnNwZWN0aXZlLW9yaWdpbiIsInBpdGNoIiwicGl0Y2gtcmFuZ2UiLCJwbGF5LWR1cmluZyIsInBvc2l0aW9uIiwicHJlc2VudGF0aW9uLWxldmVsIiwicHVuY3R1YXRpb24tdHJpbSIsInF1b3RlcyIsInJlZ2lvbi1icmVhay1hZnRlciIsInJlZ2lvbi1icmVhay1iZWZvcmUiLCJyZWdpb24tYnJlYWstaW5zaWRlIiwicmVnaW9uLWZyYWdtZW50IiwicmVuZGVyaW5nLWludGVudCIsInJlc2l6ZSIsInJlc3QiLCJyZXN0LWFmdGVyIiwicmVzdC1iZWZvcmUiLCJyaWNobmVzcyIsInJpZ2h0Iiwicm90YXRpb24iLCJyb3RhdGlvbi1wb2ludCIsInJ1YnktYWxpZ24iLCJydWJ5LW92ZXJoYW5nIiwicnVieS1wb3NpdGlvbiIsInJ1Ynktc3BhbiIsInNoYXBlLWltYWdlLXRocmVzaG9sZCIsInNoYXBlLWluc2lkZSIsInNoYXBlLW1hcmdpbiIsInNoYXBlLW91dHNpZGUiLCJzaXplIiwic3BlYWsiLCJzcGVhay1hcyIsInNwZWFrLWhlYWRlciIsInNwZWFrLW51bWVyYWwiLCJzcGVhay1wdW5jdHVhdGlvbiIsInNwZWVjaC1yYXRlIiwic3RyZXNzIiwic3RyaW5nLXNldCIsInRhYi1zaXplIiwidGFibGUtbGF5b3V0IiwidGFyZ2V0IiwidGFyZ2V0LW5hbWUiLCJ0YXJnZXQtbmV3IiwidGFyZ2V0LXBvc2l0aW9uIiwidGV4dC1hbGlnbiIsInRleHQtYWxpZ24tbGFzdCIsInRleHQtZGVjb3JhdGlvbiIsInRleHQtZGVjb3JhdGlvbi1jb2xvciIsInRleHQtZGVjb3JhdGlvbi1saW5lIiwidGV4dC1kZWNvcmF0aW9uLXNraXAiLCJ0ZXh0LWRlY29yYXRpb24tc3R5bGUiLCJ0ZXh0LWVtcGhhc2lzIiwidGV4dC1lbXBoYXNpcy1jb2xvciIsInRleHQtZW1waGFzaXMtcG9zaXRpb24iLCJ0ZXh0LWVtcGhhc2lzLXN0eWxlIiwidGV4dC1oZWlnaHQiLCJ0ZXh0LWluZGVudCIsInRleHQtanVzdGlmeSIsInRleHQtb3V0bGluZSIsInRleHQtb3ZlcmZsb3ciLCJ0ZXh0LXNoYWRvdyIsInRleHQtc2l6ZS1hZGp1c3QiLCJ0ZXh0LXNwYWNlLWNvbGxhcHNlIiwidGV4dC10cmFuc2Zvcm0iLCJ0ZXh0LXVuZGVybGluZS1wb3NpdGlvbiIsInRleHQtd3JhcCIsInRvcCIsInRyYW5zZm9ybSIsInRyYW5zZm9ybS1vcmlnaW4iLCJ0cmFuc2Zvcm0tc3R5bGUiLCJ0cmFuc2l0aW9uIiwidHJhbnNpdGlvbi1kZWxheSIsInRyYW5zaXRpb24tZHVyYXRpb24iLCJ0cmFuc2l0aW9uLXByb3BlcnR5IiwidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iLCJ1bmljb2RlLWJpZGkiLCJ2ZXJ0aWNhbC1hbGlnbiIsInZpc2liaWxpdHkiLCJ2b2ljZS1iYWxhbmNlIiwidm9pY2UtZHVyYXRpb24iLCJ2b2ljZS1mYW1pbHkiLCJ2b2ljZS1waXRjaCIsInZvaWNlLXJhbmdlIiwidm9pY2UtcmF0ZSIsInZvaWNlLXN0cmVzcyIsInZvaWNlLXZvbHVtZSIsInZvbHVtZSIsIndoaXRlLXNwYWNlIiwid2lkb3dzIiwid2lkdGgiLCJ3b3JkLWJyZWFrIiwid29yZC1zcGFjaW5nIiwid29yZC13cmFwIiwiei1pbmRleCIsImNsaXAtcGF0aCIsImNsaXAtcnVsZSIsIm1hc2siLCJlbmFibGUtYmFja2dyb3VuZCIsImZpbHRlciIsImZsb29kLWNvbG9yIiwiZmxvb2Qtb3BhY2l0eSIsImxpZ2h0aW5nLWNvbG9yIiwic3RvcC1jb2xvciIsInN0b3Atb3BhY2l0eSIsInBvaW50ZXItZXZlbnRzIiwiY29sb3ItaW50ZXJwb2xhdGlvbiIsImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyIsImNvbG9yLXJlbmRlcmluZyIsImZpbGwiLCJmaWxsLW9wYWNpdHkiLCJmaWxsLXJ1bGUiLCJpbWFnZS1yZW5kZXJpbmciLCJtYXJrZXIiLCJtYXJrZXItZW5kIiwibWFya2VyLW1pZCIsIm1hcmtlci1zdGFydCIsInNoYXBlLXJlbmRlcmluZyIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1pdGVybGltaXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInRleHQtcmVuZGVyaW5nIiwiYmFzZWxpbmUtc2hpZnQiLCJkb21pbmFudC1iYXNlbGluZSIsImdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwiLCJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCIsInRleHQtYW5jaG9yIiwid3JpdGluZy1tb2RlIl0saj1iKGkpLGs9WyJzY3JvbGxiYXItYXJyb3ctY29sb3IiLCJzY3JvbGxiYXItYmFzZS1jb2xvciIsInNjcm9sbGJhci1kYXJrLXNoYWRvdy1jb2xvciIsInNjcm9sbGJhci1mYWNlLWNvbG9yIiwic2Nyb2xsYmFyLWhpZ2hsaWdodC1jb2xvciIsInNjcm9sbGJhci1zaGFkb3ctY29sb3IiLCJzY3JvbGxiYXItM2QtbGlnaHQtY29sb3IiLCJzY3JvbGxiYXItdHJhY2stY29sb3IiLCJzaGFwZS1pbnNpZGUiLCJzZWFyY2hmaWVsZC1jYW5jZWwtYnV0dG9uIiwic2VhcmNoZmllbGQtZGVjb3JhdGlvbiIsInNlYXJjaGZpZWxkLXJlc3VsdHMtYnV0dG9uIiwic2VhcmNoZmllbGQtcmVzdWx0cy1kZWNvcmF0aW9uIiwiem9vbSJdLGw9YihrKSxtPVsiZm9udC1mYW1pbHkiLCJzcmMiLCJ1bmljb2RlLXJhbmdlIiwiZm9udC12YXJpYW50IiwiZm9udC1mZWF0dXJlLXNldHRpbmdzIiwiZm9udC1zdHJldGNoIiwiZm9udC13ZWlnaHQiLCJmb250LXN0eWxlIl0sbj1iKG0pLG89WyJhZGRpdGl2ZS1zeW1ib2xzIiwiZmFsbGJhY2siLCJuZWdhdGl2ZSIsInBhZCIsInByZWZpeCIsInJhbmdlIiwic3BlYWstYXMiLCJzdWZmaXgiLCJzeW1ib2xzIiwic3lzdGVtIl0scD1iKG8pLHE9WyJhbGljZWJsdWUiLCJhbnRpcXVld2hpdGUiLCJhcXVhIiwiYXF1YW1hcmluZSIsImF6dXJlIiwiYmVpZ2UiLCJiaXNxdWUiLCJibGFjayIsImJsYW5jaGVkYWxtb25kIiwiYmx1ZSIsImJsdWV2aW9sZXQiLCJicm93biIsImJ1cmx5d29vZCIsImNhZGV0Ymx1ZSIsImNoYXJ0cmV1c2UiLCJjaG9jb2xhdGUiLCJjb3JhbCIsImNvcm5mbG93ZXJibHVlIiwiY29ybnNpbGsiLCJjcmltc29uIiwiY3lhbiIsImRhcmtibHVlIiwiZGFya2N5YW4iLCJkYXJrZ29sZGVucm9kIiwiZGFya2dyYXkiLCJkYXJrZ3JlZW4iLCJkYXJra2hha2kiLCJkYXJrbWFnZW50YSIsImRhcmtvbGl2ZWdyZWVuIiwiZGFya29yYW5nZSIsImRhcmtvcmNoaWQiLCJkYXJrcmVkIiwiZGFya3NhbG1vbiIsImRhcmtzZWFncmVlbiIsImRhcmtzbGF0ZWJsdWUiLCJkYXJrc2xhdGVncmF5IiwiZGFya3R1cnF1b2lzZSIsImRhcmt2aW9sZXQiLCJkZWVwcGluayIsImRlZXBza3libHVlIiwiZGltZ3JheSIsImRvZGdlcmJsdWUiLCJmaXJlYnJpY2siLCJmbG9yYWx3aGl0ZSIsImZvcmVzdGdyZWVuIiwiZnVjaHNpYSIsImdhaW5zYm9ybyIsImdob3N0d2hpdGUiLCJnb2xkIiwiZ29sZGVucm9kIiwiZ3JheSIsImdyZXkiLCJncmVlbiIsImdyZWVueWVsbG93IiwiaG9uZXlkZXciLCJob3RwaW5rIiwiaW5kaWFucmVkIiwiaW5kaWdvIiwiaXZvcnkiLCJraGFraSIsImxhdmVuZGVyIiwibGF2ZW5kZXJibHVzaCIsImxhd25ncmVlbiIsImxlbW9uY2hpZmZvbiIsImxpZ2h0Ymx1ZSIsImxpZ2h0Y29yYWwiLCJsaWdodGN5YW4iLCJsaWdodGdvbGRlbnJvZHllbGxvdyIsImxpZ2h0Z3JheSIsImxpZ2h0Z3JlZW4iLCJsaWdodHBpbmsiLCJsaWdodHNhbG1vbiIsImxpZ2h0c2VhZ3JlZW4iLCJsaWdodHNreWJsdWUiLCJsaWdodHNsYXRlZ3JheSIsImxpZ2h0c3RlZWxibHVlIiwibGlnaHR5ZWxsb3ciLCJsaW1lIiwibGltZWdyZWVuIiwibGluZW4iLCJtYWdlbnRhIiwibWFyb29uIiwibWVkaXVtYXF1YW1hcmluZSIsIm1lZGl1bWJsdWUiLCJtZWRpdW1vcmNoaWQiLCJtZWRpdW1wdXJwbGUiLCJtZWRpdW1zZWFncmVlbiIsIm1lZGl1bXNsYXRlYmx1ZSIsIm1lZGl1bXNwcmluZ2dyZWVuIiwibWVkaXVtdHVycXVvaXNlIiwibWVkaXVtdmlvbGV0cmVkIiwibWlkbmlnaHRibHVlIiwibWludGNyZWFtIiwibWlzdHlyb3NlIiwibW9jY2FzaW4iLCJuYXZham93aGl0ZSIsIm5hdnkiLCJvbGRsYWNlIiwib2xpdmUiLCJvbGl2ZWRyYWIiLCJvcmFuZ2UiLCJvcmFuZ2VyZWQiLCJvcmNoaWQiLCJwYWxlZ29sZGVucm9kIiwicGFsZWdyZWVuIiwicGFsZXR1cnF1b2lzZSIsInBhbGV2aW9sZXRyZWQiLCJwYXBheWF3aGlwIiwicGVhY2hwdWZmIiwicGVydSIsInBpbmsiLCJwbHVtIiwicG93ZGVyYmx1ZSIsInB1cnBsZSIsInJlYmVjY2FwdXJwbGUiLCJyZWQiLCJyb3N5YnJvd24iLCJyb3lhbGJsdWUiLCJzYWRkbGVicm93biIsInNhbG1vbiIsInNhbmR5YnJvd24iLCJzZWFncmVlbiIsInNlYXNoZWxsIiwic2llbm5hIiwic2lsdmVyIiwic2t5Ymx1ZSIsInNsYXRlYmx1ZSIsInNsYXRlZ3JheSIsInNub3ciLCJzcHJpbmdncmVlbiIsInN0ZWVsYmx1ZSIsInRhbiIsInRlYWwiLCJ0aGlzdGxlIiwidG9tYXRvIiwidHVycXVvaXNlIiwidmlvbGV0Iiwid2hlYXQiLCJ3aGl0ZSIsIndoaXRlc21va2UiLCJ5ZWxsb3ciLCJ5ZWxsb3dncmVlbiJdLHI9YihxKSxzPVsiYWJvdmUiLCJhYnNvbHV0ZSIsImFjdGl2ZWJvcmRlciIsImFkZGl0aXZlIiwiYWN0aXZlY2FwdGlvbiIsImFmYXIiLCJhZnRlci13aGl0ZS1zcGFjZSIsImFoZWFkIiwiYWxpYXMiLCJhbGwiLCJhbGwtc2Nyb2xsIiwiYWxwaGFiZXRpYyIsImFsdGVybmF0ZSIsImFsd2F5cyIsImFtaGFyaWMiLCJhbWhhcmljLWFiZWdlZGUiLCJhbnRpYWxpYXNlZCIsImFwcHdvcmtzcGFjZSIsImFyYWJpYy1pbmRpYyIsImFybWVuaWFuIiwiYXN0ZXJpc2tzIiwiYXR0ciIsImF1dG8iLCJhdm9pZCIsImF2b2lkLWNvbHVtbiIsImF2b2lkLXBhZ2UiLCJhdm9pZC1yZWdpb24iLCJiYWNrZ3JvdW5kIiwiYmFja3dhcmRzIiwiYmFzZWxpbmUiLCJiZWxvdyIsImJpZGktb3ZlcnJpZGUiLCJiaW5hcnkiLCJiZW5nYWxpIiwiYmxpbmsiLCJibG9jayIsImJsb2NrLWF4aXMiLCJib2xkIiwiYm9sZGVyIiwiYm9yZGVyIiwiYm9yZGVyLWJveCIsImJvdGgiLCJib3R0b20iLCJicmVhayIsImJyZWFrLWFsbCIsImJyZWFrLXdvcmQiLCJidWxsZXRzIiwiYnV0dG9uIiwiYnV0dG9uLWJldmVsIiwiYnV0dG9uZmFjZSIsImJ1dHRvbmhpZ2hsaWdodCIsImJ1dHRvbnNoYWRvdyIsImJ1dHRvbnRleHQiLCJjYWxjIiwiY2FtYm9kaWFuIiwiY2FwaXRhbGl6ZSIsImNhcHMtbG9jay1pbmRpY2F0b3IiLCJjYXB0aW9uIiwiY2FwdGlvbnRleHQiLCJjYXJldCIsImNlbGwiLCJjZW50ZXIiLCJjaGVja2JveCIsImNpcmNsZSIsImNqay1kZWNpbWFsIiwiY2prLWVhcnRobHktYnJhbmNoIiwiY2prLWhlYXZlbmx5LXN0ZW0iLCJjamstaWRlb2dyYXBoaWMiLCJjbGVhciIsImNsaXAiLCJjbG9zZS1xdW90ZSIsImNvbC1yZXNpemUiLCJjb2xsYXBzZSIsImNvbHVtbiIsImNvbXBhY3QiLCJjb25kZW5zZWQiLCJjb250YWluIiwiY29udGVudCIsImNvbnRlbnQtYm94IiwiY29udGV4dC1tZW51IiwiY29udGludW91cyIsImNvcHkiLCJjb3VudGVyIiwiY291bnRlcnMiLCJjb3ZlciIsImNyb3AiLCJjcm9zcyIsImNyb3NzaGFpciIsImN1cnJlbnRjb2xvciIsImN1cnNpdmUiLCJjeWNsaWMiLCJkYXNoZWQiLCJkZWNpbWFsIiwiZGVjaW1hbC1sZWFkaW5nLXplcm8iLCJkZWZhdWx0IiwiZGVmYXVsdC1idXR0b24iLCJkZXN0aW5hdGlvbi1hdG9wIiwiZGVzdGluYXRpb24taW4iLCJkZXN0aW5hdGlvbi1vdXQiLCJkZXN0aW5hdGlvbi1vdmVyIiwiZGV2YW5hZ2FyaSIsImRpc2MiLCJkaXNjYXJkIiwiZGlzY2xvc3VyZS1jbG9zZWQiLCJkaXNjbG9zdXJlLW9wZW4iLCJkb2N1bWVudCIsImRvdC1kYXNoIiwiZG90LWRvdC1kYXNoIiwiZG90dGVkIiwiZG91YmxlIiwiZG93biIsImUtcmVzaXplIiwiZWFzZSIsImVhc2UtaW4iLCJlYXNlLWluLW91dCIsImVhc2Utb3V0IiwiZWxlbWVudCIsImVsbGlwc2UiLCJlbGxpcHNpcyIsImVtYmVkIiwiZW5kIiwiZXRoaW9waWMiLCJldGhpb3BpYy1hYmVnZWRlIiwiZXRoaW9waWMtYWJlZ2VkZS1hbS1ldCIsImV0aGlvcGljLWFiZWdlZGUtZ2V6IiwiZXRoaW9waWMtYWJlZ2VkZS10aS1lciIsImV0aGlvcGljLWFiZWdlZGUtdGktZXQiLCJldGhpb3BpYy1oYWxlaGFtZS1hYS1lciIsImV0aGlvcGljLWhhbGVoYW1lLWFhLWV0IiwiZXRoaW9waWMtaGFsZWhhbWUtYW0tZXQiLCJldGhpb3BpYy1oYWxlaGFtZS1nZXoiLCJldGhpb3BpYy1oYWxlaGFtZS1vbS1ldCIsImV0aGlvcGljLWhhbGVoYW1lLXNpZC1ldCIsImV0aGlvcGljLWhhbGVoYW1lLXNvLWV0IiwiZXRoaW9waWMtaGFsZWhhbWUtdGktZXIiLCJldGhpb3BpYy1oYWxlaGFtZS10aS1ldCIsImV0aGlvcGljLWhhbGVoYW1lLXRpZyIsImV0aGlvcGljLW51bWVyaWMiLCJldy1yZXNpemUiLCJleHBhbmRlZCIsImV4dGVuZHMiLCJleHRyYS1jb25kZW5zZWQiLCJleHRyYS1leHBhbmRlZCIsImZhbnRhc3kiLCJmYXN0IiwiZmlsbCIsImZpeGVkIiwiZmxhdCIsImZsZXgiLCJmb290bm90ZXMiLCJmb3J3YXJkcyIsImZyb20iLCJnZW9tZXRyaWNQcmVjaXNpb24iLCJnZW9yZ2lhbiIsImdyYXl0ZXh0IiwiZ3Jvb3ZlIiwiZ3VqYXJhdGkiLCJndXJtdWtoaSIsImhhbmQiLCJoYW5ndWwiLCJoYW5ndWwtY29uc29uYW50IiwiaGVicmV3IiwiaGVscCIsImhpZGRlbiIsImhpZGUiLCJoaWdoZXIiLCJoaWdobGlnaHQiLCJoaWdobGlnaHR0ZXh0IiwiaGlyYWdhbmEiLCJoaXJhZ2FuYS1pcm9oYSIsImhvcml6b250YWwiLCJoc2wiLCJoc2xhIiwiaWNvbiIsImlnbm9yZSIsImluYWN0aXZlYm9yZGVyIiwiaW5hY3RpdmVjYXB0aW9uIiwiaW5hY3RpdmVjYXB0aW9udGV4dCIsImluZmluaXRlIiwiaW5mb2JhY2tncm91bmQiLCJpbmZvdGV4dCIsImluaGVyaXQiLCJpbml0aWFsIiwiaW5saW5lIiwiaW5saW5lLWF4aXMiLCJpbmxpbmUtYmxvY2siLCJpbmxpbmUtZmxleCIsImlubGluZS10YWJsZSIsImluc2V0IiwiaW5zaWRlIiwiaW50cmluc2ljIiwiaW52ZXJ0IiwiaXRhbGljIiwiamFwYW5lc2UtZm9ybWFsIiwiamFwYW5lc2UtaW5mb3JtYWwiLCJqdXN0aWZ5Iiwia2FubmFkYSIsImthdGFrYW5hIiwia2F0YWthbmEtaXJvaGEiLCJrZWVwLWFsbCIsImtobWVyIiwia29yZWFuLWhhbmd1bC1mb3JtYWwiLCJrb3JlYW4taGFuamEtZm9ybWFsIiwia29yZWFuLWhhbmphLWluZm9ybWFsIiwibGFuZHNjYXBlIiwibGFvIiwibGFyZ2UiLCJsYXJnZXIiLCJsZWZ0IiwibGV2ZWwiLCJsaWdodGVyIiwibGluZS10aHJvdWdoIiwibGluZWFyIiwibGluZWFyLWdyYWRpZW50IiwibGluZXMiLCJsaXN0LWl0ZW0iLCJsaXN0Ym94IiwibGlzdGl0ZW0iLCJsb2NhbCIsImxvZ2ljYWwiLCJsb3VkIiwibG93ZXIiLCJsb3dlci1hbHBoYSIsImxvd2VyLWFybWVuaWFuIiwibG93ZXItZ3JlZWsiLCJsb3dlci1oZXhhZGVjaW1hbCIsImxvd2VyLWxhdGluIiwibG93ZXItbm9yd2VnaWFuIiwibG93ZXItcm9tYW4iLCJsb3dlcmNhc2UiLCJsdHIiLCJtYWxheWFsYW0iLCJtYXRjaCIsIm1hdHJpeCIsIm1hdHJpeDNkIiwibWVkaWEtY29udHJvbHMtYmFja2dyb3VuZCIsIm1lZGlhLWN1cnJlbnQtdGltZS1kaXNwbGF5IiwibWVkaWEtZnVsbHNjcmVlbi1idXR0b24iLCJtZWRpYS1tdXRlLWJ1dHRvbiIsIm1lZGlhLXBsYXktYnV0dG9uIiwibWVkaWEtcmV0dXJuLXRvLXJlYWx0aW1lLWJ1dHRvbiIsIm1lZGlhLXJld2luZC1idXR0b24iLCJtZWRpYS1zZWVrLWJhY2stYnV0dG9uIiwibWVkaWEtc2Vlay1mb3J3YXJkLWJ1dHRvbiIsIm1lZGlhLXNsaWRlciIsIm1lZGlhLXNsaWRlcnRodW1iIiwibWVkaWEtdGltZS1yZW1haW5pbmctZGlzcGxheSIsIm1lZGlhLXZvbHVtZS1zbGlkZXIiLCJtZWRpYS12b2x1bWUtc2xpZGVyLWNvbnRhaW5lciIsIm1lZGlhLXZvbHVtZS1zbGlkZXJ0aHVtYiIsIm1lZGl1bSIsIm1lbnUiLCJtZW51bGlzdCIsIm1lbnVsaXN0LWJ1dHRvbiIsIm1lbnVsaXN0LXRleHQiLCJtZW51bGlzdC10ZXh0ZmllbGQiLCJtZW51dGV4dCIsIm1lc3NhZ2UtYm94IiwibWlkZGxlIiwibWluLWludHJpbnNpYyIsIm1peCIsIm1vbmdvbGlhbiIsIm1vbm9zcGFjZSIsIm1vdmUiLCJtdWx0aXBsZSIsIm15YW5tYXIiLCJuLXJlc2l6ZSIsIm5hcnJvd2VyIiwibmUtcmVzaXplIiwibmVzdy1yZXNpemUiLCJuby1jbG9zZS1xdW90ZSIsIm5vLWRyb3AiLCJuby1vcGVuLXF1b3RlIiwibm8tcmVwZWF0Iiwibm9uZSIsIm5vcm1hbCIsIm5vdC1hbGxvd2VkIiwibm93cmFwIiwibnMtcmVzaXplIiwibnVtYmVycyIsIm51bWVyaWMiLCJudy1yZXNpemUiLCJud3NlLXJlc2l6ZSIsIm9ibGlxdWUiLCJvY3RhbCIsIm9wZW4tcXVvdGUiLCJvcHRpbWl6ZUxlZ2liaWxpdHkiLCJvcHRpbWl6ZVNwZWVkIiwib3JpeWEiLCJvcm9tbyIsIm91dHNldCIsIm91dHNpZGUiLCJvdXRzaWRlLXNoYXBlIiwib3ZlcmxheSIsIm92ZXJsaW5lIiwicGFkZGluZyIsInBhZGRpbmctYm94IiwicGFpbnRlZCIsInBhZ2UiLCJwYXVzZWQiLCJwZXJzaWFuIiwicGVyc3BlY3RpdmUiLCJwbHVzLWRhcmtlciIsInBsdXMtbGlnaHRlciIsInBvaW50ZXIiLCJwb2x5Z29uIiwicG9ydHJhaXQiLCJwcmUiLCJwcmUtbGluZSIsInByZS13cmFwIiwicHJlc2VydmUtM2QiLCJwcm9ncmVzcyIsInB1c2gtYnV0dG9uIiwicmFkaWFsLWdyYWRpZW50IiwicmFkaW8iLCJyZWFkLW9ubHkiLCJyZWFkLXdyaXRlIiwicmVhZC13cml0ZS1wbGFpbnRleHQtb25seSIsInJlY3RhbmdsZSIsInJlZ2lvbiIsInJlbGF0aXZlIiwicmVwZWF0IiwicmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCIsInJlcGVhdGluZy1yYWRpYWwtZ3JhZGllbnQiLCJyZXBlYXQteCIsInJlcGVhdC15IiwicmVzZXQiLCJyZXZlcnNlIiwicmdiIiwicmdiYSIsInJpZGdlIiwicmlnaHQiLCJyb3RhdGUiLCJyb3RhdGUzZCIsInJvdGF0ZVgiLCJyb3RhdGVZIiwicm90YXRlWiIsInJvdW5kIiwicm93LXJlc2l6ZSIsInJ0bCIsInJ1bi1pbiIsInJ1bm5pbmciLCJzLXJlc2l6ZSIsInNhbnMtc2VyaWYiLCJzY2FsZSIsInNjYWxlM2QiLCJzY2FsZVgiLCJzY2FsZVkiLCJzY2FsZVoiLCJzY3JvbGwiLCJzY3JvbGxiYXIiLCJzZS1yZXNpemUiLCJzZWFyY2hmaWVsZCIsInNlYXJjaGZpZWxkLWNhbmNlbC1idXR0b24iLCJzZWFyY2hmaWVsZC1kZWNvcmF0aW9uIiwic2VhcmNoZmllbGQtcmVzdWx0cy1idXR0b24iLCJzZWFyY2hmaWVsZC1yZXN1bHRzLWRlY29yYXRpb24iLCJzZW1pLWNvbmRlbnNlZCIsInNlbWktZXhwYW5kZWQiLCJzZXBhcmF0ZSIsInNlcmlmIiwic2hvdyIsInNpZGFtYSIsInNpbXAtY2hpbmVzZS1mb3JtYWwiLCJzaW1wLWNoaW5lc2UtaW5mb3JtYWwiLCJzaW5nbGUiLCJza2V3Iiwic2tld1giLCJza2V3WSIsInNraXAtd2hpdGUtc3BhY2UiLCJzbGlkZSIsInNsaWRlci1ob3Jpem9udGFsIiwic2xpZGVyLXZlcnRpY2FsIiwic2xpZGVydGh1bWItaG9yaXpvbnRhbCIsInNsaWRlcnRodW1iLXZlcnRpY2FsIiwic2xvdyIsInNtYWxsIiwic21hbGwtY2FwcyIsInNtYWxsLWNhcHRpb24iLCJzbWFsbGVyIiwic29saWQiLCJzb21hbGkiLCJzb3VyY2UtYXRvcCIsInNvdXJjZS1pbiIsInNvdXJjZS1vdXQiLCJzb3VyY2Utb3ZlciIsInNwYWNlIiwic3BlbGwtb3V0Iiwic3F1YXJlIiwic3F1YXJlLWJ1dHRvbiIsInN0YXJ0Iiwic3RhdGljIiwic3RhdHVzLWJhciIsInN0cmV0Y2giLCJzdHJva2UiLCJzdWIiLCJzdWJwaXhlbC1hbnRpYWxpYXNlZCIsInN1cGVyIiwic3ctcmVzaXplIiwic3ltYm9saWMiLCJzeW1ib2xzIiwidGFibGUiLCJ0YWJsZS1jYXB0aW9uIiwidGFibGUtY2VsbCIsInRhYmxlLWNvbHVtbiIsInRhYmxlLWNvbHVtbi1ncm91cCIsInRhYmxlLWZvb3Rlci1ncm91cCIsInRhYmxlLWhlYWRlci1ncm91cCIsInRhYmxlLXJvdyIsInRhYmxlLXJvdy1ncm91cCIsInRhbWlsIiwidGVsdWd1IiwidGV4dCIsInRleHQtYm90dG9tIiwidGV4dC10b3AiLCJ0ZXh0YXJlYSIsInRleHRmaWVsZCIsInRoYWkiLCJ0aGljayIsInRoaW4iLCJ0aHJlZWRkYXJrc2hhZG93IiwidGhyZWVkZmFjZSIsInRocmVlZGhpZ2hsaWdodCIsInRocmVlZGxpZ2h0c2hhZG93IiwidGhyZWVkc2hhZG93IiwidGliZXRhbiIsInRpZ3JlIiwidGlncmlueWEtZXIiLCJ0aWdyaW55YS1lci1hYmVnZWRlIiwidGlncmlueWEtZXQiLCJ0aWdyaW55YS1ldC1hYmVnZWRlIiwidG8iLCJ0b3AiLCJ0cmFkLWNoaW5lc2UtZm9ybWFsIiwidHJhZC1jaGluZXNlLWluZm9ybWFsIiwidHJhbnNsYXRlIiwidHJhbnNsYXRlM2QiLCJ0cmFuc2xhdGVYIiwidHJhbnNsYXRlWSIsInRyYW5zbGF0ZVoiLCJ0cmFuc3BhcmVudCIsInVsdHJhLWNvbmRlbnNlZCIsInVsdHJhLWV4cGFuZGVkIiwidW5kZXJsaW5lIiwidXAiLCJ1cHBlci1hbHBoYSIsInVwcGVyLWFybWVuaWFuIiwidXBwZXItZ3JlZWsiLCJ1cHBlci1oZXhhZGVjaW1hbCIsInVwcGVyLWxhdGluIiwidXBwZXItbm9yd2VnaWFuIiwidXBwZXItcm9tYW4iLCJ1cHBlcmNhc2UiLCJ1cmR1IiwidXJsIiwidmFyIiwidmVydGljYWwiLCJ2ZXJ0aWNhbC10ZXh0IiwidmlzaWJsZSIsInZpc2libGVGaWxsIiwidmlzaWJsZVBhaW50ZWQiLCJ2aXNpYmxlU3Ryb2tlIiwidmlzdWFsIiwidy1yZXNpemUiLCJ3YWl0Iiwid2F2ZSIsIndpZGVyIiwid2luZG93Iiwid2luZG93ZnJhbWUiLCJ3aW5kb3d0ZXh0Iiwid29yZHMiLCJ4LWxhcmdlIiwieC1zbWFsbCIsInhvciIsInh4LWxhcmdlIiwieHgtc21hbGwiXSx0PWIocyksdT1jLmNvbmNhdChlKS5jb25jYXQoZykuY29uY2F0KGkpLmNvbmNhdChrKS5jb25jYXQocSkuY29uY2F0KHMpOw0KYS5yZWdpc3RlckhlbHBlcigiaGludFdvcmRzIiwiY3NzIix1KSxhLmRlZmluZU1JTUUoInRleHQvY3NzIix7ZG9jdW1lbnRUeXBlczpkLG1lZGlhVHlwZXM6ZixtZWRpYUZlYXR1cmVzOmgscHJvcGVydHlLZXl3b3JkczpqLG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkczpsLGZvbnRQcm9wZXJ0aWVzOm4sY291bnRlckRlc2NyaXB0b3JzOnAsY29sb3JLZXl3b3JkczpyLHZhbHVlS2V5d29yZHM6dCx0b2tlbkhvb2tzOnsiPCI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5tYXRjaCgiIS0tIik/KGIudG9rZW5pemU9dyx3KGEsYikpOiExfSwiLyI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5lYXQoIioiKT8oYi50b2tlbml6ZT12LHYoYSxiKSk6ITF9fSxuYW1lOiJjc3MifSksYS5kZWZpbmVNSU1FKCJ0ZXh0L3gtc2NzcyIse21lZGlhVHlwZXM6ZixtZWRpYUZlYXR1cmVzOmgscHJvcGVydHlLZXl3b3JkczpqLG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkczpsLGNvbG9yS2V5d29yZHM6cix2YWx1ZUtleXdvcmRzOnQsZm9udFByb3BlcnRpZXM6bixhbGxvd05lc3RlZDohMCx0b2tlbkhvb2tzOnsiLyI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5lYXQoIi8iKT8oYS5za2lwVG9FbmQoKSxbImNvbW1lbnQiLCJjb21tZW50Il0pOmEuZWF0KCIqIik/KGIudG9rZW5pemU9dix2KGEsYikpOlsib3BlcmF0b3IiLCJvcGVyYXRvciJdfSwiOiI6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWF0Y2goL1xzKlx7Lyk/W251bGwsInsiXTohMX0sJDpmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXRjaCgvXltcdy1dKy8pLGEubWF0Y2goL15ccyo6LywhMSk/WyJ2YXJpYWJsZS0yIiwidmFyaWFibGUtZGVmaW5pdGlvbiJdOlsidmFyaWFibGUtMiIsInZhcmlhYmxlIl19LCIjIjpmdW5jdGlvbihhKXtyZXR1cm4gYS5lYXQoInsiKT9bbnVsbCwiaW50ZXJwb2xhdGlvbiJdOiExfX0sbmFtZToiY3NzIixoZWxwZXJUeXBlOiJzY3NzIn0pLGEuZGVmaW5lTUlNRSgidGV4dC94LWxlc3MiLHttZWRpYVR5cGVzOmYsbWVkaWFGZWF0dXJlczpoLHByb3BlcnR5S2V5d29yZHM6aixub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHM6bCxjb2xvcktleXdvcmRzOnIsdmFsdWVLZXl3b3Jkczp0LGZvbnRQcm9wZXJ0aWVzOm4sYWxsb3dOZXN0ZWQ6ITAsdG9rZW5Ib29rczp7Ii8iOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZWF0KCIvIik/KGEuc2tpcFRvRW5kKCksWyJjb21tZW50IiwiY29tbWVudCJdKTphLmVhdCgiKiIpPyhiLnRva2VuaXplPXYsdihhLGIpKTpbIm9wZXJhdG9yIiwib3BlcmF0b3IiXX0sIkAiOmZ1bmN0aW9uKGEpe3JldHVybiBhLm1hdGNoKC9eKGNoYXJzZXR8ZG9jdW1lbnR8Zm9udC1mYWNlfGltcG9ydHwoLShtb3p8bXN8b3x3ZWJraXQpLSk/a2V5ZnJhbWVzfG1lZGlhfG5hbWVzcGFjZXxwYWdlfHN1cHBvcnRzKVxiLywhMSk/ITE6KGEuZWF0V2hpbGUoL1tcd1xcXC1dLyksYS5tYXRjaCgvXlxzKjovLCExKT9bInZhcmlhYmxlLTIiLCJ2YXJpYWJsZS1kZWZpbml0aW9uIl06WyJ2YXJpYWJsZS0yIiwidmFyaWFibGUiXSl9LCImIjpmdW5jdGlvbigpe3JldHVyblsiYXRvbSIsImF0b20iXX19LG5hbWU6ImNzcyIsaGVscGVyVHlwZToibGVzcyJ9KX0pLGZ1bmN0aW9uKGEpeyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGU/YShyZXF1aXJlKCIuLi8uLi9saWIvY29kZW1pcnJvciIpLHJlcXVpcmUoIi4uL3htbC94bWwiKSxyZXF1aXJlKCIuLi9qYXZhc2NyaXB0L2phdmFzY3JpcHQiKSxyZXF1aXJlKCIuLi9jc3MvY3NzIikpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiLi4vLi4vbGliL2NvZGVtaXJyb3IiLCIuLi94bWwveG1sIiwiLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0IiwiLi4vY3NzL2NzcyJdLGEpOmEoQ29kZU1pcnJvcil9KGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjthLmRlZmluZU1vZGUoImh0bWxtaXhlZCIsZnVuY3Rpb24oYixjKXtmdW5jdGlvbiBqKGEsYil7dmFyIGM9Yi5odG1sU3RhdGUudGFnTmFtZTtjJiYoYz1jLnRvTG93ZXJDYXNlKCkpO3ZhciBnPWQudG9rZW4oYSxiLmh0bWxTdGF0ZSk7aWYoInNjcmlwdCI9PWMmJi9cYnRhZ1xiLy50ZXN0KGcpJiYiPiI9PWEuY3VycmVudCgpKXt2YXIgaD1hLnN0cmluZy5zbGljZShNYXRoLm1heCgwLGEucG9zLTEwMCksYS5wb3MpLm1hdGNoKC9cYnR5cGVccyo9XHMqKCJbXiJdKyJ8J1teJ10rJ3xcUyspW148XSokL2kpO2g9aD9oWzFdOiIiLGgmJi9bXCJcJ10vLnRlc3QoaC5jaGFyQXQoMCkpJiYoaD1oLnNsaWNlKDEsaC5sZW5ndGgtMSkpO2Zvcih2YXIgaT0wO2k8Zi5sZW5ndGg7KytpKXt2YXIgaj1mW2ldO2lmKCJzdHJpbmciPT10eXBlb2Ygai5tYXRjaGVzP2g9PWoubWF0Y2hlczpqLm1hdGNoZXMudGVzdChoKSl7ai5tb2RlJiYoYi50b2tlbj1sLGIubG9jYWxNb2RlPWoubW9kZSxiLmxvY2FsU3RhdGU9ai5tb2RlLnN0YXJ0U3RhdGUmJmoubW9kZS5zdGFydFN0YXRlKGQuaW5kZW50KGIuaHRtbFN0YXRlLCIiKSkpO2JyZWFrfX19ZWxzZSJzdHlsZSI9PWMmJi9cYnRhZ1xiLy50ZXN0KGcpJiYiPiI9PWEuY3VycmVudCgpJiYoYi50b2tlbj1tLGIubG9jYWxNb2RlPWUsYi5sb2NhbFN0YXRlPWUuc3RhcnRTdGF0ZShkLmluZGVudChiLmh0bWxTdGF0ZSwiIikpKTtyZXR1cm4gZ31mdW5jdGlvbiBrKGEsYixjKXt2YXIgZixkPWEuY3VycmVudCgpLGU9ZC5zZWFyY2goYik7cmV0dXJuIGU+LTE/YS5iYWNrVXAoZC5sZW5ndGgtZSk6KGY9ZC5tYXRjaCgvPFwvPyQvKSkmJihhLmJhY2tVcChkLmxlbmd0aCksYS5tYXRjaChiLCExKXx8YS5tYXRjaChkKSksY31mdW5jdGlvbiBsKGEsYil7cmV0dXJuIGEubWF0Y2goL148XC9ccypzY3JpcHRccyo+L2ksITEpPyhiLnRva2VuPWosYi5sb2NhbFN0YXRlPWIubG9jYWxNb2RlPW51bGwsbnVsbCk6ayhhLC88XC9ccypzY3JpcHRccyo+LyxiLmxvY2FsTW9kZS50b2tlbihhLGIubG9jYWxTdGF0ZSkpfWZ1bmN0aW9uIG0oYSxiKXtyZXR1cm4gYS5tYXRjaCgvXjxcL1xzKnN0eWxlXHMqPi9pLCExKT8oYi50b2tlbj1qLGIubG9jYWxTdGF0ZT1iLmxvY2FsTW9kZT1udWxsLG51bGwpOmsoYSwvPFwvXHMqc3R5bGVccyo+LyxlLnRva2VuKGEsYi5sb2NhbFN0YXRlKSl9dmFyIGQ9YS5nZXRNb2RlKGIse25hbWU6InhtbCIsaHRtbE1vZGU6ITAsbXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yOmMubXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yLG11bHRpbGluZVRhZ0luZGVudFBhc3RUYWc6Yy5tdWx0aWxpbmVUYWdJbmRlbnRQYXN0VGFnfSksZT1hLmdldE1vZGUoYiwiY3NzIiksZj1bXSxnPWMmJmMuc2NyaXB0VHlwZXM7aWYoZi5wdXNoKHttYXRjaGVzOi9eKD86dGV4dHxhcHBsaWNhdGlvbilcLyg/OngtKT8oPzpqYXZhfGVjbWEpc2NyaXB0JHxeJC9pLG1vZGU6YS5nZXRNb2RlKGIsImphdmFzY3JpcHQiKX0pLGcpZm9yKHZhciBoPTA7aDxnLmxlbmd0aDsrK2gpe3ZhciBpPWdbaF07Zi5wdXNoKHttYXRjaGVzOmkubWF0Y2hlcyxtb2RlOmkubW9kZSYmYS5nZXRNb2RlKGIsaS5tb2RlKX0pfXJldHVybiBmLnB1c2goe21hdGNoZXM6Ly4vLG1vZGU6YS5nZXRNb2RlKGIsInRleHQvcGxhaW4iKX0pLHtzdGFydFN0YXRlOmZ1bmN0aW9uKCl7dmFyIGE9ZC5zdGFydFN0YXRlKCk7cmV0dXJue3Rva2VuOmosbG9jYWxNb2RlOm51bGwsbG9jYWxTdGF0ZTpudWxsLGh0bWxTdGF0ZTphfX0sY29weVN0YXRlOmZ1bmN0aW9uKGIpe2lmKGIubG9jYWxTdGF0ZSl2YXIgYz1hLmNvcHlTdGF0ZShiLmxvY2FsTW9kZSxiLmxvY2FsU3RhdGUpO3JldHVybnt0b2tlbjpiLnRva2VuLGxvY2FsTW9kZTpiLmxvY2FsTW9kZSxsb2NhbFN0YXRlOmMsaHRtbFN0YXRlOmEuY29weVN0YXRlKGQsYi5odG1sU3RhdGUpfX0sdG9rZW46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi50b2tlbihhLGIpfSxpbmRlbnQ6ZnVuY3Rpb24oYixjKXtyZXR1cm4hYi5sb2NhbE1vZGV8fC9eXHMqPFwvLy50ZXN0KGMpP2QuaW5kZW50KGIuaHRtbFN0YXRlLGMpOmIubG9jYWxNb2RlLmluZGVudD9iLmxvY2FsTW9kZS5pbmRlbnQoYi5sb2NhbFN0YXRlLGMpOmEuUGFzc30saW5uZXJNb2RlOmZ1bmN0aW9uKGEpe3JldHVybntzdGF0ZTphLmxvY2FsU3RhdGV8fGEuaHRtbFN0YXRlLG1vZGU6YS5sb2NhbE1vZGV8fGR9fX19LCJ4bWwiLCJqYXZhc2NyaXB0IiwiY3NzIiksYS5kZWZpbmVNSU1FKCJ0ZXh0L2h0bWwiLCJodG1sbWl4ZWQiKX0pLGZ1bmN0aW9uKGEpeyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGU/YShyZXF1aXJlKCIuLi8uLi9saWIvY29kZW1pcnJvciIpLHJlcXVpcmUoIi4uL2h0bWxtaXhlZC9odG1sbWl4ZWQiKSxyZXF1aXJlKCIuLi9jbGlrZS9jbGlrZSIpKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbIi4uLy4uL2xpYi9jb2RlbWlycm9yIiwiLi4vaHRtbG1peGVkL2h0bWxtaXhlZCIsIi4uL2NsaWtlL2NsaWtlIl0sYSk6YShDb2RlTWlycm9yKX0oZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYSl7Zm9yKHZhciBiPXt9LGM9YS5zcGxpdCgiICIpLGQ9MDtkPGMubGVuZ3RoOysrZCliW2NbZF1dPSEwO3JldHVybiBifWZ1bmN0aW9uIGMoYSxiKXtyZXR1cm4gMD09YS5sZW5ndGg/ZChiKTpmdW5jdGlvbihlLGYpe2Zvcih2YXIgZz1hWzBdLGg9MDtoPGcubGVuZ3RoO2grKylpZihlLm1hdGNoKGdbaF1bMF0pKXJldHVybiBmLnRva2VuaXplPWMoYS5zbGljZSgxKSxiKSxnW2hdWzFdO3JldHVybiBmLnRva2VuaXplPWQoYiksInN0cmluZyJ9fWZ1bmN0aW9uIGQoYSl7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGUoYixjLGEpfX1mdW5jdGlvbiBlKGEsYixkKXtpZihhLm1hdGNoKCIkeyIsITEpfHxhLm1hdGNoKCJ7JCIsITEpKXJldHVybiBiLnRva2VuaXplPW51bGwsInN0cmluZyI7aWYoYS5tYXRjaCgvXlwkW2EtekEtWl9dW2EtekEtWjAtOV9dKi8pKXJldHVybiBhLm1hdGNoKCJbIiwhMSkmJihiLnRva2VuaXplPWMoW1tbIlsiLG51bGxdXSxbWy9cZFtcd1wuXSovLCJudW1iZXIiXSxbL1wkW2EtekEtWl9dW2EtekEtWjAtOV9dKi8sInZhcmlhYmxlLTIiXSxbL1tcd1wkXSsvLCJ2YXJpYWJsZSJdXSxbWyJdIixudWxsXV1dLGQpKSxhLm1hdGNoKC9cLVw+XHcvLCExKSYmKGIudG9rZW5pemU9YyhbW1siLT4iLG51bGxdXSxbWy9bXHddKy8sInZhcmlhYmxlIl1dXSxkKSksInZhcmlhYmxlLTIiO2Zvcih2YXIgZT0hMTshYS5lb2woKSYmKGV8fCFhLm1hdGNoKCJ7JCIsITEpJiYhYS5tYXRjaCgvXihcJFthLXpBLVpfXVthLXpBLVowLTlfXSp8XCRceykvLCExKSk7KXtpZighZSYmYS5tYXRjaChkKSl7Yi50b2tlbml6ZT1udWxsLGIudG9rU3RhY2sucG9wKCksYi50b2tTdGFjay5wb3AoKTticmVha31lPSJcXCI9PWEubmV4dCgpJiYhZX1yZXR1cm4ic3RyaW5nIn12YXIgZj0iYWJzdHJhY3QgYW5kIGFycmF5IGFzIGJyZWFrIGNhc2UgY2F0Y2ggY2xhc3MgY2xvbmUgY29uc3QgY29udGludWUgZGVjbGFyZSBkZWZhdWx0IGRvIGVsc2UgZWxzZWlmIGVuZGRlY2xhcmUgZW5kZm9yIGVuZGZvcmVhY2ggZW5kaWYgZW5kc3dpdGNoIGVuZHdoaWxlIGV4dGVuZHMgZmluYWwgZm9yIGZvcmVhY2ggZnVuY3Rpb24gZ2xvYmFsIGdvdG8gaWYgaW1wbGVtZW50cyBpbnRlcmZhY2UgaW5zdGFuY2VvZiBuYW1lc3BhY2UgbmV3IG9yIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyBzdGF0aWMgc3dpdGNoIHRocm93IHRyYWl0IHRyeSB1c2UgdmFyIHdoaWxlIHhvciBkaWUgZWNobyBlbXB0eSBleGl0IGV2YWwgaW5jbHVkZSBpbmNsdWRlX29uY2UgaXNzZXQgbGlzdCByZXF1aXJlIHJlcXVpcmVfb25jZSByZXR1cm4gcHJpbnQgdW5zZXQgX19oYWx0X2NvbXBpbGVyIHNlbGYgc3RhdGljIHBhcmVudCB5aWVsZCBpbnN0ZWFkb2YgZmluYWxseSIsZz0idHJ1ZSBmYWxzZSBudWxsIFRSVUUgRkFMU0UgTlVMTCBfX0NMQVNTX18gX19ESVJfXyBfX0ZJTEVfXyBfX0xJTkVfXyBfX01FVEhPRF9fIF9fRlVOQ1RJT05fXyBfX05BTUVTUEFDRV9fIF9fVFJBSVRfXyIsaD0iZnVuY19udW1fYXJncyBmdW5jX2dldF9hcmcgZnVuY19nZXRfYXJncyBzdHJsZW4gc3RyY21wIHN0cm5jbXAgc3RyY2FzZWNtcCBzdHJuY2FzZWNtcCBlYWNoIGVycm9yX3JlcG9ydGluZyBkZWZpbmUgZGVmaW5lZCB0cmlnZ2VyX2Vycm9yIHVzZXJfZXJyb3Igc2V0X2Vycm9yX2hhbmRsZXIgcmVzdG9yZV9lcnJvcl9oYW5kbGVyIGdldF9kZWNsYXJlZF9jbGFzc2VzIGdldF9sb2FkZWRfZXh0ZW5zaW9ucyBleHRlbnNpb25fbG9hZGVkIGdldF9leHRlbnNpb25fZnVuY3MgZGVidWdfYmFja3RyYWNlIGNvbnN0YW50IGJpbjJoZXggaGV4MmJpbiBzbGVlcCB1c2xlZXAgdGltZSBta3RpbWUgZ21ta3RpbWUgc3RyZnRpbWUgZ21zdHJmdGltZSBzdHJ0b3RpbWUgZGF0ZSBnbWRhdGUgZ2V0ZGF0ZSBsb2NhbHRpbWUgY2hlY2tkYXRlIGZsdXNoIHdvcmR3cmFwIGh0bWxzcGVjaWFsY2hhcnMgaHRtbGVudGl0aWVzIGh0bWxfZW50aXR5X2RlY29kZSBtZDUgbWQ1X2ZpbGUgY3JjMzIgZ2V0aW1hZ2VzaXplIGltYWdlX3R5cGVfdG9fbWltZV90eXBlIHBocGluZm8gcGhwdmVyc2lvbiBwaHBjcmVkaXRzIHN0cm5hdGNtcCBzdHJuYXRjYXNlY21wIHN1YnN0cl9jb3VudCBzdHJzcG4gc3RyY3NwbiBzdHJ0b2sgc3RydG91cHBlciBzdHJ0b2xvd2VyIHN0cnBvcyBzdHJycG9zIHN0cnJldiBoZWJyZXYgaGVicmV2YyBubDJiciBiYXNlbmFtZSBkaXJuYW1lIHBhdGhpbmZvIHN0cmlwc2xhc2hlcyBzdHJpcGNzbGFzaGVzIHN0cnN0ciBzdHJpc3RyIHN0cnJjaHIgc3RyX3NodWZmbGUgc3RyX3dvcmRfY291bnQgc3RyY29sbCBzdWJzdHIgc3Vic3RyX3JlcGxhY2UgcXVvdGVtZXRhIHVjZmlyc3QgdWN3b3JkcyBzdHJ0ciBhZGRzbGFzaGVzIGFkZGNzbGFzaGVzIHJ0cmltIHN0cl9yZXBsYWNlIHN0cl9yZXBlYXQgY291bnRfY2hhcnMgY2h1bmtfc3BsaXQgdHJpbSBsdHJpbSBzdHJpcF90YWdzIHNpbWlsYXJfdGV4dCBleHBsb2RlIGltcGxvZGUgc2V0bG9jYWxlIGxvY2FsZWNvbnYgcGFyc2Vfc3RyIHN0cl9wYWQgY2hvcCBzdHJjaHIgc3ByaW50ZiBwcmludGYgdnByaW50ZiB2c3ByaW50ZiBzc2NhbmYgZnNjYW5mIHBhcnNlX3VybCB1cmxlbmNvZGUgdXJsZGVjb2RlIHJhd3VybGVuY29kZSByYXd1cmxkZWNvZGUgcmVhZGxpbmsgbGlua2luZm8gbGluayB1bmxpbmsgZXhlYyBzeXN0ZW0gZXNjYXBlc2hlbGxjbWQgZXNjYXBlc2hlbGxhcmcgcGFzc3RocnUgc2hlbGxfZXhlYyBwcm9jX29wZW4gcHJvY19jbG9zZSByYW5kIHNyYW5kIGdldHJhbmRtYXggbXRfcmFuZCBtdF9zcmFuZCBtdF9nZXRyYW5kbWF4IGJhc2U2NF9kZWNvZGUgYmFzZTY0X2VuY29kZSBhYnMgY2VpbCBmbG9vciByb3VuZCBpc19maW5pdGUgaXNfbmFuIGlzX2luZmluaXRlIGJpbmRlYyBoZXhkZWMgb2N0ZGVjIGRlY2JpbiBkZWNvY3QgZGVjaGV4IGJhc2VfY29udmVydCBudW1iZXJfZm9ybWF0IGZtb2QgaXAybG9uZyBsb25nMmlwIGdldGVudiBwdXRlbnYgZ2V0b3B0IG1pY3JvdGltZSBnZXR0aW1lb2ZkYXkgZ2V0cnVzYWdlIHVuaXFpZCBxdW90ZWRfcHJpbnRhYmxlX2RlY29kZSBzZXRfdGltZV9saW1pdCBnZXRfY2ZnX3ZhciBtYWdpY19xdW90ZXNfcnVudGltZSBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUgZ2V0X21hZ2ljX3F1b3Rlc19ncGMgZ2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lIGltcG9ydF9yZXF1ZXN0X3ZhcmlhYmxlcyBlcnJvcl9sb2cgc2VyaWFsaXplIHVuc2VyaWFsaXplIG1lbW9yeV9nZXRfdXNhZ2UgdmFyX2R1bXAgdmFyX2V4cG9ydCBkZWJ1Z196dmFsX2R1bXAgcHJpbnRfciBoaWdobGlnaHRfZmlsZSBzaG93X3NvdXJjZSBoaWdobGlnaHRfc3RyaW5nIGluaV9nZXQgaW5pX2dldF9hbGwgaW5pX3NldCBpbmlfYWx0ZXIgaW5pX3Jlc3RvcmUgZ2V0X2luY2x1ZGVfcGF0aCBzZXRfaW5jbHVkZV9wYXRoIHJlc3RvcmVfaW5jbHVkZV9wYXRoIHNldGNvb2tpZSBoZWFkZXIgaGVhZGVyc19zZW50IGNvbm5lY3Rpb25fYWJvcnRlZCBjb25uZWN0aW9uX3N0YXR1cyBpZ25vcmVfdXNlcl9hYm9ydCBwYXJzZV9pbmlfZmlsZSBpc191cGxvYWRlZF9maWxlIG1vdmVfdXBsb2FkZWRfZmlsZSBpbnR2YWwgZmxvYXR2YWwgZG91YmxldmFsIHN0cnZhbCBnZXR0eXBlIHNldHR5cGUgaXNfbnVsbCBpc19yZXNvdXJjZSBpc19ib29sIGlzX2xvbmcgaXNfZmxvYXQgaXNfaW50IGlzX2ludGVnZXIgaXNfZG91YmxlIGlzX3JlYWwgaXNfbnVtZXJpYyBpc19zdHJpbmcgaXNfYXJyYXkgaXNfb2JqZWN0IGlzX3NjYWxhciBlcmVnIGVyZWdfcmVwbGFjZSBlcmVnaSBlcmVnaV9yZXBsYWNlIHNwbGl0IHNwbGl0aSBqb2luIHNxbF9yZWdjYXNlIGRsIHBjbG9zZSBwb3BlbiByZWFkZmlsZSByZXdpbmQgcm1kaXIgdW1hc2sgZmNsb3NlIGZlb2YgZmdldGMgZmdldHMgZmdldHNzIGZyZWFkIGZvcGVuIGZwYXNzdGhydSBmdHJ1bmNhdGUgZnN0YXQgZnNlZWsgZnRlbGwgZmZsdXNoIGZ3cml0ZSBmcHV0cyBta2RpciByZW5hbWUgY29weSB0ZW1wbmFtIHRtcGZpbGUgZmlsZSBmaWxlX2dldF9jb250ZW50cyBzdHJlYW1fc2VsZWN0IHN0cmVhbV9jb250ZXh0X2NyZWF0ZSBzdHJlYW1fY29udGV4dF9zZXRfcGFyYW1zIHN0cmVhbV9jb250ZXh0X3NldF9vcHRpb24gc3RyZWFtX2NvbnRleHRfZ2V0X29wdGlvbnMgc3RyZWFtX2ZpbHRlcl9wcmVwZW5kIHN0cmVhbV9maWx0ZXJfYXBwZW5kIGZnZXRjc3YgZmxvY2sgZ2V0X21ldGFfdGFncyBzdHJlYW1fc2V0X3dyaXRlX2J1ZmZlciBzZXRfZmlsZV9idWZmZXIgc2V0X3NvY2tldF9ibG9ja2luZyBzdHJlYW1fc2V0X2Jsb2NraW5nIHNvY2tldF9zZXRfYmxvY2tpbmcgc3RyZWFtX2dldF9tZXRhX2RhdGEgc3RyZWFtX3JlZ2lzdGVyX3dyYXBwZXIgc3RyZWFtX3dyYXBwZXJfcmVnaXN0ZXIgc3RyZWFtX3NldF90aW1lb3V0IHNvY2tldF9zZXRfdGltZW91dCBzb2NrZXRfZ2V0X3N0YXR1cyByZWFscGF0aCBmbm1hdGNoIGZzb2Nrb3BlbiBwZnNvY2tvcGVuIHBhY2sgdW5wYWNrIGdldF9icm93c2VyIGNyeXB0IG9wZW5kaXIgY2xvc2VkaXIgY2hkaXIgZ2V0Y3dkIHJld2luZGRpciByZWFkZGlyIGRpciBnbG9iIGZpbGVhdGltZSBmaWxlY3RpbWUgZmlsZWdyb3VwIGZpbGVpbm9kZSBmaWxlbXRpbWUgZmlsZW93bmVyIGZpbGVwZXJtcyBmaWxlc2l6ZSBmaWxldHlwZSBmaWxlX2V4aXN0cyBpc193cml0YWJsZSBpc193cml0ZWFibGUgaXNfcmVhZGFibGUgaXNfZXhlY3V0YWJsZSBpc19maWxlIGlzX2RpciBpc19saW5rIHN0YXQgbHN0YXQgY2hvd24gdG91Y2ggY2xlYXJzdGF0Y2FjaGUgbWFpbCBvYl9zdGFydCBvYl9mbHVzaCBvYl9jbGVhbiBvYl9lbmRfZmx1c2ggb2JfZW5kX2NsZWFuIG9iX2dldF9mbHVzaCBvYl9nZXRfY2xlYW4gb2JfZ2V0X2xlbmd0aCBvYl9nZXRfbGV2ZWwgb2JfZ2V0X3N0YXR1cyBvYl9nZXRfY29udGVudHMgb2JfaW1wbGljaXRfZmx1c2ggb2JfbGlzdF9oYW5kbGVycyBrc29ydCBrcnNvcnQgbmF0c29ydCBuYXRjYXNlc29ydCBhc29ydCBhcnNvcnQgc29ydCByc29ydCB1c29ydCB1YXNvcnQgdWtzb3J0IHNodWZmbGUgYXJyYXlfd2FsayBjb3VudCBlbmQgcHJldiBuZXh0IHJlc2V0IGN1cnJlbnQga2V5IG1pbiBtYXggaW5fYXJyYXkgYXJyYXlfc2VhcmNoIGV4dHJhY3QgY29tcGFjdCBhcnJheV9maWxsIHJhbmdlIGFycmF5X211bHRpc29ydCBhcnJheV9wdXNoIGFycmF5X3BvcCBhcnJheV9zaGlmdCBhcnJheV91bnNoaWZ0IGFycmF5X3NwbGljZSBhcnJheV9zbGljZSBhcnJheV9tZXJnZSBhcnJheV9tZXJnZV9yZWN1cnNpdmUgYXJyYXlfa2V5cyBhcnJheV92YWx1ZXMgYXJyYXlfY291bnRfdmFsdWVzIGFycmF5X3JldmVyc2UgYXJyYXlfcmVkdWNlIGFycmF5X3BhZCBhcnJheV9mbGlwIGFycmF5X2NoYW5nZV9rZXlfY2FzZSBhcnJheV9yYW5kIGFycmF5X3VuaXF1ZSBhcnJheV9pbnRlcnNlY3QgYXJyYXlfaW50ZXJzZWN0X2Fzc29jIGFycmF5X2RpZmYgYXJyYXlfZGlmZl9hc3NvYyBhcnJheV9zdW0gYXJyYXlfZmlsdGVyIGFycmF5X21hcCBhcnJheV9jaHVuayBhcnJheV9rZXlfZXhpc3RzIHBvcyBzaXplb2Yga2V5X2V4aXN0cyBhc3NlcnQgYXNzZXJ0X29wdGlvbnMgdmVyc2lvbl9jb21wYXJlIGZ0b2sgc3RyX3JvdDEzIGFnZ3JlZ2F0ZSBzZXNzaW9uX25hbWUgc2Vzc2lvbl9tb2R1bGVfbmFtZSBzZXNzaW9uX3NhdmVfcGF0aCBzZXNzaW9uX2lkIHNlc3Npb25fcmVnZW5lcmF0ZV9pZCBzZXNzaW9uX2RlY29kZSBzZXNzaW9uX3JlZ2lzdGVyIHNlc3Npb25fdW5yZWdpc3RlciBzZXNzaW9uX2lzX3JlZ2lzdGVyZWQgc2Vzc2lvbl9lbmNvZGUgc2Vzc2lvbl9zdGFydCBzZXNzaW9uX2Rlc3Ryb3kgc2Vzc2lvbl91bnNldCBzZXNzaW9uX3NldF9zYXZlX2hhbmRsZXIgc2Vzc2lvbl9jYWNoZV9saW1pdGVyIHNlc3Npb25fY2FjaGVfZXhwaXJlIHNlc3Npb25fc2V0X2Nvb2tpZV9wYXJhbXMgc2Vzc2lvbl9nZXRfY29va2llX3BhcmFtcyBzZXNzaW9uX3dyaXRlX2Nsb3NlIHByZWdfbWF0Y2ggcHJlZ19tYXRjaF9hbGwgcHJlZ19yZXBsYWNlIHByZWdfcmVwbGFjZV9jYWxsYmFjayBwcmVnX3NwbGl0IHByZWdfcXVvdGUgcHJlZ19ncmVwIG92ZXJsb2FkIGN0eXBlX2FsbnVtIGN0eXBlX2FscGhhIGN0eXBlX2NudHJsIGN0eXBlX2RpZ2l0IGN0eXBlX2xvd2VyIGN0eXBlX2dyYXBoIGN0eXBlX3ByaW50IGN0eXBlX3B1bmN0IGN0eXBlX3NwYWNlIGN0eXBlX3VwcGVyIGN0eXBlX3hkaWdpdCB2aXJ0dWFsIGFwYWNoZV9yZXF1ZXN0X2hlYWRlcnMgYXBhY2hlX25vdGUgYXBhY2hlX2xvb2t1cF91cmkgYXBhY2hlX2NoaWxkX3Rlcm1pbmF0ZSBhcGFjaGVfc2V0ZW52IGFwYWNoZV9yZXNwb25zZV9oZWFkZXJzIGFwYWNoZV9nZXRfdmVyc2lvbiBnZXRhbGxoZWFkZXJzIG15c3FsX2Nvbm5lY3QgbXlzcWxfcGNvbm5lY3QgbXlzcWxfY2xvc2UgbXlzcWxfc2VsZWN0X2RiIG15c3FsX2NyZWF0ZV9kYiBteXNxbF9kcm9wX2RiIG15c3FsX3F1ZXJ5IG15c3FsX3VuYnVmZmVyZWRfcXVlcnkgbXlzcWxfZGJfcXVlcnkgbXlzcWxfbGlzdF9kYnMgbXlzcWxfbGlzdF90YWJsZXMgbXlzcWxfbGlzdF9maWVsZHMgbXlzcWxfbGlzdF9wcm9jZXNzZXMgbXlzcWxfZXJyb3IgbXlzcWxfZXJybm8gbXlzcWxfYWZmZWN0ZWRfcm93cyBteXNxbF9pbnNlcnRfaWQgbXlzcWxfcmVzdWx0IG15c3FsX251bV9yb3dzIG15c3FsX251bV9maWVsZHMgbXlzcWxfZmV0Y2hfcm93IG15c3FsX2ZldGNoX2FycmF5IG15c3FsX2ZldGNoX2Fzc29jIG15c3FsX2ZldGNoX29iamVjdCBteXNxbF9kYXRhX3NlZWsgbXlzcWxfZmV0Y2hfbGVuZ3RocyBteXNxbF9mZXRjaF9maWVsZCBteXNxbF9maWVsZF9zZWVrIG15c3FsX2ZyZWVfcmVzdWx0IG15c3FsX2ZpZWxkX25hbWUgbXlzcWxfZmllbGRfdGFibGUgbXlzcWxfZmllbGRfbGVuIG15c3FsX2ZpZWxkX3R5cGUgbXlzcWxfZmllbGRfZmxhZ3MgbXlzcWxfZXNjYXBlX3N0cmluZyBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcgbXlzcWxfc3RhdCBteXNxbF90aHJlYWRfaWQgbXlzcWxfY2xpZW50X2VuY29kaW5nIG15c3FsX2dldF9jbGllbnRfaW5mbyBteXNxbF9nZXRfaG9zdF9pbmZvIG15c3FsX2dldF9wcm90b19pbmZvIG15c3FsX2dldF9zZXJ2ZXJfaW5mbyBteXNxbF9pbmZvIG15c3FsIG15c3FsX2ZpZWxkbmFtZSBteXNxbF9maWVsZHRhYmxlIG15c3FsX2ZpZWxkbGVuIG15c3FsX2ZpZWxkdHlwZSBteXNxbF9maWVsZGZsYWdzIG15c3FsX3NlbGVjdGRiIG15c3FsX2NyZWF0ZWRiIG15c3FsX2Ryb3BkYiBteXNxbF9mcmVlcmVzdWx0IG15c3FsX251bWZpZWxkcyBteXNxbF9udW1yb3dzIG15c3FsX2xpc3RkYnMgbXlzcWxfbGlzdHRhYmxlcyBteXNxbF9saXN0ZmllbGRzIG15c3FsX2RiX25hbWUgbXlzcWxfZGJuYW1lIG15c3FsX3RhYmxlbmFtZSBteXNxbF90YWJsZV9uYW1lIHBnX2Nvbm5lY3QgcGdfcGNvbm5lY3QgcGdfY2xvc2UgcGdfY29ubmVjdGlvbl9zdGF0dXMgcGdfY29ubmVjdGlvbl9idXN5IHBnX2Nvbm5lY3Rpb25fcmVzZXQgcGdfaG9zdCBwZ19kYm5hbWUgcGdfcG9ydCBwZ190dHkgcGdfb3B0aW9ucyBwZ19waW5nIHBnX3F1ZXJ5IHBnX3NlbmRfcXVlcnkgcGdfY2FuY2VsX3F1ZXJ5IHBnX2ZldGNoX3Jlc3VsdCBwZ19mZXRjaF9yb3cgcGdfZmV0Y2hfYXNzb2MgcGdfZmV0Y2hfYXJyYXkgcGdfZmV0Y2hfb2JqZWN0IHBnX2ZldGNoX2FsbCBwZ19hZmZlY3RlZF9yb3dzIHBnX2dldF9yZXN1bHQgcGdfcmVzdWx0X3NlZWsgcGdfcmVzdWx0X3N0YXR1cyBwZ19mcmVlX3Jlc3VsdCBwZ19sYXN0X29pZCBwZ19udW1fcm93cyBwZ19udW1fZmllbGRzIHBnX2ZpZWxkX25hbWUgcGdfZmllbGRfbnVtIHBnX2ZpZWxkX3NpemUgcGdfZmllbGRfdHlwZSBwZ19maWVsZF9wcnRsZW4gcGdfZmllbGRfaXNfbnVsbCBwZ19nZXRfbm90aWZ5IHBnX2dldF9waWQgcGdfcmVzdWx0X2Vycm9yIHBnX2xhc3RfZXJyb3IgcGdfbGFzdF9ub3RpY2UgcGdfcHV0X2xpbmUgcGdfZW5kX2NvcHkgcGdfY29weV90byBwZ19jb3B5X2Zyb20gcGdfdHJhY2UgcGdfdW50cmFjZSBwZ19sb19jcmVhdGUgcGdfbG9fdW5saW5rIHBnX2xvX29wZW4gcGdfbG9fY2xvc2UgcGdfbG9fcmVhZCBwZ19sb193cml0ZSBwZ19sb19yZWFkX2FsbCBwZ19sb19pbXBvcnQgcGdfbG9fZXhwb3J0IHBnX2xvX3NlZWsgcGdfbG9fdGVsbCBwZ19lc2NhcGVfc3RyaW5nIHBnX2VzY2FwZV9ieXRlYSBwZ191bmVzY2FwZV9ieXRlYSBwZ19jbGllbnRfZW5jb2RpbmcgcGdfc2V0X2NsaWVudF9lbmNvZGluZyBwZ19tZXRhX2RhdGEgcGdfY29udmVydCBwZ19pbnNlcnQgcGdfdXBkYXRlIHBnX2RlbGV0ZSBwZ19zZWxlY3QgcGdfZXhlYyBwZ19nZXRsYXN0b2lkIHBnX2NtZHR1cGxlcyBwZ19lcnJvcm1lc3NhZ2UgcGdfbnVtcm93cyBwZ19udW1maWVsZHMgcGdfZmllbGRuYW1lIHBnX2ZpZWxkc2l6ZSBwZ19maWVsZHR5cGUgcGdfZmllbGRudW0gcGdfZmllbGRwcnRsZW4gcGdfZmllbGRpc251bGwgcGdfZnJlZXJlc3VsdCBwZ19yZXN1bHQgcGdfbG9yZWFkYWxsIHBnX2xvY3JlYXRlIHBnX2xvdW5saW5rIHBnX2xvb3BlbiBwZ19sb2Nsb3NlIHBnX2xvcmVhZCBwZ19sb3dyaXRlIHBnX2xvaW1wb3J0IHBnX2xvZXhwb3J0IGh0dHBfcmVzcG9uc2VfY29kZSBnZXRfZGVjbGFyZWRfdHJhaXRzIGdldGltYWdlc2l6ZWZyb21zdHJpbmcgc29ja2V0X2ltcG9ydF9zdHJlYW0gc3RyZWFtX3NldF9jaHVua19zaXplIHRyYWl0X2V4aXN0cyBoZWFkZXJfcmVnaXN0ZXJfY2FsbGJhY2sgY2xhc3NfdXNlcyBzZXNzaW9uX3N0YXR1cyBzZXNzaW9uX3JlZ2lzdGVyX3NodXRkb3duIGVjaG8gcHJpbnQgZ2xvYmFsIHN0YXRpYyBleGl0IGFycmF5IGVtcHR5IGV2YWwgaXNzZXQgdW5zZXQgZGllIGluY2x1ZGUgcmVxdWlyZSBpbmNsdWRlX29uY2UgcmVxdWlyZV9vbmNlIGpzb25fZGVjb2RlIGpzb25fZW5jb2RlIGpzb25fbGFzdF9lcnJvciBqc29uX2xhc3RfZXJyb3JfbXNnIGN1cmxfY2xvc2UgY3VybF9jb3B5X2hhbmRsZSBjdXJsX2Vycm5vIGN1cmxfZXJyb3IgY3VybF9lc2NhcGUgY3VybF9leGVjIGN1cmxfZmlsZV9jcmVhdGUgY3VybF9nZXRpbmZvIGN1cmxfaW5pdCBjdXJsX211bHRpX2FkZF9oYW5kbGUgY3VybF9tdWx0aV9jbG9zZSBjdXJsX211bHRpX2V4ZWMgY3VybF9tdWx0aV9nZXRjb250ZW50IGN1cmxfbXVsdGlfaW5mb19yZWFkIGN1cmxfbXVsdGlfaW5pdCBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUgY3VybF9tdWx0aV9zZWxlY3QgY3VybF9tdWx0aV9zZXRvcHQgY3VybF9tdWx0aV9zdHJlcnJvciBjdXJsX3BhdXNlIGN1cmxfcmVzZXQgY3VybF9zZXRvcHRfYXJyYXkgY3VybF9zZXRvcHQgY3VybF9zaGFyZV9jbG9zZSBjdXJsX3NoYXJlX2luaXQgY3VybF9zaGFyZV9zZXRvcHQgY3VybF9zdHJlcnJvciBjdXJsX3VuZXNjYXBlIGN1cmxfdmVyc2lvbiBteXNxbGlfYWZmZWN0ZWRfcm93cyBteXNxbGlfYXV0b2NvbW1pdCBteXNxbGlfY2hhbmdlX3VzZXIgbXlzcWxpX2NoYXJhY3Rlcl9zZXRfbmFtZSBteXNxbGlfY2xvc2UgbXlzcWxpX2NvbW1pdCBteXNxbGlfY29ubmVjdF9lcnJubyBteXNxbGlfY29ubmVjdF9lcnJvciBteXNxbGlfY29ubmVjdCBteXNxbGlfZGF0YV9zZWVrIG15c3FsaV9kZWJ1ZyBteXNxbGlfZHVtcF9kZWJ1Z19pbmZvIG15c3FsaV9lcnJubyBteXNxbGlfZXJyb3JfbGlzdCBteXNxbGlfZXJyb3IgbXlzcWxpX2ZldGNoX2FsbCBteXNxbGlfZmV0Y2hfYXJyYXkgbXlzcWxpX2ZldGNoX2Fzc29jIG15c3FsaV9mZXRjaF9maWVsZF9kaXJlY3QgbXlzcWxpX2ZldGNoX2ZpZWxkIG15c3FsaV9mZXRjaF9maWVsZHMgbXlzcWxpX2ZldGNoX2xlbmd0aHMgbXlzcWxpX2ZldGNoX29iamVjdCBteXNxbGlfZmV0Y2hfcm93IG15c3FsaV9maWVsZF9jb3VudCBteXNxbGlfZmllbGRfc2VlayBteXNxbGlfZmllbGRfdGVsbCBteXNxbGlfZnJlZV9yZXN1bHQgbXlzcWxpX2dldF9jaGFyc2V0IG15c3FsaV9nZXRfY2xpZW50X2luZm8gbXlzcWxpX2dldF9jbGllbnRfc3RhdHMgbXlzcWxpX2dldF9jbGllbnRfdmVyc2lvbiBteXNxbGlfZ2V0X2Nvbm5lY3Rpb25fc3RhdHMgbXlzcWxpX2dldF9ob3N0X2luZm8gbXlzcWxpX2dldF9wcm90b19pbmZvIG15c3FsaV9nZXRfc2VydmVyX2luZm8gbXlzcWxpX2dldF9zZXJ2ZXJfdmVyc2lvbiBteXNxbGlfaW5mbyBteXNxbGlfaW5pdCBteXNxbGlfaW5zZXJ0X2lkIG15c3FsaV9raWxsIG15c3FsaV9tb3JlX3Jlc3VsdHMgbXlzcWxpX211bHRpX3F1ZXJ5IG15c3FsaV9uZXh0X3Jlc3VsdCBteXNxbGlfbnVtX2ZpZWxkcyBteXNxbGlfbnVtX3Jvd3MgbXlzcWxpX29wdGlvbnMgbXlzcWxpX3BpbmcgbXlzcWxpX3ByZXBhcmUgbXlzcWxpX3F1ZXJ5IG15c3FsaV9yZWFsX2Nvbm5lY3QgbXlzcWxpX3JlYWxfZXNjYXBlX3N0cmluZyBteXNxbGlfcmVhbF9xdWVyeSBteXNxbGlfcmVhcF9hc3luY19xdWVyeSBteXNxbGlfcmVmcmVzaCBteXNxbGlfcm9sbGJhY2sgbXlzcWxpX3NlbGVjdF9kYiBteXNxbGlfc2V0X2NoYXJzZXQgbXlzcWxpX3NldF9sb2NhbF9pbmZpbGVfZGVmYXVsdCBteXNxbGlfc2V0X2xvY2FsX2luZmlsZV9oYW5kbGVyIG15c3FsaV9zcWxzdGF0ZSBteXNxbGlfc3NsX3NldCBteXNxbGlfc3RhdCBteXNxbGlfc3RtdF9pbml0IG15c3FsaV9zdG9yZV9yZXN1bHQgbXlzcWxpX3RocmVhZF9pZCBteXNxbGlfdGhyZWFkX3NhZmUgbXlzcWxpX3VzZV9yZXN1bHQgbXlzcWxpX3dhcm5pbmdfY291bnQiO2EucmVnaXN0ZXJIZWxwZXIoImhpbnRXb3JkcyIsInBocCIsW2YsZyxoXS5qb2luKCIgIikuc3BsaXQoIiAiKSksYS5yZWdpc3RlckhlbHBlcigid29yZENoYXJzIiwicGhwIiwvW1x3JF0vKTt2YXIgaT17bmFtZToiY2xpa2UiLGhlbHBlclR5cGU6InBocCIsa2V5d29yZHM6YihmKSxibG9ja0tleXdvcmRzOmIoImNhdGNoIGRvIGVsc2UgZWxzZWlmIGZvciBmb3JlYWNoIGlmIHN3aXRjaCB0cnkgd2hpbGUgZmluYWxseSIpLGF0b21zOmIoZyksYnVpbHRpbjpiKGgpLG11bHRpTGluZVN0cmluZ3M6ITAsaG9va3M6eyQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZWF0V2hpbGUoL1tcd1wkX10vKSwidmFyaWFibGUtMiJ9LCI8IjpmdW5jdGlvbihhLGIpe2lmKGEubWF0Y2goLzw8Lykpe2EuZWF0V2hpbGUoL1tcd1wuXS8pO3ZhciBjPWEuY3VycmVudCgpLnNsaWNlKDMpO2lmKGMpcmV0dXJuKGIudG9rU3RhY2t8fChiLnRva1N0YWNrPVtdKSkucHVzaChjLDApLGIudG9rZW5pemU9ZChjKSwic3RyaW5nIn1yZXR1cm4hMX0sIiMiOmZ1bmN0aW9uKGEpe2Zvcig7IWEuZW9sKCkmJiFhLm1hdGNoKCI/PiIsITEpOylhLm5leHQoKTtyZXR1cm4iY29tbWVudCJ9LCIvIjpmdW5jdGlvbihhKXtpZihhLmVhdCgiLyIpKXtmb3IoOyFhLmVvbCgpJiYhYS5tYXRjaCgiPz4iLCExKTspYS5uZXh0KCk7cmV0dXJuImNvbW1lbnQifXJldHVybiExfSwnIic6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYi50b2tTdGFja3x8KGIudG9rU3RhY2s9W10pKS5wdXNoKCciJywwKSxiLnRva2VuaXplPWQoJyInKSwic3RyaW5nIn0sInsiOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIudG9rU3RhY2smJmIudG9rU3RhY2subGVuZ3RoJiZiLnRva1N0YWNrW2IudG9rU3RhY2subGVuZ3RoLTFdKyssITF9LCJ9IjpmdW5jdGlvbihhLGIpe3JldHVybiBiLnRva1N0YWNrJiZiLnRva1N0YWNrLmxlbmd0aD4wJiYhLS1iLnRva1N0YWNrW2IudG9rU3RhY2subGVuZ3RoLTFdJiYoYi50b2tlbml6ZT1kKGIudG9rU3RhY2tbYi50b2tTdGFjay5sZW5ndGgtMl0pKSwhMX19fTthLmRlZmluZU1vZGUoInBocCIsZnVuY3Rpb24oYixjKXtmdW5jdGlvbiBmKGEsYil7dmFyIGM9Yi5jdXJNb2RlPT1lO2lmKGEuc29sKCkmJmIucGVuZGluZyYmJyInIT1iLnBlbmRpbmcmJiInIiE9Yi5wZW5kaW5nJiYoYi5wZW5kaW5nPW51bGwpLGMpcmV0dXJuIGMmJm51bGw9PWIucGhwLnRva2VuaXplJiZhLm1hdGNoKCI/PiIpPyhiLmN1ck1vZGU9ZCxiLmN1clN0YXRlPWIuaHRtbCwibWV0YSIpOmUudG9rZW4oYSxiLmN1clN0YXRlKTtpZihhLm1hdGNoKC9ePFw/XHcqLykpcmV0dXJuIGIuY3VyTW9kZT1lLGIuY3VyU3RhdGU9Yi5waHAsIm1ldGEiO2lmKCciJz09Yi5wZW5kaW5nfHwiJyI9PWIucGVuZGluZyl7Zm9yKDshYS5lb2woKSYmYS5uZXh0KCkhPWIucGVuZGluZzspO3ZhciBmPSJzdHJpbmcifWVsc2UgaWYoYi5wZW5kaW5nJiZhLnBvczxiLnBlbmRpbmcuZW5kKXthLnBvcz1iLnBlbmRpbmcuZW5kO3ZhciBmPWIucGVuZGluZy5zdHlsZX1lbHNlIHZhciBmPWQudG9rZW4oYSxiLmN1clN0YXRlKTtiLnBlbmRpbmcmJihiLnBlbmRpbmc9bnVsbCk7dmFyIGksZz1hLmN1cnJlbnQoKSxoPWcuc2VhcmNoKC88XD8vKTtyZXR1cm4tMSE9aCYmKGIucGVuZGluZz0ic3RyaW5nIj09ZiYmKGk9Zy5tYXRjaCgvW1wnXCJdJC8pKSYmIS9cPz4vLnRlc3QoZyk/aVswXTp7ZW5kOmEucG9zLHN0eWxlOmZ9LGEuYmFja1VwKGcubGVuZ3RoLWgpKSxmfXZhciBkPWEuZ2V0TW9kZShiLCJ0ZXh0L2h0bWwiKSxlPWEuZ2V0TW9kZShiLGkpO3JldHVybntzdGFydFN0YXRlOmZ1bmN0aW9uKCl7dmFyIGI9YS5zdGFydFN0YXRlKGQpLGY9YS5zdGFydFN0YXRlKGUpO3JldHVybntodG1sOmIscGhwOmYsY3VyTW9kZTpjLnN0YXJ0T3Blbj9lOmQsY3VyU3RhdGU6Yy5zdGFydE9wZW4/ZjpiLHBlbmRpbmc6bnVsbH19LGNvcHlTdGF0ZTpmdW5jdGlvbihiKXt2YXIgaSxjPWIuaHRtbCxmPWEuY29weVN0YXRlKGQsYyksZz1iLnBocCxoPWEuY29weVN0YXRlKGUsZyk7cmV0dXJuIGk9Yi5jdXJNb2RlPT1kP2Y6aCx7aHRtbDpmLHBocDpoLGN1ck1vZGU6Yi5jdXJNb2RlLGN1clN0YXRlOmkscGVuZGluZzpiLnBlbmRpbmd9fSx0b2tlbjpmLGluZGVudDpmdW5jdGlvbihhLGIpe3JldHVybiBhLmN1ck1vZGUhPWUmJi9eXHMqPFwvLy50ZXN0KGIpfHxhLmN1ck1vZGU9PWUmJi9eXD8+Ly50ZXN0KGIpP2QuaW5kZW50KGEuaHRtbCxiKTphLmN1ck1vZGUuaW5kZW50KGEuY3VyU3RhdGUsYil9LGJsb2NrQ29tbWVudFN0YXJ0OiIvKiIsYmxvY2tDb21tZW50RW5kOiIqLyIsbGluZUNvbW1lbnQ6Ii8vIixpbm5lck1vZGU6ZnVuY3Rpb24oYSl7cmV0dXJue3N0YXRlOmEuY3VyU3RhdGUsbW9kZTphLmN1ck1vZGV9fX19LCJodG1sbWl4ZWQiLCJjbGlrZSIpLGEuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veC1odHRwZC1waHAiLCJwaHAiKSxhLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwLW9wZW4iLHtuYW1lOiJwaHAiLHN0YXJ0T3BlbjohMH0pLGEuZGVmaW5lTUlNRSgidGV4dC94LXBocCIsaSl9KSxmdW5jdGlvbihhKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlP2EocmVxdWlyZSgiLi4vLi4vbGliL2NvZGVtaXJyb3IiKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyIuLi8uLi9saWIvY29kZW1pcnJvciJdLGEpOmEoQ29kZU1pcnJvcil9KGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjthLmRlZmluZU1vZGUoInhtbCIsZnVuY3Rpb24oYixjKXtmdW5jdGlvbiBrKGEsYil7ZnVuY3Rpb24gYyhjKXtyZXR1cm4gYi50b2tlbml6ZT1jLGMoYSxiKX12YXIgZD1hLm5leHQoKTtpZigiPCI9PWQpcmV0dXJuIGEuZWF0KCIhIik/YS5lYXQoIlsiKT9hLm1hdGNoKCJDREFUQVsiKT9jKG4oImF0b20iLCJdXT4iKSk6bnVsbDphLm1hdGNoKCItLSIpP2MobigiY29tbWVudCIsIi0tPiIpKTphLm1hdGNoKCJET0NUWVBFIiwhMCwhMCk/KGEuZWF0V2hpbGUoL1tcd1wuX1wtXS8pLGMobygxKSkpOm51bGw6YS5lYXQoIj8iKT8oYS5lYXRXaGlsZSgvW1x3XC5fXC1dLyksYi50b2tlbml6ZT1uKCJtZXRhIiwiPz4iKSwibWV0YSIpOihpPWEuZWF0KCIvIik/ImNsb3NlVGFnIjoib3BlblRhZyIsYi50b2tlbml6ZT1sLCJ0YWcgYnJhY2tldCIpO2lmKCImIj09ZCl7dmFyIGU7cmV0dXJuIGU9YS5lYXQoIiMiKT9hLmVhdCgieCIpP2EuZWF0V2hpbGUoL1thLWZBLUZcZF0vKSYmYS5lYXQoIjsiKTphLmVhdFdoaWxlKC9bXGRdLykmJmEuZWF0KCI7Iik6YS5lYXRXaGlsZSgvW1x3XC5cLTpdLykmJmEuZWF0KCI7IiksZT8iYXRvbSI6ImVycm9yIn1yZXR1cm4gYS5lYXRXaGlsZSgvW14mPF0vKSxudWxsfWZ1bmN0aW9uIGwoYSxiKXt2YXIgYz1hLm5leHQoKTtpZigiPiI9PWN8fCIvIj09YyYmYS5lYXQoIj4iKSlyZXR1cm4gYi50b2tlbml6ZT1rLGk9Ij4iPT1jPyJlbmRUYWciOiJzZWxmY2xvc2VUYWciLCJ0YWcgYnJhY2tldCI7aWYoIj0iPT1jKXJldHVybiBpPSJlcXVhbHMiLG51bGw7aWYoIjwiPT1jKXtiLnRva2VuaXplPWssYi5zdGF0ZT1zLGIudGFnTmFtZT1iLnRhZ1N0YXJ0PW51bGw7dmFyIGQ9Yi50b2tlbml6ZShhLGIpO3JldHVybiBkP2QrIiB0YWcgZXJyb3IiOiJ0YWcgZXJyb3IifXJldHVybi9bXCdcIl0vLnRlc3QoYyk/KGIudG9rZW5pemU9bShjKSxiLnN0cmluZ1N0YXJ0Q29sPWEuY29sdW1uKCksYi50b2tlbml6ZShhLGIpKTooYS5tYXRjaCgvXlteXHNcdTAwYTA9PD5cIlwnXSpbXlxzXHUwMGEwPTw+XCJcJ1wvXS8pLCJ3b3JkIil9ZnVuY3Rpb24gbShhKXt2YXIgYj1mdW5jdGlvbihiLGMpe2Zvcig7IWIuZW9sKCk7KWlmKGIubmV4dCgpPT1hKXtjLnRva2VuaXplPWw7YnJlYWt9cmV0dXJuInN0cmluZyJ9O3JldHVybiBiLmlzSW5BdHRyaWJ1dGU9ITAsYn1mdW5jdGlvbiBuKGEsYil7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7Zm9yKDshYy5lb2woKTspe2lmKGMubWF0Y2goYikpe2QudG9rZW5pemU9azticmVha31jLm5leHQoKX1yZXR1cm4gYX19ZnVuY3Rpb24gbyhhKXtyZXR1cm4gZnVuY3Rpb24oYixjKXtmb3IodmFyIGQ7bnVsbCE9KGQ9Yi5uZXh0KCkpOyl7aWYoIjwiPT1kKXJldHVybiBjLnRva2VuaXplPW8oYSsxKSxjLnRva2VuaXplKGIsYyk7aWYoIj4iPT1kKXtpZigxPT1hKXtjLnRva2VuaXplPWs7YnJlYWt9cmV0dXJuIGMudG9rZW5pemU9byhhLTEpLGMudG9rZW5pemUoYixjKX19cmV0dXJuIm1ldGEifX1mdW5jdGlvbiBwKGEsYixjKXt0aGlzLnByZXY9YS5jb250ZXh0LHRoaXMudGFnTmFtZT1iLHRoaXMuaW5kZW50PWEuaW5kZW50ZWQsdGhpcy5zdGFydE9mTGluZT1jLChnLmRvTm90SW5kZW50Lmhhc093blByb3BlcnR5KGIpfHxhLmNvbnRleHQmJmEuY29udGV4dC5ub0luZGVudCkmJih0aGlzLm5vSW5kZW50PSEwKX1mdW5jdGlvbiBxKGEpe2EuY29udGV4dCYmKGEuY29udGV4dD1hLmNvbnRleHQucHJldil9ZnVuY3Rpb24gcihhLGIpe2Zvcih2YXIgYzs7KXtpZighYS5jb250ZXh0KXJldHVybjtpZihjPWEuY29udGV4dC50YWdOYW1lLCFnLmNvbnRleHRHcmFiYmVycy5oYXNPd25Qcm9wZXJ0eShjKXx8IWcuY29udGV4dEdyYWJiZXJzW2NdLmhhc093blByb3BlcnR5KGIpKXJldHVybjtxKGEpfX1mdW5jdGlvbiBzKGEsYixjKXtyZXR1cm4ib3BlblRhZyI9PWE/KGMudGFnU3RhcnQ9Yi5jb2x1bW4oKSx0KToiY2xvc2VUYWciPT1hP3U6c31mdW5jdGlvbiB0KGEsYixjKXtyZXR1cm4id29yZCI9PWE/KGMudGFnTmFtZT1iLmN1cnJlbnQoKSxqPSJ0YWciLHgpOihqPSJlcnJvciIsdCl9ZnVuY3Rpb24gdShhLGIsYyl7aWYoIndvcmQiPT1hKXt2YXIgZD1iLmN1cnJlbnQoKTtyZXR1cm4gYy5jb250ZXh0JiZjLmNvbnRleHQudGFnTmFtZSE9ZCYmZy5pbXBsaWNpdGx5Q2xvc2VkLmhhc093blByb3BlcnR5KGMuY29udGV4dC50YWdOYW1lKSYmcShjKSxjLmNvbnRleHQmJmMuY29udGV4dC50YWdOYW1lPT1kPyhqPSJ0YWciLHYpOihqPSJ0YWcgZXJyb3IiLHcpfXJldHVybiBqPSJlcnJvciIsd31mdW5jdGlvbiB2KGEsYixjKXtyZXR1cm4iZW5kVGFnIiE9YT8oaj0iZXJyb3IiLHYpOihxKGMpLHMpfWZ1bmN0aW9uIHcoYSxiLGMpe3JldHVybiBqPSJlcnJvciIsdihhLGIsYyl9ZnVuY3Rpb24geChhLGIsYyl7aWYoIndvcmQiPT1hKXJldHVybiBqPSJhdHRyaWJ1dGUiLHk7aWYoImVuZFRhZyI9PWF8fCJzZWxmY2xvc2VUYWciPT1hKXt2YXIgZD1jLnRhZ05hbWUsZT1jLnRhZ1N0YXJ0O3JldHVybiBjLnRhZ05hbWU9Yy50YWdTdGFydD1udWxsLCJzZWxmY2xvc2VUYWciPT1hfHxnLmF1dG9TZWxmQ2xvc2Vycy5oYXNPd25Qcm9wZXJ0eShkKT9yKGMsZCk6KHIoYyxkKSxjLmNvbnRleHQ9bmV3IHAoYyxkLGU9PWMuaW5kZW50ZWQpKSxzfXJldHVybiBqPSJlcnJvciIseH1mdW5jdGlvbiB5KGEsYixjKXtyZXR1cm4iZXF1YWxzIj09YT96OihnLmFsbG93TWlzc2luZ3x8KGo9ImVycm9yIikseChhLGIsYykpfWZ1bmN0aW9uIHooYSxiLGMpe3JldHVybiJzdHJpbmciPT1hP0E6IndvcmQiPT1hJiZnLmFsbG93VW5xdW90ZWQ/KGo9InN0cmluZyIseCk6KGo9ImVycm9yIix4KGEsYixjKSl9ZnVuY3Rpb24gQShhLGIsYyl7cmV0dXJuInN0cmluZyI9PWE/QTp4KGEsYixjKX12YXIgZD1iLmluZGVudFVuaXQsZT1jLm11bHRpbGluZVRhZ0luZGVudEZhY3Rvcnx8MSxmPWMubXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZztudWxsPT1mJiYoZj0hMCk7dmFyIGksaixnPWMuaHRtbE1vZGU/e2F1dG9TZWxmQ2xvc2Vyczp7YXJlYTohMCxiYXNlOiEwLGJyOiEwLGNvbDohMCxjb21tYW5kOiEwLGVtYmVkOiEwLGZyYW1lOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITAsbWVudWl0ZW06ITB9LGltcGxpY2l0bHlDbG9zZWQ6e2RkOiEwLGxpOiEwLG9wdGdyb3VwOiEwLG9wdGlvbjohMCxwOiEwLHJwOiEwLHJ0OiEwLHRib2R5OiEwLHRkOiEwLHRmb290OiEwLHRoOiEwLHRyOiEwfSxjb250ZXh0R3JhYmJlcnM6e2RkOntkZDohMCxkdDohMH0sZHQ6e2RkOiEwLGR0OiEwfSxsaTp7bGk6ITB9LG9wdGlvbjp7b3B0aW9uOiEwLG9wdGdyb3VwOiEwfSxvcHRncm91cDp7b3B0Z3JvdXA6ITB9LHA6e2FkZHJlc3M6ITAsYXJ0aWNsZTohMCxhc2lkZTohMCxibG9ja3F1b3RlOiEwLGRpcjohMCxkaXY6ITAsZGw6ITAsZmllbGRzZXQ6ITAsZm9vdGVyOiEwLGZvcm06ITAsaDE6ITAsaDI6ITAsaDM6ITAsaDQ6ITAsaDU6ITAsaDY6ITAsaGVhZGVyOiEwLGhncm91cDohMCxocjohMCxtZW51OiEwLG5hdjohMCxvbDohMCxwOiEwLHByZTohMCxzZWN0aW9uOiEwLHRhYmxlOiEwLHVsOiEwfSxycDp7cnA6ITAscnQ6ITB9LHJ0OntycDohMCxydDohMH0sdGJvZHk6e3Rib2R5OiEwLHRmb290OiEwfSx0ZDp7dGQ6ITAsdGg6ITB9LHRmb290Ont0Ym9keTohMH0sdGg6e3RkOiEwLHRoOiEwfSx0aGVhZDp7dGJvZHk6ITAsdGZvb3Q6ITB9LHRyOnt0cjohMH19LGRvTm90SW5kZW50OntwcmU6ITB9LGFsbG93VW5xdW90ZWQ6ITAsYWxsb3dNaXNzaW5nOiEwLGNhc2VGb2xkOiEwfTp7YXV0b1NlbGZDbG9zZXJzOnt9LGltcGxpY2l0bHlDbG9zZWQ6e30sY29udGV4dEdyYWJiZXJzOnt9LGRvTm90SW5kZW50Ont9LGFsbG93VW5xdW90ZWQ6ITEsYWxsb3dNaXNzaW5nOiExLGNhc2VGb2xkOiExfSxoPWMuYWxpZ25DREFUQTtyZXR1cm57c3RhcnRTdGF0ZTpmdW5jdGlvbigpe3JldHVybnt0b2tlbml6ZTprLHN0YXRlOnMsaW5kZW50ZWQ6MCx0YWdOYW1lOm51bGwsdGFnU3RhcnQ6bnVsbCxjb250ZXh0Om51bGx9fSx0b2tlbjpmdW5jdGlvbihhLGIpe2lmKCFiLnRhZ05hbWUmJmEuc29sKCkmJihiLmluZGVudGVkPWEuaW5kZW50YXRpb24oKSksYS5lYXRTcGFjZSgpKXJldHVybiBudWxsO2k9bnVsbDt2YXIgYz1iLnRva2VuaXplKGEsYik7cmV0dXJuKGN8fGkpJiYiY29tbWVudCIhPWMmJihqPW51bGwsYi5zdGF0ZT1iLnN0YXRlKGl8fGMsYSxiKSxqJiYoYz0iZXJyb3IiPT1qP2MrIiBlcnJvciI6aikpLGN9LGluZGVudDpmdW5jdGlvbihiLGMsaSl7dmFyIGo9Yi5jb250ZXh0O2lmKGIudG9rZW5pemUuaXNJbkF0dHJpYnV0ZSlyZXR1cm4gYi50YWdTdGFydD09Yi5pbmRlbnRlZD9iLnN0cmluZ1N0YXJ0Q29sKzE6Yi5pbmRlbnRlZCtkO2lmKGomJmoubm9JbmRlbnQpcmV0dXJuIGEuUGFzcztpZihiLnRva2VuaXplIT1sJiZiLnRva2VuaXplIT1rKXJldHVybiBpP2kubWF0Y2goL14oXHMqKS8pWzBdLmxlbmd0aDowO2lmKGIudGFnTmFtZSlyZXR1cm4gZj9iLnRhZ1N0YXJ0K2IudGFnTmFtZS5sZW5ndGgrMjpiLnRhZ1N0YXJ0K2QqZTtpZihoJiYvPCFcW0NEQVRBXFsvLnRlc3QoYykpcmV0dXJuIDA7dmFyIG09YyYmL148KFwvKT8oW1x3XzpcLi1dKikvLmV4ZWMoYyk7aWYobSYmbVsxXSlmb3IoO2o7KXtpZihqLnRhZ05hbWU9PW1bMl0pe2o9ai5wcmV2O2JyZWFrfWlmKCFnLmltcGxpY2l0bHlDbG9zZWQuaGFzT3duUHJvcGVydHkoai50YWdOYW1lKSlicmVhaztqPWoucHJldn1lbHNlIGlmKG0pZm9yKDtqOyl7dmFyIG49Zy5jb250ZXh0R3JhYmJlcnNbai50YWdOYW1lXTtpZighbnx8IW4uaGFzT3duUHJvcGVydHkobVsyXSkpYnJlYWs7aj1qLnByZXZ9Zm9yKDtqJiYhai5zdGFydE9mTGluZTspaj1qLnByZXY7cmV0dXJuIGo/ai5pbmRlbnQrZDowfSxlbGVjdHJpY0lucHV0Oi88XC9bXHNcdzpdKz4kLyxibG9ja0NvbW1lbnRTdGFydDoiPCEtLSIsYmxvY2tDb21tZW50RW5kOiItLT4iLGNvbmZpZ3VyYXRpb246Yy5odG1sTW9kZT8iaHRtbCI6InhtbCIsaGVscGVyVHlwZTpjLmh0bWxNb2RlPyJodG1sIjoieG1sIn19KSxhLmRlZmluZU1JTUUoInRleHQveG1sIiwieG1sIiksYS5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94bWwiLCJ4bWwiKSxhLm1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eSgidGV4dC9odG1sIil8fGEuZGVmaW5lTUlNRSgidGV4dC9odG1sIix7bmFtZToieG1sIixodG1sTW9kZTohMH0pfSksZnVuY3Rpb24oYSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9hKHJlcXVpcmUoIi4uLy4uL2xpYi9jb2RlbWlycm9yIikscmVxdWlyZSgiLi4vLi4vbW9kZS9jc3MvY3NzIikpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiLi4vLi4vbGliL2NvZGVtaXJyb3IiLCIuLi8uLi9tb2RlL2Nzcy9jc3MiXSxhKTphKENvZGVNaXJyb3IpfShmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7dmFyIGI9e2xpbms6MSx2aXNpdGVkOjEsYWN0aXZlOjEsaG92ZXI6MSxmb2N1czoxLCJmaXJzdC1sZXR0ZXIiOjEsImZpcnN0LWxpbmUiOjEsImZpcnN0LWNoaWxkIjoxLGJlZm9yZToxLGFmdGVyOjEsbGFuZzoxfTthLnJlZ2lzdGVySGVscGVyKCJoaW50IiwiY3NzIixmdW5jdGlvbihjKXtmdW5jdGlvbiBsKGEpe2Zvcih2YXIgYiBpbiBhKWkmJjAhPWIubGFzdEluZGV4T2YoaSwwKXx8ay5wdXNoKGIpfXZhciBkPWMuZ2V0Q3Vyc29yKCksZT1jLmdldFRva2VuQXQoZCksZj1hLmlubmVyTW9kZShjLmdldE1vZGUoKSxlLnN0YXRlKTtpZigiY3NzIj09Zi5tb2RlLm5hbWUpe3ZhciBnPWUuc3RhcnQsaD1kLmNoLGk9ZS5zdHJpbmcuc2xpY2UoMCxoLWcpOy9bXlx3JF8tXS8udGVzdChpKSYmKGk9IiIsZz1oPWQuY2gpO3ZhciBqPWEucmVzb2x2ZU1vZGUoInRleHQvY3NzIiksaz1bXSxtPWYuc3RhdGUuc3RhdGU7cmV0dXJuInBzZXVkbyI9PW18fCJ2YXJpYWJsZS0zIj09ZS50eXBlP2woYik6ImJsb2NrIj09bXx8Im1heWJlcHJvcCI9PW0/bChqLnByb3BlcnR5S2V5d29yZHMpOiJwcm9wIj09bXx8InBhcmVucyI9PW18fCJhdCI9PW18fCJwYXJhbXMiPT1tPyhsKGoudmFsdWVLZXl3b3JkcyksbChqLmNvbG9yS2V5d29yZHMpKTooIm1lZGlhIj09bXx8Im1lZGlhX3BhcmVucyI9PW0pJiYobChqLm1lZGlhVHlwZXMpLGwoai5tZWRpYUZlYXR1cmVzKSksay5sZW5ndGg/e2xpc3Q6ayxmcm9tOmEuUG9zKGQubGluZSxnKSx0bzphLlBvcyhkLmxpbmUsaCl9OnZvaWQgMH19KX0pLGZ1bmN0aW9uKGEpeyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGU/YShyZXF1aXJlKCIuLi8uLi9saWIvY29kZW1pcnJvciIpLHJlcXVpcmUoIi4veG1sLWhpbnQiKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyIuLi8uLi9saWIvY29kZW1pcnJvciIsIi4veG1sLWhpbnQiXSxhKTphKENvZGVNaXJyb3IpfShmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gayhhKXtmb3IodmFyIGIgaW4gailqLmhhc093blByb3BlcnR5KGIpJiYoYS5hdHRyc1tiXT1qW2JdKX1mdW5jdGlvbiBtKGIsYyl7dmFyIGQ9e3NjaGVtYUluZm86aX07aWYoYylmb3IodmFyIGUgaW4gYylkW2VdPWNbZV07cmV0dXJuIGEuaGludC54bWwoYixkKX12YXIgYj0iYWIgYWEgYWYgYWsgc3EgYW0gYXIgYW4gaHkgYXMgYXYgYWUgYXkgYXogYm0gYmEgZXUgYmUgYm4gYmggYmkgYnMgYnIgYmcgbXkgY2EgY2ggY2UgbnkgemggY3Yga3cgY28gY3IgaHIgY3MgZGEgZHYgbmwgZHogZW4gZW8gZXQgZWUgZm8gZmogZmkgZnIgZmYgZ2wga2EgZGUgZWwgZ24gZ3UgaHQgaGEgaGUgaHogaGkgaG8gaHUgaWEgaWQgaWUgZ2EgaWcgaWsgaW8gaXMgaXQgaXUgamEganYga2wga24ga3Iga3Mga2sga20ga2kgcncga3kga3Yga2cga28ga3Uga2ogbGEgbGIgbGcgbGkgbG4gbG8gbHQgbHUgbHYgZ3YgbWsgbWcgbXMgbWwgbXQgbWkgbXIgbWggbW4gbmEgbnYgbmIgbmQgbmUgbmcgbm4gbm8gaWkgbnIgb2Mgb2ogY3Ugb20gb3Igb3MgcGEgcGkgZmEgcGwgcHMgcHQgcXUgcm0gcm4gcm8gcnUgc2Egc2Mgc2Qgc2Ugc20gc2cgc3IgZ2Qgc24gc2kgc2sgc2wgc28gc3QgZXMgc3Ugc3cgc3Mgc3YgdGEgdGUgdGcgdGggdGkgYm8gdGsgdGwgdG4gdG8gdHIgdHMgdHQgdHcgdHkgdWcgdWsgdXIgdXogdmUgdmkgdm8gd2EgY3kgd28gZnkgeGggeWkgeW8gemEgenUiLnNwbGl0KCIgIiksYz1bIl9ibGFuayIsIl9zZWxmIiwiX3RvcCIsIl9wYXJlbnQiXSxkPVsiYXNjaWkiLCJ1dGYtOCIsInV0Zi0xNiIsImxhdGluMSIsImxhdGluMSJdLGU9WyJnZXQiLCJwb3N0IiwicHV0IiwiZGVsZXRlIl0sZj1bImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsIm11bHRpcGFydC9mb3JtLWRhdGEiLCJ0ZXh0L3BsYWluIl0sZz1bImFsbCIsInNjcmVlbiIsInByaW50IiwiZW1ib3NzZWQiLCJicmFpbGxlIiwiaGFuZGhlbGQiLCJwcmludCIsInByb2plY3Rpb24iLCJzY3JlZW4iLCJ0dHkiLCJ0diIsInNwZWVjaCIsIjNkLWdsYXNzZXMiLCJyZXNvbHV0aW9uIFs+XVs8XVs9XSBbWF0iLCJkZXZpY2UtYXNwZWN0LXJhdGlvOiBYL1kiLCJvcmllbnRhdGlvbjpwb3J0cmFpdCIsIm9yaWVudGF0aW9uOmxhbmRzY2FwZSIsImRldmljZS1oZWlnaHQ6IFtYXSIsImRldmljZS13aWR0aDogW1hdIl0saD17YXR0cnM6e319LGk9e2E6e2F0dHJzOntocmVmOm51bGwscGluZzpudWxsLHR5cGU6bnVsbCxtZWRpYTpnLHRhcmdldDpjLGhyZWZsYW5nOmJ9fSxhYmJyOmgsYWNyb255bTpoLGFkZHJlc3M6aCxhcHBsZXQ6aCxhcmVhOnthdHRyczp7YWx0Om51bGwsY29vcmRzOm51bGwsaHJlZjpudWxsLHRhcmdldDpudWxsLHBpbmc6bnVsbCxtZWRpYTpnLGhyZWZsYW5nOmIsdHlwZTpudWxsLHNoYXBlOlsiZGVmYXVsdCIsInJlY3QiLCJjaXJjbGUiLCJwb2x5Il19fSxhcnRpY2xlOmgsYXNpZGU6aCxhdWRpbzp7YXR0cnM6e3NyYzpudWxsLG1lZGlhZ3JvdXA6bnVsbCxjcm9zc29yaWdpbjpbImFub255bW91cyIsInVzZS1jcmVkZW50aWFscyJdLHByZWxvYWQ6WyJub25lIiwibWV0YWRhdGEiLCJhdXRvIl0sYXV0b3BsYXk6WyIiLCJhdXRvcGxheSJdLGxvb3A6WyIiLCJsb29wIl0sY29udHJvbHM6WyIiLCJjb250cm9scyJdfX0sYjpoLGJhc2U6e2F0dHJzOntocmVmOm51bGwsdGFyZ2V0OmN9fSxiYXNlZm9udDpoLGJkaTpoLGJkbzpoLGJpZzpoLGJsb2NrcXVvdGU6e2F0dHJzOntjaXRlOm51bGx9fSxib2R5OmgsYnI6aCxidXR0b246e2F0dHJzOntmb3JtOm51bGwsZm9ybWFjdGlvbjpudWxsLG5hbWU6bnVsbCx2YWx1ZTpudWxsLGF1dG9mb2N1czpbIiIsImF1dG9mb2N1cyJdLGRpc2FibGVkOlsiIiwiYXV0b2ZvY3VzIl0sZm9ybWVuY3R5cGU6Zixmb3JtbWV0aG9kOmUsZm9ybW5vdmFsaWRhdGU6WyIiLCJub3ZhbGlkYXRlIl0sZm9ybXRhcmdldDpjLHR5cGU6WyJzdWJtaXQiLCJyZXNldCIsImJ1dHRvbiJdfX0sY2FudmFzOnthdHRyczp7d2lkdGg6bnVsbCxoZWlnaHQ6bnVsbH19LGNhcHRpb246aCxjZW50ZXI6aCxjaXRlOmgsY29kZTpoLGNvbDp7YXR0cnM6e3NwYW46bnVsbH19LGNvbGdyb3VwOnthdHRyczp7c3BhbjpudWxsfX0sY29tbWFuZDp7YXR0cnM6e3R5cGU6WyJjb21tYW5kIiwiY2hlY2tib3giLCJyYWRpbyJdLGxhYmVsOm51bGwsaWNvbjpudWxsLHJhZGlvZ3JvdXA6bnVsbCxjb21tYW5kOm51bGwsdGl0bGU6bnVsbCxkaXNhYmxlZDpbIiIsImRpc2FibGVkIl0sY2hlY2tlZDpbIiIsImNoZWNrZWQiXX19LGRhdGE6e2F0dHJzOnt2YWx1ZTpudWxsfX0sZGF0YWdyaWQ6e2F0dHJzOntkaXNhYmxlZDpbIiIsImRpc2FibGVkIl0sbXVsdGlwbGU6WyIiLCJtdWx0aXBsZSJdfX0sZGF0YWxpc3Q6e2F0dHJzOntkYXRhOm51bGx9fSxkZDpoLGRlbDp7YXR0cnM6e2NpdGU6bnVsbCxkYXRldGltZTpudWxsfX0sZGV0YWlsczp7YXR0cnM6e29wZW46WyIiLCJvcGVuIl19fSxkZm46aCxkaXI6aCxkaXY6aCxkbDpoLGR0OmgsZW06aCxlbWJlZDp7YXR0cnM6e3NyYzpudWxsLHR5cGU6bnVsbCx3aWR0aDpudWxsLGhlaWdodDpudWxsfX0sZXZlbnRzb3VyY2U6e2F0dHJzOntzcmM6bnVsbH19LGZpZWxkc2V0OnthdHRyczp7ZGlzYWJsZWQ6WyIiLCJkaXNhYmxlZCJdLGZvcm06bnVsbCxuYW1lOm51bGx9fSxmaWdjYXB0aW9uOmgsZmlndXJlOmgsZm9udDpoLGZvb3RlcjpoLGZvcm06e2F0dHJzOnthY3Rpb246bnVsbCxuYW1lOm51bGwsImFjY2VwdC1jaGFyc2V0IjpkLGF1dG9jb21wbGV0ZTpbIm9uIiwib2ZmIl0sZW5jdHlwZTpmLG1ldGhvZDplLG5vdmFsaWRhdGU6WyIiLCJub3ZhbGlkYXRlIl0sdGFyZ2V0OmN9fSxmcmFtZTpoLGZyYW1lc2V0OmgsaDE6aCxoMjpoLGgzOmgsaDQ6aCxoNTpoLGg2OmgsaGVhZDp7YXR0cnM6e30sY2hpbGRyZW46WyJ0aXRsZSIsImJhc2UiLCJsaW5rIiwic3R5bGUiLCJtZXRhIiwic2NyaXB0Iiwibm9zY3JpcHQiLCJjb21tYW5kIl19LGhlYWRlcjpoLGhncm91cDpoLGhyOmgsaHRtbDp7YXR0cnM6e21hbmlmZXN0Om51bGx9LGNoaWxkcmVuOlsiaGVhZCIsImJvZHkiXX0saTpoLGlmcmFtZTp7YXR0cnM6e3NyYzpudWxsLHNyY2RvYzpudWxsLG5hbWU6bnVsbCx3aWR0aDpudWxsLGhlaWdodDpudWxsLHNhbmRib3g6WyJhbGxvdy10b3AtbmF2aWdhdGlvbiIsImFsbG93LXNhbWUtb3JpZ2luIiwiYWxsb3ctZm9ybXMiLCJhbGxvdy1zY3JpcHRzIl0sc2VhbWxlc3M6WyIiLCJzZWFtbGVzcyJdfX0saW1nOnthdHRyczp7YWx0Om51bGwsc3JjOm51bGwsaXNtYXA6bnVsbCx1c2VtYXA6bnVsbCx3aWR0aDpudWxsLGhlaWdodDpudWxsLGNyb3Nzb3JpZ2luOlsiYW5vbnltb3VzIiwidXNlLWNyZWRlbnRpYWxzIl19fSxpbnB1dDp7YXR0cnM6e2FsdDpudWxsLGRpcm5hbWU6bnVsbCxmb3JtOm51bGwsZm9ybWFjdGlvbjpudWxsLGhlaWdodDpudWxsLGxpc3Q6bnVsbCxtYXg6bnVsbCxtYXhsZW5ndGg6bnVsbCxtaW46bnVsbCxuYW1lOm51bGwscGF0dGVybjpudWxsLHBsYWNlaG9sZGVyOm51bGwsc2l6ZTpudWxsLHNyYzpudWxsLHN0ZXA6bnVsbCx2YWx1ZTpudWxsLHdpZHRoOm51bGwsYWNjZXB0OlsiYXVkaW8vKiIsInZpZGVvLyoiLCJpbWFnZS8qIl0sYXV0b2NvbXBsZXRlOlsib24iLCJvZmYiXSxhdXRvZm9jdXM6WyIiLCJhdXRvZm9jdXMiXSxjaGVja2VkOlsiIiwiY2hlY2tlZCJdLGRpc2FibGVkOlsiIiwiZGlzYWJsZWQiXSxmb3JtZW5jdHlwZTpmLGZvcm1tZXRob2Q6ZSxmb3Jtbm92YWxpZGF0ZTpbIiIsIm5vdmFsaWRhdGUiXSxmb3JtdGFyZ2V0OmMsbXVsdGlwbGU6WyIiLCJtdWx0aXBsZSJdLHJlYWRvbmx5OlsiIiwicmVhZG9ubHkiXSxyZXF1aXJlZDpbIiIsInJlcXVpcmVkIl0sdHlwZTpbImhpZGRlbiIsInRleHQiLCJzZWFyY2giLCJ0ZWwiLCJ1cmwiLCJlbWFpbCIsInBhc3N3b3JkIiwiZGF0ZXRpbWUiLCJkYXRlIiwibW9udGgiLCJ3ZWVrIiwidGltZSIsImRhdGV0aW1lLWxvY2FsIiwibnVtYmVyIiwicmFuZ2UiLCJjb2xvciIsImNoZWNrYm94IiwicmFkaW8iLCJmaWxlIiwic3VibWl0IiwiaW1hZ2UiLCJyZXNldCIsImJ1dHRvbiJdfX0saW5zOnthdHRyczp7Y2l0ZTpudWxsLGRhdGV0aW1lOm51bGx9fSxrYmQ6aCxrZXlnZW46e2F0dHJzOntjaGFsbGVuZ2U6bnVsbCxmb3JtOm51bGwsbmFtZTpudWxsLGF1dG9mb2N1czpbIiIsImF1dG9mb2N1cyJdLGRpc2FibGVkOlsiIiwiZGlzYWJsZWQiXSxrZXl0eXBlOlsiUlNBIl19fSxsYWJlbDp7YXR0cnM6eyJmb3IiOm51bGwsZm9ybTpudWxsfX0sbGVnZW5kOmgsbGk6e2F0dHJzOnt2YWx1ZTpudWxsfX0sbGluazp7YXR0cnM6e2hyZWY6bnVsbCx0eXBlOm51bGwsaHJlZmxhbmc6YixtZWRpYTpnLHNpemVzOlsiYWxsIiwiMTZ4MTYiLCIxNngxNiAzMngzMiIsIjE2eDE2IDMyeDMyIDY0eDY0Il19fSxtYXA6e2F0dHJzOntuYW1lOm51bGx9fSxtYXJrOmgsbWVudTp7YXR0cnM6e2xhYmVsOm51bGwsdHlwZTpbImxpc3QiLCJjb250ZXh0IiwidG9vbGJhciJdfX0sbWV0YTp7YXR0cnM6e2NvbnRlbnQ6bnVsbCxjaGFyc2V0OmQsbmFtZTpbInZpZXdwb3J0IiwiYXBwbGljYXRpb24tbmFtZSIsImF1dGhvciIsImRlc2NyaXB0aW9uIiwiZ2VuZXJhdG9yIiwia2V5d29yZHMiXSwiaHR0cC1lcXVpdiI6WyJjb250ZW50LWxhbmd1YWdlIiwiY29udGVudC10eXBlIiwiZGVmYXVsdC1zdHlsZSIsInJlZnJlc2giXX19LG1ldGVyOnthdHRyczp7dmFsdWU6bnVsbCxtaW46bnVsbCxsb3c6bnVsbCxoaWdoOm51bGwsbWF4Om51bGwsb3B0aW11bTpudWxsfX0sbmF2Omgsbm9mcmFtZXM6aCxub3NjcmlwdDpoLG9iamVjdDp7YXR0cnM6e2RhdGE6bnVsbCx0eXBlOm51bGwsbmFtZTpudWxsLHVzZW1hcDpudWxsLGZvcm06bnVsbCx3aWR0aDpudWxsLGhlaWdodDpudWxsLHR5cGVtdXN0bWF0Y2g6WyIiLCJ0eXBlbXVzdG1hdGNoIl19fSxvbDp7YXR0cnM6e3JldmVyc2VkOlsiIiwicmV2ZXJzZWQiXSxzdGFydDpudWxsLHR5cGU6WyIxIiwiYSIsIkEiLCJpIiwiSSJdfX0sb3B0Z3JvdXA6e2F0dHJzOntkaXNhYmxlZDpbIiIsImRpc2FibGVkIl0sbGFiZWw6bnVsbH19LG9wdGlvbjp7YXR0cnM6e2Rpc2FibGVkOlsiIiwiZGlzYWJsZWQiXSxsYWJlbDpudWxsLHNlbGVjdGVkOlsiIiwic2VsZWN0ZWQiXSx2YWx1ZTpudWxsfX0sb3V0cHV0OnthdHRyczp7ImZvciI6bnVsbCxmb3JtOm51bGwsbmFtZTpudWxsfX0scDpoLHBhcmFtOnthdHRyczp7bmFtZTpudWxsLHZhbHVlOm51bGx9fSxwcmU6aCxwcm9ncmVzczp7YXR0cnM6e3ZhbHVlOm51bGwsbWF4Om51bGx9fSxxOnthdHRyczp7Y2l0ZTpudWxsfX0scnA6aCxydDpoLHJ1Ynk6aCxzOmgsc2FtcDpoLHNjcmlwdDp7YXR0cnM6e3R5cGU6WyJ0ZXh0L2phdmFzY3JpcHQiXSxzcmM6bnVsbCxhc3luYzpbIiIsImFzeW5jIl0sZGVmZXI6WyIiLCJkZWZlciJdLGNoYXJzZXQ6ZH19LHNlY3Rpb246aCxzZWxlY3Q6e2F0dHJzOntmb3JtOm51bGwsbmFtZTpudWxsLHNpemU6bnVsbCxhdXRvZm9jdXM6WyIiLCJhdXRvZm9jdXMiXSxkaXNhYmxlZDpbIiIsImRpc2FibGVkIl0sbXVsdGlwbGU6WyIiLCJtdWx0aXBsZSJdfX0sc21hbGw6aCxzb3VyY2U6e2F0dHJzOntzcmM6bnVsbCx0eXBlOm51bGwsbWVkaWE6bnVsbH19LHNwYW46aCxzdHJpa2U6aCxzdHJvbmc6aCxzdHlsZTp7YXR0cnM6e3R5cGU6WyJ0ZXh0L2NzcyJdLG1lZGlhOmcsc2NvcGVkOm51bGx9fSxzdWI6aCxzdW1tYXJ5Omgsc3VwOmgsdGFibGU6aCx0Ym9keTpoLHRkOnthdHRyczp7Y29sc3BhbjpudWxsLHJvd3NwYW46bnVsbCxoZWFkZXJzOm51bGx9fSx0ZXh0YXJlYTp7YXR0cnM6e2Rpcm5hbWU6bnVsbCxmb3JtOm51bGwsbWF4bGVuZ3RoOm51bGwsbmFtZTpudWxsLHBsYWNlaG9sZGVyOm51bGwscm93czpudWxsLGNvbHM6bnVsbCxhdXRvZm9jdXM6WyIiLCJhdXRvZm9jdXMiXSxkaXNhYmxlZDpbIiIsImRpc2FibGVkIl0scmVhZG9ubHk6WyIiLCJyZWFkb25seSJdLHJlcXVpcmVkOlsiIiwicmVxdWlyZWQiXSx3cmFwOlsic29mdCIsImhhcmQiXX19LHRmb290OmgsdGg6e2F0dHJzOntjb2xzcGFuOm51bGwscm93c3BhbjpudWxsLGhlYWRlcnM6bnVsbCxzY29wZTpbInJvdyIsImNvbCIsInJvd2dyb3VwIiwiY29sZ3JvdXAiXX19LHRoZWFkOmgsdGltZTp7YXR0cnM6e2RhdGV0aW1lOm51bGx9fSx0aXRsZTpoLHRyOmgsdHJhY2s6e2F0dHJzOntzcmM6bnVsbCxsYWJlbDpudWxsLCJkZWZhdWx0IjpudWxsLGtpbmQ6WyJzdWJ0aXRsZXMiLCJjYXB0aW9ucyIsImRlc2NyaXB0aW9ucyIsImNoYXB0ZXJzIiwibWV0YWRhdGEiXSxzcmNsYW5nOmJ9fSx0dDpoLHU6aCx1bDpoLCJ2YXIiOmgsdmlkZW86e2F0dHJzOntzcmM6bnVsbCxwb3N0ZXI6bnVsbCx3aWR0aDpudWxsLGhlaWdodDpudWxsLGNyb3Nzb3JpZ2luOlsiYW5vbnltb3VzIiwidXNlLWNyZWRlbnRpYWxzIl0scHJlbG9hZDpbImF1dG8iLCJtZXRhZGF0YSIsIm5vbmUiXSxhdXRvcGxheTpbIiIsImF1dG9wbGF5Il0sbWVkaWFncm91cDpbIm1vdmllIl0sbXV0ZWQ6WyIiLCJtdXRlZCJdLGNvbnRyb2xzOlsiIiwiY29udHJvbHMiXX19LHdicjpofSxqPXthY2Nlc3NrZXk6WyJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiXSwiY2xhc3MiOm51bGwsY29udGVudGVkaXRhYmxlOlsidHJ1ZSIsImZhbHNlIl0sY29udGV4dG1lbnU6bnVsbCxkaXI6WyJsdHIiLCJydGwiLCJhdXRvIl0sZHJhZ2dhYmxlOlsidHJ1ZSIsImZhbHNlIiwiYXV0byJdLGRyb3B6b25lOlsiY29weSIsIm1vdmUiLCJsaW5rIiwic3RyaW5nOiIsImZpbGU6Il0saGlkZGVuOlsiaGlkZGVuIl0saWQ6bnVsbCxpbmVydDpbImluZXJ0Il0saXRlbWlkOm51bGwsaXRlbXByb3A6bnVsbCxpdGVtcmVmOm51bGwsaXRlbXNjb3BlOlsiaXRlbXNjb3BlIl0saXRlbXR5cGU6bnVsbCxsYW5nOlsiZW4iLCJlcyJdLHNwZWxsY2hlY2s6WyJ0cnVlIiwiZmFsc2UiXSxzdHlsZTpudWxsLHRhYmluZGV4OlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5Il0sdGl0bGU6bnVsbCx0cmFuc2xhdGU6WyJ5ZXMiLCJubyJdLG9uY2xpY2s6bnVsbCxyZWw6WyJzdHlsZXNoZWV0IiwiYWx0ZXJuYXRlIiwiYXV0aG9yIiwiYm9va21hcmsiLCJoZWxwIiwibGljZW5zZSIsIm5leHQiLCJub2ZvbGxvdyIsIm5vcmVmZXJyZXIiLCJwcmVmZXRjaCIsInByZXYiLCJzZWFyY2giLCJ0YWciXX07ayhoKTtmb3IodmFyIGwgaW4gaSlpLmhhc093blByb3BlcnR5KGwpJiZpW2xdIT1oJiZrKGlbbF0pO2EuaHRtbFNjaGVtYT1pLGEucmVnaXN0ZXJIZWxwZXIoImhpbnQiLCJodG1sIixtKX0pOw==dm_tools/include.phpPD9waHAKcmVxdWlyZSBkaXJuYW1lKF9fRklMRV9fKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLidyZW1vdGVpbWcvZG1fdG9vbHNfcmVtb3RlaW1nLnBocCc7CnJlcXVpcmUgZGlybmFtZShfX0ZJTEVfXykgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4nYXJ0aWNsZWltZy9kbV90b29sc19hcnRpY2xlaW1nLnBocCc7CiRkbV90b29scyA9IGFycmF5KAoJIm5hbWUiID0+ICJkbV90b29scyIsCgkiaWQiID0+ICIiLAoJInR5cGUiID0+ICJwbHVnaW4iLAoJInBhdGgiID0+IGRpcm5hbWUoX19GSUxFX18pIC4gRElSRUNUT1JZX1NFUEFSQVRPUiwKCSJ1cmwiID0+ICRHTE9CQUxTWyd6YnAnXS0+aG9zdC4iemJfdXNlcnMvcGx1Z2luL2RtX3Rvb2xzLyIKKTsKUmVnaXN0ZXJQbHVnaW4oImRtX3Rvb2xzIiwiQWN0aXZlUGx1Z2luX2RtX3Rvb2xzIik7CgpmdW5jdGlvbiBBY3RpdmVQbHVnaW5fZG1fdG9vbHMoKSB7CglnbG9iYWwgJHpicCwkZG1fdG9vbHM7CglBZGRfRmlsdGVyX1BsdWdpbignRmlsdGVyX1BsdWdpbl9aYnBfTWFrZVRlbXBsYXRldGFncycsJ2RtX3Rvb2xzX21ha2VfdGVtcGxhdGV0YWdzJyk7CglBZGRfRmlsdGVyX1BsdWdpbignRmlsdGVyX1BsdWdpbl9Qb3N0QXJ0aWNsZV9Db3JlJywnZG1fdG9vbHNfcmVtb3RlaW1nX21haW4nKTsKCUFkZF9GaWx0ZXJfUGx1Z2luKCdGaWx0ZXJfUGx1Z2luX1Bvc3RQYWdlX0NvcmUnLCdkbV90b29sc19yZW1vdGVpbWdfbWFpbicpOwoJQWRkX0ZpbHRlcl9QbHVnaW4oJ0ZpbHRlcl9QbHVnaW5fVmlld1Bvc3RfVGVtcGxhdGUnLCdkbV90b29sc19hcnRpY2xlaW1nX21haW4nKTsKCUFkZF9GaWx0ZXJfUGx1Z2luKCdGaWx0ZXJfUGx1Z2luX1ZpZXdMaXN0X0NvcmUnLCdkbV90b29sc19WaWV3TGlzdF9Db3JlJyk7CglBZGRfRmlsdGVyX1BsdWdpbignRmlsdGVyX1BsdWdpbl9BZG1pbl9IZWFkZXInLCAnZG1fdG9vbHNfYWRtaW5faGVhZCcpOwoJQWRkX0ZpbHRlcl9QbHVnaW4oJ0ZpbHRlcl9QbHVnaW5fQWRtaW5fRm9vdGVyJywgJ2RtX3Rvb2xzX01vZHVsZU1uZycpOwkKCUFkZF9GaWx0ZXJfUGx1Z2luKCdGaWx0ZXJfUGx1Z2luX0ZlZWRfQmVnaW4nLCAnZG1fdG9vbHNfRmVlZF9CZWdpbicpOwoJQWRkX0ZpbHRlcl9QbHVnaW4oJ0ZpbHRlcl9QbHVnaW5fVmlld0xpc3RfVGVtcGxhdGUnLCdkbV90b29sc19saXN0Jyk7Cn0KZnVuY3Rpb24gZG1fdG9vbHNfbGlzdCgmJHRlbXBsYXRlKXsKCWdsb2JhbCAkemJwLCRkbV90b29sczsKCWlmICghJHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+ZG1fdG9vbHNfeHViYl9saXN0KXJldHVybjsKCSRhcnRpY2xlcyA9ICR0ZW1wbGF0ZS0+R2V0VGFncygnYXJ0aWNsZXMnKTsKCWZvcmVhY2ggKCRhcnRpY2xlcyBhcyAka2V5ID0+ICRhcnRpY2xlKSB7CgkJJHBhdHRlcm4gICAgPSAiL1xbKC4qPylcXSguKj8pXFtcLyguKj8pXF0vaXNVIjsKCQkkaGFzX3ViYiA9IHByZWdfbWF0Y2goJHBhdHRlcm4sICRhcnRpY2xlLT5Db250ZW50KTsKCQlpZiAoY291bnQoJGhhc191YmIpKSB7CgkJCSRhcnRpY2xlLT5Db250ZW50ID0gcHJlZ19yZXBsYWNlKCAkcGF0dGVybiwgJyoqKlVCQui/h+a7pOWGheWuuSoqKicsICRhcnRpY2xlLT5Db250ZW50ICk7CQoJCQkkYXJ0aWNsZS0+SW50cm8gPSBwcmVnX3JlcGxhY2UoICRwYXR0ZXJuLCAnKioqVUJC6L+H5ruk5YaF5a65KioqJywgJGFydGljbGUtPkludHJvICk7CQoJCX0KCX0KCSR0ZW1wbGF0ZS0+U2V0VGFncygnYXJ0aWNsZXMnLCAkYXJ0aWNsZXMpOwp9CmZ1bmN0aW9uIGRtX3Rvb2xzX0ZlZWRfQmVnaW4oKXsKCWdsb2JhbCAkemJwLCRkbV90b29sczsKCWlmICghJHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+ZG1fdG9vbHNfeHViYl9mZWVkKXJldHVybjsKCiAgICBmb3JlYWNoICgkR0xPQkFMU1snaG9va3MnXVsnRmlsdGVyX1BsdWdpbl9WaWV3RmVlZF9CZWdpbiddIGFzICRmcG5hbWUgPT4gJiRmcHNpZ25hbCkgewogICAgICAgICRmcHJldHVybiA9ICRmcG5hbWUoKTsKICAgICAgICBpZiAoJGZwc2lnbmFsID09IFBMVUdJTl9FWElUU0lHTkFMX1JFVFVSTikgewogICAgICAgICAgICAkZnBzaWduYWwgPSBQTFVHSU5fRVhJVFNJR05BTF9OT05FOwoKICAgICAgICAgICAgcmV0dXJuICRmcHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgJHJzczIgPSBuZXcgUnNzMigkemJwLT5uYW1lLCAkemJwLT5ob3N0LCAkemJwLT5zdWJuYW1lKTsKCiAgICBmb3JlYWNoICgkR0xPQkFMU1snaG9va3MnXVsnRmlsdGVyX1BsdWdpbl9WaWV3RmVlZF9Db3JlJ10gYXMgJGZwbmFtZSA9PiAmJGZwc2lnbmFsKSB7CiAgICAgICAgJGZwbmFtZSgkdyk7CiAgICB9CgogICAgJGFydGljbGVzID0gJHpicC0+R2V0QXJ0aWNsZUxpc3QoCiAgICAgICAgJyonLAogICAgICAgIGFycmF5KGFycmF5KCc9JywgJ2xvZ19TdGF0dXMnLCAwKSksCiAgICAgICAgYXJyYXkoJ2xvZ19Qb3N0VGltZScgPT4gJ0RFU0MnKSwKICAgICAgICAkemJwLT5vcHRpb25bJ1pDX1JTUzJfQ09VTlQnXSwKICAgICAgICBudWxsCiAgICApOwoKICAgIGZvcmVhY2ggKCRhcnRpY2xlcyBhcyAkYXJ0aWNsZSkgewoJCSRwYXR0ZXJuICAgID0gIi9cWyguKj8pXF0uKlxbXC8oLio/KVxdL2lzVSI7CgkJJGhhc191YmIgPSBwcmVnX21hdGNoKCRwYXR0ZXJuLCAkYXJ0aWNsZS0+Q29udGVudCk7CgkJaWYgKGNvdW50KCRoYXNfdWJiKSkgewoJCQkkYXJ0aWNsZS0+Q29udGVudCA9IHByZWdfcmVwbGFjZSggJHBhdHRlcm4sICcqKipVQkLov4fmu6TlhoXlrrkqKionLCAkYXJ0aWNsZS0+Q29udGVudCApOwkKCQkJJGFydGljbGUtPkludHJvID0gcHJlZ19yZXBsYWNlKCAkcGF0dGVybiwgJyoqKlVCQui/h+a7pOWGheWuuSoqKicsICRhcnRpY2xlLT5JbnRybyApOwkKCQl9CiAgICAgICAgJHJzczItPmFkZEl0ZW0oJGFydGljbGUtPlRpdGxlLCAkYXJ0aWNsZS0+VXJsLCAoJHpicC0+b3B0aW9uWydaQ19SU1NfRVhQT1JUX1dIT0xFJ10gPT0gdHJ1ZSA/ICRhcnRpY2xlLT5Db250ZW50IDogJGFydGljbGUtPkludHJvKSwgJGFydGljbGUtPlBvc3RUaW1lKTsKICAgIH0KCiAgICBoZWFkZXIoIkNvbnRlbnQtdHlwZTp0ZXh0L3htbDsgQ2hhcnNldD11dGYtOCIpOwoKICAgIGVjaG8gJHJzczItPnNhdmVYTUwoKTsKICAgIFJ1blRpbWUoKTsKICAgIGRpZSgpOwp9CmZ1bmN0aW9uIGRtX3Rvb2xzX01vZHVsZU1uZygpewoJZ2xvYmFsICR6YnAsJGRtX3Rvb2xzOwoJaWYgKCEkemJwLT5Db25maWcoJGRtX3Rvb2xzWyduYW1lJ10pLT5kbV90b29sc19Db2RlTWlycm9yKXJldHVybjsKCWVjaG8gJwoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJDb250ZW50IikhPW51bGwpewoJdmFyIENvbnRlbnQgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQ29udGVudCIpLCB7bW9kZTogInRleHQvaHRtbCIsbGluZU51bWJlcnM6IHRydWUsbGluZVdyYXBwaW5nOnRydWV9KTsKCX0KCTwvc2NyaXB0PgoJJzsKfQpmdW5jdGlvbiBkbV90b29sc19hZG1pbl9oZWFkKCl7CglnbG9iYWwgJHpicCwkZG1fdG9vbHM7CglpZiAoISR6YnAtPkNvbmZpZygkZG1fdG9vbHNbJ25hbWUnXSktPmRtX3Rvb2xzX0NvZGVNaXJyb3IpcmV0dXJuOwoJZWNobyAnPHNjcmlwdCBzcmM9IicuJGRtX3Rvb2xzWyJ1cmwiXS4nY29kZU1pcnJvci9jb2RlTWlycm9yLmpzIj48L3NjcmlwdD4nOwoJZWNobyAnPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSInLiRkbV90b29sc1sidXJsIl0uJ2NvZGVNaXJyb3IvY29kZU1pcnJvci5jc3MiIHR5cGU9InRleHQvY3NzIiBtZWRpYT0iYWxsIiAvPic7Cn0KLy/ov4fmu6TliJfooagKZnVuY3Rpb24gZG1fdG9vbHNfVmlld0xpc3RfQ29yZSgmJHR5cGUsJiRwYWdlLCYkY2F0ZWdvcnksJiRhdXRob3IsJiRkYXRldGltZSwmJHRhZywmJHcsJiRwYWdlYmFyKXsKCWdsb2JhbCAkemJwLCRkbV90b29sczs7CglpZiAoJHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+Y2xpc3QpewoJCWlmIChzdHJwb3MoJHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+Y2xpc3QsJzonKSl7CgkJCSRhcnJheWxpc3QgPSBleHBsb2RlKCc6JywkemJwLT5Db25maWcoJGRtX3Rvb2xzWyduYW1lJ10pLT5jbGlzdCk7CgkJCSRhcnJheWxpc3RfdHlwZXMgPSBleHBsb2RlKCd8JywkYXJyYXlsaXN0WzBdKTsKCQkJJGFycmF5bGlzdF9pZHMgPSBleHBsb2RlKCd8JywkYXJyYXlsaXN0WzFdKTsKCQkJCWlmIChpbl9hcnJheSgkdHlwZSwkYXJyYXlsaXN0X3R5cGVzKSl7CgkJCQkJCQkkd1tdPWFycmF5KCdOT1QgSU4nLCdsb2dfSUQnLCRhcnJheWxpc3RfaWRzKTsKCQkJCX0KCQl9ZWxzZXsKCQkJJGFycmF5bGlzdCA9IGV4cGxvZGUoJ3wnLCR6YnAtPkNvbmZpZygkZG1fdG9vbHNbJ25hbWUnXSktPmNsaXN0KTsKCQkJJHdbXT1hcnJheSgnTk9UIElOJywnbG9nX0lEJywkYXJyYXlsaXN0KTsKCQl9Cgl9CglpZiAoJHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+Y2xpc3RfY2F0KXsKCQlpZiAoc3RycG9zKCR6YnAtPkNvbmZpZygkZG1fdG9vbHNbJ25hbWUnXSktPmNsaXN0X2NhdCwnOicpKXsKCQkJJGFycmF5X2xpc3QgPSBleHBsb2RlKCc6JywkemJwLT5Db25maWcoJGRtX3Rvb2xzWyduYW1lJ10pLT5jbGlzdF9jYXQpOwoJCQkkYXJyYXlfbGlzdF90eXBlcyA9IGV4cGxvZGUoJ3wnLCRhcnJheV9saXN0WzBdKTsKCQkJJGFycmF5X2xpc3RfaWRzID0gZXhwbG9kZSgnfCcsJGFycmF5X2xpc3RbMV0pOwoJCWlmIChpbl9hcnJheSgkdHlwZSwkYXJyYXlfbGlzdF90eXBlcykpewoJCQkkd1tdPWFycmF5KCdOT1QgSU4nLCdsb2dfQ2F0ZUlEJywkYXJyYXlfbGlzdF9pZHMpOwoJCQl9CgkJfWVsc2V7CgkJCSRhcnJheV9saXN0ID0gZXhwbG9kZSgnfCcsJHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+Y2xpc3RfY2F0KTsKCQkJJHdbXT1hcnJheSgnTk9UIElOJywnbG9nX0NhdGVJRCcsJGFycmF5X2xpc3QpOwoJCX0KCX0KLyogCSRwYWdlYmFyID0gbmV3IFBhZ2ViYXIoJHpicC0+b3B0aW9uWydaQ19JTkRFWF9SRUdFWCddKTsKICAgICRwYWdlYmFyLT5QYWdlQ291bnQgPSAkemJwLT5kaXNwbGF5Y291bnQ7CiAgICAkcGFnZWJhci0+UGFnZU5vdyA9ICRwYWdlOwogICAgJHBhZ2ViYXItPlBhZ2VCYXJDb3VudCA9ICR6YnAtPnBhZ2ViYXJjb3VudDsgKi8KCn0KZnVuY3Rpb24gZG1fdG9vbHNfbWFrZV90ZW1wbGF0ZXRhZ3MoJiR0ZW1wbGF0ZSl7CglnbG9iYWwgJHpicCwkZG1fdG9vbHM7CglpZiAoJHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+eF9oZWFkX3RpdGxlKSB7CgkJJHpicC0+aGVhZGVyIC49ICI8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj4KICAgdmFyIE9yaWdpblRpdGlsZSA9IGRvY3VtZW50LnRpdGxlOwogICAgdmFyIHRpdGxlVGltZTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoZG9jdW1lbnQuaGlkZGVuKSB7CiAgICAgICAgICAgIGRvY3VtZW50LnRpdGxlID0gJ3skemJwLT5Db25maWcoJGRtX3Rvb2xzWyduYW1lJ10pLT54X2hlYWRfb3V0dGl0bGV9JzsKICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpdGxlVGltZSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBkb2N1bWVudC50aXRsZSA9ICd7JHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+eF9oZWFkX2ludGl0bGV9ICcgKyBPcmlnaW5UaXRpbGU7CiAgICAgICAgICAgIHRpdGxlVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBkb2N1bWVudC50aXRsZSA9IE9yaWdpblRpdGlsZTsKICAgICAgICAgICAgfSwgMjAwMCk7CiAgICAgICAgfQogICAgfSk7CgkJPC9zY3JpcHQ+XG4iLiJcclxuIjsKCX0KCgkJJHpicC0+Zm9vdGVyIC49ICR6YnAtPkNvbmZpZygkZG1fdG9vbHNbJ25hbWUnXSktPmRtX3Rvb2xzX2F1dG9iYWlkdV9zd2l0Y2g/Igo8c2NyaXB0PgooZnVuY3Rpb24oKXsKICAgIHZhciBicCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgdmFyIGN1clByb3RvY29sID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sLnNwbGl0KCc6JylbMF07CiAgICBpZiAoY3VyUHJvdG9jb2wgPT09ICdodHRwcycpIHsKICAgICAgICBicC5zcmMgPSAnaHR0cHM6Ly96ei5iZHN0YXRpYy5jb20vbGlua3N1Ym1pdC9wdXNoLmpzJzsgICAgICAgIAogICAgfQogICAgZWxzZSB7CiAgICAgICAgYnAuc3JjID0gJ2h0dHA6Ly9wdXNoLnpoYW56aGFuZy5iYWlkdS5jb20vcHVzaC5qcyc7CiAgICB9CiAgICB2YXIgcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpWzBdOwogICAgcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShicCwgcyk7Cn0pKCk7Cjwvc2NyaXB0PgoJCSIuIlxyXG4iOicnOwoJCWlmICgkemJwLT5Db25maWcoJGRtX3Rvb2xzWyduYW1lJ10pLT5kbV90b29sc19hdXRvc28pewoJCSR6YnAtPmZvb3RlciAuPSAnPHNjcmlwdD4oZnVuY3Rpb24oKXt2YXIgc3JjID0gKGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sID09ICJodHRwOiIpID8gImh0dHA6Ly9qcy5wYXNzcG9ydC5xaWh1Y2RuLmNvbS8xMS4wLjEuanM/Jy4kemJwLT5Db25maWcoJGRtX3Rvb2xzWyduYW1lJ10pLT5kbV90b29sc19hdXRvc28uJyI6Imh0dHBzOi8vanNwYXNzcG9ydC5zc2wucWhpbWcuY29tLzExLjAuMS5qcz8nLiR6YnAtPkNvbmZpZygkZG1fdG9vbHNbJ25hbWUnXSktPmRtX3Rvb2xzX2F1dG9zby4nIjtkb2N1bWVudC53cml0ZShcJzxzY3JpcHQgc3JjPSJcJyArIHNyYyArIFwnIiBpZD0ic296eiI+PFwvc2NyaXB0PlwnKTt9KSgpOzwvc2NyaXB0PicuIlxyXG4iOwkKCQl9CQoKfQoKZnVuY3Rpb24gZG1fdG9vbHNfYmFzZTY0X2VuY29kZSgkc3RyaW5nKSB7CiAgICRkYXRhID0gYmFzZTY0X2VuY29kZSgkc3RyaW5nKTsKICAgJGRhdGEgPSBzdHJfcmVwbGFjZShhcnJheSgnKycsJy8nLCc9JyksYXJyYXkoJ34nLCdfJywnJyksJGRhdGEpOwogICByZXR1cm4gJGRhdGE7Cn0KZnVuY3Rpb24gZG1fdG9vbHNfYmFzZTY0X2RlY29kZSgkc3RyaW5nKSB7CiAgICRkYXRhID0gc3RyX3JlcGxhY2UoYXJyYXkoJy0nLCdfJyksYXJyYXkoJysnLCcvJyksJHN0cmluZyk7CiAgICRtb2Q0ID0gc3RybGVuKCRkYXRhKSAlIDQ7CiAgIGlmICgkbW9kNCkgewoJICAgJGRhdGEgLj0gc3Vic3RyKCc9PT09JywgJG1vZDQpOwogICB9CiAgIHJldHVybiBiYXNlNjRfZGVjb2RlKCRkYXRhKTsKfSAgICAKZnVuY3Rpb24gZG1fdG9vbHNfZGVsZXRlRGlyKCRkaXJOYW1lKXsgCglpZihpc19kaXIoJGRpck5hbWUpJiZmaWxlX2V4aXN0cygkZGlyTmFtZSkpewoJCWlmICggJGhhbmRsZSA9IG9wZW5kaXIoICIkZGlyTmFtZSIgKSApIHsgIAoJCQl3aGlsZSAoIGZhbHNlICE9PSAoICRpdGVtID0gcmVhZGRpciggJGhhbmRsZSApICkgKSB7ICAKCQkJCWlmICggJGl0ZW0gIT0gIi4iICYmICRpdGVtICE9ICIuLiIgKSB7ICAKCQkJCQlpZiAoIGlzX2RpciggIiRkaXJOYW1lLyRpdGVtIiApICkgeyAgCgkJCQkJCWRtX3Rvb2xzX2RlbGV0ZURpciggIiRkaXJOYW1lLyRpdGVtIiApOyAgCgkJCQkJfSBlbHNlIHsgIAoJCQkJCQl1bmxpbmsoICIkZGlyTmFtZS8kaXRlbSIgKTsKCQkJCQl9CgkJCQl9ICAKCQkJfSAgCgkgICB9ICAKCQljbG9zZWRpciggJGhhbmRsZSApOyAgCgkJcm1kaXIoICRkaXJOYW1lICk7Cgl9Cn0KCmZ1bmN0aW9uIGRtX3Rvb2xzX3NhdmVfY29uZmlnKCRhX3NldHNfYXJyYXksJGJfcmVkaXJlY3QsJGNfbWVzc2FnZSkgewoJZ2xvYmFsICR6YnAsJGRtX3Rvb2xzOwoJCWZvcmVhY2ggKCRhX3NldHNfYXJyYXkgYXMgJGtleT0+JGFfc2V0KXsKCQkJJHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+JGtleSA9ICRhX3NldD9HZXRWYXJzKCRrZXksJ1BPU1QnKTpHZXRWYXJzQnlEZWZhdWx0KCRrZXksJ1BPU1QnLCRhX3NldCk7OwoJCX0KCQkkemJwLT5TYXZlQ29uZmlnKCRkbV90b29sc1snbmFtZSddKTsKCQkkemJwLT5TZXRIaW50KCdnb29kJywkY19tZXNzYWdlKTsKCQlSZWRpcmVjdCgkYl9yZWRpcmVjdCk7Cn0KZnVuY3Rpb24gZG1fdG9vbHNfZGVmYXVsdF9jb25maWcoJGFfc2V0c19hcnJheSwkaGFza2V5KSB7CglnbG9iYWwgJHpicCwkZG1fdG9vbHM7CglpZiAoIWlzX2FycmF5KCRhX3NldHNfYXJyYXkpKXJldHVybjsKCWlmKCEkemJwLT5Db25maWcoJGRtX3Rvb2xzWyduYW1lJ10pLT5IYXNLZXkoJGhhc2tleSkpIHsKCQlmb3JlYWNoICgkYV9zZXRzX2FycmF5IGFzICRrZXk9PiRhX3NldCl7CgkJJHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+JGtleT0kYV9zZXQ/JGFfc2V0OmZhbHNlOwoJCX0KCQkkemJwLT5TYXZlQ29uZmlnKCRkbV90b29sc1snbmFtZSddKTsJCgl9Cn0KJGRtX3Rvb2xzX2NvbmZpZ3NfYWxsID0gYXJyYXkoCgkndmVyc2lvbicgPT4gJzEuMScsCgkiZG1fdG9vbHNfQ29kZU1pcnJvciIgPT4gZmFsc2UsCgkiZG1fdG9vbHNfcmVtb3RlaW1nX3N3aXRjaCIgPT4gZmFsc2UsCgkiZG1fdG9vbHNfYXV0b3RhZ3Nfc3dpdGNoIiA9PiBmYWxzZSwKCSJkbV90b29sc19hdXRvYmFpZHVfc3dpdGNoIiA9PiBmYWxzZSwKCSJkbV90b29sc19hdXRvc28iID0+ICcnLAoJImNsaXN0X2NhdCIgPT4gIiIsCgkiY2xpc3QiID0+ICIiLAoJInhfaGVhZF9vdXR0aXRsZSIgPT4gIiIsCgkieF9oZWFkX2ludGl0bGUiID0+ICIiLAoJImRtX3Rvb2xzX2FydGljbGVpbWdfeHRpdGxlIiA9PiAyLAoJImRtX3Rvb2xzX2FydGljbGVpbWdfeGFsdCIgPT4gMiwKCSJkbV90b29sc19hcnRpY2xlaW1nX2xhc3R0eHQiID0+ICfnrKwlZOW8oCcsCgkiZG1fdG9vbHNfeHViYl9saXN0IiA9PiBmYWxzZSwKCSJkbV90b29sc194dWJiX2ZlZWQiID0+IGZhbHNlCik7CmZ1bmN0aW9uIEluc3RhbGxQbHVnaW5fZG1fdG9vbHMoKSB7CglnbG9iYWwgJHpicCwkZG1fdG9vbHNfY29uZmlnc19hbGwsJGRtX3Rvb2xzOwoJZG1fdG9vbHNfZGVmYXVsdF9jb25maWcoJGRtX3Rvb2xzX2NvbmZpZ3NfYWxsLCJ2ZXJzaW9uIik7CgkkemJwLT5TYXZlQ29uZmlnKCRkbV90b29sc1snbmFtZSddKTsKCn0KZnVuY3Rpb24gVW5pbnN0YWxsUGx1Z2luX2RtX3Rvb2xzKCkgewoJZ2xvYmFsICR6YnAsJGJsb2dwYXRoLCRkbV90b29sczsKCSR6YnAtPkRlbENvbmZpZygkZG1fdG9vbHNbJ25hbWUnXSk7Cn0=dm_tools/logo.pngiVBORw0KGgoAAAANSUhEUgAAALQAAAC0CAYAAAA9zQYyAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAABi8SURBVHhe7Z196GXFecd3t/7hHwsVuhAhQhYiuJCFbulChS7U0IVs6ZYuuCFb2FJLNyhkSy0VorBQi3+YYMtSRGzRsA0pmLIJppiiwRQtsWjRoLIrJqioGNGiQUsCGrRNP5/7m7Oce+6cc19+9+W8PF/4Mudlzrkzzzx3zrw888yOQCAQCAQCgUAgEAgEAoFAIBAIBFaInSkMJPxyx449BLvhFZLz3QhpD+HlhFcS/grXr4JibwrLGD23dTgVP4fvbh2O4SfwY/g2v/kLfvNdQuO+Lzn/Oec+9yHh24SBBOQxHKAIKuBVhFeR8b2En/S8INeuJOwcVHgC/wQF34SvkR+PX/Max/5Beo9eKTQFexncx+E+Mraf489wXChrUasOEsjCmrxQ+B/B55GJ4Y8IPyTsBTqp0BTO5QT7kvL+usfwakMydBlhYA4gRxX7Zahyv8D5RZUd2szpFDqh0P+HspLQQwj6tzm9luP9W3cCqwTyVsmfgv8Jn9iFonu9zWilQqPANg+OwM/BQyRyrW1bCtLPs5/hIvQz/THpeJ1wBOIUHbMRfIbzhT7dPDvqcKZTz/dwbsd0BM4/lQ7tA/gFUj6XEWetzSjSYaf0cfjv8BEUXIVvFZBJO4CwrIF/n8OjJGolNTDvLzpJL/Mbr3OuQjqCoOJKj3OjDq0FeXAkxj+AnV1HaDx2NMYOr38Av2650Zhtg99QoR/h/f9K+DjhxjuepGFzQCAH4PUcnlyW0HmfSuunUWH/2JB3F0o8iJ5+DqnZ5siOfY1rYNHnMNw2eK8Vwjd537fhE1tX1w9+e70g434yjxL+NT9+YOvq/OB5P3/PJb5gyPs62ZHZJJBj0cH2q2gH2/AgcrS2Xwi8y3L4KocqeG9GUMZAJh1Su4Ga4iXCX85LnnsR3sfxDdBRjcAKYT8GnoBn4bPwo3J5zEKeeQvezLF/mv6ATB2ET1cz3ETiq8D3whOcd3LCo0+gDHZTFkfgSMHLZTWNxLcSO5xe1V2QicuSAGb6dxPvB4S3Ei6lXRdYHSgja/DT8FE4a/meI7w0etMpkPDLycD5coZyJM5L8Awc9Exel0E57qH8boZTa27iWGnNauvSDpBga2YTns2U5P5jhN3/DAXGQLnavHywWt5lcv9Fwu4oNQm+pZqJgty7QHhdihroKSjjA5R1baXGvbMpartBYq8ksT/LZOAjqKKHrcWAQJmfgh/k9IFw4WHbtcEM1CT+WIoSGBgo+0PoQK6SuyNFaS9IpGPF1YTfl24HBgp04ExGLx5Nt5eGXSlcJiZmmHbu2PFKOgwMFzlDpoVnI+uwCoXWtnYM/Bu/BGNyZKCg7B17/vLW2RgmdKV1IPGH/ZxUyeflAowJk4GBsneQ4MmqPkiun0rR2g0S6hhzLgPvEd4KY6RjAFBh4TtlHSjIdafDu6EHJHY/nOjVFjQz8DTH/TJaCVgjO6l2EtbOGnLPUa9uTaqR4OxQTZnc1xrrLhhLqjoOylNb69spyzfKZVwl952POJ4e6xZIuNOgTnNmM1cm8Z6G2gOETUdHQLlpw2GzItvErJJ4VmAuresuyIhGSndVM9dE4hdWd9cSRnu7RaA8nNK24pnZyk4SV0O1pQ/TbQxkRkE0Gq3kyDM/gw9zbGfSdYfR7l4TkLWLMgoFfgC+xXm2nOrIM9be/bXdIXMK6Dyc+d9dJs99AJ+EZzl39YrrEkPJtwlkaGfOzryrVOzXWAM39oGayLNWQmtX5J0pXDvIsN6MtPu4kXBbky68w8WvIy9Aia4xdFFsrDGsAFkVawhHi2Sh3qUKb1Pbqhh4pyvm/4n3fE3Zb11dL/jdzQIh2Ea+jvALhMdI0FLbWbzX1cijVd8pfJ3fKI4LJ4i9AflVKa0gdGuwl/xdTahfDxXY86V2unm3Svwd3vsvhBt3ZcDvtwcIR+U+BFVwncy4+nilnUJ+p3AoM/LLkVh4/Sycx4wczUD/BAXGHM0sE/yuf+ryUqXCxYNDYyMHM4SFF1QN5Y3v8ZiDmlWB33alvf44dDjTCn8cBUhLe4HgdkMV/Ask9Iatq+0E6fQPseiS/THPSW0E+fsuafwahyqwLiQCiwBB6vrAKfNs5yO4HlIGdsZbv0CjtTU0grscniOBJ9KlLIhjs+CP07HtxE9Dw1Gnh3sxjl0BcrLDZj9CatpbmHYq78YvBc9aQ38erqS5tV2QrvYBodnUeJjE2dzIgvt+3v+BOF+Ffu6zoFYplLtQ9lFbE9ouXUubc51IclEetvtVOsOR0pLXkRITZtu8PKtPPM08byJO7YgHcRw9+iyslfumQJraBYTlYP5DJCw7Rcq9mRR5VvC+S6MC0K0nCseHn+Dce8UWE0U8hbYS54dVkIaiM6piOhojPdYT6pvcN/+Fg8mljdrw3qmKzf1nuKdSt2qUiPS0C9Sod5Oo0+l0DAhR/3V/BDcyxlmFBU9wqcA5H+3Hkk5nxWjflK3D0Ts+3rWlyBsHaXFUxWZIdoKEew7X2fxozShHq4Aya7tR1ym5kzDawxsAstdDUnZml+uNfZxBA+E8UCO0m1OUwIZAGRzPKTXXnk5RAmUgHE0RcwLrhkOSAYCy0JPoWPkktt+/xrqBsOqaG0udCg8sDspCA6aJOQGutabZsYpV34vCYbUxICw7ga0c7xwiUufPPVaqmCi7TaE1Co2wynYSBTSsyQ4bBTaG3HK5YmImUIDPlmO/Y58yyfVbUpTAhkFZHM+VEYw2dA4IbMJbJde6u6iyR6As6vzTdccdwbqBYI6VhVUwKXU3nJL0EMj+aE6ZE1ttBblxILjadYfc69dCy5YDWbuvyt3lMiiTe35Ro3ZuAgJSiLU7ZXHvPdi/nZVaBGRb7FhW62MjlVGrbbhbAwWFwPT0nxWm5L4rkF0JHjX2koAsrUyc5q6tUGS6H1vrzQMEpnAfLQsyR+JoeP4NjmtNTQPNQHauxL8bTl3lTRzdEkQlsigQoDXGTMvpifcGdBu5cFAzBchIr1Z3wMbauCDx3Fbidhhy3S4Q4l4EOpeTGuKXHdQMfpwUGexDHlYOD8K5lrQR3y9lNDGWDYS6kPclaSGmwtTrqavKe/vZJG9XkM9rzStcyOOR5LnOeT3amcJOASHrLelGDm8gAwuPdvAOV3y4JN8lRc9zfpGwM85pSK95L288by16gPQv7HuDd2mvoeH+PTBnt9FqkObuAuFfAU9yqJuDpXUKead2JSr7iLz7vwlf47rHxTXDlYHfcjnYlfzOaHkYxyqpy8I8H13j3tKWgvH+iwRf5516PuqsQRhp7wf4PFrgTpH/ITxExlbaeUEBrMnKS6WK9X4FPK6r6a1Zy2O4xbrFAirrOtL/FL/zb4TWyK1Y1hYogUJyQuAwyj2xtVxwnMiol0Odna+hKRRrspX5xus7kJtfmW8ht2/DJ7auBtYOaxdrYpjdlGZe8h7HsCe28G07SbOGW0vxLJVkoJvizg5zdqqGRtA2KWwn/xUJP7h1dX7wDjt0z0DbjT/0eFcyUueePilsw9oRs537SWj73A5Y0Rlbi3Mafr9wFFnmm9D0j84LlwfELY92GO4nnQuvJOFd1tZ/zztsX3fGTQFp7QYQsPsfniXBc20wxDMqhZ2f/yC0kLa9rIt3OrqiYpebN9WOncqfHVLkWR3FjBRRcD7myZRzHcY4krLddPrHs7Z154PfMeSdc/0Zec6hzL+E30+XAtsBAnU1uGaj2c9kjsR/Ft4Jj3DeK1df2wGycJGrZgHuXzOxmKKJxHdCK/on2wECdMSicZuwgsRTic/A1izYbDuQ1VXwJjjTBkDEsSzCCGwRILy69WuXSBztNbQSm6sZEpgE8tRexq9aYyeb+7Ekbl4guOsUXFWYBbnnfnca+UdzYslAprox1ri/1v6De1o/Rk09CxCU+xpmhcl1lVwTxlDkFQMZWw424bJDmamMYtXQNCCorLupJMCoFdYMZK6FY9ZmmutnUrRAHRDSkxnB2a4Le9wNAdm7JG5Cqbl2IUUJ1AEhtdp32lBBOWheUC0Xm4CxgqUOCqcssIIILobiNgzKQXPWibKBZavBjaNNzhqdtvwYAWmXOwauxzDRhkG5aHc+Bq69T9ms1C6886A21qxxrBbgmiu7Q6k3BMqgzg3YwylKoA4Iyl51zvG5A/qt3yevT1DWyhzWDd1lN3YKVICgzuUEKLn3LOGxFDWwIiBjJ7cmRpwKcu+hFDUwDQhMJzONxjPcfxo6PR419hKBTHXM6GrvrNwl961UYnJrHigwBDfVIow4r0KN0mPSZUEgP10e6HTm1ap8qySOZdKqkY3OAME5jHc7QpxqCSaJp42H6wm1nY6auwHIx46eXqZmsmaUxLXDHjXzdoEQ7Sg2Om+skviF5yRtP5wUGKzdAXkv20Ev4jnpJRgdwGUCwRYuXmfyxVYlzzlK8iTURPIo11yy1MtanPxdnfLo1+0xuNBaSZ5zjWGnXBfvTGFngHBVbKfCbyTx22438y7XFY42dYc/5p2GLjtq9YQB6bYd66ZK2rhc43HiPtK+rT8q73Qf73s4/GfCzqwnFKS3u6D2sAD/DJ4kIwu7v6oDBeu6P9f1SY9V8p/yW57rSam6WfzY2sBZwDuqaxFHTmi4bn5c8vRr0GMV2HM311/65vkpr9+EX9+Vma3tCpBNP0CBuBD0cxzqm6MVK1hIT9W7ktC9Vys+4aTPr5M+Ob4He+GTozcKXQYFtRfaifkt6ErnMG4qIf3RvoJc/gZ2qkkRABSgn/BjNFGym+MPlcjDDvYNsDed417W0DlQeDcR3EmGy+3VzgIlLJozBfXj8T9ct4N4ZJ588owd4dtoO39r60p30XuFprBsfpwjo1MddxNPpzSPQP282enbTWhnzBr+Vw0TVZbRMfeX1h7mN8rbQ78P7YSqqK9zr1DaImwcheEPfC3BYXg9cWdy7cVv/C1xb4OdbYaQ9v6CAnKs+TEyqfLVgjh6VvpHDu0gLeTsnHdURytE9Vq1k1gdJVkJ0miQQ51/wu819ifIx/eJ83noHyrQFlAwWRvegtxzouUcHJRPD/JuX2Ka4deLhNU/Z2BToED0CNSkzE7/Dnrkg/xrVVc768q98ylqYNOgMCZWvaRC0ngpbBISkIm+N7RUnJCV5N7EsqvAmkEhaISTKxytysIVQgbI5gTMrRLSiCmsFjcJCuGOTMHY/AhlbgDycTx6TG6Jg9/jcaNAeSf2MeTauXQ70ADklHPyczrd7gRa5cZgScjVxN9LYaAZ7mpQxWdS2An0UaFHW0tU8LspDDQj12He1i4C60YfFTq3356LaaMN3QCaFidqJl1eSGFgE0Bx3TZ5rB0oKTC9l4ZSZ4BsjsPcKIdOMge7dK01oCCyG9yr1DAcPyYgk8IHdHYRMtdvTlEDmwSFofvXJg/0jxIOurZGBkdg00yhvjdiDLotoEAOwmm2HA9ArdIGAfLt6m+bF7PYcjQadAU2AApGpZ7qd4I4F+BNHPfS5wR507ZFRzK1X62CxPHrFcrcVlg4FJL+ObIFWCbxrLXd4kwHhZ02XiI/WhuqxDYdsvktk3h6eL0lPR5oOyisk3CufcGJr4OVuzl2WtjRk1a2KUnXbqgCn4bfWCCfTxP2Yop7ZwoHAQpNG18dp/wFGZ/b3pfnNNB3ib90j/CXec9oCRThyicg+H3dF7gHuW4N/IL8Jlx4T2/e4zbRLpT9TrrUeZCX4YGCdC8+1xh+aVFlqIL3lTeadymVSv6/hN7T0/1oBYjxOC4vnyr72LDtOhr3JZ5LvlTcEXnGcCng3Y/zPhX58XQp0BfwudXzprvRzvWZ7irJpwZIYUHXd1DIuhgrOlJzOYbsIsmjnd+jKfuBPoMCd2Sk0el320h69bY604hGmTzjn7c3vjloRgXKoIBPEdyFYFq3SBSls1NaOJbUCOsV0jnmXJL0O1F0I7yOazP7wOPdrnz/U5gz7uoMSH9AUKD63ngAgczqv+O78O92oQic6/tDR4r66TD0XCeLdvI8L8POXVEb+p6ig+goycilAe943ZB3jJw/EuruwBGVuZSN53TjYH6uhyp4Yy1MXNPz5+Tp/q0rgU6CgrSJ4XRv9rNckDg/gM4odm6JP+l2tvBmONW/NnHuSo8FugYKcKoyc/88YS+MmchHYc/R2N7m/tn0SKBLoOCati6zRu6l8RL5K3ZEaLJKdKw+0BVQaNmVzhSkdg12DnsP8ruHvGqQlJODbgzCUKkLoKDcNm6iduKaJqeD2iKO/NoMsVk1JgvJ9TtStECbQUEdzBUgHOQuteRbpZ6wk+baSylKoM2goE5lCu/JdHuQIP9HqjJJ7MykSx9Xfc+EnXljn5wLhMEAmTyVDseAQnemHT1YhaaQcso7dVKl55jIP3L6ECUp+7QOtBF8Xvenz+kYuT5Ij5vk3RXgOVdgz6YogbaDwprYIphrLul3K4fBgPw2jXLEsqyugMKa6BimQtRyrVNOChcF+XRKPLvmUjkQVm1RAm0GhVa7pJ97mpAufdfWtoC8OVNYu5E992KmsGug4PZRcE3Tv84a3gc7vQq8AHmyeaGD82m2HA+kRwJdg8oKZ7G208XYYdg5Y3jSbtNC9wyvlvOUI3FsT/fC4H+woAC1umv0KFSQeO/Acxwfg611ZkgaC5PRmfIliWv/wZXxsQtW10Eh+jnWt0Vtu7LKpAAPQ9ciHuXaxjpR/P5+eAraRJp7OVaZPG++XDzcqabWzhQGSqBA90CNck5NW+WRA886aaM3fN0ZuPrkNd7jsatOtrVLa0qbHdWreZcrYz7lMbyW85W4MuM3XJ1zz66tXXZbDWQQqEOqnVyfp2Iv5ROMcjjrplJfWnKVUN4W2d8q/16xbGvPspSWdOgfZK7mEs88wTNfhJ1edzh4UJDOot0EdZmV/UR3gaT/DXgvx9dB8+TmmzYrpnaICxLXUZ8zSTSBroPCtKNlO/UhWOuuty0kjc9C2/cHUxayIK7NF8eldTE81ekOcRzxaZ23Vr4egUVBgepSTIMelUU/cwcR6NJcds0L0mIT5jmo1dx/kZZnYLkpMxNSvlyxow/A2k4hcWyC/B5c+Qb8s4K0BJYJCtlOm+sQ7bh9OoUqxV6Evaz27yX/eSnUP4fKqzIvDfyO7faThHfw7uwflXuPcO8P4LY6u8sC6QisAyoHfBGBT9R4XNc3x/3cyzl3/JjjkfkmxzqAdMRkrcrD71pj63ynzr7lNu59JR0HhgAUom5BrtPunXCRQDptY+d2y/qAsLc2L4EKKGwnbCYcvHRJmQuQZh3tjOVDcj0W0w4FFPihqgJIlKCT3j9J94TtNNdiMe1QkKvVuNbZlSCkPbvaB27cdnqwawrXDEc7qngihZ0DSnMR5c0N1W1syLJAKPR6kJti7uyWwyizw3kTNi5c3/jQXSj0GrBzx46fpsMyOuszD8V1AmniD8m1QbuBGAxQABcFTLQ5aYseT1E6BdL9UCYv0SkcCihwh+0m7CO8Bjfe7pwHpPd0NR8pL2GwNCRQ4MdrFMElUZ0Yi1aZYd3ESqxwGRoo+DrfF+/BIyla60AaNTU9W013Qe6F744hgsLXF3OtaSb3HoS11m2bAOnR23/twlrunU9RA0MESuBeiE2+MDSgvxc22i+vEqTDGllXB42La9P91tlEB9YMlEBfILO4TbgAXYG9csMffqPYeNQVLFMXCRPH5lMoc2ALKgNKkXXBlSNxX1LZONZ1wrYVnHdoEnqAd7q07DycefUNcd3CYu7Fw+vAzhQGNgCVAmpj/GUKYi4fzDznnoJOZLhg1dXkvyAs73s4gr/BvdHQIMfunWgbfX9xbRHwnud27djxG+k0EBgHCmJteSs138z+QDZJ0vlBSnogUA+U5Qp4e1sU26YFPJG7B8OgPzAbUKI7Mwq0FvLbrhI/A4tmiqvBc3GjQxiYDSiTLsUmlIjrjnrUekqdl7zrI6gCO2liZ3Nito97dkSrz72abrcO0SlsIVQs+A6FMzaSwLW3ufZZDl00ezXnugMz1N7auFrAVTuXmnSOFtkCF96+Au1MvkzHrtE6DsU9zvsnJk74vft59ovpNBCYjlRrjtWMkutvwZVOuvA7hdPKnN2GtXqrZjMDHQDKcwWK0+SIXc9FB1L0pYF3HubdTfuf35uiBgLzAQVy5q5xwkPFhrom28648l6e14/0her7y+S+U92tnFApEG3olgMFcsX4oxTU1CVbxHOSRZe3tpN1VvMTrr1LWKz/c8TCNrb8RAp1wzvVfJXnWuf2K9BRoExOUTfWnqskv63H0lbXzIGOAYXSAu4uqDF9VvGWTX5L+5FOLhMLdAQomnvBqNgrm01UkQl1XRa1cmA9QNm01jsJ7RRuu9bmHTpDdxKlk7t8FaCNH+g6UMDd8BCHdu6ugQ7n2eG7nAK+NNFCnPIkix3Ii/B54lyES3XFGwgEAoFAIBAIBAKBQCAQCAQCgUD/sGPH/wNYoi+lvi05/wAAAABJRU5ErkJggg==dm_tools/plugin/remoteimage/remoteimage.phpPD9waHANCmZ1bmN0aW9uIGRtX3Rvb2xzX1JlbW90ZUltYWdlKCYkYXJ0aWNsZSkgew0KCWdsb2JhbCAkemJwOw0KCXNldF90aW1lX2xpbWl0KDApOy8v5rC45LmF5omn6KGM55u05Yiw56iL5bqP57uT5p2fDQoJWkJsb2dFeGNlcHRpb246OkNsZWFyRXJyb3JIb29rKCk7DQoJJGNvbnRlbnQgPSAkYXJ0aWNsZS0+Q29udGVudDsNCgkkcGF0dGVybiA9ICIvPGltZy4qc3JjPVtcJ3xcIl0oLiopW1wnfFwiXVxzKi4qPi9pVSI7DQoJcHJlZ19tYXRjaF9hbGwoJHBhdHRlcm4sJGNvbnRlbnQsJG1hdGNoQ29udGVudCk7Ly/lh4blpIfopoHlpITnkIbnmoTlr7nosaENCgkkcGljQXJyYXkgPSAkbWF0Y2hDb250ZW50WzFdOy8vJDENCglpZiAoJHBpY0FycmF5KXsJCQ0KCQlmb3JlYWNoKCRwaWNBcnJheSBhcyAka2V5PT4kcnVybCl7CQkJDQoJCQlpZihzdWJzdHIoJHJ1cmwsMCxzdHJsZW4oJHpicC0+aG9zdCkpIT0kemJwLT5ob3N0KSB7Ly/ov5nkuYjliKTmlq3lpJbpk77nmoTvvJ8NCgkJCQkkcGF0aD0kemJwLT51c2Vyc2Rpci4ndXBsb2FkLycuZGF0ZSgnWScpLicvJy5kYXRlKCdtJyk7CQkJDQoJCQkJaWYoIWZpbGVfZXhpc3RzKCRwYXRoKSkgbWtkaXIoJHBhdGgsMDc1NSx0cnVlKTsNCgkJCQkkcGljbmFtZT1kYXRlKCdZbWRIaXMnKS4nXycucmFuZCgxMDAwMCw5OTk5OSkuJy4nLmRtX3Rvb2xzX1JlbW90ZUltYWdlX3BpY3R5cGUoJHJ1cmwpOw0KCQkJCSRwaWM9JHBhdGguJy8nLiRwaWNuYW1lOw0KCQkJCSRnZXRwaWM9ZG1fdG9vbHNfUmVtb3RlSW1hZ2VfU2F2ZSgkcnVybCwkcGljLCRwaWNuYW1lKTsNCgkJCQkkcGljVXJsPXN0cl9yZXBsYWNlKCR6YnAtPnBhdGgsJHpicC0+aG9zdCwkcGljKTsNCgkJCQkkYXJ0aWNsZS0+Q29udGVudD1zdHJfcmVwbGFjZSgkcnVybCwkcGljVXJsLCRhcnRpY2xlLT5Db250ZW50KTsNCgkJCX0NCgkJfQ0KCX0NCg0KfQ0KDQpmdW5jdGlvbiBkbV90b29sc19SZW1vdGVJbWFnZV9waWN0eXBlICgkZmlsZSl7DQoJZ2xvYmFsICR6YnA7DQoJJGltZz1HZXRIdHRwQ29udGVudCgkZmlsZSk7DQoJJGZpbGVuYW1lPSR6YnAtPnVzZXJzZGlyLidjYWNoZS9kbV90b29sc19yZW1vdmVfaW1nLmRhdCc7DQoJJGZwMj1AZm9wZW4oJGZpbGVuYW1lLCAidyIpOw0KCWZ3cml0ZSgkZnAyLCRpbWcpOw0KCWZjbG9zZSgkZnAyKTsNCgkkaW5mbyA9IGdldGltYWdlc2l6ZSgkZmlsZW5hbWUpOw0KCSRpbmZvPSRpbmZvWydtaW1lJ107DQoJJGluZm89ZXhwbG9kZSgnLycsICRpbmZvKTsNCgkJJHN0ciA9ICRpbmZvWzFdOw0KCQlyZXR1cm4gJHN0cjsNCn0gDQoNCmZ1bmN0aW9uIGRtX3Rvb2xzX1JlbW90ZUltYWdlX1NhdmUoJHVybCwkZmlsZW5hbWU9IiIsJG5hbWUpIHsNCglnbG9iYWwgJHpicDsNCglpZigkdXJsPT0iIikgcmV0dXJuIGZhbHNlOw0KCQkkZXh0PXN0cnJjaHIoJG5hbWUsIi4iKTsNCgkJaWYoJGV4dCE9Ii5naWYiICYmICRleHQhPSIuanBlZyIgJiYgJGV4dCE9Ii5wbmciKSByZXR1cm4gZmFsc2U7DQoJJGltZyA9IEdldEh0dHBDb250ZW50KCR1cmwpOw0KCSRzaXplID0gc3RybGVuKCRpbWcpOw0KCSRmcDI9QGZvcGVuKCRmaWxlbmFtZSwgImEiKTsNCglmd3JpdGUoJGZwMiwkaW1nKTsNCglmY2xvc2UoJGZwMik7DQoJJHVwbG9hZCA9IG5ldyBVcGxvYWQ7DQoJJHVwbG9hZC0+TmFtZSA9ICRuYW1lOw0KCSR1cGxvYWQtPlNvdXJjZU5hbWUgPSAkbmFtZTsNCgkkdXBsb2FkLT5NaW1lVHlwZSA9ICIiOw0KCSR1cGxvYWQtPlNpemUgPSAkc2l6ZTsNCgkkdXBsb2FkLT5BdXRob3JJRCA9ICR6YnAtPnVzZXItPklEOw0KCSR1cGxvYWQtPlNhdmUoKTsNCglyZXR1cm4gdHJ1ZTsgDQp9dm_tools/plugin/tinymcebuttons/tinymcebuttons.cssQGNoYXJzZXQgInV0Zi04IjsKdGFibGUuYXBwaW5mbyBjYXB0aW9uIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkO3RleHQtYWxpZ246Y2VudGVyOwp9Cg==dm_tools/plugin/tinymcebuttons/tinymcebuttons.jsKGZ1bmN0aW9uKCkgew0KInVzZSBzdHJpY3QiOyAgIA0KIA0KIHRpbnltY2UuUGx1Z2luTWFuYWdlci5hZGQoJ2RtX3Rvb2xzJyxmdW5jdGlvbihlZGl0b3IsIHVybCkgew0KICBlZGl0b3IuYWRkQnV0dG9uKCdkbV90b29scycsIHsNCiAgICB0ZXh0OiAn5bCP5bel5YW3JywNCiAgICBpY29uOiBmYWxzZSwNCiAgICB0eXBlOiAnbGlzdGJveCcsDQogICAgbWVudTogW3t0ZXh0OiAn5LiA5Lqb6KGo5qC8JyxtZW51OiBbew0KICAgICAgICB0ZXh0OiAnWkLlupTnlKgnLG9uY2xpY2s6IGZ1bmN0aW9uKCkgew0KICAgICAgICAgIGVkaXRvci53aW5kb3dNYW5hZ2VyLm9wZW4oew0KICAgICAgICAgICAgdGl0bGU6ICdaYmxvZyDlupTnlKgnLGJvZHk6IFt7DQogICAgICAgICAgICAgIHR5cGU6ICd0ZXh0Ym94JywNCiAgICAgICAgICAgICAgbmFtZTogJ2FwcG5hbWUnLA0KICAgICAgICAgICAgICBsYWJlbDogJ+WQjeensCcsDQogICAgICAgICAgICAgIHZhbHVlOiAn56eA5Li76aKYWkJQ54mIJw0KICAgICAgICAgICAgfSx7DQogICAgICAgICAgICAgIHR5cGU6ICd0ZXh0Ym94JywNCiAgICAgICAgICAgICAgbmFtZTogJ2FwcHByaWNlJywNCiAgICAgICAgICAgICAgbGFiZWw6ICfllK7ku7cnLA0KICAgICAgICAgICAgICB2YWx1ZTogJzE2OCcNCiAgICAgICAgICAgIH0sew0KICAgICAgICAgICAgICB0eXBlOiAndGV4dGJveCcsDQogICAgICAgICAgICAgIG5hbWU6ICdhdXRob3InLA0KICAgICAgICAgICAgICBsYWJlbDogJ+S9nOiAhScsDQogICAgICAgICAgICAgIHZhbHVlOiAn5aSn6LCLJw0KICAgICAgICAgICAgfSx7DQogICAgICAgICAgICAgIHR5cGU6ICd0ZXh0Ym94JywNCiAgICAgICAgICAgICAgbmFtZTogJ3VybHBhZ2UnLA0KICAgICAgICAgICAgICBsYWJlbDogJ+WPkeW4g+i/nuaOpScsDQogICAgICAgICAgICAgIHZhbHVlOiAnaHR0cDovL3d3dy5pbWxnbS5jb20vJw0KICAgICAgICAgICAgfSx7DQogICAgICAgICAgICAgIHR5cGU6ICd0ZXh0Ym94JywNCiAgICAgICAgICAgICAgbmFtZTogJ2FwcGxvZ28nLA0KICAgICAgICAgICAgICBsYWJlbDogJ+WbvuaghycsDQogICAgICAgICAgICAgIHZhbHVlOiAnaHR0cDovL3d3dy5pbWxnbS5jb20vemJfdXNlcnMvdGhlbWUveGl1X3gvc2NyZWVuc2hvdC5wbmcnDQogICAgICAgICAgICB9LHsNCiAgICAgICAgICAgICAgdHlwZTogJ3RleHRib3gnLA0KICAgICAgICAgICAgICBuYW1lOiAnYXBwaW50cm8nLA0KICAgICAgICAgICAgICBsYWJlbDogJ+eugOi/sCcsDQogICAgICAgICAgICAgIHZhbHVlOiAn5Y2a5Li75b6I5oeS77yM5rKh5pyJ5YaZ566A6L+wJywNCiAgICAgICAgICAgICAgbXVsdGlsaW5lOiB0cnVlLA0KICAgICAgICAgICAgICBtaW5XaWR0aDogMzAwLA0KICAgICAgICAgICAgICBtaW5IZWlnaHQ6IDEwMA0KICAgICAgICAgICAgfSx7DQogICAgICAgICAgICAgIHR5cGU6ICdsaXN0Ym94JywNCiAgICAgICAgICAgICAgbmFtZTogJ2xlaWJpZScsDQogICAgICAgICAgICAgIGxhYmVsOiAn57G75YirJywNCiAgICAgICAgICAgICAgJ3ZhbHVlcyc6IFt7DQogICAgICAgICAgICAgICAgdGV4dDogJ1pibG9nIHBocCDkuLvpopgnLA0KICAgICAgICAgICAgICAgIHZhbHVlOiAnWmJsb2cgcGhwIOS4u+mimCcNCiAgICAgICAgICAgICAgfSx7DQogICAgICAgICAgICAgICAgdGV4dDogJ1pibG9nIHBocCDmj5Lku7YnLA0KICAgICAgICAgICAgICAgIHZhbHVlOiAnWmJsb2cgcGhwIOaPkuS7ticNCiAgICAgICAgICAgICAgfSx7DQogICAgICAgICAgICAgICAgdGV4dDogJ1pibG9nIHBocCDmianlsZUnLA0KICAgICAgICAgICAgICAgIHZhbHVlOiAnWmJsb2cgcGhwIOaJqeWxlScNCiAgICAgICAgICAgICAgfSx7DQogICAgICAgICAgICAgICAgdGV4dDogJ1pibG9nIGFzcCDkuLvpopgnLA0KICAgICAgICAgICAgICAgIHZhbHVlOiAnWmJsb2cgYXNwIOS4u+mimCcNCiAgICAgICAgICAgICAgfSx7DQogICAgICAgICAgICAgICAgdGV4dDogJ1pibG9nIGFzcCDmj5Lku7YnLA0KICAgICAgICAgICAgICAgIHZhbHVlOiAnWmJsb2cgYXNwIOaPkuS7ticNCiAgICAgICAgICAgICAgfSx7DQogICAgICAgICAgICAgICAgdGV4dDogJ1pibG9nIGFzcCDmianlsZUnLA0KICAgICAgICAgICAgICAgIHZhbHVlOiAnWmJsb2cgYXNwIOaJqeWxlScNCiAgICAgICAgICAgICAgfV0NCiAgICAgICAgICAgIH1dLG9uc3VibWl0OiBmdW5jdGlvbihlKSB7DQoJCQkJdmFyIGFwcGNvbnRlbnQgPSAnPHRhYmxlIGNsYXNzPSJ0YWJsZSBhcHBpbmZvIj5cDQoJCQkJCQkJCTxjYXB0aW9uPuW6lOeUqOS/oeaBrzwvY2FwdGlvbj5cDQoJCQkJCQkJCTx0Ym9keT5cDQoJCQkJCQkJCTx0cj5cDQoJCQkJCQkJCTx0ZCByb3dzcGFuPSI1IiBjbGFzcz0iYXBwaW5mb19sb2dvIj48aW1nIHNyYz0iJyArIGUuZGF0YS5hcHBsb2dvICsgJyI+PC90ZD5cDQoJCQkJCQkJCTx0ZCBjbGFzcz0iYXBwaW5mb190aXRsZSI+5bqU55SoOjwvdGQ+XA0KCQkJCQkJCQk8dGQ+PHNwYW4+JyArIGUuZGF0YS5hcHBuYW1lICsgJzwvc3Bhbj48L3RkPlwNCgkJCQkJCQkJPHRkIGNsYXNzPSJhcHBpbmZvX3RpdGxlIj7llK7ku7c6PC90ZD5cDQoJCQkJCQkJCTx0ZD4nICsgZS5kYXRhLmFwcHByaWNlICsgJzwvdGQ+XA0KCQkJCQkJCQk8L3RyPlwNCgkJCQkJCQkJPHRyPlwNCgkJCQkJCQkJPHRkIGNsYXNzPSJhcHBpbmZvX3RpdGxlIj7kvZzogIU6PC90ZD5cDQoJCQkJCQkJCTx0ZD4nICsgZS5kYXRhLmF1dGhvciArICc8L3RkPlwNCgkJCQkJCQkJPHRkIGNsYXNzPSJhcHBpbmZvX3RpdGxlIj7nsbvliKs6PC90ZD5cDQoJCQkJCQkJCTx0ZD4nICsgZS5kYXRhLmxlaWJpZSArICc8L3RkPlwNCgkJCQkJCQkJPC90cj5cDQoJCQkJCQkJCTx0cj5cDQoJCQkJCQkJCTx0ZCAgY2xhc3M9ImFwcGluZm9fdGl0bGUiPuWPkeW4g+mhtTwvdGQ+XA0KCQkJCQkJCQk8dGQgY29sc3Bhbj0iMyI+PGEgaHJlZj0iJyArIGUuZGF0YS51cmxwYWdlICsgJyIgdGFyZ2V0PSJfYmxhbmsiPicgKyBlLmRhdGEudXJscGFnZSArICc8L2E+PC90ZD5cDQoJCQkJCQkJCTwvdHI+XA0KCQkJCQkJCQk8dHI+XA0KCQkJCQkJCQk8dGQgY2xhc3M9ImFwcGluZm9fdGl0bGUiPuW6lOeUqOeugOS7izwvdGQ+XA0KCQkJCQkJCQk8dGQgY29sc3Bhbj0iMyI+JyArIGUuZGF0YS5hcHBpbnRybyArICc8L3RkPlwNCgkJCQkJCQkJPC90cj5cDQoJCQkJCQkJCTwvdGJvZHk+PC90YWJsZT5cDQoJCQkJCQkJJzsNCiAgICAgICAgICAgICAgZWRpdG9yLmluc2VydENvbnRlbnQoYXBwY29udGVudCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfSk7DQogICAgICAgIH0NCgkJCQkJCX1dDQogICAgfSx7dGV4dDogJ2Jvb3RzdHJhcCcsbWVudTogWw0KCQl7dGV4dDogJ+aMiemSricsb25jbGljazogZnVuY3Rpb24oKSB7DQogICAgICAgICAgZWRpdG9yLndpbmRvd01hbmFnZXIub3Blbih7DQogICAgICAgICAgICB0aXRsZTogJ+a3u+WKoOS4gOS4quaMiemSricsYm9keTogW3sNCiAgICAgICAgICAgICAgdHlwZTogJ3RleHRib3gnLA0KICAgICAgICAgICAgICBuYW1lOiAnYnV0dG9uX3RpdGxlJywNCiAgICAgICAgICAgICAgbGFiZWw6ICfmoIfpopgnLA0KICAgICAgICAgICAgICB2YWx1ZTogJ+i/meaYr+S4gOS4quaMiemSricNCiAgICAgICAgICAgIH0sew0KICAgICAgICAgICAgICB0eXBlOiAndGV4dGJveCcsDQogICAgICAgICAgICAgIG5hbWU6ICdidXR0b25faWQnLA0KICAgICAgICAgICAgICBsYWJlbDogJ+aMiemSrklEJywNCiAgICAgICAgICAgICAgdmFsdWU6ICdwb3N0X2J1dHRvbl9hJywNCiAgICAgICAgICAgIH0sew0KICAgICAgICAgICAgICB0eXBlOiAnbGlzdGJveCcsDQogICAgICAgICAgICAgIG5hbWU6ICdidXR0b25fc3R5bGUnLA0KICAgICAgICAgICAgICBsYWJlbDogJ+mjjuagvCcsDQogICAgICAgICAgICAgICd2YWx1ZXMnOiBbew0KICAgICAgICAgICAgICAgIHRleHQ6ICfpu5jorqQnLA0KICAgICAgICAgICAgICAgIHZhbHVlOiAnZGVmYXVsdCcNCiAgICAgICAgICAgICAgfSx7DQogICAgICAgICAgICAgICAgdGV4dDogJ+a3seiTneiJsicsDQogICAgICAgICAgICAgICAgdmFsdWU6ICdwcmltYXJ5Jw0KICAgICAgICAgICAgICB9LHsNCiAgICAgICAgICAgICAgICB0ZXh0OiAn57u/6ImyJywNCiAgICAgICAgICAgICAgICB2YWx1ZTogJ3N1Y2Nlc3MnDQogICAgICAgICAgICAgIH0sew0KICAgICAgICAgICAgICAgIHRleHQ6ICfmtYXok53oibInLA0KICAgICAgICAgICAgICAgIHZhbHVlOiAnaW5mbycNCiAgICAgICAgICAgICAgfSx7DQogICAgICAgICAgICAgICAgdGV4dDogJ+Wcn+m7hOiJsicsDQogICAgICAgICAgICAgICAgdmFsdWU6ICd3YXJuaW5nJw0KICAgICAgICAgICAgICB9LHsNCiAgICAgICAgICAgICAgICB0ZXh0OiAn57qi6ImyJywNCiAgICAgICAgICAgICAgICB2YWx1ZTogJ2RhbmdlcicNCiAgICAgICAgICAgICAgfV0NCiAgICAgICAgICAgIH1dLG9uc3VibWl0OiBmdW5jdGlvbihlKSB7DQoJCQkJdmFyIGJ1dHRvbl9jID0gJzxidXR0b24gY2xhc3M9ImJ0biAnICsgZS5kYXRhLmJ1dHRvbl9pZCArICcgYnRuLScgKyBlLmRhdGEuYnV0dG9uX3N0eWxlICsgJyIgdHlwZT0iYnV0dG9uIj4nICsgZS5kYXRhLmJ1dHRvbl90aXRsZSArICc8L2J1dHRvbj4nOw0KICAgICAgICAgICAgICBlZGl0b3IuaW5zZXJ0Q29udGVudChidXR0b25fYyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfSk7DQogICAgICAgIH19LHt0ZXh0OiAn5qCH562+JyxvbmNsaWNrOiBmdW5jdGlvbigpIHsNCiAgICAgICAgICBlZGl0b3Iud2luZG93TWFuYWdlci5vcGVuKHsNCiAgICAgICAgICAgIHRpdGxlOiAn5qCH562+Jyxib2R5OiBbew0KICAgICAgICAgICAgICB0eXBlOiAndGV4dGJveCcsDQogICAgICAgICAgICAgIG5hbWU6ICdsYWJlbF9uYW1lJywNCiAgICAgICAgICAgICAgbGFiZWw6ICfmoIfnrb7lkI3np7AnLA0KICAgICAgICAgICAgICB2YWx1ZTogJ0RlZmF1bHQnDQogICAgICAgICAgICB9LHsNCiAgICAgICAgICAgICAgdHlwZTogJ2xpc3Rib3gnLA0KICAgICAgICAgICAgICBuYW1lOiAnbGFiZWxfc3R5bGUnLA0KICAgICAgICAgICAgICBsYWJlbDogJ+mjjuagvCcsDQogICAgICAgICAgICAgICd2YWx1ZXMnOiBbew0KICAgICAgICAgICAgICAgIHRleHQ6ICfngbDoibInLA0KICAgICAgICAgICAgICAgIHZhbHVlOiAnZGVmYXVsdCcNCiAgICAgICAgICAgICAgfSx7DQogICAgICAgICAgICAgICAgdGV4dDogJ+a3seiTneiJsicsDQogICAgICAgICAgICAgICAgdmFsdWU6ICdwcmltYXJ5Jw0KICAgICAgICAgICAgICB9LHsNCiAgICAgICAgICAgICAgICB0ZXh0OiAn57u/6ImyJywNCiAgICAgICAgICAgICAgICB2YWx1ZTogJ3N1Y2Nlc3MnDQogICAgICAgICAgICAgIH0sew0KICAgICAgICAgICAgICAgIHRleHQ6ICfmtYXok53oibInLA0KICAgICAgICAgICAgICAgIHZhbHVlOiAnaW5mbycNCiAgICAgICAgICAgICAgfSx7DQogICAgICAgICAgICAgICAgdGV4dDogJ+Wcn+m7hOiJsicsDQogICAgICAgICAgICAgICAgdmFsdWU6ICd3YXJuaW5nJw0KICAgICAgICAgICAgICB9LHsNCiAgICAgICAgICAgICAgICB0ZXh0OiAn57qi6ImyJywNCiAgICAgICAgICAgICAgICB2YWx1ZTogJ2RhbmdlcicNCiAgICAgICAgICAgICAgfV0NCiAgICAgICAgICAgIH1dLG9uc3VibWl0OiBmdW5jdGlvbihlKSB7DQoJCQkJdmFyIGxhYmVsY29udGVudCA9ICc8c3BhbiBjbGFzcz0ibGFiZWwgbGFiZWwtJyArIGUuZGF0YS5sYWJlbF9zdHlsZSArICciPicgKyBlLmRhdGEubGFiZWxfbmFtZSArICc8L3NwYW4+CQkJCQkJCQkJJzsNCiAgICAgICAgICAgICAgZWRpdG9yLmluc2VydENvbnRlbnQobGFiZWxjb250ZW50KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9KTsNCiAgICAgICAgfX0se3RleHQ6ICflvr3nq6AnLG9uY2xpY2s6IGZ1bmN0aW9uKCkgew0KICAgICAgICAgIGVkaXRvci53aW5kb3dNYW5hZ2VyLm9wZW4oew0KICAgICAgICAgICAgdGl0bGU6ICflvr3nq6AnLGJvZHk6IFt7DQogICAgICAgICAgICAgIHR5cGU6ICd0ZXh0Ym94JywNCiAgICAgICAgICAgICAgbmFtZTogJ2JhZGdlX25hbWUnLA0KICAgICAgICAgICAgICBsYWJlbDogJ+W+veeroOWQjeensCcsDQogICAgICAgICAgICAgIHZhbHVlOiAnRGVmYXVsdCcNCiAgICAgICAgICAgIH1dLG9uc3VibWl0OiBmdW5jdGlvbihlKSB7DQoJCQkJdmFyIGJhZGdlX2MgPSAnPHNwYW4gY2xhc3M9ImJhZGdlIj4nICsgZS5kYXRhLmJhZGdlX25hbWUgKyAnPC9zcGFuPic7DQogICAgICAgICAgICAgIGVkaXRvci5pbnNlcnRDb250ZW50KGJhZGdlX2MpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pOw0KICAgICAgICB9fSx7dGV4dDogJ+W4puaDheaZr+eahOmdouadvycsb25jbGljazogZnVuY3Rpb24oKSB7DQogICAgICAgICAgZWRpdG9yLndpbmRvd01hbmFnZXIub3Blbih7DQogICAgICAgICAgICB0aXRsZTogJ+W4puaDheaZr+eahOmdouadvycsYm9keTogW3sNCiAgICAgICAgICAgICAgdHlwZTogJ3RleHRib3gnLA0KICAgICAgICAgICAgICBuYW1lOiAncGFuZWxfdGl0bGUnLA0KICAgICAgICAgICAgICBsYWJlbDogJ+agh+mimCcsDQogICAgICAgICAgICAgIHZhbHVlOiAnWmJsb2cnDQogICAgICAgICAgICB9LHsNCiAgICAgICAgICAgICAgdHlwZTogJ3RleHRib3gnLA0KICAgICAgICAgICAgICBuYW1lOiAncGFuZWxfY29udGVudCcsDQogICAgICAgICAgICAgIGxhYmVsOiAn5YaF5a65JywNCiAgICAgICAgICAgICAgdmFsdWU6ICfljZrkuLvlvojmh5LvvIzmsqHmnInlhpnlhoXlrrknLA0KICAgICAgICAgICAgICBtdWx0aWxpbmU6IHRydWUsDQogICAgICAgICAgICAgIG1pbldpZHRoOiAzMDAsDQogICAgICAgICAgICAgIG1pbkhlaWdodDogMTAwDQogICAgICAgICAgICB9LHsNCiAgICAgICAgICAgICAgdHlwZTogJ2xpc3Rib3gnLA0KICAgICAgICAgICAgICBuYW1lOiAncGFuZWxfc3R5bGUnLA0KICAgICAgICAgICAgICBsYWJlbDogJ+mjjuagvCcsDQogICAgICAgICAgICAgICd2YWx1ZXMnOiBbew0KICAgICAgICAgICAgICAgIHRleHQ6ICfngbDoibInLA0KICAgICAgICAgICAgICAgIHZhbHVlOiAnZGVmYXVsdCcNCiAgICAgICAgICAgICAgfSx7DQogICAgICAgICAgICAgICAgdGV4dDogJ+a3seiTneiJsicsDQogICAgICAgICAgICAgICAgdmFsdWU6ICdwcmltYXJ5Jw0KICAgICAgICAgICAgICB9LHsNCiAgICAgICAgICAgICAgICB0ZXh0OiAn57u/6ImyJywNCiAgICAgICAgICAgICAgICB2YWx1ZTogJ3N1Y2Nlc3MnDQogICAgICAgICAgICAgIH0sew0KICAgICAgICAgICAgICAgIHRleHQ6ICfmtYXok53oibInLA0KICAgICAgICAgICAgICAgIHZhbHVlOiAnaW5mbycNCiAgICAgICAgICAgICAgfSx7DQogICAgICAgICAgICAgICAgdGV4dDogJ+Wcn+m7hOiJsicsDQogICAgICAgICAgICAgICAgdmFsdWU6ICd3YXJuaW5nJw0KICAgICAgICAgICAgICB9LHsNCiAgICAgICAgICAgICAgICB0ZXh0OiAn57qi6ImyJywNCiAgICAgICAgICAgICAgICB2YWx1ZTogJ2RhbmdlcicNCiAgICAgICAgICAgICAgfV0NCiAgICAgICAgICAgIH1dLG9uc3VibWl0OiBmdW5jdGlvbihlKSB7DQoJCQkJdmFyIHBhbmVsX2MgPSAnPGRpdiBjbGFzcz0icGFuZWwgcGFuZWwtJyArIGUuZGF0YS5wYW5lbF9zdHlsZSArICciPlwNCgkJCQkJCQkJCTxkaXYgY2xhc3M9InBhbmVsLWhlYWRpbmciPlwNCgkJCQkJCQkJCTxkaXYgY2xhc3M9InBhbmVsLXRpdGxlIj4nICsgZS5kYXRhLnBhbmVsX3RpdGxlICsgJzwvZGl2PlwNCgkJCQkJCQkJCTwvZGl2PlwNCgkJCQkJCQkJCTxkaXYgY2xhc3M9InBhbmVsLWJvZHkiPlwNCgkJCQkJCQkJCScgKyBlLmRhdGEucGFuZWxfY29udGVudCArICdcDQoJCQkJCQkJCQk8L2Rpdj5cDQoJCQkJCQkJCQk8L2Rpdj4nOw0KICAgICAgICAgICAgICBlZGl0b3IuaW5zZXJ0Q29udGVudChwYW5lbF9jKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9KTsNCiAgICAgICAgfX0se3RleHQ6ICfmipjlj6DlhoXlrrknLG9uY2xpY2s6IGZ1bmN0aW9uKCkgew0KICAgICAgICAgIGVkaXRvci53aW5kb3dNYW5hZ2VyLm9wZW4oew0KICAgICAgICAgICAgdGl0bGU6ICfmipjlj6DlhoXlrrknLGJvZHk6IFt7DQogICAgICAgICAgICAgIHR5cGU6ICd0ZXh0Ym94JywNCiAgICAgICAgICAgICAgbmFtZTogJ2NvbGxhcHNlX3RpdGxlJywNCiAgICAgICAgICAgICAgbGFiZWw6ICfmmL7npLrmoIfpopgnLA0KICAgICAgICAgICAgICB2YWx1ZTogJ+i/memHjOaYr+aYvuekuueahOaMiemSricNCiAgICAgICAgICAgIH0sew0KICAgICAgICAgICAgICB0eXBlOiAndGV4dGJveCcsDQogICAgICAgICAgICAgIG5hbWU6ICdjb2xsYXBzZV9pZCcsDQogICAgICAgICAgICAgIGxhYmVsOiAn5oqY5Y+gSUQnLA0KICAgICAgICAgICAgICB2YWx1ZTogJ2NvbGxhcHNlX2lkJw0KICAgICAgICAgICAgfSx7DQogICAgICAgICAgICAgIHR5cGU6ICdsaXN0Ym94JywNCiAgICAgICAgICAgICAgbmFtZTogJ2NvbGxhcHNlX3RpdGxlX3N0eWxlJywNCiAgICAgICAgICAgICAgbGFiZWw6ICfmjInpkq7po47moLwnLA0KICAgICAgICAgICAgICAndmFsdWVzJzogW3sNCiAgICAgICAgICAgICAgICB0ZXh0OiAn54Gw6ImyJywNCiAgICAgICAgICAgICAgICB2YWx1ZTogJ2RlZmF1bHQnDQogICAgICAgICAgICAgIH0sew0KICAgICAgICAgICAgICAgIHRleHQ6ICfmt7Hok53oibInLA0KICAgICAgICAgICAgICAgIHZhbHVlOiAncHJpbWFyeScNCiAgICAgICAgICAgICAgfSx7DQogICAgICAgICAgICAgICAgdGV4dDogJ+e7v+iJsicsDQogICAgICAgICAgICAgICAgdmFsdWU6ICdzdWNjZXNzJw0KICAgICAgICAgICAgICB9LHsNCiAgICAgICAgICAgICAgICB0ZXh0OiAn5rWF6JOd6ImyJywNCiAgICAgICAgICAgICAgICB2YWx1ZTogJ2luZm8nDQogICAgICAgICAgICAgIH0sew0KICAgICAgICAgICAgICAgIHRleHQ6ICflnJ/pu4ToibInLA0KICAgICAgICAgICAgICAgIHZhbHVlOiAnd2FybmluZycNCiAgICAgICAgICAgICAgfSx7DQogICAgICAgICAgICAgICAgdGV4dDogJ+e6ouiJsicsDQogICAgICAgICAgICAgICAgdmFsdWU6ICdkYW5nZXInDQogICAgICAgICAgICAgIH1dDQogICAgICAgICAgICB9LHsNCiAgICAgICAgICAgICAgdHlwZTogJ3RleHRib3gnLA0KICAgICAgICAgICAgICBuYW1lOiAnY29sbGFwc2VfY29udGVudCcsDQogICAgICAgICAgICAgIGxhYmVsOiAn5YaF5a65JywNCiAgICAgICAgICAgICAgdmFsdWU6ICfljZrkuLvlvojmh5LvvIzmsqHmnInlhpnlhoXlrrknLA0KICAgICAgICAgICAgICBtdWx0aWxpbmU6IHRydWUsDQogICAgICAgICAgICAgIG1pbldpZHRoOiAzMDAsDQogICAgICAgICAgICAgIG1pbkhlaWdodDogMTAwDQogICAgICAgICAgICB9XSxvbnN1Ym1pdDogZnVuY3Rpb24oZSkgew0KCQkJCXZhciBjb2xsYXBzZV9jID0gJzxhIGNsYXNzPSJidG4gYnRuLScgKyBlLmRhdGEuY29sbGFwc2VfdGl0bGVfc3R5bGUgKyAnIiByb2xlPSJidXR0b24iIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgaHJlZj0iIycgKyBlLmRhdGEuY29sbGFwc2VfaWQgKyAnIiBhcmlhLWV4cGFuZGVkPSJmYWxzZSIgYXJpYS1jb250cm9scz0iJyArIGUuZGF0YS5jb2xsYXBzZV9pZCArICciPlwNCgkJCQkJCQknICsgZS5kYXRhLmNvbGxhcHNlX3RpdGxlICsgJ1wNCgkJCQkJCQk8L2E+XA0KCQkJCQkJCTxkaXYgY2xhc3M9ImNvbGxhcHNlIiBpZD0iJyArIGUuZGF0YS5jb2xsYXBzZV9pZCArICciPlwNCgkJCQkJCQk8ZGl2IGNsYXNzPSJ3ZWxsIj5cDQoJCQkJCQkJJyArIGUuZGF0YS5jb2xsYXBzZV9jb250ZW50ICsgJ1wNCgkJCQkJCQk8L2Rpdj5cDQoJCQkJCQkJPC9kaXY+JzsNCiAgICAgICAgICAgICAgZWRpdG9yLmluc2VydENvbnRlbnQoY29sbGFwc2VfYyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfSk7DQogICAgICAgIH19DQoJCV0NCgkJfV0NCiAgfSk7DQp9KTsNCiANCn0pKCk7dm_tools/plugin/tinymcebuttons/tinymcebuttons.phpPD9waHANCg0KLy9mb3IgdGlueW1jZQ0KZnVuY3Rpb24gZG1fdG9vbHNfbXlfdGlueW1jZSgmJHBsdWdpbnMpew0KZ2xvYmFsICR6YnA7DQogICRwbHVnaW5zW109J2RtX3Rvb2xzJzsNCn0NCg0KZnVuY3Rpb24gZG1fdG9vbHNfbXlfdGlueW1jZV9hZGRidXR0b25zKCYkbWNlX2J1dHRvbnMpew0KICBnbG9iYWwgJHpicDsNCiAgaWYgKCR6YnAtPkNoZWNrUmlnaHRzKCdyb290JykpIHsNCiAgJG1jZV9idXR0b25zW109J2RtX3Rvb2xzJzsNCiB9DQp9DQoNCmZ1bmN0aW9uIGRtX3Rvb2xzX215X3RpbnltY2VfYWRkanMoKXsNCmdsb2JhbCAkemJwOw0KICBlY2hvICc8c2NyaXB0IHNyYz0iJy4kemJwLT5ob3N0IC4nemJfdXNlcnMvcGx1Z2luL2RtX3Rvb2xzL3BsdWdpbi90aW55bWNlYnV0dG9ucy90aW55bWNlYnV0dG9ucy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4nLiJcclxuIjsNCg0KfQ==dm_tools/plugin/uebuttons/images/bt.pngiVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MUZFNDQ2MUU3MzA0MTFFNEJDNUJEMUNGRDFFRjIxMEYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MUZFNDQ2MUY3MzA0MTFFNEJDNUJEMUNGRDFFRjIxMEYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxRkU0NDYxQzczMDQxMUU0QkM1QkQxQ0ZEMUVGMjEwRiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxRkU0NDYxRDczMDQxMUU0QkM1QkQxQ0ZEMUVGMjEwRiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PivzjtsAAAAPUExURSgR0GFQ3ZuQ6amg7P///xjir6YAAAAFdFJOU/////8A+7YOUwAAACdJREFUeNpiYAECJiTADOQzgAQZkAAjXkEWiAwjnDkqSLkgEgAIMADiPQUS7t3BCAAAAABJRU5ErkJggg==dm_tools/plugin/uebuttons/images/t.pngiVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDhCM0U5QTc3MzA0MTFFNEI0Q0RFRkJFNkQ5NTM4NjUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDhCM0U5QTg3MzA0MTFFNEI0Q0RFRkJFNkQ5NTM4NjUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowOEIzRTlBNTczMDQxMUU0QjRDREVGQkU2RDk1Mzg2NSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowOEIzRTlBNjczMDQxMUU0QjRDREVGQkU2RDk1Mzg2NSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pip+HLkAAAAPUExURRwbG1lYWJWVlaSkpP///2K+cw8AAAAFdFJOU/////8A+7YOUwAAACdJREFUeNpiYAECJiTADOQzgAQZkAAjXkEWiAwjnDkqSLkgEgAIMADiPQUS7t3BCAAAAABJRU5ErkJggg==dm_tools/plugin/uebuttons/images/wpgo_sc_error.pngiVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAIAAAAmKNuZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAiJJREFUeNrUVctOwkAUpVBAAasgJa1IXOBGdKcrI5i4lOjK+A/qP7jAH3Bl/AJNiBsTDVufcUFcCguBRHxAeCoFtLS2HiUxMRZGDSY6SZPOzJ3TO+fec0rld3d1nRs0nqv9/Y5gDQWDel1Hx9+Go9vsdfG8c2qqd3TUzLKYioVC5eKicHLyeHf3PTi90Ti4sOAMBCi9XlUUuVLBotnlcnGca2Ymf3x8Ew4rkvQlOIqmvSsrzMiI9PCQ2dsrn5/LtRrWDRaLY2KCm51lA4Fut/tyfV1pNMjcIS9g1VKpWCiUPzpqYmE81+uYxtfWqomEzev1LC6SSwG+2Olp6f4+sbEhV6ufDwA9ubnZKJdBq8XjIcAhCHxlIhFZEFrxjS2QoKOo/slJAhzj8+lUtRyNtm+IUjSKEvWOjRFKYbLbJUFo8kVbrQPz85TB8L4rFovZSAQviig2SiWT0/mNNlZVFTf6sKQoHwJkmZAdOO7meeSFBFHK9NaWdmOazSaHQ8zlCNlVYjFkZB8fb88dGhAVew1uDwcNgWM+GKR7eloqyWbj5+bARfHsjAD3lMnkDw+NfX3Dy8s4poFltXqXllAxfLieTpNFdrOz08VxEIZvdVVTZMCqJpPX4bCGQGHun924aQGQB3h8twCaYcAX7tjKAuDG2o6C0PT2du7ggPX7mTeDQk88ZbNCPF44PX28vf2J34FHzRv9W3P/hX8FKtIpuBcBBgA0YfzQeyHg4QAAAABJRU5ErkJggg==dm_tools/plugin/uebuttons/images/wpgo_sc_error_mini.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dm_tools/plugin/uebuttons/images/wpgo_sc_notice.pngiVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAIAAAAmKNuZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlVJREFUeNrUldtr01AYwJtrk6aNTdo11mVIW6fOh07nxAcVH1REfNW97dFH/yIFn5xQBF+F4YtDYTi6bqLDWzt7c+lqmqVJ29wav7UoaItZpYIeCHzfyTm/853vdpDMy7u+8Q0cPj4sjIUlKxLqG+v4t3H4b/4x/uiR8OkIk6JJDtS2pcjap6qS04zd0XAogk8LVyfDZxAEdX2uaWswGSB5ho+I/LlqY/29tNx17QPhUASbnVrgmYRha4X6Sk3dspz2/lKMEthTiciFSW6OoWK54pLTtbx9dyx2BVh77cpq/l6lke2zYNhOB9TVwn2lVQrT4rRwzTsU4C+Rnzfs5mYpYzmtwQ1Af11+bFgquCJECR448D3iQ7brL8xhrInQcRJn4Fe+vgJq/NCsB45nkuB7SX07yIKT0uJtkZsHGRa4bjcSTHngKIK1bL3vL7Al+P06wJqJ35TUrcLuc1CdrtmxVZoIj5B3yYnLfjyYLS6xVLzPelN5Arb/WNB1HQ/rOpZK4AyB0SDnio/AzLNHFwdZGEpSOAsGeuBkPQ+hiLEzIEPeZT8/NG190C5IQMhwWct74KCGYFsiepHEAj1i89X2g19YBBZIRi+B8GVv0wOnG/WyvObHQ+mpBaJHhOz9mUWnxVt+gq0o683OjncoPtaeQTJDYZxP3hlaZMBS2uUP0vKBahbitVHK7LcAbu7k4RsnhOumo8M8iTH9jgClNkIL6BHtdztPy401qCQ+mAoQHJzRMr/KeqGqbGhG7U/6HfgRrPANu9T/2dz/wlsB7+O4cN8EGAAzXyafcich7AAAAABJRU5ErkJggg==dm_tools/plugin/uebuttons/images/wpgo_sc_notice_mini.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_tools/plugin/uebuttons/images/wpgo_sc_tips.pngiVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAIAAAAmKNuZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWBJREFUeNrMlcuLglAUxtOei6QsLCFaWASBEa779wNXgS3cafTSiETKB4r4aD5GmGXM3O5AB4TrRX+cc8/3nctsNpsKvajhud/vVFg8z7MVqvHZuNovvxuPx9Pp9HQ6HQ6Hoijeza72HZPJZLVaiaL4Ls6yLF3XoyhqtVqLxUJRFPJiq9Uq/m82m7vdrtFoSJIEKCGOYRik0+l0sJZl+Xg8rtfr5/NJiEMHBEH4efV9P8/zP3d2Npuhm7fb7XK5cBzX7/exmWWZ4zgkQkFGLMuiiYPBAAXato00H4/HC5W8whmGMZ/PcfyA4uyTJDFN03VdQlegKFVV9/t9mQ646MNyuQSd0GQAQRbb7fZ6vZY73W633W4TmqzX641GI0hM07Tz+QxLxHEcBAEhDizYAGbA2vM8QMknSr1eR2moNE1TCgNqOByWJqUzoMIwhMqojU8C1scP93+4K3A/0sJ9CTAAE3qQPZ2//BwAAAAASUVORK5CYII=dm_tools/plugin/uebuttons/images/wpgo_sc_tips_mini.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dm_tools/plugin/uebuttons/images/wpgo_sc_warn.pngiVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAIAAAAmKNuZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWpJREFUeNpifHXSjYF6gAWIRfl3UcWs1x/dmBioCga3cSz4JNm0GARSGLg9GVgVQdzf9xi+7mD4MIfh1zUSjWNkYxDrYxDIRHE+myYICeYzfJjN8KqQ4f934owDmiWzlYHLBWf4CKQzsKkwPPFi+P+LiLAT60c3630/CCEDLmeQ8wlHBbs2yHI08LYFhNCAQAZIMQHj+FMYGJjRBf//BSF0wAxWjN84bg8S0gWGYgzjWJVIMA5DMQtxiZ0DuzhGzGIYB0yrbBrogpIrsRv3+yEhzwLTPZbUKc3AKoNF/NseQsZ9nMvAgBGJTz0ZnnhiGPaX4eMcQp79eYXhw0wGgSwUQdFuYF5BVwlUBlRMOCqA+ZFNDSVj8ARgeHMvSBlRBRQwvp54M3yYysDwD1v4/wO564kvZrTiTihApS9zGD5MZ+BPBaVVYPoCivx+AAp7YHhh+JG4dPfzKsOrgmFUuNOgrgDWj9QyDiDAAAQvZgYzNpggAAAAAElFTkSuQmCCdm_tools/plugin/uebuttons/images/wpgo_sc_warn_mini.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dm_tools/plugin/uebuttons/ue_down2.phpPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KPGh0bWw+CjxoZWFkPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIDx0aXRsZT48L3RpdGxlPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi8uLi9VRWRpdG9yL2RpYWxvZ3MvaW50ZXJuYWwuanMiPjwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5PgogICAgPHRhYmxlIGlkPSJxcXEiPgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkPjxsYWJlbCBmb3I9InRleHQiPui1hOa6kOWQjeensO+8mjwvbGFiZWw+PC90ZD4KICAgICAgICAgICAgPHRkPjxpbnB1dCBjbGFzcz0idHh0IiBpZD0idGV4dCIgdHlwZT0idGV4dCIvPjwvdGQ+CiAgICAgICAgPC90cj4KICAgIDwvdGFibGU+CgoKPHNjcmlwdD4KICAgIC8v5Y+v5Lul55u05o6l5L2/55So5Lul5LiL5YWo5bGA5Y+Y6YePCiAgICAvL+W9k+WJjeaJk+W8gGRpYWxvZ+eahOWunuS+i+WPmOmHjwogICAgYWxlcnQoJ2VkaXRvcjogJytlZGl0b3IpOwogICAgLy/kuIDkupvluLjnlKjlt6XlhbcKICAgIGFsZXJ0KCdkb21VdGlsczogJytkb21VdGlscyk7CiAgICBhbGVydCgndXRpbHM6ICcrdXRpbHMpOwogICAgYWxlcnQoJ2Jyb3dzZXI6ICcrYnJvd3Nlcik7CgogICAgZGlhbG9nLm9ub2sgPSBmdW5jdGlvbiAoKXsKICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ2luc2VydGh0bWwnLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dCcpLnZhbHVlKTsKICAgIH07Cjwvc2NyaXB0PgoKPC9ib2R5Pgo8L2h0bWw+dm_tools/plugin/uebuttons/uebuttons-editor.jsJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsNCmVkaXRvcl9hcGkuZWRpdG9yLmNvbnRlbnQub2JqLnJlYWR5KGZ1bmN0aW9uKCl7DQp2YXIgc3RyPSc8bGluayByZWw9InN0eWxlc2hlZXQiIHJldj0ic3R5bGVzaGVldCIgaHJlZj0iJytibG9naG9zdCsnemJfdXNlcnMvcGx1Z2luL2RtX3Rvb2xzL3BsdWdpbi91ZWJ1dHRvbnMvdWVidXR0b25zLXBvc3QuY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9ImFsbCIvPic7DQpmb3IodmFyIGk9MDtpPHdpbmRvdy5mcmFtZXMubGVuZ3RoO2krKyl7DQokKHdpbmRvdy5mcmFtZXNbaV0uZG9jdW1lbnQuaGVhZCkuYXBwZW5kKHN0cik7DQp9DQp9KTsNCn0pOw0KDQp3aW5kb3cuVUVESVRPUl9DT05GSUdbJ3Rvb2xiYXJzJ11bMF0ucHVzaCgn5bim6Imy5paH5pys5qGGJyk7DQpVRS5yZWdpc3RlclVJKCfluKboibLmlofmnKzmoYYnLGZ1bmN0aW9uKGVkaXRvcix1aU5hbWUpew0KICAgIC8v5rOo5YaM5oyJ6ZKu5omn6KGM5pe255qEY29tbWFuZOWRveS7pCznlKh1aU5hbWXkvZzkuLpjb21tYW5k5ZCN5a2X77yM5L2/55So5ZG95Luk6buY6K6k5bCx5Lya5bim5pyJ5Zue6YCA5pON5L2cDQogICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZCgNCgl1aU5hbWUsDQoJew0KICAgICAgICBleGVjQ29tbWFuZDpmdW5jdGlvbihjbWROYW1lLHZhbHVlKXsNCiAgICAgICAgdmFyIHJhbmdlID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSYW5nZSgpOw0KCQlyYW5nZS5zZWxlY3QoKTsNCgkJdmFyIHR4dCA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0VGV4dCgpOw0KCQlpZih0eHQ9PW51bGwgfHwgdHh0PT0iIil7DQoJCQl0eHQ9IuatpOWkhOW6lOacieaWh+acrDxici8+IjsNCgkJfQ0KCQllZGl0b3IuZXhlY0NvbW1hbmQoJ2luc2VydEh0bWwnLCAnPHAgY2xhc3M9IicrdmFsdWUrJyI+Jyt0eHQrJzwvcD4nKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KDQogICAgLy/liJvlu7rkuIvmi4noj5zljZXkuK3nmoTplK7lgLzlr7kNCiAgICB2YXIgaXRlbXMgPSBbXTsNCgl2YXIgY29sb3I9e2x2c2U6J+e7v+iJsuaWh+acrOahhicsaG9uZ3NlOifnuqLoibLmlofmnKzmoYYnLCBodWFuZ3NlOifpu4ToibLmlofmnKzmoYYnLCBodWlzZTon54Gw6Imy5paH5pys5qGGJywgbGFuc2U6J+iTneiJsuagh+mimCcsIHB1dG9uZzon5pmu6YCa5qCH6aKYJ307DQogICAgZm9yKGtleSBpbiBjb2xvcil7DQogICAgICAgIGl0ZW1zLnB1c2goew0KICAgICAgICAgICAgbGFiZWw6Y29sb3Jba2V5XSwNCiAgICAgICAgICAgIHZhbHVlOmtleSwNCiAgICAgICAgICAgIHJlbmRlckxhYmVsSHRtbDpmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJlZHVpLWxhYmVsICUlLWxhYmVsIiBzdHlsZT0ibGluZS1oZWlnaHQ6MjsiPicgKyAodGhpcy5sYWJlbCB8fCAnJykgKyAnPC9kaXY+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfQ0KICAgIC8v5Yib5bu65LiL5p2l5qGGDQogICAgdmFyIGNvbG9yYm94ID0gbmV3IFVFLnVpLkNvbWJveCh7DQogICAgICAgIC8v6ZyA6KaB5oyH5a6a5b2T5YmN55qE57yW6L6R5Zmo5a6e5L6LDQogICAgICAgIGVkaXRvcjplZGl0b3IsDQogICAgICAgIC8v5re75Yqg5p2h55uuDQogICAgICAgIGl0ZW1zOml0ZW1zLA0KICAgICAgICAvL+W9k+mAieS4reaXtuimgeWBmueahOS6i+aDhQ0KICAgICAgICBvbnNlbGVjdDpmdW5jdGlvbiAodCwgaW5kZXgpIHsNCiAgICAgICAgICAgIC8v5ou/5Yiw6YCJ5Lit5p2h55uu55qE5YC8DQogICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQodWlOYW1lLCB0aGlzLml0ZW1zW2luZGV4XS52YWx1ZSk7DQogICAgICAgIH0sDQogICAgICAgIC8v5o+Q56S6DQogICAgICAgIHRpdGxlOnVpTmFtZSwNCiAgICAgICAgLy/lvZPnvJbovpHlmajmsqHmnInnhKbngrnml7bvvIxjb21ib3jpu5jorqTmmL7npLrnmoTlhoXlrrkNCiAgICAgICAgaW5pdFZhbHVlOnVpTmFtZQ0KICAgIH0pOw0KDQogICAgcmV0dXJuIGNvbG9yYm94Ow0KfSk7DQoNCi8qIA0Kd2luZG93LlVFRElUT1JfQ09ORklHWyd0b29sYmFycyddWzBdLnB1c2goJ3RhbmNodScpOw0KVUUucmVnaXN0ZXJVSSgndGFuY2h1JyxmdW5jdGlvbihlZGl0b3IsdWlOYW1lKXsNCg0KICAgIC8v5Yib5bu6ZGlhbG9nDQogICAgdmFyIHVlX2Rvd24gPSBuZXcgVUUudWkuRGlhbG9nKHsNCiAgICAgICAgLy/mjIflrprlvLnlh7rlsYLkuK3pobXpnaLnmoTot6/lvoTvvIzov5nph4zlj6rog73mlK/mjIHpobXpnaIs5Zug5Li66LefYWRkQ3VzdG9taXplRGlhbG9nLmpz55u45ZCM55uu5b2V77yM5omA5Lul5peg6ZyA5Yqg6Lev5b6EDQogICAgICAgaWZyYW1lVXJsOiBibG9naG9zdCsnemJfdXNlcnMvcGx1Z2luL2RtX3Rvb2xzL3BsdWdpbi91ZWJ1dHRvbnMvdWVfZG93bjIucGhwJywNCiAgICAgICAgLy/pnIDopoHmjIflrprlvZPliY3nmoTnvJbovpHlmajlrp7kvosNCiAgICAgICAgZWRpdG9yOmVkaXRvciwNCiAgICAgICAgLy/mjIflrppkaWFsb2fnmoTlkI3lrZcNCiAgICAgICAgbmFtZTp1aU5hbWUsDQogICAgICAgIC8vZGlhbG9n55qE5qCH6aKYDQogICAgICAgIHRpdGxlOiLlvLnlh7rnqpflj6MiLA0KDQogICAgICAgIC8v5oyH5a6aZGlhbG9n55qE5aSW5Zu05qC35byPDQogICAgICAgIGNzc1J1bGVzOiJ3aWR0aDo2MDBweDtoZWlnaHQ6MzAwcHg7IiwNCg0KICAgICAgICAvL+WmguaenOe7meWHuuS6hmJ1dHRvbnPlsLHku6PooahkaWFsb2fmnInnoa7lrprlkozlj5bmtogNCiAgICAgICAgYnV0dG9uczpbDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY2xhc3NOYW1lOidlZHVpLW9rYnV0dG9uJywNCiAgICAgICAgICAgICAgICBsYWJlbDon56Gu5a6aJywNCiAgICAgICAgICAgICAgICAgb25jbGljazpmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgIHVlX2Rvd24uY2xvc2UodHJ1ZSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjbGFzc05hbWU6J2VkdWktY2FuY2VsYnV0dG9uJywNCiAgICAgICAgICAgICAgICBsYWJlbDon5Y+W5raIJywNCiAgICAgICAgICAgICAgICBvbmNsaWNrOmZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgdWVfZG93bi5jbG9zZShmYWxzZSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICBdfSk7DQoNCiAgICAvL+WPguiAg2FkZEN1c3RvbWl6ZUJ1dHRvbi5qcw0KICAgIHZhciBidG4gPSBuZXcgVUUudWkuQnV0dG9uKHsNCiAgICAgICAgbmFtZTonZGlhbG9nYnV0dG9uJyArIHVpTmFtZSwNCiAgICAgICAgdGl0bGU6J2RpYWxvZ2J1dHRvbicgKyB1aU5hbWUsDQogICAgICAgIC8v6ZyA6KaB5re75Yqg55qE6aKd5aSW5qC35byP77yM5oyH5a6aaWNvbuWbvuagh++8jOi/memHjOm7mOiupOS9v+eUqOS4gOS4qumHjeWkjeeahGljb24NCiAgICAgICAgY3NzUnVsZXMgOiJiYWNrZ3JvdW5kOiAjZWNmMmQ2IHVybCgnIitibG9naG9zdCsiemJfdXNlcnMvcGx1Z2luL2RtX3Rvb2xzL3BsdWdpbi91ZWJ1dHRvbnMvaW1hZ2VzL3dwZ29fc2NfdGlwc19taW5pLnBuZycpIC0xcHggLTFweCBuby1yZXBlYXQgIWltcG9ydGFudDsiLA0KICAgICAgICBvbmNsaWNrOmZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIC8v5riy5p+TZGlhbG9nDQogICAgICAgICAgICB1ZV9kb3duLnJlbmRlcigpOw0KICAgICAgICAgICAgdWVfZG93bi5vcGVuKCk7DQogICAgICAgIH0NCiAgICB9KTsNCg0KICAgIHJldHVybiBidG47DQp9KTsgKi8=dm_tools/plugin/uebuttons/uebuttons-post.cssQGNoYXJzZXQgInV0Zi04IjsKCi5sdnNlewoJdGV4dC1pbmRlbnQ6IDBlbSAhaW1wb3J0YW50OwoJY29sb3I6ICM3ZGEzM2M7CgliYWNrZ3JvdW5kOiAjZWNmMmQ2IHVybCgnaW1hZ2VzL3dwZ29fc2Nfbm90aWNlLnBuZycpIC0xcHggLTFweCBuby1yZXBlYXQ7Cglib3JkZXI6IDFweCBzb2xpZCAjYWFjNjZkOwoJb3ZlcmZsb3c6IGhpZGRlbjsKCW1hcmdpbjogMTBweCAwOwoJcGFkZGluZzogMTVweCAxNXB4IDE1cHggMzVweDsKfQouaG9uZ3NlewoJdGV4dC1pbmRlbnQ6IDBlbSAhaW1wb3J0YW50OwoJY29sb3I6ICNjNjY7CgliYWNrZ3JvdW5kOiAjZmZlY2VhIHVybCgnaW1hZ2VzL3dwZ29fc2NfZXJyb3IucG5nJykgLTFweCAtMXB4IG5vLXJlcGVhdDsKCWJvcmRlcjogMXB4IHNvbGlkICNlYmIxYjE7CglvdmVyZmxvdzogaGlkZGVuOwoJbWFyZ2luOiAxMHB4IDA7CglwYWRkaW5nOiAxNXB4IDE1cHggMTVweCAzNXB4Owp9Ci5odWFuZ3NlewoJdGV4dC1pbmRlbnQ6IDBlbSAhaW1wb3J0YW50OwoJY29sb3I6ICNhZDk5NDg7CgliYWNrZ3JvdW5kOiAjZmZmNGI5IHVybCgnaW1hZ2VzL3dwZ29fc2Nfd2Fybi5wbmcnKSAtMXB4IC0xcHggbm8tcmVwZWF0OwoJYm9yZGVyOiAxcHggc29saWQgI2VhYzk0NjsKCW92ZXJmbG93OiBoaWRkZW47CgltYXJnaW46IDEwcHggMDsKCXBhZGRpbmc6IDE1cHggMTVweCAxNXB4IDM1cHg7Cn0KLmh1aXNlewoJdGV4dC1pbmRlbnQ6IDBlbSAhaW1wb3J0YW50OwoJY29sb3I6ICM3Nzc7CgliYWNrZ3JvdW5kOiAjZWFlYWVhIHVybCgnaW1hZ2VzL3dwZ29fc2NfdGlwcy5wbmcnKSAtMXB4IC0xcHggbm8tcmVwZWF0OwoJYm9yZGVyOiAxcHggc29saWQgI2NjYzsKCW92ZXJmbG93OiBoaWRkZW47CgltYXJnaW46IDEwcHggMDsKCXBhZGRpbmc6IDE1cHggMTVweCAxNXB4IDM1cHg7Cn0KLmxhbnNlewoJdGV4dC1pbmRlbnQ6IDBlbSAhaW1wb3J0YW50OwoJZm9udC1zaXplOiAxNnB4OwoJZm9udC13ZWlnaHQ6IG5vcm1hbDsKCWNvbG9yOiAjRkZGOwoJbWFyZ2luOiAxMHB4IDA7CglwYWRkaW5nOiA1cHggMTBweDsKCWJhY2tncm91bmQtY29sb3I6ICMxNjlGRTY7CglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi5wdXRvbmd7Cgl0ZXh0LWluZGVudDogMGVtICFpbXBvcnRhbnQ7CgltYXJnaW46IDEwcHggMDsKCXBhZGRpbmc6IDEwcHggMTVweDsKCWJhY2tncm91bmQ6ICNGRkY7Cglib3JkZXI6IDFweCBzb2xpZCAjRTNFM0UzOwoJYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCAjM0RBQkNFOwp9dm_tools/plugin/uebuttons/uebuttons.phpPD9waHANCg0KLy91ZWJvdHRvbnMNCmZ1bmN0aW9uIGRtX3Rvb2xzX2VkaXRfc3R5bGUoKXsNCglnbG9iYWwgJHpicDsNCgllY2hvICc8c2NyaXB0IHNyYz0iJy4gJHpicC0+aG9zdCAuJ3piX3VzZXJzL3BsdWdpbi9kbV90b29scy9wbHVnaW4vdWVidXR0b25zL3VlYnV0dG9ucy1lZGl0b3IuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+JzsNCn0NCg0KZnVuY3Rpb24gZG1fdG9vbHNfcG9zdF9zdHlsZSgpew0KCWdsb2JhbCAkemJwOw0KCSR6YnAtPmhlYWRlciAuPSc8bGluayByZWw9InN0eWxlc2hlZXQiIHJldj0ic3R5bGVzaGVldCIgaHJlZj0iJy4gJHpicC0+aG9zdCAuJ3piX3VzZXJzL3BsdWdpbi9kbV90b29scy9wbHVnaW4vdWVidXR0b25zL3VlYnV0dG9ucy1wb3N0LmNzcyIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJhbGwiLz4nOw0KfQ==dm_tools/plugin.xmlPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxwbHVnaW4gdmVyc2lvbj0icGhwIj4NCjxpZD5kbV90b29sczwvaWQ+DQo8bmFtZT7lpKfosIvlt6XlhbfnrrE8L25hbWU+DQo8dXJsPmh0dHBzOi8vd3d3LmltbGdtLmNvbS80ODIuaHRtbDwvdXJsPg0KPG5vdGU+6Ieq5Yqo5qCH562+44CB5Zu+54mH5pys5Zyw5YyW562J5bCP5bel5YW3PC9ub3RlPg0KPGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+DQo8cGF0aD5zZXQucGhwPC9wYXRoPg0KPGluY2x1ZGU+aW5jbHVkZS5waHA8L2luY2x1ZGU+DQo8bGV2ZWw+MTwvbGV2ZWw+DQo8YXV0aG9yPg0KICA8bmFtZT7lpKfosIs8L25hbWU+DQogIDxlbWFpbD43NjQ1MzE4OUBxcS5jb208L2VtYWlsPg0KICA8dXJsPmh0dHBzOi8vd3d3LmltbGdtLmNvbS88L3VybD4NCjwvYXV0aG9yPg0KPHNvdXJjZT4NCiAgPG5hbWU+PC9uYW1lPg0KICA8ZW1haWw+PC9lbWFpbD4NCiAgPHVybD48L3VybD4NCjwvc291cmNlPg0KPGFkYXB0ZWQ+MTUxNzQwPC9hZGFwdGVkPg0KPHZlcnNpb24+MS4zPC92ZXJzaW9uPg0KPHB1YmRhdGU+MjAxNC0wOC0yNzwvcHViZGF0ZT4NCjxtb2RpZmllZD4yMDE3LTA4LTEyPC9tb2RpZmllZD4NCjxwcmljZT4wPC9wcmljZT4NCjxwaHB2ZXI+NS4yPC9waHB2ZXI+DQo8YWR2YW5jZWQ+DQogIDxkZXBlbmRlbmN5PjwvZGVwZW5kZW5jeT4NCiAgPHJld3JpdGVmdW5jdGlvbnM+PC9yZXdyaXRlZnVuY3Rpb25zPg0KICA8ZXhpc3RzZnVuY3Rpb25zPjwvZXhpc3RzZnVuY3Rpb25zPg0KICA8Y29uZmxpY3Q+PC9jb25mbGljdD4NCjwvYWR2YW5jZWQ+DQo8c2lkZWJhcnM+DQogIDxzaWRlYmFyMT48L3NpZGViYXIxPg0KICA8c2lkZWJhcjI+PC9zaWRlYmFyMj4NCiAgPHNpZGViYXIzPjwvc2lkZWJhcjM+DQogIDxzaWRlYmFyND48L3NpZGViYXI0Pg0KICA8c2lkZWJhcjU+PC9zaWRlYmFyNT4NCjwvc2lkZWJhcnM+DQo8L3BsdWdpbj4NCg==dm_tools/remoteimg/dm_tools_remoteimg.phpPD9waHANCmZ1bmN0aW9uIGRtX3Rvb2xzX3JlbW90ZWltZ19tYWluKCYkYXJ0aWNsZSkgew0KCWdsb2JhbCAkemJwLCRkbV90b29sczsNCglpZiAoISR6YnAtPkNvbmZpZygkZG1fdG9vbHNbJ25hbWUnXSktPmRtX3Rvb2xzX3JlbW90ZWltZ19zd2l0Y2gpIHJldHVybjsNCgkkdXNlcmlkID0gJHBvc3RpZCA9ICRleHh0ID0gJyc7DQoJJHVzZXJpZCA9ICRhcnRpY2xlLT5BdXRob3ItPklEOw0KCSRwb3N0aWQgPSAkYXJ0aWNsZS0+SUQ7DQoJc2V0X3RpbWVfbGltaXQoMCk7DQoJWkJsb2dFeGNlcHRpb246OkNsZWFyRXJyb3JIb29rKCk7DQoJJGNvbnRlbnQgPSAkYXJ0aWNsZS0+Q29udGVudDsNCgkkcGF0dGVybiA9ICIvPGltZy4qc3JjPVtcJ3xcIl0oLiopW1wnfFwiXVxzKi4qPi9pVSI7DQoJcHJlZ19tYXRjaF9hbGwoJHBhdHRlcm4sJGNvbnRlbnQsJG1hdGNoQ29udGVudCk7DQoJJHBpY19hcnIgPSAkbWF0Y2hDb250ZW50WzFdOw0KCWlmICgkcGljX2Fycil7CQkNCgkJZm9yZWFjaCgkcGljX2FyciBhcyAka2V5PT4kZ290X3VybCl7CQkJDQoJCQlpZihzdWJzdHIoJGdvdF91cmwsMCxzdHJsZW4oJHpicC0+aG9zdCkpIT0kemJwLT5ob3N0KSB7DQoJCQkJJHBpY19wYXRoPSR6YnAtPnVzZXJzZGlyLid1cGxvYWQvJy5kYXRlKCdZJykuJy8nLmRhdGUoJ20nKTsJCQkNCgkJCQlpZighZmlsZV9leGlzdHMoJHBpY19wYXRoKSkgbWtkaXIoJHBpY19wYXRoLDA3NTUsdHJ1ZSk7DQoJCQkJJGV4eHQgPSBkbV90b29sc19yZW1vdGVpbWdfc3VmZml4KCRnb3RfdXJsLCcnKT8nLicuZG1fdG9vbHNfcmVtb3RlaW1nX3N1ZmZpeCgkZ290X3VybCwnJyk6Jyc7DQoJCQkJJHBpY19uYW1lPWRhdGUoJ1ltZEhpcycpLidfJy5yYW5kKDEwMDAwLDk5OTk5KS4kZXh4dDsNCgkJCQkkcGljPSRwaWNfcGF0aC4nLycuJHBpY19uYW1lOw0KCQkJCSRnZXRwaWM9ZG1fdG9vbHNfcmVtb3RlaW1nX3NhdmVmaWxlKCRnb3RfdXJsLCRwaWMsJHBpY19uYW1lLCR1c2VyaWQsJHBvc3RpZCk7DQoJCQkJJHBpY191cmw9c3RyX3JlcGxhY2UoJHpicC0+cGF0aCwkemJwLT5ob3N0LCRwaWMpOw0KCQkJCSRhcnRpY2xlLT5Db250ZW50PXN0cl9yZXBsYWNlKCRnb3RfdXJsLCRwaWNfdXJsLCRhcnRpY2xlLT5Db250ZW50KTsNCgkJCX0NCgkJfQ0KCX0NCn0NCi8qKg0KICog5L+d5a2Y6L+c56iL5Zu+54mHDQogKi8NCmZ1bmN0aW9uIGRtX3Rvb2xzX3JlbW90ZWltZ19zYXZlZmlsZSgkdXJsLCRmbmFtZT0iIiwkbmFtZSwkdXNlcmlkPScnLCRwb3N0aWQ9JycpIHsNCglnbG9iYWwgJHpicDsNCglzZXRfdGltZV9saW1pdCgwKTsNCglpZigkdXJsPT0iIikgcmV0dXJuIGZhbHNlOw0KLyogCWlmKCRmbmFtZT09IiIpIHsNCgkJJGV4dCA9IHN0cnJjaHIoJG5hbWUsIi4iKTsNCgkJJGV4dCA9IGRtX3Rvb2xzX3JlbW90ZWltZ19zdWZmaXgoJHVybCwnJyk7DQoJCS8vaWYoJGV4dCAhPSAiLmdpZiIgJiYgJGV4dCAhPSAiLmpwZWciICYmICRleHQgIT0gIi5qcGciICYmICRleHQgIT0gIi5wbmciICYmICRleHQgIT0gIi5ibXAiKSByZXR1cm4gZmFsc2U7DQoJCSRmbmFtZSA9IGRhdGUoIlltZEhpcyIpLiRleHQ7DQoJfSAqLw0KDQoJJGltZyA9IEdldEh0dHBDb250ZW50KCR1cmwpOw0KCSRzaXplID0gc3RybGVuKCRpbWcpOw0KCSRmcDI9QGZvcGVuKCRmbmFtZSwgImEiKTsNCglmd3JpdGUoJGZwMiwkaW1nKTsNCglmY2xvc2UoJGZwMik7DQoJJHVwbG9hZCA9IG5ldyBVcGxvYWQ7DQoJJHVwbG9hZC0+TmFtZSA9ICRuYW1lOw0KCSR1cGxvYWQtPlNvdXJjZU5hbWUgPSAkbmFtZTsNCgkkdXBsb2FkLT5NaW1lVHlwZSA9ICJpbWFnZS8iLmRtX3Rvb2xzX3JlbW90ZWltZ19zdWZmaXgoJHVybCwnJyk7DQoJJHVwbG9hZC0+U2l6ZSA9ICRzaXplOw0KCSR1cGxvYWQtPkF1dGhvcklEID0gJHVzZXJpZDsNCgkkdXBsb2FkLT5Mb2dJRCA9ICRwb3N0aWQ7DQoJJHVwbG9hZC0+SW50cm8gPSAn5aSn6LCL5bel5YW3566xLei/nOeoi+WbvueJh+acrOWcsOWMlic7DQoJJHVwbG9hZC0+U2F2ZSgpOw0KCXJldHVybiB0cnVlOyANCn0NCmZ1bmN0aW9uIGRtX3Rvb2xzX3JlbW90ZWltZ19zdWZmaXgoJGltYWdlX3VybCwkZXh0X3dheSA9ICcnKXsNCglnbG9iYWwgJHpicDsNCglzZXRfdGltZV9saW1pdCgwKTsNCgkkZXh0ID0gJyc7DQoJJGV4dF9hcnIgPSBhcnJheSgpOw0KCWlmICghJGV4dF93YXkpew0KCQkkZXh0X2FyciA9IGV4cGxvZGUoJy4nLCAkaW1hZ2VfdXJsKTsNCgkJJGV4dCA9IGVuZCgkZXh0X2Fycik7DQoJCSR0eXBlX2xpc3QgPSBhcnJheSgnanBlZycsJ2dpZicsJ2pwZycsJ3BuZycsJ3N3ZicsJ3BzZCcsJ2JtcCcsJ3RpZmYnLCdqcGMnLCdqcDInLCdqcHgnLCdqYjInLCdzd2MnLCdpZmYnLCd3Ym1wJywneGJtJywnanBnLXdlYnAnLCdqcGVnLXdlYnAnLCdwbmctd2VicCcsJ3dlYnAnKTsNCgkJaWYgKGluX2FycmF5KCRleHQsJHR5cGVfbGlzdCkpew0KCQkJaWYgKHN0cnBvcygkZXh0LCctd2VicCcpKXsNCgkJCQlyZXR1cm4gc3RyX2lyZXBsYWNlKCItd2VicCIsIiIsJGV4dCk7DQoJCQl9ZWxzZXsNCgkJCQlyZXR1cm4gJGV4dDsNCgkJCX0NCgkJfWVsc2V7DQoJCQlyZXR1cm4gZG1fdG9vbHNfcmVtb3RlaW1nX3N1ZmZpeCgkaW1hZ2VfdXJsLCdzbG93Jyk7DQoJCX0NCgl9ZWxzZXsNCgkJaWYoc3Vic3RyKCRpbWFnZV91cmwsMCxzdHJsZW4oJHpicC0+aG9zdCkpIT0kemJwLT5ob3N0KXsNCgkJCWlmICghJGltYWdlX3VybClyZXR1cm47DQoJCQkkaW1nPUdldEh0dHBDb250ZW50KCRpbWFnZV91cmwpOw0KCQkJJGZuYW1lPSR6YnAtPnVzZXJzZGlyLidjYWNoZS9kbV90b29sc19yZW1vdGVpbWcuZGF0JzsNCgkJCSRmcDI9QGZvcGVuKCRmbmFtZSwgInciKTsNCgkJCWZ3cml0ZSgkZnAyLCRpbWcpOw0KCQkJZmNsb3NlKCRmcDIpOw0KCQkJJGltZ25lZWRleHQgPSAkZm5hbWU7DQoJCX1lbHNlew0KCQkJJGltYWdlX3BhdGggPSBzdHJfcmVwbGFjZSgkemJwLT5ob3N0LCR6YnAtPnBhdGgsJGltYWdlX3VybCk7DQoJCQkkaW1nbmVlZGV4dCA9ICRpbWFnZV9wYXRoOw0KCQl9DQoJCSR0eXBlX2xpc3QgPSBhcnJheSgxID0+ICdnaWYnLDIgPT4gJ2pwZycsMyA9PiAncG5nJyw0ID0+ICdzd2YnLDUgPT4gJ3BzZCcsNiA9PiAnYm1wJyw3ID0+ICd0aWZmJyw4ID0+ICd0aWYnLDkgPT4gJ2pwYycsMTAgPT4gJ2pwMicsMTEgPT4gJ2pweCcsMTIgPT4gJ2piMicsMTMgPT4gJ3N3YycsMTQgPT4gJ2lmZicsMTUgPT4gJ3dibXAnLDE2ID0+ICd4Ym0nKTsNCgkJaWYoZmlsZV9leGlzdHMoJGltZ25lZWRleHQpKXsNCgkJCSRpbWdfaW5mbyA9IEBnZXRpbWFnZXNpemUgKCRpbWduZWVkZXh0KTsNCgkJCWlmKGlzc2V0KCR0eXBlX2xpc3RbJGltZ19pbmZvWzJdXSkpew0KCQkJCSRleHQgPSAkdHlwZV9saXN0WyRpbWdfaW5mb1syXV07DQoJCQkJcmV0dXJuICRleHQ7DQoJCQl9ZWxzZXsNCgkJCQlkaWUoIuaXoOazleivhuWIq+eahOaWh+S7tuexu+WeiyEiKTsNCgkJCX0NCgkJfWVsc2V7DQoJCQlkaWUoIuaXoOazleivu+WPluWIsOeahOaWh+S7tiEiKTsNCgkJfQ0KCX0NCn0NCi8qIEFycmF5DQooDQogICAgWzBdID0+IDM1MA0KICAgIFsxXSA9PiAzMTgNCiAgICBbMl0gPT4gMg0KICAgIFszXSA9PiB3aWR0aD0iMzUwIiBoZWlnaHQ9IjMxOCINCiAgICBbYml0c10gPT4gOA0KICAgIFtjaGFubmVsc10gPT4gMw0KICAgIFttaW1lXSA9PiBpbWFnZS9qcGVnDQopDQrov5Tlm57nu5Pmnpzor7TmmI4NCue0ouW8lSAwIOe7meWHuueahOaYr+WbvuWDj+WuveW6pueahOWDj+e0oOWAvA0K57Si5byVIDEg57uZ5Ye655qE5piv5Zu+5YOP6auY5bqm55qE5YOP57Sg5YC8DQrntKLlvJUgMiDnu5nlh7rnmoTmmK/lm77lg4/nmoTnsbvlnovvvIzov5Tlm57nmoTmmK/mlbDlrZfvvIzlhbbkuK0xID0gR0lG77yMMiA9IEpQR++8jDMgPSBQTkfvvIw0ID0gU1dG77yMNSA9IFBTRO+8jDYgPSBCTVDvvIw3ID0gVElGRihpbnRlbCBieXRlIG9yZGVyKe+8jDggPSBUSUZGKG1vdG9yb2xhIGJ5dGUgb3JkZXIp77yMOSA9IEpQQ++8jDEwID0gSlAy77yMMTEgPSBKUFjvvIwxMiA9IEpCMu+8jDEzID0gU1dD77yMMTQgPSBJRkbvvIwxNSA9IFdCTVDvvIwxNiA9IFhCTQ0K57Si5byVIDMg57uZ5Ye655qE5piv5LiA5Liq5a695bqm5ZKM6auY5bqm55qE5a2X56ym5Liy77yM5Y+v5Lul55u05o6l55So5LqOIEhUTUwg55qEIDxpbWFnZT4g5qCH562+DQrntKLlvJUgYml0cyDnu5nlh7rnmoTmmK/lm77lg4/nmoTmr4/np43popzoibLnmoTkvY3mlbDvvIzkuozov5vliLbmoLzlvI8NCue0ouW8lSBjaGFubmVscyDnu5nlh7rnmoTmmK/lm77lg4/nmoTpgJrpgZPlgLzvvIxSR0Ig5Zu+5YOP6buY6K6k5pivIDMNCue0ouW8lSBtaW1lIOe7meWHuueahOaYr+WbvuWDj+eahCBNSU1FIOS/oeaBr++8jOatpOS/oeaBr+WPr+S7peeUqOadpeWcqCBIVFRQIENvbnRlbnQtdHlwZSDlpLTkv6Hmga/kuK3lj5HpgIHmraPnoa7nmoTkv6Hmga/vvIzlpoLvvJoNCmhlYWRlcigiQ29udGVudC10eXBlOiBpbWFnZS9qcGVnIik7ICovDQo=dm_tools/set.phpPD9waHAKcmVxdWlyZSAnLi4vLi4vLi4vemJfc3lzdGVtL2Z1bmN0aW9uL2Nfc3lzdGVtX2Jhc2UucGhwJzsKCnJlcXVpcmUgJy4uLy4uLy4uL3piX3N5c3RlbS9mdW5jdGlvbi9jX3N5c3RlbV9hZG1pbi5waHAnOwoKJHpicC0+TG9hZCgpOwoKJGFjdGlvbj0ncm9vdCc7CmlmICghJHpicC0+Q2hlY2tSaWdodHMoJGFjdGlvbikpIHskemJwLT5TaG93RXJyb3IoNik7ZGllKCk7fQoKaWYgKCEkemJwLT5DaGVja1BsdWdpbigkZG1fdG9vbHNbJ25hbWUnXSkpIHskemJwLT5TaG93RXJyb3IoNDgpO2RpZSgpO30KCiRibG9ndGl0bGU9JHpicC0+TG9hZEFwcCgncGx1Z2luJywgJGRtX3Rvb2xzWyduYW1lJ10pLT5uYW1lLicgVmVyICcuJHpicC0+TG9hZEFwcCgncGx1Z2luJywgJGRtX3Rvb2xzWyduYW1lJ10pLT52ZXJzaW9uLicgQCAnLiR6YnAtPkxvYWRBcHAoJ3BsdWdpbicsICRkbV90b29sc1snbmFtZSddKS0+bW9kaWZpZWQuJzxzbWFsbCBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij48YSBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyIgY2xhc3M9InVwX2J1dHRvbiI+W+abtOaWsOajgOa1i108L2E+PC9zbWFsbD4nOwoKcmVxdWlyZSAkYmxvZ3BhdGggLiAnemJfc3lzdGVtL2FkbWluL2FkbWluX2hlYWRlci5waHAnOwpyZXF1aXJlICRibG9ncGF0aCAuICd6Yl9zeXN0ZW0vYWRtaW4vYWRtaW5fdG9wLnBocCc7CgppZihjb3VudCgkX1BPU1QpPjApe2RtX3Rvb2xzX3NhdmVfY29uZmlnKCRkbV90b29sc19jb25maWdzX2FsbCwnc2V0LnBocCcsJ+WPguaVsOW3suaPkOS6pOaIkOWKnycpO30KPz4KPHN0eWxlPgouaGFzaHJ7cGFkZGluZy1ib3R0b206MTBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWVlO3BhZGRpbmctbGVmdDoxMHB4O30KLmhhc2hyOmhvdmVye3BhZGRpbmctYm90dG9tOjhweDtib3JkZXItYm90dG9tOjNweCBzb2xpZCAjZWVlO30KLmRtX3Rvb2xzX3NldF9tYWluX3RhYmxlIGJ7Zm9udC1zaXplOjEuMmVtO30KLmRtX3Rvb2xzX3NldF9tYWluX3RhYmxlIHAge2xpbmUtaGVpZ2h0OjI1cHg7fQo8L3N0eWxlPgo8ZGl2IGlkPSJkaXZNYWluIj4KICA8ZGl2IGNsYXNzPSJkaXZIZWFkZXIiPjw/cGhwIGVjaG8gJGJsb2d0aXRsZTs/PjwvZGl2PgogIDxkaXYgaWQ9ImRpdk1haW4yIj4KPGZvcm0gbWV0aG9kPSJwb3N0Ij4KPHRhYmxlIGJvcmRlcj0iMSIgc3R5bGU9IndpZHRoOjEwMCUiIGNsYXNzPSJkbV90b29sc19zZXRfbWFpbl90YWJsZSI+PHRib2R5PgoJPHRyIHN0eWxlPSJoZWlnaHQ6MzVweCI+CgkJPHRoIGFsaWduPSJsZWZ0Ij48Yj7phY3nva7pobnnm648L2I+PC90aD4KCQk8dGggYWxpZ249ImxlZnQiPjxiPumFjee9ruivtOaYjjwvYj48L3RoPgoJPC90cj4KPHRyPgoJPHRkIGFsaWduPSJsZWZ0Ij4KCQk8cCBjbGFzcz0iaGFzaHIiPgoJCTxiPuaWh+eroOWIl+ihqOi/h+a7pDwvYj4KCQk8L2JyPgoJCei/h+a7pOaWh+eroElEIDogCjxpbnB1dCBuYW1lPSdjbGlzdCcgdHlwZT0ndGV4dCcgdmFsdWU9Jzw/cGhwIGVjaG8gJHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+Y2xpc3Q7Pz4nPgo8L2JyPgrov4fmu6TliIbnsbtJRCA6IAo8aW5wdXQgbmFtZT0nY2xpc3RfY2F0JyB0eXBlPSd0ZXh0JyB2YWx1ZT0nPD9waHAgZWNobyAkemJwLT5Db25maWcoJGRtX3Rvb2xzWyduYW1lJ10pLT5jbGlzdF9jYXQ7Pz4nPgo8L2JyPgoJCTwvcD4KCQk8cCBjbGFzcz0iaGFzaHIiPgoJCTxiPuWwj+W3peWFtzwvYj4KCQk8L2JyPgoJCeemu+W8gOW9k+WJjemhtemdouWPmOaNouagh+mimCA6IAo8aW5wdXQgbmFtZT0neF9oZWFkX291dHRpdGxlJyB0eXBlPSd0ZXh0JyB2YWx1ZT0nPD9waHAgZWNobyAkemJwLT5Db25maWcoJGRtX3Rvb2xzWyduYW1lJ10pLT54X2hlYWRfb3V0dGl0bGU7Pz4nPgoKPC9icj4KCQnov5vlhaXpobXpnaLlj5jmjaLmoIfpopggOiAKPGlucHV0IG5hbWU9J3hfaGVhZF9pbnRpdGxlJyB0eXBlPSd0ZXh0JyB2YWx1ZT0nPD9waHAgZWNobyAkemJwLT5Db25maWcoJGRtX3Rvb2xzWyduYW1lJ10pLT54X2hlYWRfaW50aXRsZTs/Pic+CjwvcD4KPHAgY2xhc3M9Imhhc2hyIj4KCQk8Yj7oh6rliqjmjqjpgIFqczwvYj4KCQk8L2JyPgrnmb7luqboh6rliqjmjqjpgIEgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRtX3Rvb2xzX2F1dG9iYWlkdV9zd2l0Y2giICBjbGFzcz0iY2hlY2tib3giIHZhbHVlPSI8P3BocCBlY2hvICR6YnAtPkNvbmZpZygkZG1fdG9vbHNbJ25hbWUnXSktPmRtX3Rvb2xzX2F1dG9iYWlkdV9zd2l0Y2g7Pz4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48L2JyPjM2MOiHquWKqOaOqOmAgUlEIDxpbnB1dCBuYW1lPSdkbV90b29sc19hdXRvc28nIHR5cGU9J3RleHQnIHZhbHVlPSc8P3BocCBlY2hvICR6YnAtPkNvbmZpZygkZG1fdG9vbHNbJ25hbWUnXSktPmRtX3Rvb2xzX2F1dG9zbzs/Pic+CgkJPC9wPgoJCQoJCTxwIGNsYXNzPSJoYXNociI+CgkJPGI+5paH56ug5Zu+54mH5LyY5YyWPC9iPgoJCTwvYnI+CgkJ5L+u5pS55Zu+54mHVGl0bGXmlrnlvI8KCQk8L2JyPgoJCTxsYWJlbD48aW5wdXQgbmFtZT0iZG1fdG9vbHNfYXJ0aWNsZWltZ194dGl0bGUiIHR5cGU9InJhZGlvIiB2YWx1ZT0iIiA8P3BocCBlY2hvICEkemJwLT5Db25maWcoJGRtX3Rvb2xzWyduYW1lJ10pLT5kbV90b29sc19hcnRpY2xlaW1nX3h0aXRsZT8nY2hlY2tlZD0iY2hlY2tlZCInOicnOz8+Lz7lhbPpl608L2xhYmVsPgoJCTxsYWJlbD48aW5wdXQgbmFtZT0iZG1fdG9vbHNfYXJ0aWNsZWltZ194dGl0bGUiIHR5cGU9InJhZGlvIiB2YWx1ZT0iMSIgPD9waHAgZWNobyAkemJwLT5Db25maWcoJGRtX3Rvb2xzWyduYW1lJ10pLT5kbV90b29sc19hcnRpY2xlaW1nX3h0aXRsZT09ICcxJz8nY2hlY2tlZD0iY2hlY2tlZCInOicnOz8+Lz7mm7/mjaLopobnm5Y8L2xhYmVsPgoJCTxsYWJlbD48aW5wdXQgbmFtZT0iZG1fdG9vbHNfYXJ0aWNsZWltZ194dGl0bGUiIHR5cGU9InJhZGlvIiB2YWx1ZT0iMiIgPD9waHAgZWNobyAkemJwLT5Db25maWcoJGRtX3Rvb2xzWyduYW1lJ10pLT5kbV90b29sc19hcnRpY2xlaW1nX3h0aXRsZSA9PSAnMic/J2NoZWNrZWQ9ImNoZWNrZWQiJzonJzs/Pi8+6L+95YqgPC9sYWJlbD4JCgkJPC9icj4KCQnkv67mlLnlm77niYdBbHTmlrnlvI88L2JyPgoJCTxsYWJlbD48aW5wdXQgbmFtZT0iZG1fdG9vbHNfYXJ0aWNsZWltZ194YWx0IiB0eXBlPSJyYWRpbyIgdmFsdWU9IiIgPD9waHAgZWNobyAhJHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+ZG1fdG9vbHNfYXJ0aWNsZWltZ194YWx0PydjaGVja2VkPSJjaGVja2VkIic6Jyc7Pz4vPuWFs+mXrTwvbGFiZWw+CgkJPGxhYmVsPjxpbnB1dCBuYW1lPSJkbV90b29sc19hcnRpY2xlaW1nX3hhbHQiIHR5cGU9InJhZGlvIiB2YWx1ZT0iMSIgPD9waHAgZWNobyAkemJwLT5Db25maWcoJGRtX3Rvb2xzWyduYW1lJ10pLT5kbV90b29sc19hcnRpY2xlaW1nX3hhbHQ9PSAnMSc/J2NoZWNrZWQ9ImNoZWNrZWQiJzonJzs/Pi8+5pu/5o2i6KaG55uWPC9sYWJlbD4KCQk8bGFiZWw+PGlucHV0IG5hbWU9ImRtX3Rvb2xzX2FydGljbGVpbWdfeGFsdCIgdHlwZT0icmFkaW8iIHZhbHVlPSIyIiA8P3BocCBlY2hvICR6YnAtPkNvbmZpZygkZG1fdG9vbHNbJ25hbWUnXSktPmRtX3Rvb2xzX2FydGljbGVpbWdfeGFsdCA9PSAnMic/J2NoZWNrZWQ9ImNoZWNrZWQiJzonJzs/Pi8+6L+95YqgPC9sYWJlbD4JCgkJPC9icj4KCQnlpJrlm77ml7bmnKvlsL7ov73liqDlhoXlrrkgOiAKCQk8aW5wdXQgbmFtZT0nZG1fdG9vbHNfYXJ0aWNsZWltZ19sYXN0dHh0JyB0eXBlPSd0ZXh0JyB2YWx1ZT0nPD9waHAgZWNobyAkemJwLT5Db25maWcoJGRtX3Rvb2xzWyduYW1lJ10pLT5kbV90b29sc19hcnRpY2xlaW1nX2xhc3R0eHQ7Pz4nPgoJCTwvcD4KCQk8cCBjbGFzcz0iaGFzaHIiPgoJCTxiPuiHquWKqFRBR1M8L2I+KERa5Zyo57q/5Lit5paH5YiG6K+NIC0t6LKM5Ly85aSx5pWI5LqG77yfKQoJCTwvYnI+CgkJPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRtX3Rvb2xzX2F1dG90YWdzX3N3aXRjaCIgIGNsYXNzPSJjaGVja2JveCIgdmFsdWU9Ijw/cGhwIGVjaG8gJHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+ZG1fdG9vbHNfYXV0b3RhZ3Nfc3dpdGNoOz8+IiA+CgkJPC9wPgoJCTxwIGNsYXNzPSJoYXNociI+CgkJPGI+5ZCO5Y+w6K6+572u5Yqg6L29Q29kZU1pcnJvci5qczwvYj4o5ZCO5Y+w6K6+572u5Luj56CB6auY5LquKQoJCTwvYnI+CgkJPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRtX3Rvb2xzX0NvZGVNaXJyb3IiICBjbGFzcz0iY2hlY2tib3giIHZhbHVlPSI8P3BocCBlY2hvICR6YnAtPkNvbmZpZygkZG1fdG9vbHNbJ25hbWUnXSktPmRtX3Rvb2xzX0NvZGVNaXJyb3I7Pz4iIHN0eWxlPT4KCQk8L3A+CgkJPHAgY2xhc3M9Imhhc2hyIj4KCQk8Yj7ov5znqIvlm77niYfmnKzlnLDljJY8L2I+CgkJPC9icj4KCQk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZG1fdG9vbHNfcmVtb3RlaW1nX3N3aXRjaCIgIGNsYXNzPSJjaGVja2JveCIgdmFsdWU9Ijw/cGhwIGVjaG8gJHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+ZG1fdG9vbHNfcmVtb3RlaW1nX3N3aXRjaDs/PiI+CgkJPC9wPgoJCTxwIGNsYXNzPSJoYXNociI+CgkJPGI+VUJC5YaF5a656L+H5rukPC9iPihbdWJi5qCH562+XeWGheWuuVsvdWJi5qCH562+XSkKCQk8L2JyPgoJCeWIl+ihqDo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZG1fdG9vbHNfeHViYl9saXN0IiAgY2xhc3M9ImNoZWNrYm94IiB2YWx1ZT0iPD9waHAgZWNobyAkemJwLT5Db25maWcoJGRtX3Rvb2xzWyduYW1lJ10pLT5kbV90b29sc194dWJiX2xpc3Q7Pz4iPgoJCUZlZWQ6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRtX3Rvb2xzX3h1YmJfZmVlZCIgIGNsYXNzPSJjaGVja2JveCIgdmFsdWU9Ijw/cGhwIGVjaG8gJHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+ZG1fdG9vbHNfeHViYl9mZWVkOz8+Ij4KCQk8L3A+Cgk8L3RkPgoJCgkKCQoJCgk8dGQgYWxpZ249ImxlZnQiPgo8cD7mlofnq6Dov4fmu6Q6PGJyLz7npLrkvotBIOWcqOmmlumhteWSjHRhZ+mhtei/h+a7pElEIDIy44CBMzPmlofnq6BpbmRleHx0YWc6MjJ8MzMg56S65L6LQiDnm7TmjqXov4fmu6RJRCAyMnwzMzwvcD4KCjxwPuWIhuexu+i/h+a7pDo8YnIvPuekuuS+i0EgaW5kZXh8dGFnOjJ8MyDnpLrkvotCIDJ8MzwvcD4KCTwvdGQ+CjwvdHI+CjwvdGJvZHk+PC90YWJsZT4KCSAgPHA+CgkJPGlucHV0IG5hbWU9IiIgdHlwZT0ic3VibWl0IiBjbGFzcz0iYnV0dG9uIiB2YWx1ZT0i5o+Q5LqkIj4KCSAgPC9wPgoJPC9mb3JtPgoJCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+QWN0aXZlTGVmdE1lbnUoImFQbHVnaW5NbmciKTs8L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5BZGRIZWFkZXJJY29uKCI8P3BocCBlY2hvICRibG9naG9zdCAuICd6Yl91c2Vycy9wbHVnaW4vZG1fdG9vbHMvbG9nby5wbmcnOyA/PiIpOzwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7IAoJJCgnLnVwX2J1dHRvbicpLmNsaWNrKGZ1bmN0aW9uKCkgewoJCWlmICghJCggJyNkaWFsb2dfdmVyJyApLmxlbmd0aCl7CgkJCSQoJy51cF9idXR0b24nKS5odG1sKCJXYWl0aW5nLi4uIik7CgkJCSQuYWpheCh7CgkJCQl0eXBlOidwb3N0Jyx1cmw6ICI8P3BocCBlY2hvIGJhc2U2NF9kZWNvZGUoJ2FIUjBjSE02THk5M2QzY3VhVzFzWjIwdVkyOXRMM3BpWDNWelpYSnpMM0JzZFdkcGJpOURhR1ZqYTBGd2NDOTJaWEl1Y0dodycpOz8+IiwKCQkJCWFzeW5jOnRydWUsdGltZW91dDozMDAwMCwKCQkJCWRhdGE6ewoJCQkJCWd1ZXN0X2FwcHR5cGU6Jzw/cGhwICRhcHAgPSAkemJwLT5Mb2FkQXBwKCdwbHVnaW4nLCAnZG1fdG9vbHMnKTtlY2hvICRhcHAtPnR5cGU7Pz4nLCAKCQkJCQlndWVzdF9hcHBpZDonPD9waHAgZWNobyAkYXBwLT5pZDs/PicsIAoJCQkJCWd1ZXN0X2FwcG1vZGlmaWVkOic8P3BocCBlY2hvICRhcHAtPm1vZGlmaWVkOz8+JywgCgkJCQkJZ3Vlc3RfaG9zdDonPD9waHAgZWNobyAkemJwLT5ob3N0Oz8+JywKCQkJCQlndWVzdF9pcDonPD9waHAgZWNobyBHZXRHdWVzdElQKCk7Pz4nLAoJCQkJCWd1ZXN0X25hbWU6Jzw/cGhwIGVjaG8gJHpicC0+Q29uZmlnKCdBcHBDZW50cmUnKS0+dXNlcm5hbWU7Pz4nCgkJCQl9LAoJCQkJZGF0YVR5cGU6J2pzb24nLGNvbXBsZXRlOmZ1bmN0aW9uKCl7fSwKCQkJCXN1Y2Nlc3M6ZnVuY3Rpb24oZGF0YSl7CgkJCQkJCSQoJ2JvZHknKS5hcHBlbmQoZGF0YSk7CgkJCQkJCSQoICcjZGlhbG9nX3ZlcicgKS5kaWFsb2coKTsKCQkJCQkJJCgnLnVwX2J1dHRvbicpLmh0bWwoIlvmm7TmlrDmo4DmtYtdIik7CgkJCQl9LAoJCQkJZXJyb3I6ZnVuY3Rpb24oKXsKCQkJCQl2YXIgZXJydHh0ID0gIjxkaXYgaWQ9J2RpYWxvZ192ZXInIHRpdGxlPSfniYjmnKzmm7TmlrDmj5DnpLonPjxwPuWPguaVsOaPkOS6pOmUmeivrzwvcD48L2Rpdj4iOwoJCQkJCQkkKCdib2R5JykuYXBwZW5kKGVycnR4dCk7CgkJCQkJCSQoICcjZGlhbG9nX3ZlcicgKS5kaWFsb2coKTsKCQkJCX0KCQkJfSk7CgkJfWVsc2V7CgkJCSQoICcjZGlhbG9nX3ZlcicgKS5kaWFsb2coKTsJCgkJfQoJfSk7Cn0pCjwvc2NyaXB0PgogIDwvZGl2Pgo8L2Rpdj4KCgo8P3BocApyZXF1aXJlICRibG9ncGF0aCAuICd6Yl9zeXN0ZW0vYWRtaW4vYWRtaW5fZm9vdGVyLnBocCc7CgpSdW5UaW1lKCk7Cj8+dm_tools/thumb/daolian.jpg/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABRAAD/4QMYaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAxNCA3OS4xNTE0ODEsIDIwMTMvMDMvMTMtMTI6MDk6MTUgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjgzMDhGQjUzRkIwMTExRTY4RjA4OUQ2MUExMTM4OTczIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjgzMDhGQjUyRkIwMTExRTY4RjA4OUQ2MUExMTM4OTczIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyBXaW5kb3dzIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9IjM4OTdGMTM4NzRFNTk5RTEyNTQwNkU2QjgxQ0UxMkQxIiBzdFJlZjpkb2N1bWVudElEPSIzODk3RjEzODc0RTU5OUUxMjU0MDZFNkI4MUNFMTJEMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv/uAA5BZG9iZQBkwAAAAAH/2wCEAAICAgICAgICAgIDAgICAwQDAgIDBAQEBAQEBAQGBAUFBQUEBgYHBwcHBwYJCQoKCQkMDAwMDAwMDAwMDAwMDAwBAgMDBQQFCQYGCQ0KCAoNDw4ODg4PDwwMDAwMDw8MDAwMDAwPDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIAAEAAQMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAAJAQEAAAAAAAAAAAAAAAAAAAAAEAEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwB/Af/Zdm_tools/thumb/dm_tools_thumb.phpPD9waHAKcmVxdWlyZSAndGh1bWJIYW5kZXIucGhwJzsKCmNsYXNzIGRtX3Rvb2xzX3RodW1iewoJCglwdWJsaWMgJHNyYz0iIjsKCXB1YmxpYyAkZW5jb2Rlc3JjPSIiOwoJcHVibGljICR3aWR0aD1udWxsOwoJcHVibGljICRoZWlnaHQ9bnVsbDsKCXB1YmxpYyAkZmlsZT1udWxsOwoJcHVibGljICRjdXR0eXBlPTA7CgoJcHVibGljICRtZDU9bnVsbDsKCXB1YmxpYyAkY2FjaGVmaWxlPW51bGw7CgoJcHVibGljIGZ1bmN0aW9uIGNyZWF0ZW1kNSgpewoJCWdsb2JhbCAkYmxvZ3BhdGg7CgkJaWYoZW1wdHkoJHRoaXMtPndpZHRoKSl7CgkJCSR0aGlzLT53aWR0aD0wOwoJCX0KCQlpZihlbXB0eSgkdGhpcy0+aGVpZ2h0KSl7CgkJCSR0aGlzLT5oZWlnaHQ9MDsKCQl9CgkJaWYoZW1wdHkoJHRoaXMtPmN1dHR5cGUpKXsKCQkJJHRoaXMtPmN1dHR5cGU9MDsKCQl9CgkJJHN0cj0kdGhpcy0+c3JjLictJy4kdGhpcy0+d2lkdGguJy0nLiR0aGlzLT5oZWlnaHQuJy0nLiR0aGlzLT5jdXR0eXBlOwoJCSR0aGlzLT5tZDU9bWQ1KCRzdHIpOwoJCSR0aGlzLT5jYWNoZWZpbGU9JGJsb2dwYXRoLid0aHVtYnMvJy4kdGhpcy0+ZW5jb2Rlc3JjLictJy4kdGhpcy0+d2lkdGguJy0nLiR0aGlzLT5oZWlnaHQuJy0nLiR0aGlzLT5jdXR0eXBlLictYS5qcGcnOwoKCgl9CgoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzaG93cGljKCRpbWdzcmMpewoJCSRzaXplID0gZ2V0aW1hZ2VzaXplKCRpbWdzcmMpOyAvL+iOt+WPlm1pbWXkv6Hmga8KCQkkZnA9Zm9wZW4oJGltZ3NyYywgInJiIik7IC8v5LqM6L+b5Yi25pa55byP5omT5byA5paH5Lu2CgkJaGVhZGVyKCJDb250ZW50LXR5cGU6IHskc2l6ZVsnbWltZSddfSIpOwoJCWZwYXNzdGhydSgkZnApOyAvLyDovpPlh7roh7PmtY/op4jlmagKCQlmY2xvc2UoJGZwKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gY2hlY2tIb3N0KCl7CgkJZ2xvYmFsICR6YnAsJGRtX3Rvb2xzOwoJCSR1cmw9Jyc7CgkJaWYoaXNzZXQoJF9TRVJWRVJbIkhUVFBfUkVGRVJFUiJdKSl7CgkJCSR1cmw9JF9TRVJWRVJbIkhUVFBfUkVGRVJFUiJdOwoJCX0KCQlpZihkbV90b29sc190aHVtYjo6c3RhcnRXaXRoKCR1cmwsJHpicC0+aG9zdCkpewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJJG90aGVydXJsPSR6YnAtPkNvbmZpZygkZG1fdG9vbHNbJ25hbWUnXSktPmRtX3Rvb2xzX3RodW1iX2NoZWNraG9zdGluOwoJCWlmKGVtcHR5KCRvdGhlcnVybCk9PXRydWUpewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCSR0ZW1wPWV4cGxvZGUoInwiLCRvdGhlcnVybCk7CgkJaWYoIWlzc2V0KCR0ZW1wKSl7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJZm9yZWFjaCgkdGVtcCBhcyAkc3RyKXsKCQkJaWYoZG1fdG9vbHNfdGh1bWI6OnN0YXJ0V2l0aCgkdXJsLHRyaW0oJHN0cikpKXsKCQkJCXJldHVybiB0cnVlOwoJCQl9CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gb3V0cHV0KCl7CgkJZ2xvYmFsICR6YnAsJGRtX3Rvb2xzOwoJCWdsb2JhbCAkYmxvZ3BhdGg7CgkJCgkJJGNoZWNraG9zdD0kemJwLT5Db25maWcoJGRtX3Rvb2xzWyduYW1lJ10pLT5kbV90b29sc190aHVtYl9jaGVja2hvc3Q7CgkJaWYoaXNzZXQoJGNoZWNraG9zdCkgJiYgJGNoZWNraG9zdD09MSl7CgkJCWlmKCR0aGlzLT5jaGVja0hvc3QoKT09ZmFsc2UpewoJCQkJZG1fdG9vbHNfdGh1bWI6OnNob3dwaWMoJGRtX3Rvb2xzWydwYXRoJ10uJ3RodW1iL2Rhb2xpYW4uanBnJyk7CgkJCQlkaWUoKTsKCQkJfQoJCX0KCQlpZihmaWxlX2V4aXN0cygkdGhpcy0+Y2FjaGVmaWxlKT09dHJ1ZSl7CgkJCWRtX3Rvb2xzX3RodW1iOjpzaG93cGljKCR0aGlzLT5jYWNoZWZpbGUpOwoJCX1lbHNlewoJCQkkdGhpcy0+aGFuZGxlcj1uZXcgZG1fdG9vbHNfdGh1bWJfVGh1bWJIYW5kbGVyKCk7CgkJCQlpZihkbV90b29sc190aHVtYjo6c3RhcnRXaXRoKCR0aGlzLT5zcmMsJHpicC0+aG9zdCkpewoJCQkJCSR0aGlzLT5maWxlPSRibG9ncGF0aC5zdWJzdHIoJHRoaXMtPnNyYyxzdHJsZW4oJHpicC0+aG9zdCkpOwoJCQkJCSR0aGlzLT5oYW5kbGVyLT5zZXRTcmNJbWcoJHRoaXMtPmZpbGUpOwoJCQkJCSR0aGlzLT5oYW5kbGVyLT5zZXRDdXRUeXBlKCR0aGlzLT5jdXR0eXBlKTsKCQkJCQlpZigkdGhpcy0+Y3V0dHlwZT09NCl7CgkJCQkJCSR0aGlzLT5oYW5kbGVyLT5zZXRDdXRUeXBlKDMpOwoJCQkJCQkkdGhpcy0+aGFuZGxlci0+c2V0RHN0SW1nKCR0aGlzLT5jYWNoZWZpbGUpOwoJCQkJCQlpZigkdGhpcy0+d2lkdGg9PW51bGwgfHwgJHRoaXMtPndpZHRoPT0wKXsKCQkJCQkJCSR0aGlzLT5oYW5kbGVyLT5jcmVhdGVJbWcoMTAwKTsKCQkJCQkJfWVsc2UgaWYoJHRoaXMtPmhlaWdodD09bnVsbCB8fCAkdGhpcy0+aGVpZ2h0PT0wKXsKCQkJCQkJCSR0aGlzLT5oYW5kbGVyLT5jcmVhdGVJbWcoJHRoaXMtPndpZHRoKTsKCQkJCQkJfWVsc2V7CgkJCQkJCQkkdGhpcy0+aGFuZGxlci0+Y3JlYXRlSW1nKCR0aGlzLT53aWR0aCwkdGhpcy0+aGVpZ2h0KTsKCQkJCQkJfQoJCQkJCQkkdGhpcy0+aGFuZGxlcj1uZXcgZG1fdG9vbHNfdGh1bWJfVGh1bWJIYW5kbGVyKCk7CgkJCQkJCSR0aGlzLT5oYW5kbGVyLT5zZXRTcmNJbWcoJHRoaXMtPmNhY2hlZmlsZSk7CgkJCQkJCSR0aGlzLT5oYW5kbGVyLT5zZXRDdXRUeXBlKDIpOwoJCQkJCX0KCQkJCQkkdGhpcy0+aGFuZGxlci0+c2V0RHN0SW1nKCR0aGlzLT5jYWNoZWZpbGUpOwoJCQkJCWlmKCR0aGlzLT53aWR0aD09bnVsbCB8fCAkdGhpcy0+d2lkdGg9PTApewoJCQkJCQkkdGhpcy0+aGFuZGxlci0+Y3JlYXRlSW1nKDEwMCk7CgkJCQkJfWVsc2UgaWYoJHRoaXMtPmhlaWdodD09bnVsbCB8fCAkdGhpcy0+aGVpZ2h0PT0wKXsKCQkJCQkJJHRoaXMtPmhhbmRsZXItPmNyZWF0ZUltZygkdGhpcy0+d2lkdGgpOwoJCQkJCX1lbHNlewoJCQkJCQkkdGhpcy0+aGFuZGxlci0+Y3JlYXRlSW1nKCR0aGlzLT53aWR0aCwkdGhpcy0+aGVpZ2h0KTsKCQkJCQl9CgkJCQkJaWYoZmlsZV9leGlzdHMoJHRoaXMtPmNhY2hlZmlsZSkpewoJCQkJCQlkbV90b29sc190aHVtYjo6c2hvd3BpYygkdGhpcy0+Y2FjaGVmaWxlKTsKCQkJCQl9CgkJCQl9ZWxzZWlmKCFkbV90b29sc190aHVtYjo6c3RhcnRXaXRoKCR0aGlzLT5zcmMsJHpicC0+aG9zdCkmJiR6YnAtPkNvbmZpZygkZG1fdG9vbHNbJ25hbWUnXSktPmRtX3Rvb2xzX3RodW1iX3JlbW90ZWltZyl7CgkJCQkJb2Jfc3RhcnQoKTsKCQkJCQlyZWFkZmlsZSgkdGhpcy0+c3JjKTsKCQkJCQkkaW1nID0gb2JfZ2V0X2NvbnRlbnRzKCk7CgkJCQkJb2JfZW5kX2NsZWFuKCk7CgkJCQkJJHNpemUgPSBzdHJsZW4oJGltZyk7CgkJCQkJJHRoaXMtPmhhbmRsZXItPnNldERzdEltZygkdGhpcy0+Y2FjaGVmaWxlKTsKCQkJCQkkZnAyPUBmb3BlbigkdGhpcy0+Y2FjaGVmaWxlLicudG1wJywgInciKTsKCQkJCQlmd3JpdGUoJGZwMiwkaW1nKTsKCQkJCQlmY2xvc2UoJGZwMik7CgkJCQkJJHRoaXMtPmhhbmRsZXItPnNldFNyY0ltZygkdGhpcy0+Y2FjaGVmaWxlLicudG1wJyk7CgkJCQkJJHRoaXMtPmhhbmRsZXItPnNldERzdEltZygkdGhpcy0+Y2FjaGVmaWxlKTsKCQkJCQkkdGhpcy0+aGFuZGxlci0+c2V0Q3V0VHlwZSgkdGhpcy0+Y3V0dHlwZSk7CgkJCQkJaWYoJHRoaXMtPmN1dHR5cGU9PTQpewoJCQkJCQkkdGhpcy0+aGFuZGxlci0+c2V0Q3V0VHlwZSgzKTsKCQkJCQkJJHRoaXMtPmhhbmRsZXItPnNldERzdEltZygkdGhpcy0+Y2FjaGVmaWxlKTsKCQkJCQkJaWYoJHRoaXMtPndpZHRoPT1udWxsIHx8ICR0aGlzLT53aWR0aD09MCl7CgkJCQkJCQkkdGhpcy0+aGFuZGxlci0+Y3JlYXRlSW1nKDEwMCk7CgkJCQkJCX1lbHNlIGlmKCR0aGlzLT5oZWlnaHQ9PW51bGwgfHwgJHRoaXMtPmhlaWdodD09MCl7CgkJCQkJCQkkdGhpcy0+aGFuZGxlci0+Y3JlYXRlSW1nKCR0aGlzLT53aWR0aCk7CgkJCQkJCX1lbHNlewoJCQkJCQkJJHRoaXMtPmhhbmRsZXItPmNyZWF0ZUltZygkdGhpcy0+d2lkdGgsJHRoaXMtPmhlaWdodCk7CgkJCQkJCX0KCQkJCQkJJHRoaXMtPmhhbmRsZXI9bmV3IGRtX3Rvb2xzX3RodW1iX1RodW1iSGFuZGxlcigpOwoJCQkJCQkkdGhpcy0+aGFuZGxlci0+c2V0U3JjSW1nKCR0aGlzLT5jYWNoZWZpbGUpOwoJCQkJCQkkdGhpcy0+aGFuZGxlci0+c2V0Q3V0VHlwZSgyKTsKCQkJCQl9CgkJCQkJJHRoaXMtPmhhbmRsZXItPnNldERzdEltZygkdGhpcy0+Y2FjaGVmaWxlKTsKCQkJCQlpZigkdGhpcy0+d2lkdGg9PW51bGwgfHwgJHRoaXMtPndpZHRoPT0wKXsKCQkJCQkJJHRoaXMtPmhhbmRsZXItPmNyZWF0ZUltZygxMDApOwoJCQkJCX1lbHNlIGlmKCR0aGlzLT5oZWlnaHQ9PW51bGwgfHwgJHRoaXMtPmhlaWdodD09MCl7CgkJCQkJCSR0aGlzLT5oYW5kbGVyLT5jcmVhdGVJbWcoJHRoaXMtPndpZHRoKTsKCQkJCQl9ZWxzZXsKCQkJCQkJJHRoaXMtPmhhbmRsZXItPmNyZWF0ZUltZygkdGhpcy0+d2lkdGgsJHRoaXMtPmhlaWdodCk7CgkJCQkJfQoJCQkJCUB1bmxpbmsoJHRoaXMtPmNhY2hlZmlsZS4nLnRtcCcpOwoJCQkJCWlmKGZpbGVfZXhpc3RzKCR0aGlzLT5jYWNoZWZpbGUpKXsKCQkJCQkJZG1fdG9vbHNfdGh1bWI6OnNob3dwaWMoJHRoaXMtPmNhY2hlZmlsZSk7CgkJCQkJfQoJCQkJfQoJCQkKCQkJCgkJCQoJCX0KCQkKCX0KCQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQaWNzKCYkYXJ0aWNsZSwkd2lkdGgsJGhlaWdodCwkY3V0dHlwZT0wKXsKCQlnbG9iYWwgJHpicDsKICAgICAgICAkcGF0dGVybj0nLzxpbWcuKj9zcmM9IiguKj8pKD89IikvJzsKCQkkY29udGVudCA9ICRhcnRpY2xlLT5Db250ZW50OwoJCXByZWdfbWF0Y2hfYWxsKCRwYXR0ZXJuLCRjb250ZW50LCRtYXRjaENvbnRlbnQpOwoJCSRhcnIgPSBhcnJheSgpOwoJCWlmKGlzc2V0KCRtYXRjaENvbnRlbnRbMV1bMF0pKQoJCXsKCQkJZm9yZWFjaCgkbWF0Y2hDb250ZW50WzFdIGFzICR1cmwpewoJCQkJaWYoZG1fdG9vbHNfdGh1bWI6OmVuZFdpdGgodHJpbSgkdXJsKSwnYm1wJyl8fGRtX3Rvb2xzX3RodW1iOjplbmRXaXRoKHRyaW0oJHVybCksJ0JNUCcpICl7CgkJCQkJJGFycltdPSR1cmw7CgkJCQl9ZWxzZXsKCQkJCQkkYXJyW109ZG1fdG9vbHNfdGh1bWI6OmdldFBpY1VybEJ5KCR1cmwsJHdpZHRoLCRoZWlnaHQsJGN1dHR5cGUpOwoJCQkJfQoJCQl9CQoJCX0KCQkkYXJ0aWNsZS0+ZG1fdG9vbHNfdGh1bWI9JGFycjsKCQkkYXJ0aWNsZS0+ZG1fdG9vbHNfdGh1bWJfQ09VTlQ9Y291bnQoJGFycik7CgkJaWYoJGFydGljbGUtPmRtX3Rvb2xzX3RodW1iX0NPVU5UPjApewoJCQkkYXJ0aWNsZS0+ZG1fdG9vbHNfdGh1bWJfRmlyc3Q9JGFyclswXTsKCQl9ZWxzZXsKCQkJJGFydGljbGUtPmRtX3Rvb2xzX3RodW1iX0ZpcnN0PW51bGw7CgkJfQoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UGljVXJsQnkoJHVybCwkd2lkdGgsJGhlaWdodCwkY3V0dHlwZT0wKXsKCQlnbG9iYWwgJHpicCwkZG1fdG9vbHM7CgkJJGZsYWc9JHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+ZG1fdG9vbHNfdGh1bWJfc3dpdGNoOwoJCSRjaGFuZ2V1cmw9JHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+ZG1fdG9vbHNfdGh1bWJfY2hhbmdldXJsOwoJCWlmKGlzc2V0KCRmbGFnKSAmJiAkZmxhZz09MSl7CiAgICAgIGlmKGRtX3Rvb2xzX3RodW1iOjpzdGFydFdpdGgoJHVybCwkemJwLT5ob3N0KSl7CiAgICAgICAgICBpZihpc3NldCgkY2hhbmdldXJsKSAmJiAkY2hhbmdldXJsPT0xKXsKICAgICAgICAgICAgcmV0dXJuICR6YnAtPmhvc3QuJ3RodW1icy8nLnVybGVuY29kZShkbV90b29sc19iYXNlNjRfZW5jb2RlKCR1cmwpKS4nLScuJHdpZHRoLictJy4kaGVpZ2h0LictJy4kY3V0dHlwZS4nLWEuanBnJzsKICAgICAgICAgIH1lbHNlewogICAgICAgICAgICByZXR1cm4gJGRtX3Rvb2xzWyd1cmwnXS4ndGh1bWIvcGljLnBocD9zcmM9Jy51cmxlbmNvZGUoZG1fdG9vbHNfYmFzZTY0X2VuY29kZSgkdXJsKSkuJyZ3aWR0aD0nLiR3aWR0aC4nJmhlaWdodD0nLiRoZWlnaHQuJyZjdXR0eXBlPScuJGN1dHR5cGU7CiAgICAgICAgICB9CiAgICAgIH1lbHNlaWYoIWRtX3Rvb2xzX3RodW1iOjpzdGFydFdpdGgoJHVybCwkemJwLT5ob3N0KSl7CiAgICAgICAgaWYoJHpicC0+Q29uZmlnKCRkbV90b29sc1snbmFtZSddKS0+ZG1fdG9vbHNfdGh1bWJfcmVtb3RlaW1nKXsKICAgICAgICAgICAgaWYoaXNzZXQoJGNoYW5nZXVybCkgJiYgJGNoYW5nZXVybD09MSl7CiAgICAgICAgICAgICAgcmV0dXJuICR6YnAtPmhvc3QuJ3RodW1icy8nLnVybGVuY29kZShkbV90b29sc19iYXNlNjRfZW5jb2RlKCR1cmwpKS4nLScuJHdpZHRoLictJy4kaGVpZ2h0LictJy4kY3V0dHlwZS4nLWEuanBnJzsKICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgcmV0dXJuICRkbV90b29sc1sndXJsJ10uJ3RodW1iL3BpYy5waHA/c3JjPScudXJsZW5jb2RlKGRtX3Rvb2xzX2Jhc2U2NF9lbmNvZGUoJHVybCkpLicmd2lkdGg9Jy4kd2lkdGguJyZoZWlnaHQ9Jy4kaGVpZ2h0LicmY3V0dHlwZT0nLiRjdXR0eXBlOwogICAgICAgICAgICB9CiAgICAgICAgfWVsc2V7CiAgICAgICAgICByZXR1cm4gJHVybDsKICAgICAgICB9CgkJCX0KCQl9ZWxzZXsKCQkJcmV0dXJuICR1cmw7CgkJfQoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SW1nVHlwZSgkZmlsZV9wYXRoKXsKICAgICAgICAkdHlwZV9saXN0ID0gYXJyYXkoIjEiPT4iZ2lmIiwiMiI9PiJqcGciLCIzIj0+InBuZyIsIjQiPT4ic3dmIiwiNSIgPT4gInBzZCIsIjYiPT4iYm1wIiwiMTUiPT4id2JtcCIpOwogICAgICAgIGlmKGZpbGVfZXhpc3RzKCRmaWxlX3BhdGgpKXsKICAgICAgICAgICAgJGltZ19pbmZvID0gQGdldGltYWdlc2l6ZSAoJGZpbGVfcGF0aCk7CiAgICAgICAgICAgIGlmKGlzc2V0KCR0eXBlX2xpc3RbJGltZ19pbmZvWzJdXSkpewogICAgICAgICAgICAgICAgUmV0dXJuICR0eXBlX2xpc3RbJGltZ19pbmZvWzJdXTsKICAgICAgICAgICAgfQogICAgICAgIH1lbHNlewogICAgICAgICAgICBkaWUoIuaWh+S7tuS4jeWtmOWcqCzkuI3og73lj5blvpfmlofku7bnsbvlnoshIik7CiAgICAgICAgfQogICAgfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlQmVhbigpewoJCSRiZWFuPW5ldyBkbV90b29sc190aHVtYigpOwoJCSRiZWFuLT5zcmM9ZG1fdG9vbHNfYmFzZTY0X2RlY29kZSh1cmxkZWNvZGUoR2V0VmFycygic3JjIiwiR0VUIikpKTsKCQkkYmVhbi0+ZW5jb2Rlc3JjPUdldFZhcnMoInNyYyIsIkdFVCIpOwoJCSRiZWFuLT53aWR0aD0oaW50KUdldFZhcnMoIndpZHRoIiwiR0VUIik7CgkJJGJlYW4tPmhlaWdodD0oaW50KUdldFZhcnMoImhlaWdodCIsIkdFVCIpOwoJCSRiZWFuLT5jdXR0eXBlPShpbnQpR2V0VmFycygiY3V0dHlwZSIsIkdFVCIpOwoJCSRiZWFuLT5jcmVhdGVtZDUoKTsKCQlyZXR1cm4gJGJlYW47Cgl9CgoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdGFydFdpdGgoJHRlbXBzdHIsICRuZWVkbGUpIHsKCQlyZXR1cm4gc3RycG9zKCR0ZW1wc3RyLCAkbmVlZGxlKSA9PT0gMDsKCX0KCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuZFdpdGgoJHN0ciwgJG5lZWRsZSkgewoJCWlmKHN0cmxlbigkc3RyKT09MCl7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJaWYoc3RybGVuKCRzdHIpPHN0cmxlbigkbmVlZGxlKSl7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJaWYoc3RybGVuKCRzdHIpPT1zdHJsZW4oJG5lZWRsZSkpewoJCQlyZXR1cm4gJHN0cj09JG5lZWRsZTsKCQl9CgkJJHRlbXA9c3Vic3RyKCRzdHIsc3RybGVuKCRzdHIpLXN0cmxlbigkbmVlZGxlKSk7CgkJcmV0dXJuIHN0cnBvcygkdGVtcCwgJG5lZWRsZSkgPT09IDA7Cgl9Cn0KPz4=dm_tools/thumb/pic.phpPD9waHAKb2Jfc3RhcnQoKTsKcmVxdWlyZSAnLi4vLi4vLi4vLi4vemJfc3lzdGVtL2Z1bmN0aW9uL2Nfc3lzdGVtX2Jhc2UucGhwJzsKcmVxdWlyZSAnLi4vLi4vLi4vLi4vemJfc3lzdGVtL2Z1bmN0aW9uL2Nfc3lzdGVtX2FkbWluLnBocCc7CiR6YnAtPkxvYWQoKTsKaWYgKCEkemJwLT5DaGVja1BsdWdpbigkZG1fdG9vbHNbJ25hbWUnXSkpIHskemJwLT5TaG93RXJyb3IoNDgpO2RpZSgpO30KJGRtX3Rvb2xzX3RodW1iID0gZG1fdG9vbHNfdGh1bWI6OmNyZWF0ZUJlYW4oKTsKb2JfZW5kX2NsZWFuKCk7CiRkbV90b29sc190aHVtYi0+b3V0cHV0KCk7Cgo/Pg==dm_tools/thumb/thumbHander.phpPD9waHAKCmNsYXNzIGRtX3Rvb2xzX3RodW1iX1RodW1iSGFuZGxlcnsKICAgIHZhciAkZHN0X2ltZzsvLyDnm67moIfmlofku7YKICAgIHZhciAkaF9zcmM7IC8vIOWbvueJh+i1hOa6kOWPpeafhAogICAgdmFyICRoX2RzdDsvLyDmlrDlm77lj6Xmn4QKICAgIHZhciAkaF9tYXNrOy8vIOawtOWNsOWPpeafhAogICAgdmFyICRpbWdfY3JlYXRlX3F1YWxpdHkgPSAxMDA7Ly8g5Zu+54mH55Sf5oiQ6LSo6YePCiAgICB2YXIgJGltZ19kaXNwbGF5X3F1YWxpdHkgPSA4MDsvLyDlm77niYfmmL7npLrotKjph48s6buY6K6k5Li6NzUKICAgIHZhciAkaW1nX3NjYWxlID0gMDsvLyDlm77niYfnvKnmlL7mr5TkvosKICAgIHZhciAkc3JjX3cgPSAwOy8vIOWOn+WbvuWuveW6pgogICAgdmFyICRzcmNfaCA9IDA7Ly8g5Y6f5Zu+6auY5bqmCiAgICB2YXIgJGRzdF93ID0gMDsvLyDmlrDlm77mgLvlrr3luqYKICAgIHZhciAkZHN0X2ggPSAwOy8vIOaWsOWbvuaAu+mrmOW6pgogICAgdmFyICRmaWxsX3c7Ly8g5aGr5YWF5Zu+5b2i5a69CiAgICB2YXIgJGZpbGxfaDsvLyDloavlhYXlm77lvaLpq5gKICAgIHZhciAkY29weV93Oy8vIOaLt+i0neWbvuW9ouWuvQogICAgdmFyICRjb3B5X2g7Ly8g5ou36LSd5Zu+5b2i6auYCiAgICB2YXIgJHNyY194ID0gMDsvLyDljp/lm77nu5jliLbotbflp4vmqKrlnZDmoIcKICAgIHZhciAkc3JjX3kgPSAwOy8vIOWOn+Wbvue7mOWItui1t+Wni+e6teWdkOaghwogICAgdmFyICRzdGFydF94Oy8vIOaWsOWbvue7mOWItui1t+Wni+aoquWdkOaghwogICAgdmFyICRzdGFydF95Oy8vIOaWsOWbvue7mOWItui1t+Wni+e6teWdkOaghwogICAgdmFyICRtYXNrX3dvcmQ7Ly8g5rC05Y2w5paH5a2XCiAgICB2YXIgJG1hc2tfaW1nOy8vIOawtOWNsOWbvueJhwogICAgdmFyICRtYXNrX3Bvc194ID0gMDsvLyDmsLTljbDmqKrlnZDmoIcKICAgIHZhciAkbWFza19wb3NfeSA9IDA7Ly8g5rC05Y2w57q15Z2Q5qCHCiAgICB2YXIgJG1hc2tfb2Zmc2V0X3ggPSA1Oy8vIOawtOWNsOaoquWQkeWBj+enuwogICAgdmFyICRtYXNrX29mZnNldF95ID0gNTsvLyDmsLTljbDnurXlkJHlgY/np7sKICAgIHZhciAkZm9udF93Oy8vIOawtOWNsOWtl+S9k+WuvQogICAgdmFyICRmb250X2g7Ly8g5rC05Y2w5a2X5L2T6auYCiAgICB2YXIgJG1hc2tfdzsvLyDmsLTljbDlrr0KICAgIHZhciAkbWFza19oOy8vIOawtOWNsOmrmAogICAgdmFyICRtYXNrX2ZvbnRfY29sb3IgPSAiI2ZmZmZmZiI7Ly8g5rC05Y2w5paH5a2X6aKc6ImyCiAgICB2YXIgJG1hc2tfZm9udCA9IDI7Ly8g5rC05Y2w5a2X5L2TCiAgICB2YXIgJGZvbnRfc2l6ZTsvLyDlsLrlr7gKICAgIHZhciAkbWFza19wb3NpdGlvbiA9IDA7Ly8g5rC05Y2w5L2N572uCiAgICB2YXIgJG1hc2tfaW1nX3BjdCA9IDUwOy8vIOWbvueJh+WQiOW5tueoi+W6pizlgLzotorlpKfvvIzlkIjlubbnqIvluo/otorkvY4KICAgIHZhciAkbWFza190eHRfcGN0ID0gNTA7Ly8g5paH5a2X5ZCI5bm256iL5bqmLOWAvOi2iuWwj++8jOWQiOW5tueoi+W6j+i2iuS9jgogICAgdmFyICRpbWdfYm9yZGVyX3NpemUgPSAwOy8vIOWbvueJh+i+ueahhuWwuuWvuAogICAgdmFyICRpbWdfYm9yZGVyX2NvbG9yOy8vIOWbvueJh+i+ueahhuminOiJsgogICAgdmFyICRfZmxpcF94PTA7Ly8g5rC05bmz57+76L2s5qyh5pWwCiAgICB2YXIgJF9mbGlwX3k9MDsvLyDlnoLnm7Tnv7vovazmrKHmlbAKICAgIHZhciAkY3V0X3R5cGU9MDsvLyDliarliIfnsbvlnosKICAgIHZhciAkaW1nX3R5cGU7Ly8g5paH5Lu257G75Z6LCiAgICAvLyDmlofku7bnsbvlnovlrprkuYks5bm25oyH5Ye65LqG6L6T5Ye65Zu+54mH55qE5Ye95pWwCiAgICB2YXIgJGFsbF90eXBlID0gYXJyYXkoCiAgICAgICAgImpwZyIgID0+IGFycmF5KCJvdXRwdXQiPT4iaW1hZ2VqcGVnIiwidHlwZSI9PiJpbWFnZS9qcGciKSwKICAgICAgICAiZ2lmIiAgPT4gYXJyYXkoIm91dHB1dCI9PiJpbWFnZWdpZiIsInR5cGUiPT4iaW1hZ2UvZ2lmIiksCiAgICAgICAgInBuZyIgID0+IGFycmF5KCJvdXRwdXQiPT4iaW1hZ2VwbmciLCJ0eXBlIj0+ImltYWdlL3BuZyIpLAogICAgICAgICJ3Ym1wIiA9PiBhcnJheSgib3V0cHV0Ij0+ImltYWdlMndibXAiLCJ0eXBlIj0+ImltYWdlL3ZuZC53YXAud2JtcCIpLAoJCSJibXAiID0+IGFycmF5KCJvdXRwdXQiPT4iaW1hZ2Uyd2JtcCIsInR5cGUiPT4iaW1hZ2Uvdm5kLndhcC53Ym1wIiksCiAgICAgICAgImpwZWciID0+IGFycmF5KCJvdXRwdXQiPT4iaW1hZ2VqcGVnIiwidHlwZSI9PiJpbWFnZS9qcGVnIikpOwogICAgLyoqCiAgICAgKiDmnoTpgKDlh73mlbAKICAgICAqLwogICAgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKXsKICAgICAgICAkdGhpcy0+bWFza19mb250X2NvbG9yID0gIiNmZmZmZmYiOwogICAgICAgICR0aGlzLT5mb250ID0gMjsKICAgICAgICAkdGhpcy0+Zm9udF9zaXplID0gMTI7CiAgICB9CgogICAgLyoqCiAgICAgKiDlj5blvpflm77niYfnmoTlrr0KICAgICAqLwogICAgZnVuY3Rpb24gZ2V0SW1nV2lkdGgoJHNyYyl7CiAgICAgICAgcmV0dXJuIGltYWdlc3goJHNyYyk7CiAgICB9CgogICAgLyoqCiAgICAgKiDlj5blvpflm77niYfnmoTpq5gKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0SW1nSGVpZ2h0KCRzcmMpewogICAgICAgIHJldHVybiBpbWFnZXN5KCRzcmMpOwogICAgfQoKICAgIC8qKgogICAgICog6K6+572u5Zu+54mH55Sf5oiQ6Lev5b6ECiAgICAgKgogICAgICogQHBhcmFtICAgIHN0cmluZyAgICAkc3JjX2ltZyAgIOWbvueJh+eUn+aIkOi3r+W+hAogICAgICovCiAgICBmdW5jdGlvbiBzZXRTcmNJbWcoJHNyY19pbWcsICRpbWdfdHlwZT1udWxsKXsKICAgICAgICBpZighZmlsZV9leGlzdHMoJHNyY19pbWcpKXsKICAgICAgICAgICAgZGllKCLlm77niYfkuI3lrZjlnKgiKTsKICAgICAgICB9CiAgICAgICAgaWYoIWVtcHR5KCRpbWdfdHlwZSkpewogICAgICAgICAgICAkdGhpcy0+aW1nX3R5cGUgPSAkaW1nX3R5cGU7CiAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICR0aGlzLT5pbWdfdHlwZSA9ICR0aGlzLT5fZ2V0SW1nVHlwZSgkc3JjX2ltZyk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5fY2hlY2tWYWxpZCgkdGhpcy0+aW1nX3R5cGUpOwogICAgICAgIC8vIGZpbGVfZ2V0X2NvbnRlbnRz5Ye95pWw6KaB5rGCcGhw54mI5pysPjQuMy4wCiAgICAgICAgJHNyYyA9ICcnOwogICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygiZmlsZV9nZXRfY29udGVudHMiKSl7CiAgICAgICAgICAgICRzcmMgPSBmaWxlX2dldF9jb250ZW50cygkc3JjX2ltZyk7CiAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICRoYW5kbGUgPSBmb3BlbiAoJHNyY19pbWcsICJyIik7CiAgICAgICAgICAgIHdoaWxlICghZmVvZiAoJGhhbmRsZSkpewogICAgICAgICAgICAgICAkc3JjIC49IGZnZXRzKCRmZCwgNDA5Nik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZmNsb3NlICgkaGFuZGxlKTsKICAgICAgICB9CiAgICAgICAgaWYoZW1wdHkoJHNyYykpewogICAgICAgICAgICBkaWUoIuWbvueJh+a6kOS4uuepuiIpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+aF9zcmMgPSBASW1hZ2VDcmVhdGVGcm9tU3RyaW5nKCRzcmMpOwogICAgICAgICR0aGlzLT5zcmNfdyA9ICR0aGlzLT5nZXRJbWdXaWR0aCgkdGhpcy0+aF9zcmMpOwogICAgICAgICR0aGlzLT5zcmNfaCA9ICR0aGlzLT5nZXRJbWdIZWlnaHQoJHRoaXMtPmhfc3JjKTsKICAgIH0KCiAgICAvKioKICAgICAqIOiuvue9ruWbvueJh+eUn+aIkOi3r+W+hAogICAgICoKICAgICAqIEBwYXJhbSAgICBzdHJpbmcgICAgJGRzdF9pbWcgICDlm77niYfnlJ/miJDot6/lvoQKICAgICAqLwogICAgZnVuY3Rpb24gc2V0RHN0SW1nKCRkc3RfaW1nKXsKICAgICAgICAkYXJyICA9IGV4cGxvZGUoJy8nLCRkc3RfaW1nKTsKICAgICAgICAkbGFzdCA9IGFycmF5X3BvcCgkYXJyKTsKICAgICAgICAkcGF0aCA9IGltcGxvZGUoJy8nLCRhcnIpOwogICAgICAgICR0aGlzLT5fbWtkaXJzKCRwYXRoKTsKICAgICAgICAkdGhpcy0+ZHN0X2ltZyA9ICRkc3RfaW1nOwogICAgfQoKICAgIC8qKgogICAgICog6K6+572u5Zu+54mH55qE5pi+56S66LSo6YePCiAgICAgKgogICAgICogQHBhcmFtICAgIHN0cmluZyAgICAgICRuICAgIOi0qOmHjwogICAgICovCiAgICBmdW5jdGlvbiBzZXRJbWdEaXNwbGF5UXVhbGl0eSgkbil7CiAgICAgICAgJHRoaXMtPmltZ19kaXNwbGF5X3F1YWxpdHkgPSAoaW50KSRuOwogICAgfQoKICAgIC8qKgogICAgICog6K6+572u5Zu+54mH55qE55Sf5oiQ6LSo6YePCiAgICAgKgogICAgICogQHBhcmFtICAgIHN0cmluZyAgICAgICRuICAgIOi0qOmHjwogICAgICovCiAgICBmdW5jdGlvbiBzZXRJbWdDcmVhdGVRdWFsaXR5KCRuKXsKICAgICAgICAkdGhpcy0+aW1nX2NyZWF0ZV9xdWFsaXR5ID0gKGludCkkbjsKICAgIH0KCiAgICAvKioKICAgICAqIOiuvue9ruaWh+Wtl+awtOWNsAogICAgICoKICAgICAqIEBwYXJhbSAgICBzdHJpbmcgICAgICR3b3JkICAgIOawtOWNsOaWh+WtlwogICAgICogQHBhcmFtICAgIGludGVnZXIgICAgJGZvbnQgICAg5rC05Y2w5a2X5L2TCiAgICAgKiBAcGFyYW0gICAgc3RyaW5nICAgICAkY29sb3IgICDmsLTljbDlrZfkvZPpopzoibIKICAgICAqLwoKICAgIGZ1bmN0aW9uIHNldE1hc2tXb3JkKCR3b3JkKXsKICAgICAgICAkdGhpcy0+bWFza193b3JkIC49ICR3b3JkOwogICAgfQoKICAgIC8qKgogICAgICog6K6+572u5a2X5L2T6aKc6ImyCiAgICAgKgogICAgICogQHBhcmFtICAgIHN0cmluZyAgICAgJGNvbG9yICAgIOWtl+S9k+minOiJsgogICAgICovCiAgICBmdW5jdGlvbiBzZXRNYXNrRm9udENvbG9yKCRjb2xvcj0iI2ZmZmZmZiIpewogICAgICAgICR0aGlzLT5tYXNrX2ZvbnRfY29sb3IgPSAkY29sb3I7CiAgICB9CgogICAgLyoqCiAgICAgKiDorr7nva7msLTljbDlrZfkvZMKICAgICAqCiAgICAgKiBAcGFyYW0gICAgc3RyaW5nfGludGVnZXIgICAgJGZvbnQgICAg5a2X5L2TCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldE1hc2tGb250KCRmb250PTIpewogICAgICAgIGlmKCFpc19udW1lcmljKCRmb250KSAmJiAhZmlsZV9leGlzdHMoJGZvbnQpKXsKICAgICAgICAgICAgZGllKCLlrZfkvZPmlofku7bkuI3lrZjlnKgiKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPmZvbnQgPSAkZm9udDsKICAgIH0KCiAgICAvKioKICAgICAqIOiuvue9ruaWh+Wtl+Wtl+S9k+Wkp+Wwjyzku4Xlr7l0cnVldHlwZeWtl+S9k+acieaViAogICAgICovCiAgICBmdW5jdGlvbiBzZXRNYXNrRm9udFNpemUoJHNpemUgPSAiMTIiKXsKICAgICAgICAkdGhpcy0+Zm9udF9zaXplID0gJHNpemU7CiAgICB9CgogICAgLyoqCiAgICAgKiDorr7nva7lm77niYfmsLTljbAKICAgICAqCiAgICAgKiBAcGFyYW0gICAgc3RyaW5nICAgICRpbWcgICAgIOawtOWNsOWbvueJh+a6kAogICAgICovCiAgICBmdW5jdGlvbiBzZXRNYXNrSW1nKCRpbWcpewogICAgICAgICR0aGlzLT5tYXNrX2ltZyA9ICRpbWc7CiAgICB9CgogICAgLyoqCiAgICAgKiDorr7nva7msLTljbDmqKrlkJHlgY/np7sKICAgICAqCiAgICAgKiBAcGFyYW0gICAgaW50ZWdlciAgICAgJHggICAg5qiq5ZCR5YGP56e76YePCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldE1hc2tPZmZzZXRYKCR4KXsKICAgICAgICAkdGhpcy0+bWFza19vZmZzZXRfeCA9IChpbnQpJHg7CiAgICB9CgogICAgLyoqCiAgICAgKiDorr7nva7msLTljbDnurXlkJHlgY/np7sKICAgICAqCiAgICAgKiBAcGFyYW0gICAgaW50ZWdlciAgICAgJHkgICAg57q15ZCR5YGP56e76YePCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldE1hc2tPZmZzZXRZKCR5KXsKICAgICAgICAkdGhpcy0+bWFza19vZmZzZXRfeSA9IChpbnQpJHk7CiAgICB9CgogICAgLyoqCiAgICAgKiDmjIflrprmsLTljbDkvY3nva4KICAgICAqCiAgICAgKiBAcGFyYW0gICAgaW50ZWdlciAgICAgJHBvc2l0aW9uICAgIOS9jee9riwxOuW3puS4iiwyOuW3puS4iywzOuWPs+S4iiwwLzQ65Y+z5LiLCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldE1hc2tQb3NpdGlvbigkcG9zaXRpb249MCl7CiAgICAgICAgJHRoaXMtPm1hc2tfcG9zaXRpb24gPSAoaW50KSRwb3NpdGlvbjsKICAgIH0KCiAgICAvKioKICAgICAqIOiuvue9ruWbvueJh+WQiOW5tueoi+W6pgogICAgICoKICAgICAqIEBwYXJhbSAgICBpbnRlZ2VyICAgICAkbiAgICDlkIjlubbnqIvluqYKICAgICAqLwogICAgZnVuY3Rpb24gc2V0TWFza0ltZ1BjdCgkbil7CiAgICAgICAgJHRoaXMtPm1hc2tfaW1nX3BjdCA9IChpbnQpJG47CiAgICB9CgogICAgLyoqCiAgICAgKiDorr7nva7mloflrZflkIjlubbnqIvluqYKICAgICAqCiAgICAgKiBAcGFyYW0gICAgaW50ZWdlciAgICAgJG4gICAg5ZCI5bm256iL5bqmCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldE1hc2tUeHRQY3QoJG4pewogICAgICAgICR0aGlzLT5tYXNrX3R4dF9wY3QgPSAoaW50KSRuOwogICAgfQoKICAgIC8qKgogICAgICog6K6+572u57yp55Wl5Zu+6L655qGGCiAgICAgKgogICAgICogQHBhcmFtICAgICjnsbvlnospICAgICAo5Y+C5pWw5ZCNKSAgICAo5o+P6L+wKQogICAgICovCiAgICBmdW5jdGlvbiBzZXREc3RJbWdCb3JkZXIoJHNpemU9MSwgJGNvbG9yPSIjMDAwMDAwIil7CiAgICAgICAgJHRoaXMtPmltZ19ib3JkZXJfc2l6ZSAgPSAoaW50KSRzaXplOwogICAgICAgICR0aGlzLT5pbWdfYm9yZGVyX2NvbG9yID0gJGNvbG9yOwogICAgfQoKICAgIC8qKgogICAgICog5rC05bmz57+76L2sCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZsaXBIKCl7CiAgICAgICAgJHRoaXMtPl9mbGlwX3grKzsKICAgIH0KCiAgICAvKioKICAgICAqIOWeguebtOe/u+i9rAogICAgICovCiAgICBmdW5jdGlvbiBmbGlwVigpewogICAgICAgICR0aGlzLT5fZmxpcF95Kys7CiAgICB9CgogICAgLyoqCiAgICAgKiDorr7nva7liarliIfnsbvlnosKICAgICAqCiAgICAgKiBAcGFyYW0gICAgKOexu+WeiykgICAgICjlj4LmlbDlkI0pICAgICjmj4/ov7ApCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldEN1dFR5cGUoJHR5cGUpewogICAgICAgICR0aGlzLT5jdXRfdHlwZSA9IChpbnQpJHR5cGU7CiAgICB9CgogICAgLyoqCiAgICAgKiDorr7nva7lm77niYfliarliIcKICAgICAqCiAgICAgKiBAcGFyYW0gICAgaW50ZWdlciAgICAgJHdpZHRoICAgIOefqeW9ouWJquWIhwogICAgICovCiAgICBmdW5jdGlvbiBzZXRSZWN0YW5nbGVDdXQoJHdpZHRoLCAkaGVpZ2h0KXsKICAgICAgICAkdGhpcy0+ZmlsbF93ID0gKGludCkkd2lkdGg7CiAgICAgICAgJHRoaXMtPmZpbGxfaCA9IChpbnQpJGhlaWdodDsKICAgIH0KCiAgICAvKioKICAgICAqIOiuvue9rua6kOWbvuWJquWIh+i1t+Wni+WdkOagh+eCuQogICAgICoKICAgICAqIEBwYXJhbSAgICAo57G75Z6LKSAgICAgKOWPguaVsOWQjSkgICAgKOaPj+i/sCkKICAgICAqLwogICAgZnVuY3Rpb24gc2V0U3JjQ3V0UG9zaXRpb24oJHgsICR5KXsKICAgICAgICAkdGhpcy0+c3JjX3ggID0gKGludCkkeDsKICAgICAgICAkdGhpcy0+c3JjX3kgID0gKGludCkkeTsKICAgIH0KCiAgIC8qKgogICAgICog5Yib5bu65Zu+54mHLOS4u+WHveaVsAogICAgICogQHBhcmFtICAgIGludGVnZXIgICAgJGEgICAgIOW9k+e8uuWwkeesrOS6jOS4quWPguaVsOaXtu+8jOatpOWPguaVsOWwhueUqOS9nOeZvuWIhuavlO+8jAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIOWQpuWImeS9nOS4uuWuveW6puWAvAogICAgICogQHBhcmFtICAgIGludGVnZXIgICAgJGIgICAgIOWbvueJh+e8qeaUvuWQjueahOmrmOW6pgogICAgICovCiAgICBmdW5jdGlvbiBjcmVhdGVJbWcoJGEsICRiPW51bGwpewogICAgICAgICRudW0gPSBmdW5jX251bV9hcmdzKCk7CiAgICAgICAgaWYoMSA9PSAkbnVtKXsKICAgICAgICAgICAgJHIgPSAoaW50KSRhOwogICAgICAgICAgICBpZigkciA8IDEpewogICAgICAgICAgICAgICAgZGllKCLlm77niYfnvKnmlL7mr5TkvovkuI3lvpflsI/kuo4xIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmltZ19zY2FsZSA9ICRyOwogICAgICAgICAgICAkdGhpcy0+X3NldE5ld0ltZ1NpemUoJHIpOwogICAgICAgIH0KICAgICAgICBpZigyID09ICRudW0pewogICAgICAgICAgICAkdyA9IChpbnQpJGE7CiAgICAgICAgICAgICRoID0gKGludCkkYjsKICAgICAgICAgICAgaWYoMCA9PSAkdyl7CiAgICAgICAgICAgICAgICBkaWUoIuebruagh+WuveW6puS4jeiDveS4ujAiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZigwID09ICRoKXsKICAgICAgICAgICAgICAgIGRpZSgi55uu5qCH6auY5bqm5LiN6IO95Li6MCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5fc2V0TmV3SW1nU2l6ZSgkdywgJGgpOwogICAgICAgIH0KICAgICAgICBpZigkdGhpcy0+X2ZsaXBfeCUyIT0wKXsKICAgICAgICAgICAgJHRoaXMtPl9mbGlwSCgkdGhpcy0+aF9zcmMpOwogICAgICAgIH0KICAgICAgICBpZigkdGhpcy0+X2ZsaXBfeSUyIT0wKXsKICAgICAgICAgICAgJHRoaXMtPl9mbGlwVigkdGhpcy0+aF9zcmMpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+X2NyZWF0ZU1hc2soKTsKICAgICAgICAkdGhpcy0+X291dHB1dCgpOwogICAgICAgIC8vIOmHiuaUvgogICAgICAgIGlmKGltYWdlZGVzdHJveSgkdGhpcy0+aF9zcmMpICYmIGltYWdlZGVzdHJveSgkdGhpcy0+aF9kc3QpKXsKICAgICAgICAgICAgUmV0dXJuIHRydWU7CiAgICAgICAgfWVsc2V7CiAgICAgICAgICAgIFJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiDnlJ/miJDmsLTljbAs6LCD55So5LqG55Sf5oiQ5rC05Y2w5paH5a2X5ZKM5rC05Y2w5Zu+54mH5Lik5Liq5pa55rOVCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9jcmVhdGVNYXNrKCl7CiAgICAgICAgaWYoJHRoaXMtPm1hc2tfd29yZCl7CiAgICAgICAgICAgIC8vIOiOt+WPluWtl+S9k+S/oeaBrwogICAgICAgICAgICAkdGhpcy0+X3NldEZvbnRJbmZvKCk7CiAgICAgICAgICAgIGlmKCR0aGlzLT5faXNGdWxsKCkpewogICAgICAgICAgICAgICAgZGllKCLmsLTljbDmloflrZfov4flpKciKTsKICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAkdGhpcy0+aF9kc3QgPSBpbWFnZWNyZWF0ZXRydWVjb2xvcigkdGhpcy0+ZHN0X3csICR0aGlzLT5kc3RfaCk7CiAgICAgICAgICAgICAgICAkd2hpdGUgPSBJbWFnZUNvbG9yQWxsb2NhdGUoJHRoaXMtPmhfZHN0LDI1NSwyNTUsMjU1KTsKICAgICAgICAgICAgICAgIGltYWdlZmlsbGVkcmVjdGFuZ2xlKCR0aGlzLT5oX2RzdCwwLDAsJHRoaXMtPmRzdF93LCR0aGlzLT5kc3RfaCwkd2hpdGUpOy8vIOWhq+WFheiDjOaZr+iJsgogICAgICAgICAgICAgICAgJHRoaXMtPl9kcmF3Qm9yZGVyKCk7CiAgICAgICAgICAgICAgICBpbWFnZWNvcHlyZXNhbXBsZWQoICR0aGlzLT5oX2RzdCwgJHRoaXMtPmhfc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c3RhcnRfeCwgJHRoaXMtPnN0YXJ0X3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5zcmNfeCwgJHRoaXMtPnNyY195LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmlsbF93LCAkdGhpcy0+ZmlsbF9oLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y29weV93LCAkdGhpcy0+Y29weV9oKTsKICAgICAgICAgICAgICAgICR0aGlzLT5fY3JlYXRlTWFza1dvcmQoJHRoaXMtPmhfZHN0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZigkdGhpcy0+bWFza19pbWcpewogICAgICAgICAgICAkdGhpcy0+X2xvYWRNYXNrSW1nKCk7Ly/liqDovb3ml7bvvIzlj5blvpflrr3pq5gKICAgICAgICAgICAgaWYoJHRoaXMtPl9pc0Z1bGwoKSl7CiAgICAgICAgICAgICAgICAvLyDlsIbmsLTljbDnlJ/miJDlnKjljp/lm77kuIrlho3mi7cKICAgICAgICAgICAgICAgICR0aGlzLT5fY3JlYXRlTWFza0ltZygkdGhpcy0+aF9zcmMpOwogICAgICAgICAgICAgICAgJHRoaXMtPmhfZHN0ID0gaW1hZ2VjcmVhdGV0cnVlY29sb3IoJHRoaXMtPmRzdF93LCAkdGhpcy0+ZHN0X2gpOwogICAgICAgICAgICAgICAgJHdoaXRlID0gSW1hZ2VDb2xvckFsbG9jYXRlKCR0aGlzLT5oX2RzdCwyNTUsMjU1LDI1NSk7CiAgICAgICAgICAgICAgICBpbWFnZWZpbGxlZHJlY3RhbmdsZSgkdGhpcy0+aF9kc3QsMCwwLCR0aGlzLT5kc3RfdywkdGhpcy0+ZHN0X2gsJHdoaXRlKTsvLyDloavlhYXog4zmma/oibIKICAgICAgICAgICAgICAgICR0aGlzLT5fZHJhd0JvcmRlcigpOwogICAgICAgICAgICAgICAgaW1hZ2Vjb3B5cmVzYW1wbGVkKCAkdGhpcy0+aF9kc3QsICR0aGlzLT5oX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnN0YXJ0X3gsICR0aGlzLT5zdGFydF95LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c3JjX3gsICR0aGlzLT5zcmNfeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZpbGxfdywgJHRoaXMtPnN0YXJ0X3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5jb3B5X3csICR0aGlzLT5jb3B5X2gpOwogICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgIC8vIOWIm+W7uuaWsOWbvuW5tuaLt+i0nQogICAgICAgICAgICAgICAgJHRoaXMtPmhfZHN0ID0gaW1hZ2VjcmVhdGV0cnVlY29sb3IoJHRoaXMtPmRzdF93LCAkdGhpcy0+ZHN0X2gpOwogICAgICAgICAgICAgICAgJHdoaXRlID0gSW1hZ2VDb2xvckFsbG9jYXRlKCR0aGlzLT5oX2RzdCwyNTUsMjU1LDI1NSk7CiAgICAgICAgICAgICAgICBpbWFnZWZpbGxlZHJlY3RhbmdsZSgkdGhpcy0+aF9kc3QsMCwwLCR0aGlzLT5kc3RfdywkdGhpcy0+ZHN0X2gsJHdoaXRlKTsvLyDloavlhYXog4zmma/oibIKICAgICAgICAgICAgICAgICR0aGlzLT5fZHJhd0JvcmRlcigpOwogICAgICAgICAgICAgICAgaW1hZ2Vjb3B5cmVzYW1wbGVkKCAkdGhpcy0+aF9kc3QsICR0aGlzLT5oX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnN0YXJ0X3gsICR0aGlzLT5zdGFydF95LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c3JjX3gsICR0aGlzLT5zcmNfeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZpbGxfdywgJHRoaXMtPmZpbGxfaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNvcHlfdywgJHRoaXMtPmNvcHlfaCk7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2NyZWF0ZU1hc2tJbWcoJHRoaXMtPmhfZHN0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZihlbXB0eSgkdGhpcy0+bWFza193b3JkKSAmJiBlbXB0eSgkdGhpcy0+bWFza19pbWcpKXsKICAgICAgICAgICAgJHRoaXMtPmhfZHN0ID0gaW1hZ2VjcmVhdGV0cnVlY29sb3IoJHRoaXMtPmRzdF93LCAkdGhpcy0+ZHN0X2gpOwogICAgICAgICAgICAkd2hpdGUgPSBJbWFnZUNvbG9yQWxsb2NhdGUoJHRoaXMtPmhfZHN0LDI1NSwyNTUsMjU1KTsKICAgICAgICAgICAgaW1hZ2VmaWxsZWRyZWN0YW5nbGUoJHRoaXMtPmhfZHN0LDAsMCwkdGhpcy0+ZHN0X3csJHRoaXMtPmRzdF9oLCR3aGl0ZSk7Ly8g5aGr5YWF6IOM5pmv6ImyCiAgICAgICAgICAgICR0aGlzLT5fZHJhd0JvcmRlcigpOwogICAgICAgICAgICBpbWFnZWNvcHlyZXNhbXBsZWQoICR0aGlzLT5oX2RzdCwgJHRoaXMtPmhfc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c3RhcnRfeCwgJHRoaXMtPnN0YXJ0X3ksCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5zcmNfeCwgJHRoaXMtPnNyY195LAogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmlsbF93LCAkdGhpcy0+ZmlsbF9oLAogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y29weV93LCAkdGhpcy0+Y29weV9oKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiDnlLvovrnmoYYKICAgICAqLwogICAgZnVuY3Rpb24gX2RyYXdCb3JkZXIoKXsKICAgICAgICBpZighZW1wdHkoJHRoaXMtPmltZ19ib3JkZXJfc2l6ZSkpewogICAgICAgICAgICAkYyA9ICR0aGlzLT5fcGFyc2VDb2xvcigkdGhpcy0+aW1nX2JvcmRlcl9jb2xvcik7CiAgICAgICAgICAgICRjb2xvciA9IEltYWdlQ29sb3JBbGxvY2F0ZSgkdGhpcy0+aF9zcmMsJGNbMF0sICRjWzFdLCAkY1syXSk7CiAgICAgICAgICAgIGltYWdlZmlsbGVkcmVjdGFuZ2xlKCR0aGlzLT5oX2RzdCwwLDAsJHRoaXMtPmRzdF93LCR0aGlzLT5kc3RfaCwkY29sb3IpOy8vIOWhq+WFheiDjOaZr+iJsgogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIOeUn+aIkOawtOWNsOaWh+WtlwogICAgICovCiAgICBmdW5jdGlvbiBfY3JlYXRlTWFza1dvcmQoJHNyYyl7CiAgICAgICAgJHRoaXMtPl9jb3VudE1hc2tQb3MoKTsKICAgICAgICAkdGhpcy0+X2NoZWNrTWFza1ZhbGlkKCk7CiAgICAgICAgJGMgPSAkdGhpcy0+X3BhcnNlQ29sb3IoJHRoaXMtPm1hc2tfZm9udF9jb2xvcik7CiAgICAgICAgJGNvbG9yID0gaW1hZ2Vjb2xvcmFsbG9jYXRlYWxwaGEoJHNyYywgJGNbMF0sICRjWzFdLCAkY1syXSwgJHRoaXMtPm1hc2tfdHh0X3BjdCk7CiAgICAgICAgaWYoaXNfbnVtZXJpYygkdGhpcy0+Zm9udCkpewogICAgICAgICAgICBpbWFnZXN0cmluZygkc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Zm9udCwKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1hc2tfcG9zX3gsICR0aGlzLT5tYXNrX3Bvc195LAogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bWFza193b3JkLAogICAgICAgICAgICAgICAgICAgICAgICAkY29sb3IpOwogICAgICAgIH1lbHNlewogICAgICAgICAgICBpbWFnZXR0ZnRleHQoJHNyYywKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZvbnRfc2l6ZSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1hc2tfcG9zX3gsICR0aGlzLT5tYXNrX3Bvc195LAogICAgICAgICAgICAgICAgICAgICAgICAkY29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5mb250LAogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bWFza193b3JkKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiDnlJ/miJDmsLTljbDlm74KICAgICAqLwogICAgZnVuY3Rpb24gX2NyZWF0ZU1hc2tJbWcoJHNyYyl7CiAgICAgICAgJHRoaXMtPl9jb3VudE1hc2tQb3MoKTsKICAgICAgICAkdGhpcy0+X2NoZWNrTWFza1ZhbGlkKCk7CiAgICAgICAgaW1hZ2Vjb3B5bWVyZ2UoJHNyYywKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmhfbWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1hc2tfcG9zX3ggLCR0aGlzLT5tYXNrX3Bvc195LAogICAgICAgICAgICAgICAgICAgICAgICAwLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bWFza193LCAkdGhpcy0+bWFza19oLAogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bWFza19pbWdfcGN0KTsKICAgICAgICBpbWFnZWRlc3Ryb3koJHRoaXMtPmhfbWFzayk7CiAgICB9CgogICAgLyoqCiAgICAgKiDliqDovb3msLTljbDlm74KICAgICAqLwogICAgZnVuY3Rpb24gX2xvYWRNYXNrSW1nKCl7CiAgICAgICAgJG1hc2tfdHlwZSA9ICR0aGlzLT5fZ2V0SW1nVHlwZSgkdGhpcy0+bWFza19pbWcpOwogICAgICAgICR0aGlzLT5fY2hlY2tWYWxpZCgkbWFza190eXBlKTsKICAgICAgICAvLyBmaWxlX2dldF9jb250ZW50c+WHveaVsOimgeaxgnBocOeJiOacrD40LjMuMAogICAgICAgICRzcmMgPSAnJzsKICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoImZpbGVfZ2V0X2NvbnRlbnRzIikpewogICAgICAgICAgICAkc3JjID0gZmlsZV9nZXRfY29udGVudHMoJHRoaXMtPm1hc2tfaW1nKTsKICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgJGhhbmRsZSA9IGZvcGVuICgkdGhpcy0+bWFza19pbWcsICJyIik7CiAgICAgICAgICAgIHdoaWxlICghZmVvZiAoJGhhbmRsZSkpewogICAgICAgICAgICAgICAkc3JjIC49IGZnZXRzKCRoYW5kbGUsIDQwOTYpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZjbG9zZSAoJGhhbmRsZSk7CiAgICAgICAgfQogICAgICAgIGlmKGVtcHR5KCR0aGlzLT5tYXNrX2ltZykpewogICAgICAgICAgICBkaWUoIuawtOWNsOWbvueJh+S4uuepuiIpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+aF9tYXNrID0gSW1hZ2VDcmVhdGVGcm9tU3RyaW5nKCRzcmMpOwogICAgICAgICR0aGlzLT5tYXNrX3cgPSAkdGhpcy0+Z2V0SW1nV2lkdGgoJHRoaXMtPmhfbWFzayk7CiAgICAgICAgJHRoaXMtPm1hc2tfaCA9ICR0aGlzLT5nZXRJbWdIZWlnaHQoJHRoaXMtPmhfbWFzayk7CiAgICB9CgoJCgogICAgLyoqCiAgICAgKiDlm77niYfovpPlh7oKICAgICAqLwogICAgZnVuY3Rpb24gX291dHB1dCgpewogICAgICAgICRpbWdfdHlwZSAgPSAkdGhpcy0+aW1nX3R5cGU7CiAgICAgICAgJGZ1bmNfbmFtZSA9ICR0aGlzLT5hbGxfdHlwZVskaW1nX3R5cGVdWydvdXRwdXQnXTsKICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJGZ1bmNfbmFtZSkpewogICAgICAgICAgICAvLyDliKTmlq3mtY/op4jlmags6Iul5pivSUXlsLHkuI3lj5HpgIHlpLQKCQkJaWYoaXNzZXQoJHRoaXMtPmRzdF9pbWcpKXsKCQkJCS8vaWYoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSl7CgkJCQkvLwkkdWEgPSBzdHJ0b3VwcGVyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSk7CgkJCQkvLwlpZighcHJlZ19tYXRjaCgnL14uKk1TSUUuKiQvaScsJHVhKSl7CgkJCQkJCS8vaGVhZGVyKCJDb250ZW50LXR5cGVpbWdfdHlwZSIpOwoJCQkJCQloZWFkZXIoJ0NvbnRlbnQtdHlwZTogJy4kdGhpcy0+YWxsX3R5cGVbJGltZ190eXBlXVsndHlwZSddKTsKCQkJCS8vCX0KCQkJCS8vfQoJCQl9CgkJCWlmKCRmdW5jX25hbWU9PSJpbWFnZXBuZyIpewoJCQkJJGZ1bmNfbmFtZSgkdGhpcy0+aF9kc3QsICR0aGlzLT5kc3RfaW1nKTsKCQkJfWVsc2V7CgkJCQkkZnVuY19uYW1lKCR0aGlzLT5oX2RzdCwgJHRoaXMtPmRzdF9pbWcsICR0aGlzLT5pbWdfZGlzcGxheV9xdWFsaXR5KTsKCQkJfQogICAgICAgIH1lbHNlewogICAgICAgICAgICBSZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICog5YiG5p6Q6aKc6ImyCiAgICAgKgogICAgICogQHBhcmFtICAgIHN0cmluZyAgICAgJGNvbG9yICAgIOWNgeWFrei/m+WItuminOiJsgogICAgICovCiAgICBmdW5jdGlvbiBfcGFyc2VDb2xvcigkY29sb3IpewogICAgICAgICRhcnIgPSBhcnJheSgpOwogICAgICAgIGZvcigkaWk9MTsgJGlpPHN0cmxlbigkY29sb3IpOyAkaWkrKyl7CiAgICAgICAgICAgICRhcnJbXSA9IGhleGRlYyhzdWJzdHIoJGNvbG9yLCRpaSwyKSk7CiAgICAgICAgICAgICRpaSsrOwogICAgICAgIH0KICAgICAgICBSZXR1cm4gJGFycjsKICAgIH0KCiAgICAvKioKICAgICAqIOiuoeeul+WHuuS9jee9ruWdkOaghwogICAgICovCiAgICBmdW5jdGlvbiBfY291bnRNYXNrUG9zKCl7CiAgICAgICAgaWYoJHRoaXMtPl9pc0Z1bGwoKSl7CiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+bWFza19wb3NpdGlvbil7CiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgLy8g5bem5LiKCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1hc2tfcG9zX3ggPSAkdGhpcy0+bWFza19vZmZzZXRfeCArICR0aGlzLT5pbWdfYm9yZGVyX3NpemU7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1hc2tfcG9zX3kgPSAkdGhpcy0+bWFza19vZmZzZXRfeSArICR0aGlzLT5pbWdfYm9yZGVyX3NpemU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgLy8g5bem5LiLCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1hc2tfcG9zX3ggPSAkdGhpcy0+bWFza19vZmZzZXRfeCArICR0aGlzLT5pbWdfYm9yZGVyX3NpemU7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1hc2tfcG9zX3kgPSAkdGhpcy0+c3JjX2ggLSAkdGhpcy0+bWFza19oIC0gJHRoaXMtPm1hc2tfb2Zmc2V0X3k7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgLy8g5Y+z5LiKCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1hc2tfcG9zX3ggPSAkdGhpcy0+c3JjX3cgLSAkdGhpcy0+bWFza193IC0gJHRoaXMtPm1hc2tfb2Zmc2V0X3g7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1hc2tfcG9zX3kgPSAkdGhpcy0+bWFza19vZmZzZXRfeSArICR0aGlzLT5pbWdfYm9yZGVyX3NpemU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgLy8g5Y+z5LiLCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1hc2tfcG9zX3ggPSAkdGhpcy0+c3JjX3cgLSAkdGhpcy0+bWFza193IC0gJHRoaXMtPm1hc2tfb2Zmc2V0X3g7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1hc2tfcG9zX3kgPSAkdGhpcy0+c3JjX2ggLSAkdGhpcy0+bWFza19oIC0gJHRoaXMtPm1hc2tfb2Zmc2V0X3k7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIC8vIOm7mOiupOWwhuawtOWNsOaUvuWIsOWPs+S4iyzlgY/np7vmjIflrprlg4/ntKAKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bWFza19wb3NfeCA9ICR0aGlzLT5zcmNfdyAtICR0aGlzLT5tYXNrX3cgLSAkdGhpcy0+bWFza19vZmZzZXRfeDsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bWFza19wb3NfeSA9ICR0aGlzLT5zcmNfaCAtICR0aGlzLT5tYXNrX2ggLSAkdGhpcy0+bWFza19vZmZzZXRfeTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH1lbHNlewogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPm1hc2tfcG9zaXRpb24pewogICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgIC8vIOW3puS4igogICAgICAgICAgICAgICAgICAgICR0aGlzLT5tYXNrX3Bvc194ID0gJHRoaXMtPm1hc2tfb2Zmc2V0X3ggKyAkdGhpcy0+aW1nX2JvcmRlcl9zaXplOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5tYXNrX3Bvc195ID0gJHRoaXMtPm1hc2tfb2Zmc2V0X3kgKyAkdGhpcy0+aW1nX2JvcmRlcl9zaXplOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgIC8vIOW3puS4iwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5tYXNrX3Bvc194ID0gJHRoaXMtPm1hc2tfb2Zmc2V0X3ggKyAkdGhpcy0+aW1nX2JvcmRlcl9zaXplOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5tYXNrX3Bvc195ID0gJHRoaXMtPmRzdF9oIC0gJHRoaXMtPm1hc2tfaCAtICR0aGlzLT5tYXNrX29mZnNldF95IC0gJHRoaXMtPmltZ19ib3JkZXJfc2l6ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICAvLyDlj7PkuIoKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bWFza19wb3NfeCA9ICR0aGlzLT5kc3RfdyAtICR0aGlzLT5tYXNrX3cgLSAkdGhpcy0+bWFza19vZmZzZXRfeCAtICR0aGlzLT5pbWdfYm9yZGVyX3NpemU7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1hc2tfcG9zX3kgPSAkdGhpcy0+bWFza19vZmZzZXRfeSArICR0aGlzLT5pbWdfYm9yZGVyX3NpemU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgLy8g5Y+z5LiLCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1hc2tfcG9zX3ggPSAkdGhpcy0+ZHN0X3cgLSAkdGhpcy0+bWFza193IC0gJHRoaXMtPm1hc2tfb2Zmc2V0X3ggLSAkdGhpcy0+aW1nX2JvcmRlcl9zaXplOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5tYXNrX3Bvc195ID0gJHRoaXMtPmRzdF9oIC0gJHRoaXMtPm1hc2tfaCAtICR0aGlzLT5tYXNrX29mZnNldF95IC0gJHRoaXMtPmltZ19ib3JkZXJfc2l6ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgLy8g6buY6K6k5bCG5rC05Y2w5pS+5Yiw5Y+z5LiLLOWBj+enu+aMh+WumuWDj+e0oAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5tYXNrX3Bvc194ID0gJHRoaXMtPmRzdF93IC0gJHRoaXMtPm1hc2tfdyAtICR0aGlzLT5tYXNrX29mZnNldF94IC0gJHRoaXMtPmltZ19ib3JkZXJfc2l6ZTsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bWFza19wb3NfeSA9ICR0aGlzLT5kc3RfaCAtICR0aGlzLT5tYXNrX2ggLSAkdGhpcy0+bWFza19vZmZzZXRfeSAtICR0aGlzLT5pbWdfYm9yZGVyX3NpemU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiDorr7nva7lrZfkvZPkv6Hmga8KICAgICAqLwogICAgZnVuY3Rpb24gX3NldEZvbnRJbmZvKCl7CiAgICAgICAgaWYoaXNfbnVtZXJpYygkdGhpcy0+Zm9udCkpewogICAgICAgICAgICAkdGhpcy0+Zm9udF93ICA9IGltYWdlZm9udHdpZHRoKCR0aGlzLT5mb250KTsKICAgICAgICAgICAgJHRoaXMtPmZvbnRfaCAgPSBpbWFnZWZvbnRoZWlnaHQoJHRoaXMtPmZvbnQpOwogICAgICAgICAgICAvLyDorqHnrpfmsLTljbDlrZfkvZPmiYDljaDlrr3pq5gKICAgICAgICAgICAgJHdvcmRfbGVuZ3RoICAgPSBzdHJsZW4oJHRoaXMtPm1hc2tfd29yZCk7CiAgICAgICAgICAgICR0aGlzLT5tYXNrX3cgID0gJHRoaXMtPmZvbnRfdyokd29yZF9sZW5ndGg7CiAgICAgICAgICAgICR0aGlzLT5tYXNrX2ggID0gJHRoaXMtPmZvbnRfaDsKICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgJGFyciA9IGltYWdldHRmYmJveCAoJHRoaXMtPmZvbnRfc2l6ZSwwLCAkdGhpcy0+Zm9udCwkdGhpcy0+bWFza193b3JkKTsKICAgICAgICAgICAgJHRoaXMtPm1hc2tfdyAgPSBhYnMoJGFyclswXSAtICRhcnJbMl0pOwogICAgICAgICAgICAkdGhpcy0+bWFza19oICA9IGFicygkYXJyWzddIC0gJGFyclsxXSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICog6K6+572u5paw5Zu+5bC65a+4CiAgICAgKgogICAgICogQHBhcmFtICAgIGludGVnZXIgICAgICRpbWdfdyAgIOebruagh+WuveW6pgogICAgICogQHBhcmFtICAgIGludGVnZXIgICAgICRpbWdfaCAgIOebruagh+mrmOW6pgogICAgICovCiAgICBmdW5jdGlvbiBfc2V0TmV3SW1nU2l6ZSgkaW1nX3csICRpbWdfaD1udWxsKXsKICAgICAgICAkbnVtID0gZnVuY19udW1fYXJncygpOwogICAgICAgIGlmKDEgPT0gJG51bSl7CiAgICAgICAgICAgICR0aGlzLT5pbWdfc2NhbGUgPSAkaW1nX3c7Ly8g5a695bqm5L2c5Li65q+U5L6LCiAgICAgICAgICAgICR0aGlzLT5maWxsX3cgPSByb3VuZCgkdGhpcy0+c3JjX3cgKiAkdGhpcy0+aW1nX3NjYWxlIC8gMTAwKSAtICR0aGlzLT5pbWdfYm9yZGVyX3NpemUqMjsKICAgICAgICAgICAgJHRoaXMtPmZpbGxfaCA9IHJvdW5kKCR0aGlzLT5zcmNfaCAqICR0aGlzLT5pbWdfc2NhbGUgLyAxMDApIC0gJHRoaXMtPmltZ19ib3JkZXJfc2l6ZSoyOwogICAgICAgICAgICAvLyDmupDmlofku7botbflp4vlnZDmoIcKICAgICAgICAgICAgJHRoaXMtPnNyY194ICA9IDA7CiAgICAgICAgICAgICR0aGlzLT5zcmNfeSAgPSAwOwogICAgICAgICAgICAkdGhpcy0+Y29weV93ID0gJHRoaXMtPnNyY193OwogICAgICAgICAgICAkdGhpcy0+Y29weV9oID0gJHRoaXMtPnNyY19oOwogICAgICAgICAgICAvLyDnm67moIflsLrlr7gKICAgICAgICAgICAgJHRoaXMtPmRzdF93ICAgPSAkdGhpcy0+ZmlsbF93ICsgJHRoaXMtPmltZ19ib3JkZXJfc2l6ZSoyOwogICAgICAgICAgICAkdGhpcy0+ZHN0X2ggICA9ICR0aGlzLT5maWxsX2ggKyAkdGhpcy0+aW1nX2JvcmRlcl9zaXplKjI7CiAgICAgICAgfQogICAgICAgIGlmKDIgPT0gJG51bSl7CiAgICAgICAgICAgICRmaWxsX3cgICA9IChpbnQpJGltZ193IC0gJHRoaXMtPmltZ19ib3JkZXJfc2l6ZSoyOwogICAgICAgICAgICAkZmlsbF9oICAgPSAoaW50KSRpbWdfaCAtICR0aGlzLT5pbWdfYm9yZGVyX3NpemUqMjsKICAgICAgICAgICAgaWYoJGZpbGxfdyA8IDAgfHwgJGZpbGxfaCA8IDApewogICAgICAgICAgICAgICAgZGllKCLlm77niYfovrnmoYbov4flpKfvvIzlt7LotoXov4fkuoblm77niYfnmoTlrr3luqYiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmF0ZV93ID0gJHRoaXMtPnNyY193LyRmaWxsX3c7CiAgICAgICAgICAgICRyYXRlX2ggPSAkdGhpcy0+c3JjX2gvJGZpbGxfaDsKICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT5jdXRfdHlwZSl7CiAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgLy8g5aaC5p6c5Y6f5Zu+5aSn5LqO57yp55Wl5Zu+77yM5Lqn55Sf57yp5bCP77yM5ZCm5YiZ5LiN57yp5bCPCiAgICAgICAgICAgICAgICAgICAgaWYoJHJhdGVfdyA8IDEgJiYgJHJhdGVfaCA8IDEpewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmlsbF93ID0gKGludCkkdGhpcy0+c3JjX3c7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5maWxsX2ggPSAoaW50KSR0aGlzLT5zcmNfaDsKICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHJhdGVfdyA+PSAkcmF0ZV9oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5maWxsX3cgPSAoaW50KSRmaWxsX3c7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmlsbF9oID0gcm91bmQoJHRoaXMtPnNyY19oLyRyYXRlX3cpOwogICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5maWxsX3cgPSByb3VuZCgkdGhpcy0+c3JjX3cvJHJhdGVfaCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmlsbF9oID0gKGludCkkZmlsbF9oOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5zcmNfeCAgPSAwOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5zcmNfeSAgPSAwOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5jb3B5X3cgPSAkdGhpcy0+c3JjX3c7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNvcHlfaCA9ICR0aGlzLT5zcmNfaDsKICAgICAgICAgICAgICAgICAgICAvLyDnm67moIflsLrlr7gKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZHN0X3cgICA9ICR0aGlzLT5maWxsX3cgKyAkdGhpcy0+aW1nX2JvcmRlcl9zaXplKjI7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRzdF9oICAgPSAkdGhpcy0+ZmlsbF9oICsgJHRoaXMtPmltZ19ib3JkZXJfc2l6ZSoyOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgLy8g6Ieq5Yqo6KOB5YiHCiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgLy8g5aaC5p6c5Zu+54mH5piv57yp5bCP5Ymq5YiH5omN6L+b6KGM5pON5L2cCiAgICAgICAgICAgICAgICAgICAgaWYoJHJhdGVfdyA+PSAxICYmICRyYXRlX2ggPj0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHRoaXMtPnNyY193ID4gJHRoaXMtPnNyY19oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzcmNfeCA9IHJvdW5kKCR0aGlzLT5zcmNfdy0kdGhpcy0+c3JjX2gpLzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c2V0U3JjQ3V0UG9zaXRpb24oJHNyY194LCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5zZXRSZWN0YW5nbGVDdXQoJGZpbGxfaCwgJGZpbGxfaCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y29weV93ID0gJHRoaXMtPnNyY19oOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNvcHlfaCA9ICR0aGlzLT5zcmNfaDsKICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2VpZigkdGhpcy0+c3JjX3cgPCAkdGhpcy0+c3JjX2gpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNyY195ID0gcm91bmQoJHRoaXMtPnNyY19oLSR0aGlzLT5zcmNfdykvMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5zZXRTcmNDdXRQb3NpdGlvbigwLCAkc3JjX3kpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnNldFJlY3RhbmdsZUN1dCgkZmlsbF93LCAkZmlsbF9oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5jb3B5X3cgPSAkdGhpcy0+c3JjX3c7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y29weV9oID0gJHRoaXMtPnNyY193OwogICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5zZXRTcmNDdXRQb3NpdGlvbigwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5jb3B5X3cgPSAkdGhpcy0+c3JjX3c7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y29weV9oID0gJHRoaXMtPnNyY193OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnNldFJlY3RhbmdsZUN1dCgkZmlsbF93LCAkZmlsbF9oKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c2V0U3JjQ3V0UG9zaXRpb24oMCwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5zZXRSZWN0YW5nbGVDdXQoJHRoaXMtPnNyY193LCAkdGhpcy0+c3JjX2gpOwogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y29weV93ID0gJHRoaXMtPnNyY193OwogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y29weV9oID0gJHRoaXMtPnNyY19oOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvLyDnm67moIflsLrlr7gKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZHN0X3cgICA9ICR0aGlzLT5maWxsX3cgKyAkdGhpcy0+aW1nX2JvcmRlcl9zaXplKjI7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRzdF9oICAgPSAkdGhpcy0+ZmlsbF9oICsgJHRoaXMtPmltZ19ib3JkZXJfc2l6ZSoyOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgLy8g5omL5bel6KOB5YiHCiAgICAgICAgICAgICAgICBjYXNlIDI6CgkJCQkJJHRoaXMtPnNldFJlY3RhbmdsZUN1dCgkaW1nX3csICRpbWdfaCk7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNvcHlfdyA9ICR0aGlzLT5zcmNfdzsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y29weV9oID0gJHRoaXMtPnNyY19oOwoJCQkJCWlmKCR0aGlzLT5jb3B5X3c+JGltZ193KXsKCQkJCQkJJHRoaXMtPmNvcHlfdz0kaW1nX3c7CgkJCQkJfQoJCQkJCWlmKCR0aGlzLT5jb3B5X2g+JGltZ19oKXsKCQkJCQkJJHRoaXMtPmNvcHlfaD0kaW1nX2g7CgkJCQkJfQogICAgICAgICAgICAgICAgICAgIC8vIOebruagh+WwuuWvuAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5kc3RfdyAgID0gJHRoaXMtPmZpbGxfdyArICR0aGlzLT5pbWdfYm9yZGVyX3NpemUqMjsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZHN0X2ggICA9ICR0aGlzLT5maWxsX2ggKyAkdGhpcy0+aW1nX2JvcmRlcl9zaXplKjI7ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBicmVhazsKCQkJCWNhc2UgMzoKCQkJCQkvLyDlpoLmnpzljp/lm77lpKfkuo7nvKnnlaXlm77vvIzkuqfnlJ/nvKnlsI/vvIzlkKbliJnkuI3nvKnlsI8KCQkJCQkkcmF0ZV93ID0gJGltZ193LyR0aGlzLT5zcmNfdzsKCQkJCQkkcmF0ZV9oID0gJGltZ19oLyR0aGlzLT5zcmNfaDsKICAgICAgICAgICAgICAgICAgICBpZigkcmF0ZV93IDwgMSAmJiAkcmF0ZV9oIDwgMSl7CgkJCQkJCWlmKCRyYXRlX3c+JHJhdGVfaCl7CgkJCQkJCQkkdGhpcy0+X3NldE5ld0ltZ1NpemUoJHJhdGVfdyoxMDApOwoJCQkJCQl9ZWxzZXsKCQkJCQkJCSR0aGlzLT5fc2V0TmV3SW1nU2l6ZSgkcmF0ZV9oKjEwMCk7CgkJCQkJCX0KCQkJCQl9ZWxzZXsKCQkJCQkJJHRoaXMtPl9zZXROZXdJbWdTaXplKDEwMCk7CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJY2FzZSA1OgoJCQkJCSR0aGlzLT5jb3B5X3cgPSAkdGhpcy0+c3JjX3c7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNvcHlfaCA9ICR0aGlzLT5zcmNfaDsKCQkJCQkkdGhpcy0+ZmlsbF93PSRpbWdfdzsKCQkJCQkkdGhpcy0+ZmlsbF9oPSRpbWdfaDsJCiAgICAgICAgICAgICAgICAgICAgLy8g55uu5qCH5bC65a+4CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRzdF93ICAgPSAkdGhpcy0+ZmlsbF93ICsgJHRoaXMtPmltZ19ib3JkZXJfc2l6ZSoyOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5kc3RfaCAgID0gJHRoaXMtPmZpbGxfaCArICR0aGlzLT5pbWdfYm9yZGVyX3NpemUqMjsgICAgICAgICAgICAgIAoJCQkJCWJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyDnm67moIfmlofku7botbflp4vlnZDmoIcKICAgICAgICAkdGhpcy0+c3RhcnRfeCA9ICR0aGlzLT5pbWdfYm9yZGVyX3NpemU7CiAgICAgICAgJHRoaXMtPnN0YXJ0X3kgPSAkdGhpcy0+aW1nX2JvcmRlcl9zaXplOwogICAgfQogICAgLyoqCiAgICAgKiDmo4Dmn6XmsLTljbDlm77mmK/lkKblpKfkuo7nlJ/miJDlkI7nmoTlm77niYflrr3pq5gKICAgICAqLwogICAgZnVuY3Rpb24gX2lzRnVsbCgpewogICAgICAgIFJldHVybiAoICAgJHRoaXMtPm1hc2tfdyArICR0aGlzLT5tYXNrX29mZnNldF94ID4gJHRoaXMtPmZpbGxfdwogICAgICAgICAgICAgICAgfHwgJHRoaXMtPm1hc2tfaCArICR0aGlzLT5tYXNrX29mZnNldF95ID4gJHRoaXMtPmZpbGxfaCkKICAgICAgICAgICAgICAgICAgID90cnVlOmZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICog5qOA5p+l5rC05Y2w5Zu+5piv5ZCm6LaF6L+H5Y6f5Zu+CiAgICAgKi8KICAgIGZ1bmN0aW9uIF9jaGVja01hc2tWYWxpZCgpewogICAgICAgIGlmKCAgICAkdGhpcy0+bWFza193ICsgJHRoaXMtPm1hc2tfb2Zmc2V0X3ggPiAkdGhpcy0+c3JjX3cKICAgICAgICAgICAgfHwgJHRoaXMtPm1hc2tfaCArICR0aGlzLT5tYXNrX29mZnNldF95ID4gJHRoaXMtPnNyY19oKXsKICAgICAgICAgICAgZGllKCLmsLTljbDlm77niYflsLrlr7jlpKfkuo7ljp/lm77vvIzor7fnvKnlsI/msLTljbDlm74iKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiDlj5blvpflm77niYfnsbvlnosKICAgICAqCiAgICAgKiBAcGFyYW0gICAgc3RyaW5nICAgICAkZmlsZV9wYXRoICAgIOaWh+S7tui3r+W+hAogICAgICovCiAgICBmdW5jdGlvbiBfZ2V0SW1nVHlwZSgkZmlsZV9wYXRoKXsKICAgICAgICAkdHlwZV9saXN0ID0gYXJyYXkoIjEiPT4iZ2lmIiwiMiI9PiJqcGciLCIzIj0+InBuZyIsIjQiPT4ic3dmIiwiNSIgPT4gInBzZCIsIjYiPT4iYm1wIiwiMTUiPT4id2JtcCIpOwogICAgICAgIGlmKGZpbGVfZXhpc3RzKCRmaWxlX3BhdGgpKXsKICAgICAgICAgICAgJGltZ19pbmZvID0gQGdldGltYWdlc2l6ZSAoJGZpbGVfcGF0aCk7CiAgICAgICAgICAgIGlmKGlzc2V0KCR0eXBlX2xpc3RbJGltZ19pbmZvWzJdXSkpewogICAgICAgICAgICAgICAgUmV0dXJuICR0eXBlX2xpc3RbJGltZ19pbmZvWzJdXTsKICAgICAgICAgICAgfQogICAgICAgIH1lbHNlewogICAgICAgICAgICBkaWUoIuaWh+S7tuS4jeWtmOWcqCzkuI3og73lj5blvpfmlofku7bnsbvlnoshIik7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICog5qOA5p+l5Zu+54mH57G75Z6L5piv5ZCm5ZCI5rOVLOiwg+eUqOS6hmFycmF5X2tleV9leGlzdHPlh73mlbDvvIzmraTlh73mlbDopoHmsYIKICAgICAqIHBocOeJiOacrOWkp+S6jjQuMS4wCiAgICAgKgogICAgICogQHBhcmFtICAgIHN0cmluZyAgICAgJGltZ190eXBlICAgIOaWh+S7tuexu+WeiwogICAgICovCiAgICBmdW5jdGlvbiBfY2hlY2tWYWxpZCgkaW1nX3R5cGUpewogICAgICAgIGlmKCFhcnJheV9rZXlfZXhpc3RzKCRpbWdfdHlwZSwgJHRoaXMtPmFsbF90eXBlKSl7CiAgICAgICAgICAgIFJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiDmjInmjIflrprot6/lvoTnlJ/miJDnm67lvZUKICAgICAqCiAgICAgKiBAcGFyYW0gICAgc3RyaW5nICAgICAkcGF0aCAgICDot6/lvoQKICAgICAqLwogICAgZnVuY3Rpb24gX21rZGlycygkcGF0aCl7CgkJZ2xvYmFsICRibG9ncGF0aDsKCQkkcGF0aD1zdHJfcmVwbGFjZShaQlBfUEFUSCwiIiwkcGF0aCk7CgkJLy9lY2hvICRwYXRoO2RpZSgpOwogICAgICAgICRhZGlyID0gZXhwbG9kZSgnLycsJHBhdGgpOwogICAgICAgICRkaXJsaXN0ID0gJyc7CiAgICAgICAKICAgICAgICBmb3JlYWNoKCRhZGlyIGFzICRrZXk9PiR2YWwpewogICAgICAgICAgICBpZigkdmFsIT0nLicmJiR2YWwhPScuLicpewogICAgICAgICAgICAgICAgJGRpcmxpc3QgLj0gIi8iLiR2YWw7CiAgICAgICAgICAgICAgICAkZGlycGF0aCA9IFpCUF9QQVRILiRkaXJsaXN0OwoJCQkJaWYoZG1fdG9vbHNfdGh1bWI6OnN0YXJ0V2l0aCgkZGlycGF0aCwkYmxvZ3BhdGgpPT10cnVlKXsKCQkJCQlpZighZmlsZV9leGlzdHMoJGRpcnBhdGgpKXsKCQkJCQkJQG1rZGlyKCRkaXJwYXRoKTsKCQkJCQkJQGNobW9kKCRkaXJwYXRoLDA3NzcpOwoJCQkJCX0KCQkJCX0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBfbWtkaXJzT2xkKCRwYXRoKXsKCQlnbG9iYWwgJGJsb2dwYXRoOwogICAgICAgICRhZGlyID0gZXhwbG9kZSgnLycsJHBhdGgpOwogICAgICAgICRkaXJsaXN0ID0gJyc7CiAgICAgICAgJHJvb3RkaXIgPSBhcnJheV9zaGlmdCgkYWRpcik7CiAgICAgICAgaWYoKCRyb290ZGlyIT0nLid8fCRyb290ZGlyIT0nLi4nKSYmIWZpbGVfZXhpc3RzKCRyb290ZGlyKSl7CiAgICAgICAgICAgIEBta2Rpcigkcm9vdGRpcik7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2goJGFkaXIgYXMgJGtleT0+JHZhbCl7CiAgICAgICAgICAgIGlmKCR2YWwhPScuJyYmJHZhbCE9Jy4uJyl7CiAgICAgICAgICAgICAgICAkZGlybGlzdCAuPSAiLyIuJHZhbDsKICAgICAgICAgICAgICAgICRkaXJwYXRoID0gJHJvb3RkaXIuJGRpcmxpc3Q7CgkJCQlpZihkbV90b29sc190aHVtYjo6c3RhcnRXaXRoKCRkaXJwYXRoLCRibG9ncGF0aCk9PXRydWUpewoJCQkJCWlmKCFmaWxlX2V4aXN0cygkZGlycGF0aCkpewoJCQkJCQlAbWtkaXIoJGRpcnBhdGgpOwoJCQkJCQlAY2htb2QoJGRpcnBhdGgsMDc3Nyk7CgkJCQkJfQoJCQkJfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiDlnoLnm7Tnv7vovawKICAgICAqCiAgICAgKiBAcGFyYW0gICAgc3RyaW5nICAgICAkc3JjICAgIOWbvueJh+a6kAogICAgICovCiAgICBmdW5jdGlvbiBfZmxpcFYoJHNyYyl7CiAgICAgICAgJHNyY194ID0gJHRoaXMtPmdldEltZ1dpZHRoKCRzcmMpOwogICAgICAgICRzcmNfeSA9ICR0aGlzLT5nZXRJbWdIZWlnaHQoJHNyYyk7CiAgICAgICAgJG5ld19pbSA9IGltYWdlY3JlYXRldHJ1ZWNvbG9yKCRzcmNfeCwgJHNyY195KTsKICAgICAgICBmb3IgKCR5ID0gMDsgJHkgPCAkc3JjX3k7ICR5KyspewogICAgICAgICAgICBpbWFnZWNvcHkoJG5ld19pbSwgJHNyYywgMCwgJHNyY195IC0gJHkgLSAxLCAwLCAkeSwgJHNyY194LCAxKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPmhfc3JjID0gJG5ld19pbTsKICAgIH0KICAgIC8qKgogICAgICog5rC05bmz57+76L2sCiAgICAgKgogICAgICogQHBhcmFtICAgIHN0cmluZyAgICAgJHNyYyAgICDlm77niYfmupAKICAgICAqLwogICAgZnVuY3Rpb24gX2ZsaXBIKCRzcmMpewogICAgICAgICRzcmNfeCA9ICR0aGlzLT5nZXRJbWdXaWR0aCgkc3JjKTsKICAgICAgICAkc3JjX3kgPSAkdGhpcy0+Z2V0SW1nSGVpZ2h0KCRzcmMpOwogICAgICAgICRuZXdfaW0gPSBpbWFnZWNyZWF0ZXRydWVjb2xvcigkc3JjX3gsICRzcmNfeSk7CiAgICAgICAgZm9yICgkeCA9IDA7ICR4IDwgJHNyY194OyAkeCsrKXsKICAgICAgICAgICAgaW1hZ2Vjb3B5KCRuZXdfaW0sICRzcmMsICRzcmNfeCAtICR4IC0gMSwgMCwgJHgsIDAsIDEsICRzcmNfeSk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5oX3NyYyA9ICRuZXdfaW07CiAgICB9Cn0KCj8+aHR0cDovL3d3dy56YnRlc3QuY29tLwpFOi9CdFNvZnQvd3d3cm9vdC93d3cuemJ0ZXN0LmNvbS8=