CHAT_OUTPUT_BEGIN
COMMAND_ID=NEWFI-260919-NEWFDOM-AUTOCONTENT210-CONTRACT130
STATUS=OK
RC=0
HOST=pve01
MODE=read-only
COMPONENT=newfi-newfdom-autocontent210-direct-source-identity-native-contract-capture-readonly
REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
COMMAND_SHA256=afa9876a120b5f2d3db51316946778c4ae1fc071dbb960a983c9e72d5bc9bc50
DUPLICATE_FAILED_COMMAND_BLOCKED=false
EXECUTION_STARTED=true
CHANGE_DECLARED=false
RESULT_CONTRACT_VALID=true
RESULT_CONTRACT_STATUS=NOT_APPLICABLE
RESULT_CONTRACT_ERROR=NONE
COMMAND_RC=0
CHANGES_MADE=false
ROLLBACK_STARTED=false
ROLLBACK_RESTORED=null
MUTATION_OUTCOME=NO_MUTATION
SANITIZED=yes
SECRETS_INCLUDED=no
PRIVATE_ADDRESSES_INCLUDED=no
RAW_EVIDENCE_SHA256=c3a182f639bce141423a1ebdf98c7fbdf54fd354aecca447f2f22c43e5b170d9
SANITIZED_OUTPUT_SHA256=c3a182f639bce141423a1ebdf98c7fbdf54fd354aecca447f2f22c43e5b170d9
OUTPUT_BEGIN
NEWFI130_BEGIN=true
COMMAND_ID=NEWFI-260919-NEWFDOM-AUTOCONTENT210-CONTRACT130
NEWFI130_SCOPE={"application_mutations":0,"audit127_rerun":false,"php_bootstrap":false,"source_execution":false,"sql_queries":0}
NEWFI130_GIT_BEFORE={"branch":"implementation/newfi-closed-mvp-20260906","clean":true,"head":"9a425b019fee4174c8ea9bcca7da0e769372f9b3","remote_head":"9a425b019fee4174c8ea9bcca7da0e769372f9b3","tracked_newfi_paths":["src/addons/Newfi/Dogs/Setup.php","src/addons/Newfi/Dogs/addon.json","src/addons/Newfi/Events/Entity/EventSource.php","src/addons/Newfi/Events/Entity/SourceRegistry.php","src/addons/Newfi/Events/Repository/SourceRegistry.php","src/addons/Newfi/Events/Setup.php","src/addons/Newfi/Events/addon.json","src/addons/Newfi/Events/public_sources.json","src/addons/Newfi/Portal/addon.json"]}
NEWFI130_CLUSTER={"production":{"node":"pve01","status":"running","vmid":210},"staging":{"node":"pve03","status":"running","vmid":211}}
NEWFI130_WORKTREE={"autocontent_directory_present":false,"autocontent_top_names":[],"discovery":{},"files":{"src/addons/Newfi/Dogs/Setup.php":{"bytes":1445,"path":"src/addons/Newfi/Dogs/Setup.php","present":true,"sha256":"6fe24fe38301b346900bca84edddb6ff3fee3977cd820050efa0d20d0854bbdc"},"src/addons/Newfi/Dogs/addon.json":{"bytes":395,"path":"src/addons/Newfi/Dogs/addon.json","present":true,"sha256":"71b89450f1e7ef3c7320f8a34f15385e9f54db14642288a930868429492d5f31"},"src/addons/Newfi/Events/Entity/EventSource.php":{"bytes":775,"path":"src/addons/Newfi/Events/Entity/EventSource.php","present":true,"sha256":"07541d087caf9668a2a2d80bb8cd81e9471095ce36260f1cc12ec81eb0460187"},"src/addons/Newfi/Events/Entity/SourceRegistry.php":{"bytes":2155,"path":"src/addons/Newfi/Events/Entity/SourceRegistry.php","present":true,"sha256":"9fa9cf171fb586741eecd217d0156e01cdd89f2060b8f71bb780252f44365139"},"src/addons/Newfi/Events/Repository/SourceRegistry.php":{"bytes":506,"path":"src/addons/Newfi/Events/Repository/SourceRegistry.php","present":true,"sha256":"31ee889681ee0af9d44f19ba9a6857ae07982c9ed90bb85835de7da6b40053b4"},"src/addons/Newfi/Events/Setup.php":{"bytes":5005,"path":"src/addons/Newfi/Events/Setup.php","present":true,"sha256":"d644a93ec86ff75d9325564c9f0d9ecd36a8059cab4437df62e8be0c561efef0"},"src/addons/Newfi/Events/addon.json":{"bytes":397,"path":"src/addons/Newfi/Events/addon.json","present":true,"sha256":"cc60d5f949db176004f603e42cfb160aefd7ed4d8d7fff30101f4ebb2c502dc3"},"src/addons/Newfi/Events/public_sources.json":{"bytes":977,"path":"src/addons/Newfi/Events/public_sources.json","present":true,"sha256":"99171c50e3e113ef08d1c4ffecb0ec49328b7b5454c91b5eb22e200798deaca1"},"src/addons/Newfi/Portal/addon.json":{"bytes":378,"path":"src/addons/Newfi/Portal/addon.json","present":true,"sha256":"288a61044c941107162d045be49ab2e7c844d1586b25378a7289b3c7275010ab"}}}
NEWFI130_STAGING={"autocontent_directory_present":false,"autocontent_top_names":[],"collection":"COMPLETE","command_id":"NEWFI-260919-NEWFDOM-AUTOCONTENT210-CONTRACT130","discovery":{"src/XF/AddOn":["src/XF/AddOn/AbstractSetup.php","src/XF/AddOn/AddOn.php","src/XF/AddOn/Manager.php","src/XF/AddOn/StepRunnerInstallTrait.php","src/XF/AddOn/StepRunnerUninstallTrait.php","src/XF/AddOn/StepRunnerUpgradeTrait.php"],"src/XF/Cli/Command":["src/XF/Cli/Command/AddOnInstall.php","src/XF/Cli/Command/AddOnUninstall.php"],"src/XF/Job":["src/XF/Job/Cron.php","src/XF/Job/JobParams.php","src/XF/Job/JobResult.php"],"src/XF/Repository":["src/XF/Repository/CronEntryRepository.php"],"src/XF/Service":["src/XF/Service/AbstractService.php"]},"files":{"src/XF/AddOn/AbstractSetup.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBYRlxBZGRPbjsKCnVzZSBYRlxBcHA7CnVzZSBYRlxEYlxBYnN0cmFjdFN0YXRlbWVudDsKdXNlIFhGXERiXEV4Y2VwdGlvbjsKdXNlIFhGXEluc3RhbGxcSW5zdGFsbEhlbHBlclRyYWl0Owp1c2UgWEZcSm9iXEZpbGVDbGVhblVwOwoKYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RTZXR1cAp7Cgl1c2UgSW5zdGFsbEhlbHBlclRyYWl0OwoKCS8qKgoJICogQHZhciBBZGRPbgoJICovCglwcm90ZWN0ZWQgJGFkZE9uOwoKCS8qKgoJICogQHBhcmFtIGFycmF5ICRzdGVwUGFyYW1zCgkgKgoJICogQHJldHVybiBudWxsfFN0ZXBSZXN1bHQKCSAqLwoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGluc3RhbGwoYXJyYXkgJHN0ZXBQYXJhbXMgPSBbXSk7CgoJLyoqCgkgKiBAcGFyYW0gYXJyYXkgJHN0ZXBQYXJhbXMKCSAqCgkgKiBAcmV0dXJuIG51bGx8U3RlcFJlc3VsdAoJICovCglhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gdXBncmFkZShhcnJheSAkc3RlcFBhcmFtcyA9IFtdKTsKCgkvKioKCSAqIEBwYXJhbSBhcnJheSAkc3RlcFBhcmFtcwoJICoKCSAqIEByZXR1cm4gbnVsbHxTdGVwUmVzdWx0CgkgKi8KCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiB1bmluc3RhbGwoYXJyYXkgJHN0ZXBQYXJhbXMgPSBbXSk7CgoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEFkZE9uICRhZGRPbiwgQXBwICRhcHApCgl7CgkJJHRoaXMtPmFkZE9uID0gJGFkZE9uOwoJCSR0aGlzLT5hcHAgPSAkYXBwOwoJfQoKCS8qKgoJICogUGVyZm9ybSBhZGRpdGlvbmFsIHJlcXVpcmVtZW50IGNoZWNrcy4KCSAqCgkgKiBAcGFyYW0gbGlzdDxzdHJpbmd8XFN0cmluZ2FibGU+ICRlcnJvcnMgRXJyb3JzIHdpbGwgYmxvY2sgdGhlIHNldHVwIGZyb20gY29udGludWluZwoJICogQHBhcmFtIGxpc3Q8c3RyaW5nfFxTdHJpbmdhYmxlPiAkd2FybmluZ3MgV2FybmluZ3Mgd2lsbCBiZSBkaXNwbGF5ZWQgYnV0IGFsbG93IHRoZSB1c2VyIHRvIGNvbnRpbnVlIHNldHVwCgkgKgoJICogQHJldHVybiB2b2lkCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBjaGVja1JlcXVpcmVtZW50cygmJGVycm9ycyA9IFtdLCAmJHdhcm5pbmdzID0gW10pCgl7CgkJcmV0dXJuOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBwb3N0SW5zdGFsbChhcnJheSAmJHN0YXRlQ2hhbmdlcykKCXsKCX0KCgkvKioKCSAqIEBwYXJhbSBpbnQgJHByZXZpb3VzVmVyc2lvbgoJICogQHBhcmFtIGFycmF5PHN0cmluZywgbWl4ZWQ+ICRzdGF0ZUNoYW5nZXMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHBvc3RVcGdyYWRlKCRwcmV2aW91c1ZlcnNpb24sIGFycmF5ICYkc3RhdGVDaGFuZ2VzKQoJewoJfQoKCXB1YmxpYyBmdW5jdGlvbiBwb3N0UmVidWlsZCgpCgl7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIG9uQWN0aXZlQ2hhbmdlKCRuZXdBY3RpdmUsIGFycmF5ICYkam9iTGlzdCkKCXsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZW5xdWV1ZVBvc3RVcGdyYWRlQ2xlYW5VcCgpOiB2b2lkCgl7CgkJJGFkZE9uID0gJHRoaXMtPmFkZE9uOwoKCQkkdW5pcXVlSWQgPSAkYWRkT24tPnByZXBhcmVBZGRPbklkRm9yRmlsZW5hbWUoKSAuICdGaWxlQ2xlYW5VcCcgLiAkYWRkT24tPnZlcnNpb25faWQ7CgoJCSR0aGlzLT5hcHAtPmpvYk1hbmFnZXIoKS0+ZW5xdWV1ZVVuaXF1ZSgkdW5pcXVlSWQsIEZpbGVDbGVhblVwOjpjbGFzcywgWwoJCQknYWRkb25faWQnID0+ICRhZGRPbi0+YWRkb25faWQsCgkJXSwgZmFsc2UpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBwcmVwYXJlRm9yQWN0aW9uKCRhY3Rpb24pCgl7CgkJaWYgKCRhY3Rpb24gPT0gJ3VuaW5zdGFsbCcpCgkJewoJCQlcWEY6OmRiKCktPmlnbm9yZUxlZ2FjeVRhYmxlV3JpdGVFcnJvcih0cnVlKTsKCQl9Cgl9CgoJLyoqCgkgKiBAcGFyYW0gJHNxbAoJICogQHBhcmFtIGFycmF5ICRiaW5kCgkgKiBAcGFyYW0gYm9vbCAkc3VwcHJlc3NBbGwKCSAqCgkgKiBAcmV0dXJuIGJvb2x8QWJzdHJhY3RTdGF0ZW1lbnQKCSAqIEB0aHJvd3MgRXhjZXB0aW9uCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBxdWVyeSgkc3FsLCAkYmluZCA9IFtdLCAkc3VwcHJlc3NBbGwgPSBmYWxzZSkKCXsKCQlyZXR1cm4gJHRoaXMtPmV4ZWN1dGVVcGdyYWRlUXVlcnkoJHNxbCwgJGJpbmQsICRzdXBwcmVzc0FsbCk7Cgl9Cn0K","bytes":2151,"path":"src/XF/AddOn/AbstractSetup.php","present":true,"sha256":"6bdd3fe834e15b963a52c9357f54262f2d12f3c7c3686fc31333b549cddf2d88"},"src/XF/AddOn/AddOn.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBYRlxBZGRPbjsKCnVzZSBYRlxFbnRpdHlcRmlsZUNoZWNrOwp1c2UgWEZcUmVwb3NpdG9yeVxBZGRPblJlcG9zaXRvcnk7CnVzZSBYRlxSZXBvc2l0b3J5XE9wdGlvblJlcG9zaXRvcnk7CnVzZSBYRlxVdGlsXEZpbGU7CnVzZSBYRlxVdGlsXEhhc2g7Cgp1c2UgZnVuY3Rpb24gY291bnQsIGlzX2FycmF5OwoKLyoqCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJGFkZG9uCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJGFkZG9uX2lkCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJGFkZG9uX2lkX3VybAogKiBAcHJvcGVydHkgc3RyaW5nICRqc29uCiAqIEBwcm9wZXJ0eSBpbnQgJGpzb25fdmVyc2lvbl9pZAogKiBAcHJvcGVydHkgaW50ICRqc29uX3ZlcnNpb25fc3RyaW5nCiAqIEBwcm9wZXJ0eSBzdHJpbmdbXSAkbWlzc2luZ19maWxlcwogKiBAcHJvcGVydHkgc3RyaW5nW10gJGFkZGl0aW9uYWxfZmlsZXMKICogQHByb3BlcnR5IHN0cmluZyAkbGVnYWN5X2FkZG9uX2lkCiAqCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJHRpdGxlCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJGRlc2NycHRpb24KICogQHByb3BlcnR5IGludCAkdmVyc2lvbl9pZAogKiBAcHJvcGVydHkgc3RyaW5nICR2ZXJzaW9uX3N0cmluZwogKiBAcHJvcGVydHkgc3RyaW5nICRkZXYKICogQHByb3BlcnR5IHN0cmluZyAkZGV2X3VybAogKiBAcHJvcGVydHkgc3RyaW5nICRmYXFfdXJsCiAqIEBwcm9wZXJ0eSBzdHJpbmdbXSAkc3VwcG9ydF91cmwKICogQHByb3BlcnR5IHN0cmluZ1tdICRleHRyYV91cmxzCiAqIEBwcm9wZXJ0eSBhcnJheSAkcmVxdWlyZQogKiBAcHJvcGVydHkgc3RyaW5nICRpY29uCiAqCiAqIEBtaXhpbiBcWEZcRW50aXR5XEFkZE9uCiAqLwpjbGFzcyBBZGRPbiBpbXBsZW1lbnRzIFxBcnJheUFjY2Vzcwp7CgkvKioKCSAqIEB2YXIgTWFuYWdlcgoJICovCglwcm90ZWN0ZWQgJG1hbmFnZXI7CgoJLyoqCgkgKiBAdmFyIFxYRlxFbnRpdHlcQWRkT24KCSAqLwoJcHJvdGVjdGVkICRpbnN0YWxsZWRBZGRPbjsKCgkvKioKCSAqIEB2YXIgQWJzdHJhY3RTZXR1cAoJICovCglwcm90ZWN0ZWQgJHNldHVwOwoKCXByb3RlY3RlZCAkYWRkT25JZDsKCXByb3RlY3RlZCAkbGVnYWN5QWRkT25JZDsKCglwcm90ZWN0ZWQgJGFkZE9uRGlyOwoJcHJvdGVjdGVkICRidWlsZERpcjsKCXByb3RlY3RlZCAkZGF0YURpcjsKCXByb3RlY3RlZCAkZmlsZXNEaXI7Cglwcm90ZWN0ZWQgJG91dHB1dERpcjsKCXByb3RlY3RlZCAkcmVsZWFzZXNEaXI7CgoJcHJvdGVjdGVkICRqc29uUGF0aDsKCXByb3RlY3RlZCAkanNvbiA9IFtdOwoKCXByb3RlY3RlZCAkYnVpbGRKc29uUGF0aDsKCXByb3RlY3RlZCAkYnVpbGRKc29uID0gW107CgoJcHJvdGVjdGVkICRtaXNzaW5nRmlsZXMgPSBbXTsKCglwcm90ZWN0ZWQgJGFkZE9uSGFzaGVzOwoKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkYWRkT25PcklkLCBNYW5hZ2VyICRtYW5hZ2VyKQoJewoJCSR0aGlzLT5tYW5hZ2VyID0gJG1hbmFnZXI7CgoJCWlmICgkYWRkT25PcklkIGluc3RhbmNlb2YgXFhGXEVudGl0eVxBZGRPbikKCQl7CgkJCSR0aGlzLT5pbnN0YWxsZWRBZGRPbiA9ICRhZGRPbk9ySWQ7CgkJCSR0aGlzLT5hZGRPbklkID0gJGFkZE9uT3JJZC0+YWRkb25faWQ7CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT5hZGRPbklkID0gJGFkZE9uT3JJZDsKCQl9CgoJCSRkcyA9IFxYRjo6JERTOwoKCQkkdGhpcy0+YWRkT25EaXIgPSBcWEY6OmdldEFkZE9uRGlyZWN0b3J5KCkgLiAkZHMgLiAkdGhpcy0+cHJlcGFyZUFkZE9uSWRGb3JQYXRoKCk7CgoJCS8vIFJlc29sdmUgc3ltbGlua3MgdG8gZW5zdXJlIGNvbnNpc3RlbnQgcGF0aCBoYW5kbGluZwoJCSRyZWFsQWRkT25EaXIgPSByZWFscGF0aCgkdGhpcy0+YWRkT25EaXIpOwoJCWlmICgkcmVhbEFkZE9uRGlyICE9PSBmYWxzZSkKCQl7CgkJCSR0aGlzLT5hZGRPbkRpciA9ICRyZWFsQWRkT25EaXI7CgkJfQoKCQkkdGhpcy0+YnVpbGREaXIgPSAkdGhpcy0+YWRkT25EaXIgLiAkZHMgLiAnX2J1aWxkJzsKCQkkdGhpcy0+ZGF0YURpciA9ICR0aGlzLT5hZGRPbkRpciAuICRkcyAuICdfZGF0YSc7CgkJJHRoaXMtPmZpbGVzRGlyID0gJHRoaXMtPmFkZE9uRGlyIC4gJGRzIC4gJ19maWxlcyc7CgkJJHRoaXMtPm91dHB1dERpciA9ICR0aGlzLT5hZGRPbkRpciAuICRkcyAuICdfb3V0cHV0JzsKCQkkdGhpcy0+cmVsZWFzZXNEaXIgPSAkdGhpcy0+YWRkT25EaXIgLiAkZHMgLiAnX3JlbGVhc2VzJzsKCgkJJHRoaXMtPmpzb25QYXRoID0gJHRoaXMtPmFkZE9uRGlyIC4gJGRzIC4gJ2FkZG9uLmpzb24nOwoJCWlmIChmaWxlX2V4aXN0cygkdGhpcy0+anNvblBhdGgpKQoJCXsKCQkJJHRoaXMtPmpzb24gPSAkdGhpcy0+cHJlcGFyZUpzb25GaWxlKAoJCQkJanNvbl9kZWNvZGUoZmlsZV9nZXRfY29udGVudHMoJHRoaXMtPmpzb25QYXRoKSwgdHJ1ZSkgPzogW10KCQkJKTsKCQl9CgkJZWxzZQoJCXsKCQkJJHRoaXMtPm1pc3NpbmdGaWxlc1tdID0gJ2FkZG9uLmpzb24nOwoJCX0KCgkJaWYgKCEkdGhpcy0+aW5zdGFsbGVkQWRkT24gJiYgIWVtcHR5KCR0aGlzLT5qc29uWydsZWdhY3lfYWRkb25faWQnXSkpCgkJewoJCQkkdGhpcy0+bGVnYWN5QWRkT25JZCA9ICR0aGlzLT5qc29uWydsZWdhY3lfYWRkb25faWQnXTsKCQkJJHRoaXMtPmluc3RhbGxlZEFkZE9uID0gXFhGOjplbSgpLT5maW5kKFxYRlxFbnRpdHlcQWRkT246OmNsYXNzLCAkdGhpcy0+bGVnYWN5QWRkT25JZCk7CgkJfQoKCQkkdGhpcy0+YnVpbGRKc29uUGF0aCA9ICR0aGlzLT5hZGRPbkRpciAuICRkcyAuICdidWlsZC5qc29uJzsKCQkkdGhpcy0+YnVpbGRKc29uID0gWwoJCQknYWRkaXRpb25hbF9maWxlcycgPT4gW10sCgkJCSdtaW5pZnknID0+IFtdLAoJCQkncm9sbHVwJyA9PiBbXSwKCQkJJ2V4ZWMnID0+IFtdLAoJCV07CgkJaWYgKGZpbGVfZXhpc3RzKCR0aGlzLT5idWlsZEpzb25QYXRoKSkKCQl7CgkJCSRidWlsZEpzb24gPSBAanNvbl9kZWNvZGUoZmlsZV9nZXRfY29udGVudHMoJHRoaXMtPmJ1aWxkSnNvblBhdGgpLCB0cnVlKTsKCgkJCSR0aGlzLT5idWlsZEpzb24gPSBhcnJheV9yZXBsYWNlKAoJCQkJJHRoaXMtPmJ1aWxkSnNvbiwKCQkJCSRidWlsZEpzb24gPzogW10KCQkJKTsKCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldEluc3RhbGxlZEFkZE9uKCkKCXsKCQlyZXR1cm4gJHRoaXMtPmluc3RhbGxlZEFkZE9uOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRBZGRPbklkKCkKCXsKCQlyZXR1cm4gJHRoaXMtPmFkZE9uSWQ7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldEFkZE9uSWRVcmwoKQoJewoJCXJldHVybiBcWEY6OmFwcCgpLT5yZXBvc2l0b3J5KEFkZE9uUmVwb3NpdG9yeTo6Y2xhc3MpLT5jb252ZXJ0QWRkT25JZFRvVXJsVmVyc2lvbigkdGhpcy0+Z2V0QWRkT25JZCgpKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gcHJlcGFyZVZlcnNpb25Gb3JGaWxlbmFtZSgpCgl7CgkJJHZlcnNpb25TdHJpbmcgPSBwcmVnX3JlcGxhY2UoJy9bXmEtejAtOS1fLiBdL2knLCAnJywgJHRoaXMtPnZlcnNpb25fc3RyaW5nKTsKCQlyZXR1cm4gdHJpbShwcmVnX3JlcGxhY2UoJy9cc3syLH0vJywgJyAnLCAkdmVyc2lvblN0cmluZykpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBwcmVwYXJlQWRkT25JZEZvckZpbGVuYW1lKCkKCXsKCQlpZiAoc3RycG9zKCR0aGlzLT5hZGRPbklkLCAnLycpICE9PSBmYWxzZSkKCQl7CgkJCXJldHVybiBzdHJfcmVwbGFjZSgnLycsICctJywgJHRoaXMtPmFkZE9uSWQpOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gJHRoaXMtPmFkZE9uSWQ7CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiBwcmVwYXJlQWRkT25JZEZvclBhdGgoKQoJewoJCWlmIChzdHJwb3MoJHRoaXMtPmFkZE9uSWQsICcvJykgIT09IGZhbHNlKQoJCXsKCQkJcmV0dXJuIHN0cl9yZXBsYWNlKCcvJywgXFhGOjokRFMsICR0aGlzLT5hZGRPbklkKTsKCQl9CgkJZWxzZQoJCXsKCQkJcmV0dXJuICR0aGlzLT5hZGRPbklkOwoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gcHJlcGFyZUFkZE9uSWRGb3JDbGFzcygpCgl7CgkJaWYgKHN0cnBvcygkdGhpcy0+YWRkT25JZCwgJy8nKSAhPT0gZmFsc2UpCgkJewoJCQlyZXR1cm4gc3RyX3JlcGxhY2UoJy8nLCAnXFwnLCAkdGhpcy0+YWRkT25JZCk7CgkJfQoJCWVsc2UKCQl7CgkJCXJldHVybiAkdGhpcy0+YWRkT25JZDsKCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldE1pc3NpbmdGaWxlcygpCgl7CgkJcmV0dXJuICR0aGlzLT5taXNzaW5nRmlsZXM7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldEFkZE9uRGlyZWN0b3J5KCkKCXsKCQlyZXR1cm4gJHRoaXMtPmFkZE9uRGlyOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRCdWlsZERpcmVjdG9yeSgpCgl7CgkJcmV0dXJuICR0aGlzLT5idWlsZERpcjsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0RGF0YURpcmVjdG9yeSgpCgl7CgkJcmV0dXJuICR0aGlzLT5kYXRhRGlyOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRGaWxlc0RpcmVjdG9yeSgpCgl7CgkJcmV0dXJuICR0aGlzLT5maWxlc0RpcjsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0UmVsZWFzZXNEaXJlY3RvcnkoKQoJewoJCXJldHVybiAkdGhpcy0+cmVsZWFzZXNEaXI7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldFJlbGVhc2VQYXRoKCkKCXsKCQkkYWRkT25JZCA9ICR0aGlzLT5wcmVwYXJlQWRkT25JZEZvckZpbGVuYW1lKCk7CgkJJHZlcnNpb25TdHJpbmcgPSAkdGhpcy0+cHJlcGFyZVZlcnNpb25Gb3JGaWxlbmFtZSgpOwoKCQlyZXR1cm4gJHRoaXMtPnJlbGVhc2VzRGlyIC4gXFhGOjokRFMgLiAiJGFkZE9uSWQtJHZlcnNpb25TdHJpbmcuemlwIjsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0SnNvblBhdGgoKQoJewoJCXJldHVybiAkdGhpcy0+anNvblBhdGg7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldEpzb24oKQoJewoJCXJldHVybiAkdGhpcy0+anNvbjsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0SnNvbkhhc2goKQoJewoJCXJldHVybiBIYXNoOjpoYXNoVGV4dEZpbGUoJHRoaXMtPmpzb25QYXRoLCAnc2hhMjU2Jyk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHByZXBhcmVKc29uRmlsZShhcnJheSAkanNvbiA9IFtdKQoJewoJCXJldHVybiBhcnJheV9yZXBsYWNlKFsKCQkJJ2xlZ2FjeV9hZGRvbl9pZCcgPT4gJycsCgkJCSd0aXRsZScgPT4gJycsCgkJCSdkZXNjcmlwdGlvbicgPT4gJycsCgkJCSd2ZXJzaW9uX2lkJyA9PiAwLAoJCQkndmVyc2lvbl9zdHJpbmcnID0+ICcnLAoJCQknZGV2JyA9PiAnJywKCQkJJ2Rldl91cmwnID0+ICcnLAoJCQknZmFxX3VybCcgPT4gJycsCgkJCSdzdXBwb3J0X3VybCcgPT4gJycsCgkJCSdleHRyYV91cmxzJyA9PiBbXSwKCQkJJ3JlcXVpcmUnID0+IFtdLAoJCQknaWNvbicgPT4gJycsCgkJXSwgJGpzb24pOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRCdWlsZEpzb25QYXRoKCkKCXsKCQlyZXR1cm4gJHRoaXMtPmJ1aWxkSnNvblBhdGg7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldEJ1aWxkSnNvbigpCgl7CgkJcmV0dXJuICR0aGlzLT5idWlsZEpzb247Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldEljb25QYXRoKCkKCXsKCQlyZXR1cm4gJHRoaXMtPmFkZE9uRGlyIC4gXFhGOjokRFMgLiAkdGhpcy0+aWNvbjsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0SGFzaGVzUGF0aCgpCgl7CgkJcmV0dXJuICR0aGlzLT5hZGRPbkRpciAuIFxYRjo6JERTIC4gJ2hhc2hlcy5qc29uJzsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0SGFzaGVzKCkKCXsKCQlpZiAoJHRoaXMtPmFkZE9uSGFzaGVzICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5hZGRPbkhhc2hlczsKCQl9CgoJCSRoYXNoRmlsZSA9ICR0aGlzLT5nZXRIYXNoZXNQYXRoKCk7CgkJaWYgKCFmaWxlX2V4aXN0cygkaGFzaEZpbGUpKQoJCXsKCQkJJHRoaXMtPmFkZE9uSGFzaGVzID0gW107CgkJCXJldHVybiAkdGhpcy0+YWRkT25IYXNoZXM7CgkJfQoKCQkkdGhpcy0+YWRkT25IYXNoZXMgPSBqc29uX2RlY29kZShmaWxlX2dldF9jb250ZW50cygkaGFzaEZpbGUpLCB0cnVlKSA/OiBbXTsKCQlyZXR1cm4gJHRoaXMtPmFkZE9uSGFzaGVzOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRTZXR1cFBhdGgoKQoJewoJCXJldHVybiAkdGhpcy0+YWRkT25EaXIgLiBcWEY6OiREUyAuICdTZXR1cC5waHAnOwoJfQoKCS8qKgoJICogQHJldHVybiBBYnN0cmFjdFNldHVwfGZhbHNlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRTZXR1cCgpCgl7CgkJaWYgKCR0aGlzLT5zZXR1cCA9PT0gbnVsbCkKCQl7CgkJCSR0aGlzLT5zZXR1cCA9IGZhbHNlOwoKCQkJaWYgKGZpbGVfZXhpc3RzKCR0aGlzLT5nZXRTZXR1cFBhdGgoKSkpCgkJCXsKCQkJCSRjbGFzcyA9ICR0aGlzLT5wcmVwYXJlQWRkT25JZEZvckNsYXNzKCkgLiAnXFxTZXR1cCc7CgkJCQlpZiAoY2xhc3NfZXhpc3RzKCRjbGFzcykpCgkJCQl7CgkJCQkJJHNldHVwID0gbmV3ICRjbGFzcygkdGhpcywgXFhGOjphcHAoKSk7CgkJCQkJaWYgKCRzZXR1cCBpbnN0YW5jZW9mIEFic3RyYWN0U2V0dXApCgkJCQkJewoJCQkJCQkkdGhpcy0+c2V0dXAgPSAkc2V0dXA7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoKCQlyZXR1cm4gJHRoaXMtPnNldHVwOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBpc0luc3RhbGxlZCgpCgl7CgkJaWYgKCR0aGlzLT5pbnN0YWxsZWRBZGRPbiA9PT0gbnVsbCkKCQl7CgkJCXJldHVybiBmYWxzZTsKCQl9CgoJCSRsYXN0QWN0aW9uID0gJHRoaXMtPmluc3RhbGxlZEFkZE9uLT5nZXRMYXN0QWN0aW9uU3RlcCgnaW5zdGFsbCcpOwoJCWlmICgkbGFzdEFjdGlvbiAhPT0gbnVsbCkKCQl7CgkJCS8vIHdlIGhhdmVuJ3QgY29tcGxldGVkIHRoZSBpbnN0YWxsIHN0ZXBzIHlldCwgZG9uJ3QgY29uc2lkZXIgYXMgaW5zdGFsbGVkCgkJCXJldHVybiBmYWxzZTsKCQl9CgoJCXJldHVybiB0cnVlOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBpc0FjdGl2ZSgpCgl7CgkJcmV0dXJuICR0aGlzLT5pc0luc3RhbGxlZCgpCgkJCSYmICR0aGlzLT5pbnN0YWxsZWRBZGRPbi0+YWN0aXZlOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBpc0xlZ2FjeSgpCgl7CgkJcmV0dXJuICR0aGlzLT5pc0luc3RhbGxlZCgpCgkJCSYmICR0aGlzLT5pbnN0YWxsZWRBZGRPbi0+aXNfbGVnYWN5OwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBpc0Rldk91dHB1dEF2YWlsYWJsZSgpCgl7CgkJcmV0dXJuIFxYRjo6YXBwKCktPmRldmVsb3BtZW50T3V0cHV0KCktPmlzQWRkT25PdXRwdXRBdmFpbGFibGUoJHRoaXMtPmdldEFkZE9uSWQoKSk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGhhc01pc3NpbmdGaWxlcygpCgl7CgkJcmV0dXJuIGNvdW50KCR0aGlzLT5taXNzaW5nRmlsZXMpID4gMDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gaGFzUGVuZGluZ0NoYW5nZXMoKQoJewoJCXJldHVybiAkdGhpcy0+aXNJbnN0YWxsZWQoKQoJCQkmJiAhJHRoaXMtPmlzTGVnYWN5KCkKCQkJJiYgKAoJCQkJISR0aGlzLT5pc0ZpbGVWZXJzaW9uVmFsaWQoKQoJCQkJfHwgJHRoaXMtPmlzSnNvbkhhc2hDaGFuZ2VkKCkKCQkJKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gaGFzRmFJY29uKCkKCXsKCQlyZXR1cm4gKAoJCQkkdGhpcy0+aWNvbgoJCQkmJiAhJHRoaXMtPmhhc0ljb24oKQoJCQkmJiBwcmVnX21hdGNoKCcjXihmYS18ZmFbYS16XSApIycsICR0aGlzLT5pY29uKQoJCSk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGhhc0ljb24oKQoJewoJCXJldHVybigkdGhpcy0+aWNvbiAmJiBmaWxlX2V4aXN0cygkdGhpcy0+Z2V0SWNvblBhdGgoKSkpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRJY29uVXJpKCkKCXsKCQlpZiAoISR0aGlzLT5pY29uKQoJCXsKCQkJcmV0dXJuIG51bGw7CgkJfQoKCQkkaWNvblBhdGggPSAkdGhpcy0+Z2V0SWNvblBhdGgoKTsKCQkkZGF0YSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRpY29uUGF0aCk7CgoJCSRtaW1lVHlwZSA9IEZpbGU6OmdldEltYWdlTWltZVR5cGUoJGljb25QYXRoKTsKCQlpZiAoISRtaW1lVHlwZSkKCQl7CgkJCXJldHVybiBudWxsOwoJCX0KCgkJcmV0dXJuICdkYXRhOicgLiAkbWltZVR5cGUgLiAnO2Jhc2U2NCwnIC4gYmFzZTY0X2VuY29kZSgkZGF0YSk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGhhc0hhc2hlcygpCgl7CgkJcmV0dXJuIGZpbGVfZXhpc3RzKCR0aGlzLT5nZXRIYXNoZXNQYXRoKCkpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBoYXNTZXR1cCgpCgl7CgkJcmV0dXJuIGZpbGVfZXhpc3RzKCR0aGlzLT5nZXRTZXR1cFBhdGgoKSk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGlzQXZhaWxhYmxlKCkKCXsKCQlyZXR1cm4gY291bnQoJHRoaXMtPm1pc3NpbmdGaWxlcykgPT0gMDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gaXNGaWxlVmVyc2lvblZhbGlkKCkKCXsKCQlyZXR1cm4gJHRoaXMtPmlzSW5zdGFsbGVkKCkKCQkJJiYgJHRoaXMtPmlzQXZhaWxhYmxlKCkKCQkJJiYgJHRoaXMtPmluc3RhbGxlZEFkZE9uLT52ZXJzaW9uX2lkID09ICR0aGlzLT5qc29uWyd2ZXJzaW9uX2lkJ107Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGlzSnNvbkhhc2hDaGFuZ2VkKCkKCXsKCQlyZXR1cm4gKAoJCQkkdGhpcy0+aXNBdmFpbGFibGUoKQoJCQkmJiAkdGhpcy0+Z2V0SnNvbkhhc2goKSAhPT0gJHRoaXMtPmluc3RhbGxlZEFkZE9uLT5qc29uX2hhc2gKCQkpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBpc0pzb25WZXJzaW9uTmV3ZXIoKQoJewoJCXJldHVybiAoJHRoaXMtPmpzb25bJ3ZlcnNpb25faWQnXSA+ICR0aGlzLT5pbnN0YWxsZWRBZGRPbi0+dmVyc2lvbl9pZCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldEpzb25WZXJzaW9uKCkKCXsKCQlyZXR1cm4gWwoJCQkndmVyc2lvbl9pZCcgPT4gJHRoaXMtPmpzb25bJ3ZlcnNpb25faWQnXSwKCQkJJ3ZlcnNpb25fc3RyaW5nJyA9PiAkdGhpcy0+anNvblsndmVyc2lvbl9zdHJpbmcnXSwKCQldOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjYW5VcGdyYWRlKCkKCXsKCQlyZXR1cm4gJHRoaXMtPmlzSW5zdGFsbGVkKCkKCQkJJiYgJHRoaXMtPmlzSnNvbkhhc2hDaGFuZ2VkKCkKCQkJJiYgJHRoaXMtPmlzSnNvblZlcnNpb25OZXdlcigpCgkJCSYmICR0aGlzLT5jYW5FZGl0KCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGNoZWNrUmVxdWlyZW1lbnRzKCYkZXJyb3JzID0gW10sICYkd2FybmluZ3MgPSBbXSkKCXsKCQkkZXJyb3JzID0gW107CgkJJHdhcm5pbmdzID0gW107CgoJCWlmICgkdGhpcy0+cmVxdWlyZSkKCQl7CgkJCSR0aXRsZSA9ICR0aGlzLT5qc29uWyd0aXRsZSddOwoJCQkkcmVxdWlyZSA9IChhcnJheSkgJHRoaXMtPnJlcXVpcmU7CgoJCQlpZiAoISR0aGlzLT5tYW5hZ2VyLT5jaGVja0FkZE9uUmVxdWlyZW1lbnRzKCRyZXF1aXJlLCAkdGl0bGUsICRyZXF1aXJlbWVudEVycm9ycykpCgkJCXsKCQkJCSRlcnJvcnMgPSAkcmVxdWlyZW1lbnRFcnJvcnM7CgkJCQlyZXR1cm47CgkJCX0KCQl9CgoJCWlmICgkdGhpcy0+aGFzU2V0dXAoKSkKCQl7CgkJCSRzZXR1cENsYXNzID0gJ1xcJyAuICR0aGlzLT5wcmVwYXJlQWRkT25JZEZvckNsYXNzKCkgLiAnXFxTZXR1cCc7CgoJCQkvKiogQHZhciBBYnN0cmFjdFNldHVwICRzZXR1cCAqLwoJCQkkc2V0dXAgPSBuZXcgJHNldHVwQ2xhc3MoJHRoaXMsIFxYRjo6YXBwKCkpOwoKCQkJJHNldHVwLT5jaGVja1JlcXVpcmVtZW50cygkZXJyb3JzLCAkd2FybmluZ3MpOwoJCQlpZiAoIWlzX2FycmF5KCRlcnJvcnMpKQoJCQl7CgkJCQl0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdBZGQtb24gcmVxdWlyZW1lbnQgZXJyb3JzIG11c3QgYmUgYW4gYXJyYXknKTsKCQkJfQoJCQlpZiAoIWlzX2FycmF5KCR3YXJuaW5ncykpCgkJCXsKCQkJCXRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0FkZC1vbiByZXF1aXJlbWVudCB3YXJuaW5ncyBtdXN0IGJlIGFuIGFycmF5Jyk7CgkJCX0KCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHBhc3Nlc0hlYWx0aENoZWNrKCYkbWlzc2luZyA9IFtdLCAmJGluY29uc2lzdGVudCA9IFtdKQoJewoJCSRtaXNzaW5nID0gW107CgkJJGluY29uc2lzdGVudCA9IFtdOwoKCQlpZiAoISR0aGlzLT5oYXNIYXNoZXMoKSkKCQl7CgkJCXJldHVybjsKCQl9CgoJCSRyb290UGF0aCA9IFxYRjo6Z2V0Um9vdERpcmVjdG9yeSgpOwoJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldEhhc2hlcygpIEFTICRwYXRoID0+ICRoYXNoKQoJCXsKCQkJJGZ1bGxQYXRoID0gJHJvb3RQYXRoIC4gXFhGOjokRFMgLiAkcGF0aDsKCgkJCWlmICghZmlsZV9leGlzdHMoJGZ1bGxQYXRoKSkKCQkJewoJCQkJJG1pc3NpbmdbXSA9ICRwYXRoOwoJCQkJY29udGludWU7CgkJCX0KCgkJCWlmIChIYXNoOjpoYXNoVGV4dEZpbGUoJGZ1bGxQYXRoLCAnc2hhMjU2JykgIT09ICRoYXNoKQoJCQl7CgkJCQkkaW5jb25zaXN0ZW50W10gPSAkcGF0aDsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiB1cGRhdGVQZW5kaW5nQWN0aW9uKCRhY3Rpb24sICRzdGVwKQoJewoJCWlmICgkdGhpcy0+aW5zdGFsbGVkQWRkT24pCgkJewoJCQkkdGhpcy0+aW5zdGFsbGVkQWRkT24tPmZhc3RVcGRhdGUoJ2xhc3RfcGVuZGluZ19hY3Rpb24nLCAiJGFjdGlvbjokc3RlcCIpOwoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gcmVzZXRQZW5kaW5nQWN0aW9uKCkKCXsKCQlpZiAoJHRoaXMtPmluc3RhbGxlZEFkZE9uKQoJCXsKCQkJJHRoaXMtPmluc3RhbGxlZEFkZE9uLT5mYXN0VXBkYXRlKCdsYXN0X3BlbmRpbmdfYWN0aW9uJywgbnVsbCk7CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiBwcmVJbnN0YWxsKCkKCXsKCQlpZiAoISR0aGlzLT5pbnN0YWxsZWRBZGRPbikKCQl7CgkJCSRqc29uID0gJHRoaXMtPmdldEpzb24oKTsKCgkJCSRpbnN0YWxsZWQgPSBcWEY6OmVtKCktPmNyZWF0ZShcWEZcRW50aXR5XEFkZE9uOjpjbGFzcyk7CgkJCSRpbnN0YWxsZWQtPmJ1bGtTZXQoWwoJCQkJJ2FkZG9uX2lkJyA9PiAkdGhpcy0+Z2V0QWRkT25JZCgpLAoJCQkJJ3RpdGxlJyA9PiAkanNvblsndGl0bGUnXSwKCQkJCSd2ZXJzaW9uX3N0cmluZycgPT4gJGpzb25bJ3ZlcnNpb25fc3RyaW5nJ10sCgkJCQkndmVyc2lvbl9pZCcgPT4gJGpzb25bJ3ZlcnNpb25faWQnXSwKCQkJCSdhY3RpdmUnID0+IHRydWUsCgkJCQknaXNfcHJvY2Vzc2luZycgPT4gdHJ1ZSwKCQkJCSdqc29uX2hhc2gnID0+ICR0aGlzLT5nZXRKc29uSGFzaCgpLAoJCQkJJ2xhc3RfcGVuZGluZ19hY3Rpb24nID0+ICdpbnN0YWxsOjAnLAoJCQldKTsKCQkJJGluc3RhbGxlZC0+c2F2ZSgpOwoKCQkJJHRoaXMtPmluc3RhbGxlZEFkZE9uID0gJGluc3RhbGxlZDsKCgkJCVxYRjo6ZmlyZSgnYWRkb25fcHJlX2luc3RhbGwnLCBbJHRoaXMsICRpbnN0YWxsZWQsICRqc29uXSwgJGluc3RhbGxlZC0+YWRkb25faWQpOwoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gcG9zdEluc3RhbGwoYXJyYXkgJiRzdGF0ZUNoYW5nZXMpCgl7CgkJJHNldHVwID0gJHRoaXMtPmdldFNldHVwKCk7CgkJaWYgKCRzZXR1cCkKCQl7CgkJCSRzZXR1cC0+cG9zdEluc3RhbGwoJHN0YXRlQ2hhbmdlcyk7CgkJfQoKCQkkdGhpcy0+cmVzZXRQZW5kaW5nQWN0aW9uKCk7CgoJCSRpbnN0YWxsZWQgPSAkdGhpcy0+aW5zdGFsbGVkQWRkT247CgoJCSRqc29uID0gJHRoaXMtPmdldEpzb24oKTsKCQlcWEY6OmZpcmUoJ2FkZG9uX3Bvc3RfaW5zdGFsbCcsIFskdGhpcywgJGluc3RhbGxlZCwgJGpzb24sICYkc3RhdGVDaGFuZ2VzXSwgJGluc3RhbGxlZC0+YWRkb25faWQpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBwcmVVcGdyYWRlKCkKCXsKCQkkaW5zdGFsbGVkID0gJHRoaXMtPmluc3RhbGxlZEFkZE9uOwoJCWlmICghJGluc3RhbGxlZCkKCQl7CgkJCXRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oIkFkZC1vbiBpcyBub3QgaW5zdGFsbGVkIik7CgkJfQoKCQkkaXNMZWdhY3kgPSAkdGhpcy0+aXNMZWdhY3koKTsKCQlpZiAoJGlzTGVnYWN5KQoJCXsKCQkJaWYgKCR0aGlzLT5sZWdhY3lBZGRPbklkKQoJCQl7CgkJCQkvLyBJbnN0YWxsZWQgYWRkLW9uIGlzIHRoZSBsZWdhY3kgSUQgaW4gdGhpcyBjYXNlLCB1cGRhdGUgaXQgdG8gdGhlIG5ldyBhZGQtb24gSUQuCgkJCQkkaW5zdGFsbGVkLT5hZGRvbl9pZCA9ICR0aGlzLT5hZGRPbklkOwoJCQl9CgoJCQkkaW5zdGFsbGVkLT5pc19sZWdhY3kgPSBmYWxzZTsKCQl9CgoJCS8vIGFzIHdlIHdpbGwgYmUgaW1wb3J0aW5nIGRhdGEgYWZ0ZXIgdGhpcywgd2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgZG9pbmcgdGhpcyBub3cKCQkkaW5zdGFsbGVkLT5zZXRPcHRpb24oJ3JlYnVpbGRfYWN0aXZlX2NoYW5nZScsIGZhbHNlKTsKCQkkaW5zdGFsbGVkLT5hY3RpdmUgPSB0cnVlOwoJCSRpbnN0YWxsZWQtPmlzX3Byb2Nlc3NpbmcgPSB0cnVlOwoKCQkkaW5zdGFsbGVkLT5zYXZlSWZDaGFuZ2VkKCk7CgkJJGluc3RhbGxlZC0+cmVzZXRPcHRpb24oJ3JlYnVpbGRfYWN0aXZlX2NoYW5nZScpOwoKCQkkanNvbiA9ICR0aGlzLT5nZXRKc29uKCk7CgkJXFhGOjpmaXJlKCdhZGRvbl9wcmVfdXBncmFkZScsIFskdGhpcywgJGluc3RhbGxlZCwgJGpzb25dLCAkaW5zdGFsbGVkLT5hZGRvbl9pZCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHBvc3RVcGdyYWRlKGFycmF5ICYkc3RhdGVDaGFuZ2VzKQoJewoJCSRpbnN0YWxsZWQgPSAkdGhpcy0+aW5zdGFsbGVkQWRkT247CgoJCSRzZXR1cCA9ICR0aGlzLT5nZXRTZXR1cCgpOwoJCWlmICgkc2V0dXApCgkJewoJCQkkcHJldmlvdXNWZXJzaW9uID0gJGluc3RhbGxlZCA/ICRpbnN0YWxsZWQtPnZlcnNpb25faWQgOiBudWxsOwoJCQkkc2V0dXAtPnBvc3RVcGdyYWRlKCRwcmV2aW91c1ZlcnNpb24sICRzdGF0ZUNoYW5nZXMpOwoJCX0KCgkJJHRoaXMtPnJlc2V0UGVuZGluZ0FjdGlvbigpOwoJCSR0aGlzLT5zeW5jRnJvbUpzb24oKTsKCgkJJGpzb24gPSAkdGhpcy0+Z2V0SnNvbigpOwoJCVxYRjo6ZmlyZSgnYWRkb25fcG9zdF91cGdyYWRlJywgWyR0aGlzLCAkaW5zdGFsbGVkLCAkanNvbiwgJiRzdGF0ZUNoYW5nZXNdLCAkaW5zdGFsbGVkLT5hZGRvbl9pZCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHByZVVuaW5zdGFsbCgpCgl7CgkJJGluc3RhbGxlZCA9ICR0aGlzLT5pbnN0YWxsZWRBZGRPbjsKCQlpZiAoISRpbnN0YWxsZWQpCgkJewoJCQl0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCJBZGQtb24gaXMgbm90IGluc3RhbGxlZCIpOwoJCX0KCgkJJGluc3RhbGxlZC0+aXNfcHJvY2Vzc2luZyA9IHRydWU7CgkJJGluc3RhbGxlZC0+bGFzdF9wZW5kaW5nX2FjdGlvbiA9ICd1bmluc3RhbGw6MCc7CgkJJGluc3RhbGxlZC0+c2F2ZUlmQ2hhbmdlZCgpOwoKCQkkanNvbiA9ICR0aGlzLT5nZXRKc29uKCk7CgkJXFhGOjpmaXJlKCdhZGRvbl9wcmVfdW5pbnN0YWxsJywgWyR0aGlzLCAkaW5zdGFsbGVkLCAkanNvbl0sICRpbnN0YWxsZWQtPmFkZG9uX2lkKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gcG9zdFVuaW5zdGFsbCgpCgl7CgkJLyoqIEB2YXIgRmlsZUNoZWNrICRmaWxlQ2hlY2sgKi8KCQkkZmlsZUNoZWNrID0gXFhGOjplbSgpLT5jcmVhdGUoRmlsZUNoZWNrOjpjbGFzcyk7CgkJJGZpbGVDaGVjay0+c2F2ZSgpOwoKCQlcWEY6OmFwcCgpLT5qb2JNYW5hZ2VyKCktPmVucXVldWVVbmlxdWUoJ2ZpbGVDaGVjaycsIFxYRlxKb2JcRmlsZUNoZWNrOjpjbGFzcywgWwoJCQknY2hlY2tfaWQnID0+ICRmaWxlQ2hlY2stPmNoZWNrX2lkLAoJCQknYXV0b21hdGVkJyA9PiB0cnVlLAoJCV0sIGZhbHNlKTsKCgkJJGpzb24gPSAkdGhpcy0+Z2V0SnNvbigpOwoKCQlcWEY6OmZpcmUoJ2FkZG9uX3Bvc3RfdW5pbnN0YWxsJywgWyR0aGlzLCAkdGhpcy0+YWRkT25JZCwgJGpzb25dLCAkdGhpcy0+YWRkT25JZCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHByZVJlYnVpbGQoKQoJewoJCSRpbnN0YWxsZWQgPSAkdGhpcy0+aW5zdGFsbGVkQWRkT247CgkJaWYgKCEkaW5zdGFsbGVkKQoJCXsKCQkJdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiQWRkLW9uIGlzIG5vdCBpbnN0YWxsZWQiKTsKCQl9CgoJCSRpbnN0YWxsZWQtPmlzX3Byb2Nlc3NpbmcgPSB0cnVlOwoJCSRpbnN0YWxsZWQtPnNhdmVJZkNoYW5nZWQoKTsKCgkJJGpzb24gPSAkdGhpcy0+Z2V0SnNvbigpOwoJCVxYRjo6ZmlyZSgnYWRkb25fcHJlX3JlYnVpbGQnLCBbJHRoaXMsICRpbnN0YWxsZWQsICRqc29uXSwgJGluc3RhbGxlZC0+YWRkb25faWQpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBwb3N0UmVidWlsZCgpCgl7CgkJJGluc3RhbGxlZCA9ICR0aGlzLT5pbnN0YWxsZWRBZGRPbjsKCgkJJHNldHVwID0gJHRoaXMtPmdldFNldHVwKCk7CgkJaWYgKCRzZXR1cCkKCQl7CgkJCSRzZXR1cC0+cG9zdFJlYnVpbGQoKTsKCQl9CgoJCSR0aGlzLT5zeW5jRnJvbUpzb24oKTsKCgkJJGpzb24gPSAkdGhpcy0+Z2V0SnNvbigpOwoJCVxYRjo6ZmlyZSgnYWRkb25fcG9zdF9yZWJ1aWxkJywgWyR0aGlzLCAkaW5zdGFsbGVkLCAkanNvbl0sICRpbnN0YWxsZWQtPmFkZG9uX2lkKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gb25BY3RpdmVDaGFuZ2UoJG5ld0FjdGl2ZSwgYXJyYXkgJiRqb2JMaXN0KQoJewoJCSRzZXR1cCA9ICR0aGlzLT5nZXRTZXR1cCgpOwoJCWlmICgkc2V0dXApCgkJewoJCQkkc2V0dXAtPm9uQWN0aXZlQ2hhbmdlKCRuZXdBY3RpdmUsICRqb2JMaXN0KTsKCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHBvc3REYXRhSW1wb3J0KCkKCXsKCQkvLyBhbGwgZGF0YSB3aWxsIGJlIGltcG9ydGVkLCByZS1lbmFibGUgdGhpcyBzbyBwb3N0WCBtZXRob2RzIHdpbGwgaGF2ZSBhY2Nlc3MgdG8gdGhlaXIgbWV0aG9kcwoJCSRpbnN0YWxsZWQgPSAkdGhpcy0+aW5zdGFsbGVkQWRkT247CgkJaWYgKCEkaW5zdGFsbGVkKQoJCXsKCQkJdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiQWRkLW9uIGlzIG5vdCBpbnN0YWxsZWQiKTsKCQl9CgoJCSRpbnN0YWxsZWQtPmlzX3Byb2Nlc3NpbmcgPSBmYWxzZTsKCQkkaW5zdGFsbGVkLT5zYXZlSWZDaGFuZ2VkKCk7CgoJCVxYRjo6cmVwb3NpdG9yeShPcHRpb25SZXBvc2l0b3J5OjpjbGFzcyktPnVwZGF0ZU9wdGlvbignanNMYXN0VXBkYXRlJywgXFhGOjokdGltZSk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHN5bmNGcm9tSnNvbigkZXh0cmFDaGFuZ2VzID0gW10pCgl7CgkJJGluc3RhbGxlZCA9ICR0aGlzLT5pbnN0YWxsZWRBZGRPbjsKCQlpZiAoISRpbnN0YWxsZWQpCgkJewoJCQl0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCJBZGQtb24gaXMgbm90IGluc3RhbGxlZCIpOwoJCX0KCgkJJGpzb24gPSAkdGhpcy0+Z2V0SnNvbigpOwoKCQkkaW5zdGFsbGVkLT5idWxrU2V0KCRleHRyYUNoYW5nZXMpOwoJCSRpbnN0YWxsZWQtPmJ1bGtTZXQoWwoJCQkndGl0bGUnID0+ICRqc29uWyd0aXRsZSddLAoJCQkndmVyc2lvbl9zdHJpbmcnID0+ICRqc29uWyd2ZXJzaW9uX3N0cmluZyddLAoJCQkndmVyc2lvbl9pZCcgPT4gJGpzb25bJ3ZlcnNpb25faWQnXSwKCQkJJ2pzb25faGFzaCcgPT4gJHRoaXMtPmdldEpzb25IYXNoKCksCgkJXSk7CgkJJGluc3RhbGxlZC0+c2F2ZUlmQ2hhbmdlZCgpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjYW5JbnN0YWxsKCkKCXsKCQlyZXR1cm4gISR0aGlzLT5pc0luc3RhbGxlZCgpCgkJCSYmICR0aGlzLT5pc0F2YWlsYWJsZSgpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjYW5Vbmluc3RhbGwoKQoJewoJCXJldHVybiAkdGhpcy0+aXNJbnN0YWxsZWQoKQoJCQkmJiAkdGhpcy0+Y2FuRWRpdCgpCgkJCSYmICgKCQkJCSEkdGhpcy0+anNvbiB8fCAoJHRoaXMtPmlzRmlsZVZlcnNpb25WYWxpZCgpICYmICEkdGhpcy0+aGFzTWlzc2luZ0ZpbGVzKCkpCgkJCSk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGNhbkVkaXQoKQoJewoJCXJldHVybiAkdGhpcy0+aW5zdGFsbGVkQWRkT24KCQkJJiYgJHRoaXMtPmluc3RhbGxlZEFkZE9uLT5jYW5FZGl0KCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGNhblJlYnVpbGQoKQoJewoJCS8vIGFzIGxvbmcgYXMgdGhlIEpTT04gaXMgZm9yIHRoZSBjb3JyZWN0IHZlcnNpb24sIHdlJ3JlIG9rCgkJcmV0dXJuICR0aGlzLT5pc0luc3RhbGxlZCgpICYmICR0aGlzLT5pc0ZpbGVWZXJzaW9uVmFsaWQoKSAmJiAkdGhpcy0+Y2FuRWRpdCgpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjYW5EZWxldGVGaWxlcygpOiBib29sCgl7CgkJcmV0dXJuICR0aGlzLT5jYW5JbnN0YWxsKCkKCQkJJiYgJHRoaXMtPmhhc0hhc2hlcygpCgkJCSYmICEkdGhpcy0+aXNEZXZPdXRwdXRBdmFpbGFibGUoKQoJCQkmJiAkdGhpcy0+bWFuYWdlci0+Y2FuRGVsZXRlRmlsZXNGb3JBZGRPbigkdGhpcy0+YWRkT25JZCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldFVuZGVsZXRhYmxlRmlsZXMoKTogYXJyYXkKCXsKCQkkdW5kZWxldGFibGUgPSBbXTsKCgkJJGhhc2hlZEZpbGVzID0gYXJyYXlfa2V5cygkdGhpcy0+Z2V0SGFzaGVzKCkpOwoJCWZvcmVhY2ggKCRoYXNoZWRGaWxlcyBBUyAkZmlsZSkKCQl7CgkJCWlmICghaXNfd3JpdGFibGUoXFhGOjpnZXRSb290RGlyZWN0b3J5KCkgLiBcWEY6OiREUyAuICRmaWxlKSkKCQkJewoJCQkJJHVuZGVsZXRhYmxlW10gPSAkZmlsZTsKCQkJfQoJCX0KCgkJc29ydCgkdW5kZWxldGFibGUsIFNPUlRfTkFUVVJBTCB8IFNPUlRfRkxBR19DQVNFKTsKCgkJcmV0dXJuICR1bmRlbGV0YWJsZTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0VW5kZWxldGFibGVDb25mbGljdGluZ0ZpbGVzKCk6IGFycmF5Cgl7CgkJJHVuZGVsZXRhYmxlID0gW107CgoJCSRoYXNoZWRGaWxlcyA9IGFycmF5X2tleXMoJHRoaXMtPmdldEhhc2hlcygpKTsKCQkkZXhpc3RpbmdIYXNoZWRGaWxlcyA9IGFycmF5X2tleXMoJHRoaXMtPm1hbmFnZXItPmdldEFkZE9uSGFzaGVzKCR0aGlzLT5hZGRPbklkKSk7CgoJCSRjb25mbGljdHMgPSBhcnJheV9pbnRlcnNlY3QoJGhhc2hlZEZpbGVzLCAkZXhpc3RpbmdIYXNoZWRGaWxlcyk7CgkJaWYgKCFlbXB0eSgkY29uZmxpY3RzKSkKCQl7CgkJCSR1bmRlbGV0YWJsZSA9IGFycmF5X3JlcGxhY2UoJHVuZGVsZXRhYmxlLCAkY29uZmxpY3RzKTsKCQl9CgoJCSR4Zkhhc2hlc1BhdGggPSBcWEY6OmdldEFkZE9uRGlyZWN0b3J5KCkgLiBcWEY6OiREUyAuICdYRicgLiBcWEY6OiREUyAuICdoYXNoZXMuanNvbic7CgkJaWYgKGZpbGVfZXhpc3RzKCR4Zkhhc2hlc1BhdGgpKQoJCXsKCQkJJHhmSGFzaGVkRmlsZXMgPSBhcnJheV9rZXlzKGpzb25fZGVjb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCR4Zkhhc2hlc1BhdGgpLCB0cnVlKSk7CgoJCQkkeGZDb25mbGljdHMgPSBhcnJheV9pbnRlcnNlY3QoJGhhc2hlZEZpbGVzLCAkeGZIYXNoZWRGaWxlcyk7CgkJCWlmICghZW1wdHkoJHhmQ29uZmxpY3RzKSkKCQkJewoJCQkJJHVuZGVsZXRhYmxlID0gYXJyYXlfcmVwbGFjZSgkdW5kZWxldGFibGUsICR4ZkNvbmZsaWN0cyk7CgkJCX0KCQl9CgoJCXNvcnQoJHVuZGVsZXRhYmxlLCBTT1JUX05BVFVSQUwgfCBTT1JUX0ZMQUdfQ0FTRSk7CgoJCXJldHVybiAkdW5kZWxldGFibGU7Cgl9CgoJI1tcUmV0dXJuVHlwZVdpbGxDaGFuZ2VdCglwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0R2V0KCRrZXkpCgl7CgkJc3dpdGNoICgka2V5KQoJCXsKCQkJY2FzZSAnYWRkb24nOiByZXR1cm4gJHRoaXMtPmdldEluc3RhbGxlZEFkZE9uKCk7CgkJCWNhc2UgJ2FkZG9uX2lkJzogcmV0dXJuICR0aGlzLT5nZXRBZGRPbklkKCk7CgkJCWNhc2UgJ2FkZG9uX2lkX3VybCc6IHJldHVybiAkdGhpcy0+Z2V0QWRkT25JZFVybCgpOwoJCQljYXNlICdqc29uJzogcmV0dXJuICR0aGlzLT5nZXRKc29uKCk7CgkJCWNhc2UgJ2pzb25fdmVyc2lvbl9pZCc6IHJldHVybiAkdGhpcy0+anNvblsndmVyc2lvbl9pZCddOwoJCQljYXNlICdqc29uX3ZlcnNpb25fc3RyaW5nJzogcmV0dXJuICR0aGlzLT5qc29uWyd2ZXJzaW9uX3N0cmluZyddOwoJCQljYXNlICdtaXNzaW5nX2ZpbGVzJzogcmV0dXJuICR0aGlzLT5nZXRNaXNzaW5nRmlsZXMoKTsKCQkJY2FzZSAnYWRkaXRpb25hbF9maWxlcyc6IHJldHVybiAkdGhpcy0+Z2V0QnVpbGRKc29uKClbJ2FkZGl0aW9uYWxfZmlsZXMnXTsKCQkJY2FzZSAnbGVnYWN5X2FkZG9uX2lkJzogcmV0dXJuICR0aGlzLT5sZWdhY3lBZGRPbklkOwoJCX0KCgkJaWYgKCR0aGlzLT5pbnN0YWxsZWRBZGRPbiAmJiBpc3NldCgkdGhpcy0+aW5zdGFsbGVkQWRkT25bJGtleV0pKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5pbnN0YWxsZWRBZGRPblska2V5XTsKCQl9CgoJCXJldHVybiAkdGhpcy0+anNvblska2V5XSA/PyBudWxsOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBfX2dldCgka2V5KQoJewoJCXJldHVybiAkdGhpcy0+b2Zmc2V0R2V0KCRrZXkpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJGtleSk6IGJvb2wKCXsKCQlyZXR1cm4gJHRoaXMtPm9mZnNldEdldCgka2V5KSAhPT0gbnVsbDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0U2V0KCRrZXksICR2YWx1ZSk6IHZvaWQKCXsKCQl0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCJDYW5ub3Qgd3JpdGUgdG8gYW4gYWRkLW9uIGNsYXNzIik7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIG9mZnNldFVuc2V0KCRrZXkpOiB2b2lkCgl7CgkJdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiQ2Fubm90IHdyaXRlIHRvIGFuIGFkZC1vbiBjbGFzcyIpOwoJfQp9Cg==","bytes":18649,"path":"src/XF/AddOn/AddOn.php","present":true,"sha256":"0e0346a046fff6bde9850cb53e9dc0d0b5379387029dc16925e562fa141ab422"},"src/XF/AddOn/Manager.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBYRlxBZGRPbjsKCnVzZSBYRlxGaW5kZXJcQWRkT25GaW5kZXI7CnVzZSBYRlxVdGlsXEFycjsKdXNlIFhGXFV0aWxcUGhwOwoKdXNlIGZ1bmN0aW9uIGluX2FycmF5LCBpc19hcnJheTsKCmNsYXNzIE1hbmFnZXIKewoJcHJvdGVjdGVkICRhZGRPbkRpcjsKCglwcm90ZWN0ZWQgJGpzb25JbmZvOwoKCS8qKgoJICogQHZhciBcWEZcRW50aXR5XEFkZE9uW118bnVsbAoJICovCglwcm90ZWN0ZWQgJGluc3RhbGxlZEFkZE9uczsKCgkvKioKCSAqIEB2YXIgQWRkT25bXXxudWxsCgkgKi8KCXByb3RlY3RlZCAkYWxsQWRkT25zOwoKCS8qKgoJICogQHZhciBzdHJpbmdbXXxudWxsCgkgKi8KCXByb3RlY3RlZCAkYXZhaWxhYmxlQWRkT25JZHM7CgoJLyoqCgkgKiBAdmFyIGFycmF5PHN0cmluZywgc3RyaW5nPnxudWxsIFVwcGVyY2FzZSBhZGQtb24gSUQgPT4gY29ycmVjdCBjYXNlIGFkZC1vbiBJRAoJICovCglwcm90ZWN0ZWQgJGFkZE9uSWRMb29rdXA7CgoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRhZGRPbkRpcikKCXsKCQkkdGhpcy0+YWRkT25EaXIgPSBydHJpbSgkYWRkT25EaXIsICcvXFwnKTsKCX0KCgkvKioKCSAqIEByZXR1cm4gQWRkT25bXQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0QWxsQWRkT25zKCkKCXsKCQlpZiAoJHRoaXMtPmFsbEFkZE9ucyA9PT0gbnVsbCkKCQl7CgkJCSRpbnN0YWxsZWQgPSAkdGhpcy0+Z2V0SW5zdGFsbGVkRW50aXRpZXMoKTsKCQkJJGhhbmRsZXJzID0gW107CgoJCQlmb3JlYWNoICgkdGhpcy0+Z2V0QWxsSnNvbkluZm8oKSBBUyAkaWQgPT4gJGluZm8pCgkJCXsKCQkJCSRleGlzdGluZyA9ICRpbnN0YWxsZWRbJGlkXSA/PyBudWxsOwoJCQkJJGhhbmRsZXJzWyRpZF0gPSAkdGhpcy0+bG9hZEFkZE9uQ2xhc3MoJGV4aXN0aW5nLCAkaW5mbyk7CgkJCX0KCgkJCWZvcmVhY2ggKCRpbnN0YWxsZWQgQVMgJGlkID0+ICRleGlzdGluZykKCQkJewoJCQkJaWYgKCFpc3NldCgkaGFuZGxlcnNbJGlkXSkpCgkJCQl7CgkJCQkJJGhhbmRsZXJzWyRpZF0gPSAkdGhpcy0+bG9hZEFkZE9uQ2xhc3MoJGV4aXN0aW5nKTsKCQkJCX0KCQkJfQoKCQkJJGhhbmRsZXJzID0gQXJyOjpjb2x1bW5Tb3J0KCRoYW5kbGVycywgJ3RpdGxlJywgJ3N0cmNhc2VjbXAnKTsKCgkJCSR0aGlzLT5hbGxBZGRPbnMgPSAkaGFuZGxlcnM7CgkJfQoKCQlyZXR1cm4gJHRoaXMtPmFsbEFkZE9uczsKCX0KCgkvKioKCSAqIEByZXR1cm4gQWRkT25bXQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0SW5zdGFsbGVkQWRkT25zKCkKCXsKCQkkYWRkT25zID0gJHRoaXMtPmdldEFsbEFkZE9ucygpOwoJCWZvcmVhY2ggKCRhZGRPbnMgQVMgJGsgPT4gJGFkZE9uKQoJCXsKCQkJaWYgKCEkYWRkT24tPmlzSW5zdGFsbGVkKCkpCgkJCXsKCQkJCXVuc2V0KCRhZGRPbnNbJGtdKTsKCQkJfQoJCX0KCgkJcmV0dXJuICRhZGRPbnM7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldEFkZE9uSGFzaGVzKCRleGNsdWRlID0gbnVsbCk6IGFycmF5Cgl7CgkJaWYgKCRleGNsdWRlID09PSBudWxsKQoJCXsKCQkJJGV4Y2x1ZGUgPSBbXTsKCQl9CgkJaWYgKCFpc19hcnJheSgkZXhjbHVkZSkpCgkJewoJCQkkZXhjbHVkZSA9IFskZXhjbHVkZV07CgkJfQoKCQkkaGFzaGVzID0gW107CgoJCWZvcmVhY2ggKCR0aGlzLT5nZXRBbGxBZGRPbnMoKSBBUyAkYWRkT24pCgkJewoJCQlpZiAoaW5fYXJyYXkoJGFkZE9uLT5nZXRBZGRPbklkKCksICRleGNsdWRlKSkKCQkJewoJCQkJY29udGludWU7CgkJCX0KCgkJCSRhZGRPbkhhc2hlcyA9ICRhZGRPbi0+Z2V0SGFzaGVzKCk7CgkJCWlmICgkYWRkT25IYXNoZXMpCgkJCXsKCQkJCSRoYXNoZXMgPSBhcnJheV9yZXBsYWNlKCRoYXNoZXMsICRhZGRPbkhhc2hlcyk7CgkJCX0KCQl9CgoJCWtzb3J0KCRoYXNoZXMsIFNPUlRfTkFUVVJBTCB8IFNPUlRfRkxBR19DQVNFKTsKCgkJcmV0dXJuICRoYXNoZXM7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldEJ5SWQoJGFkZE9uSWQpCgl7CgkJJGFkZE9uSWQgPSAkdGhpcy0+Y29lcmNlQWRkT25JZCgkYWRkT25JZCk7CgoJCSRpbnN0YWxsZWRMaXN0ID0gJHRoaXMtPmdldEluc3RhbGxlZEVudGl0aWVzKCk7CgkJJGluc3RhbGxlZCA9ICgkaW5zdGFsbGVkTGlzdFskYWRkT25JZF0gPz8gbnVsbCk7CgkJJGpzb25JbmZvID0gJHRoaXMtPmdldEFkZE9uSnNvbkluZm8oJGFkZE9uSWQpOwoKCQlpZiAoISRpbnN0YWxsZWQgJiYgISRqc29uSW5mbykKCQl7CgkJCXJldHVybiBudWxsOwoJCX0KCgkJcmV0dXJuICR0aGlzLT5sb2FkQWRkT25DbGFzcygkaW5zdGFsbGVkLCAkanNvbkluZm8pOwoJfQoKCXByb3RlY3RlZCBmdW5jdGlvbiBjb2VyY2VBZGRPbklkKCRhZGRPbklkKQoJewoJCWlmICgkdGhpcy0+YWRkT25JZExvb2t1cCA9PT0gbnVsbCkKCQl7CgkJCSRhZGRPbklkcyA9ICR0aGlzLT5nZXRBdmFpbGFibGVBZGRPbklkcygpOwoJCQkkdGhpcy0+YWRkT25JZExvb2t1cCA9IFtdOwoKCQkJZm9yZWFjaCAoJGFkZE9uSWRzIEFTICRpZCkKCQkJewoJCQkJJHRoaXMtPmFkZE9uSWRMb29rdXBbc3RydG91cHBlcigkaWQpXSA9ICRpZDsKCQkJfQoJCX0KCgkJJHVwcGVyID0gc3RydG91cHBlcigkYWRkT25JZCk7CgkJcmV0dXJuICR0aGlzLT5hZGRPbklkTG9va3VwWyR1cHBlcl0gPz8gJGFkZE9uSWQ7Cgl9CgoJLyoqCgkgKiBAcmV0dXJuIFxYRlxFbnRpdHlcQWRkT25bXQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SW5zdGFsbGVkRW50aXRpZXMoKQoJewoJCWlmICgkdGhpcy0+aW5zdGFsbGVkQWRkT25zID09PSBudWxsKQoJCXsKCQkJJGluc3RhbGxlZEFkZE9ucyA9IFxYRjo6ZW0oKS0+Z2V0RmluZGVyKEFkZE9uRmluZGVyOjpjbGFzcyktPmZldGNoKCk7CgkJCXVuc2V0KCRpbnN0YWxsZWRBZGRPbnNbJ1hGJ10pOwoKCQkJJHRoaXMtPmluc3RhbGxlZEFkZE9ucyA9ICRpbnN0YWxsZWRBZGRPbnMtPnRvQXJyYXkoKTsKCQl9CgoJCXJldHVybiAkdGhpcy0+aW5zdGFsbGVkQWRkT25zOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiByZXNldEFkZE9uQ2FjaGUoKQoJewoJCSR0aGlzLT5pbnN0YWxsZWRBZGRPbnMgPSBudWxsOwoJCSR0aGlzLT5hbGxBZGRPbnMgPSBudWxsOwoJCSR0aGlzLT5hdmFpbGFibGVBZGRPbklkcyA9IG51bGw7CgkJJHRoaXMtPmFkZE9uSWRMb29rdXAgPSBudWxsOwoJfQoKCXByb3RlY3RlZCBmdW5jdGlvbiBpc1ZhbGlkRGlyKFxEaXJlY3RvcnlJdGVyYXRvciAkZW50cnkpCgl7CgkJLyoqIEB2YXIgXERpcmVjdG9yeUl0ZXJhdG9yICRlbnRyeSAqLwoJCWlmICghJGVudHJ5LT5pc0RpcigpCgkJCXx8ICRlbnRyeS0+aXNEb3QoKQoJCQl8fCAhcHJlZ19tYXRjaCgnL15bYS16MC05X10rJC9pJywgJGVudHJ5LT5nZXRCYXNlbmFtZSgpKQoJCSkKCQl7CgkJCXJldHVybiBmYWxzZTsKCQl9CgoJCXJldHVybiB0cnVlOwoJfQoKCXByb3RlY3RlZCBmdW5jdGlvbiBwcmVwYXJlQWRkT25JZEZvclBhdGgoJGFkZE9uSWQpCgl7CgkJaWYgKHN0cnBvcygkYWRkT25JZCwgJy8nKSAhPT0gZmFsc2UpCgkJewoJCQkkYWRkT25JZCA9IHN0cl9yZXBsYWNlKCcvJywgXFhGOjokRFMsICRhZGRPbklkKTsKCQl9CgkJcmV0dXJuICRhZGRPbklkOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBpc0RpckFkZE9uUm9vdChcRGlyZWN0b3J5SXRlcmF0b3IgJGVudHJ5KQoJewoJCSRkcyA9IFxYRjo6JERTOwoKCQkkcGF0aG5hbWUgPSAkZW50cnktPmdldFBhdGhuYW1lKCk7CgkJJGFkZE9uSnNvbiA9ICJ7JHBhdGhuYW1lfXskZHN9YWRkb24uanNvbiI7CgkJJG91dHB1dERpciA9ICJ7JHBhdGhuYW1lfXskZHN9X291dHB1dCI7CgkJJGRhdGFEaXIgPSAieyRwYXRobmFtZX17JGRzfV9kYXRhIjsKCgkJaWYgKGZpbGVfZXhpc3RzKCRhZGRPbkpzb24pIHx8IGZpbGVfZXhpc3RzKCRvdXRwdXREaXIpIHx8IGZpbGVfZXhpc3RzKCRkYXRhRGlyKSkKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRBdmFpbGFibGVBZGRPbklkcygpCgl7CgkJaWYgKCR0aGlzLT5hdmFpbGFibGVBZGRPbklkcyA9PT0gbnVsbCkKCQl7CgkJCSRhZGRPbklkcyA9IFtdOwoJCQlmb3JlYWNoIChuZXcgXERpcmVjdG9yeUl0ZXJhdG9yKCR0aGlzLT5hZGRPbkRpcikgQVMgJGVudHJ5KQoJCQl7CgkJCQlpZiAoISR0aGlzLT5pc1ZhbGlkRGlyKCRlbnRyeSkpCgkJCQl7CgkJCQkJY29udGludWU7CgkJCQl9CgoJCQkJaWYgKCR0aGlzLT5pc0RpckFkZE9uUm9vdCgkZW50cnkpIHx8ICRlbnRyeS0+Z2V0QmFzZW5hbWUoKSA9PSAnWEYnKQoJCQkJewoJCQkJCSRhZGRPbklkc1tdID0gJGVudHJ5LT5nZXRCYXNlbmFtZSgpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCSR2ZW5kb3JQcmVmaXggPSAkZW50cnktPmdldEJhc2VuYW1lKCk7CgkJCQkJZm9yZWFjaCAobmV3IFxEaXJlY3RvcnlJdGVyYXRvcigkZW50cnktPmdldFBhdGhuYW1lKCkpIEFTICRhZGRPbkRpcikKCQkJCQl7CgkJCQkJCWlmICghJHRoaXMtPmlzVmFsaWREaXIoJGFkZE9uRGlyKSkKCQkJCQkJewoJCQkJCQkJY29udGludWU7CgkJCQkJCX0KCgkJCQkJCWlmICgkdGhpcy0+aXNEaXJBZGRPblJvb3QoJGFkZE9uRGlyKSkKCQkJCQkJewoJCQkJCQkJJGFkZE9uSWRzW10gPSAiJHZlbmRvclByZWZpeC97JGFkZE9uRGlyLT5nZXRCYXNlbmFtZSgpfSI7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQkJJHRoaXMtPmF2YWlsYWJsZUFkZE9uSWRzID0gJGFkZE9uSWRzOwoJCX0KCgkJcmV0dXJuICR0aGlzLT5hdmFpbGFibGVBZGRPbklkczsKCX0KCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWxsSnNvbkluZm8oKQoJewoJCWlmICgkdGhpcy0+anNvbkluZm8gPT09IG51bGwpCgkJewoJCQkkYXZhaWxhYmxlID0gW107CgoJCQkkYWRkT25JZHMgPSAkdGhpcy0+Z2V0QXZhaWxhYmxlQWRkT25JZHMoKTsKCQkJZm9yZWFjaCAoJGFkZE9uSWRzIEFTICRhZGRPbklkKQoJCQl7CgkJCQkkYWRkT25JZERpciA9ICR0aGlzLT5wcmVwYXJlQWRkT25JZEZvclBhdGgoJGFkZE9uSWQpOwoJCQkJZm9yZWFjaCAobmV3IFxEaXJlY3RvcnlJdGVyYXRvcigkdGhpcy0+YWRkT25EaXIgLiBcWEY6OiREUyAuICRhZGRPbklkRGlyKSBBUyAkZmlsZSkKCQkJCXsKCQkJCQkkaGFzSnNvbiA9ICgkZmlsZS0+aXNGaWxlKCkgJiYgJGZpbGUtPmdldEJhc2VuYW1lKCkgPT09ICdhZGRvbi5qc29uJyk7CgkJCQkJaWYgKCRoYXNKc29uKQoJCQkJCXsKCQkJCQkJJGF2YWlsYWJsZVskYWRkT25JZF0gPSAkdGhpcy0+Z2V0QWRkT25Kc29uSW5mbygkYWRkT25JZCk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJJHRoaXMtPmpzb25JbmZvID0gJGF2YWlsYWJsZTsKCQl9CgoJCXJldHVybiAkdGhpcy0+anNvbkluZm87Cgl9CgoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEFkZE9uSnNvbkluZm8oJGFkZE9uSWQpCgl7CgkJaWYgKCFwcmVnX21hdGNoKCcjXlthLXpdW2EtejAtOV0qKC9bYS16XVthLXowLTldKik/JCNpJywgJGFkZE9uSWQpKQoJCXsKCQkJcmV0dXJuIG51bGw7CgkJfQoKCQkkZmlsZSA9ICR0aGlzLT5nZXRBZGRPbkpzb25GaWxlKCRhZGRPbklkKTsKCQlpZiAoIWZpbGVfZXhpc3RzKCRmaWxlKSB8fCAhaXNfcmVhZGFibGUoJGZpbGUpKQoJCXsKCQkJcmV0dXJuIG51bGw7CgkJfQoKCQkkanNvbiA9IGpzb25fZGVjb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKSwgdHJ1ZSk7CgkJJGpzb25bJ2FkZG9uX2lkJ10gPSAkYWRkT25JZDsKCQlyZXR1cm4gJGpzb247Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldEFkZE9uUGF0aCgkYWRkT25JZCkKCXsKCQkkYWRkT25JZERpciA9ICR0aGlzLT5wcmVwYXJlQWRkT25JZEZvclBhdGgoJGFkZE9uSWQpOwoJCXJldHVybiAkdGhpcy0+YWRkT25EaXIgLiBcWEY6OiREUyAuICRhZGRPbklkRGlyOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRBZGRPbkpzb25GaWxlKCRhZGRPbklkKQoJewoJCXJldHVybiAkdGhpcy0+Z2V0QWRkT25QYXRoKCRhZGRPbklkKSAuIFxYRjo6JERTIC4gJ2FkZG9uLmpzb24nOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjaGVja0FkZE9uUmVxdWlyZW1lbnRzKGFycmF5ICRyZXF1aXJlbWVudHMsICR0aXRsZSwgJiRlcnJvcnMgPSBbXSkKCXsKCQkkZXJyb3JzID0gW107CgkJJGFkZE9ucyA9IFxYRjo6YXBwKCktPmNvbnRhaW5lcignYWRkb24uY2FjaGUnKTsKCgkJZm9yZWFjaCAoJHJlcXVpcmVtZW50cyBBUyAkcHJvZHVjdEtleSA9PiAkcmVxdWlyZW1lbnQpCgkJewoJCQlpZiAoIWlzX2FycmF5KCRyZXF1aXJlbWVudCkpCgkJCXsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCVskdmVyc2lvbiwgJHByb2R1Y3RdID0gJHJlcXVpcmVtZW50OwoKCQkJJGVuYWJsZWQgPSBmYWxzZTsKCQkJJHZlcnNpb25WYWxpZCA9IGZhbHNlOwoKCQkJaWYgKHN0cnBvcygkcHJvZHVjdEtleSwgJ3BocC1leHQvJykgPT09IDApCgkJCXsKCQkJCSRwYXJ0cyA9IGV4cGxvZGUoJy8nLCAkcHJvZHVjdEtleSwgMik7CgkJCQlpZiAoaXNzZXQoJHBhcnRzWzFdKSkKCQkJCXsKCQkJCQkkZW5hYmxlZCA9IGV4dGVuc2lvbl9sb2FkZWQoJHBhcnRzWzFdKTsKCgkJCQkJaWYgKCR2ZXJzaW9uID09PSAnKicpCgkJCQkJewoJCQkJCQkkdmVyc2lvblZhbGlkID0gdHJ1ZTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJJHZlcnNpb25WYWxpZCA9IHZlcnNpb25fY29tcGFyZShwaHB2ZXJzaW9uKCRwYXJ0c1sxXSksICR2ZXJzaW9uLCAnPj0nKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJZWxzZSBpZiAoJHByb2R1Y3RLZXkgPT09ICdwaHAnKQoJCQl7CgkJCQkkZW5hYmxlZCA9IHRydWU7CgkJCQkkdmVyc2lvblZhbGlkID0gdmVyc2lvbl9jb21wYXJlKHBocHZlcnNpb24oKSwgJHZlcnNpb24sICc+PScpOwoJCQl9CgkJCWVsc2UgaWYgKCRwcm9kdWN0S2V5ID09PSAnbXlzcWwnKQoJCQl7CgkJCQkkZGIgPSBcWEY6OmRiKCk7CgkJCQkkbXlTcWxWZXJzaW9uID0gUGhwOjpnZXRDb21wYXRpYmxlTXlTcWxWZXJzaW9uKAoJCQkJCSRkYi0+Z2V0U2VydmVyVmVyc2lvbigpLAoJCQkJCSRkYi0+Z2V0Q29ubmVjdGlvbigpLT5zZXJ2ZXJfaW5mbwoJCQkJKTsKCQkJCWlmICgkbXlTcWxWZXJzaW9uKQoJCQkJewoJCQkJCSRlbmFibGVkID0gdHJ1ZTsKCQkJCQkkdmVyc2lvblZhbGlkID0gdmVyc2lvbl9jb21wYXJlKHN0cnRvbG93ZXIoJG15U3FsVmVyc2lvbiksICR2ZXJzaW9uLCAnPj0nKTsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRlbmFibGVkID0gaXNzZXQoJGFkZE9uc1skcHJvZHVjdEtleV0pOwoJCQkJJHZlcnNpb25WYWxpZCA9ICgkdmVyc2lvbiA9PT0gJyonIHx8ICgkZW5hYmxlZCAmJiAkYWRkT25zWyRwcm9kdWN0S2V5XSA+PSAkdmVyc2lvbikpOwoJCQl9CgoJCQlpZiAoISRlbmFibGVkIHx8ICEkdmVyc2lvblZhbGlkKQoJCQl7CgkJCQkkZXJyb3JzW10gPSAieyR0aXRsZX0gcmVxdWlyZXMgJHByb2R1Y3QuIjsKCQkJfQoJCX0KCgkJcmV0dXJuICRlcnJvcnMgPyBmYWxzZSA6IHRydWU7Cgl9CgoJLyoqCgkgKiBAcGFyYW0gJGFkZE9uT3JJZAoJICoKCSAqIEByZXR1cm4gQWRkT24KCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGxvYWRBZGRPbkNsYXNzKCRhZGRPbk9ySWQsID9hcnJheSAkanNvbkluZm8gPSBudWxsKQoJewoJCWlmICghJGFkZE9uT3JJZCkKCQl7CgkJCSRhZGRPbk9ySWQgPSAkanNvbkluZm9bJ2FkZG9uX2lkJ10gPz8gbnVsbDsKCQl9CgkJaWYgKCEkYWRkT25PcklkKQoJCXsKCQkJdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIk11c3QgcHJvdmlkZSBhbiBleGlzdGluZyBhZGQtb24gb3IgYWRkLW9uIEpTT04iKTsKCQl9CgoJCXJldHVybiBuZXcgQWRkT24oJGFkZE9uT3JJZCwgJHRoaXMpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjYW5EZWxldGVGaWxlc0ZvckFkZE9uKHN0cmluZyAkYWRkT25JZCk6IGJvb2wKCXsKCQlyZXR1cm4gdHJ1ZTsKCX0KfQo=","bytes":7961,"path":"src/XF/AddOn/Manager.php","present":true,"sha256":"04dead4bc9b1818b77957cd9d3f7f807d2cfa746ee9c8335a93504f38abd77ac"},"src/XF/AddOn/StepRunnerInstallTrait.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBYRlxBZGRPbjsKCnVzZSBmdW5jdGlvbiBpc19hcnJheTsKCi8qKgogKiBAcHJvcGVydHkgQWRkT24gJGFkZE9uCiAqLwp0cmFpdCBTdGVwUnVubmVySW5zdGFsbFRyYWl0CnsKCS8qKgoJICogQHBhcmFtIGFycmF5ICRzdGVwUGFyYW1zCgkgKgoJICogQHJldHVybiBudWxsfFN0ZXBSZXN1bHQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGluc3RhbGwoYXJyYXkgJHN0ZXBQYXJhbXMgPSBbXSkKCXsKCQkkc3RlcFBhcmFtcyA9IGFycmF5X3JlcGxhY2UoWwoJCQknc3RlcCcgPT4gMCwKCQldLCAkc3RlcFBhcmFtcyk7CgoJCSRzdGVwID0gJHN0ZXBQYXJhbXNbJ3N0ZXAnXTsKCQlpZiAoISRzdGVwKQoJCXsKCQkJJHN0ZXAgPSAkdGhpcy0+Z2V0SW5zdGFsbFJlc3VtZVN0ZXAoKTsKCQl9CgoJCXJldHVybiAkdGhpcy0+aW5zdGFsbFN0ZXBSdW5uZXIoJHN0ZXAsICRzdGVwUGFyYW1zKTsKCX0KCglwcml2YXRlIGZ1bmN0aW9uIGdldEluc3RhbGxSZXN1bWVTdGVwKCkKCXsKCQkkaW5zdGFsbGVkQWRkT24gPSAkdGhpcy0+YWRkT24tPmdldEluc3RhbGxlZEFkZE9uKCk7CgkJaWYgKCRpbnN0YWxsZWRBZGRPbikKCQl7CgkJCSRsYXN0QWN0aW9uU3RlcCA9ICRpbnN0YWxsZWRBZGRPbi0+Z2V0TGFzdEFjdGlvblN0ZXAoJ2luc3RhbGwnKTsKCQkJaWYgKCRsYXN0QWN0aW9uU3RlcCkKCQkJewoJCQkJcmV0dXJuICRsYXN0QWN0aW9uU3RlcCArIDE7IC8vIHRoaXMgaXMgdGhlIGxhc3QgY29tcGxldGVkIHN0ZXAsIHNvIHJlc3VtZSB3aXRoIHRoZSBuZXh0CgkJCX0KCQl9CgoJCXJldHVybiAxOwoJfQoKCS8qKgoJICogQHBhcmFtIGludGVnZXIgJHN0ZXAKCSAqIEBwYXJhbSBhcnJheSAkc3RlcFBhcmFtcwoJICoKCSAqIEByZXR1cm4gbnVsbHxTdGVwUmVzdWx0CgkgKi8KCXByaXZhdGUgZnVuY3Rpb24gaW5zdGFsbFN0ZXBSdW5uZXIoJHN0ZXAsIGFycmF5ICRzdGVwUGFyYW1zKQoJewoJCSRmblByZWZpeCA9ICdpbnN0YWxsU3RlcCc7CgkJJGZuID0gJGZuUHJlZml4IC4gJHN0ZXA7CgkJaWYgKCFtZXRob2RfZXhpc3RzKCR0aGlzLCAkZm4pKQoJCXsKCQkJcmV0dXJuIG51bGw7CgkJfQoKCQkkcmVzdWx0ID0gJHRoaXMtPiRmbigkc3RlcFBhcmFtcyk7CgkJaWYgKCRyZXN1bHQgPT09IG51bGwgfHwgJHJlc3VsdCA9PT0gdHJ1ZSkKCQl7CgkJCSRyZXN1bHQgPSBuZXcgU3RlcFJlc3VsdCh0cnVlKTsKCQl9CgkJZWxzZSBpZiAoaXNfYXJyYXkoJHJlc3VsdCkpCgkJewoJCQkkcmVzdWx0ID0gbmV3IFN0ZXBSZXN1bHQoZmFsc2UsICRyZXN1bHQpOwoJCX0KCgkJaWYgKCEoJHJlc3VsdCBpbnN0YW5jZW9mIFN0ZXBSZXN1bHQpKQoJCXsKCQkJdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiTXVzdCByZXR1cm4gYSBTdGVwUmVzdWx0IG9iamVjdCIpOwoJCX0KCgkJJHJlc3VsdC0+c3RlcCA9ICRzdGVwOwoKCQlpZiAoJHJlc3VsdC0+Y29tcGxldGUpCgkJewoJCQkkdGhpcy0+YWRkT24tPnVwZGF0ZVBlbmRpbmdBY3Rpb24oJ2luc3RhbGwnLCAkcmVzdWx0LT5zdGVwKTsKCgkJCSRuZXh0U3RlcCA9ICRzdGVwICsgMTsKCQkJJG5leHRGbiA9ICRmblByZWZpeCAuICRuZXh0U3RlcDsKCQkJaWYgKCFtZXRob2RfZXhpc3RzKCR0aGlzLCAkbmV4dEZuKSkKCQkJewoJCQkJcmV0dXJuIG51bGw7CgkJCX0KCgkJCSRyZXN1bHQgPSBuZXcgU3RlcFJlc3VsdChmYWxzZSwgW10sICRuZXh0U3RlcCk7CgkJfQoKCQlyZXR1cm4gJHJlc3VsdDsKCX0KfQo=","bytes":1730,"path":"src/XF/AddOn/StepRunnerInstallTrait.php","present":true,"sha256":"1f441b8a3101b97009ae04e62c04e79062a89f1e01a08ae9e07c5e629c76d5f2"},"src/XF/AddOn/StepRunnerUninstallTrait.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBYRlxBZGRPbjsKCnVzZSBmdW5jdGlvbiBpc19hcnJheTsKCi8qKgogKiBAcHJvcGVydHkgQWRkT24gJGFkZE9uCiAqLwp0cmFpdCBTdGVwUnVubmVyVW5pbnN0YWxsVHJhaXQKewoJLyoqCgkgKiBAcGFyYW0gYXJyYXkgJHN0ZXBQYXJhbXMKCSAqCgkgKiBAcmV0dXJuIG51bGx8U3RlcFJlc3VsdAoJICovCglwdWJsaWMgZnVuY3Rpb24gdW5pbnN0YWxsKGFycmF5ICRzdGVwUGFyYW1zID0gW10pCgl7CgkJJHN0ZXBQYXJhbXMgPSBhcnJheV9yZXBsYWNlKFsKCQkJJ3N0ZXAnID0+IDAsCgkJXSwgJHN0ZXBQYXJhbXMpOwoKCQkkc3RlcCA9ICRzdGVwUGFyYW1zWydzdGVwJ107CgkJaWYgKCEkc3RlcCkKCQl7CgkJCSRzdGVwID0gJHRoaXMtPmdldFVuaW5zdGFsbFJlc3VtZVN0ZXAoKTsKCQl9CgkJcmV0dXJuICR0aGlzLT51bmluc3RhbGxTdGVwUnVubmVyKCRzdGVwLCAkc3RlcFBhcmFtcyk7Cgl9CgoJcHJpdmF0ZSBmdW5jdGlvbiBnZXRVbmluc3RhbGxSZXN1bWVTdGVwKCkKCXsKCQkkaW5zdGFsbGVkQWRkT24gPSAkdGhpcy0+YWRkT24tPmdldEluc3RhbGxlZEFkZE9uKCk7CgkJaWYgKCRpbnN0YWxsZWRBZGRPbikKCQl7CgkJCSRsYXN0QWN0aW9uU3RlcCA9ICRpbnN0YWxsZWRBZGRPbi0+Z2V0TGFzdEFjdGlvblN0ZXAoJ3VuaW5zdGFsbCcpOwoJCQlpZiAoJGxhc3RBY3Rpb25TdGVwKQoJCQl7CgkJCQlyZXR1cm4gJGxhc3RBY3Rpb25TdGVwICsgMTsgLy8gdGhpcyBpcyB0aGUgbGFzdCBjb21wbGV0ZWQgc3RlcCwgc28gcmVzdW1lIHdpdGggdGhlIG5leHQKCQkJfQoJCX0KCgkJcmV0dXJuIDE7Cgl9CgoJLyoqCgkgKiBAcGFyYW0gaW50ZWdlciAkc3RlcAoJICogQHBhcmFtIGFycmF5ICRzdGVwUGFyYW1zCgkgKgoJICogQHJldHVybiBudWxsfFN0ZXBSZXN1bHQKCSAqLwoJcHJpdmF0ZSBmdW5jdGlvbiB1bmluc3RhbGxTdGVwUnVubmVyKCRzdGVwLCBhcnJheSAkc3RlcFBhcmFtcykKCXsKCQkkZm5QcmVmaXggPSAndW5pbnN0YWxsU3RlcCc7CgkJJGZuID0gJGZuUHJlZml4IC4gJHN0ZXA7CgkJaWYgKCFtZXRob2RfZXhpc3RzKCR0aGlzLCAkZm4pKQoJCXsKCQkJcmV0dXJuIG51bGw7CgkJfQoKCQkkcmVzdWx0ID0gJHRoaXMtPiRmbigkc3RlcFBhcmFtcyk7CgkJaWYgKCRyZXN1bHQgPT09IG51bGwgfHwgJHJlc3VsdCA9PT0gdHJ1ZSkKCQl7CgkJCSRyZXN1bHQgPSBuZXcgU3RlcFJlc3VsdCh0cnVlKTsKCQl9CgkJZWxzZSBpZiAoaXNfYXJyYXkoJHJlc3VsdCkpCgkJewoJCQkkcmVzdWx0ID0gbmV3IFN0ZXBSZXN1bHQoZmFsc2UsICRyZXN1bHQpOwoJCX0KCgkJaWYgKCEoJHJlc3VsdCBpbnN0YW5jZW9mIFN0ZXBSZXN1bHQpKQoJCXsKCQkJdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiTXVzdCByZXR1cm4gYSBTdGVwUmVzdWx0IG9iamVjdCIpOwoJCX0KCgkJJHJlc3VsdC0+c3RlcCA9ICRzdGVwOwoKCQlpZiAoJHJlc3VsdC0+Y29tcGxldGUpCgkJewoJCQkkdGhpcy0+YWRkT24tPnVwZGF0ZVBlbmRpbmdBY3Rpb24oJ3VuaW5zdGFsbCcsICRyZXN1bHQtPnN0ZXApOwoKCQkJJG5leHRTdGVwID0gJHN0ZXAgKyAxOwoJCQkkbmV4dEZuID0gJGZuUHJlZml4IC4gJG5leHRTdGVwOwoJCQlpZiAoIW1ldGhvZF9leGlzdHMoJHRoaXMsICRuZXh0Rm4pKQoJCQl7CgkJCQlyZXR1cm4gbnVsbDsKCQkJfQoKCQkJJHJlc3VsdCA9IG5ldyBTdGVwUmVzdWx0KGZhbHNlLCBbXSwgJG5leHRTdGVwKTsKCQl9CgoJCXJldHVybiAkcmVzdWx0OwoJfQp9Cg==","bytes":1747,"path":"src/XF/AddOn/StepRunnerUninstallTrait.php","present":true,"sha256":"e58a9ab9c30e3cf3c41a0be392e8c5ac37f744578f7b91f76d663139649c49a9"},"src/XF/AddOn/StepRunnerUpgradeTrait.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBYRlxBZGRPbjsKCnVzZSBmdW5jdGlvbiBpbnR2YWwsIGlzX2FycmF5OwoKLyoqCiAqIEBwcm9wZXJ0eSBBZGRPbiAkYWRkT24KICovCnRyYWl0IFN0ZXBSdW5uZXJVcGdyYWRlVHJhaXQKewoJLyoqCgkgKiBAcGFyYW0gYXJyYXkgJHN0ZXBQYXJhbXMKCSAqCgkgKiBAcmV0dXJuIG51bGx8U3RlcFJlc3VsdAoJICovCglwdWJsaWMgZnVuY3Rpb24gdXBncmFkZShhcnJheSAkc3RlcFBhcmFtcyA9IFtdKQoJewoJCSRzdGVwUGFyYW1zID0gJHRoaXMtPmdldFN0ZXBQYXJhbXMoJHN0ZXBQYXJhbXMpOwoKCQkkdmVyc2lvbnMgPSBbXTsKCQkkc3RlcHNHcm91cGVkID0gW107CgoJCSRyZWZsZWN0aW9uID0gbmV3IFxSZWZsZWN0aW9uT2JqZWN0KCR0aGlzKTsKCQlmb3JlYWNoICgkcmVmbGVjdGlvbi0+Z2V0TWV0aG9kcygpIEFTICRtZXRob2QpCgkJewoJCQlpZiAocHJlZ19tYXRjaCgnL151cGdyYWRlKFxkKylTdGVwKFxkKykkLycsICRtZXRob2QtPm5hbWUsICRtYXRjaCkpCgkJCXsKCQkJCSR2ZXJzaW9uSWQgPSBpbnR2YWwoJG1hdGNoWzFdKTsKCQkJCSRzdGVwID0gaW50dmFsKCRtYXRjaFsyXSk7CgoJCQkJJHZlcnNpb25zW10gPSAkdmVyc2lvbklkOwoJCQkJJHN0ZXBzR3JvdXBlZFskdmVyc2lvbklkXVskc3RlcF0gPSAkc3RlcDsKCQkJfQoJCX0KCgkJaWYgKCEkdmVyc2lvbnMpCgkJewoJCQlyZXR1cm4gbnVsbDsKCQl9CgoJCWlmICghJHN0ZXBQYXJhbXNbJ3ZlcnNpb25faWQnXSkKCQl7CgkJCSRyZXN1bWUgPSAkdGhpcy0+Z2V0VXBncmFkZVJlc3VtZVN0ZXAoKTsKCQkJJHN0ZXBQYXJhbXNbJ3ZlcnNpb25faWQnXSA9ICRyZXN1bWVbMF07CgkJCSRzdGVwUGFyYW1zWydzdGVwJ10gPSAkcmVzdW1lWzFdOwoJCX0KCgkJJHJ1blN0ZXAgPSAkc3RlcFBhcmFtc1snc3RlcCddOwoJCWlmICghJHJ1blN0ZXApCgkJewoJCQkkcnVuU3RlcCA9IDE7CgkJfQoKCQkkdmVyc2lvbnMgPSBhcnJheV91bmlxdWUoJHZlcnNpb25zKTsKCQlzb3J0KCR2ZXJzaW9ucywgU09SVF9OVU1FUklDKTsKCgkJZm9yZWFjaCAoJHZlcnNpb25zIEFTICRpID0+ICR2ZXJzaW9uSWQpCgkJewoJCQlpZiAoJHZlcnNpb25JZCA+PSAkc3RlcFBhcmFtc1sndmVyc2lvbl9pZCddKQoJCQl7CgkJCQkkdmVyc2lvblN0ZXBzID0gJHN0ZXBzR3JvdXBlZFskdmVyc2lvbklkXTsKCQkJCWlmIChpc3NldCgkdmVyc2lvblN0ZXBzWyRydW5TdGVwXSkpCgkJCQl7CgkJCQkJaWYgKCR2ZXJzaW9uSWQgIT0gJHN0ZXBQYXJhbXNbJ3ZlcnNpb25faWQnXSB8fCAkcnVuU3RlcCAhPSAkc3RlcFBhcmFtc1snc3RlcCddKQoJCQkJCXsKCQkJCQkJLy8gc2FuaXR5IGNoZWNrIC0gZG9uJ3QgcGFzcyBwYXJhbXMgaWYgd2UncmUgY2hhbmdpbmcgdmVyc2lvbnMgb3Igc3RlcHMKCQkJCQkJJHN0ZXBQYXJhbXMgPSBbXTsKCQkJCQl9CgoJCQkJCSRuZXh0VmVyc2lvbklkID0gJHZlcnNpb25zWyRpICsgMV0gPz8gbnVsbDsKCgkJCQkJcmV0dXJuICR0aGlzLT51cGdyYWRlU3RlcFJ1bm5lcigkdmVyc2lvbklkLCAkcnVuU3RlcCwgJHN0ZXBQYXJhbXMsICRuZXh0VmVyc2lvbklkKTsKCQkJCX0KCgkJCQkvLyBpZiB3ZSBoaXQgaGVyZSwgdGhlbiB0aGUgc3RlcCBjb3VsZG4ndCBiZSBmb3VuZCwgc28gbW92ZSBvbnRvIHRoZSBuZXh0IHVwZ3JhZGUKCQkJCSRydW5TdGVwID0gMTsKCQkJCSRzdGVwUGFyYW1zID0gJHRoaXMtPmdldFN0ZXBQYXJhbXMoKTsKCQkJfQoJCX0KCgkJLy8gaWYgd2UgZ290IGhlcmUsIHdlIGRvbid0IGhhdmUgYW55IG90aGVyIHVwZ3JhZGVzIHRvIHJ1bgoJCXJldHVybiBudWxsOwoJfQoKCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRTdGVwUGFyYW1zKGFycmF5ICRzdGVwUGFyYW1zID0gW10pCgl7CgkJcmV0dXJuIGFycmF5X3JlcGxhY2UoWwoJCQkndmVyc2lvbl9pZCcgPT4gMCwKCQkJJ3N0ZXAnID0+IDAsCgkJXSwgJHN0ZXBQYXJhbXMpOwoJfQoKCXByaXZhdGUgZnVuY3Rpb24gZ2V0VXBncmFkZVJlc3VtZVN0ZXAoKQoJewoJCSRpbnN0YWxsZWRBZGRPbiA9ICR0aGlzLT5hZGRPbi0+Z2V0SW5zdGFsbGVkQWRkT24oKTsKCQkkbGFzdEFjdGlvblN0ZXAgPSAkaW5zdGFsbGVkQWRkT24tPmdldExhc3RBY3Rpb25TdGVwKCd1cGdyYWRlJyk7CgkJaWYgKCRsYXN0QWN0aW9uU3RlcCkKCQl7CgkJCSRsYXN0QWN0aW9uU3RlcFsxXSsrOyAvLyB3ZSBjb21wbGV0ZWQgdGhpcyBzdGVwLCBzbyBuZWVkIHRvIHJlc3VtZSB3aXRoIHRoZSBuZXh0CgkJCXJldHVybiAkbGFzdEFjdGlvblN0ZXA7CgkJfQoKCQlyZXR1cm4gWyR0aGlzLT5hZGRPbi0+Z2V0SW5zdGFsbGVkQWRkT24oKS0+dmVyc2lvbl9pZCArIDEsIDFdOwoJfQoKCS8qKgoJICogQHBhcmFtIGludGVnZXIgJHJ1blZlcnNpb24KCSAqIEBwYXJhbSBpbnRlZ2VyICRydW5TdGVwCgkgKiBAcGFyYW0gYXJyYXkgJHN0ZXBQYXJhbXMKCSAqIEBwYXJhbSBpbnRlZ2VyfG51bGwgJG5leHRWZXJzaW9uSWQKCSAqCgkgKiBAcmV0dXJuIG51bGx8U3RlcFJlc3VsdAoJICovCglwcml2YXRlIGZ1bmN0aW9uIHVwZ3JhZGVTdGVwUnVubmVyKCRydW5WZXJzaW9uLCAkcnVuU3RlcCwgYXJyYXkgJHN0ZXBQYXJhbXMsICRuZXh0VmVyc2lvbklkKQoJewoJCSRmblBhdHRlcm4gPSAndXBncmFkZSVkU3RlcCVkJzsKCQkkZm4gPSBzcHJpbnRmKCRmblBhdHRlcm4sICRydW5WZXJzaW9uLCAkcnVuU3RlcCk7CgkJaWYgKCFtZXRob2RfZXhpc3RzKCR0aGlzLCAkZm4pKQoJCXsKCQkJdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiU3RlcCAkZm4gZG9lc24ndCBleGlzdC4gU2hvdWxkIGhhdmUgYmVlbiBjaGVja2VkIGVhcmxpZXIuIik7CgkJfQoKCQkkcmVzdWx0ID0gJHRoaXMtPiRmbigkc3RlcFBhcmFtcyk7CgkJaWYgKCRyZXN1bHQgPT09IG51bGwgfHwgJHJlc3VsdCA9PT0gdHJ1ZSkKCQl7CgkJCSRyZXN1bHQgPSBuZXcgU3RlcFJlc3VsdCh0cnVlKTsKCQl9CgkJZWxzZSBpZiAoaXNfYXJyYXkoJHJlc3VsdCkpCgkJewoJCQkkcmVzdWx0ID0gbmV3IFN0ZXBSZXN1bHQoZmFsc2UsICRyZXN1bHQpOwoJCX0KCgkJaWYgKCEoJHJlc3VsdCBpbnN0YW5jZW9mIFN0ZXBSZXN1bHQpKQoJCXsKCQkJdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiTXVzdCByZXR1cm4gYSBTdGVwUmVzdWx0IG9iamVjdCIpOwoJCX0KCgkJJHJlc3VsdC0+c3RlcCA9ICRydW5TdGVwOwoJCSRyZXN1bHQtPnZlcnNpb24gPSAkcnVuVmVyc2lvbjsKCgkJaWYgKCRyZXN1bHQtPmNvbXBsZXRlKQoJCXsKCQkJJHRoaXMtPmFkZE9uLT51cGRhdGVQZW5kaW5nQWN0aW9uKCd1cGdyYWRlJywgJHJlc3VsdC0+dmVyc2lvbiAuICc6JyAuICRyZXN1bHQtPnN0ZXApOwoKCQkJJG5leHRTdGVwID0gJHJ1blN0ZXAgKyAxOwoJCQkkbmV4dFN0ZXBGbiA9IHNwcmludGYoJGZuUGF0dGVybiwgJHJ1blZlcnNpb24sICRuZXh0U3RlcCk7CgkJCWlmIChtZXRob2RfZXhpc3RzKCR0aGlzLCAkbmV4dFN0ZXBGbikpCgkJCXsKCQkJCSRyZXN1bHQgPSBuZXcgU3RlcFJlc3VsdChmYWxzZSwgW10sICRuZXh0U3RlcCwgJHJ1blZlcnNpb24pOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJLy8gd2UncmUgZG9uZSB0aGlzIHVwZ3JhZGUgdmVyc2lvbiwgc2VlIGlmIHdlIGhhdmUgYW5vdGhlcgoJCQkJaWYgKCRuZXh0VmVyc2lvbklkID09PSBudWxsKQoJCQkJewoJCQkJCXJldHVybiBudWxsOwoJCQkJfQoKCQkJCSRuZXh0Rm4gPSBzcHJpbnRmKCRmblBhdHRlcm4sICRuZXh0VmVyc2lvbklkLCAxKTsKCQkJCWlmICghbWV0aG9kX2V4aXN0cygkdGhpcywgJG5leHRGbikpCgkJCQl7CgkJCQkJcmV0dXJuIG51bGw7CgkJCQl9CgoJCQkJJHJlc3VsdCA9IG5ldyBTdGVwUmVzdWx0KGZhbHNlLCBbXSwgMSwgJG5leHRWZXJzaW9uSWQpOwoJCQl9CgkJfQoKCQlyZXR1cm4gJHJlc3VsdDsKCX0KfQo=","bytes":3887,"path":"src/XF/AddOn/StepRunnerUpgradeTrait.php","present":true,"sha256":"b61698d9c20f094cc1b704ad48798148fe5843e2dc746592cb2db252b579d1b5"},"src/XF/Cli/Command/AddOnInstall.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBYRlxDbGlcQ29tbWFuZDsKCnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEhlbHBlclxRdWVzdGlvbkhlbHBlcjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRBcmd1bWVudDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0T3B0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcT3V0cHV0SW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxRdWVzdGlvblxDb25maXJtYXRpb25RdWVzdGlvbjsKCmNsYXNzIEFkZE9uSW5zdGFsbCBleHRlbmRzIEFic3RyYWN0Q29tbWFuZAp7Cgl1c2UgQWRkT25BY3Rpb25UcmFpdDsKCXVzZSBKb2JSdW5uZXJUcmFpdDsKCglwcm90ZWN0ZWQgZnVuY3Rpb24gY29uZmlndXJlKCkKCXsKCQkkdGhpcwoJCQktPnNldE5hbWUoJ3hmOmFkZG9uLWluc3RhbGwnKQoJCQktPnNldEFsaWFzZXMoWyd4Zi1hZGRvbjppbnN0YWxsJ10pCgkJCS0+c2V0RGVzY3JpcHRpb24oJ0luc3RhbGxzIHRoZSBzcGVjaWZpZWQgYWRkLW9uJykKCQkJLT5hZGRBcmd1bWVudCgKCQkJCSdpZCcsCgkJCQlJbnB1dEFyZ3VtZW50OjpSRVFVSVJFRCwKCQkJCSdBZGQtT24gSUQgb3IgcGF0aCB0byBhZGQtb24gemlwIGZpbGUnCgkJCSkKCQkJLT5hZGRPcHRpb24oCgkJCQknZm9yY2UnLAoJCQkJJ2YnLAoJCQkJSW5wdXRPcHRpb246OlZBTFVFX05PTkUsCgkJCQknU2tpcCB2ZXJpZnlpbmcgdGhhdCB0aGUgYWRkLW9uIGlzIGluc3RhbGxhYmxlJwoJCQkpOwoJfQoKCXByb3RlY3RlZCBmdW5jdGlvbiBleGVjdXRlKElucHV0SW50ZXJmYWNlICRpbnB1dCwgT3V0cHV0SW50ZXJmYWNlICRvdXRwdXQpCgl7CgkJJGlkID0gJGlucHV0LT5nZXRBcmd1bWVudCgnaWQnKTsKCgkJJGFkZE9uTWFuYWdlciA9IFxYRjo6YXBwKCktPmFkZE9uTWFuYWdlcigpOwoKCQlpZiAoJHRoaXMtPmlzQVppcEZpbGUoJGlkKSkKCQl7CgkJCSRpZCA9ICR0aGlzLT52YWxpZGF0ZUFuZEV4dHJhY3RBZGRPblppcCgkaWQsICRlcnJvcik7CgkJCWlmICghJGlkKQoJCQl7CgkJCQkkb3V0cHV0LT53cml0ZWxuKCc8ZXJyb3I+JyAuICRlcnJvciAuICc8L2Vycm9yPicpOwoJCQkJcmV0dXJuIDE7CgkJCX0KCQl9CgoJCSRhZGRPbiA9ICRhZGRPbk1hbmFnZXItPmdldEJ5SWQoJGlkKTsKCQlpZiAoISRhZGRPbikKCQl7CgkJCSRvdXRwdXQtPndyaXRlbG4oIjxlcnJvcj4iIC4gIlRoZSBhZGQtb24gJyRpZCcgY291bGQgYmUgZm91bmQuIiAuICI8L2Vycm9yPiIpOwoJCQlyZXR1cm4gMTsKCQl9CgoJCWlmICghJGFkZE9uLT5jYW5JbnN0YWxsKCkpCgkJewoJCQlpZiAoJGFkZE9uKQoJCQl7CgkJCQkkb3V0cHV0LT53cml0ZWxuKCI8ZXJyb3I+IiAuIFxYRjo6cGhyYXNlKCd0aGlzX2FkZF9vbl9hbHJlYWR5X2luc3RhbGxlZF91cGdyYWRlX2luc3RlYWQnKSAuICI8L2Vycm9yPiIpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJG91dHB1dC0+d3JpdGVsbigiPGVycm9yPiIgLiBcWEY6OnBocmFzZSgndGhpc19hZGRfb25fY2Fubm90X2JlX2luc3RhbGxlZCcpIC4gIjwvZXJyb3I+Iik7CgkJCX0KCQkJcmV0dXJuIDE7CgkJfQoKCQlpZiAoISR0aGlzLT52ZXJpZnlBZGRPbkFjdGlvbigkaW5wdXQsICRvdXRwdXQsICRhZGRPbikpCgkJewoJCQlyZXR1cm4gMTsKCQl9CgoJCS8qKiBAdmFyIFF1ZXN0aW9uSGVscGVyICRoZWxwZXIgKi8KCQkkaGVscGVyID0gJHRoaXMtPmdldEhlbHBlcigncXVlc3Rpb24nKTsKCgkJJHF1ZXN0aW9uID0gbmV3IENvbmZpcm1hdGlvblF1ZXN0aW9uKCI8cXVlc3Rpb24+IiAuIFxYRjo6cGhyYXNlKCdwbGVhc2VfY29uZmlybV90aGF0X3lvdV93YW50X3RvX2luc3RhbGxfZm9sbG93aW5nX2FkZF9vbicpIC4gJzogKCcgLiAkYWRkT24tPnRpdGxlIC4gJyAnIC4gJGFkZE9uLT52ZXJzaW9uX3N0cmluZyAuICIpICh5L24pPC9xdWVzdGlvbj4iKTsKCQkkcmVzcG9uc2UgPSAkaGVscGVyLT5hc2soJGlucHV0LCAkb3V0cHV0LCAkcXVlc3Rpb24pOwoJCWlmICghJHJlc3BvbnNlKQoJCXsKCQkJcmV0dXJuIDE7CgkJfQoKCQkvLyBtYWtlIHN1cmUgYW55IGVycm9ycyBnZXQgbG9nZ2VkIGhlcmUKCQlcWEY6OmFwcCgpLT5lcnJvcigpLT5zZXRJZ25vcmVQZW5kaW5nVXBncmFkZSh0cnVlKTsKCgkJJGFkZE9uLT5wcmVJbnN0YWxsKCk7CgoJCSR0aGlzLT5ydW5TdWJBY3Rpb24oJG91dHB1dCwgJGFkZE9uLCAnaW5zdGFsbCcpOwoJCSR0aGlzLT5ydW5TdWJBY3Rpb24oJG91dHB1dCwgJGFkZE9uLCAnaW1wb3J0Jyk7CgkJJHRoaXMtPnJ1blN1YkFjdGlvbigkb3V0cHV0LCAkYWRkT24sICdwb3N0LWluc3RhbGwnKTsKCgkJcmV0dXJuIDA7Cgl9Cn0K","bytes":2412,"path":"src/XF/Cli/Command/AddOnInstall.php","present":true,"sha256":"2407ad9ae20ca8ac1ca84b456ac2adc537f39c79534da5e258167a4d0df2a54f"},"src/XF/Cli/Command/AddOnUninstall.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBYRlxDbGlcQ29tbWFuZDsKCnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEhlbHBlclxRdWVzdGlvbkhlbHBlcjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRBcmd1bWVudDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0T3B0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcT3V0cHV0SW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxRdWVzdGlvblxDb25maXJtYXRpb25RdWVzdGlvbjsKCmNsYXNzIEFkZE9uVW5pbnN0YWxsIGV4dGVuZHMgQWJzdHJhY3RDb21tYW5kCnsKCXVzZSBBZGRPbkFjdGlvblRyYWl0OwoJdXNlIEpvYlJ1bm5lclRyYWl0OwoKCXByb3RlY3RlZCBmdW5jdGlvbiBjb25maWd1cmUoKQoJewoJCSR0aGlzCgkJCS0+c2V0TmFtZSgneGY6YWRkb24tdW5pbnN0YWxsJykKCQkJLT5zZXRBbGlhc2VzKFsneGYtYWRkb246dW5pbnN0YWxsJ10pCgkJCS0+c2V0RGVzY3JpcHRpb24oJ1VuaW5zdGFsbHMgdGhlIHNwZWNpZmllZCBhZGQtb24nKQoJCQktPmFkZEFyZ3VtZW50KAoJCQkJJ2lkJywKCQkJCUlucHV0QXJndW1lbnQ6OlJFUVVJUkVELAoJCQkJJ0FkZC1PbiBJRCcKCQkJKQoJCQktPmFkZE9wdGlvbigKCQkJCSdmb3JjZScsCgkJCQknZicsCgkJCQlJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwKCQkJCSdTa2lwIHZlcmlmeWluZyB0aGF0IHRoZSBhZGQtb24gaXMgdW5pbnN0YWxsYWJsZScKCQkJKTsKCX0KCglwcm90ZWN0ZWQgZnVuY3Rpb24gZXhlY3V0ZShJbnB1dEludGVyZmFjZSAkaW5wdXQsIE91dHB1dEludGVyZmFjZSAkb3V0cHV0KQoJewoJCSRpZCA9ICRpbnB1dC0+Z2V0QXJndW1lbnQoJ2lkJyk7CgoJCSRhZGRPbiA9ICR0aGlzLT5jaGVja0luc3RhbGxlZEFkZE9uKCRpZCwgJGVycm9yKTsKCQlpZiAoISRhZGRPbikKCQl7CgkJCSRvdXRwdXQtPndyaXRlbG4oJzxlcnJvcj4nIC4gJGVycm9yIC4gJzwvZXJyb3I+Jyk7CgkJCXJldHVybiAxOwoJCX0KCgkJaWYgKCEkYWRkT24tPmNhblVuaW5zdGFsbCgpICYmICEkaW5wdXQtPmdldE9wdGlvbignZm9yY2UnKSkKCQl7CgkJCSRvdXRwdXQtPndyaXRlbG4oIjxlcnJvcj4iIC4gXFhGOjpwaHJhc2UoJ3RoaXNfYWRkX29uX2Nhbm5vdF9iZV91bmluc3RhbGxlZF9saWtlX2ZpbGVzX21pc3NpbmcnKSAuICI8L2Vycm9yPiIpOwoJCQlyZXR1cm4gMTsKCQl9CgoJCS8qKiBAdmFyIFF1ZXN0aW9uSGVscGVyICRoZWxwZXIgKi8KCQkkaGVscGVyID0gJHRoaXMtPmdldEhlbHBlcigncXVlc3Rpb24nKTsKCgkJJHF1ZXN0aW9uID0gbmV3IENvbmZpcm1hdGlvblF1ZXN0aW9uKCI8cXVlc3Rpb24+IiAuIFxYRjo6cGhyYXNlKCdwbGVhc2VfY29uZmlybV90aGF0X3lvdV93YW50X3RvX3VuaW5zdGFsbF9mb2xsb3dpbmdfYWRkX29uJykgLiAnOiAoJyAuICRhZGRPbi0+dGl0bGUgLiAnICcgLiAkYWRkT24tPnZlcnNpb25fc3RyaW5nIC4gIikgKHkvbik8L3F1ZXN0aW9uPiIpOwoJCSRyZXNwb25zZSA9ICRoZWxwZXItPmFzaygkaW5wdXQsICRvdXRwdXQsICRxdWVzdGlvbik7CgkJaWYgKCEkcmVzcG9uc2UpCgkJewoJCQlyZXR1cm4gMTsKCQl9CgoJCS8vIG1ha2Ugc3VyZSBhbnkgZXJyb3JzIGdldCBsb2dnZWQgaGVyZQoJCVxYRjo6YXBwKCktPmVycm9yKCktPnNldElnbm9yZVBlbmRpbmdVcGdyYWRlKHRydWUpOwoKCQkkYWRkT24tPnByZVVuaW5zdGFsbCgpOwoKCQkkdGhpcy0+cnVuU3ViQWN0aW9uKCRvdXRwdXQsICRhZGRPbiwgJ3VuaW5zdGFsbCcpOwoJCSR0aGlzLT5ydW5TdWJBY3Rpb24oJG91dHB1dCwgJGFkZE9uLCAndW5pbnN0YWxsLWRhdGEnKTsKCQkkdGhpcy0+cnVuU3ViQWN0aW9uKCRvdXRwdXQsICRhZGRPbiwgJ3Bvc3QtdW5pbnN0YWxsJyk7CgoJCXJldHVybiAwOwoJfQp9Cg==","bytes":1981,"path":"src/XF/Cli/Command/AddOnUninstall.php","present":true,"sha256":"6dc768f60efd4af161b549cd54c01ae8922326cf7fd230b8ef93403bf8dba90c"},"src/XF/Entity/CronEntry.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBYRlxFbnRpdHk7Cgp1c2UgWEZcQmVoYXZpb3JcRGV2T3V0cHV0V3JpdGFibGU7CnVzZSBYRlxNdmNcRW50aXR5XEVudGl0eTsKdXNlIFhGXE12Y1xFbnRpdHlcU3RydWN0dXJlOwp1c2UgWEZcUGhyYXNlOwp1c2UgWEZcUmVwb3NpdG9yeVxBZGRPblJlcG9zaXRvcnk7CnVzZSBYRlxTZXJ2aWNlXENyb25FbnRyeVxDYWxjdWxhdGVOZXh0UnVuU2VydmljZTsKdXNlIFhGXFV0aWxcUGhwOwoKdXNlIGZ1bmN0aW9uIGlzX2FycmF5OwoKLyoqCiAqIENPTFVNTlMKICogQHByb3BlcnR5IHN0cmluZyAkZW50cnlfaWQKICogQHByb3BlcnR5IHN0cmluZyAkY3Jvbl9jbGFzcwogKiBAcHJvcGVydHkgc3RyaW5nICRjcm9uX21ldGhvZAogKiBAcHJvcGVydHkgYXJyYXl8bnVsbCAkcnVuX3J1bGVzCiAqIEBwcm9wZXJ0eSBib29sICRhY3RpdmUKICogQHByb3BlcnR5IGludCAkbmV4dF9ydW4KICogQHByb3BlcnR5IHN0cmluZyAkYWRkb25faWQKICoKICogR0VUVEVSUwogKiBAcHJvcGVydHktcmVhZCBQaHJhc2UgJHRpdGxlCiAqCiAqIFJFTEFUSU9OUwogKiBAcHJvcGVydHktcmVhZCBBZGRPbnxudWxsICRBZGRPbgogKiBAcHJvcGVydHktcmVhZCBcWEZcRW50aXR5XFBocmFzZXxudWxsICRNYXN0ZXJUaXRsZQogKi8KY2xhc3MgQ3JvbkVudHJ5IGV4dGVuZHMgRW50aXR5CnsKCXB1YmxpYyBmdW5jdGlvbiBjYW5FZGl0KCkKCXsKCQlpZiAoISR0aGlzLT5hZGRvbl9pZCB8fCAkdGhpcy0+aXNJbnNlcnQoKSkKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gXFhGOjokZGV2ZWxvcG1lbnRNb2RlOwoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gaGFzQ2FsbGJhY2soKQoJewoJCXJldHVybiBtZXRob2RfZXhpc3RzKCR0aGlzLT5jcm9uX2NsYXNzLCAkdGhpcy0+Y3Jvbl9tZXRob2QpOwoJfQoKCS8qKgoJICogQHJldHVybiBQaHJhc2UKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldFRpdGxlKCkKCXsKCQlyZXR1cm4gXFhGOjpwaHJhc2UoJHRoaXMtPmdldFBocmFzZU5hbWUoKSk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldFBocmFzZU5hbWUoKQoJewoJCXJldHVybiAnY3Jvbl9lbnRyeS4nIC4gJHRoaXMtPmVudHJ5X2lkOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRNYXN0ZXJQaHJhc2UoKQoJewoJCSRwaHJhc2UgPSAkdGhpcy0+TWFzdGVyVGl0bGU7CgkJaWYgKCEkcGhyYXNlKQoJCXsKCQkJJHBocmFzZSA9ICR0aGlzLT5fZW0tPmNyZWF0ZShcWEZcRW50aXR5XFBocmFzZTo6Y2xhc3MpOwoJCQkkcGhyYXNlLT5hZGRvbl9pZCA9ICR0aGlzLT5fZ2V0RGVmZXJyZWRWYWx1ZShmdW5jdGlvbiAoKSB7IHJldHVybiAkdGhpcy0+YWRkb25faWQ7IH0pOwoJCQkkcGhyYXNlLT50aXRsZSA9ICR0aGlzLT5fZ2V0RGVmZXJyZWRWYWx1ZShmdW5jdGlvbiAoKSB7IHJldHVybiAkdGhpcy0+Z2V0UGhyYXNlTmFtZSgpOyB9KTsKCQkJJHBocmFzZS0+bGFuZ3VhZ2VfaWQgPSAwOwoJCX0KCgkJcmV0dXJuICRwaHJhc2U7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGNhbGN1bGF0ZU5leHRSdW4oKQoJewoJCSRzZXJ2aWNlID0gJHRoaXMtPmFwcCgpLT5zZXJ2aWNlKENhbGN1bGF0ZU5leHRSdW5TZXJ2aWNlOjpjbGFzcyk7CgkJcmV0dXJuICRzZXJ2aWNlLT5jYWxjdWxhdGVOZXh0UnVuVGltZSgkdGhpcy0+cnVuX3J1bGVzKTsKCX0KCglwcm90ZWN0ZWQgZnVuY3Rpb24gdmVyaWZ5UnVuUnVsZXMoYXJyYXkgJiRydWxlcykKCXsKCQkkZmlsdGVyVHlwZXMgPSBbJ2RvbScgPT4gWzEsIDMxXSwgJ2RvdycgPT4gWzAsIDZdLCAnaG91cnMnID0+IFswLCAyM10sICdtaW51dGVzJyA9PiBbMCwgNTldXTsKCQkkZmFpbGVkUnVsZXMgPSBbXTsKCgkJZm9yZWFjaCAoJGZpbHRlclR5cGVzIEFTICR0eXBlID0+ICRjb25zdHJhaW50cykKCQl7CgkJCWlmICghaXNzZXQoJHJ1bGVzWyR0eXBlXSkpCgkJCXsKCQkJCWNvbnRpbnVlOwoJCQl9CgoJCQkkdHlwZVJ1bGVzID0gJHJ1bGVzWyR0eXBlXTsKCQkJaWYgKCFpc19hcnJheSgkdHlwZVJ1bGVzKSkKCQkJewoJCQkJJHR5cGVSdWxlcyA9IFtdOwoJCQl9CgoJCQkkdHlwZVJ1bGVzID0gYXJyYXlfbWFwKCdpbnR2YWwnLCAkdHlwZVJ1bGVzKTsKCQkJJHR5cGVSdWxlcyA9IGFycmF5X3VuaXF1ZSgkdHlwZVJ1bGVzKTsKCQkJc29ydCgkdHlwZVJ1bGVzLCBTT1JUX05VTUVSSUMpOwoKCQkJZm9yZWFjaCAoJHR5cGVSdWxlcyBBUyAkcnVsZSkKCQkJewoJCQkJaWYgKCRydWxlID09PSAtMSkKCQkJCXsKCQkJCQljb250aW51ZTsgLy8gYW55CgkJCQl9CgoJCQkJaWYgKCRydWxlIDwgJGNvbnN0cmFpbnRzWzBdIHx8ICRydWxlID4gJGNvbnN0cmFpbnRzWzFdKQoJCQkJewoJCQkJCSRmYWlsZWRSdWxlc1skdHlwZV1bXSA9ICRydWxlOwoJCQkJfQoJCQl9CgoJCQlpZiAoISRmYWlsZWRSdWxlcykKCQkJewoJCQkJJHJ1bGVzWyR0eXBlXSA9ICR0eXBlUnVsZXM7CgkJCX0KCQl9CgoJCWlmICgkZmFpbGVkUnVsZXMpCgkJewoJCQlmb3JlYWNoICgkZmFpbGVkUnVsZXMgQVMgJHR5cGUgPT4gJHJ1bGUpCgkJCXsKCQkJCSRjb25zdHJhaW50cyA9ICRmaWx0ZXJUeXBlc1skdHlwZV07CgkJCQkkcnVsZVN0cmluZyA9IGltcGxvZGUoJywgJywgJHJ1bGUpOwoKCQkJCSR0aGlzLT5lcnJvcigKCQkJCQlcWEY6OnBocmFzZSgKCQkJCQkJJ2Nyb25fZW50cnlfcnVuX3J1bGVfeF9zaG91bGRfYmVfc2V0X3RvX2FueV9vcl9jb25zdHJhaW50cycsCgkJCQkJCVsKCQkJCQkJCSd0eXBlJyA9PiAkdHlwZSwKCQkJCQkJCSdjb25zdHJhaW50TG93JyA9PiAkY29uc3RyYWludHNbJzAnXSwKCQkJCQkJCSdjb25zdHJhaW50SGlnaCcgPT4gJGNvbnN0cmFpbnRzWycxJ10sCgkJCQkJCQkncnVsZVN0cmluZycgPT4gJHJ1bGVTdHJpbmcsCgkJCQkJCV0KCQkJCQkpLAoJCQkJCSdydW5fcnVsZXMnCgkJCQkpOwoJCQl9CgoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQlyZXR1cm4gdHJ1ZTsKCX0KCglwcm90ZWN0ZWQgZnVuY3Rpb24gX3ByZVNhdmUoKQoJewoJCWlmICgkdGhpcy0+Y3Jvbl9jbGFzcyB8fCAkdGhpcy0+Y3Jvbl9tZXRob2QpCgkJewoJCQlpZiAoIVBocDo6dmFsaWRhdGVDYWxsYmFja1BocmFzZWQoJHRoaXMtPmNyb25fY2xhc3MsICR0aGlzLT5jcm9uX21ldGhvZCwgJGVycm9yKSkKCQkJewoJCQkJJHRoaXMtPmVycm9yKCRlcnJvciwgJ2Nyb25fbWV0aG9kJyk7CgkJCX0KCQl9CgoJCWlmICgkdGhpcy0+YWN0aXZlKQoJCXsKCQkJaWYgKCFpc19hcnJheSgkdGhpcy0+cnVuX3J1bGVzKSkKCQkJewoJCQkJJHRoaXMtPnJ1bl9ydWxlcyA9IFtdOwoJCQl9CgoJCQkkdGhpcy0+c2V0KCduZXh0X3J1bicsICR0aGlzLT5jYWxjdWxhdGVOZXh0UnVuKCkpOwoJCX0KCQllbHNlCgkJewoJCQkkdGhpcy0+c2V0KCduZXh0X3J1bicsIDB4N0ZGRkZGRkYpOyAvLyB3YWF5IGluIGZ1dHVyZQoJCX0KCX0KCglwcm90ZWN0ZWQgZnVuY3Rpb24gX3Bvc3RTYXZlKCkKCXsKCQkkdGhpcy0+cmVidWlsZE5leHRSdW5UaW1lKCk7CgoJCWlmICgkdGhpcy0+aXNVcGRhdGUoKSkKCQl7CgkJCWlmICgkdGhpcy0+aXNDaGFuZ2VkKFsnYWRkb25faWQnLCAnZW50cnlfaWQnXSkpCgkJCXsKCQkJCSRwaHJhc2UgPSAkdGhpcy0+Z2V0RXhpc3RpbmdSZWxhdGlvbignTWFzdGVyVGl0bGUnKTsKCQkJCWlmICgkcGhyYXNlKQoJCQkJewoJCQkJCSR3cml0ZURldk91dHB1dCA9ICR0aGlzLT5nZXRCZWhhdmlvcihEZXZPdXRwdXRXcml0YWJsZTo6Y2xhc3MpLT5nZXRPcHRpb24oJ3dyaXRlX2Rldl9vdXRwdXQnKTsKCQkJCQkkcGhyYXNlLT5nZXRCZWhhdmlvcihEZXZPdXRwdXRXcml0YWJsZTo6Y2xhc3MpLT5zZXRPcHRpb24oJ3dyaXRlX2Rldl9vdXRwdXQnLCAkd3JpdGVEZXZPdXRwdXQpOwoKCQkJCQkkcGhyYXNlLT5hZGRvbl9pZCA9ICR0aGlzLT5hZGRvbl9pZDsKCQkJCQkkcGhyYXNlLT50aXRsZSA9ICR0aGlzLT5nZXRQaHJhc2VOYW1lKCk7CgkJCQkJJHBocmFzZS0+c2F2ZSgpOwoJCQkJfQoJCQl9CgkJfQoJfQoKCXByb3RlY3RlZCBmdW5jdGlvbiBfcG9zdERlbGV0ZSgpCgl7CgkJJHRoaXMtPnJlYnVpbGROZXh0UnVuVGltZSgpOwoKCQkkcGhyYXNlID0gJHRoaXMtPk1hc3RlclRpdGxlOwoJCWlmICgkcGhyYXNlKQoJCXsKCQkJJHdyaXRlRGV2T3V0cHV0ID0gJHRoaXMtPmdldEJlaGF2aW9yKERldk91dHB1dFdyaXRhYmxlOjpjbGFzcyktPmdldE9wdGlvbignd3JpdGVfZGV2X291dHB1dCcpOwoJCQkkcGhyYXNlLT5nZXRCZWhhdmlvcihEZXZPdXRwdXRXcml0YWJsZTo6Y2xhc3MpLT5zZXRPcHRpb24oJ3dyaXRlX2Rldl9vdXRwdXQnLCAkd3JpdGVEZXZPdXRwdXQpOwoKCQkJJHBocmFzZS0+ZGVsZXRlKCk7CgkJfQoJfQoKCXByb3RlY3RlZCBmdW5jdGlvbiByZWJ1aWxkTmV4dFJ1blRpbWUoKQoJewoJCSRydW5TZXJ2aWNlID0gJHRoaXMtPmFwcCgpLT5zZXJ2aWNlKENhbGN1bGF0ZU5leHRSdW5TZXJ2aWNlOjpjbGFzcyk7CgoJCVxYRjo6cnVuT25jZSgnY3Jvbk5leHRSdW5UaW1lUmVidWlsZCcsIGZ1bmN0aW9uICgpIHVzZSAoJHJ1blNlcnZpY2UpCgkJewoJCQkkcnVuU2VydmljZS0+dXBkYXRlTWluaW11bU5leHRSdW5UaW1lKCk7CgkJfSk7Cgl9CgoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9zZXR1cERlZmF1bHRzKCkKCXsKCQkkYWRkT25SZXBvID0gJHRoaXMtPl9lbS0+Z2V0UmVwb3NpdG9yeShBZGRPblJlcG9zaXRvcnk6OmNsYXNzKTsKCQkkdGhpcy0+YWRkb25faWQgPSAkYWRkT25SZXBvLT5nZXREZWZhdWx0QWRkT25JZCgpOwoKCQkkdGhpcy0+cnVuX3J1bGVzID0gWwoJCQknZGF5X3R5cGUnID0+ICdkb20nLAoJCQknZG9tJyA9PiBbJy0xJ10sCgkJCSdob3VycycgPT4gWycwJ10sCgkJCSdtaW51dGVzJyA9PiBbJzAnXSwKCQldOwoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U3RydWN0dXJlKFN0cnVjdHVyZSAkc3RydWN0dXJlKQoJewoJCSRzdHJ1Y3R1cmUtPnRhYmxlID0gJ3hmX2Nyb25fZW50cnknOwoJCSRzdHJ1Y3R1cmUtPnNob3J0TmFtZSA9ICdYRjpDcm9uRW50cnknOwoJCSRzdHJ1Y3R1cmUtPnByaW1hcnlLZXkgPSAnZW50cnlfaWQnOwoJCSRzdHJ1Y3R1cmUtPmNvbHVtbnMgPSBbCgkJCSdlbnRyeV9pZCcgPT4gWyd0eXBlJyA9PiBzZWxmOjpTVFIsICdtYXhMZW5ndGgnID0+IDI1LAoJCQkJJ3JlcXVpcmVkJyA9PiAncGxlYXNlX2VudGVyX3ZhbGlkX2Nyb25fZW50cnlfaWQnLAoJCQkJJ3VuaXF1ZScgPT4gJ2Nyb25fZW50cnlfaWRzX211c3RfYmVfdW5pcXVlJywKCQkJCSdtYXRjaCcgPT4gc2VsZjo6TUFUQ0hfQUxQSEFOVU1FUklDLAoJCQldLAoJCQknY3Jvbl9jbGFzcycgPT4gWyd0eXBlJyA9PiBzZWxmOjpTVFIsICdtYXhMZW5ndGgnID0+IDEwMCwKCQkJCSdyZXF1aXJlZCcgPT4gJ3BsZWFzZV9lbnRlcl92YWxpZF9jYWxsYmFja19jbGFzcycsCgkJCV0sCgkJCSdjcm9uX21ldGhvZCcgPT4gWyd0eXBlJyA9PiBzZWxmOjpTVFIsICdtYXhMZW5ndGgnID0+IDc1LAoJCQkJJ3JlcXVpcmVkJyA9PiAncGxlYXNlX2VudGVyX3ZhbGlkX2NhbGxiYWNrX21ldGhvZCcsCgkJCV0sCgkJCSdydW5fcnVsZXMnID0+IFsndHlwZScgPT4gc2VsZjo6SlNPTl9BUlJBWSwgJ3JlcXVpcmVkJyA9PiB0cnVlXSwKCQkJJ2FjdGl2ZScgPT4gWyd0eXBlJyA9PiBzZWxmOjpCT09MLCAnZGVmYXVsdCcgPT4gdHJ1ZV0sCgkJCSduZXh0X3J1bicgPT4gWyd0eXBlJyA9PiBzZWxmOjpVSU5ULCAnZGVmYXVsdCcgPT4gMF0sCgkJCSdhZGRvbl9pZCcgPT4gWyd0eXBlJyA9PiBzZWxmOjpCSU5BUlksICdtYXhMZW5ndGgnID0+IDUwLCAnZGVmYXVsdCcgPT4gJyddLAoJCV07CgkJJHN0cnVjdHVyZS0+YmVoYXZpb3JzID0gWwoJCQknWEY6RGV2T3V0cHV0V3JpdGFibGUnID0+IFtdLAoJCV07CgkJJHN0cnVjdHVyZS0+Z2V0dGVycyA9IFsKCQkJJ3RpdGxlJyA9PiB0cnVlLAoJCV07CgkJJHN0cnVjdHVyZS0+cmVsYXRpb25zID0gWwoJCQknQWRkT24nID0+IFsKCQkJCSdlbnRpdHknID0+ICdYRjpBZGRPbicsCgkJCQkndHlwZScgPT4gc2VsZjo6VE9fT05FLAoJCQkJJ2NvbmRpdGlvbnMnID0+ICdhZGRvbl9pZCcsCgkJCQkncHJpbWFyeScgPT4gdHJ1ZSwKCQkJXSwKCQkJJ01hc3RlclRpdGxlJyA9PiBbCgkJCQknZW50aXR5JyA9PiAnWEY6UGhyYXNlJywKCQkJCSd0eXBlJyA9PiBzZWxmOjpUT19PTkUsCgkJCQknY29uZGl0aW9ucycgPT4gWwoJCQkJCVsnbGFuZ3VhZ2VfaWQnLCAnPScsIDBdLAoJCQkJCVsndGl0bGUnLCAnPScsICdjcm9uX2VudHJ5LicsICckZW50cnlfaWQnXSwKCQkJCV0sCgkJCV0sCgkJXTsKCQkkc3RydWN0dXJlLT5vcHRpb25zID0gW107CgoJCXJldHVybiAkc3RydWN0dXJlOwoJfQp9Cg==","bytes":6316,"path":"src/XF/Entity/CronEntry.php","present":true,"sha256":"375adc401344ec7ff0e7a63d4d02762ba517d094da3e3b50dedc1630b022cd28"},"src/XF/Job/AbstractJob.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBYRlxKb2I7Cgp1c2UgWEZcQXBwOwp1c2UgWEZcVXRpbFxGaWxlOwoKYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RKb2IKewoJLyoqCgkgKiBAdmFyIEFwcAoJICovCglwcm90ZWN0ZWQgJGFwcDsKCgkvKioKCSAqIEB2YXIgaW50CgkgKi8KCXByb3RlY3RlZCAkam9iSWQ7CgoJLyoqCgkgKiBAdmFyIGFycmF5PHN0cmluZywgbWl4ZWQ+CgkgKi8KCXByb3RlY3RlZCAkZGF0YTsKCgkvKioKCSAqIEB2YXIgaW50CgkgKi8KCXByb3RlY3RlZCAkcHJldmlvdXNBdHRlbXB0czsKCgkvKioKCSAqIEB2YXIgYXJyYXk8c3RyaW5nLCBtaXhlZD4KCSAqLwoJcHJvdGVjdGVkICRkZWZhdWx0RGF0YSA9IFtdOwoKCS8qKgoJICogQHBhcmFtIGZsb2F0ICRtYXhSdW5UaW1lCgkgKgoJICogQHJldHVybiBKb2JSZXN1bHQKCSAqLwoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHJ1bigkbWF4UnVuVGltZSk7CgoJLyoqCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsCgkgKi8KCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0dXNNZXNzYWdlKCk7CgoJLyoqCgkgKiBAcmV0dXJuIGJvb2wKCSAqLwoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGNhbkNhbmNlbCgpOwoKCS8qKgoJICogQHJldHVybiBib29sCgkgKi8KCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBjYW5UcmlnZ2VyQnlDaG9pY2UoKTsKCgkvKioKCSAqIEBwYXJhbSBpbnQgJGpvYklkCgkgKiBAcGFyYW0gYXJyYXk8c3RyaW5nLCBtaXhlZD4gJGRhdGEKCSAqIEBwYXJhbSBpbnQgJHByZXZpb3VzQXR0ZW1wdHMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEFwcCAkYXBwLCAkam9iSWQsIGFycmF5ICRkYXRhID0gW10sIGludCAkcHJldmlvdXNBdHRlbXB0cyA9IDApCgl7CgkJQHNldF90aW1lX2xpbWl0KDApOwoKCQkkdGhpcy0+YXBwID0gJGFwcDsKCQkkdGhpcy0+am9iSWQgPSAkam9iSWQ7CgkJJHRoaXMtPmRhdGEgPSAkdGhpcy0+c2V0dXBEYXRhKCRkYXRhKTsKCQkkdGhpcy0+cHJldmlvdXNBdHRlbXB0cyA9ICRwcmV2aW91c0F0dGVtcHRzOwoJfQoKCS8qKgoJICogQHBhcmFtIGFycmF5PHN0cmluZywgbWl4ZWQ+ICRkYXRhCgkgKgoJICogQHJldHVybiBhcnJheTxzdHJpbmcsIG1peGVkPgoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0dXBEYXRhKGFycmF5ICRkYXRhKQoJewoJCXJldHVybiBhcnJheV9tZXJnZSgkdGhpcy0+ZGVmYXVsdERhdGEsICRkYXRhKTsKCX0KCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2F2ZUluY3JlbWVudGFsRGF0YSgpCgl7CgkJJHRoaXMtPmFwcC0+ZGItPnVwZGF0ZSgneGZfam9iJywgWwoJCQknZXhlY3V0ZV9kYXRhJyA9PiBzZXJpYWxpemUoJHRoaXMtPmRhdGEpLAoJCV0sICdqb2JfaWQgPSA/JywgJHRoaXMtPmpvYklkKTsKCX0KCgkvKioKCSAqIEByZXR1cm4gYXJyYXk8c3RyaW5nLCBtaXhlZD4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldERhdGEoKQoJewoJCXJldHVybiAkdGhpcy0+ZGF0YTsKCX0KCgkvKioKCSAqIEByZXR1cm4gaW50CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRKb2JJZCgpCgl7CgkJcmV0dXJuICR0aGlzLT5qb2JJZDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0UHJldmlvdXNBdHRlbXB0cygpOiBpbnQKCXsKCQlGaWxlOjpjbGVhblVwVGVtcEZpbGVzKCk7CgoJCXJldHVybiAkdGhpcy0+cHJldmlvdXNBdHRlbXB0czsKCX0KCglwdWJsaWMgZnVuY3Rpb24gY29tcGxldGUoKTogSm9iUmVzdWx0Cgl7CgkJcmV0dXJuIEpvYlJlc3VsdDo6bmV3Q29tcGxldGUoJHRoaXMtPmpvYklkKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gcmVzdW1lKCk6IEpvYlJlc3VsdAoJewoJCXJldHVybiBKb2JSZXN1bHQ6Om5ld1Jlc3VtZSgKCQkJJHRoaXMtPmpvYklkLAoJCQkkdGhpcy0+ZGF0YSwKCQkJJHRoaXMtPmdldFN0YXR1c01lc3NhZ2UoKSwKCQkJJHRoaXMtPmNhbkNhbmNlbCgpCgkJKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZmFpbCg/XEV4Y2VwdGlvbiAkZSA9IG51bGwpOiBKb2JSZXN1bHQKCXsKCQlyZXR1cm4gSm9iUmVzdWx0OjpuZXdGYWlsZWQoJHRoaXMtPmpvYklkLCAkdGhpcy0+ZGF0YSwgJGUpOwoJfQoKCS8qKgoJICogQHBhcmFtIGludCAkZXhwZWN0ZWQKCSAqIEBwYXJhbSBpbnQgJGRvbmUKCSAqIEBwYXJhbSBmbG9hdCAkc3RhcnQKCSAqIEBwYXJhbSBmbG9hdCAkbWF4VGltZQoJICogQHBhcmFtIGludHxudWxsICRtYXhCYXRjaAoJICoKCSAqIEByZXR1cm4gaW50CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBjYWxjdWxhdGVPcHRpbWFsQmF0Y2goJGV4cGVjdGVkLCAkZG9uZSwgJHN0YXJ0LCAkbWF4VGltZSwgJG1heEJhdGNoID0gbnVsbCkKCXsKCQkkc3BlbnQgPSBtaWNyb3RpbWUodHJ1ZSkgLSAkc3RhcnQ7CgkJJHJlbWFpbmluZyA9ICRtYXhUaW1lIC0gJHNwZW50OwoKCQkkZG9uZSA9IG1pbigkZXhwZWN0ZWQsICRkb25lKTsKCQkkcGVyY2VudERvbmUgPSAkZG9uZSAvICRleHBlY3RlZDsKCQkkcGVyY2VudFNwZW50ID0gJHNwZW50IC8gJG1heFRpbWU7CgoJCWlmICgkcGVyY2VudFNwZW50ID09IDApCgkJewoJCQlyZXR1cm4gJG1heEJhdGNoID4gMCA/ICRtYXhCYXRjaCA6ICRleHBlY3RlZDsKCQl9CgoJCWlmICgkcGVyY2VudFNwZW50IDw9IDEgJiYgKCRyZW1haW5pbmcgPCAxIHx8ICRwZXJjZW50U3BlbnQgPj0gLjkpKQoJCXsKCQkJLy8gaWYgOTAlIGZpbmlzaGVkLCBrZWVwIGdyYWJiaW5nIHRoYXQgYW1vdW50CgkJCXJldHVybiBtYXgoMSwgKCRwZXJjZW50RG9uZSA+PSAuOSA/ICRleHBlY3RlZCA6ICRkb25lKSk7CgkJfQoKCQkkbmV3RXhwZWN0ZWQgPSBmbG9vcigkZG9uZSAvICRwZXJjZW50U3BlbnQpOwoJCWlmICgkbWF4QmF0Y2ggPiAwKQoJCXsKCQkJJG5ld0V4cGVjdGVkID0gbWluKCRtYXhCYXRjaCwgJG5ld0V4cGVjdGVkKTsKCQl9CgoJCXJldHVybiBtYXgoMSwgJG5ld0V4cGVjdGVkKTsKCX0KfQo=","bytes":2939,"path":"src/XF/Job/AbstractJob.php","present":true,"sha256":"466ecb3b7a131668e67644892a7a73c4ff5a51515ceb3567756db281afd4b244"},"src/XF/Job/Cron.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBYRlxKb2I7Cgp1c2UgWEZcRmluZGVyXENyb25FbnRyeUZpbmRlcjsKdXNlIFhGXFNlcnZpY2VcQ3JvbkVudHJ5XENhbGN1bGF0ZU5leHRSdW5TZXJ2aWNlOwoKdXNlIGZ1bmN0aW9uIGNhbGxfdXNlcl9mdW5jOwoKY2xhc3MgQ3JvbiBleHRlbmRzIEFic3RyYWN0Sm9iCnsKCXB1YmxpYyBmdW5jdGlvbiBydW4oJG1heFJ1blRpbWUpCgl7CgkJJHN0YXJ0ID0gbWljcm90aW1lKHRydWUpOwoKCQkkY3JvblNlcnZpY2UgPSAkdGhpcy0+YXBwLT5zZXJ2aWNlKENhbGN1bGF0ZU5leHRSdW5TZXJ2aWNlOjpjbGFzcyk7CgoJCSRlbnRyaWVzID0gJHRoaXMtPmFwcC0+ZmluZGVyKENyb25FbnRyeUZpbmRlcjo6Y2xhc3MpCgkJCS0+d2hlcmVBZGRPbkFjdGl2ZSgpCgkJCS0+d2hlcmUoJ2FjdGl2ZScsIDEpCgkJCS0+d2hlcmUoJ25leHRfcnVuJywgJzw9JywgXFhGOjokdGltZSkKCQkJLT5vcmRlcignbmV4dF9ydW4nKTsKCgkJZm9yZWFjaCAoJGVudHJpZXMtPmZldGNoKCkgQVMgJGVudHJ5KQoJCXsKCQkJJGhhc0NhbGxiYWNrID0gJGVudHJ5LT5oYXNDYWxsYmFjaygpOwoKCQkJaWYgKCEkY3JvblNlcnZpY2UtPnVwZGF0ZUNyb25SdW5UaW1lQXRvbWljKCRlbnRyeSkpCgkJCXsKCQkJCWNvbnRpbnVlOwoJCQl9CgoJCQl0cnkKCQkJewoJCQkJaWYgKCRoYXNDYWxsYmFjaykKCQkJCXsKCQkJCQkkZW50cnlbJ2Nyb25fY2xhc3MnXSA9ICR0aGlzLT5hcHAtPmV4dGVuZENsYXNzKCRlbnRyeVsnY3Jvbl9jbGFzcyddKTsKCgkJCQkJY2FsbF91c2VyX2Z1bmMoCgkJCQkJCVskZW50cnlbJ2Nyb25fY2xhc3MnXSwgJGVudHJ5Wydjcm9uX21ldGhvZCddXSwKCQkJCQkJJGVudHJ5CgkJCQkJKTsKCQkJCX0KCQkJfQoJCQljYXRjaCAoXFRocm93YWJsZSAkZSkKCQkJewoJCQkJLy8gc3VwcHJlc3Mgc28gd2UgZG9uJ3QgZ2V0IHN0dWNrIC0tIG1ha2Ugc3VyZSB3ZSByb2xsYmFjayB0aG91Z2ggYXMgZG9uJ3Qga25vdyB0aGUgc3RhdGUKCQkJCSR0aGlzLT5hcHAtPmxvZ0V4Y2VwdGlvbigkZSwgdHJ1ZSk7CgkJCX0KCgkJCWlmIChtaWNyb3RpbWUodHJ1ZSkgLSAkc3RhcnQgPj0gJG1heFJ1blRpbWUpCgkJCXsKCQkJCWJyZWFrOwoJCQl9CgkJfQoKCQkkcmVzdWx0ID0gJHRoaXMtPnJlc3VtZSgpOwoJCSRyZXN1bHQtPmNvbnRpbnVlRGF0ZSA9ICRjcm9uU2VydmljZS0+Z2V0TWluaW11bU5leHRSdW5UaW1lKCk7CgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldFN0YXR1c01lc3NhZ2UoKQoJewoJCSRhY3Rpb25QaHJhc2UgPSBcWEY6OnBocmFzZSgncnVubmluZycpOwoJCSR0eXBlUGhyYXNlID0gXFhGOjpwaHJhc2UoJ2Nyb25fZW50cmllcycpOwoJCXJldHVybiBzcHJpbnRmKCclcy4uLiAlcycsICRhY3Rpb25QaHJhc2UsICR0eXBlUGhyYXNlKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gY2FuQ2FuY2VsKCkKCXsKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGNhblRyaWdnZXJCeUNob2ljZSgpCgl7CgkJcmV0dXJuIGZhbHNlOwoJfQp9Cg==","bytes":1528,"path":"src/XF/Job/Cron.php","present":true,"sha256":"7058ed4fcd276eac9224ac1da85915100c56f8741f1578782946652bec91b60a"},"src/XF/Job/JobParams.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBYRlxKb2I7CgpjbGFzcyBKb2JQYXJhbXMKewoJLyoqCgkgKiBAdmFyIHN0cmluZ3xudWxsCgkgKi8KCXByb3RlY3RlZCAkdW5pcXVlSWQ7CgoJLyoqCgkgKiBAdmFyIHN0cmluZwoJICovCglwcm90ZWN0ZWQgJGpvYkNsYXNzOwoKCS8qKgoJICogQHZhciBhcnJheQoJICovCglwcm90ZWN0ZWQgJHBhcmFtczsKCgkvKioKCSAqIEB2YXIgYm9vbAoJICovCglwcm90ZWN0ZWQgJG1hbnVhbCA9IGZhbHNlOwoKCS8qKgoJICogQHZhciBpbnR8bnVsbAoJICovCglwcm90ZWN0ZWQgJHJ1blRpbWU7CgoJLyoqCgkgKiBAdmFyIGJvb2wKCSAqLwoJcHJvdGVjdGVkICRibG9ja2luZyA9IGZhbHNlOwoKCS8qKgoJICogQHZhciBpbnQKCSAqLwoJcHJvdGVjdGVkICRwcmlvcml0eSA9IDEwMDsKCglwdWJsaWMgZnVuY3Rpb24gZ2V0VW5pcXVlSWQoKTogP3N0cmluZwoJewoJCXJldHVybiAkdGhpcy0+dW5pcXVlSWQ7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHNldFVuaXF1ZUlkKD9zdHJpbmcgJHVuaXF1ZUlkKTogSm9iUGFyYW1zCgl7CgkJJHRoaXMtPnVuaXF1ZUlkID0gJHVuaXF1ZUlkOwoKCQlyZXR1cm4gJHRoaXM7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldEpvYkNsYXNzKCk6IHN0cmluZwoJewoJCXJldHVybiAkdGhpcy0+am9iQ2xhc3M7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHNldEpvYkNsYXNzKHN0cmluZyAkam9iQ2xhc3MpOiBKb2JQYXJhbXMKCXsKCQkkdGhpcy0+am9iQ2xhc3MgPSAkam9iQ2xhc3M7CgoJCXJldHVybiAkdGhpczsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0UGFyYW1zKCk6IGFycmF5Cgl7CgkJcmV0dXJuICR0aGlzLT5wYXJhbXM7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHNldFBhcmFtcyhhcnJheSAkcGFyYW1zKTogSm9iUGFyYW1zCgl7CgkJJHRoaXMtPnBhcmFtcyA9ICRwYXJhbXM7CgoJCXJldHVybiAkdGhpczsKCX0KCglwdWJsaWMgZnVuY3Rpb24gaXNNYW51YWwoKTogYm9vbAoJewoJCXJldHVybiAkdGhpcy0+bWFudWFsOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBzZXRNYW51YWwoYm9vbCAkbWFudWFsKTogSm9iUGFyYW1zCgl7CgkJJHRoaXMtPm1hbnVhbCA9ICRtYW51YWw7CgoJCXJldHVybiAkdGhpczsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0UnVuVGltZSgpOiA/aW50Cgl7CgkJcmV0dXJuICR0aGlzLT5ydW5UaW1lOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBzZXRSdW5UaW1lKD9pbnQgJHJ1blRpbWUpOiBKb2JQYXJhbXMKCXsKCQkkdGhpcy0+cnVuVGltZSA9ICRydW5UaW1lOwoKCQlyZXR1cm4gJHRoaXM7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGlzQmxvY2tpbmcoKTogYm9vbAoJewoJCXJldHVybiAkdGhpcy0+YmxvY2tpbmc7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHNldEJsb2NraW5nKGJvb2wgJGJsb2NraW5nKTogSm9iUGFyYW1zCgl7CgkJJHRoaXMtPmJsb2NraW5nID0gJGJsb2NraW5nOwoKCQlyZXR1cm4gJHRoaXM7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldFByaW9yaXR5KCk6IGludAoJewoJCXJldHVybiAkdGhpcy0+cHJpb3JpdHk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHNldFByaW9yaXR5KGludCAkcHJpb3JpdHkpOiBKb2JQYXJhbXMKCXsKCQkkdGhpcy0+cHJpb3JpdHkgPSAkcHJpb3JpdHk7CgoJCXJldHVybiAkdGhpczsKCX0KfQo=","bytes":1649,"path":"src/XF/Job/JobParams.php","present":true,"sha256":"800b231928447f3aa67601d3ea9c62f2d49b3da7495078d80a767b0e3681ccff"},"src/XF/Job/JobResult.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBYRlxKb2I7CgpjbGFzcyBKb2JSZXN1bHQKewoJcHVibGljIGNvbnN0IFJFU1VMVF9DT01QTEVURUQgPSAxOwoJcHVibGljIGNvbnN0IFJFU1VMVF9SRVNVTUUgPSAyOwoJcHVibGljIGNvbnN0IFJFU1VMVF9SRUFUVEVNUFQgPSAzOwoJcHVibGljIGNvbnN0IFJFU1VMVF9GQUlMRUQgPSA0OwoKCXB1YmxpYyAkcmVzdWx0OwoJcHVibGljICRleGNlcHRpb247CgoJcHVibGljICRqb2JJZDsKCXB1YmxpYyAkZGF0YTsKCXB1YmxpYyAkY29udGludWVEYXRlOwoJcHVibGljICRzdGF0dXNNZXNzYWdlOwoJcHVibGljICRjYW5DYW5jZWw7CgoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBuZXdDb21wbGV0ZSg/aW50ICRqb2JJZCwgYXJyYXkgJGRhdGEgPSBbXSwgc3RyaW5nICRzdGF0dXNNZXNzYWdlID0gJycsIGJvb2wgJGNhbkNhbmNlbCA9IGZhbHNlKTogSm9iUmVzdWx0Cgl7CgkJJHJlc3VsdCA9IG5ldyBzZWxmKCk7CgoJCSRyZXN1bHQtPnJlc3VsdCA9IHNlbGY6OlJFU1VMVF9DT01QTEVURUQ7CgkJJHJlc3VsdC0+am9iSWQgPSAkam9iSWQ7CgkJJHJlc3VsdC0+ZGF0YSA9ICRkYXRhOwoJCSRyZXN1bHQtPnN0YXR1c01lc3NhZ2UgPSAkc3RhdHVzTWVzc2FnZTsKCQkkcmVzdWx0LT5jYW5DYW5jZWwgPSAkY2FuQ2FuY2VsOwoKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5ld1Jlc3VtZSg/aW50ICRqb2JJZCwgYXJyYXkgJGRhdGEgPSBbXSwgc3RyaW5nICRzdGF0dXNNZXNzYWdlID0gJycsIGJvb2wgJGNhbkNhbmNlbCA9IGZhbHNlKTogSm9iUmVzdWx0Cgl7CgkJJHJlc3VsdCA9IG5ldyBzZWxmKCk7CgoJCSRyZXN1bHQtPnJlc3VsdCA9IHNlbGY6OlJFU1VMVF9SRVNVTUU7CgkJJHJlc3VsdC0+am9iSWQgPSAkam9iSWQ7CgkJJHJlc3VsdC0+ZGF0YSA9ICRkYXRhOwoJCSRyZXN1bHQtPnN0YXR1c01lc3NhZ2UgPSAkc3RhdHVzTWVzc2FnZSA/OiAnJzsKCQkkcmVzdWx0LT5jYW5DYW5jZWwgPSAkY2FuQ2FuY2VsOwoKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5ld1JlYXR0ZW1wdCg/aW50ICRqb2JJZCwgaW50ICRuZXh0VHJ5RGF0ZSwgYXJyYXkgJGRhdGEgPSBbXSk6IEpvYlJlc3VsdAoJewoJCSRyZXN1bHQgPSBuZXcgc2VsZigpOwoKCQkkcmVzdWx0LT5yZXN1bHQgPSBzZWxmOjpSRVNVTFRfUkVBVFRFTVBUOwoJCSRyZXN1bHQtPmpvYklkID0gJGpvYklkOwoJCSRyZXN1bHQtPmRhdGEgPSAkZGF0YTsKCQkkcmVzdWx0LT5jb250aW51ZURhdGUgPSAkbmV4dFRyeURhdGU7CgoJCXJldHVybiAkcmVzdWx0OwoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbmV3RmFpbGVkKD9pbnQgJGpvYklkLCBhcnJheSAkZGF0YSA9IFtdLCA/XEV4Y2VwdGlvbiAkZSA9IG51bGwpOiBKb2JSZXN1bHQKCXsKCQkkcmVzdWx0ID0gbmV3IHNlbGYoKTsKCgkJJHJlc3VsdC0+cmVzdWx0ID0gc2VsZjo6UkVTVUxUX0ZBSUxFRDsKCQkkcmVzdWx0LT5qb2JJZCA9ICRqb2JJZDsKCQkkcmVzdWx0LT5kYXRhID0gJGRhdGE7CgkJJHJlc3VsdC0+ZXhjZXB0aW9uID0gJGUgPzogbmV3IE1hbnVhbGx5RmFpbGVkRXhjZXB0aW9uKCk7CgoJCXJldHVybiAkcmVzdWx0OwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBfX2dldChzdHJpbmcgJG5hbWUpCgl7CgkJc3dpdGNoICgkbmFtZSkKCQl7CgkJCWNhc2UgJ2NvbXBsZXRlZCc6CgkJCQlyZXR1cm4gKAoJCQkJCSR0aGlzLT5yZXN1bHQgPT09IHNlbGY6OlJFU1VMVF9DT01QTEVURUQKCQkJCQl8fCAkdGhpcy0+cmVzdWx0ID09PSBzZWxmOjpSRVNVTFRfRkFJTEVECgkJCQkpOwoJCX0KCgoJCXRyaWdnZXJfZXJyb3IoCgkJCSdVbmRlZmluZWQgcHJvcGVydHk6ICcgLiBzZWxmOjpjbGFzcyAuICc6OicgLiAkbmFtZSwKCQkJRV9VU0VSX1dBUk5JTkcKCQkpOwoJCXJldHVybiBudWxsOwoJfQp9Cg==","bytes":1936,"path":"src/XF/Job/JobResult.php","present":true,"sha256":"03d0d387a01fe859212ae3df89e92df2207e7005946284f41702636912c9ebe7"},"src/XF/Job/Manager.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBYRlxKb2I7Cgp1c2UgWEZcQXBwOwp1c2UgWEZcRGJcQWJzdHJhY3RBZGFwdGVyOwoKdXNlIGZ1bmN0aW9uIGNvdW50LCBzdHJsZW47CgpjbGFzcyBNYW5hZ2VyCnsKCS8qKgoJICogQHZhciBBcHAKCSAqLwoJcHJvdGVjdGVkICRhcHA7CgoJLyoqCgkgKiBAdmFyIEFic3RyYWN0QWRhcHRlcgoJICovCglwcm90ZWN0ZWQgJGRiOwoKCXByb3RlY3RlZCAkYWxsb3dNYW51YWw7CgoJcHJvdGVjdGVkICRmb3JjZU1hbnVhbCA9IGZhbHNlOwoKCXByb3RlY3RlZCAkdW5pcXVlRW5xdWV1ZWQgPSBbXTsKCglwcm90ZWN0ZWQgJGF1dG9FbnF1ZXVlZExpc3QgPSBbXTsKCXByb3RlY3RlZCAkYXV0b0Jsb2NraW5nTGlzdCA9IFtdOwoJcHJvdGVjdGVkICRtYW51YWxFbnF1ZXVlZExpc3QgPSBbXTsKCglwcm90ZWN0ZWQgJGF1dG9CbG9ja2luZ01lc3NhZ2UgPSBudWxsOwoKCXByb3RlY3RlZCAkc2h1dGRvd25SZWdpc3RlcmVkID0gZmFsc2U7Cglwcm90ZWN0ZWQgJHJ1bm5pbmdKb2I7CgoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEFwcCAkYXBwLCAkYWxsb3dNYW51YWwgPSB0cnVlLCAkZm9yY2VNYW51YWwgPSBmYWxzZSkKCXsKCQkkdGhpcy0+YXBwID0gJGFwcDsKCQkkdGhpcy0+ZGIgPSAkYXBwLT5kYigpOwoJCSR0aGlzLT5hbGxvd01hbnVhbCA9ICRhbGxvd01hbnVhbCB8fCAkZm9yY2VNYW51YWw7CgkJJHRoaXMtPmZvcmNlTWFudWFsID0gJGZvcmNlTWFudWFsOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBzZXRBbGxvd01hbnVhbCgkYWxsb3dNYW51YWwpCgl7CgkJJHRoaXMtPmFsbG93TWFudWFsID0gJGFsbG93TWFudWFsOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBzZXRGb3JjZU1hbnVhbCgkZm9yY2VNYW51YWwpCgl7CgkJJHRoaXMtPmZvcmNlTWFudWFsID0gJGZvcmNlTWFudWFsOwoJCWlmICgkZm9yY2VNYW51YWwpCgkJewoJCQkkdGhpcy0+c2V0QWxsb3dNYW51YWwodHJ1ZSk7CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjYW5SdW5Kb2JzKCk6IGJvb2wKCXsKCQlyZXR1cm4gKFxYRjo6JHZlcnNpb25JZCA9PSAkdGhpcy0+YXBwLT5vcHRpb25zKCktPmN1cnJlbnRWZXJzaW9uSWQgfHwgISR0aGlzLT5hcHAtPmNvbmZpZygnY2hlY2tWZXJzaW9uJykpOwoJfQoKCS8qKgoJICogQHBhcmFtIGJvb2wgJG1hbnVhbAoJICogQHBhcmFtIGludHxmbG9hdCAkbWF4UnVuVGltZQoJICoKCSAqIEByZXR1cm4gbnVsbHxKb2JSZXN1bHQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHJ1blF1ZXVlKCRtYW51YWwsICRtYXhSdW5UaW1lKQoJewoJCWlmICgkbWF4UnVuVGltZSA8IDIpCgkJewoJCQkkbWF4UnVuVGltZSA9IDI7CgkJfQoKCQkkcnVubmFibGUgPSAkdGhpcy0+Z2V0UnVubmFibGUoJG1hbnVhbCk7CgkJJHN0YXJ0VGltZSA9IG1pY3JvdGltZSh0cnVlKTsKCQkkcmVzdWx0ID0gbnVsbDsKCgkJZm9yZWFjaCAoJHJ1bm5hYmxlIEFTICRqb2IpCgkJewoJCQkkcmVtYWluaW5nID0gJG1heFJ1blRpbWUgLSAobWljcm90aW1lKHRydWUpIC0gJHN0YXJ0VGltZSk7CgkJCWlmICgkcmVtYWluaW5nIDwgMSkKCQkJewoJCQkJYnJlYWs7CgkJCX0KCgkJCSRyZXN1bHQgPSAkdGhpcy0+cnVuSm9iRW50cnkoJGpvYiwgJHJlbWFpbmluZyk7CgkJfQoKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCgkvKioKCSAqIEBwYXJhbSBhcnJheSAkaWRzCgkgKiBAcGFyYW0gaW50fGZsb2F0ICRtYXhSdW5UaW1lCgkgKiBAcmV0dXJuIGFycmF5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBydW5CeUlkcyhhcnJheSAkaWRzLCAkbWF4UnVuVGltZSkKCXsKCQlpZiAoJG1heFJ1blRpbWUgPCAyKQoJCXsKCQkJJG1heFJ1blRpbWUgPSAyOwoJCX0KCgkJJHN0YXJ0VGltZSA9IG1pY3JvdGltZSh0cnVlKTsKCQkkcmVzdWx0ID0gbnVsbDsKCgkJZm9yZWFjaCAoJGlkcyBBUyAkayA9PiAkaWQpCgkJewoJCQkkcmVtYWluaW5nID0gJG1heFJ1blRpbWUgLSAobWljcm90aW1lKHRydWUpIC0gJHN0YXJ0VGltZSk7CgkJCWlmICgkcmVtYWluaW5nIDwgMSkKCQkJewoJCQkJYnJlYWs7CgkJCX0KCgkJCSRqb2IgPSAkdGhpcy0+Z2V0Sm9iKCRpZCk7CgkJCWlmICgkam9iICYmICRqb2JbJ3RyaWdnZXJfZGF0ZSddIDw9IHRpbWUoKSkKCQkJewoJCQkJJHJlc3VsdCA9ICR0aGlzLT5ydW5Kb2JFbnRyeSgkam9iLCAkcmVtYWluaW5nKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRyZXN1bHQgPSBudWxsOwoJCQl9CgoJCQlpZiAoISRyZXN1bHQgfHwgJHJlc3VsdC0+cmVzdWx0ID09PSBKb2JSZXN1bHQ6OlJFU1VMVF9DT01QTEVURUQpCgkJCXsKCQkJCXVuc2V0KCRpZHNbJGtdKTsKCQkJfQoJCX0KCgkJcmV0dXJuIFsKCQkJJ3Jlc3VsdCcgPT4gJHJlc3VsdCwKCQkJJ3JlbWFpbmluZycgPT4gJGlkcywKCQldOwoJfQoKCS8qKgoJICogQHBhcmFtIHN0cmluZyAka2V5CgkgKiBAcGFyYW0gaW50fGZsb2F0ICRtYXhSdW5UaW1lCgkgKgoJICogQHJldHVybiBudWxsfEpvYlJlc3VsdAoJICovCglwdWJsaWMgZnVuY3Rpb24gcnVuVW5pcXVlKCRrZXksICRtYXhSdW5UaW1lKQoJewoJCWlmICgkbWF4UnVuVGltZSA8IDIpCgkJewoJCQkkbWF4UnVuVGltZSA9IDI7CgkJfQoKCQkkam9iID0gJHRoaXMtPmdldFVuaXF1ZUpvYigka2V5KTsKCQlpZiAoJGpvYikKCQl7CgkJCXJldHVybiAkdGhpcy0+cnVuSm9iRW50cnkoJGpvYiwgJG1heFJ1blRpbWUpOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gbnVsbDsKCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHJ1bkJ5SWQoJGlkLCAkbWF4UnVuVGltZSkKCXsKCQlpZiAoJG1heFJ1blRpbWUgPCAyKQoJCXsKCQkJJG1heFJ1blRpbWUgPSAyOwoJCX0KCgkJJGpvYiA9ICR0aGlzLT5nZXRKb2IoJGlkKTsKCQlpZiAoJGpvYikKCQl7CgkJCXJldHVybiAkdGhpcy0+cnVuSm9iRW50cnkoJGpvYiwgJG1heFJ1blRpbWUpOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gbnVsbDsKCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHF1ZXVlUGVuZGluZygkbWFudWFsKQoJewoJCXJldHVybiBjb3VudCgkdGhpcy0+Z2V0UnVubmFibGUoJG1hbnVhbCkpID4gMDsKCX0KCgkvKioKCSAqIEBwYXJhbSBhcnJheSAkam9iCgkgKiBAcGFyYW0gaW50fGZsb2F0ICRtYXhSdW5UaW1lCgkgKgoJICogQHJldHVybiBKb2JSZXN1bHQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHJ1bkpvYkVudHJ5KGFycmF5ICRqb2IsICRtYXhSdW5UaW1lKQoJewoJCSRhZmZlY3RlZCA9ICR0aGlzLT5kYi0+dXBkYXRlKCd4Zl9qb2InLCBbCgkJCSd0cmlnZ2VyX2RhdGUnID0+IHRpbWUoKSArIDE1ICogNjAsCgkJCSdsYXN0X3J1bl9kYXRlJyA9PiB0aW1lKCksCgkJXSwgJ2pvYl9pZCA9ID8gQU5EIHRyaWdnZXJfZGF0ZSA9ID8nLCBbJGpvYlsnam9iX2lkJ10sICRqb2JbJ3RyaWdnZXJfZGF0ZSddXSk7CgkJaWYgKCEkYWZmZWN0ZWQpCgkJewoJCQkvLyBqb2IgaGFzIGFscmVhZHkgYmVlbiB0YWtlbiwgdHJlYXQgaXQgYXMgY29tcGxldGUKCQkJcmV0dXJuIEpvYlJlc3VsdDo6bmV3Q29tcGxldGUoJGpvYlsnam9iX2lkJ10pOwoJCX0KCgkJJHJlc3VsdCA9ICR0aGlzLT5ydW5Kb2JJbnRlcm5hbCgkam9iLCAkbWF4UnVuVGltZSk7CgoJCXN3aXRjaCAoJHJlc3VsdC0+cmVzdWx0KQoJCXsKCQkJY2FzZSBKb2JSZXN1bHQ6OlJFU1VMVF9DT01QTEVURUQ6CgkJCQkkdGhpcy0+Y2FuY2VsQW5kRGVxdWV1ZUpvYigkam9iKTsKCQkJCWJyZWFrOwoKCQkJY2FzZSBKb2JSZXN1bHQ6OlJFU1VMVF9SRVNVTUU6CgkJCWNhc2UgSm9iUmVzdWx0OjpSRVNVTFRfUkVBVFRFTVBUOgoJCQkJJHVwZGF0ZSA9IFsKCQkJCQknZXhlY3V0ZV9kYXRhJyA9PiBzZXJpYWxpemUoJHJlc3VsdC0+ZGF0YSksCgkJCQkJJ3RyaWdnZXJfZGF0ZScgPT4gJHJlc3VsdC0+Y29udGludWVEYXRlID8gKGludCkgJHJlc3VsdC0+Y29udGludWVEYXRlIDogJGpvYlsndHJpZ2dlcl9kYXRlJ10sCgkJCQkJJ2xhc3RfcnVuX2RhdGUnID0+IHRpbWUoKSwKCQkJCV07CgoJCQkJaWYgKCRyZXN1bHQtPnJlc3VsdCA9PT0gSm9iUmVzdWx0OjpSRVNVTFRfUkVBVFRFTVBUKQoJCQkJewoJCQkJCSR1cGRhdGVbJ2F0dGVtcHRzJ10gPSAkam9iWydhdHRlbXB0cyddICsgMTsKCQkJCX0KCgkJCQkkdGhpcy0+ZGItPnVwZGF0ZSgneGZfam9iJywgJHVwZGF0ZSwgJ2pvYl9pZCA9ID8nLCAkam9iWydqb2JfaWQnXSk7CgoJCQkJYnJlYWs7CgoJCQljYXNlIEpvYlJlc3VsdDo6UkVTVUxUX0ZBSUxFRDoKCQkJCSR0aGlzLT5jYW5jZWxBbmREZXF1ZXVlSm9iKCRqb2IpOwoKCQkJCWlmICgkcmVzdWx0LT5leGNlcHRpb24pCgkJCQl7CgkJCQkJJGpvYkZvckxvZ2dpbmcgPSAkam9iOwoJCQkJCSRqb2JGb3JMb2dnaW5nWydleGVjdXRlX2RhdGEnXSA9IHNlcmlhbGl6ZSgkcmVzdWx0LT5kYXRhKTsKCQkJCQkkdGhpcy0+bG9nRmFpbGVkSm9iKCRqb2JGb3JMb2dnaW5nLCAkcmVzdWx0LT5leGNlcHRpb24pOwoJCQkJfQoKCQkJCWJyZWFrOwoJCX0KCgkJaWYgKCEkam9iWydtYW51YWxfZXhlY3V0ZSddKQoJCXsKCQkJJHRoaXMtPnNjaGVkdWxlUnVuVGltZVVwZGF0ZSgpOwoJCX0KCgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldEpvYlJ1bm5lcihhcnJheSAkam9iKQoJewoJCXJldHVybiAkdGhpcy0+YXBwLT5qb2IoJGpvYlsnZXhlY3V0ZV9jbGFzcyddLCAkam9iWydqb2JfaWQnXSwgdW5zZXJpYWxpemUoJGpvYlsnZXhlY3V0ZV9kYXRhJ10pLCAkam9iWydhdHRlbXB0cyddKTsKCX0KCglwcm90ZWN0ZWQgZnVuY3Rpb24gcnVuSm9iSW50ZXJuYWwoYXJyYXkgJGpvYiwgJG1heFJ1blRpbWUpCgl7CgkJJHJ1bm5lciA9ICR0aGlzLT5nZXRKb2JSdW5uZXIoJGpvYik7CgkJaWYgKCEkcnVubmVyKQoJCXsKCQkJJHRoaXMtPmFwcC0+bG9nRXhjZXB0aW9uKG5ldyBcRXhjZXB0aW9uKCJDb3VsZCBub3QgZ2V0IHJ1bm5lciBmb3Igam9iICRqb2JbZXhlY3V0ZV9jbGFzc10gKHVuaXF1ZTogJGpvYlt1bmlxdWVfa2V5XSkuIFNraXBwaW5nLiIpKTsKCgkJCXJldHVybiBKb2JSZXN1bHQ6Om5ld0NvbXBsZXRlKCRqb2JbJ2pvYl9pZCddKTsKCQl9CgoJCWlmICghJHRoaXMtPnNodXRkb3duUmVnaXN0ZXJlZCkKCQl7CgkJCXJlZ2lzdGVyX3NodXRkb3duX2Z1bmN0aW9uKFskdGhpcywgJ2hhbmRsZVNodXRkb3duJ10pOwoJCX0KCgkJJHRoaXMtPnJ1bm5pbmdKb2IgPSAkam9iOwoKCQl0cnkKCQl7CgkJCSRyZXN1bHQgPSAkcnVubmVyLT5ydW4oJG1heFJ1blRpbWUpOwoJCQkkdGhpcy0+cnVubmluZ0pvYiA9IG51bGw7CgkJfQoJCWNhdGNoIChcVGhyb3dhYmxlICRlKQoJCXsKCQkJJHRoaXMtPnJ1bm5pbmdKb2IgPSBudWxsOwoKCQkJJHRoaXMtPmRiLT5yb2xsYmFja0FsbCgpOwoKCQkJaWYgKCRqb2JbJ21hbnVhbF9leGVjdXRlJ10gfHwgJHRoaXMtPmFwcC0+Y29uZmlnKClbJ2RldmVsb3BtZW50J11bJ3Rocm93Sm9iRXJyb3JzJ10pCgkJCXsKCQkJCSR0aGlzLT5kYi0+dXBkYXRlKCd4Zl9qb2InLCBbCgkJCQkJJ3RyaWdnZXJfZGF0ZScgPT4gJGpvYlsndHJpZ2dlcl9kYXRlJ10sCgkJCQkJJ2xhc3RfcnVuX2RhdGUnID0+IHRpbWUoKSwKCQkJCV0sICdqb2JfaWQgPSA/JywgJGpvYlsnam9iX2lkJ10pOwoKCQkJCXRocm93ICRlOwoJCQl9CgoJCQkkdGhpcy0+YXBwLT5sb2dFeGNlcHRpb24oJGUsIGZhbHNlLCAiJGpvYltleGVjdXRlX2NsYXNzXTogIik7CgoJCQkkZGF0YSA9IHVuc2VyaWFsaXplKCRqb2JbJ2V4ZWN1dGVfZGF0YSddKTsKCQkJJHJlc3VsdCA9IG51bGw7CgoJCQlpZiAobWV0aG9kX2V4aXN0cygkcnVubmVyLCAnZ2V0TmV4dEF0dGVtcHREYXRlJykpCgkJCXsKCQkJCSRuZXh0VHJ5ID0gJHJ1bm5lci0+Z2V0TmV4dEF0dGVtcHREYXRlKCRqb2JbJ2F0dGVtcHRzJ10pOwoJCQkJaWYgKCRuZXh0VHJ5ICE9PSBudWxsKQoJCQkJewoJCQkJCSRyZXN1bHQgPSBKb2JSZXN1bHQ6Om5ld1JlYXR0ZW1wdCgkam9iWydqb2JfaWQnXSwgJG5leHRUcnksICRkYXRhKTsKCQkJCX0KCQkJfQoKCQkJaWYgKCEkcmVzdWx0KQoJCQl7CgkJCQkkZXhjZXB0aW9uID0gJGUgaW5zdGFuY2VvZiBcRXhjZXB0aW9uID8gJGUgOiBuZXcgXEV4Y2VwdGlvbigkZS0+Z2V0TWVzc2FnZSgpLCAoaW50KSAkZS0+Z2V0Q29kZSgpLCAkZSk7CgkJCQkkcmVzdWx0ID0gSm9iUmVzdWx0OjpuZXdGYWlsZWQoJGpvYlsnam9iX2lkJ10sICRkYXRhLCAkZXhjZXB0aW9uKTsKCQkJfQoJCX0KCgkJaWYgKCEoJHJlc3VsdCBpbnN0YW5jZW9mIEpvYlJlc3VsdCkpCgkJewoJCQl0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCJKb2JzIG11c3QgcmV0dXJuIEpvYlJlc3VsdCBvYmplY3RzIik7CgkJfQoKCQlcWEY6OnRyaWdnZXJSdW5PbmNlKCk7CgoJCXJldHVybiAkcmVzdWx0OwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBoYW5kbGVTaHV0ZG93bigpCgl7CgkJaWYgKCEkdGhpcy0+cnVubmluZ0pvYikKCQl7CgkJCXJldHVybjsKCQl9CgoJCSRqb2IgPSAkdGhpcy0+cnVubmluZ0pvYjsKCgkJdHJ5CgkJewoJCQkkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwoKCQkJLy8gam9iIGlzIGJlaW5nIHJ1biBtYW51YWxseSwgdGhlcmUncyBubyBlcnJvciB3aGljaCBpbXBsaWVzIGEgY2FsbCB0byBleGl0LCBvciBmb3JjZWQgcmUtZW5xdWV1ZQoJCQlpZiAoJGpvYlsnbWFudWFsX2V4ZWN1dGUnXSB8fCAhJGVycm9yIHx8ICR0aGlzLT5hcHAtPmNvbmZpZygpWydkZXZlbG9wbWVudCddWyd0aHJvd0pvYkVycm9ycyddKQoJCQl7CgkJCQkkdGhpcy0+ZGItPnJvbGxiYWNrQWxsKCk7CgoJCQkJJHRoaXMtPmRiLT51cGRhdGUoJ3hmX2pvYicsIFsKCQkJCQkndHJpZ2dlcl9kYXRlJyA9PiAkam9iWyd0cmlnZ2VyX2RhdGUnXSwKCQkJCQknbGFzdF9ydW5fZGF0ZScgPT4gdGltZSgpLAoJCQkJXSwgJ2pvYl9pZCA9ID8nLCAkam9iWydqb2JfaWQnXSk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkdGhpcy0+ZGItPnJvbGxiYWNrQWxsKCk7CgoJCQkJJGV4Y2VwdGlvbiA9IG5ldyBcRXhjZXB0aW9uKCJ7JGVycm9yWydtZXNzYWdlJ119IGluIHskZXJyb3JbJ2ZpbGUnXX06eyRlcnJvclsnbGluZSddfSIpOwoJCQkJJHRoaXMtPmFwcC0+bG9nRXhjZXB0aW9uKCRleGNlcHRpb24sIGZhbHNlLCAiSm9iICRqb2JbZXhlY3V0ZV9jbGFzc106ICIpOwoKCQkJCSRzaG91bGRSZXRyeSA9IGZhbHNlOwoJCQkJJHJ1bm5lciA9ICR0aGlzLT5nZXRKb2JSdW5uZXIoJGpvYik7CgkJCQlpZiAoJHJ1bm5lciAmJiBtZXRob2RfZXhpc3RzKCRydW5uZXIsICdnZXROZXh0QXR0ZW1wdERhdGUnKSkKCQkJCXsKCQkJCQkkbmV4dFRyeSA9ICRydW5uZXItPmdldE5leHRBdHRlbXB0RGF0ZSgkam9iWydhdHRlbXB0cyddKTsKCQkJCQlpZiAoJG5leHRUcnkgIT09IG51bGwpCgkJCQkJewoJCQkJCQkkdGhpcy0+ZGItPnVwZGF0ZSgneGZfam9iJywgWwoJCQkJCQkJJ3RyaWdnZXJfZGF0ZScgPT4gJG5leHRUcnksCgkJCQkJCQknbGFzdF9ydW5fZGF0ZScgPT4gdGltZSgpLAoJCQkJCQkJJ2F0dGVtcHRzJyA9PiAkam9iWydhdHRlbXB0cyddICsgMSwKCQkJCQkJXSwgJ2pvYl9pZCA9ID8nLCAkam9iWydqb2JfaWQnXSk7CgoJCQkJCQkkc2hvdWxkUmV0cnkgPSB0cnVlOwoJCQkJCX0KCQkJCX0KCgkJCQlpZiAoISRzaG91bGRSZXRyeSkKCQkJCXsKCQkJCQkkdGhpcy0+ZGItPmRlbGV0ZSgneGZfam9iJywgJ2pvYl9pZCA9ID8nLCAkam9iWydqb2JfaWQnXSk7CgkJCQkJJHRoaXMtPmxvZ0ZhaWxlZEpvYigkam9iLCAkZXhjZXB0aW9uKTsKCQkJCX0KCQkJfQoKCQkJJHRoaXMtPnVwZGF0ZU5leHRSdW5UaW1lKCk7CgkJfQoJCWNhdGNoIChcVGhyb3dhYmxlICRlKQoJCXsKCQkJdHJ5CgkJCXsKCQkJCSR0aGlzLT5hcHAtPmxvZ0V4Y2VwdGlvbigkZSwgZmFsc2UsICdKb2Igc2h1dGRvd24gaGFuZGxlciBlcnJvcjogJyk7CgkJCX0KCQkJY2F0Y2ggKFxUaHJvd2FibGUgJGxvZ0Vycm9yKQoJCQl7CgkJCX0KCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGNhbmNlbEpvYihhcnJheSAkam9iKQoJewoJCSRyb3dzID0gJHRoaXMtPmRiLT5kZWxldGUoJ3hmX2pvYicsICdqb2JfaWQgPSA/JywgJGpvYlsnam9iX2lkJ10pOwoJCWlmICgkcm93cykKCQl7CgkJCSR0aGlzLT5zY2hlZHVsZVJ1blRpbWVVcGRhdGUoKTsKCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGNhbmNlbFVuaXF1ZUpvYigkdW5pcXVlSWQpCgl7CgkJJGpvYiA9ICR0aGlzLT5nZXRVbmlxdWVKb2IoJHVuaXF1ZUlkKTsKCQlpZiAoJGpvYikKCQl7CgkJCSR0aGlzLT5jYW5jZWxKb2IoJGpvYik7CgkJCXJldHVybiB0cnVlOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjYW5jZWxBbmREZXF1ZXVlSm9iKGFycmF5ICRqb2IpOiB2b2lkCgl7CgkJJHRoaXMtPmNhbmNlbEpvYigkam9iKTsKCgkJdW5zZXQoCgkJCSR0aGlzLT5tYW51YWxFbnF1ZXVlZExpc3RbJGpvYlsnam9iX2lkJ11dLAoJCQkkdGhpcy0+YXV0b0VucXVldWVkTGlzdFskam9iWydqb2JfaWQnXV0sCgkJCSR0aGlzLT5hdXRvQmxvY2tpbmdMaXN0WyRqb2JbJ2pvYl9pZCddXQoJCSk7CgoJCWlmICgkam9iWyd1bmlxdWVfa2V5J10pCgkJewoJCQl1bnNldCgkdGhpcy0+dW5pcXVlRW5xdWV1ZWRbJGpvYlsndW5pcXVlX2tleSddXSk7CgkJfQoJfQoKCXByb3RlY3RlZCBmdW5jdGlvbiBsb2dGYWlsZWRKb2IoYXJyYXkgJGpvYiwgXEV4Y2VwdGlvbiAkZXhjZXB0aW9uKTogYm9vbAoJewoJCWlmICghXFhGOjokZGVidWdNb2RlKQoJCXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJJHRoaXMtPmRiLT5pbnNlcnQoJ3hmX2ZhaWxlZF9qb2InLCBbCgkJCSdleGVjdXRlX2NsYXNzJyA9PiAkam9iWydleGVjdXRlX2NsYXNzJ10sCgkJCSdleGVjdXRlX2RhdGEnID0+ICRqb2JbJ2V4ZWN1dGVfZGF0YSddLAoJCQknZXhjZXB0aW9uJyA9PiAkZXhjZXB0aW9uLAoJCQknZmFpbF9kYXRlJyA9PiB0aW1lKCksCgkJXSk7CgoJCXJldHVybiB0cnVlOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRSdW5uYWJsZSgkbWFudWFsKQoJewoJCXJldHVybiAkdGhpcy0+ZGItPmZldGNoQWxsKCIKCQkJU0VMRUNUICoKCQkJRlJPTSB4Zl9qb2IKCQkJV0hFUkUgdHJpZ2dlcl9kYXRlIDw9ID8KCQkJCUFORCBtYW51YWxfZXhlY3V0ZSA9ID8KCQkJT1JERVIgQlkgcHJpb3JpdHkgREVTQywgdHJpZ2dlcl9kYXRlIEFTQwoJCQlMSU1JVCAxMDAwCgkJIiwgW1xYRjo6JHRpbWUsICRtYW51YWwgPyAxIDogMF0pOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRGaXJzdFJ1bm5hYmxlKCRtYW51YWwpCgl7CgkJcmV0dXJuICR0aGlzLT5kYi0+ZmV0Y2hSb3coIgoJCQlTRUxFQ1QgKgoJCQlGUk9NIHhmX2pvYgoJCQlXSEVSRSB0cmlnZ2VyX2RhdGUgPD0gPwoJCQkJQU5EIG1hbnVhbF9leGVjdXRlID0gPwoJCQlPUkRFUiBCWSBwcmlvcml0eSBERVNDLCB0cmlnZ2VyX2RhdGUgQVNDCgkJCUxJTUlUIDEKCQkiLCBbXFhGOjokdGltZSwgJG1hbnVhbCA/IDEgOiAwXSk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGhhc1N0b3BwZWRKb2JzKCk6IGJvb2wKCXsKCQkkcGVuZGluZyA9ICR0aGlzLT5xdWV1ZVBlbmRpbmcoZmFsc2UpOwoKCQlpZiAoISRwZW5kaW5nKQoJCXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJJGpvYlJ1blRpbWUgPSAkdGhpcy0+YXBwWydqb2IucnVuVGltZSddOwoJCWlmICghJGpvYlJ1blRpbWUpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQlpZiAoJGpvYlJ1blRpbWUgKyAzNjAwIDw9IFxYRjo6JHRpbWUpCgkJewoJCQkvLyBzY2hlZHVsZWQgcnVuIHRpbWUgZXhjZWVkZWQgYnkgYW4gaG91ciBzbyBqb2JzIGFwcGVhciB0byBiZSBzdHVjawoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJZWxzZQoJCXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gaGFzU3RvcHBlZE1hbnVhbEpvYnMoKQoJewoJCSRtYXRjaCA9ICR0aGlzLT5kYi0+ZmV0Y2hSb3coIgoJCQlTRUxFQ1Qgam9iX2lkCgkJCUZST00geGZfam9iCgkJCVdIRVJFIHRyaWdnZXJfZGF0ZSA8PSA/CgkJCQlBTkQgKGxhc3RfcnVuX2RhdGUgPD0gPyBPUiBsYXN0X3J1bl9kYXRlIElTIE5VTEwpCgkJCQlBTkQgbWFudWFsX2V4ZWN1dGUgPSAxCgkJCUxJTUlUIDEKCQkiLCBbXFhGOjokdGltZSAtIDE1LCBcWEY6OiR0aW1lIC0gMTgwXSk7CgoJCXJldHVybiAkbWF0Y2ggPyB0cnVlIDogZmFsc2U7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldEpvYigkaWQpCgl7CgkJcmV0dXJuICR0aGlzLT5kYi0+ZmV0Y2hSb3coIgoJCQlTRUxFQ1QgKgoJCQlGUk9NIHhmX2pvYgoJCQlXSEVSRSBqb2JfaWQgPSA/CgkJIiwgJGlkKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0VW5pcXVlSm9iKCRrZXkpCgl7CgkJcmV0dXJuICR0aGlzLT5kYi0+ZmV0Y2hSb3coIgoJCQlTRUxFQ1QgKgoJCQlGUk9NIHhmX2pvYgoJCQlXSEVSRSB1bmlxdWVfa2V5ID0gPwoJCSIsICRrZXkpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRGaXJzdEF1dG9tYXRpY1RpbWUoKQoJewoJCXJldHVybiAkdGhpcy0+ZGItPmZldGNoT25lKCIKCQkJU0VMRUNUIE1JTih0cmlnZ2VyX2RhdGUpCgkJCUZST00geGZfam9iCgkJCVdIRVJFIG1hbnVhbF9leGVjdXRlID0gMAoJCSIpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiB1cGRhdGVOZXh0UnVuVGltZSgpCgl7CgkJJHJ1blRpbWUgPSAkdGhpcy0+Z2V0Rmlyc3RBdXRvbWF0aWNUaW1lKCk7CgkJJHRoaXMtPmFwcC0+cmVnaXN0cnkoKS0+c2V0KCdhdXRvSm9iUnVuJywgJHJ1blRpbWUpOwoKCQlyZXR1cm4gJHJ1blRpbWU7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHNldE5leHRBdXRvUnVuVGltZSgkdGltZSkKCXsKCQkkdGhpcy0+YXBwLT5yZWdpc3RyeSgpLT5zZXQoJ2F1dG9Kb2JSdW4nLCAkdGltZSk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHNjaGVkdWxlUnVuVGltZVVwZGF0ZSgpCgl7CgkJXFhGOjpydW5PbmNlKCdhdXRvSm9iUnVuJywgZnVuY3Rpb24gKCkKCQl7CgkJCSR0aGlzLT51cGRhdGVOZXh0UnVuVGltZSgpOwoJCX0pOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBlbnF1ZXVlKHN0cmluZyAkam9iQ2xhc3MsIGFycmF5ICRwYXJhbXMgPSBbXSwgYm9vbCAkbWFudWFsID0gZmFsc2UsIGludCAkcHJpb3JpdHkgPSAxMDApOiA/aW50Cgl7CgkJJGpvYlBhcmFtcyA9IChuZXcgSm9iUGFyYW1zKCkpCgkJCS0+c2V0Sm9iQ2xhc3MoJGpvYkNsYXNzKQoJCQktPnNldFBhcmFtcygkcGFyYW1zKQoJCQktPnNldE1hbnVhbCgkbWFudWFsKQoJCQktPnNldFByaW9yaXR5KCRwcmlvcml0eSk7CgoJCXJldHVybiAkdGhpcy0+X2VucXVldWUoJGpvYlBhcmFtcyk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGVucXVldWVBdXRvQmxvY2tpbmcoc3RyaW5nICRqb2JDbGFzcywgYXJyYXkgJHBhcmFtcyA9IFtdLCBpbnQgJHByaW9yaXR5ID0gMTAwKTogP2ludAoJewoJCSRqb2JQYXJhbXMgPSAobmV3IEpvYlBhcmFtcygpKQoJCQktPnNldEpvYkNsYXNzKCRqb2JDbGFzcykKCQkJLT5zZXRQYXJhbXMoJHBhcmFtcykKCQkJLT5zZXRCbG9ja2luZyh0cnVlKQoJCQktPnNldFByaW9yaXR5KCRwcmlvcml0eSk7CgoJCXJldHVybiAkdGhpcy0+X2VucXVldWUoJGpvYlBhcmFtcyk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGVucXVldWVVbmlxdWUoc3RyaW5nICR1bmlxdWVJZCwgc3RyaW5nICRqb2JDbGFzcywgYXJyYXkgJHBhcmFtcyA9IFtdLCBib29sICRtYW51YWwgPSB0cnVlLCBpbnQgJHByaW9yaXR5ID0gMTAwKTogP2ludAoJewoJCSRqb2JQYXJhbXMgPSAobmV3IEpvYlBhcmFtcygpKQoJCQktPnNldFVuaXF1ZUlkKCR1bmlxdWVJZCkKCQkJLT5zZXRKb2JDbGFzcygkam9iQ2xhc3MpCgkJCS0+c2V0UGFyYW1zKCRwYXJhbXMpCgkJCS0+c2V0TWFudWFsKCRtYW51YWwpCgkJCS0+c2V0UHJpb3JpdHkoJHByaW9yaXR5KTsKCgkJcmV0dXJuICR0aGlzLT5fZW5xdWV1ZSgkam9iUGFyYW1zKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZW5xdWV1ZUxhdGVyKD9zdHJpbmcgJHVuaXF1ZUlkLCBpbnQgJHJ1blRpbWUsIHN0cmluZyAkam9iQ2xhc3MsIGFycmF5ICRwYXJhbXMgPSBbXSwgYm9vbCAkbWFudWFsID0gZmFsc2UsIGludCAkcHJpb3JpdHkgPSAxMDApOiA/aW50Cgl7CgkJJGpvYlBhcmFtcyA9IChuZXcgSm9iUGFyYW1zKCkpCgkJCS0+c2V0VW5pcXVlSWQoJHVuaXF1ZUlkKQoJCQktPnNldEpvYkNsYXNzKCRqb2JDbGFzcykKCQkJLT5zZXRQYXJhbXMoJHBhcmFtcykKCQkJLT5zZXRNYW51YWwoJG1hbnVhbCkKCQkJLT5zZXRSdW5UaW1lKCRydW5UaW1lKQoJCQktPnNldFByaW9yaXR5KCRwcmlvcml0eSk7CgoJCXJldHVybiAkdGhpcy0+X2VucXVldWUoJGpvYlBhcmFtcyk7Cgl9CgoJcHJvdGVjdGVkIGZ1bmN0aW9uIHByZXBhcmVKb2JQYXJhbXMoSm9iUGFyYW1zICRqb2JQYXJhbXMpOiBKb2JQYXJhbXMKCXsKCQlyZXR1cm4gJGpvYlBhcmFtczsKCX0KCglwcm90ZWN0ZWQgZnVuY3Rpb24gX2VucXVldWUoSm9iUGFyYW1zICRqb2JQYXJhbXMpOiA/aW50Cgl7CgkJJHVuaXF1ZUlkID0gJGpvYlBhcmFtcy0+Z2V0VW5pcXVlSWQoKTsKCQlpZiAoJHVuaXF1ZUlkKQoJCXsKCQkJaWYgKHN0cmxlbigkdW5pcXVlSWQpID4gNTApCgkJCXsKCQkJCSR1bmlxdWVJZCA9IG1kNSgkdW5pcXVlSWQpOwoJCQkJJGpvYlBhcmFtcy0+c2V0VW5pcXVlSWQoJHVuaXF1ZUlkKTsKCQkJfQoKCQkJaWYgKGlzc2V0KCR0aGlzLT51bmlxdWVFbnF1ZXVlZFskdW5pcXVlSWRdKSkKCQkJewoJCQkJcmV0dXJuICR0aGlzLT51bmlxdWVFbnF1ZXVlZFskdW5pcXVlSWRdOwoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCSR1bmlxdWVJZCA9IG51bGw7CgkJfQoKCQkkbWFudWFsID0gJGpvYlBhcmFtcy0+aXNNYW51YWwoKTsKCQlpZiAoJHRoaXMtPmZvcmNlTWFudWFsKQoJCXsKCQkJJG1hbnVhbCA9IHRydWU7CgkJfQoJCWVsc2UgaWYgKCEkdGhpcy0+YWxsb3dNYW51YWwpCgkJewoJCQkkbWFudWFsID0gZmFsc2U7CgkJfQoJCSRqb2JQYXJhbXMtPnNldE1hbnVhbCgkbWFudWFsKTsKCgkJJHJ1blRpbWUgPSAkam9iUGFyYW1zLT5nZXRSdW5UaW1lKCk7CgkJaWYgKCEkcnVuVGltZSkKCQl7CgkJCSRydW5UaW1lID0gXFhGOjokdGltZTsKCQkJJGpvYlBhcmFtcy0+c2V0UnVuVGltZSgkcnVuVGltZSk7CgkJfQoKCQkkam9iUGFyYW1zID0gJHRoaXMtPnByZXBhcmVKb2JQYXJhbXMoJGpvYlBhcmFtcyk7CgoJCSRkYiA9ICR0aGlzLT5kYjsKCQkkYWZmZWN0ZWQgPSAkZGItPmluc2VydCgneGZfam9iJywgWwoJCQknZXhlY3V0ZV9jbGFzcycgPT4gJGpvYlBhcmFtcy0+Z2V0Sm9iQ2xhc3MoKSwKCQkJJ2V4ZWN1dGVfZGF0YScgPT4gc2VyaWFsaXplKCRqb2JQYXJhbXMtPmdldFBhcmFtcygpKSwKCQkJJ3VuaXF1ZV9rZXknID0+ICR1bmlxdWVJZCwKCQkJJ21hbnVhbF9leGVjdXRlJyA9PiAkbWFudWFsID8gMSA6IDAsCgkJCSd0cmlnZ2VyX2RhdGUnID0+ICRydW5UaW1lLAoJCQkncHJpb3JpdHknID0+ICRqb2JQYXJhbXMtPmdldFByaW9yaXR5KCksCgkJXSwgZmFsc2UsICcKCQkJZXhlY3V0ZV9jbGFzcyA9IFZBTFVFUyhleGVjdXRlX2NsYXNzKSwKCQkJZXhlY3V0ZV9kYXRhID0gVkFMVUVTKGV4ZWN1dGVfZGF0YSksCgkJCW1hbnVhbF9leGVjdXRlID0gVkFMVUVTKG1hbnVhbF9leGVjdXRlKSwKCQkJdHJpZ2dlcl9kYXRlID0gVkFMVUVTKHRyaWdnZXJfZGF0ZSksCgkJCWxhc3RfcnVuX2RhdGUgPSBOVUxMLAoJCQlwcmlvcml0eSA9IFZBTFVFUyhwcmlvcml0eSkKCQknKTsKCgkJaWYgKCRhZmZlY3RlZCA9PSAxKQoJCXsKCQkJJGlkID0gJGRiLT5sYXN0SW5zZXJ0SWQoKTsKCQl9CgkJZWxzZQoJCXsKCQkJLy8gdGhpcyBpcyBhbiB1cGRhdGUKCQkJJGlkID0gJGRiLT5mZXRjaE9uZSgiCgkJCQlTRUxFQ1Qgam9iX2lkCgkJCQlGUk9NIHhmX2pvYgoJCQkJV0hFUkUgdW5pcXVlX2tleSA9ID8KCQkJIiwgJHVuaXF1ZUlkKTsKCQkJaWYgKCEkaWQpCgkJCXsKCQkJCXJldHVybiBudWxsOwoJCQl9CgkJfQoKCQlpZiAoJHVuaXF1ZUlkKQoJCXsKCQkJJHRoaXMtPnVuaXF1ZUVucXVldWVkWyR1bmlxdWVJZF0gPSAkaWQ7CgkJfQoKCQlpZiAoJG1hbnVhbCkKCQl7CgkJCSR0aGlzLT5tYW51YWxFbnF1ZXVlZExpc3RbJGlkXSA9ICRpZDsKCQl9CgkJZWxzZQoJCXsKCQkJJGJsb2NraW5nID0gJGpvYlBhcmFtcy0+aXNCbG9ja2luZygpOwoJCQlpZiAoJGJsb2NraW5nKQoJCQl7CgkJCQkkdGhpcy0+YXV0b0Jsb2NraW5nTGlzdFskaWRdID0gJGlkOwoJCQl9CgkJCSR0aGlzLT5hdXRvRW5xdWV1ZWRMaXN0WyRpZF0gPSAkaWQ7CgoJCQkkdGhpcy0+c2NoZWR1bGVSdW5UaW1lVXBkYXRlKCk7CgkJfQoKCQlyZXR1cm4gJGlkOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBoYXNNYW51YWxFbnF1ZXVlZCgpCgl7CgkJcmV0dXJuIGNvdW50KCR0aGlzLT5tYW51YWxFbnF1ZXVlZExpc3QpID4gMDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0TWFudWFsRW5xdWV1ZWQoKQoJewoJCXJldHVybiAkdGhpcy0+bWFudWFsRW5xdWV1ZWRMaXN0OwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBoYXNBdXRvRW5xdWV1ZWQoKQoJewoJCXJldHVybiBjb3VudCgkdGhpcy0+YXV0b0VucXVldWVkTGlzdCkgPiAwOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRBdXRvRW5xdWV1ZWQoKQoJewoJCXJldHVybiAkdGhpcy0+YXV0b0VucXVldWVkTGlzdDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gaGFzQXV0b0Jsb2NraW5nKCkKCXsKCQlyZXR1cm4gY291bnQoJHRoaXMtPmF1dG9CbG9ja2luZ0xpc3QpID4gMDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0b0Jsb2NraW5nKCkKCXsKCQlyZXR1cm4gJHRoaXMtPmF1dG9CbG9ja2luZ0xpc3Q7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHNldEF1dG9CbG9ja2luZ01lc3NhZ2UoJG1lc3NhZ2UpCgl7CgkJJHRoaXMtPmF1dG9CbG9ja2luZ01lc3NhZ2UgPSAkbWVzc2FnZTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0b0Jsb2NraW5nTWVzc2FnZSgpCgl7CgkJcmV0dXJuICR0aGlzLT5hdXRvQmxvY2tpbmdNZXNzYWdlOwoJfQp9Cg==","bytes":14932,"path":"src/XF/Job/Manager.php","present":true,"sha256":"bb62eaeb6d8e4ade4a5cef3a942b1ce0e67dec3af01ef50224700ee4765dbeb9"},"src/XF/Repository/CronEntryRepository.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBYRlxSZXBvc2l0b3J5OwoKdXNlIFhGXEZpbmRlclxDcm9uRW50cnlGaW5kZXI7CnVzZSBYRlxNdmNcRW50aXR5XFJlcG9zaXRvcnk7CgpjbGFzcyBDcm9uRW50cnlSZXBvc2l0b3J5IGV4dGVuZHMgUmVwb3NpdG9yeQp7CgkvKioKCSAqIEByZXR1cm4gQ3JvbkVudHJ5RmluZGVyCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBmaW5kQ3JvbkVudHJpZXNGb3JMaXN0KCkKCXsKCQlyZXR1cm4gJHRoaXMtPmZpbmRlcihDcm9uRW50cnlGaW5kZXI6OmNsYXNzKQoJCQktPndpdGgoJ0FkZE9uJykKCQkJLT5vcmRlcihbJ25leHRfcnVuJ10pOwoJfQp9Cg==","bytes":322,"path":"src/XF/Repository/CronEntryRepository.php","present":true,"sha256":"1ec4dca123543b7460a6955d51f79cb23cc6e642b04fe26c3a18b8eaa11040b1"},"src/XF/Service/AbstractService.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBYRlxTZXJ2aWNlOwoKdXNlIFhGXEFwcDsKdXNlIFhGXERiXEFic3RyYWN0QWRhcHRlcjsKdXNlIFhGXE12Y1xFbnRpdHlcTWFuYWdlcjsKCnVzZSBmdW5jdGlvbiBjYWxsX3VzZXJfZnVuY19hcnJheSwgZnVuY19nZXRfYXJnczsKCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0U2VydmljZQp7CgkvKioKCSAqIEB2YXIgQXBwCgkgKi8KCXByb3RlY3RlZCAkYXBwOwoKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChBcHAgJGFwcCkKCXsKCQkkdGhpcy0+YXBwID0gJGFwcDsKCQkkdGhpcy0+c2V0dXAoKTsKCX0KCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0dXAoKQoJewoJfQoKCS8qKgoJICogQHJldHVybiBBYnN0cmFjdEFkYXB0ZXIKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGRiKCkKCXsKCQlyZXR1cm4gJHRoaXMtPmFwcC0+ZGIoKTsKCX0KCgkvKioKCSAqIEByZXR1cm4gTWFuYWdlcgoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZW0oKQoJewoJCXJldHVybiAkdGhpcy0+YXBwLT5lbSgpOwoJfQoKCS8qKgoJICogQHRlbXBsYXRlIFQgb2YgXFhGXE12Y1xFbnRpdHlcUmVwb3NpdG9yeQoJICoKCSAqIEBwYXJhbSBjbGFzcy1zdHJpbmc8VD4gJHJlcG9zaXRvcnkKCSAqCgkgKiBAcmV0dXJuIFQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHJlcG9zaXRvcnkoJHJlcG9zaXRvcnkpCgl7CgkJcmV0dXJuICR0aGlzLT5hcHAtPnJlcG9zaXRvcnkoJHJlcG9zaXRvcnkpOwoJfQoKCS8qKgoJICogQHRlbXBsYXRlIFQgb2YgXFhGXE12Y1xFbnRpdHlcRmluZGVyCgkgKgoJICogQHBhcmFtIGNsYXNzLXN0cmluZzxUPiAkZmluZGVyCgkgKgoJICogQHJldHVybiBUCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBmaW5kZXIoJGZpbmRlcikKCXsKCQlyZXR1cm4gJHRoaXMtPmFwcC0+ZmluZGVyKCRmaW5kZXIpOwoJfQoKCS8qKgoJICogQHRlbXBsYXRlIFQgb2YgXFhGXE12Y1xFbnRpdHlcRW50aXR5CgkgKgoJICogQHBhcmFtIGNsYXNzLXN0cmluZzxUPiAkZmluZGVyCgkgKiBAcGFyYW0gYXJyYXkgJHdoZXJlCgkgKiBAcGFyYW0gYXJyYXl8c3RyaW5nfG51bGwgJHdpdGgKCSAqCgkgKiBAcmV0dXJuIFR8bnVsbAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZmluZE9uZSgkZmluZGVyLCBhcnJheSAkd2hlcmUsICR3aXRoID0gbnVsbCkKCXsKCQlyZXR1cm4gJHRoaXMtPmFwcC0+ZW0oKS0+ZmluZE9uZSgkZmluZGVyLCAkd2hlcmUsICR3aXRoKTsKCX0KCgkvKioKCSAqIEB0ZW1wbGF0ZSBUIG9mIFxYRlxTZXJ2aWNlXEFic3RyYWN0U2VydmljZQoJICoKCSAqIEBwYXJhbSBjbGFzcy1zdHJpbmc8VD4gJGNsYXNzCgkgKiBAcGFyYW0gbWl4ZWQgLi4uJGFyZ3VtZW50cwoJICoKCSAqIEByZXR1cm4gVAoJICovCglwdWJsaWMgZnVuY3Rpb24gc2VydmljZSgkY2xhc3MpCgl7CgkJcmV0dXJuIGNhbGxfdXNlcl9mdW5jX2FycmF5KFskdGhpcy0+YXBwLCAnc2VydmljZSddLCBmdW5jX2dldF9hcmdzKCkpOwoJfQp9Cg==","bytes":1492,"path":"src/XF/Service/AbstractService.php","present":true,"sha256":"8ac032963c1834778bc778c011d69154776a23a4c57f924d554b4c8bc159b795"},"src/addons/Newfi/Dogs/Setup.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBOZXdmaVxEb2dzOwoKdXNlIFhGXEFkZE9uXEFic3RyYWN0U2V0dXA7CnVzZSBYRlxEYlxTY2hlbWFcQ3JlYXRlOwoKY2xhc3MgU2V0dXAgZXh0ZW5kcyBBYnN0cmFjdFNldHVwCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBpbnN0YWxsKGFycmF5ICRzdGVwUGFyYW1zID0gW10pCiAgICB7CiAgICAgICAgJHNtID0gJHRoaXMtPnNjaGVtYU1hbmFnZXIoKTsKCiAgICAgICAgJHNtLT5jcmVhdGVUYWJsZSgneGZfbmV3ZmlfZG9nJywgZnVuY3Rpb24gKENyZWF0ZSAkdGFibGUpCiAgICAgICAgewogICAgICAgICAgICAkdGFibGUtPmFkZENvbHVtbignZG9nX2lkJywgJ2ludCcpLT5hdXRvSW5jcmVtZW50KCk7CiAgICAgICAgICAgICR0YWJsZS0+YWRkQ29sdW1uKCduYW1lJywgJ3ZhcmNoYXInLCAxMDApOwogICAgICAgICAgICAkdGFibGUtPmFkZENvbHVtbignZnVsbF9uYW1lJywgJ3ZhcmNoYXInLCAyNTUpLT5zZXREZWZhdWx0KCcnKTsKICAgICAgICAgICAgJHRhYmxlLT5hZGRDb2x1bW4oJ2RhdGVfb2ZfYmlydGgnLCAnaW50JyktPnNldERlZmF1bHQoMCk7CiAgICAgICAgICAgICR0YWJsZS0+YWRkQ29sdW1uKCdzZXgnLCAndmFyYmluYXJ5JywgMjApLT5zZXREZWZhdWx0KCcnKTsKICAgICAgICAgICAgJHRhYmxlLT5hZGRDb2x1bW4oJ2NvbG9yJywgJ3ZhcmNoYXInLCAxMDApLT5zZXREZWZhdWx0KCcnKTsKICAgICAgICAgICAgJHRhYmxlLT5hZGRDb2x1bW4oJ2NpdHknLCAndmFyY2hhcicsIDEwMCktPnNldERlZmF1bHQoJycpOwogICAgICAgICAgICAkdGFibGUtPmFkZENvbHVtbigncHJpbWFyeV9waG90b19tZWRpYV9pZCcsICdpbnQnKS0+c2V0RGVmYXVsdCgwKTsKICAgICAgICAgICAgJHRhYmxlLT5hZGRDb2x1bW4oJ293bmVyX3VzZXJfaWQnLCAnaW50JyktPnNldERlZmF1bHQoMCk7CiAgICAgICAgICAgICR0YWJsZS0+YWRkQ29sdW1uKCdjcmVhdGVkX2F0JywgJ2ludCcpOwogICAgICAgICAgICAkdGFibGUtPmFkZENvbHVtbigndXBkYXRlZF9hdCcsICdpbnQnKTsKICAgICAgICAgICAgJHRhYmxlLT5hZGRQcmltYXJ5S2V5KCdkb2dfaWQnKTsKICAgICAgICAgICAgJHRhYmxlLT5hZGRLZXkoJ293bmVyX3VzZXJfaWQnKTsKICAgICAgICAgICAgJHRhYmxlLT5hZGRLZXkoJ3ByaW1hcnlfcGhvdG9fbWVkaWFfaWQnKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHVwZ3JhZGUoYXJyYXkgJHN0ZXBQYXJhbXMgPSBbXSkKICAgIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5pbnN0YWxsKGFycmF5ICRzdGVwUGFyYW1zID0gW10pCiAgICB7CiAgICAgICAgJHRoaXMtPnNjaGVtYU1hbmFnZXIoKS0+ZHJvcFRhYmxlKCd4Zl9uZXdmaV9kb2cnKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KfQo=","bytes":1445,"path":"src/addons/Newfi/Dogs/Setup.php","present":true,"sha256":"6fe24fe38301b346900bca84edddb6ff3fee3977cd820050efa0d20d0854bbdc"},"src/addons/Newfi/Dogs/addon.json":{"body_b64":"ewogICJ0aXRsZSI6ICJOZXdmaSBEb2dzIiwKICAiZGVzY3JpcHRpb24iOiAiTWluaW1hbCBwcml2YXRlLXN0YWdpbmcgZG9nIGVudGl0eS9saXN0IGNvbXBvbmVudCBmb3IgdGhlIE5ld2ZpIGNsb3NlZCBNVlAuIiwKICAidmVyc2lvbl9pZCI6IDEwMDAwMTAsCiAgInZlcnNpb25fc3RyaW5nIjogIjEuMC4wIEFscGhhIDEiLAogICJkZXYiOiAiTmV3ZmkiLAogICJkZXZfdXJsIjogIiIsCiAgImZhcV91cmwiOiAiIiwKICAic3VwcG9ydF91cmwiOiAiIiwKICAiZXh0cmFfdXJscyI6IFtdLAogICJyZXF1aXJlIjogewogICAgIlhGIjogWwogICAgICAyMDMxMjcwLAogICAgICAiWGVuRm9ybyAyLjMuMTIrIgogICAgXQogIH0sCiAgImljb24iOiAiIiwKICAibGVnYWN5X2FkZG9uX2lkIjogIiIKfQo=","bytes":395,"path":"src/addons/Newfi/Dogs/addon.json","present":true,"sha256":"71b89450f1e7ef3c7320f8a34f15385e9f54db14642288a930868429492d5f31"},"src/addons/Newfi/Events/Entity/EventSource.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBOZXdmaVxFdmVudHNcRW50aXR5OwoKdXNlIFhGXE12Y1xFbnRpdHlcRW50aXR5Owp1c2UgWEZcTXZjXEVudGl0eVxTdHJ1Y3R1cmU7CgpjbGFzcyBFdmVudFNvdXJjZSBleHRlbmRzIEVudGl0eQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFN0cnVjdHVyZShTdHJ1Y3R1cmUgJHN0cnVjdHVyZSkKICAgIHsKICAgICAgICAkc3RydWN0dXJlLT50YWJsZSA9ICd4Zl9uZXdmaV9ldmVudF9zb3VyY2UnOwogICAgICAgICRzdHJ1Y3R1cmUtPnNob3J0TmFtZSA9ICdOZXdmaVxFdmVudHM6RXZlbnRTb3VyY2UnOwogICAgICAgICRzdHJ1Y3R1cmUtPnByaW1hcnlLZXkgPSAnZXZlbnRfc291cmNlX2lkJzsKICAgICAgICAkc3RydWN0dXJlLT5jb2x1bW5zID0gWwogICAgICAgICAgICAnZXZlbnRfc291cmNlX2lkJyA9PiBbJ3R5cGUnID0+IHNlbGY6OlVJTlQsICdhdXRvSW5jcmVtZW50JyA9PiB0cnVlLCAnbnVsbGFibGUnID0+IHRydWVdLAogICAgICAgICAgICAnZXZlbnRfaWQnID0+IFsndHlwZScgPT4gc2VsZjo6VUlOVCwgJ3JlcXVpcmVkJyA9PiB0cnVlXSwKICAgICAgICAgICAgJ3NvdXJjZV91cmwnID0+IFsndHlwZScgPT4gc2VsZjo6U1RSLCAnbWF4TGVuZ3RoJyA9PiA1MDAsICdyZXF1aXJlZCcgPT4gdHJ1ZV0sCiAgICAgICAgICAgICdjaGVja2VkX2F0JyA9PiBbJ3R5cGUnID0+IHNlbGY6OlVJTlQsICdyZXF1aXJlZCcgPT4gdHJ1ZV0KICAgICAgICBdOwogICAgICAgIHJldHVybiAkc3RydWN0dXJlOwogICAgfQp9Cg==","bytes":775,"path":"src/addons/Newfi/Events/Entity/EventSource.php","present":true,"sha256":"07541d087caf9668a2a2d80bb8cd81e9471095ce36260f1cc12ec81eb0460187"},"src/addons/Newfi/Events/Entity/SourceRegistry.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBOZXdmaVxFdmVudHNcRW50aXR5OwoKdXNlIFhGXE12Y1xFbnRpdHlcRW50aXR5Owp1c2UgWEZcTXZjXEVudGl0eVxTdHJ1Y3R1cmU7CgpjbGFzcyBTb3VyY2VSZWdpc3RyeSBleHRlbmRzIEVudGl0eQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFN0cnVjdHVyZShTdHJ1Y3R1cmUgJHN0cnVjdHVyZSkKICAgIHsKICAgICAgICAkc3RydWN0dXJlLT50YWJsZSA9ICd4Zl9uZXdmaV9zb3VyY2VfcmVnaXN0cnknOwogICAgICAgICRzdHJ1Y3R1cmUtPnNob3J0TmFtZSA9ICdOZXdmaVxFdmVudHM6U291cmNlUmVnaXN0cnknOwogICAgICAgICRzdHJ1Y3R1cmUtPnByaW1hcnlLZXkgPSAnc291cmNlX2lkJzsKICAgICAgICAkc3RydWN0dXJlLT5jb2x1bW5zID0gWwogICAgICAgICAgICAnc291cmNlX2lkJyA9PiBbJ3R5cGUnID0+IHNlbGY6OlVJTlQsICdhdXRvSW5jcmVtZW50JyA9PiB0cnVlLCAnbnVsbGFibGUnID0+IHRydWVdLAogICAgICAgICAgICAnc291cmNlX2tleScgPT4gWyd0eXBlJyA9PiBzZWxmOjpTVFIsICdtYXhMZW5ndGgnID0+IDY0LCAncmVxdWlyZWQnID0+IHRydWVdLAogICAgICAgICAgICAndGl0bGUnID0+IFsndHlwZScgPT4gc2VsZjo6U1RSLCAnbWF4TGVuZ3RoJyA9PiAxNTAsICdyZXF1aXJlZCcgPT4gdHJ1ZV0sCiAgICAgICAgICAgICdiYXNlX3VybCcgPT4gWyd0eXBlJyA9PiBzZWxmOjpTVFIsICdtYXhMZW5ndGgnID0+IDUwMCwgJ3JlcXVpcmVkJyA9PiB0cnVlXSwKICAgICAgICAgICAgJ3NvdXJjZV90eXBlJyA9PiBbJ3R5cGUnID0+IHNlbGY6OlNUUiwgJ21heExlbmd0aCcgPT4gNTAsICdyZXF1aXJlZCcgPT4gdHJ1ZV0sCiAgICAgICAgICAgICdsb2NhbGUnID0+IFsndHlwZScgPT4gc2VsZjo6U1RSLCAnbWF4TGVuZ3RoJyA9PiAyMCwgJ3JlcXVpcmVkJyA9PiB0cnVlXSwKICAgICAgICAgICAgJ3JlZ2lvbicgPT4gWyd0eXBlJyA9PiBzZWxmOjpTVFIsICdtYXhMZW5ndGgnID0+IDUwLCAncmVxdWlyZWQnID0+IHRydWVdLAogICAgICAgICAgICAncGFyc2VyX3N0cmF0ZWd5JyA9PiBbJ3R5cGUnID0+IHNlbGY6OlNUUiwgJ21heExlbmd0aCcgPT4gMTAwLCAncmVxdWlyZWQnID0+IHRydWVdLAogICAgICAgICAgICAncG9sbF9pbnRlcnZhbF9zZWNvbmRzJyA9PiBbJ3R5cGUnID0+IHNlbGY6OlVJTlQsICdyZXF1aXJlZCcgPT4gdHJ1ZV0sCiAgICAgICAgICAgICdsYXN0X3N1Y2Nlc3NfYXQnID0+IFsndHlwZScgPT4gc2VsZjo6VUlOVCwgJ2RlZmF1bHQnID0+IDBdLAogICAgICAgICAgICAnbGFzdF9mYWlsdXJlX2F0JyA9PiBbJ3R5cGUnID0+IHNlbGY6OlVJTlQsICdkZWZhdWx0JyA9PiAwXSwKICAgICAgICAgICAgJ2ZhaWx1cmVfY291bnQnID0+IFsndHlwZScgPT4gc2VsZjo6VUlOVCwgJ2RlZmF1bHQnID0+IDBdLAogICAgICAgICAgICAnbGFzdF9lcnJvcicgPT4gWyd0eXBlJyA9PiBzZWxmOjpTVFIsICdtYXhMZW5ndGgnID0+IDUwMCwgJ2RlZmF1bHQnID0+ICcnXSwKICAgICAgICAgICAgJ3Byb3ZlbmFuY2VfcG9saWN5JyA9PiBbJ3R5cGUnID0+IHNlbGY6OlNUUiwgJ21heExlbmd0aCcgPT4gNTAwLCAncmVxdWlyZWQnID0+IHRydWVdLAogICAgICAgICAgICAnZW5hYmxlZCcgPT4gWyd0eXBlJyA9PiBzZWxmOjpCT09MLCAnZGVmYXVsdCcgPT4gdHJ1ZV0sCiAgICAgICAgICAgICdjcmVhdGVkX2F0JyA9PiBbJ3R5cGUnID0+IHNlbGY6OlVJTlQsICdyZXF1aXJlZCcgPT4gdHJ1ZV0sCiAgICAgICAgICAgICd1cGRhdGVkX2F0JyA9PiBbJ3R5cGUnID0+IHNlbGY6OlVJTlQsICdyZXF1aXJlZCcgPT4gdHJ1ZV0KICAgICAgICBdOwogICAgICAgIHJldHVybiAkc3RydWN0dXJlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc0R1ZShpbnQgJG5vdyk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5lbmFibGVkKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEkdGhpcy0+bGFzdF9zdWNjZXNzX2F0KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXN0X3N1Y2Nlc3NfYXQgKyAkdGhpcy0+cG9sbF9pbnRlcnZhbF9zZWNvbmRzKSA8PSAkbm93OwogICAgfQp9Cg==","bytes":2155,"path":"src/addons/Newfi/Events/Entity/SourceRegistry.php","present":true,"sha256":"9fa9cf171fb586741eecd217d0156e01cdd89f2060b8f71bb780252f44365139"},"src/addons/Newfi/Events/Repository/SourceRegistry.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBOZXdmaVxFdmVudHNcUmVwb3NpdG9yeTsKCnVzZSBYRlxNdmNcRW50aXR5XFJlcG9zaXRvcnk7CgpjbGFzcyBTb3VyY2VSZWdpc3RyeSBleHRlbmRzIFJlcG9zaXRvcnkKewogICAgcHVibGljIGZ1bmN0aW9uIGZpbmRFbmFibGVkU291cmNlcygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5maW5kZXIoJ05ld2ZpXEV2ZW50czpTb3VyY2VSZWdpc3RyeScpCiAgICAgICAgICAgIC0+d2hlcmUoJ2VuYWJsZWQnLCAxKQogICAgICAgICAgICAtPm9yZGVyKCdzb3VyY2Vfa2V5JywgJ0FTQycpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTb3VyY2VCeUtleShzdHJpbmcgJHNvdXJjZUtleSkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZpbmRlcignTmV3ZmlcRXZlbnRzOlNvdXJjZVJlZ2lzdHJ5JykKICAgICAgICAgICAgLT53aGVyZSgnc291cmNlX2tleScsICRzb3VyY2VLZXkpCiAgICAgICAgICAgIC0+ZmV0Y2hPbmUoKTsKICAgIH0KfQo=","bytes":506,"path":"src/addons/Newfi/Events/Repository/SourceRegistry.php","present":true,"sha256":"31ee889681ee0af9d44f19ba9a6857ae07982c9ed90bb85835de7da6b40053b4"},"src/addons/Newfi/Events/Setup.php":{"body_b64":"PD9waHAKCm5hbWVzcGFjZSBOZXdmaVxFdmVudHM7Cgp1c2UgWEZcQWRkT25cQWJzdHJhY3RTZXR1cDsKdXNlIFhGXERiXFNjaGVtYVxDcmVhdGU7CgpjbGFzcyBTZXR1cCBleHRlbmRzIEFic3RyYWN0U2V0dXAKewogICAgcHVibGljIGZ1bmN0aW9uIGluc3RhbGwoYXJyYXkgJHN0ZXBQYXJhbXMgPSBbXSkKICAgIHsKICAgICAgICAkc20gPSAkdGhpcy0+c2NoZW1hTWFuYWdlcigpOwoKICAgICAgICAkc20tPmNyZWF0ZVRhYmxlKCd4Zl9uZXdmaV9ldmVudCcsIGZ1bmN0aW9uIChDcmVhdGUgJHRhYmxlKQogICAgICAgIHsKICAgICAgICAgICAgJHRhYmxlLT5hZGRDb2x1bW4oJ2V2ZW50X2lkJywgJ2ludCcpLT5hdXRvSW5jcmVtZW50KCk7CiAgICAgICAgICAgICR0YWJsZS0+YWRkQ29sdW1uKCd0aXRsZScsICd2YXJjaGFyJywgMTAwKTsKICAgICAgICAgICAgJHRhYmxlLT5hZGRDb2x1bW4oJ3N0YXJ0c19hdCcsICdpbnQnKTsKICAgICAgICAgICAgJHRhYmxlLT5hZGRDb2x1bW4oJ2VuZHNfYXQnLCAnaW50JyktPnNldERlZmF1bHQoMCk7CiAgICAgICAgICAgICR0YWJsZS0+YWRkQ29sdW1uKCdyZWdpb24nLCAndmFyY2hhcicsIDEwMCktPnNldERlZmF1bHQoJycpOwogICAgICAgICAgICAkdGFibGUtPmFkZENvbHVtbignbG9jYXRpb24nLCAndmFyY2hhcicsIDI1NSktPnNldERlZmF1bHQoJycpOwogICAgICAgICAgICAkdGFibGUtPmFkZENvbHVtbignZGVzY3JpcHRpb24nLCAndGV4dCcpOwogICAgICAgICAgICAkdGFibGUtPmFkZENvbHVtbignc3RhdGUnLCAndmFyYmluYXJ5JywgMjUpLT5zZXREZWZhdWx0KCdkcmFmdCcpOwogICAgICAgICAgICAkdGFibGUtPmFkZENvbHVtbignZmluZ2VycHJpbnQnLCAndmFyYmluYXJ5JywgNjQpOwogICAgICAgICAgICAkdGFibGUtPmFkZENvbHVtbignY3JlYXRlZF9hdCcsICdpbnQnKTsKICAgICAgICAgICAgJHRhYmxlLT5hZGRDb2x1bW4oJ3VwZGF0ZWRfYXQnLCAnaW50Jyk7CiAgICAgICAgICAgICR0YWJsZS0+YWRkUHJpbWFyeUtleSgnZXZlbnRfaWQnKTsKICAgICAgICAgICAgJHRhYmxlLT5hZGRLZXkoJ3N0YXJ0c19hdCcpOwogICAgICAgICAgICAkdGFibGUtPmFkZEtleSgnc3RhdGUnKTsKICAgICAgICAgICAgJHRhYmxlLT5hZGRLZXkoJ2ZpbmdlcnByaW50Jyk7CiAgICAgICAgICAgICR0YWJsZS0+YWRkS2V5KCdyZWdpb24nKTsKICAgICAgICB9KTsKCiAgICAgICAgJHNtLT5jcmVhdGVUYWJsZSgneGZfbmV3ZmlfZXZlbnRfc291cmNlJywgZnVuY3Rpb24gKENyZWF0ZSAkdGFibGUpCiAgICAgICAgewogICAgICAgICAgICAkdGFibGUtPmFkZENvbHVtbignZXZlbnRfc291cmNlX2lkJywgJ2ludCcpLT5hdXRvSW5jcmVtZW50KCk7CiAgICAgICAgICAgICR0YWJsZS0+YWRkQ29sdW1uKCdldmVudF9pZCcsICdpbnQnKTsKICAgICAgICAgICAgJHRhYmxlLT5hZGRDb2x1bW4oJ3NvdXJjZV91cmwnLCAndmFyY2hhcicsIDUwMCk7CiAgICAgICAgICAgICR0YWJsZS0+YWRkQ29sdW1uKCdjaGVja2VkX2F0JywgJ2ludCcpOwogICAgICAgICAgICAkdGFibGUtPmFkZFByaW1hcnlLZXkoJ2V2ZW50X3NvdXJjZV9pZCcpOwogICAgICAgICAgICAkdGFibGUtPmFkZEtleSgnZXZlbnRfaWQnKTsKICAgICAgICB9KTsKCiAgICAgICAgJHNtLT5jcmVhdGVUYWJsZSgneGZfbmV3ZmlfZXZlbnRfY2hhbmdlJywgZnVuY3Rpb24gKENyZWF0ZSAkdGFibGUpCiAgICAgICAgewogICAgICAgICAgICAkdGFibGUtPmFkZENvbHVtbignZXZlbnRfY2hhbmdlX2lkJywgJ2ludCcpLT5hdXRvSW5jcmVtZW50KCk7CiAgICAgICAgICAgICR0YWJsZS0+YWRkQ29sdW1uKCdldmVudF9pZCcsICdpbnQnKTsKICAgICAgICAgICAgJHRhYmxlLT5hZGRDb2x1bW4oJ2NoYW5nZWRfYXQnLCAnaW50Jyk7CiAgICAgICAgICAgICR0YWJsZS0+YWRkQ29sdW1uKCdjaGFuZ2Vfbm90ZScsICd0ZXh0Jyk7CiAgICAgICAgICAgICR0YWJsZS0+YWRkUHJpbWFyeUtleSgnZXZlbnRfY2hhbmdlX2lkJyk7CiAgICAgICAgICAgICR0YWJsZS0+YWRkS2V5KCdldmVudF9pZCcpOwogICAgICAgIH0pOwoKCiAgICAgICAgJHNtLT5jcmVhdGVUYWJsZSgneGZfbmV3Zmlfc291cmNlX3JlZ2lzdHJ5JywgZnVuY3Rpb24gKENyZWF0ZSAkdGFibGUpCiAgICAgICAgewogICAgICAgICAgICAkdGFibGUtPmFkZENvbHVtbignc291cmNlX2lkJywgJ2ludCcpLT5hdXRvSW5jcmVtZW50KCk7CiAgICAgICAgICAgICR0YWJsZS0+YWRkQ29sdW1uKCdzb3VyY2Vfa2V5JywgJ3ZhcmJpbmFyeScsIDY0KTsKICAgICAgICAgICAgJHRhYmxlLT5hZGRDb2x1bW4oJ3RpdGxlJywgJ3ZhcmNoYXInLCAxNTApOwogICAgICAgICAgICAkdGFibGUtPmFkZENvbHVtbignYmFzZV91cmwnLCAndmFyY2hhcicsIDUwMCk7CiAgICAgICAgICAgICR0YWJsZS0+YWRkQ29sdW1uKCdzb3VyY2VfdHlwZScsICd2YXJiaW5hcnknLCA1MCk7CiAgICAgICAgICAgICR0YWJsZS0+YWRkQ29sdW1uKCdsb2NhbGUnLCAndmFyYmluYXJ5JywgMjApOwogICAgICAgICAgICAkdGFibGUtPmFkZENvbHVtbigncmVnaW9uJywgJ3ZhcmJpbmFyeScsIDUwKTsKICAgICAgICAgICAgJHRhYmxlLT5hZGRDb2x1bW4oJ3BhcnNlcl9zdHJhdGVneScsICd2YXJiaW5hcnknLCAxMDApOwogICAgICAgICAgICAkdGFibGUtPmFkZENvbHVtbigncG9sbF9pbnRlcnZhbF9zZWNvbmRzJywgJ2ludCcpLT51bnNpZ25lZCgpOwogICAgICAgICAgICAkdGFibGUtPmFkZENvbHVtbignbGFzdF9zdWNjZXNzX2F0JywgJ2ludCcpLT51bnNpZ25lZCgpLT5zZXREZWZhdWx0KDApOwogICAgICAgICAgICAkdGFibGUtPmFkZENvbHVtbignbGFzdF9mYWlsdXJlX2F0JywgJ2ludCcpLT51bnNpZ25lZCgpLT5zZXREZWZhdWx0KDApOwogICAgICAgICAgICAkdGFibGUtPmFkZENvbHVtbignZmFpbHVyZV9jb3VudCcsICdpbnQnKS0+dW5zaWduZWQoKS0+c2V0RGVmYXVsdCgwKTsKICAgICAgICAgICAgJHRhYmxlLT5hZGRDb2x1bW4oJ2xhc3RfZXJyb3InLCAndmFyY2hhcicsIDUwMCktPnNldERlZmF1bHQoJycpOwogICAgICAgICAgICAkdGFibGUtPmFkZENvbHVtbigncHJvdmVuYW5jZV9wb2xpY3knLCAndmFyY2hhcicsIDUwMCk7CiAgICAgICAgICAgICR0YWJsZS0+YWRkQ29sdW1uKCdlbmFibGVkJywgJ3RpbnlpbnQnKS0+dW5zaWduZWQoKS0+c2V0RGVmYXVsdCgxKTsKICAgICAgICAgICAgJHRhYmxlLT5hZGRDb2x1bW4oJ2NyZWF0ZWRfYXQnLCAnaW50JyktPnVuc2lnbmVkKCk7CiAgICAgICAgICAgICR0YWJsZS0+YWRkQ29sdW1uKCd1cGRhdGVkX2F0JywgJ2ludCcpLT51bnNpZ25lZCgpOwogICAgICAgICAgICAkdGFibGUtPmFkZFByaW1hcnlLZXkoJ3NvdXJjZV9pZCcpOwogICAgICAgICAgICAkdGFibGUtPmFkZFVuaXF1ZUtleSgnc291cmNlX2tleScpOwogICAgICAgICAgICAkdGFibGUtPmFkZEtleSgnZW5hYmxlZCcpOwogICAgICAgICAgICAkdGFibGUtPmFkZEtleSgnc291cmNlX3R5cGUnKTsKICAgICAgICAgICAgJHRhYmxlLT5hZGRLZXkoJ3JlZ2lvbicpOwogICAgICAgIH0pOwoKICAgICAgICAkc2VlZFBhdGggPSBfX0RJUl9fIC4gJy9wdWJsaWNfc291cmNlcy5qc29uJzsKICAgICAgICAkc2VlZFJvd3MgPSBqc29uX2RlY29kZSgoc3RyaW5nKWZpbGVfZ2V0X2NvbnRlbnRzKCRzZWVkUGF0aCksIHRydWUsIDUxMiwgSlNPTl9USFJPV19PTl9FUlJPUik7CiAgICAgICAgJG5vdyA9IHRpbWUoKTsKICAgICAgICBmb3JlYWNoICgkc2VlZFJvd3MgYXMgJHJvdykKICAgICAgICB7CiAgICAgICAgICAgICRkYiA9IFxYRjo6ZGIoKTsKICAgICAgICAgICAgJGRiLT5pbnNlcnQoJ3hmX25ld2ZpX3NvdXJjZV9yZWdpc3RyeScsIFsKICAgICAgICAgICAgICAgICdzb3VyY2Vfa2V5JyA9PiAkcm93Wydzb3VyY2Vfa2V5J10sCiAgICAgICAgICAgICAgICAndGl0bGUnID0+ICRyb3dbJ3RpdGxlJ10sCiAgICAgICAgICAgICAgICAnYmFzZV91cmwnID0+ICRyb3dbJ2Jhc2VfdXJsJ10sCiAgICAgICAgICAgICAgICAnc291cmNlX3R5cGUnID0+ICRyb3dbJ3NvdXJjZV90eXBlJ10sCiAgICAgICAgICAgICAgICAnbG9jYWxlJyA9PiAkcm93Wydsb2NhbGUnXSwKICAgICAgICAgICAgICAgICdyZWdpb24nID0+ICRyb3dbJ3JlZ2lvbiddLAogICAgICAgICAgICAgICAgJ3BhcnNlcl9zdHJhdGVneScgPT4gJHJvd1sncGFyc2VyX3N0cmF0ZWd5J10sCiAgICAgICAgICAgICAgICAncG9sbF9pbnRlcnZhbF9zZWNvbmRzJyA9PiAoaW50KSRyb3dbJ3BvbGxfaW50ZXJ2YWxfc2Vjb25kcyddLAogICAgICAgICAgICAgICAgJ2xhc3Rfc3VjY2Vzc19hdCcgPT4gMCwKICAgICAgICAgICAgICAgICdsYXN0X2ZhaWx1cmVfYXQnID0+IDAsCiAgICAgICAgICAgICAgICAnZmFpbHVyZV9jb3VudCcgPT4gMCwKICAgICAgICAgICAgICAgICdsYXN0X2Vycm9yJyA9PiAnJywKICAgICAgICAgICAgICAgICdwcm92ZW5hbmNlX3BvbGljeScgPT4gJHJvd1sncHJvdmVuYW5jZV9wb2xpY3knXSwKICAgICAgICAgICAgICAgICdlbmFibGVkJyA9PiAhZW1wdHkoJHJvd1snZW5hYmxlZCddKSA/IDEgOiAwLAogICAgICAgICAgICAgICAgJ2NyZWF0ZWRfYXQnID0+ICRub3csCiAgICAgICAgICAgICAgICAndXBkYXRlZF9hdCcgPT4gJG5vdwogICAgICAgICAgICBdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB1bmluc3RhbGwoYXJyYXkgJHN0ZXBQYXJhbXMgPSBbXSkKICAgIHsKICAgICAgICAkc20gPSAkdGhpcy0+c2NoZW1hTWFuYWdlcigpOwogICAgICAgICRzbS0+ZHJvcFRhYmxlKCd4Zl9uZXdmaV9zb3VyY2VfcmVnaXN0cnknKTsKICAgICAgICAkc20tPmRyb3BUYWJsZSgneGZfbmV3ZmlfZXZlbnRfY2hhbmdlJyk7CiAgICAgICAgJHNtLT5kcm9wVGFibGUoJ3hmX25ld2ZpX2V2ZW50X3NvdXJjZScpOwogICAgICAgICRzbS0+ZHJvcFRhYmxlKCd4Zl9uZXdmaV9ldmVudCcpOwogICAgICAgIHJldHVybiBudWxsOwogICAgfQp9Cg==","bytes":5005,"path":"src/addons/Newfi/Events/Setup.php","present":true,"sha256":"d644a93ec86ff75d9325564c9f0d9ecd36a8059cab4437df62e8be0c561efef0"},"src/addons/Newfi/Events/addon.json":{"body_b64":"ewogICJ0aXRsZSI6ICJOZXdmaSBFdmVudHMiLAogICJkZXNjcmlwdGlvbiI6ICJNaW5pbWFsIHByaXZhdGUtc3RhZ2luZyBldmVudHMvY2FsZW5kYXIgY29tcG9uZW50IGZvciB0aGUgTmV3ZmkgY2xvc2VkIE1WUC4iLAogICJ2ZXJzaW9uX2lkIjogMTAwMDAxMCwKICAidmVyc2lvbl9zdHJpbmciOiAiMS4wLjAgQWxwaGEgMSIsCiAgImRldiI6ICJOZXdmaSIsCiAgImRldl91cmwiOiAiIiwKICAiZmFxX3VybCI6ICIiLAogICJzdXBwb3J0X3VybCI6ICIiLAogICJleHRyYV91cmxzIjogW10sCiAgInJlcXVpcmUiOiB7CiAgICAiWEYiOiBbCiAgICAgIDIwMzEyNzAsCiAgICAgICJYZW5Gb3JvIDIuMy4xMisiCiAgICBdCiAgfSwKICAiaWNvbiI6ICIiLAogICJsZWdhY3lfYWRkb25faWQiOiAiIgp9Cg==","bytes":397,"path":"src/addons/Newfi/Events/addon.json","present":true,"sha256":"cc60d5f949db176004f603e42cfb160aefd7ed4d8d7fff30101f4ebb2c502dc3"},"src/addons/Newfi/Events/public_sources.json":{"body_b64":"WwogIHsKICAgICJzb3VyY2Vfa2V5IjogInJrZl9leGhpYml0aW9ucyIsCiAgICAidGl0bGUiOiAi0KDQmtCkIOKAlCDQstGL0YHRgtCw0LLQvtGH0L3QsNGPINC00LXRj9GC0LXQu9GM0L3QvtGB0YLRjCIsCiAgICAiYmFzZV91cmwiOiAiaHR0cHM6Ly9ya2Yub3JnLnJ1L3Z5c3Rhdm9jaG5hamEtZGVqYXRlbG5vc3QvIiwKICAgICJzb3VyY2VfdHlwZSI6ICJvZmZpY2lhbF9leGhpYml0aW9uX3NjaGVkdWxlIiwKICAgICJsb2NhbGUiOiAicnUtUlUiLAogICAgInJlZ2lvbiI6ICJSVSIsCiAgICAicGFyc2VyX3N0cmF0ZWd5IjogImh0bWxfcmtmX2V4aGliaXRpb25fYWN0aXZpdHlfdjEiLAogICAgInBvbGxfaW50ZXJ2YWxfc2Vjb25kcyI6IDg2NDAwLAogICAgInByb3ZlbmFuY2VfcG9saWN5IjogIm9mZmljaWFsX3B1YmxpYzsgcmV0YWluIHNvdXJjZSBVUkwgYW5kIGNoZWNrZWRfYXQ7IG5vIHZlcmJhdGltIGZ1bGwtdGV4dCByZXB1YmxpY2F0aW9uIiwKICAgICJlbmFibGVkIjogMQogIH0sCiAgewogICAgInNvdXJjZV9rZXkiOiAiZmNpX3Nob3dfc2NoZWR1bGVzIiwKICAgICJ0aXRsZSI6ICJGQ0kg4oCUIHNob3cgc2NoZWR1bGVzIiwKICAgICJiYXNlX3VybCI6ICJodHRwczovL3d3dy5mY2kuYmUvZW4vc2NoZWR1bGVzL2NvbmNvdXJzLmFzcHgiLAogICAgInNvdXJjZV90eXBlIjogIm9mZmljaWFsX2V4aGliaXRpb25fc2NoZWR1bGUiLAogICAgImxvY2FsZSI6ICJlbiIsCiAgICAicmVnaW9uIjogIkdMT0JBTCIsCiAgICAicGFyc2VyX3N0cmF0ZWd5IjogImh0bWxfZmNpX3Nob3dfc2NoZWR1bGVfdjEiLAogICAgInBvbGxfaW50ZXJ2YWxfc2Vjb25kcyI6IDg2NDAwLAogICAgInByb3ZlbmFuY2VfcG9saWN5IjogIm9mZmljaWFsX3B1YmxpYzsgcmV0YWluIHNvdXJjZSBVUkwgYW5kIGNoZWNrZWRfYXQ7IG5vIHZlcmJhdGltIGZ1bGwtdGV4dCByZXB1YmxpY2F0aW9uIiwKICAgICJlbmFibGVkIjogMQogIH0KXQo=","bytes":977,"path":"src/addons/Newfi/Events/public_sources.json","present":true,"sha256":"99171c50e3e113ef08d1c4ffecb0ec49328b7b5454c91b5eb22e200798deaca1"},"src/addons/Newfi/Portal/addon.json":{"body_b64":"ewogICJ0aXRsZSI6ICJOZXdmaSBQb3J0YWwiLAogICJkZXNjcmlwdGlvbiI6ICJNaW5pbWFsIHByaXZhdGUtc3RhZ2luZyBwb3J0YWwgZm9yIHRoZSBOZXdmaSBjbG9zZWQgTVZQLiIsCiAgInZlcnNpb25faWQiOiAxMDAwMDEwLAogICJ2ZXJzaW9uX3N0cmluZyI6ICIxLjAuMCBBbHBoYSAxIiwKICAiZGV2IjogIk5ld2ZpIiwKICAiZGV2X3VybCI6ICIiLAogICJmYXFfdXJsIjogIiIsCiAgInN1cHBvcnRfdXJsIjogIiIsCiAgImV4dHJhX3VybHMiOiBbXSwKICAicmVxdWlyZSI6IHsKICAgICJYRiI6IFsKICAgICAgMjAzMTI3MCwKICAgICAgIlhlbkZvcm8gMi4zLjEyKyIKICAgIF0KICB9LAogICJpY29uIjogIiIsCiAgImxlZ2FjeV9hZGRvbl9pZCI6ICIiCn0K","bytes":378,"path":"src/addons/Newfi/Portal/addon.json","present":true,"sha256":"288a61044c941107162d045be49ab2e7c844d1586b25378a7289b3c7275010ab"}},"hostname":"newfi-staging","role":"staging","root":"/var/www/forums/newfi/public"}
NEWFI130_PRODUCTION={"autocontent_directory_present":false,"autocontent_top_names":[],"collection":"COMPLETE","command_id":"NEWFI-260919-NEWFDOM-AUTOCONTENT210-CONTRACT130","discovery":{"src/XF/AddOn":["src/XF/AddOn/AbstractSetup.php","src/XF/AddOn/AddOn.php","src/XF/AddOn/Manager.php","src/XF/AddOn/StepRunnerInstallTrait.php","src/XF/AddOn/StepRunnerUninstallTrait.php","src/XF/AddOn/StepRunnerUpgradeTrait.php"],"src/XF/Cli/Command":["src/XF/Cli/Command/AddOnInstall.php","src/XF/Cli/Command/AddOnUninstall.php"],"src/XF/Job":["src/XF/Job/Cron.php","src/XF/Job/JobParams.php","src/XF/Job/JobResult.php"],"src/XF/Repository":["src/XF/Repository/CronEntryRepository.php"],"src/XF/Service":["src/XF/Service/AbstractService.php"]},"files":{"src/XF/AddOn/AbstractSetup.php":{"bytes":2151,"path":"src/XF/AddOn/AbstractSetup.php","present":true,"sha256":"6bdd3fe834e15b963a52c9357f54262f2d12f3c7c3686fc31333b549cddf2d88"},"src/XF/AddOn/AddOn.php":{"bytes":18649,"path":"src/XF/AddOn/AddOn.php","present":true,"sha256":"0e0346a046fff6bde9850cb53e9dc0d0b5379387029dc16925e562fa141ab422"},"src/XF/AddOn/Manager.php":{"bytes":7961,"path":"src/XF/AddOn/Manager.php","present":true,"sha256":"04dead4bc9b1818b77957cd9d3f7f807d2cfa746ee9c8335a93504f38abd77ac"},"src/XF/AddOn/StepRunnerInstallTrait.php":{"bytes":1730,"path":"src/XF/AddOn/StepRunnerInstallTrait.php","present":true,"sha256":"1f441b8a3101b97009ae04e62c04e79062a89f1e01a08ae9e07c5e629c76d5f2"},"src/XF/AddOn/StepRunnerUninstallTrait.php":{"bytes":1747,"path":"src/XF/AddOn/StepRunnerUninstallTrait.php","present":true,"sha256":"e58a9ab9c30e3cf3c41a0be392e8c5ac37f744578f7b91f76d663139649c49a9"},"src/XF/AddOn/StepRunnerUpgradeTrait.php":{"bytes":3887,"path":"src/XF/AddOn/StepRunnerUpgradeTrait.php","present":true,"sha256":"b61698d9c20f094cc1b704ad48798148fe5843e2dc746592cb2db252b579d1b5"},"src/XF/Cli/Command/AddOnInstall.php":{"bytes":2412,"path":"src/XF/Cli/Command/AddOnInstall.php","present":true,"sha256":"2407ad9ae20ca8ac1ca84b456ac2adc537f39c79534da5e258167a4d0df2a54f"},"src/XF/Cli/Command/AddOnUninstall.php":{"bytes":1981,"path":"src/XF/Cli/Command/AddOnUninstall.php","present":true,"sha256":"6dc768f60efd4af161b549cd54c01ae8922326cf7fd230b8ef93403bf8dba90c"},"src/XF/Entity/CronEntry.php":{"bytes":6316,"path":"src/XF/Entity/CronEntry.php","present":true,"sha256":"375adc401344ec7ff0e7a63d4d02762ba517d094da3e3b50dedc1630b022cd28"},"src/XF/Job/AbstractJob.php":{"bytes":2939,"path":"src/XF/Job/AbstractJob.php","present":true,"sha256":"466ecb3b7a131668e67644892a7a73c4ff5a51515ceb3567756db281afd4b244"},"src/XF/Job/Cron.php":{"bytes":1528,"path":"src/XF/Job/Cron.php","present":true,"sha256":"7058ed4fcd276eac9224ac1da85915100c56f8741f1578782946652bec91b60a"},"src/XF/Job/JobParams.php":{"bytes":1649,"path":"src/XF/Job/JobParams.php","present":true,"sha256":"800b231928447f3aa67601d3ea9c62f2d49b3da7495078d80a767b0e3681ccff"},"src/XF/Job/JobResult.php":{"bytes":1936,"path":"src/XF/Job/JobResult.php","present":true,"sha256":"03d0d387a01fe859212ae3df89e92df2207e7005946284f41702636912c9ebe7"},"src/XF/Job/Manager.php":{"bytes":14932,"path":"src/XF/Job/Manager.php","present":true,"sha256":"bb62eaeb6d8e4ade4a5cef3a942b1ce0e67dec3af01ef50224700ee4765dbeb9"},"src/XF/Repository/CronEntryRepository.php":{"bytes":322,"path":"src/XF/Repository/CronEntryRepository.php","present":true,"sha256":"1ec4dca123543b7460a6955d51f79cb23cc6e642b04fe26c3a18b8eaa11040b1"},"src/XF/Service/AbstractService.php":{"bytes":1492,"path":"src/XF/Service/AbstractService.php","present":true,"sha256":"8ac032963c1834778bc778c011d69154776a23a4c57f924d554b4c8bc159b795"},"src/addons/Newfi/Dogs/Setup.php":{"bytes":1445,"path":"src/addons/Newfi/Dogs/Setup.php","present":true,"sha256":"6fe24fe38301b346900bca84edddb6ff3fee3977cd820050efa0d20d0854bbdc"},"src/addons/Newfi/Dogs/addon.json":{"bytes":395,"path":"src/addons/Newfi/Dogs/addon.json","present":true,"sha256":"71b89450f1e7ef3c7320f8a34f15385e9f54db14642288a930868429492d5f31"},"src/addons/Newfi/Events/Entity/EventSource.php":{"bytes":775,"path":"src/addons/Newfi/Events/Entity/EventSource.php","present":true,"sha256":"07541d087caf9668a2a2d80bb8cd81e9471095ce36260f1cc12ec81eb0460187"},"src/addons/Newfi/Events/Entity/SourceRegistry.php":{"bytes":2155,"path":"src/addons/Newfi/Events/Entity/SourceRegistry.php","present":true,"sha256":"9fa9cf171fb586741eecd217d0156e01cdd89f2060b8f71bb780252f44365139"},"src/addons/Newfi/Events/Repository/SourceRegistry.php":{"bytes":506,"path":"src/addons/Newfi/Events/Repository/SourceRegistry.php","present":true,"sha256":"31ee889681ee0af9d44f19ba9a6857ae07982c9ed90bb85835de7da6b40053b4"},"src/addons/Newfi/Events/Setup.php":{"bytes":5005,"path":"src/addons/Newfi/Events/Setup.php","present":true,"sha256":"d644a93ec86ff75d9325564c9f0d9ecd36a8059cab4437df62e8be0c561efef0"},"src/addons/Newfi/Events/addon.json":{"bytes":397,"path":"src/addons/Newfi/Events/addon.json","present":true,"sha256":"cc60d5f949db176004f603e42cfb160aefd7ed4d8d7fff30101f4ebb2c502dc3"},"src/addons/Newfi/Events/public_sources.json":{"bytes":977,"path":"src/addons/Newfi/Events/public_sources.json","present":true,"sha256":"99171c50e3e113ef08d1c4ffecb0ec49328b7b5454c91b5eb22e200798deaca1"},"src/addons/Newfi/Portal/addon.json":{"bytes":378,"path":"src/addons/Newfi/Portal/addon.json","present":true,"sha256":"288a61044c941107162d045be49ab2e7c844d1586b25378a7289b3c7275010ab"}},"hostname":"newfi-prod","role":"production","root":"/var/www/forums/newfi/public"}
NEWFI130_GIT_AFTER={"branch":"implementation/newfi-closed-mvp-20260906","clean":true,"head":"9a425b019fee4174c8ea9bcca7da0e769372f9b3","remote_head":"9a425b019fee4174c8ea9bcca7da0e769372f9b3","tracked_newfi_paths":["src/addons/Newfi/Dogs/Setup.php","src/addons/Newfi/Dogs/addon.json","src/addons/Newfi/Events/Entity/EventSource.php","src/addons/Newfi/Events/Entity/SourceRegistry.php","src/addons/Newfi/Events/Repository/SourceRegistry.php","src/addons/Newfi/Events/Setup.php","src/addons/Newfi/Events/addon.json","src/addons/Newfi/Events/public_sources.json","src/addons/Newfi/Portal/addon.json"]}
NEWFI130_ISSUES=[]
NEWFI130_SOURCE_CAPTURE_COMPLETE=true
NEWFI130_AUTOCONTENT210_CLOSED=false
NEWFI130_MAJOR_STAGES_REMAINING=12
NEWFI130_DECISION=PASS_SOURCE_IDENTITY_AND_NATIVE_CONTRACT_CAPTURE
NEWFI130_NEXT_GATE=BUILD_AUTOCONTENT210_ADDON_SERVICE_BOUNDARY
HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"NEWFI-260919-NEWFDOM-AUTOCONTENT210-CONTRACT130","rollback_restored":null,"rollback_started":false,"status":"OK","version":1}

OUTPUT_END
CHAT_OUTPUT_END
