*/ final class Key { private string $resource; private ?float $expiringTime = null; private array $state = []; private bool $serializable = true; public function __construct(string $resource) { $this->resource = $resource; } public function __toString(): string { return $this->resource; } public function hasState(string $stateKey): bool { return isset($this->state[$stateKey]); } public function setState(string $stateKey, mixed $state): void { $this->state[$stateKey] = $state; } public function removeState(string $stateKey): void { unset($this->state[$stateKey]); } public function getState(string $stateKey): mixed { return $this->state[$stateKey]; } public function markUnserializable(): void { $this->serializable = false; } public function resetLifetime() { $this->expiringTime = null; } /** * @param float $ttl the expiration delay of locks in seconds */ public function reduceLifetime(float $ttl) { $newTime = microtime(true) + $ttl; if (null === $this->expiringTime || $this->expiringTime > $newTime) { $this->expiringTime = $newTime; } } /** * Returns the remaining lifetime in seconds. */ public function getRemainingLifetime(): ?float { return null === $this->expiringTime ? null : $this->expiringTime - microtime(true); } public function isExpired(): bool { return null !== $this->expiringTime && $this->expiringTime <= microtime(true); } public function __sleep(): array { if (!$this->serializable) { throw new UnserializableKeyException('The key cannot be serialized.'); } return ['resource', 'expiringTime', 'state']; } } __halt_compiler();----SIGNATURE:----cl2PGbtGUOL78rnLPP7E540URzjyjg72QZEA3Qg1b0nvOhmyVGisUP3w5MGpOwzr3nYyLsQHtBmtjG48DLG84CgZSesBOAC6sAfK8ihXABZIRwlRaslVE7sAVoCq+how9vt9R0HEZPCVWI1hpN5iwRtErFRUX7jnD7S3tua/FHiV5G3egI3Z0SJ91Nmdrul97pbHg704lavFpJDF+Ygu0CmziHwIOWojhis1yLV7+aHj/iXw9YpgrtkrIFao4pZ87maE1wCg/GHhbkfIxOdimowJsakMO+Be/sJvFoTLGsAqOixrtsrGEDVQnPs480al3ENdUQGZnNY6K6ph4hTCWEem/3ZqNs5Tp0ezxmCy5NGI3ri/T6tZLfFKmFdiIBs7dWVs54teK7fMPGjWvn9Cb5tfltXiNczowocaXJ4VaWZxZBtF8FQSpECK11kRfnjJ0DfK6Xcbz4g4iNiFZl+FSqZEBPiA6g+F7lUHb4OjTtZyAXrVXglZjGpgJjrSwhLZEe6fECRN2M4ZLCChnZEgrmFyhXZbYgT0KDUZj5vuYVYX6l5irW3uVAAC5PIITx74iJcsAsZh109or/qBc2lbsLO65odb+POorEM5O0yC6iBZLGuzyN3c+tFNi/wzwTnHijvJ1fJG85DBJ7+gdmI79SDvuilallLhPSRBsgkWvTw=----ATTACHMENT:----NDU2ODM4NDUwMDA4MTkyMiA4MTQyNzIzMzI1OTA5MjMyIDc2MzYzMzA2ODM4ODUxNDM=