diff --git a/CHANGELOG.md b/CHANGELOG.md index 840f8c56c..b4d4d0f96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ -# v5.1.1-beta5 +# v5.1.1-beta6 -- Completely refactors the SQL tweaks and SQL dump classes. +- Fix bug in the filter of Languages by linked entities. #1230 # v5.1.1-beta @@ -25,7 +25,8 @@ - Adds advanced version update notice to the Component Builder Dashboard. - Completely refactors the class that builds the Component Dashboard. #1134 - Fix the FieldXML interface mismatch. #1228 -- Adds Initialize, Reset, and Push functionality to the Repository entities. +- Adds Initialize, Reset, and Push functionality to the Repository entities. +- Completely refactors the SQL tweaks and SQL dump classes. # v5.1.0 diff --git a/ComponentbuilderInstallerScript.php b/ComponentbuilderInstallerScript.php index 638ae649a..682abf26d 100644 --- a/ComponentbuilderInstallerScript.php +++ b/ComponentbuilderInstallerScript.php @@ -3292,7 +3292,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface echo '
-

Upgrade to Version 5.1.1-beta5 Was Successful! Let us know if anything is not working as expected.

'; +

Upgrade to Version 5.1.1-beta6 Was Successful! Let us know if anything is not working as expected.

'; // Add/Update component in the action logs extensions table. $this->setActionLogsExtensions(); diff --git a/README.md b/README.md index 5c79fd9f8..95c62cd4e 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ This is a professional-grade [Joomla 5.x](https://extensions.joomla.org/extensio JCB generates native Joomla components, plugins, and modules for Joomla 3.x, 4.x, and 5.x - and is already prepared for Joomla 6. Every compiled project is tailored for the specific version without needing backward compatibility plugins. With integrated version-aware compiling, smart boilerplating, and Git-powered project syncing, JCB is much more than a code generator-it's a **full-stack development pipeline for Joomla extensions**. -You can install this component easily. The latest release (**5.1.1-beta5**) is available on [Releases](https://git.vdm.dev/joomla/pkg-component-builder/releases) and updated frequently with full source access. +You can install this component easily. The latest release (**5.1.1-beta6**) is available on [Releases](https://git.vdm.dev/joomla/pkg-component-builder/releases) and updated frequently with full source access. Upgrades are seamless through Joomla's built-in extension update mechanism. @@ -229,9 +229,9 @@ JCB is developed by developers for developers. Its purpose is to democratize hig * **Company:** [Vast Development Method](https://dev.vdm.io) * **Author:** [Llewellyn van der Merwe](mailto:joomla@vdm.io) * **Component:** [Component Builder](https://git.vdm.dev/joomla/Component-Builder) -* **Created:** 30th April, 2015 · **Last Build:** 25th June, 2025 · **Version:** 5.1.1-beta5 +* **Created:** 30th April, 2015 · **Last Build:** 1st July, 2025 · **Version:** 5.1.1-beta6 * **License:** GNU General Public License version 2 or later; see LICENSE.txt · **Copyright:** Copyright (C) 2015 Vast Development Method. All rights reserved. -* **Lines:** 1092899 · **Fields:** 2096 · **Files:** 7506 · **Folders:** 728 +* **Lines:** 1094999 · **Fields:** 2096 · **Files:** 7514 · **Folders:** 728 > Generated with [JCB](https://www.joomlacomponentbuilder.com) — The Smartest Way to Build Joomla Extensions. diff --git a/admin/README.txt b/admin/README.txt index 5c79fd9f8..95c62cd4e 100644 --- a/admin/README.txt +++ b/admin/README.txt @@ -9,7 +9,7 @@ This is a professional-grade [Joomla 5.x](https://extensions.joomla.org/extensio JCB generates native Joomla components, plugins, and modules for Joomla 3.x, 4.x, and 5.x - and is already prepared for Joomla 6. Every compiled project is tailored for the specific version without needing backward compatibility plugins. With integrated version-aware compiling, smart boilerplating, and Git-powered project syncing, JCB is much more than a code generator-it's a **full-stack development pipeline for Joomla extensions**. -You can install this component easily. The latest release (**5.1.1-beta5**) is available on [Releases](https://git.vdm.dev/joomla/pkg-component-builder/releases) and updated frequently with full source access. +You can install this component easily. The latest release (**5.1.1-beta6**) is available on [Releases](https://git.vdm.dev/joomla/pkg-component-builder/releases) and updated frequently with full source access. Upgrades are seamless through Joomla's built-in extension update mechanism. @@ -229,9 +229,9 @@ JCB is developed by developers for developers. Its purpose is to democratize hig * **Company:** [Vast Development Method](https://dev.vdm.io) * **Author:** [Llewellyn van der Merwe](mailto:joomla@vdm.io) * **Component:** [Component Builder](https://git.vdm.dev/joomla/Component-Builder) -* **Created:** 30th April, 2015 · **Last Build:** 25th June, 2025 · **Version:** 5.1.1-beta5 +* **Created:** 30th April, 2015 · **Last Build:** 1st July, 2025 · **Version:** 5.1.1-beta6 * **License:** GNU General Public License version 2 or later; see LICENSE.txt · **Copyright:** Copyright (C) 2015 Vast Development Method. All rights reserved. -* **Lines:** 1092899 · **Fields:** 2096 · **Files:** 7506 · **Folders:** 728 +* **Lines:** 1094999 · **Fields:** 2096 · **Files:** 7514 · **Folders:** 728 > Generated with [JCB](https://www.joomlacomponentbuilder.com) — The Smartest Way to Build Joomla Extensions. diff --git a/admin/compiler/joomla_4/ADMIN_HELPER_EMAIL.php b/admin/compiler/joomla_4/ADMIN_HELPER_EMAIL.php index 509746671..fb8c6d1f4 100644 --- a/admin/compiler/joomla_4/ADMIN_HELPER_EMAIL.php +++ b/admin/compiler/joomla_4/ADMIN_HELPER_EMAIL.php @@ -20,76 +20,104 @@ use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Mail\Mail; use Joomla\Registry\Registry; -// No direct access to this file \defined('_JEXEC') or die; /** * ###Component### component email helper * - * @since 3.0 + * Provides a complete and configurable mailer integration for Joomla components. + * Allows for custom headers, DKIM signing, embedded images, and HTML styling. + * + * @since 3.0 */ abstract class ###Component###Email { /** - * The active recipient + * The active recipient. * - * @var activeRecipient (array) + * @var array + * @since 3.0 */ - public static $active = []; + public static array $active = []; /** - * Configuration object + * Mail instances container. * - * @var Registry + * @var Joomla___890fd6b1_0127_4f35_9b6e_ee6f2dc61bcc___Power[] + * @since 1.7.3 */ - public static ?Registry $config = null; + protected static array $instances = []; /** - * Mailer object + * Global Configuration object. * - * @var Mail + * @var Registry|null + * @since 5.1.1 */ - public static ?Mail $mailer = null; + protected static ?Registry $gConfig = null; /** - * Custom Headers + * Component Configuration object. * - * @var array + * @var Registry|null + * @since 3.0 + */ + protected static ?Registry $config = null; + + /** + * Mailer object. + * + * @var Joomla___890fd6b1_0127_4f35_9b6e_ee6f2dc61bcc___Power|null + * @since 3.0 + */ + protected static ?Joomla___890fd6b1_0127_4f35_9b6e_ee6f2dc61bcc___Power $mailer = null; + + /** + * Custom email headers. + * + * @var array + * @since 3.0 */ protected static array $header = []; /** - * Get a configuration object + * Retrieve the component configuration. * + * @return Registry Component configuration object + * @since 3.0 */ - public static function getConfig() + protected static function getConfig(): Registry { - if (!self::$config) - { - self::$config = Joomla___aeb8e463_291f_4445_9ac4_34b637c12dbd___Power::getParams('com_###component###'); - } - - return self::$config; + return self::$config ??= Joomla___aeb8e463_291f_4445_9ac4_34b637c12dbd___Power::getParams('com_###component###'); } /** - * Returns the global mailer object, only creating it if it doesn't already exist. + * Retrieve the global configuration. * + * @return Registry Global configuration object + * @since 3.0 */ - public static function getMailerInstance() + protected static function getGlobalConfig(): Registry { - if (!self::$mailer) - { - self::$mailer = self::createMailer(); - } - - return self::$mailer; + return self::$gConfig ??= Joomla___39403062_84fb_46e0_bac4_0023f766e827___Power::getApplication()->getConfig(); } /** - * Check that a string looks like an email address. - * @param string $address The email address to check - * @param string|callable $patternselect A selector for the validation pattern to use : + * Get or create a Mailer instance. + * + * @return Joomla___890fd6b1_0127_4f35_9b6e_ee6f2dc61bcc___Power A cloned Mail object instance + * @since 3.0 + */ + public static function getMailer(): Joomla___890fd6b1_0127_4f35_9b6e_ee6f2dc61bcc___Power + { + return self::$mailer ??= self::createMailer(); + } + + /** + * Validate an email address using a selected pattern or callable. + * + * @param string $address Email address to validate. + * @param string|callable|null $patternselect Validation pattern or callable. * * `auto` Pick best pattern automatically; * * `pcre8` Use the squiloople.com pattern, requires PCRE > 8.0, PHP >= 5.3.2, 5.2.14; * * `pcre` Use old PCRE implementation; @@ -101,374 +129,357 @@ abstract class ###Component###Email * return (strpos($address, '@') !== false); * }); * You can also set the PHPMailer::$validator static to a callable, allowing built-in methods to use your validator. - * @return boolean - * @static - * @access public + * + * @return bool True if valid, false otherwise + * @since 3.0 */ - public static function validateAddress($address, $patternselect = null): bool + public static function validateAddress(string $address, $patternselect = null): bool { - return self::getMailerInstance()->validateAddress($address, $patternselect); + return self::getMailer()->validateAddress($address, $patternselect); } /** - * Get a mailer object. + * Set a custom email header. * - * Returns the global {@link Mail} object, only creating it if it doesn't already exist. + * @param string $key Header name. + * @param string $value Header value. * - * @return Mail object - * - * @see Mail + * @return void + * @since 3.0 */ - public static function getMailer(): Mail + public static function setHeader(string $key, string $value): void { - if (!self::$mailer) + self::$header[$key] = $value; + } + + /** + * Get or create a Mail instance with specific configuration. + * + * @param string $id Instance ID. + * @param bool $exceptions Enable exceptions. + * + * @return Joomla___890fd6b1_0127_4f35_9b6e_ee6f2dc61bcc___Power Configured Mail instance + * @since 5.1.1 + */ + public static function getInstance(string $id = 'Joomla', bool $exceptions = true): Joomla___890fd6b1_0127_4f35_9b6e_ee6f2dc61bcc___Power + { + if (!isset(self::$instances[$id])) { - self::$mailer = self::createMailer(); + $config = clone self::getGlobalConfig(); + $config->set('throw_exceptions', $exceptions); + self::$instances[$id] = Joomla___39403062_84fb_46e0_bac4_0023f766e827___Power::getContainer()->get(Joomla___3e2779e9_b33f_42b8_a13b_53f08d99f15b___Power::class)->createMailer($config); } - $copy = clone self::$mailer; - - return $copy; + return self::$instances[$id]; } /** - * Create a mailer object + * Create a configured Mail instance. * - * @return Mail object - * - * @see Mail + * @return Joomla___890fd6b1_0127_4f35_9b6e_ee6f2dc61bcc___Power The created Mail object with sender, reply-to and transport settings. + * @since 3.0 */ - protected static function createMailer(): Mail + protected static function createMailer(): Joomla___890fd6b1_0127_4f35_9b6e_ee6f2dc61bcc___Power { - // set component params - $conf = self::getConfig(); - - // now load the mailer + $conf = self::getConfig(); $mailer = $conf->get('mailer', 'global'); + $mail = self::getInstance(); - // Create a Mail object - $mail = Mail::getInstance(); - - // check if set to global - if ('global' == $mailer) + if ($mailer === 'global') { - // get the global details - $globalConf = Joomla___39403062_84fb_46e0_bac4_0023f766e827___Power::getConfig(); - - $mailer = $globalConf->get('mailer'); - $smtpauth = ($globalConf->get('smtpauth') == 0) ? null : 1; - $smtpuser = $globalConf->get('smtpuser'); - $smtppass = $globalConf->get('smtppass'); - $smtphost = $globalConf->get('smtphost'); - $smtpsecure = $globalConf->get('smtpsecure'); - $smtpport = $globalConf->get('smtpport'); - $sendmail = $globalConf->get('sendmail'); - $mailfrom = $globalConf->get('mailfrom'); - $fromname = $globalConf->get('fromname'); - $replyto = $globalConf->get('replyto'); - $replytoname = $globalConf->get('replytoname'); + $global = self::getGlobalConfig(); + $mailer = $global->get('mailer'); + $params = [ + 'smtpauth' => $global->get('smtpauth') ? 1 : null, + 'smtpuser' => $global->get('smtpuser'), + 'smtppass' => $global->get('smtppass'), + 'smtphost' => $global->get('smtphost'), + 'smtpsecure' => $global->get('smtpsecure'), + 'smtpport' => $global->get('smtpport'), + 'sendmail' => $global->get('sendmail'), + 'from' => $global->get('mailfrom'), + 'name' => $global->get('fromname'), + 'replyto' => $global->get('replyto'), + 'replytoname' => $global->get('replytoname'), + ]; } else { - $smtpauth = ($conf->get('smtpauth') == 0) ? null : 1; - $smtpuser = $conf->get('smtpuser'); - $smtppass = $conf->get('smtppass'); - $smtphost = $conf->get('smtphost'); - $smtpsecure = $conf->get('smtpsecure'); - $smtpport = $conf->get('smtpport'); - $sendmail = $conf->get('sendmail'); - $mailfrom = $conf->get('emailfrom'); - $fromname = $conf->get('fromname'); - $replyto = $conf->get('replyto'); - $replytoname = $conf->get('replytoname'); + $params = [ + 'smtpauth' => $conf->get('smtpauth') ? 1 : null, + 'smtpuser' => $conf->get('smtpuser'), + 'smtppass' => $conf->get('smtppass'), + 'smtphost' => $conf->get('smtphost'), + 'smtpsecure' => $conf->get('smtpsecure'), + 'smtpport' => $conf->get('smtpport'), + 'sendmail' => $conf->get('sendmail'), + 'from' => $conf->get('emailfrom'), + 'name' => $conf->get('fromname'), + 'replyto' => $conf->get('replyto'), + 'replytoname' => $conf->get('replytoname'), + ]; } - // Set global sender - $mail->setSender(array($mailfrom, $fromname)); + $mail->setSender([$params['from'], $params['name']]); - // set the global reply-to if found - if ($replyto && $replytoname) - { + if (!empty($params['replyto']) && !empty($params['replytoname'])) + { $mail->ClearReplyTos(); - $mail->addReplyTo($replyto, $replytoname); + $mail->addReplyTo($params['replyto'], $params['replytoname']); } - // Default mailer is to use PHP's mail function switch ($mailer) { case 'smtp': - // set the SMTP option - $mail->useSMTP($smtpauth, $smtphost, $smtpuser, $smtppass, $smtpsecure, $smtpport); + $mail->useSMTP( + $params['smtpauth'], + $params['smtphost'], + $params['smtpuser'], + $params['smtppass'], + $params['smtpsecure'], + $params['smtpport'] + ); break; - case 'sendmail': - // set the sendmail option - $mail->useSendmail($sendmail); + $mail->useSendmail($params['sendmail']); $mail->IsSendmail(); break; - default: $mail->IsMail(); - break; } return $mail; } /** - * Set a Mail custom header. + * Compose and send an email with full options including attachments, HTML, DKIM, and reply-to support. * - * @return void + * @param string|array $recipient Email or list of recipients. + * @param string $subject Subject line. + * @param string $body HTML body. + * @param string|null $textonly Optional plain text fallback. + * @param int $mode 1 = HTML, 0 = plain text. + * @param string|null $bounce_email Optional bounce email address. + * @param string|null $idsession Optional message tracking tag. + * @param string|array|null $mailreply Optional reply-to address(es). + * @param string|array|null $replyname Optional reply-to name(s). + * @param string|null $mailfrom Optional sender email override. + * @param string|null $fromname Optional sender name override. + * @param array|null $cc CC recipients. + * @param array|null $bcc BCC recipients. + * @param array|string|null $attachment Attachments. + * @param bool $embeded Embed image flag. + * @param array|null $embeds Embedded image definitions. + * + * @return bool True on success, false on failure. + * @since 3.0 */ - public static function setHeader($target, $value) - { - // set the header - self::$header[$target] = $value; - } - - /** - * Send an email - * - * @return bool on success - * - */ - public static function send($recipient, $subject, $body, $textonly, $mode = 0, $bounce_email = null, $idsession = null, $mailreply = null, $replyname = null , $mailfrom = null, $fromname = null, $cc = null, $bcc = null, $attachment = null, $embeded = null , $embeds = null) - { - // Get a Mail instance + public static function send( + $recipient, + string $subject, + string $body, + ?string $textonly, + int $mode = 0, + ?string $bounce_email = null, + ?string $idsession = null, + $mailreply = null, + $replyname = null, + ?string $mailfrom = null, + ?string $fromname = null, + ?array $cc = null, + ?array $bcc = null, + $attachment = null, + bool $embeded = false, + ?array $embeds = null + ): bool { $mail = self::getMailer(); - - // set component params $conf = self::getConfig(); - // set if we have override if ($mailfrom && $fromname) { - $mail->setSender(array($mailfrom, $fromname)); + $mail->setSender([$mailfrom, $fromname]); } - // load the bounce email as sender if set - if (!is_null($bounce_email)) + if ($bounce_email) { $mail->Sender = $bounce_email; } - // Add tag to email to identify it - if (!is_null($idsession)) + if ($idsession) { - $mail->addCustomHeader('X-VDMmethodID:'.$idsession); + $mail->addCustomHeader('X-VDMmethodID:' . $idsession); } - // set headers if found - if (isset(self::$header) && is_array(self::$header) && count((array)self::$header) > 0) + foreach (self::$header as $key => $val) { - foreach (self::$header as $_target => $_value) - { - $mail->addCustomHeader($_target.':'.$_value); - } + $mail->addCustomHeader($key . ':' . $val); } - // set the subject & Body $mail->setSubject($subject); $mail->setBody($body); - // Are we sending the email as HTML? if ($mode) { - $mail->IsHTML(true); + $mail->isHTML(true); $mail->AltBody = $textonly; } - //embed images - if ($embeded) + if ($embeded && !empty($embeds)) { - if(Super___0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check($embeds)) + foreach ($embeds as $embed) { - foreach($embeds as $embed) - { - $mail->AddEmbeddedImage($embed->Path,$embed->FileName); - } + $mail->addEmbeddedImage($embed->Path, $embed->FileName); } } $mail->addRecipient($recipient); - $mail->addCC($cc); - $mail->addBCC($bcc); - $mail->addAttachment($attachment); + if (!empty($cc)) $mail->addCC($cc); + if (!empty($bcc)) $mail->addBCC($bcc); + if (!empty($attachment)) $mail->addAttachment($attachment); - // Take care of reply email addresses - if (is_array($mailreply)) + if (!empty($mailreply)) { $mail->ClearReplyTos(); - $numReplyTo = count((array)$mailreply); - for ($i=0; $i < $numReplyTo; $i++) + if (is_array($mailreply)) { - $mail->addReplyTo($mailreply[$i], $replyname[$i]); + foreach ($mailreply as $i => $reply) + { + $mail->addReplyTo($reply, $replyname[$i] ?? ''); + } + } + else + { + $mail->addReplyTo($mailreply, (string) $replyname); } } - elseif (!empty($mailreply)) - { - $mail->ClearReplyTos(); - $mail->addReplyTo($mailreply, $replyname); - } - // check if we can add the DKIM to email - if ($conf->get('enable_dkim')) - { - if (!empty($conf->get('dkim_domain')) && !empty($conf->get('dkim_selector')) && !empty($conf->get('dkim_private')) && !empty($conf->get('dkim_public'))) - { - $mail->DKIM_domain = $conf->get('dkim_domain'); - $mail->DKIM_selector = $conf->get('dkim_selector'); - $mail->DKIM_identity = $conf->get('dkim_identity'); - $mail->DKIM_passphrase = $conf->get('dkim_passphrase'); + $sent = false; + $tmp = null; + + try { + if ( + $conf->get('enable_dkim') && + ($domain = $conf->get('dkim_domain')) && + ($selector = $conf->get('dkim_selector')) && + ($privateKey = $conf->get('dkim_private')) + ) { + $mail->DKIM_domain = $domain; + $mail->DKIM_selector = $selector; + $mail->DKIM_identity = $conf->get('dkim_identity') ?: $domain; + $mail->DKIM_passphrase = $conf->get('dkim_passphrase'); $tmp = tempnam(sys_get_temp_dir(), 'VDM'); - $h = fopen($tmp, 'w'); - fwrite($h, $conf->get('dkim_private')); - fclose($h); - $mail->DKIM_private = $tmp; + if ($tmp === false || file_put_contents($tmp, $privateKey) === false) + { + throw new \RuntimeException('Failed to create temporary DKIM private key file.'); + } + + $mail->DKIM_private = $tmp; + } + + $sent = $mail->Send(); + } finally { + if ($tmp && file_exists($tmp)) + { + @unlink($tmp); } } - $sendmail = $mail->Send(); + $sent = $mail->Send(); - if ($conf->get('enable_dkim') && !empty($conf->get('dkim_domain')) && !empty($conf->get('dkim_selector')) && !empty($conf->get('dkim_private')) && !empty($conf->get('dkim_public'))) + if ($tmp) { @unlink($tmp); } - if (method_exists('###Component###Helper','storeMessage')) + if (method_exists('###Component###Helper', 'storeMessage')) { - // if we have active recipient details - if (isset(self::$active[$recipient])) - { - // store the massage if the method is set - ###Component###Helper::storeMessage($sendmail, self::$active[$recipient], $subject, $body, $textonly, $mode, 'email'); - // clear memory - unset(self::$active[$recipient]); - } - else - { - // store the massage if the method is set - ###Component###Helper::storeMessage($sendmail, $recipient, $subject, $body, $textonly, $mode, 'email'); - } + $data = self::$active[$recipient] ?? $recipient; + ###Component###Helper::storeMessage($sent, $data, $subject, $body, $textonly, $mode, 'email'); + unset(self::$active[$recipient]); } - return $sendmail; + return $sent; } /** - * Set html text (in a row) and subject (as title) to a email table. - * do not use

instead use
- * in your html that you pass to this method - * since it is a table row it does not - * work well with paragraphs + * Build a complete minimal HTML email body with basic headers. + * Use
instead of

for layout consistency in emails. * - * @return string on success + * @param string $html Body HTML content. + * @param string $subject Email subject/title used in the tag. * + * @return string Full HTML email body. + * @since 3.0 */ - public static function setBasicBody($html, $subject) + public static function setBasicBody(string $html, string $subject): string { - $body = []; - $body[] = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"; - $body[] = "<html xmlns=\"http://www.w3.org/1999/xhtml\">"; - $body[] = "<head>"; - $body[] = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"; - $body[] = "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>"; - $body[] = "<title>" . $subject . ""; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = $html; - $body[] = ""; - $body[] = ""; - - return implode("\n", $body); + return implode("\n", [ + '', + '', + '', + '', + '', + '' . htmlspecialchars($subject) . '', + '', + '', + '', + '', + $html, + '', + '' + ]); } /** - * Set html text (in a row) and subject (as title) to a email table. - * do not use

instead use
- * in your html that you pass to this method - * since it is a table row it does not - * work well with paragraphs + * Build a styled HTML email with outer table formatting for wide layout support. + * Suitable for rich content emails that need outer table structure. * - * @return string on success + * @param string $html Inner body HTML content. + * @param string $subject Email subject/title used in the tag. * + * @return string Complete HTML email content. + * @since 3.0 */ - public static function setTableBody($html, $subject) + public static function setTableBody(string $html, string $subject): string { - $body = []; - $body[] = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"; - $body[] = "<html xmlns=\"http://www.w3.org/1999/xhtml\">"; - $body[] = "<head>"; - $body[] = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"; - $body[] = "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>"; - $body[] = "<title>" . $subject . ""; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = "\n"; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = "
"; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = "
"; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = "
"; - $body[] = $html; - $body[] = "
"; - $body[] = ""; - $body[] = "
"; - $body[] = ""; - $body[] = "
"; - $body[] = ""; - $body[] = ""; - $body[] = ""; - - return implode("\n", $body); + return implode("\n", [ + '', + '', + '', + '', + '', + '' . htmlspecialchars($subject) . '', + '', + '', + '', + '', + '', + '
', + '', + '
', + '', + '
', + $html, + '
', + '
', + '
', + '', + '' + ]); } } diff --git a/admin/compiler/joomla_4/SITE_ADMIN_VIEW_HTML.php b/admin/compiler/joomla_4/SITE_ADMIN_VIEW_HTML.php index 327e9f811..f070cf191 100644 --- a/admin/compiler/joomla_4/SITE_ADMIN_VIEW_HTML.php +++ b/admin/compiler/joomla_4/SITE_ADMIN_VIEW_HTML.php @@ -138,18 +138,18 @@ class HtmlView extends BaseHtmlView if ($this->refid && $this->ref) { // return to the item that referred to this item - $this->referral = '&ref=' . (string)$this->ref . '&refid=' . (int)$this->refid; + $this->referral = '&ref=' . (string) $this->ref . '&refid=' . (int) $this->refid; } elseif($this->ref) { // return to the list view that referred to this item - $this->referral = '&ref=' . (string)$this->ref; + $this->referral = '&ref=' . (string) $this->ref; } // check return value if (!is_null($return)) { // add the return value - $this->referral .= '&return=' . (string)$return; + $this->referral .= '&return=' . (string) $return; }###LINKEDVIEWITEMS### // Set the toolbar @@ -178,8 +178,8 @@ class HtmlView extends BaseHtmlView { ###ADDTOOLBAR### - // now initiate the toolbar - $this->toolbar ??= Toolbar::getInstance(); + // add the toolbar if it's not already loaded + $this->toolbar ??= Joomla___39403062_84fb_46e0_bac4_0023f766e827___Power::getContainer()->get(Joomla___5d2ae99b_1ea1_44f0_9b59_f1aa7eab9e2e___Power::class)->createToolbar('toolbar'); } /** diff --git a/admin/layouts/repeatablejcbjfive.php b/admin/layouts/repeatablejcbjfive.php index 84b45abec..5f6aaa709 100644 --- a/admin/layouts/repeatablejcbjfive.php +++ b/admin/layouts/repeatablejcbjfive.php @@ -28,7 +28,7 @@ extract($displayData); * Layout variables * ----------------- * @var Form $tmpl The Empty form for template - * @var array $forms Array of JForm instances for render the rows + * @var array $forms Array of Form instances for render the rows * @var bool $multiple The multiple state for the form field * @var int $min Count of minimum repeating in multiple mode * @var int $max Count of maximum repeating in multiple mode diff --git a/admin/sql/install.mysql.utf8.sql b/admin/sql/install.mysql.utf8.sql index d15207c29..c7ea6a717 100644 --- a/admin/sql/install.mysql.utf8.sql +++ b/admin/sql/install.mysql.utf8.sql @@ -83,7 +83,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_component` ( `php_site_event` MEDIUMTEXT NULL, `preferred_joomla_version` INT(11) NOT NULL DEFAULT 3, `readme` TEXT NULL, - `remove_line_breaks` TINYINT(1) NOT NULL DEFAULT 1, + `remove_line_breaks` TINYINT(1) NULL DEFAULT 1, `sales_server` INT(11) NOT NULL DEFAULT 0, `short_description` VARCHAR(255) NULL DEFAULT '', `sql` MEDIUMTEXT NULL, @@ -1245,7 +1245,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_language_translation` ( `modules` TEXT NULL, `plugins` TEXT NULL, `source` MEDIUMTEXT NULL, - `translation` TEXT NULL, + `translation` MEDIUMTEXT NULL, `params` TEXT NULL, `published` TINYINT(3) NULL DEFAULT 1, `created_by` INT unsigned NULL, @@ -2153,7 +2153,7 @@ INSERT INTO `#__componentbuilder_joomla_power` (`id`, `description`, `guid`, `se INSERT INTO `#__componentbuilder_power` (`id`, `guid`, `system_name`, `name`, `type`, `description`, `add_licensing_template`, `licensing_template`, `power_version`, `extends`, `extends_custom`, `extendsinterfaces_custom`, `extendsinterfaces`, `implements`, `implements_custom`, `namespace`, `add_head`, `property_selection`, `method_selection`, `head`, `use_selection`, `main_class_code`, `load_selection`, `composer`, `params`, `published`, `created`, `version`, `hits`, `access`) VALUES (4, 'c4169332-3914-400e-b861-972b2d465963', 'JCB.Spreadsheet.Importer', 'Importer', 'final class', 'Spreadsheet Importer Class\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\[[[ComponentNamespace]]].Spreadsheet.Importer', 0, '{}', '{}', '', '{\"use_selection0\":{\"use\":\"61d1146f-2c2e-4e42-8492-d076f945cf35\",\"as\":\"FileReader\"},\"use_selection1\":{\"use\":\"9ffc54fa-a71e-412f-bc8b-064fc3b69167\",\"as\":\"RowDataProcessor\"}}', 'CS8qKg0KCSAqIFRoZSBGaWxlUmVhZGVyIENsYXNzLg0KCSAqDQoJICogQHZhciAgIEZpbGVSZWFkZXINCgkgKiBAc2luY2UgMy4wLjgNCgkgKi8NCglwcm90ZWN0ZWQgRmlsZVJlYWRlciAkZmlsZXJlYWRlcjsNCg0KCS8qKg0KCSAqIENvbnN0cnVjdG9yLg0KCSAqDQoJICogQHBhcmFtIEZpbGVSZWFkZXIgICAkZmlsZXJlYWRlciAgIFRoZSBGaWxlUmVhZGVyIENsYXNzLg0KCSAqDQoJICogQHNpbmNlIDMuMC44DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEZpbGVSZWFkZXIgJGZpbGVyZWFkZXIpDQoJew0KCQkkdGhpcy0+ZmlsZXJlYWRlciA9ICRmaWxlcmVhZGVyOw0KCX0NCg0KCS8qKg0KCSAqIFN0cmVhbSByb3dzIGZyb20gYSBDU1Ygb3IgRXhjZWwgZmlsZSBvbmUgYnkgb25lIHVzaW5nIHlpZWxkLg0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAkZmlsZVBhdGggICAgVGhlIHBhdGggdG8gdGhlIGZpbGUuDQoJICogQHBhcmFtIGludCAgICAgICAgICAgICAgICAkc3RhcnRSb3cgICAgVGhlIHN0YXJ0aW5nIHJvdyBpbmRleC4NCgkgKiBAcGFyYW0gaW50ICAgICAgICAgICAgICAgICRjaHVua1NpemUgICBUaGUgbnVtYmVyIG9mIHJvd3MgdG8gcmVhZCBwZXIgY2h1bmsuDQoJICogQHBhcmFtIFJvd0RhdGFQcm9jZXNzb3IgICAkcHJvY2Vzc29yICAgVGhlIHByb2Nlc3NvciB1c2VkIHRvIHRyYW5zZm9ybSB0aGUgcm93IGRhdGEgaW50byB0aGUgZGVzaXJlZCBmb3JtYXQuDQoJICoNCgkgKiBAcmV0dXJuIFxHZW5lcmF0b3IgICAgQSBnZW5lcmF0b3IgdGhhdCB5aWVsZHMgZWFjaCByb3cgYXMgYW4gYXJyYXkuDQoJICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0Lg0KCSAqIEB0aHJvd3MgXE91dE9mUmFuZ2VFeGNlcHRpb24gSWYgdGhlIHN0YXJ0IHJvdyBpcyBiZXlvbmQgdGhlIGhpZ2hlc3Qgcm93LCBubyByb3dzIGNhbiBiZSBwcm9jZXNzZWQuDQoJICogQHRocm93cyBSZWFkZXJFeGNlcHRpb24gSWYgdGhlcmUgaXMgYW4gZXJyb3IgaWRlbnRpZnlpbmcgb3IgcmVhZGluZyB0aGUgZmlsZS4NCgkgKiBAdGhyb3dzIFNwcmVhZHNoZWV0RXhjZXB0aW9uIElmIHRoZXJlIGlzIGFuIGVycm9yIHdvcmtpbmcgd2l0aCB0aGUgc3ByZWFkc2hlZXQuDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHJlYWQoc3RyaW5nICRmaWxlUGF0aCwgaW50ICRzdGFydFJvdywgaW50ICRjaHVua1NpemUsIFJvd0RhdGFQcm9jZXNzb3IgJHByb2Nlc3Nvcik6IFxHZW5lcmF0b3INCgl7DQoJCWZvcmVhY2ggKCR0aGlzLT5maWxlcmVhZGVyLT5yZWFkKCRmaWxlUGF0aCwgJHN0YXJ0Um93LCAkY2h1bmtTaXplKSBhcyAkcm93KQ0KCQl7DQoJCQl5aWVsZCAkcHJvY2Vzc29yLT5wcm9jZXNzKCRyb3cpOw0KCQl9DQoJfQ==', '{}', '{}', '', 1, '2021-11-13 17:52:23', 26, 0, 1), (11, '4b225c51-d293-48e4-b3f6-5136cf5c3f18', 'Utilities Json Helper', 'JsonHelper', 'abstract class', 'The json checker\r\n\r\n@since 3.0.9', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICAzcmQgU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', '', '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Utilities.JsonHelper', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIENoZWNrIGlmIHlvdSBoYXZlIGEganNvbiBzdHJpbmcNCgkgKg0KCSAqIEBpbnB1dCAgICBzdHJpbmcgICRzdHJpbmcgIFRoZSBqc29uIHN0cmluZyB0byBjaGVjaw0KCSAqDQoJICogQHJldHVybnMgYm9vbCB0cnVlIG9uIHN1Y2Nlc3MNCgkgKiANCgkgKiBAc2luY2UgIDMuMC45DQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVjaygkc3RyaW5nKTogYm9vbA0KCXsNCgkJaWYgKFN0cmluZ0hlbHBlcjo6Y2hlY2soJHN0cmluZykpDQoJCXsNCgkJCWpzb25fZGVjb2RlKChzdHJpbmcpICRzdHJpbmcpOw0KCQkJcmV0dXJuIChqc29uX2xhc3RfZXJyb3IoKSA9PT0gSlNPTl9FUlJPUl9OT05FKTsNCgkJfQ0KDQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBDb252ZXJ0IGEganNvbiBvYmplY3QgdG8gYSBzdHJpbmcNCgkgKg0KCSAqIEBpbnB1dCAgICBzdHJpbmcgICR2YWx1ZSAgVGhlIGpzb24gc3RyaW5nIHRvIGNvbnZlcnQNCgkgKg0KCSAqIEByZXR1cm5zIGEgc3RyaW5nDQoJICogDQoJICogQHNpbmNlICAzLjAuOQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RyaW5nKCR2YWx1ZSwgJHNlcGFyYXRvciA9ICIsICIsICR0YWJsZSA9IG51bGwsICRpZCA9ICdpZCcsICRuYW1lID0gJ25hbWUnKQ0KCXsNCgkJLy8gZG8gc29tZSB0YWJsZSBmb290IHdvcmsNCgkJJGV4dGVybmFsID0gZmFsc2U7DQoJCWlmIChpc19zdHJpbmcoJHRhYmxlKSAmJiBzdHJwb3MoKHN0cmluZykgJHRhYmxlLCAnI19fJykgIT09IGZhbHNlKQ0KCQl7DQoJCQkkZXh0ZXJuYWwgPSB0cnVlOw0KCQkJJHRhYmxlID0gc3RyX3JlcGxhY2UoJyNfXycsICcnLCAoc3RyaW5nKSAkdGFibGUpOw0KCQl9DQoNCgkJLy8gY2hlY2sgaWYgc3RyaW5nIGlzIEpTT04NCgkJJHJlc3VsdCA9IGpzb25fZGVjb2RlKChzdHJpbmcpICR2YWx1ZSwgdHJ1ZSk7DQoJCWlmIChqc29uX2xhc3RfZXJyb3IoKSA9PT0gSlNPTl9FUlJPUl9OT05FKQ0KCQl7DQoJCQkvLyBpcyBKU09ODQoJCQlpZiAoQXJyYXlIZWxwZXI6OmNoZWNrKCRyZXN1bHQpKQ0KCQkJew0KCQkJCWlmIChTdHJpbmdIZWxwZXI6OmNoZWNrKCR0YWJsZSkpDQoJCQkJew0KCQkJCQkkbmFtZXMgPSBbXTsNCgkJCQkJZm9yZWFjaCAoJHJlc3VsdCBhcyAkdmFsKQ0KCQkJCQl7DQoJCQkJCQlpZiAoJGV4dGVybmFsKQ0KCQkJCQkJew0KCQkJCQkJCWlmICgkX25hbWUgPSBHZXRIZWxwZXI6OnZhcihudWxsLCAkdmFsLCAkaWQsICRuYW1lLCAnPScsICR0YWJsZSkpDQoJCQkJCQkJew0KCQkJCQkJCQkkbmFtZXNbXSA9ICRfbmFtZTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJaWYgKCRfbmFtZSA9IEdldEhlbHBlcjo6dmFyKCR0YWJsZSwgJHZhbCwgJGlkLCAkbmFtZSkpDQoJCQkJCQkJew0KCQkJCQkJCQkkbmFtZXNbXSA9ICRfbmFtZTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkbmFtZXMpKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gKHN0cmluZykgaW1wbG9kZSgkc2VwYXJhdG9yLCAkbmFtZXMpOw0KCQkJCQl9CQ0KCQkJCX0NCgkJCQlyZXR1cm4gKHN0cmluZykgaW1wbG9kZSgkc2VwYXJhdG9yLCAkcmVzdWx0KTsNCgkJCX0NCgkJCXJldHVybiAoc3RyaW5nKSBqc29uX2RlY29kZSgoc3RyaW5nKSAkdmFsdWUpOw0KCQl9DQoJCXJldHVybiAkdmFsdWU7DQoJfQ0K', '{\"load_selection0\":{\"load\":\"1f28cb53-60d9-4db1-b517-3c7dc6b429ef\"},\"load_selection1\":{\"load\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\"},\"load_selection2\":{\"load\":\"db87c339-5bb6-4291-a7ef-2c48ea1b06bc\"}}', '\"\"', '{\"source\":{\"guid\":\"1a1b6f3d-f16c-431a-b270-7a8a80cc7f56\"}}', 1, '2022-03-08 21:03:54', 27, 0, 1), -(12, '1f28cb53-60d9-4db1-b517-3c7dc6b429ef', 'Utilities String Helper', 'StringHelper', 'abstract class', 'Some string tricks\r\n\r\n@since 3.0.9', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICAzcmQgU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Utilities.StringHelper', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcRmlsdGVyXElucHV0RmlsdGVyOw0KdXNlIEpvb21sYVxDTVNcTGFuZ3VhZ2VcTGFuZ3VhZ2VGYWN0b3J5SW50ZXJmYWNlOw0KdXNlIEpvb21sYVxDTVNcTGFuZ3VhZ2VcTGFuZ3VhZ2VGYWN0b3J5Ow==', '{\"use_selection0\":{\"use\":\"640b5352-fb09-425f-a26e-cd44eda03f15\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIFRoZSBNYWluIEFjdGl2ZSBMYW5ndWFnZQ0KCSAqIA0KCSAqIEB2YXIgICAgc3RyaW5nDQoJICogQHNpbmNlICAzLjAuOQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgJGxhbmdUYWc7DQoNCgkvKioNCgkgKiBWYWxpZGF0ZSB0aGF0IGlucHV0IGlzIGEgbm9uLWVtcHR5LCBub24td2hpdGVzcGFjZS1vbmx5IHN0cmluZy4NCgkgKg0KCSAqIEBwYXJhbSBtaXhlZCAkaW5wdXQgVGhlIGlucHV0IHZhbHVlIHRvIHZhbGlkYXRlLg0KCSAqDQoJICogQHJldHVybnMgYm9vbCAgVHJ1ZSBpZiBpbnB1dCBpcyBhIG5vbi1lbXB0eSwgbm9uLXdoaXRlc3BhY2Utb25seSBzdHJpbmcsIG90aGVyd2lzZSBmYWxzZS4NCgkgKiBAc2luY2UgIDMuMC45DQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVjaygkaW5wdXQpOiBib29sDQoJew0KCQlyZXR1cm4gaXNfc3RyaW5nKCRpbnB1dCkgJiYgdHJpbSgkaW5wdXQpICE9PSAnJzsNCgl9DQoNCgkvKioNCgkgKiBTaG9ydGVucyBhIHN0cmluZyB0byBhIHNwZWNpZmllZCBsZW5ndGgsIG9wdGlvbmFsbHkgYWRkaW5nIGEgdG9vbHRpcCB3aXRoIHRoZSBmdWxsIHRleHQuDQoJICoNCgkgKiBUaGlzIG1ldGhvZCBzYWZlbHkgc2hvcnRlbnMgdGhlIGlucHV0IHN0cmluZyB3aXRob3V0IGN1dHRpbmcgd29yZHMgYWJydXB0bHkuIElmIHRoZSBzdHJpbmcNCgkgKiBleGNlZWRzIHRoZSBzcGVjaWZpZWQgbGVuZ3RoLCBlbGxpcHNlcyAoLi4uKSBhcmUgYWRkZWQuIE9wdGlvbmFsbHksIGEgdG9vbHRpcCBjb250YWluaW5nIHRoZQ0KCSAqIGxvbmdlciBvcmlnaW5hbCBzdHJpbmcgY2FuIGJlIGluY2x1ZGVkLg0KCSAqDQoJICogQHBhcmFtIG1peGVkICRzdHJpbmcgICBUaGUgc3RyaW5nIHlvdSB3b3VsZCBsaWtlIHRvIHNob3J0ZW4uDQoJICogQHBhcmFtIGludCAgICRsZW5ndGggICBUaGUgbWF4aW11bSBsZW5ndGggZm9yIHRoZSBzaG9ydGVuZWQgc3RyaW5nLiBEZWZhdWx0IGlzIDQwLg0KCSAqIEBwYXJhbSBib29sICAkYWRkVGlwICAgV2hldGhlciB0byBhZGQgYSB0b29sdGlwIHdpdGggdGhlIG9yaWdpbmFsIGxvbmdlciBzdHJpbmcuIERlZmF1bHQgdHJ1ZS4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nfG1peGVkICAgVGhlIHNob3J0ZW5lZCBzdHJpbmcsIG9wdGlvbmFsbHkgd2l0aCBhIHRvb2x0aXAuIE9yIG9yaWdpbmFsIHZhbHVlIHBhc3NlZA0KCSAqIEBzaW5jZSAgMy4yLjENCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNob3J0ZW4oJHN0cmluZywgaW50ICRsZW5ndGggPSA0MCwgYm9vbCAkYWRkVGlwID0gdHJ1ZSkNCgl7DQoJCS8vIFZhbGlkYXRlIHN0cmluZyBpbnB1dCBhbmQgcmV0dXJuIG9yaWdpbmFsIGlmIGludmFsaWQgb3Igc2hvcnQgZW5vdWdoLg0KCQlpZiAoIXNlbGY6OmNoZWNrKCRzdHJpbmcpIHx8IG1iX3N0cmxlbigkc3RyaW5nKSA8PSAkbGVuZ3RoKQ0KCQl7DQoJCQlyZXR1cm4gJHN0cmluZzsNCgkJfQ0KDQoJCS8vIFRydW5jYXRlIHN0cmluZyB0byBuZWFyZXN0IHdvcmQgYm91bmRhcnkNCgkJJHNob3J0ZW5lZCA9IG1iX3N1YnN0cigkc3RyaW5nLCAwLCAkbGVuZ3RoKTsNCg0KCQkvLyBGaW5kIHRoZSBsYXN0IHNwYWNlIHRvIGF2b2lkIGN1dHRpbmcgb2ZmIGEgd29yZA0KCQkkbGFzdFNwYWNlID0gbWJfc3RycnBvcygkc2hvcnRlbmVkLCAnICcpOw0KCQlpZiAoJGxhc3RTcGFjZSAhPT0gZmFsc2UpDQoJCXsNCgkJCSRzaG9ydGVuZWQgPSBtYl9zdWJzdHIoJHNob3J0ZW5lZCwgMCwgJGxhc3RTcGFjZSk7DQoJCX0NCg0KCQkvLyBQcmVwYXJlIHRyaW1tZWQgYW5kIHNob3J0ZW5lZCBvdXRwdXQgd2l0aCBlbGxpcHNlcw0KCQkkc2hvcnRlbmVkID0gdHJpbSgkc2hvcnRlbmVkKSAuICcuLi4nOw0KDQoJCS8vIEFkZCB0b29sdGlwIGlmIHJlcXVlc3RlZA0KCQlpZiAoJGFkZFRpcCkNCgkJew0KCQkJLy8gU2FmZWx5IGVzY2FwZSBvdXRwdXQgZm9yIEhUTUwNCgkJCSR0aXRsZSA9IHNlbGY6OnNob3J0ZW4oJHN0cmluZywgNDAwICwgZmFsc2UpOw0KCQkJJGVzY2FwZWRUaXRsZSA9IGh0bWxzcGVjaWFsY2hhcnMoJHRpdGxlLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsNCgkJCSRlc2NhcGVkU2hvcnQgPSBodG1sc3BlY2lhbGNoYXJzKCRzaG9ydGVuZWQsIEVOVF9RVU9URVMsICdVVEYtOCcpOw0KDQoJCQlyZXR1cm4gJzxzcGFuIGNsYXNzPSJoYXNUaXAiIHRpdGxlPSInIC4gJGVzY2FwZWRUaXRsZSAuICciIHN0eWxlPSJjdXJzb3I6aGVscCI+Jw0KCQkJCS4gJGVzY2FwZWRTaG9ydA0KCQkJCS4gJzwvc3Bhbj4nOw0KCQl9DQoNCgkJLy8gUmV0dXJuIHNob3J0ZW5lZCB2ZXJzaW9uIHdpdGhvdXQgdG9vbHRpcA0KCQlyZXR1cm4gJHNob3J0ZW5lZDsNCgl9DQoNCgkvKioNCgkgKiBNYWtlcyBhIHN0cmluZyBzYWZlIGJ5IHNhbml0aXppbmcgYW5kIGZvcm1hdHRpbmcgaXQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgdHlwZS4NCgkgKg0KCSAqIFRoaXMgbWV0aG9kIGNhbiByZW1vdmUgdW53YW50ZWQgY2hhcmFjdGVycywgdHJhbnNsaXRlcmF0ZSB0ZXh0LCByZXBsYWNlIG51bWJlcnMgd2l0aCANCgkgKiB0aGVpciBFbmdsaXNoIGVxdWl2YWxlbnRzLCBhbmQgYXBwbHkgZGlmZmVyZW50IGNhc2UgZm9ybWF0dGluZyBzdHlsZXMuDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICAkc3RyaW5nICAgICAgICAgICAgVGhlIHN0cmluZyB0byBzYW5pdGl6ZSBhbmQgZm9ybWF0Lg0KCSAqIEBwYXJhbSBzdHJpbmcgICR0eXBlICAgICAgICAgICAgICBUaGUgZm9ybWF0dGluZyB0eXBlIHRvIGFwcGx5LiBTdXBwb3J0ZWQgdmFsdWVzOg0KCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICdmaWxlbmFtZScgIDogUmVtb3ZlcyBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIGV4dHJhIHNwYWNlcy4NCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAnTCcgICAgICAgICA6IENvbnZlcnRzIHRvIGxvd2VyY2FzZSB3aXRoIHVuZGVyc2NvcmVzIHJlcGxhY2luZyBzcGFjZXMuDQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gJ3N0cnRvbG93ZXInOiBBbGlhcyBmb3IgJ0wnLg0KCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICdXJyAgICAgICAgIDogQ2FwaXRhbGl6ZXMgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIHdvcmQuDQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gJ3cnICAgICAgICAgOiBDb252ZXJ0cyB0byBsb3dlcmNhc2UgKHNwYWNlcyByZW1haW4pLg0KCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICd3b3JkJyAgICAgIDogQWxpYXMgZm9yICd3Jy4NCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAnV3cnICAgICAgICA6IENhcGl0YWxpemVzIG9ubHkgdGhlIGZpcnN0IHdvcmQuDQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gJ1dvcmQnICAgICAgOiBBbGlhcyBmb3IgJ1d3Jy4NCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAnV1cnICAgICAgICA6IENvbnZlcnRzIHRoZSBlbnRpcmUgc3RyaW5nIHRvIHVwcGVyY2FzZS4NCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAnV09SRCcgICAgICA6IEFsaWFzIGZvciAnV1cnLg0KCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICdVJyAgICAgICAgIDogQ29udmVydHMgdG8gdXBwZXJjYXNlIHdpdGggdW5kZXJzY29yZXMgcmVwbGFjaW5nIHNwYWNlcy4NCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAnc3RydG91cHBlcic6IEFsaWFzIGZvciAnVScuDQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gJ0YnICAgICAgICAgOiBDYXBpdGFsaXplcyBvbmx5IHRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIGVudGlyZSBzdHJpbmcuDQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gJ3VjZmlyc3QnICAgOiBBbGlhcyBmb3IgJ0YnLg0KCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICdjQScgICAgICAgIDogQ29udmVydHMgdG8gY2FtZWxDYXNlLg0KCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICdjQW1lbCcgICAgIDogQWxpYXMgZm9yICdjQScuDQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gJ2NhbWVsY2FzZScgOiBBbGlhcyBmb3IgJ2NBJy4NCgkgKiBAcGFyYW0gc3RyaW5nICAkc3BhY2VyICAgICAgICAgICAgVGhlIGNoYXJhY3RlciB0byByZXBsYWNlIHNwYWNlcyB3aXRoIChkZWZhdWx0OiAnXycpLg0KCSAqIEBwYXJhbSBib29sICAgICRyZXBsYWNlTnVtYmVycyAgICBXaGV0aGVyIHRvIHJlcGxhY2UgbnVtYmVycyB3aXRoIHRoZWlyIEVuZ2xpc2ggdGV4dCBlcXVpdmFsZW50cyAoZGVmYXVsdDogdHJ1ZSkuDQoJICogQHBhcmFtIGJvb2wgICAgJGtlZXBPbmx5Q2hhcmFjdGVycyBXaGV0aGVyIHRvIHJlbW92ZSBhbGwgbm9uLWFscGhhYmV0aWMgY2hhcmFjdGVycyAoZGVmYXVsdDogdHJ1ZSkuDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZyBUaGUgc2FuaXRpemVkIGFuZCBmb3JtYXR0ZWQgc3RyaW5nLg0KCSAqIEBzaW5jZSAgMy4wLjkNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNhZmUoJHN0cmluZywgc3RyaW5nICR0eXBlID0gJ0wnLCBzdHJpbmcgJHNwYWNlciA9ICdfJywgYm9vbCAkcmVwbGFjZU51bWJlcnMgPSB0cnVlLCBib29sICRrZWVwT25seUNoYXJhY3RlcnMgPSB0cnVlKTogc3RyaW5nDQoJew0KCQlpZiAoJHJlcGxhY2VOdW1iZXJzKQ0KCQl7DQoJCQkvLyByZW1vdmUgYWxsIG51bWJlcnMgYW5kIHJlcGxhY2Ugd2l0aCBFbmdsaXNoIHRleHQgdmVyc2lvbiAod29ya3Mgd2VsbCBvbmx5IHVwIHRvIG1pbGxpb25zKQ0KCQkJJHN0cmluZyA9IHNlbGY6Om51bWJlcnMoJHN0cmluZyk7DQoJCX0NCg0KCQkvLyBPbmx5IGNvbnRpbnVlIGlmIHdlIGhhdmUgYSBzdHJpbmcNCgkJaWYgKCFzZWxmOjpjaGVjaygkc3RyaW5nKSkNCgkJew0KCQkJLy8gbm90IGEgc3RyaW5nDQoJCQlyZXR1cm4gJyc7DQoJCX0NCg0KCQkvLyBjcmVhdGUgZmlsZSBuYW1lIHdpdGhvdXQgdGhlIGV4dGVuc2lvbiB0aGF0IGlzIHNhZmUNCgkJaWYgKCR0eXBlID09PSAnZmlsZW5hbWUnKQ0KCQl7DQoJCQkvLyBtYWtlIHN1cmUgVkRNIGlzIG5vdCBpbiB0aGUgc3RyaW5nDQoJCQkkc3RyaW5nID0gc3RyX3JlcGxhY2UoJ1ZETScsICd2RG0nLCAoc3RyaW5nKSAkc3RyaW5nKTsNCgkJCS8vIFJlbW92ZSBhbnl0aGluZyB3aGljaCBpc24ndCBhIHdvcmQsIHdoaXRlc3BhY2UsIG51bWJlcg0KCQkJLy8gb3IgYW55IG9mIHRoZSBmb2xsb3dpbmcgY2FyYWN0ZXJzIC1fKCkNCgkJCS8vIElmIHlvdSBkb24ndCBuZWVkIHRvIGhhbmRsZSBtdWx0aS1ieXRlIGNoYXJhY3RlcnMNCgkJCS8vIHlvdSBjYW4gdXNlIHByZWdfcmVwbGFjZSByYXRoZXIgdGhhbiBtYl9lcmVnX3JlcGxhY2UNCgkJCS8vIFRoYW5rcyBAxYF1a2FzeiBSeXNpYWshDQoJCQkvLyAkc3RyaW5nID0gbWJfZXJlZ19yZXBsYWNlKCIoW15cd1xzXGRcLV9cKFwpXSkiLCAnJywgJHN0cmluZyk7DQoJCQkkc3RyaW5nID0gcHJlZ19yZXBsYWNlKCIoW15cd1xzXGRcLV9cKFwpXSkiLCAnJywgJHN0cmluZyk7DQoNCgkJCS8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIwMjE3MjkvMTQyOTY3Nw0KCQkJcmV0dXJuIHByZWdfcmVwbGFjZSgnL1xzKy8nLCAnICcsIChzdHJpbmcpICRzdHJpbmcpOw0KCQl9DQoJCS8vIHJlbW92ZSBhbGwgb3RoZXIgY2hhcmFjdGVycw0KCQkkc3RyaW5nID0gdHJpbSgoc3RyaW5nKSAkc3RyaW5nKTsNCgkJJHN0cmluZyA9IHByZWdfcmVwbGFjZSgnLycuJHNwYWNlci4nKy8nLCAnICcsICRzdHJpbmcpOw0KCQkkc3RyaW5nID0gcHJlZ19yZXBsYWNlKCcvXHMrLycsICcgJywgJHN0cmluZyk7DQoJCS8vIFRyYW5zbGl0ZXJhdGUgc3RyaW5nDQoJCSRzdHJpbmcgPSBzZWxmOjp0cmFuc2xpdGVyYXRlKCRzdHJpbmcpOw0KCQkvLyByZW1vdmUgYWxsIGFuZCBrZWVwIG9ubHkgY2hhcmFjdGVycw0KCQlpZiAoJGtlZXBPbmx5Q2hhcmFjdGVycykNCgkJew0KCQkJJHN0cmluZyA9IHByZWdfcmVwbGFjZSgiL1teQS1aYS16IF0vIiwgJycsIChzdHJpbmcpICRzdHJpbmcpOw0KCQl9DQoJCS8vIGtlZXAgYm90aCBudW1iZXJzIGFuZCBjaGFyYWN0ZXJzDQoJCWVsc2UNCgkJew0KCQkJJHN0cmluZyA9IHByZWdfcmVwbGFjZSgiL1teQS1aYS16MC05IF0vIiwgJycsIChzdHJpbmcpICRzdHJpbmcpOw0KCQl9DQoJCS8vIHNlbGVjdCBmaW5hbCBhZGFwdGF0aW9ucw0KCQlpZiAoJHR5cGUgPT09ICdMJyB8fCAkdHlwZSA9PT0gJ3N0cnRvbG93ZXInKQ0KCQl7DQoJCQkvLyByZXBsYWNlIHdoaXRlIHNwYWNlIHdpdGggdW5kZXJzY29yZQ0KCQkJJHN0cmluZyA9IHByZWdfcmVwbGFjZSgnL1xzKy8nLCAoc3RyaW5nKSAkc3BhY2VyLCAoc3RyaW5nKSAkc3RyaW5nKTsNCgkJCS8vIGRlZmF1bHQgaXMgdG8gcmV0dXJuIGxvd2VyDQoJCQlyZXR1cm4gc3RydG9sb3dlcigkc3RyaW5nKTsNCgkJfQ0KCQllbHNlaWYgKCR0eXBlID09PSAnVycpDQoJCXsNCgkJCS8vIHJldHVybiBhIHN0cmluZyB3aXRoIGFsbCBmaXJzdCBsZXR0ZXIgb2YgZWFjaCB3b3JkIHVwcGVyY2FzZShubyB1bmRlcnNjb3JlKQ0KCQkJcmV0dXJuIHVjd29yZHMoc3RydG9sb3dlcigkc3RyaW5nKSk7DQoJCX0NCgkJZWxzZWlmICgkdHlwZSA9PT0gJ3cnIHx8ICR0eXBlID09PSAnd29yZCcpDQoJCXsNCgkJCS8vIHJldHVybiBhIHN0cmluZyB3aXRoIGFsbCBsb3dlcmNhc2Uobm8gdW5kZXJzY29yZSkNCgkJCXJldHVybiBzdHJ0b2xvd2VyKCRzdHJpbmcpOw0KCQl9DQoJCWVsc2VpZiAoJHR5cGUgPT09ICdXdycgfHwgJHR5cGUgPT09ICdXb3JkJykNCgkJew0KCQkJLy8gcmV0dXJuIGEgc3RyaW5nIHdpdGggZmlyc3QgbGV0dGVyIG9mIHRoZSBmaXJzdCB3b3JkIHVwcGVyY2FzZSBhbmQgYWxsIHRoZSByZXN0IGxvd2VyY2FzZShubyB1bmRlcnNjb3JlKQ0KCQkJcmV0dXJuIHVjZmlyc3Qoc3RydG9sb3dlcigkc3RyaW5nKSk7DQoJCX0NCgkJZWxzZWlmICgkdHlwZSA9PT0gJ1dXJyB8fCAkdHlwZSA9PT0gJ1dPUkQnKQ0KCQl7DQoJCQkvLyByZXR1cm4gYSBzdHJpbmcgd2l0aCBhbGwgdGhlIHVwcGVyY2FzZShubyB1bmRlcnNjb3JlKQ0KCQkJcmV0dXJuIHN0cnRvdXBwZXIoJHN0cmluZyk7DQoJCX0NCgkJZWxzZWlmICgkdHlwZSA9PT0gJ1UnIHx8ICR0eXBlID09PSAnc3RydG91cHBlcicpDQoJCXsNCgkJCQkvLyByZXBsYWNlIHdoaXRlIHNwYWNlIHdpdGggdW5kZXJzY29yZQ0KCQkJCSRzdHJpbmcgPSBwcmVnX3JlcGxhY2UoJy9ccysvJywgKHN0cmluZykgJHNwYWNlciwgJHN0cmluZyk7DQoJCQkJLy8gcmV0dXJuIGFsbCB1cHBlcg0KCQkJCXJldHVybiBzdHJ0b3VwcGVyKCRzdHJpbmcpOw0KCQl9DQoJCWVsc2VpZiAoJHR5cGUgPT09ICdGJyB8fCAkdHlwZSA9PT0gJ3VjZmlyc3QnKQ0KCQl7DQoJCQkJLy8gcmVwbGFjZSB3aGl0ZSBzcGFjZSB3aXRoIHVuZGVyc2NvcmUNCgkJCQkkc3RyaW5nID0gcHJlZ19yZXBsYWNlKCcvXHMrLycsIChzdHJpbmcpICRzcGFjZXIsICRzdHJpbmcpOw0KCQkJCS8vIHJldHVybiB3aXRoIGZpcnN0IGNoYXJhY3RlciB0byB1cHBlcg0KCQkJCXJldHVybiB1Y2ZpcnN0KHN0cnRvbG93ZXIoJHN0cmluZykpOw0KCQl9DQoJCWVsc2VpZiAoJHR5cGUgPT09ICdjQScgfHwgJHR5cGUgPT09ICdjQW1lbCcgfHwgJHR5cGUgPT09ICdjYW1lbGNhc2UnKQ0KCQl7DQoJCQkvLyBjb252ZXJ0IGFsbCB3b3JkcyB0byBmaXJzdCBsZXR0ZXIgdXBwZXJjYXNlDQoJCQkkc3RyaW5nID0gdWN3b3JkcyhzdHJ0b2xvd2VyKCRzdHJpbmcpKTsNCgkJCS8vIHJlbW92ZSB3aGl0ZSBzcGFjZQ0KCQkJJHN0cmluZyA9IHByZWdfcmVwbGFjZSgnL1xzKy8nLCAnJywgJHN0cmluZyk7DQoJCQkvLyBub3cgcmV0dXJuIGZpcnN0IGxldHRlciBsb3dlcmNhc2UNCgkJCXJldHVybiBsY2ZpcnN0KCRzdHJpbmcpOw0KCQl9DQoJCS8vIHJldHVybiBzdHJpbmcNCgkJcmV0dXJuICRzdHJpbmc7DQoJfQ0KDQoJLyoqDQoJICogQ29udmVydCBub25lIEVuZ2xpc2ggc3RyaW5ncyB0byBjb2RlIHVzYWJsZSBzdHJpbmcNCgkgKg0KCSAqIEBpbnB1dCAgJHN0cmluZyAgYW4gc3RyaW5nDQoJICoNCgkgKiBAcmV0dXJucyBzdHJpbmcNCgkgKiBAc2luY2UgICAzLjAuOQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdHJhbnNsaXRlcmF0ZSgkc3RyaW5nKTogc3RyaW5nDQoJew0KCQkvLyBzZXQgdGFnIG9ubHkgb25jZQ0KCQlpZiAoIXNlbGY6OmNoZWNrKHNlbGY6OiRsYW5nVGFnKSkNCgkJew0KCQkJLy8gZ2V0IGdsb2JhbCB2YWx1ZQ0KCQkJc2VsZjo6JGxhbmdUYWcgPSBIZWxwZXI6OmdldFBhcmFtcygpLT5nZXQoJ2xhbmd1YWdlJywgJ2VuLUdCJyk7DQoJCX0NCg0KCQkvKiogQHZhciAkbGFuZ0ZhY3RvcnkgTGFuZ3VhZ2VGYWN0b3J5ICoqLw0KCQkkbGFuZ0ZhY3RvcnkgPSBGYWN0b3J5OjpnZXRDb250YWluZXIoKS0+Z2V0KExhbmd1YWdlRmFjdG9yeUludGVyZmFjZTo6Y2xhc3MpOw0KCQkkbGFuZyA9ICRsYW5nRmFjdG9yeS0+Y3JlYXRlTGFuZ3VhZ2Uoc2VsZjo6JGxhbmdUYWcpOw0KDQoJCS8vIFRyYW5zbGl0ZXJhdGUgb24gdGhlIGxhbmd1YWdlIHJlcXVlc3RlZA0KCQlyZXR1cm4gJGxhbmctPnRyYW5zbGl0ZXJhdGUoJHN0cmluZyk7DQoJfQ0KDQoJLyoqDQoJICogRW5zdXJlcyBhIHN0cmluZyBpcyBzYWZlIGZvciBIVE1MIG91dHB1dCBieSBlbmNvZGluZyBlbnRpdGllcyBhbmQgYXBwbHlpbmcgYW4gaW5wdXQgZmlsdGVyLg0KCSAqDQoJICogVGhpcyBtZXRob2Qgc2FuaXRpemVzIHRoZSBpbnB1dCBzdHJpbmcsIGNvbnZlcnRpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMgDQoJICogYW5kIGFwcGx5aW5nIEpvb21sYSdzIGBJbnB1dEZpbHRlcmAgdG8gcmVtb3ZlIHBvdGVudGlhbGx5IHVuc2FmZSBIVE1MLg0KCSAqIE9wdGlvbmFsbHksIGl0IGNhbiBhbHNvIHNob3J0ZW4gdGhlIHN0cmluZyB3aGlsZSBwcmVzZXJ2aW5nIHdvcmQgaW50ZWdyaXR5Lg0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAgJHZhciAgICAgIFRoZSBpbnB1dCBzdHJpbmcgY29udGFpbmluZyBIVE1MIGNvbnRlbnQuDQoJICogQHBhcmFtIHN0cmluZyAgJGNoYXJzZXQgIFRoZSBjaGFyYWN0ZXIgc2V0IHRvIHVzZSBmb3IgZW5jb2RpbmcgKGRlZmF1bHQ6ICdVVEYtOCcpLg0KCSAqIEBwYXJhbSBib29sICAgICRzaG9ydGVuICBXaGV0aGVyIHRvIHNob3J0ZW4gdGhlIHN0cmluZyB0byBhIHNwZWNpZmllZCBsZW5ndGggKGRlZmF1bHQ6IGZhbHNlKS4NCgkgKiBAcGFyYW0gaW50ICAgICAkbGVuZ3RoICAgVGhlIG1heGltdW0gbGVuZ3RoIGZvciBzaG9ydGVuaW5nLCBpZiBlbmFibGVkIChkZWZhdWx0OiA0MCkuDQoJICogQHBhcmFtIGJvb2wgICAgJGFkZFRpcCAgIFdoZXRoZXIgdG8gYXBwZW5kIGEgdG9vbHRpcCAoZWxsaXBzaXMpIHdoZW4gc2hvcnRlbmluZyAoZGVmYXVsdDogdHJ1ZSkuDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZyBUaGUgc2FuaXRpemVkIGFuZCBvcHRpb25hbGx5IHNob3J0ZW5lZCBIVE1MLXNhZmUgc3RyaW5nLg0KCSAqIEBzaW5jZSAzLjAuOQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaHRtbCgkdmFyLCAkY2hhcnNldCA9ICdVVEYtOCcsICRzaG9ydGVuID0gZmFsc2UsICRsZW5ndGggPSA0MCwgJGFkZFRpcCA9IHRydWUpOiBzdHJpbmcNCgl7DQoJCWlmIChzZWxmOjpjaGVjaygkdmFyKSkNCgkJew0KCQkJJGZpbHRlciA9IG5ldyBJbnB1dEZpbHRlcigpOw0KCQkJJHN0cmluZyA9ICRmaWx0ZXItPmNsZWFuKA0KCQkJCWh0bWxfZW50aXR5X2RlY29kZSgNCgkJCQkJaHRtbGVudGl0aWVzKA0KCQkJCQkJKHN0cmluZykgJHZhciwNCgkJCQkJCUVOVF9DT01QQVQsDQoJCQkJCQkkY2hhcnNldA0KCQkJCQkpDQoJCQkJKSwNCgkJCQknSFRNTCcNCgkJCSk7DQoJCQlpZiAoJHNob3J0ZW4pDQoJCQl7DQoJCQkJcmV0dXJuIHNlbGY6OnNob3J0ZW4oJHN0cmluZywgJGxlbmd0aCwgJGFkZFRpcCk7DQoJCQl9DQoJCQlyZXR1cm4gJHN0cmluZzsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCXJldHVybiAnJzsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIENvbnZlcnQgYWxsIGludCBpbiBhIHN0cmluZyB0byBhbiBFbmdsaXNoIHdvcmQgc3RyaW5nDQoJICoNCgkgKiBAaW5wdXQgICAgJHN0cmluZyAgYW4gc3RyaW5nIHdpdGggbnVtYmVycw0KCSAqDQoJICogQHJldHVybnMgIHN0cmluZ3xudWxsDQoJICogQHNpbmNlICAzLjAuOQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbnVtYmVycygkc3RyaW5nKTogP3N0cmluZw0KCXsNCgkJLy8gc2V0IG51bWJlcnMgYXJyYXkNCgkJJG51bWJlcnMgPSBbXTsNCgkJJHNlYXJjaF9yZXBsYWNlPSBbXTsNCg0KCQkvLyBmaXJzdCBnZXQgYWxsIG51bWJlcnMNCgkJcHJlZ19tYXRjaF9hbGwoJyFcZCshJywgKHN0cmluZykgJHN0cmluZywgJG51bWJlcnMpOw0KDQoJCS8vIGNoZWNrIGlmIHdlIGhhdmUgYW55IG51bWJlcnMNCgkJaWYgKGlzc2V0KCRudW1iZXJzWzBdKSAmJiBBcnJheUhlbHBlcjo6Y2hlY2soJG51bWJlcnNbMF0pKQ0KCQl7DQoJCQlmb3JlYWNoICgkbnVtYmVyc1swXSBhcyAkbnVtYmVyKQ0KCQkJew0KCQkJCSRzZWFyY2hfcmVwbGFjZVskbnVtYmVyXSA9IHNlbGY6Om51bWJlcigoaW50KSRudW1iZXIpOw0KCQkJfQ0KDQoJCQkvLyBub3cgcmVwbGFjZSBudW1iZXJzIGluIHN0cmluZw0KCQkJJHN0cmluZyA9IHN0cl9yZXBsYWNlKGFycmF5X2tleXMoJHNlYXJjaF9yZXBsYWNlKSwgYXJyYXlfdmFsdWVzKCRzZWFyY2hfcmVwbGFjZSksIChzdHJpbmcpICRzdHJpbmcpOw0KDQoJCQkvLyBjaGVjayBpZiB3ZSBtaXNzZWQgYW55LCBzdHJhbmdlIGlmIHdlIGRpZC4NCgkJCXJldHVybiBzZWxmOjpudW1iZXJzKCRzdHJpbmcpOw0KCQl9DQoNCgkJLy8gcmV0dXJuIHRoZSBzdHJpbmcgd2l0aCBubyBudW1iZXJzIHJlbWFpbmluZy4NCgkJcmV0dXJuICRzdHJpbmc7DQoJfQ0KDQoJLyoqDQoJICogQ29udmVydCBhbiBpbnRlZ2VyIGludG8gYW4gRW5nbGlzaCB3b3JkIHN0cmluZw0KCSAqIFRoYW5rcyB0byBUb20gTmljaG9sc29uIDxodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3RydmFsLnBocCM0MTk4OD4NCgkgKg0KCSAqIEBpbnB1dCAgICAkeCBhbiBpbnQNCgkgKiANCgkgKiBAcmV0dXJucyAgIHN0cmluZw0KCSAqIEBzaW5jZSAgMy4wLjkNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG51bWJlcigkeCkNCgl7DQoJCSRud29yZHMgPSBbInplcm8iLCAib25lIiwgInR3byIsICJ0aHJlZSIsICJmb3VyIiwgImZpdmUiLCAic2l4IiwgInNldmVuIiwNCgkJCSJlaWdodCIsICJuaW5lIiwgInRlbiIsICJlbGV2ZW4iLCAidHdlbHZlIiwgInRoaXJ0ZWVuIiwNCgkJCSJmb3VydGVlbiIsICJmaWZ0ZWVuIiwgInNpeHRlZW4iLCAic2V2ZW50ZWVuIiwgImVpZ2h0ZWVuIiwNCgkJCSJuaW5ldGVlbiIsICJ0d2VudHkiLCAzMCA9PiAidGhpcnR5IiwgNDAgPT4gImZvcnR5IiwNCgkJCTUwID0+ICJmaWZ0eSIsIDYwID0+ICJzaXh0eSIsIDcwID0+ICJzZXZlbnR5IiwgODAgPT4gImVpZ2h0eSIsDQoJCQk5MCA9PiAibmluZXR5Il07DQoNCgkJaWYoIWlzX251bWVyaWMoJHgpKQ0KCQl7DQoJCQkkdyA9ICR4Ow0KCQl9DQoJCWVsc2VpZihmbW9kKCR4LCAxKSAhPSAwKQ0KCQl7DQoJCQkkdyA9ICR4Ow0KCQl9DQoJCWVsc2UNCgkJew0KCQkJaWYoJHggPCAwKQ0KCQkJew0KCQkJCSR3ID0gJ21pbnVzICc7DQoJCQkJJHggPSAtJHg7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHcgPSAnJzsNCgkJCQkvLyAuLi4gbm93ICR4IGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuDQoJCQl9DQoNCgkJCWlmKCR4IDwgMjEpICAgLy8gMCB0byAyMA0KCQkJew0KCQkJCSR3IC49ICRud29yZHNbJHhdOw0KCQkJfQ0KCQkJZWxzZWlmKCR4IDwgMTAwKSAgLy8gMjEgdG8gOTkNCgkJCXsgDQoJCQkJJHcgLj0gJG53b3Jkc1sxMCAqIGZsb29yKCR4LzEwKV07DQoJCQkJJHIgPSBmbW9kKCR4LCAxMCk7DQoJCQkJaWYoJHIgPiAwKQ0KCQkJCXsNCgkJCQkJJHcgLj0gJyAnIC4gJG53b3Jkc1skcl07DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZWlmKCR4IDwgMTAwMCkgIC8vIDEwMCB0byA5OTkNCgkJCXsNCgkJCQkkdyAuPSAkbndvcmRzW2Zsb29yKCR4LzEwMCldIC4nIGh1bmRyZWQnOw0KCQkJCSRyID0gZm1vZCgkeCwgMTAwKTsNCgkJCQlpZigkciA+IDApDQoJCQkJew0KCQkJCQkkdyAuPSAnIGFuZCAnLiBzZWxmOjpudW1iZXIoJHIpOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2VpZigkeCA8IDEwMDAwMDApICAvLyAxMDAwIHRvIDk5OTk5OQ0KCQkJew0KCQkJCSR3IC49IHNlbGY6Om51bWJlcihmbG9vcigkeC8xMDAwKSkgLicgdGhvdXNhbmQnOw0KCQkJCSRyID0gZm1vZCgkeCwgMTAwMCk7DQoJCQkJaWYoJHIgPiAwKQ0KCQkJCXsNCgkJCQkJJHcgLj0gJyAnOw0KCQkJCQlpZigkciA8IDEwMCkNCgkJCQkJew0KCQkJCQkJJHcgLj0gJ2FuZCAnOw0KCQkJCQl9DQoJCQkJCSR3IC49IHNlbGY6Om51bWJlcigkcik7DQoJCQkJfQ0KCQkJfSANCgkJCWVsc2UgLy8gIG1pbGxpb25zDQoJCQl7DQoJCQkJJHcgLj0gc2VsZjo6bnVtYmVyKGZsb29yKCR4LzEwMDAwMDApKSAuJyBtaWxsaW9uJzsNCgkJCQkkciA9IGZtb2QoJHgsIDEwMDAwMDApOw0KCQkJCWlmKCRyID4gMCkNCgkJCQl7DQoJCQkJCSR3IC49ICcgJzsNCgkJCQkJaWYoJHIgPCAxMDApDQoJCQkJCXsNCgkJCQkJCSR3IC49ICdhbmQgJzsNCgkJCQkJfQ0KCQkJCQkkdyAuPSBzZWxmOjpudW1iZXIoJHIpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJHc7DQoJfQ0KDQoJLyoqDQoJICogUmFuZG9tIEtleQ0KCSAqDQoJICogQGlucHV0ICAgaW50ICAkc2l6ZSAgIFRoZSBzaXplIG9mIHRoZSByYW5kb20gc3RyaW5nDQoJICoNCgkgKiBAcmV0dXJucyBzdHJpbmcNCgkgKiBAc2luY2UgIDMuMC45DQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiByYW5kb20oaW50ICRzaXplKTogc3RyaW5nDQoJew0KCQkkYmFnID0gImFiY2VmZ2hpamtub3BxcnN0dXd4eXpBQkNEREVGR0hJSktMTE1NTk9QUVJTVFVWVldYWVphYmNkZGVmZ2hpamtsbG1tbm9wcXJzdHV2dnd4eXpBQkNFRkdISUpLTk9QUVJTVFVXWFlaIjsNCgkJJGtleSA9IFtdOw0KCQkkYmFnc2l6ZSA9IHN0cmxlbigkYmFnKSAtIDE7DQoNCgkJZm9yICgkaSA9IDA7ICRpIDwgJHNpemU7ICRpKyspDQoJCXsNCgkJCSRnZXQgPSByYW5kKDAsICRiYWdzaXplKTsNCgkJCSRrZXlbXSA9ICRiYWdbJGdldF07DQoJCX0NCg0KCQlyZXR1cm4gaW1wbG9kZSgka2V5KTsNCgl9DQo=', '{\"load_selection0\":{\"load\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\"}}', '{}', '{\"source\":{\"guid\":\"1a1b6f3d-f16c-431a-b270-7a8a80cc7f56\"}}', 1, '2022-03-08 21:35:37', 58, 0, 1), +(12, '1f28cb53-60d9-4db1-b517-3c7dc6b429ef', 'Utilities String Helper', 'StringHelper', 'abstract class', 'Some string tricks\r\n\r\n@since 3.0.9', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICAzcmQgU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Utilities.StringHelper', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcRmlsdGVyXElucHV0RmlsdGVyOw0KdXNlIEpvb21sYVxDTVNcTGFuZ3VhZ2VcTGFuZ3VhZ2VGYWN0b3J5SW50ZXJmYWNlOw0KdXNlIEpvb21sYVxDTVNcTGFuZ3VhZ2VcTGFuZ3VhZ2VGYWN0b3J5Ow==', '{\"use_selection0\":{\"use\":\"640b5352-fb09-425f-a26e-cd44eda03f15\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIFRoZSBNYWluIEFjdGl2ZSBMYW5ndWFnZQ0KCSAqIA0KCSAqIEB2YXIgICAgc3RyaW5nDQoJICogQHNpbmNlICAzLjAuOQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgJGxhbmdUYWc7DQoNCgkvKioNCgkgKiBWYWxpZGF0ZSB0aGF0IGlucHV0IGlzIGEgbm9uLWVtcHR5LCBub24td2hpdGVzcGFjZS1vbmx5IHN0cmluZy4NCgkgKg0KCSAqIEBwYXJhbSBtaXhlZCAkaW5wdXQgVGhlIGlucHV0IHZhbHVlIHRvIHZhbGlkYXRlLg0KCSAqDQoJICogQHJldHVybnMgYm9vbCAgVHJ1ZSBpZiBpbnB1dCBpcyBhIG5vbi1lbXB0eSwgbm9uLXdoaXRlc3BhY2Utb25seSBzdHJpbmcsIG90aGVyd2lzZSBmYWxzZS4NCgkgKiBAc2luY2UgIDMuMC45DQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVjaygkaW5wdXQpOiBib29sDQoJew0KCQlyZXR1cm4gaXNfc3RyaW5nKCRpbnB1dCkgJiYgdHJpbSgkaW5wdXQpICE9PSAnJzsNCgl9DQoNCgkvKioNCgkgKiBTaG9ydGVucyBhIHN0cmluZyB0byBhIHNwZWNpZmllZCBsZW5ndGgsIG9wdGlvbmFsbHkgYWRkaW5nIGEgdG9vbHRpcCB3aXRoIHRoZSBmdWxsIHRleHQuDQoJICoNCgkgKiBUaGlzIG1ldGhvZCBzYWZlbHkgc2hvcnRlbnMgdGhlIGlucHV0IHN0cmluZyB3aXRob3V0IGN1dHRpbmcgd29yZHMgYWJydXB0bHkuIElmIHRoZSBzdHJpbmcNCgkgKiBleGNlZWRzIHRoZSBzcGVjaWZpZWQgbGVuZ3RoLCBlbGxpcHNlcyAoLi4uKSBhcmUgYWRkZWQuIE9wdGlvbmFsbHksIGEgdG9vbHRpcCBjb250YWluaW5nIHRoZQ0KCSAqIGxvbmdlciBvcmlnaW5hbCBzdHJpbmcgY2FuIGJlIGluY2x1ZGVkLg0KCSAqDQoJICogQHBhcmFtIG1peGVkICRzdHJpbmcgICBUaGUgc3RyaW5nIHlvdSB3b3VsZCBsaWtlIHRvIHNob3J0ZW4uDQoJICogQHBhcmFtIGludCAgICRsZW5ndGggICBUaGUgbWF4aW11bSBsZW5ndGggZm9yIHRoZSBzaG9ydGVuZWQgc3RyaW5nLiBEZWZhdWx0IGlzIDQwLg0KCSAqIEBwYXJhbSBib29sICAkYWRkVGlwICAgV2hldGhlciB0byBhZGQgYSB0b29sdGlwIHdpdGggdGhlIG9yaWdpbmFsIGxvbmdlciBzdHJpbmcuIERlZmF1bHQgdHJ1ZS4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nfG1peGVkICAgVGhlIHNob3J0ZW5lZCBzdHJpbmcsIG9wdGlvbmFsbHkgd2l0aCBhIHRvb2x0aXAuIE9yIG9yaWdpbmFsIHZhbHVlIHBhc3NlZA0KCSAqIEBzaW5jZSAgMy4yLjENCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNob3J0ZW4oJHN0cmluZywgaW50ICRsZW5ndGggPSA0MCwgYm9vbCAkYWRkVGlwID0gdHJ1ZSkNCgl7DQoJCS8vIFZhbGlkYXRlIHN0cmluZyBpbnB1dCBhbmQgcmV0dXJuIG9yaWdpbmFsIGlmIGludmFsaWQgb3Igc2hvcnQgZW5vdWdoLg0KCQlpZiAoIXNlbGY6OmNoZWNrKCRzdHJpbmcpIHx8IG1iX3N0cmxlbigkc3RyaW5nKSA8PSAkbGVuZ3RoKQ0KCQl7DQoJCQlyZXR1cm4gJHN0cmluZzsNCgkJfQ0KDQoJCS8vIFRydW5jYXRlIHN0cmluZyB0byBuZWFyZXN0IHdvcmQgYm91bmRhcnkNCgkJJHNob3J0ZW5lZCA9IG1iX3N1YnN0cigkc3RyaW5nLCAwLCAkbGVuZ3RoKTsNCg0KCQkvLyBGaW5kIHRoZSBsYXN0IHNwYWNlIHRvIGF2b2lkIGN1dHRpbmcgb2ZmIGEgd29yZA0KCQkkbGFzdFNwYWNlID0gbWJfc3RycnBvcygkc2hvcnRlbmVkLCAnICcpOw0KCQlpZiAoJGxhc3RTcGFjZSAhPT0gZmFsc2UpDQoJCXsNCgkJCSRzaG9ydGVuZWQgPSBtYl9zdWJzdHIoJHNob3J0ZW5lZCwgMCwgJGxhc3RTcGFjZSk7DQoJCX0NCg0KCQkvLyBQcmVwYXJlIHRyaW1tZWQgYW5kIHNob3J0ZW5lZCBvdXRwdXQgd2l0aCBlbGxpcHNlcw0KCQkkc2hvcnRlbmVkID0gdHJpbSgkc2hvcnRlbmVkKSAuICcuLi4nOw0KDQoJCS8vIEFkZCB0b29sdGlwIGlmIHJlcXVlc3RlZA0KCQlpZiAoJGFkZFRpcCkNCgkJew0KCQkJLy8gU2FmZWx5IGVzY2FwZSBvdXRwdXQgZm9yIEhUTUwNCgkJCSR0aXRsZSA9IHNlbGY6OnNob3J0ZW4oJHN0cmluZywgNDAwICwgZmFsc2UpOw0KDQoJCQlyZXR1cm4gc3ByaW50ZigNCgkJCQknPHNwYW4gY2xhc3M9Imhhc1RpcCIgdGl0bGU9IiVzIiBzdHlsZT0iY3Vyc29yOmhlbHAiPiVzPC9zcGFuPicsDQoJCQkJaHRtbHNwZWNpYWxjaGFycygkdGl0bGUsIEVOVF9RVU9URVMsICdVVEYtOCcpLA0KCQkJCWh0bWxzcGVjaWFsY2hhcnMoJHNob3J0ZW5lZCwgRU5UX1FVT1RFUywgJ1VURi04JykNCgkJCSk7DQoJCX0NCg0KCQkvLyBSZXR1cm4gc2hvcnRlbmVkIHZlcnNpb24gd2l0aG91dCB0b29sdGlwDQoJCXJldHVybiAkc2hvcnRlbmVkOw0KCX0NCg0KCS8qKg0KCSAqIE1ha2VzIGEgc3RyaW5nIHNhZmUgYnkgc2FuaXRpemluZyBhbmQgZm9ybWF0dGluZyBpdCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCB0eXBlLg0KCSAqDQoJICogVGhpcyBtZXRob2QgY2FuIHJlbW92ZSB1bndhbnRlZCBjaGFyYWN0ZXJzLCB0cmFuc2xpdGVyYXRlIHRleHQsIHJlcGxhY2UgbnVtYmVycyB3aXRoIA0KCSAqIHRoZWlyIEVuZ2xpc2ggZXF1aXZhbGVudHMsIGFuZCBhcHBseSBkaWZmZXJlbnQgY2FzZSBmb3JtYXR0aW5nIHN0eWxlcy4NCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgICRzdHJpbmcgICAgICAgICAgICBUaGUgc3RyaW5nIHRvIHNhbml0aXplIGFuZCBmb3JtYXQuDQoJICogQHBhcmFtIHN0cmluZyAgJHR5cGUgICAgICAgICAgICAgIFRoZSBmb3JtYXR0aW5nIHR5cGUgdG8gYXBwbHkuIFN1cHBvcnRlZCB2YWx1ZXM6DQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gJ2ZpbGVuYW1lJyAgOiBSZW1vdmVzIHNwZWNpYWwgY2hhcmFjdGVycyBhbmQgZXh0cmEgc3BhY2VzLg0KCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICdMJyAgICAgICAgIDogQ29udmVydHMgdG8gbG93ZXJjYXNlIHdpdGggdW5kZXJzY29yZXMgcmVwbGFjaW5nIHNwYWNlcy4NCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAnc3RydG9sb3dlcic6IEFsaWFzIGZvciAnTCcuDQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gJ1cnICAgICAgICAgOiBDYXBpdGFsaXplcyB0aGUgZmlyc3QgbGV0dGVyIG9mIGVhY2ggd29yZC4NCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAndycgICAgICAgICA6IENvbnZlcnRzIHRvIGxvd2VyY2FzZSAoc3BhY2VzIHJlbWFpbikuDQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gJ3dvcmQnICAgICAgOiBBbGlhcyBmb3IgJ3cnLg0KCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICdXdycgICAgICAgIDogQ2FwaXRhbGl6ZXMgb25seSB0aGUgZmlyc3Qgd29yZC4NCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAnV29yZCcgICAgICA6IEFsaWFzIGZvciAnV3cnLg0KCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICdXVycgICAgICAgIDogQ29udmVydHMgdGhlIGVudGlyZSBzdHJpbmcgdG8gdXBwZXJjYXNlLg0KCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICdXT1JEJyAgICAgIDogQWxpYXMgZm9yICdXVycuDQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gJ1UnICAgICAgICAgOiBDb252ZXJ0cyB0byB1cHBlcmNhc2Ugd2l0aCB1bmRlcnNjb3JlcyByZXBsYWNpbmcgc3BhY2VzLg0KCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICdzdHJ0b3VwcGVyJzogQWxpYXMgZm9yICdVJy4NCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAnRicgICAgICAgICA6IENhcGl0YWxpemVzIG9ubHkgdGhlIGZpcnN0IGxldHRlciBvZiB0aGUgZW50aXJlIHN0cmluZy4NCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAndWNmaXJzdCcgICA6IEFsaWFzIGZvciAnRicuDQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gJ2NBJyAgICAgICAgOiBDb252ZXJ0cyB0byBjYW1lbENhc2UuDQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gJ2NBbWVsJyAgICAgOiBBbGlhcyBmb3IgJ2NBJy4NCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAnY2FtZWxjYXNlJyA6IEFsaWFzIGZvciAnY0EnLg0KCSAqIEBwYXJhbSBzdHJpbmcgICRzcGFjZXIgICAgICAgICAgICBUaGUgY2hhcmFjdGVyIHRvIHJlcGxhY2Ugc3BhY2VzIHdpdGggKGRlZmF1bHQ6ICdfJykuDQoJICogQHBhcmFtIGJvb2wgICAgJHJlcGxhY2VOdW1iZXJzICAgIFdoZXRoZXIgdG8gcmVwbGFjZSBudW1iZXJzIHdpdGggdGhlaXIgRW5nbGlzaCB0ZXh0IGVxdWl2YWxlbnRzIChkZWZhdWx0OiB0cnVlKS4NCgkgKiBAcGFyYW0gYm9vbCAgICAka2VlcE9ubHlDaGFyYWN0ZXJzIFdoZXRoZXIgdG8gcmVtb3ZlIGFsbCBub24tYWxwaGFiZXRpYyBjaGFyYWN0ZXJzIChkZWZhdWx0OiB0cnVlKS4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nIFRoZSBzYW5pdGl6ZWQgYW5kIGZvcm1hdHRlZCBzdHJpbmcuDQoJICogQHNpbmNlICAzLjAuOQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2FmZSgkc3RyaW5nLCBzdHJpbmcgJHR5cGUgPSAnTCcsIHN0cmluZyAkc3BhY2VyID0gJ18nLCBib29sICRyZXBsYWNlTnVtYmVycyA9IHRydWUsIGJvb2wgJGtlZXBPbmx5Q2hhcmFjdGVycyA9IHRydWUpOiBzdHJpbmcNCgl7DQoJCWlmICgkcmVwbGFjZU51bWJlcnMpDQoJCXsNCgkJCS8vIHJlbW92ZSBhbGwgbnVtYmVycyBhbmQgcmVwbGFjZSB3aXRoIEVuZ2xpc2ggdGV4dCB2ZXJzaW9uICh3b3JrcyB3ZWxsIG9ubHkgdXAgdG8gbWlsbGlvbnMpDQoJCQkkc3RyaW5nID0gc2VsZjo6bnVtYmVycygkc3RyaW5nKTsNCgkJfQ0KDQoJCS8vIE9ubHkgY29udGludWUgaWYgd2UgaGF2ZSBhIHN0cmluZw0KCQlpZiAoIXNlbGY6OmNoZWNrKCRzdHJpbmcpKQ0KCQl7DQoJCQkvLyBub3QgYSBzdHJpbmcNCgkJCXJldHVybiAnJzsNCgkJfQ0KDQoJCS8vIGNyZWF0ZSBmaWxlIG5hbWUgd2l0aG91dCB0aGUgZXh0ZW5zaW9uIHRoYXQgaXMgc2FmZQ0KCQlpZiAoJHR5cGUgPT09ICdmaWxlbmFtZScpDQoJCXsNCgkJCS8vIG1ha2Ugc3VyZSBWRE0gaXMgbm90IGluIHRoZSBzdHJpbmcNCgkJCSRzdHJpbmcgPSBzdHJfcmVwbGFjZSgnVkRNJywgJ3ZEbScsIChzdHJpbmcpICRzdHJpbmcpOw0KCQkJLy8gUmVtb3ZlIGFueXRoaW5nIHdoaWNoIGlzbid0IGEgd29yZCwgd2hpdGVzcGFjZSwgbnVtYmVyDQoJCQkvLyBvciBhbnkgb2YgdGhlIGZvbGxvd2luZyBjYXJhY3RlcnMgLV8oKQ0KCQkJLy8gSWYgeW91IGRvbid0IG5lZWQgdG8gaGFuZGxlIG11bHRpLWJ5dGUgY2hhcmFjdGVycw0KCQkJLy8geW91IGNhbiB1c2UgcHJlZ19yZXBsYWNlIHJhdGhlciB0aGFuIG1iX2VyZWdfcmVwbGFjZQ0KCQkJLy8gVGhhbmtzIEDFgXVrYXN6IFJ5c2lhayENCgkJCS8vICRzdHJpbmcgPSBtYl9lcmVnX3JlcGxhY2UoIihbXlx3XHNcZFwtX1woXCldKSIsICcnLCAkc3RyaW5nKTsNCgkJCSRzdHJpbmcgPSBwcmVnX3JlcGxhY2UoIihbXlx3XHNcZFwtX1woXCldKSIsICcnLCAkc3RyaW5nKTsNCg0KCQkJLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjAyMTcyOS8xNDI5Njc3DQoJCQlyZXR1cm4gcHJlZ19yZXBsYWNlKCcvXHMrLycsICcgJywgKHN0cmluZykgJHN0cmluZyk7DQoJCX0NCgkJLy8gcmVtb3ZlIGFsbCBvdGhlciBjaGFyYWN0ZXJzDQoJCSRzdHJpbmcgPSB0cmltKChzdHJpbmcpICRzdHJpbmcpOw0KCQkkc3RyaW5nID0gcHJlZ19yZXBsYWNlKCcvJy4kc3BhY2VyLicrLycsICcgJywgJHN0cmluZyk7DQoJCSRzdHJpbmcgPSBwcmVnX3JlcGxhY2UoJy9ccysvJywgJyAnLCAkc3RyaW5nKTsNCgkJLy8gVHJhbnNsaXRlcmF0ZSBzdHJpbmcNCgkJJHN0cmluZyA9IHNlbGY6OnRyYW5zbGl0ZXJhdGUoJHN0cmluZyk7DQoJCS8vIHJlbW92ZSBhbGwgYW5kIGtlZXAgb25seSBjaGFyYWN0ZXJzDQoJCWlmICgka2VlcE9ubHlDaGFyYWN0ZXJzKQ0KCQl7DQoJCQkkc3RyaW5nID0gcHJlZ19yZXBsYWNlKCIvW15BLVphLXogXS8iLCAnJywgKHN0cmluZykgJHN0cmluZyk7DQoJCX0NCgkJLy8ga2VlcCBib3RoIG51bWJlcnMgYW5kIGNoYXJhY3RlcnMNCgkJZWxzZQ0KCQl7DQoJCQkkc3RyaW5nID0gcHJlZ19yZXBsYWNlKCIvW15BLVphLXowLTkgXS8iLCAnJywgKHN0cmluZykgJHN0cmluZyk7DQoJCX0NCgkJLy8gc2VsZWN0IGZpbmFsIGFkYXB0YXRpb25zDQoJCWlmICgkdHlwZSA9PT0gJ0wnIHx8ICR0eXBlID09PSAnc3RydG9sb3dlcicpDQoJCXsNCgkJCS8vIHJlcGxhY2Ugd2hpdGUgc3BhY2Ugd2l0aCB1bmRlcnNjb3JlDQoJCQkkc3RyaW5nID0gcHJlZ19yZXBsYWNlKCcvXHMrLycsIChzdHJpbmcpICRzcGFjZXIsIChzdHJpbmcpICRzdHJpbmcpOw0KCQkJLy8gZGVmYXVsdCBpcyB0byByZXR1cm4gbG93ZXINCgkJCXJldHVybiBzdHJ0b2xvd2VyKCRzdHJpbmcpOw0KCQl9DQoJCWVsc2VpZiAoJHR5cGUgPT09ICdXJykNCgkJew0KCQkJLy8gcmV0dXJuIGEgc3RyaW5nIHdpdGggYWxsIGZpcnN0IGxldHRlciBvZiBlYWNoIHdvcmQgdXBwZXJjYXNlKG5vIHVuZGVyc2NvcmUpDQoJCQlyZXR1cm4gdWN3b3JkcyhzdHJ0b2xvd2VyKCRzdHJpbmcpKTsNCgkJfQ0KCQllbHNlaWYgKCR0eXBlID09PSAndycgfHwgJHR5cGUgPT09ICd3b3JkJykNCgkJew0KCQkJLy8gcmV0dXJuIGEgc3RyaW5nIHdpdGggYWxsIGxvd2VyY2FzZShubyB1bmRlcnNjb3JlKQ0KCQkJcmV0dXJuIHN0cnRvbG93ZXIoJHN0cmluZyk7DQoJCX0NCgkJZWxzZWlmICgkdHlwZSA9PT0gJ1d3JyB8fCAkdHlwZSA9PT0gJ1dvcmQnKQ0KCQl7DQoJCQkvLyByZXR1cm4gYSBzdHJpbmcgd2l0aCBmaXJzdCBsZXR0ZXIgb2YgdGhlIGZpcnN0IHdvcmQgdXBwZXJjYXNlIGFuZCBhbGwgdGhlIHJlc3QgbG93ZXJjYXNlKG5vIHVuZGVyc2NvcmUpDQoJCQlyZXR1cm4gdWNmaXJzdChzdHJ0b2xvd2VyKCRzdHJpbmcpKTsNCgkJfQ0KCQllbHNlaWYgKCR0eXBlID09PSAnV1cnIHx8ICR0eXBlID09PSAnV09SRCcpDQoJCXsNCgkJCS8vIHJldHVybiBhIHN0cmluZyB3aXRoIGFsbCB0aGUgdXBwZXJjYXNlKG5vIHVuZGVyc2NvcmUpDQoJCQlyZXR1cm4gc3RydG91cHBlcigkc3RyaW5nKTsNCgkJfQ0KCQllbHNlaWYgKCR0eXBlID09PSAnVScgfHwgJHR5cGUgPT09ICdzdHJ0b3VwcGVyJykNCgkJew0KCQkJCS8vIHJlcGxhY2Ugd2hpdGUgc3BhY2Ugd2l0aCB1bmRlcnNjb3JlDQoJCQkJJHN0cmluZyA9IHByZWdfcmVwbGFjZSgnL1xzKy8nLCAoc3RyaW5nKSAkc3BhY2VyLCAkc3RyaW5nKTsNCgkJCQkvLyByZXR1cm4gYWxsIHVwcGVyDQoJCQkJcmV0dXJuIHN0cnRvdXBwZXIoJHN0cmluZyk7DQoJCX0NCgkJZWxzZWlmICgkdHlwZSA9PT0gJ0YnIHx8ICR0eXBlID09PSAndWNmaXJzdCcpDQoJCXsNCgkJCQkvLyByZXBsYWNlIHdoaXRlIHNwYWNlIHdpdGggdW5kZXJzY29yZQ0KCQkJCSRzdHJpbmcgPSBwcmVnX3JlcGxhY2UoJy9ccysvJywgKHN0cmluZykgJHNwYWNlciwgJHN0cmluZyk7DQoJCQkJLy8gcmV0dXJuIHdpdGggZmlyc3QgY2hhcmFjdGVyIHRvIHVwcGVyDQoJCQkJcmV0dXJuIHVjZmlyc3Qoc3RydG9sb3dlcigkc3RyaW5nKSk7DQoJCX0NCgkJZWxzZWlmICgkdHlwZSA9PT0gJ2NBJyB8fCAkdHlwZSA9PT0gJ2NBbWVsJyB8fCAkdHlwZSA9PT0gJ2NhbWVsY2FzZScpDQoJCXsNCgkJCS8vIGNvbnZlcnQgYWxsIHdvcmRzIHRvIGZpcnN0IGxldHRlciB1cHBlcmNhc2UNCgkJCSRzdHJpbmcgPSB1Y3dvcmRzKHN0cnRvbG93ZXIoJHN0cmluZykpOw0KCQkJLy8gcmVtb3ZlIHdoaXRlIHNwYWNlDQoJCQkkc3RyaW5nID0gcHJlZ19yZXBsYWNlKCcvXHMrLycsICcnLCAkc3RyaW5nKTsNCgkJCS8vIG5vdyByZXR1cm4gZmlyc3QgbGV0dGVyIGxvd2VyY2FzZQ0KCQkJcmV0dXJuIGxjZmlyc3QoJHN0cmluZyk7DQoJCX0NCgkJLy8gcmV0dXJuIHN0cmluZw0KCQlyZXR1cm4gJHN0cmluZzsNCgl9DQoNCgkvKioNCgkgKiBDb252ZXJ0IG5vbmUgRW5nbGlzaCBzdHJpbmdzIHRvIGNvZGUgdXNhYmxlIHN0cmluZw0KCSAqDQoJICogQGlucHV0ICAkc3RyaW5nICBhbiBzdHJpbmcNCgkgKg0KCSAqIEByZXR1cm5zIHN0cmluZw0KCSAqIEBzaW5jZSAgIDMuMC45DQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0cmFuc2xpdGVyYXRlKCRzdHJpbmcpOiBzdHJpbmcNCgl7DQoJCS8vIHNldCB0YWcgb25seSBvbmNlDQoJCWlmICghc2VsZjo6Y2hlY2soc2VsZjo6JGxhbmdUYWcpKQ0KCQl7DQoJCQkvLyBnZXQgZ2xvYmFsIHZhbHVlDQoJCQlzZWxmOjokbGFuZ1RhZyA9IEhlbHBlcjo6Z2V0UGFyYW1zKCktPmdldCgnbGFuZ3VhZ2UnLCAnZW4tR0InKTsNCgkJfQ0KDQoJCS8qKiBAdmFyICRsYW5nRmFjdG9yeSBMYW5ndWFnZUZhY3RvcnkgKiovDQoJCSRsYW5nRmFjdG9yeSA9IEZhY3Rvcnk6OmdldENvbnRhaW5lcigpLT5nZXQoTGFuZ3VhZ2VGYWN0b3J5SW50ZXJmYWNlOjpjbGFzcyk7DQoJCSRsYW5nID0gJGxhbmdGYWN0b3J5LT5jcmVhdGVMYW5ndWFnZShzZWxmOjokbGFuZ1RhZyk7DQoNCgkJLy8gVHJhbnNsaXRlcmF0ZSBvbiB0aGUgbGFuZ3VhZ2UgcmVxdWVzdGVkDQoJCXJldHVybiAkbGFuZy0+dHJhbnNsaXRlcmF0ZSgkc3RyaW5nKTsNCgl9DQoNCgkvKioNCgkgKiBFbnN1cmVzIGEgc3RyaW5nIGlzIHNhZmUgZm9yIEhUTUwgb3V0cHV0IGJ5IGVuY29kaW5nIGVudGl0aWVzIGFuZCBhcHBseWluZyBhbiBpbnB1dCBmaWx0ZXIuDQoJICoNCgkgKiBUaGlzIG1ldGhvZCBzYW5pdGl6ZXMgdGhlIGlucHV0IHN0cmluZywgY29udmVydGluZyBzcGVjaWFsIGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRpdGllcyANCgkgKiBhbmQgYXBwbHlpbmcgSm9vbWxhJ3MgYElucHV0RmlsdGVyYCB0byByZW1vdmUgcG90ZW50aWFsbHkgdW5zYWZlIEhUTUwuDQoJICogT3B0aW9uYWxseSwgaXQgY2FuIGFsc28gc2hvcnRlbiB0aGUgc3RyaW5nIHdoaWxlIHByZXNlcnZpbmcgd29yZCBpbnRlZ3JpdHkuDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICAkdmFyICAgICAgVGhlIGlucHV0IHN0cmluZyBjb250YWluaW5nIEhUTUwgY29udGVudC4NCgkgKiBAcGFyYW0gc3RyaW5nICAkY2hhcnNldCAgVGhlIGNoYXJhY3RlciBzZXQgdG8gdXNlIGZvciBlbmNvZGluZyAoZGVmYXVsdDogJ1VURi04JykuDQoJICogQHBhcmFtIGJvb2wgICAgJHNob3J0ZW4gIFdoZXRoZXIgdG8gc2hvcnRlbiB0aGUgc3RyaW5nIHRvIGEgc3BlY2lmaWVkIGxlbmd0aCAoZGVmYXVsdDogZmFsc2UpLg0KCSAqIEBwYXJhbSBpbnQgICAgICRsZW5ndGggICBUaGUgbWF4aW11bSBsZW5ndGggZm9yIHNob3J0ZW5pbmcsIGlmIGVuYWJsZWQgKGRlZmF1bHQ6IDQwKS4NCgkgKiBAcGFyYW0gYm9vbCAgICAkYWRkVGlwICAgV2hldGhlciB0byBhcHBlbmQgYSB0b29sdGlwIChlbGxpcHNpcykgd2hlbiBzaG9ydGVuaW5nIChkZWZhdWx0OiB0cnVlKS4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nIFRoZSBzYW5pdGl6ZWQgYW5kIG9wdGlvbmFsbHkgc2hvcnRlbmVkIEhUTUwtc2FmZSBzdHJpbmcuDQoJICogQHNpbmNlIDMuMC45DQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBodG1sKCR2YXIsICRjaGFyc2V0ID0gJ1VURi04JywgJHNob3J0ZW4gPSBmYWxzZSwgJGxlbmd0aCA9IDQwLCAkYWRkVGlwID0gdHJ1ZSk6IHN0cmluZw0KCXsNCgkJaWYgKHNlbGY6OmNoZWNrKCR2YXIpKQ0KCQl7DQoJCQkkZmlsdGVyID0gbmV3IElucHV0RmlsdGVyKCk7DQoJCQkkc3RyaW5nID0gJGZpbHRlci0+Y2xlYW4oDQoJCQkJaHRtbF9lbnRpdHlfZGVjb2RlKA0KCQkJCQlodG1sZW50aXRpZXMoDQoJCQkJCQkoc3RyaW5nKSAkdmFyLA0KCQkJCQkJRU5UX0NPTVBBVCwNCgkJCQkJCSRjaGFyc2V0DQoJCQkJCSkNCgkJCQkpLA0KCQkJCSdIVE1MJw0KCQkJKTsNCgkJCWlmICgkc2hvcnRlbikNCgkJCXsNCgkJCQlyZXR1cm4gc2VsZjo6c2hvcnRlbigkc3RyaW5nLCAkbGVuZ3RoLCAkYWRkVGlwKTsNCgkJCX0NCgkJCXJldHVybiAkc3RyaW5nOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJcmV0dXJuICcnOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogQ29udmVydCBhbGwgaW50IGluIGEgc3RyaW5nIHRvIGFuIEVuZ2xpc2ggd29yZCBzdHJpbmcNCgkgKg0KCSAqIEBpbnB1dCAgICAkc3RyaW5nICBhbiBzdHJpbmcgd2l0aCBudW1iZXJzDQoJICoNCgkgKiBAcmV0dXJucyAgc3RyaW5nfG51bGwNCgkgKiBAc2luY2UgIDMuMC45DQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBudW1iZXJzKCRzdHJpbmcpOiA/c3RyaW5nDQoJew0KCQkvLyBzZXQgbnVtYmVycyBhcnJheQ0KCQkkbnVtYmVycyA9IFtdOw0KCQkkc2VhcmNoX3JlcGxhY2U9IFtdOw0KDQoJCS8vIGZpcnN0IGdldCBhbGwgbnVtYmVycw0KCQlwcmVnX21hdGNoX2FsbCgnIVxkKyEnLCAoc3RyaW5nKSAkc3RyaW5nLCAkbnVtYmVycyk7DQoNCgkJLy8gY2hlY2sgaWYgd2UgaGF2ZSBhbnkgbnVtYmVycw0KCQlpZiAoaXNzZXQoJG51bWJlcnNbMF0pICYmIEFycmF5SGVscGVyOjpjaGVjaygkbnVtYmVyc1swXSkpDQoJCXsNCgkJCWZvcmVhY2ggKCRudW1iZXJzWzBdIGFzICRudW1iZXIpDQoJCQl7DQoJCQkJJHNlYXJjaF9yZXBsYWNlWyRudW1iZXJdID0gc2VsZjo6bnVtYmVyKChpbnQpJG51bWJlcik7DQoJCQl9DQoNCgkJCS8vIG5vdyByZXBsYWNlIG51bWJlcnMgaW4gc3RyaW5nDQoJCQkkc3RyaW5nID0gc3RyX3JlcGxhY2UoYXJyYXlfa2V5cygkc2VhcmNoX3JlcGxhY2UpLCBhcnJheV92YWx1ZXMoJHNlYXJjaF9yZXBsYWNlKSwgKHN0cmluZykgJHN0cmluZyk7DQoNCgkJCS8vIGNoZWNrIGlmIHdlIG1pc3NlZCBhbnksIHN0cmFuZ2UgaWYgd2UgZGlkLg0KCQkJcmV0dXJuIHNlbGY6Om51bWJlcnMoJHN0cmluZyk7DQoJCX0NCg0KCQkvLyByZXR1cm4gdGhlIHN0cmluZyB3aXRoIG5vIG51bWJlcnMgcmVtYWluaW5nLg0KCQlyZXR1cm4gJHN0cmluZzsNCgl9DQoNCgkvKioNCgkgKiBDb252ZXJ0IGFuIGludGVnZXIgaW50byBhbiBFbmdsaXNoIHdvcmQgc3RyaW5nDQoJICogVGhhbmtzIHRvIFRvbSBOaWNob2xzb24gPGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdHJ2YWwucGhwIzQxOTg4Pg0KCSAqDQoJICogQGlucHV0ICAgICR4IGFuIGludA0KCSAqIA0KCSAqIEByZXR1cm5zICAgc3RyaW5nDQoJICogQHNpbmNlICAzLjAuOQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbnVtYmVyKCR4KQ0KCXsNCgkJJG53b3JkcyA9IFsiemVybyIsICJvbmUiLCAidHdvIiwgInRocmVlIiwgImZvdXIiLCAiZml2ZSIsICJzaXgiLCAic2V2ZW4iLA0KCQkJImVpZ2h0IiwgIm5pbmUiLCAidGVuIiwgImVsZXZlbiIsICJ0d2VsdmUiLCAidGhpcnRlZW4iLA0KCQkJImZvdXJ0ZWVuIiwgImZpZnRlZW4iLCAic2l4dGVlbiIsICJzZXZlbnRlZW4iLCAiZWlnaHRlZW4iLA0KCQkJIm5pbmV0ZWVuIiwgInR3ZW50eSIsIDMwID0+ICJ0aGlydHkiLCA0MCA9PiAiZm9ydHkiLA0KCQkJNTAgPT4gImZpZnR5IiwgNjAgPT4gInNpeHR5IiwgNzAgPT4gInNldmVudHkiLCA4MCA9PiAiZWlnaHR5IiwNCgkJCTkwID0+ICJuaW5ldHkiXTsNCg0KCQlpZighaXNfbnVtZXJpYygkeCkpDQoJCXsNCgkJCSR3ID0gJHg7DQoJCX0NCgkJZWxzZWlmKGZtb2QoJHgsIDEpICE9IDApDQoJCXsNCgkJCSR3ID0gJHg7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQlpZigkeCA8IDApDQoJCQl7DQoJCQkJJHcgPSAnbWludXMgJzsNCgkJCQkkeCA9IC0keDsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdyA9ICcnOw0KCQkJCS8vIC4uLiBub3cgJHggaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlci4NCgkJCX0NCg0KCQkJaWYoJHggPCAyMSkgICAvLyAwIHRvIDIwDQoJCQl7DQoJCQkJJHcgLj0gJG53b3Jkc1skeF07DQoJCQl9DQoJCQllbHNlaWYoJHggPCAxMDApICAvLyAyMSB0byA5OQ0KCQkJeyANCgkJCQkkdyAuPSAkbndvcmRzWzEwICogZmxvb3IoJHgvMTApXTsNCgkJCQkkciA9IGZtb2QoJHgsIDEwKTsNCgkJCQlpZigkciA+IDApDQoJCQkJew0KCQkJCQkkdyAuPSAnICcgLiAkbndvcmRzWyRyXTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYoJHggPCAxMDAwKSAgLy8gMTAwIHRvIDk5OQ0KCQkJew0KCQkJCSR3IC49ICRud29yZHNbZmxvb3IoJHgvMTAwKV0gLicgaHVuZHJlZCc7DQoJCQkJJHIgPSBmbW9kKCR4LCAxMDApOw0KCQkJCWlmKCRyID4gMCkNCgkJCQl7DQoJCQkJCSR3IC49ICcgYW5kICcuIHNlbGY6Om51bWJlcigkcik7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZWlmKCR4IDwgMTAwMDAwMCkgIC8vIDEwMDAgdG8gOTk5OTk5DQoJCQl7DQoJCQkJJHcgLj0gc2VsZjo6bnVtYmVyKGZsb29yKCR4LzEwMDApKSAuJyB0aG91c2FuZCc7DQoJCQkJJHIgPSBmbW9kKCR4LCAxMDAwKTsNCgkJCQlpZigkciA+IDApDQoJCQkJew0KCQkJCQkkdyAuPSAnICc7DQoJCQkJCWlmKCRyIDwgMTAwKQ0KCQkJCQl7DQoJCQkJCQkkdyAuPSAnYW5kICc7DQoJCQkJCX0NCgkJCQkJJHcgLj0gc2VsZjo6bnVtYmVyKCRyKTsNCgkJCQl9DQoJCQl9IA0KCQkJZWxzZSAvLyAgbWlsbGlvbnMNCgkJCXsNCgkJCQkkdyAuPSBzZWxmOjpudW1iZXIoZmxvb3IoJHgvMTAwMDAwMCkpIC4nIG1pbGxpb24nOw0KCQkJCSRyID0gZm1vZCgkeCwgMTAwMDAwMCk7DQoJCQkJaWYoJHIgPiAwKQ0KCQkJCXsNCgkJCQkJJHcgLj0gJyAnOw0KCQkJCQlpZigkciA8IDEwMCkNCgkJCQkJew0KCQkJCQkJJHcgLj0gJ2FuZCAnOw0KCQkJCQl9DQoJCQkJCSR3IC49IHNlbGY6Om51bWJlcigkcik7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiAkdzsNCgl9DQoNCgkvKioNCgkgKiBSYW5kb20gS2V5DQoJICoNCgkgKiBAaW5wdXQgICBpbnQgICRzaXplICAgVGhlIHNpemUgb2YgdGhlIHJhbmRvbSBzdHJpbmcNCgkgKg0KCSAqIEByZXR1cm5zIHN0cmluZw0KCSAqIEBzaW5jZSAgMy4wLjkNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJhbmRvbShpbnQgJHNpemUpOiBzdHJpbmcNCgl7DQoJCSRiYWcgPSAiYWJjZWZnaGlqa25vcHFyc3R1d3h5ekFCQ0RERUZHSElKS0xMTU1OT1BRUlNUVVZWV1hZWmFiY2RkZWZnaGlqa2xsbW1ub3BxcnN0dXZ2d3h5ekFCQ0VGR0hJSktOT1BRUlNUVVdYWVoiOw0KCQkka2V5ID0gW107DQoJCSRiYWdzaXplID0gc3RybGVuKCRiYWcpIC0gMTsNCg0KCQlmb3IgKCRpID0gMDsgJGkgPCAkc2l6ZTsgJGkrKykNCgkJew0KCQkJJGdldCA9IHJhbmQoMCwgJGJhZ3NpemUpOw0KCQkJJGtleVtdID0gJGJhZ1skZ2V0XTsNCgkJfQ0KDQoJCXJldHVybiBpbXBsb2RlKCRrZXkpOw0KCX0NCg==', '{\"load_selection0\":{\"load\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\"}}', '{}', '{\"source\":{\"guid\":\"1a1b6f3d-f16c-431a-b270-7a8a80cc7f56\"}}', 1, '2022-03-08 21:35:37', 59, 0, 1), (13, '0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a', 'Utilities Array Helper', 'ArrayHelper', 'abstract class', 'Some array tricks helper\r\n\r\n@since 3.0.9', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICAzcmQgU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Utilities.ArrayHelper', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIENoZWNrIGlmIGhhdmUgYW4gYXJyYXkgd2l0aCBhIGxlbmd0aA0KCSAqDQoJICogQGlucHV0CWFycmF5ICAgVGhlIGFycmF5IHRvIGNoZWNrDQoJICoNCgkgKiBAcmV0dXJucyBpbnR8ZmFsc2UgIG51bWJlciBvZiBpdGVtcyBpbiBhcnJheSBvbiBzdWNjZXNzDQoJICogDQoJICogQHNpbmNlICAzLjIuMA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2soJGFycmF5LCAkcmVtb3ZlRW1wdHlTdHJpbmcgPSBmYWxzZSkNCgl7DQoJCWlmIChpc19hcnJheSgkYXJyYXkpICYmICgkbnIgPSBjb3VudCgoYXJyYXkpICRhcnJheSkpID4gMCkNCgkJew0KCQkJLy8gYWxzbyBtYWtlIHN1cmUgdGhlIGVtcHR5IHN0cmluZ3MgYXJlIHJlbW92ZWQNCgkJCWlmICgkcmVtb3ZlRW1wdHlTdHJpbmcpDQoJCQl7DQoJCQkJJGFycmF5ID0gYXJyYXlfZmlsdGVyKCRhcnJheSk7DQoNCgkJCQlpZiAoJGFycmF5ID09PSBbXSkNCgkJCQl7DQoJCQkJCXJldHVybiBmYWxzZTsNCgkJCQl9DQoNCgkJCQlyZXR1cm4gY291bnQoJGFycmF5KTsNCgkJCX0NCg0KCQkJcmV0dXJuICRucjsNCgkJfQ0KDQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBNZXJnZSBhbiBhcnJheSBvZiBhcnJheSdzDQoJICoNCgkgKiBAaW5wdXQJYXJyYXkgICBUaGUgYXJyYXlzIHlvdSB3b3VsZCBsaWtlIHRvIG1lcmdlDQoJICoNCgkgKiBAcmV0dXJucyBhcnJheXxudWxsICBtZXJnZWQgYXJyYXkgb24gc3VjY2Vzcw0KCSAqIA0KCSAqIEBzaW5jZSAgMy4wLjkNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1lcmdlKCRhcnJheXMpOiA/YXJyYXkNCgl7DQoJCWlmKHNlbGY6OmNoZWNrKCRhcnJheXMpKQ0KCQl7DQoJCQkkbWVyZ2VkID0gW107DQoJCQlmb3JlYWNoICgkYXJyYXlzIGFzICRhcnJheSkNCgkJCXsNCgkJCQlpZiAoc2VsZjo6Y2hlY2soJGFycmF5KSkNCgkJCQl7DQoJCQkJCSRtZXJnZWQgPSBhcnJheV9tZXJnZSgkbWVyZ2VkLCAkYXJyYXkpOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkbWVyZ2VkOw0KCQl9DQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIENoZWNrIGlmIGFycmF5cyBpbnRlcnNlY3QNCgkgKg0KCSAqIEBpbnB1dAlhcnJheSAgIFRoZSBmaXJzdCBhcnJheQ0KCSAqIEBpbnB1dAlhcnJheSAgIFRoZSBzZWNvbmQgYXJyYXkNCgkgKg0KCSAqIEByZXR1cm5zIGJvb2wgIHRydWUgaWYgaW50ZXJzZWN0IGVsc2UgZmFsc2UNCgkgKiANCgkgKiBAc2luY2UgIDMuMS4xDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbnRlcnNlY3QoJGFfYXJyYXksICRiX2FycmF5KTogYm9vbA0KCXsNCgkJLy8gZmxpcCB0aGUgc2Vjb25kIGFycmF5DQoJCSRiX2FycmF5ID0gYXJyYXlfZmxpcCgkYl9hcnJheSk7DQoNCgkJLy8gbG9vcCB0aGUgZmlyc3QgYXJyYXkNCgkJZm9yZWFjaCAoJGFfYXJyYXkgYXMgJHYpDQoJCXsNCgkJCWlmIChpc3NldCgkYl9hcnJheVskdl0pKQ0KCQkJew0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBEZWVwIGNsb25lIGFuIGFycmF5LCBpbmNsdWRpbmcgbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cy4NCgkgKg0KCSAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBjb21wbGV0ZWx5IGluZGVwZW5kZW50IGNvcHkgb2YgdGhlIGdpdmVuIGFycmF5Lg0KCSAqIEl0IHJlY3Vyc2l2ZWx5IGNsb25lcyBuZXN0ZWQgYXJyYXlzIGFuZCB1c2VzIFBIUCdzIGBjbG9uZWAga2V5d29yZA0KCSAqIHRvIGNsb25lIGFueSBvYmplY3RzIGZvdW5kIHdpdGhpbiB0aGUgc3RydWN0dXJlLg0KCSAqDQoJICogTm90ZTogUmVzb3VyY2VzIGFuZCBjbG9zdXJlcyBhcmUgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBub3QgYmUgY29waWVkLg0KCSAqDQoJICogQHBhcmFtICBhcnJheSAgJGFycmF5ICBUaGUgYXJyYXkgdG8gYmUgZGVlcGx5IGNsb25lZC4NCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkgQSBmdWxseSBjbG9uZWQsIGluZGVwZW5kZW50IGNvcHkgb2YgdGhlIGlucHV0IGFycmF5Lg0KCSAqIEBzaW5jZSA1LjEuMQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2xvbmUoYXJyYXkgJGFycmF5KTogYXJyYXkNCgl7DQoJCSRjb3B5ID0gW107DQoNCgkJZm9yZWFjaCAoJGFycmF5IGFzICRrZXkgPT4gJHZhbHVlKQ0KCQl7DQoJCQlpZiAoaXNfYXJyYXkoJHZhbHVlKSkNCgkJCXsNCgkJCQkkY29weVska2V5XSA9IHNlbGY6OmNsb25lKCR2YWx1ZSk7DQoJCQl9DQoJCQllbHNlaWYgKGlzX29iamVjdCgkdmFsdWUpKQ0KCQkJew0KCQkJCSRjb3B5WyRrZXldID0gY2xvbmUgJHZhbHVlOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRjb3B5WyRrZXldID0gJHZhbHVlOw0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuICRjb3B5Ow0KCX0=', '{}', '{}', '', 1, '2022-03-08 22:53:52', 24, 0, 1), (14, 'ce8cf834-6bac-44fb-941c-861f7e046cc0', 'String Namespace Helper', 'NamespaceHelper', 'abstract class', 'Control the naming of a namespace helper\r\n\r\n@since 3.0.9', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICAzcmQgU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Utilities.String.NamespaceHelper', 0, '{}', '{}', '', '{\"use_selection0\":{\"use\":\"1f28cb53-60d9-4db1-b517-3c7dc6b429ef\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIE1ha2luZyBuYW1lc3BhY2Ugc2FmZQ0KCSAqDQoJICogQHBhcmFtICBzdHJpbmcgICAkc3RyaW5nICAgIFRoZSBuYW1lc3BhY2Ugc3RyaW5nIHlvdSB3b3VsZCBsaWtlIHRvIG1ha2Ugc2FmZQ0KCSAqDQoJICogQHJldHVybiBzdHJpbmcgb24gc3VjY2Vzcw0KCSAqIEBzaW5jZSAgMy4wLjkNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNhZmUoc3RyaW5nICRzdHJpbmcpOiBzdHJpbmcNCgl7DQoJCS8vIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBiYWNrc2xhc2hlcw0KCQkkc3RyaW5nID0gdHJpbSgkc3RyaW5nLCAnXFwnKTsNCg0KCQkvLyBTcGxpdCB0aGUgc3RyaW5nIGludG8gbmFtZXNwYWNlIHNlZ21lbnRzDQoJCSRzZWdtZW50cyA9IGV4cGxvZGUoJ1xcJywgJHN0cmluZyk7DQoNCgkJLy8gbWFrZSBlYWNoIHNlZ21lbnQgc2FmZQ0KCQkkc2VnbWVudHMgPSBhcnJheV9tYXAoW3NlbGY6OmNsYXNzLCAnc2FmZVNlZ21lbnQnXSwgJHNlZ21lbnRzKTsNCg0KCQkvLyBKb2luIHRoZSBuYW1lc3BhY2Ugc2VnbWVudHMgYmFjayB0b2dldGhlcg0KCQlyZXR1cm4gaW1wbG9kZSgnXFwnLCAkc2VnbWVudHMpOw0KCX0NCg0KCS8qKg0KCSAqIE1ha2luZyBvbmUgbmFtZXNwYWNlIHNlZ21lbnQgc2FmZQ0KCSAqDQoJICogQHBhcmFtICBzdHJpbmcgICAkc3RyaW5nICAgIFRoZSBuYW1lc3BhY2Ugc2VnbWVudCBzdHJpbmcgeW91IHdvdWxkIGxpa2UgdG8gbWFrZSBzYWZlDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZyBvbiBzdWNjZXNzDQoJICogQHNpbmNlICAzLjAuOQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2FmZVNlZ21lbnQoc3RyaW5nICRzdHJpbmcpOiBzdHJpbmcNCgl7DQoJCS8vIENoZWNrIGlmIHNlZ21lbnQgc3RhcnRzIHdpdGggYSBudW1iZXINCgkJaWYgKHByZWdfbWF0Y2goIi9eXGQvIiwgJHN0cmluZykpDQoJCXsNCgkJCS8vIEV4dHJhY3QgdGhlIHN0YXJ0aW5nIG51bWJlcihzKQ0KCQkJcHJlZ19tYXRjaCgiL15cZCsvIiwgJHN0cmluZywgJG1hdGNoZXMpOw0KDQoJCQlpZiAoaXNzZXQoJG1hdGNoZXNbMF0pKQ0KCQkJew0KCQkJCSRudW1iZXJXb3JkID0gU3RyaW5nSGVscGVyOjpudW1iZXJzKCRtYXRjaGVzWzBdKTsNCgkJCQkkc3RyaW5nID0gc3RyX3JlcGxhY2UoJG1hdGNoZXNbMF0sICRudW1iZXJXb3JkLCAkc3RyaW5nKTsNCgkJCX0NCgkJfQ0KDQoJCS8vIFRyYW5zbGl0ZXJhdGUgc3RyaW5nIFRPRE86IGxvb2sgYWdhaW4gYXMgdGhpcyBtYWtlcyBpdCBsb3dlcmNhc2UNCgkJLy8gJHNlZ21lbnQgPSBTdHJpbmdIZWxwZXI6OnRyYW5zbGl0ZXJhdGUoJHNlZ21lbnQpOw0KDQoJCS8vIE1ha2Ugc3VyZSBzZWdtZW50IG9ubHkgY29udGFpbnMgdmFsaWQgY2hhcmFjdGVycw0KCQlyZXR1cm4gcHJlZ19yZXBsYWNlKCIvW15BLVphLXowLTldLyIsICcnLCAkc3RyaW5nKTsNCgl9', '{}', '{}', '', 1, '2022-03-08 23:27:57', 24, 0, 1), (17, 'db87c339-5bb6-4291-a7ef-2c48ea1b06bc', 'Utilities GetHelper', 'GetHelper', 'abstract class', 'Some easy get...\r\n\r\n@since 3.0.9', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICAzcmQgU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Utilities.GetHelper', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTs=', '{\"use_selection0\":{\"use\":\"640b5352-fb09-425f-a26e-cd44eda03f15\",\"as\":\"default\"},\"use_selection1\":{\"use\":\"9d76b8dc-3883-4755-b11c-131d19ca8a53\",\"as\":\"Data\"}}', 'CS8qKg0KCSAqIEdldCBhIFZhcmlhYmxlIA0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nfG51bGwgICR0YWJsZSAgICAgICAgVGhlIHRhYmxlIGZyb20gd2hpY2ggdG8gZ2V0IHRoZSB2YXJpYWJsZQ0KCSAqIEBwYXJhbSAgIG1peGVkICAgICAgICAkd2hlcmUgICAgICAgIFRoZSB2YWx1ZSB3aGVyZQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgICAkd2hlcmVTdHJpbmcgIFRoZSB0YXJnZXQvZmllbGQgc3RyaW5nIHdoZXJlL25hbWUNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICAgJHdoYXQgICAgICAgICBUaGUgcmV0dXJuIGZpZWxkDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICRvcGVyYXRvciAgICAgVGhlIG9wZXJhdG9yIGJldHdlZW4gJHdoZXJlU3RyaW5nL2ZpZWxkIGFuZCAkd2hlcmUvdmFsdWUNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICAgJG1haW4gICAgICAgICBUaGUgY29tcG9uZW50IGluIHdoaWNoIHRoZSB0YWJsZSBpcyBmb3VuZA0KCSAqDQoJICogQHJldHVybiAgbWl4ZWQgc3RyaW5nL2ludC9mbG9hdA0KCSAqIEBzaW5jZSAgMy4wLjkNCgkgKg0KCSAqIEBkZXByZWNhdGVkIDUuMSAgVXNlICBEYXRhOjpfKCdEYXRhLkxvYWQnKS0+dGFibGUoJHRhYmxlKS0+dmFsdWUoLi4uKQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdmFyKD9zdHJpbmcgJHRhYmxlID0gbnVsbCwgJHdoZXJlID0gbnVsbCwNCgkJc3RyaW5nICR3aGVyZVN0cmluZyA9ICd1c2VyJywgc3RyaW5nICR3aGF0ID0gJ2lkJywNCgkJc3RyaW5nICRvcGVyYXRvciA9ICc9JywgP3N0cmluZyAkbWFpbiA9IG51bGwpDQoJew0KCQlpZihlbXB0eSgkd2hlcmUpKQ0KCQl7DQoJCQkkd2hlcmUgPSBGYWN0b3J5OjpnZXRVc2VyKCktPmlkOw0KCQl9DQoNCgkJaWYoZW1wdHkoJG1haW4pKQ0KCQl7DQoJCQkkbWFpbiA9IEhlbHBlcjo6Z2V0Q29kZSgpOw0KCQl9DQoNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoNCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJHdoYXQpKSk7DQoNCgkJaWYgKGVtcHR5KCR0YWJsZSkpDQoJCXsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fJyAuICRtYWluKSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfXycgLiAkbWFpbiAuICdfJyAuICR0YWJsZSkpOw0KCQl9DQoNCgkJaWYgKGlzX251bWVyaWMoJHdoZXJlKSkNCgkJew0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgkd2hlcmVTdHJpbmcpIC4gJyAnIC4gJG9wZXJhdG9yIC4gJyAnIC4gKGludCkgJHdoZXJlKTsNCgkJfQ0KCQllbHNlaWYgKGlzX3N0cmluZygkd2hlcmUpKQ0KCQl7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCR3aGVyZVN0cmluZykgLiAnICcgLiAkb3BlcmF0b3IgLiAnICcgLiAkZGItPnF1b3RlKChzdHJpbmcpJHdoZXJlKSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCg0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KDQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuICRkYi0+bG9hZFJlc3VsdCgpOw0KCQl9DQoNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBhcnJheSBvZiB2YXJpYWJsZXMNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAkdGFibGUgICAgICAgIFRoZSB0YWJsZSBmcm9tIHdoaWNoIHRvIGdldCB0aGUgdmFyaWFibGVzDQoJICogQHBhcmFtICAgbWl4ZWQgICAgICAgICR3aGVyZSAgICAgICAgVGhlIHZhbHVlIHdoZXJlDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICR3aGVyZVN0cmluZyAgVGhlIHRhcmdldC9maWVsZCBzdHJpbmcgd2hlcmUvbmFtZQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgICAkd2hhdCAgICAgICAgIFRoZSByZXR1cm4gZmllbGQNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICAgJG9wZXJhdG9yICAgICBUaGUgb3BlcmF0b3IgYmV0d2VlbiAkd2hlcmVTdHJpbmcvZmllbGQgYW5kICR3aGVyZS92YWx1ZQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgICAkbWFpbiAgICAgICAgIFRoZSBjb21wb25lbnQgaW4gd2hpY2ggdGhlIHRhYmxlIGlzIGZvdW5kDQoJICogQHBhcmFtICAgYm9vbCAgICAgICAgICR1bmlxdWUgICAgICAgVGhlIHN3aXRjaCB0byByZXR1cm4gYSB1bmlxdWUgYXJyYXkNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5fG51bGwNCgkgKiBAc2luY2UgIDMuMC45DQoJICoNCgkgKiBAZGVwcmVjYXRlZCA1LjEgIFVzZSAgRGF0YTo6XygnRGF0YS5Mb2FkJyktPnRhYmxlKCR0YWJsZSktPnZhbHVlcyguLi4pDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB2YXJzKD9zdHJpbmcgJHRhYmxlID0gbnVsbCwgJHdoZXJlID0gbnVsbCwNCgkJc3RyaW5nICR3aGVyZVN0cmluZyA9ICd1c2VyJywgc3RyaW5nICR3aGF0ID0gJ2lkJywgc3RyaW5nICRvcGVyYXRvciA9ICdJTicsDQoJCT9zdHJpbmcgJG1haW4gPSBudWxsLCBib29sICR1bmlxdWUgPSB0cnVlKTogP2FycmF5DQoJew0KCQlpZihlbXB0eSgkd2hlcmUpKQ0KCQl7DQoJCQkkd2hlcmUgPSBGYWN0b3J5OjpnZXRVc2VyKCktPmlkOw0KCQl9DQoNCgkJaWYoJG1haW4gPT09IG51bGwpDQoJCXsNCgkJCSRtYWluID0gSGVscGVyOjpnZXRDb2RlKCk7DQoJCX0NCg0KCQlpZiAoIUFycmF5SGVscGVyOjpjaGVjaygkd2hlcmUpICYmICR3aGVyZSA+IDApDQoJCXsNCgkJCSR3aGVyZSA9IFskd2hlcmVdOw0KCQl9DQoNCgkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkd2hlcmUpKQ0KCQl7DQoJCQkvLyBwcmVwIG1haW4gPC0tIHdoeT8gd2VsbCBpZiAkbWFpbj0nJyBpcyBlbXB0eSB0aGVuICR0YWJsZSBjYW4gYmUgY2F0ZWdvcmllcyBvciB1c2Vycw0KCQkJaWYgKFN0cmluZ0hlbHBlcjo6Y2hlY2soJG1haW4pKQ0KCQkJew0KCQkJCSRtYWluID0gJ18nIC4gbHRyaW0oJG1haW4sICdfJyk7DQoJCQl9DQoNCgkJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCg0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgkd2hhdCkpKTsNCg0KCQkJaWYgKGVtcHR5KCR0YWJsZSkpDQoJCQl7DQoJCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX18nIC4gJG1haW4pKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfJyAuICRtYWluIC4gJ18nIC4gJHRhYmxlKSk7DQoJCQl9DQoNCgkJCS8vIGFkZCBzdHJpbmdzIHRvIGFycmF5IHNlYXJjaA0KCQkJaWYgKCdJTl9TVFJJTkdTJyA9PT0gJG9wZXJhdG9yIHx8ICdOT1QgSU5fU1RSSU5HUycgPT09ICRvcGVyYXRvcikNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCR3aGVyZVN0cmluZykgLiAnICcgLiBzdHJfcmVwbGFjZSgnX1NUUklOR1MnLCAnJywgJG9wZXJhdG9yKSAuICcgKCInIC4gaW1wbG9kZSgnIiwiJywgJHdoZXJlKSAuICciKScpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJHdoZXJlU3RyaW5nKSAuICcgJyAuICRvcGVyYXRvciAuICcgKCcgLiBpbXBsb2RlKCcsJywgJHdoZXJlKSAuICcpJyk7DQoJCQl9DQoNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KDQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJaWYgKCR1bmlxdWUpDQoJCQkJew0KCQkJCQlyZXR1cm4gYXJyYXlfdW5pcXVlKCRkYi0+bG9hZENvbHVtbigpKTsNCgkJCQl9DQoJCQkJcmV0dXJuICRkYi0+bG9hZENvbHVtbigpOw0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IGFsbCBzdHJpbmdzIGJldHdlZW4gdHdvIG90aGVyIHN0cmluZ3MNCgkgKiANCgkgKiBAcGFyYW0gIHN0cmluZyAgICAgICAkY29udGVudCAgICBUaGUgY29udGVudCB0byBzZWFyY2gNCgkgKiBAcGFyYW0gIHN0cmluZyAgICAgICAkc3RhcnQgICAgICBUaGUgc3RhcnRpbmcgdmFsdWUNCgkgKiBAcGFyYW0gIHN0cmluZyAgICAgICAkZW5kICAgICAgICBUaGUgZW5kaW5nIHZhbHVlDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsICAgICAgICAgIE9uIHN1Y2Nlc3MNCgkgKiBAc2luY2UgIDMuMC45DQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhbGxCZXR3ZWVuKHN0cmluZyAkY29udGVudCwgc3RyaW5nICRzdGFydCwgc3RyaW5nICRlbmQpOiA/YXJyYXkNCgl7DQoJCS8vIHJlc2V0IGJ1Y2tldA0KCQkkYnVja2V0ID0gW107DQoJCWZvciAoJGkgPSAwOyA7ICRpKyspDQoJCXsNCgkJCS8vIHNlYXJjaCBmb3Igc3RyaW5nDQoJCQkkZm91bmQgPSBzZWxmOjpiZXR3ZWVuKCRjb250ZW50LCAkc3RhcnQsICRlbmQpOw0KDQoJCQlpZiAoU3RyaW5nSGVscGVyOjpjaGVjaygkZm91bmQpKQ0KCQkJew0KCQkJCS8vIGFkZCB0byBidWNrZXQNCgkJCQkkYnVja2V0W10gPSAkZm91bmQ7DQoNCgkJCQkvLyBidWlsZCByZW1vdmFsIHN0cmluZw0KCQkJCSRyZW1vdmUgPSAkc3RhcnQgLiAkZm91bmQgLiAkZW5kOw0KDQoJCQkJLy8gcmVtb3ZlIGZyb20gY29udGVudA0KCQkJCSRjb250ZW50ID0gc3RyX3JlcGxhY2UoJHJlbW92ZSwgJycsICRjb250ZW50KTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlicmVhazsNCgkJCX0NCg0KCQkJLy8gc2FmZXR5IGNhdGNoDQoJCQlpZiAoJGkgPT0gNTAwKQ0KCQkJew0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoNCgkJLy8gb25seSByZXR1cm4gdW5pcXVlIGFycmF5IG9mIHZhbHVlcw0KCQlpZiAoQXJyYXlIZWxwZXI6OmNoZWNrKCRidWNrZXQpKQ0KCQl7DQoJCQlyZXR1cm4gIGFycmF5X3VuaXF1ZSgkYnVja2V0KTsNCgkJfQ0KDQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIGdldCBhIHN0cmluZyBiZXR3ZWVuIHR3byBvdGhlciBzdHJpbmdzDQoJICogDQoJICogQHBhcmFtICBzdHJpbmcgICAgICAgJGNvbnRlbnQgICAgVGhlIGNvbnRlbnQgdG8gc2VhcmNoDQoJICogQHBhcmFtICBzdHJpbmcgICAgICAgJHN0YXJ0ICAgICAgVGhlIHN0YXJ0aW5nIHZhbHVlDQoJICogQHBhcmFtICBzdHJpbmcgICAgICAgJGVuZCAgICAgICAgVGhlIGVuZGluZyB2YWx1ZQ0KCSAqIEBwYXJhbSAgc3RyaW5nICAgICAgICRkZWZhdWx0ICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlmIG5vbmUgZm91bmQNCgkgKg0KCSAqIEByZXR1cm4gIHN0cmluZyAgICAgICAgICBPbiBzdWNjZXNzIC8gZW1wdHkgc3RyaW5nIG9uIGZhaWx1cmUNCgkgKiBAc2luY2UgIDMuMC45DQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBiZXR3ZWVuKHN0cmluZyAkY29udGVudCwgc3RyaW5nICRzdGFydCwgc3RyaW5nICRlbmQsIHN0cmluZyAkZGVmYXVsdCA9ICcnKTogc3RyaW5nDQoJew0KCQkkYXJyYXkgPSBleHBsb2RlKCRzdGFydCwgJGNvbnRlbnQpOw0KCQlpZiAoaXNzZXQoJGFycmF5WzFdKSAmJiBzdHJwb3MoJGFycmF5WzFdLCAkZW5kKSAhPT0gZmFsc2UpDQoJCXsNCgkJCSRhcnJheSA9IGV4cGxvZGUoJGVuZCwgJGFycmF5WzFdKTsNCg0KCQkJLy8gcmV0dXJuIHN0cmluZyBmb3VuZCBiZXR3ZWVuDQoJCQlyZXR1cm4gJGFycmF5WzBdOw0KCQl9DQoNCgkJcmV0dXJuICRkZWZhdWx0Ow0KCX0NCg==', '{\"load_selection0\":{\"load\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\"},\"load_selection1\":{\"load\":\"1f28cb53-60d9-4db1-b517-3c7dc6b429ef\"}}', '{}', '', 1, '2022-03-09 00:21:06', 31, 0, 1), @@ -2165,10 +2165,10 @@ INSERT INTO `#__componentbuilder_power` (`id`, `guid`, `system_name`, `name`, `t (29, 'c4a188de-ad78-4a6d-9d5b-01866846d701', 'JCB.Service.Spreadsheet', 'Spreadsheet', 'class', 'Spreadsheet Service Provider\r\n\r\n@since 5.0.3', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '{\"0\":\"-1\"}', 'ServiceProviderInterface', '[[[NamespacePrefix]]]\\Joomla\\[[[ComponentNamespace]]].Service.Spreadsheet', 1, '{}', '{}', 'dXNlIEpvb21sYVxESVxDb250YWluZXI7DQp1c2UgSm9vbWxhXERJXFNlcnZpY2VQcm92aWRlckludGVyZmFjZTs=', '{\"use_selection0\":{\"use\":\"fd3f322a-082d-4579-93ad-3352c5adfc71\",\"as\":\"default\"},\"use_selection1\":{\"use\":\"e250638e-4a50-41f9-9172-db3e7f174d26\",\"as\":\"default\"},\"use_selection2\":{\"use\":\"c4169332-3914-400e-b861-972b2d465963\",\"as\":\"default\"},\"use_selection3\":{\"use\":\"dcb0e061-f337-44f7-87f2-f5c5fb9ce917\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIFJlZ2lzdGVycyB0aGUgc2VydmljZSBwcm92aWRlciB3aXRoIGEgREkgY29udGFpbmVyLg0KCSAqDQoJICogQHBhcmFtICAgQ29udGFpbmVyICAkY29udGFpbmVyICBUaGUgREkgY29udGFpbmVyLg0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSA1LjAuMw0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiByZWdpc3RlcihDb250YWluZXIgJGNvbnRhaW5lcikNCgl7DQoJCSRjb250YWluZXItPmFsaWFzKEhlYWRlcjo6Y2xhc3MsICdTcHJlYWRzaGVldC5IZWFkZXInKQ0KCQkJLT5zaGFyZSgnU3ByZWFkc2hlZXQuSGVhZGVyJywgWyR0aGlzLCAnZ2V0SGVhZGVyJ10sIHRydWUpOw0KDQoJCSRjb250YWluZXItPmFsaWFzKEV4cG9ydGVyOjpjbGFzcywgJ1NwcmVhZHNoZWV0LkV4cG9ydGVyJykNCgkJCS0+c2hhcmUoJ1NwcmVhZHNoZWV0LkV4cG9ydGVyJywgWyR0aGlzLCAnZ2V0RXhwb3J0ZXInXSwgdHJ1ZSk7DQoNCgkJJGNvbnRhaW5lci0+YWxpYXMoSW1wb3J0ZXI6OmNsYXNzLCAnU3ByZWFkc2hlZXQuSW1wb3J0ZXInKQ0KCQkJLT5zaGFyZSgnU3ByZWFkc2hlZXQuSW1wb3J0ZXInLCBbJHRoaXMsICdnZXRJbXBvcnRlciddLCB0cnVlKTsNCg0KCQkkY29udGFpbmVyLT5hbGlhcyhGaWxlUmVhZGVyOjpjbGFzcywgJ1NwcmVhZHNoZWV0LkZpbGVSZWFkZXInKQ0KCQkJLT5zaGFyZSgnU3ByZWFkc2hlZXQuRmlsZVJlYWRlcicsIFskdGhpcywgJ2dldEZpbGVSZWFkZXInXSwgdHJ1ZSk7DQoJfQ0KDQoJLyoqDQoJICogR2V0IFRoZSBIZWFkZXIgQ2xhc3MuDQoJICoNCgkgKiBAcGFyYW0gICBDb250YWluZXIgICRjb250YWluZXIgIFRoZSBESSBjb250YWluZXIuDQoJICoNCgkgKiBAcmV0dXJuICBIZWFkZXINCgkgKiBAc2luY2UgNS4wLjMNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVyKENvbnRhaW5lciAkY29udGFpbmVyKTogSGVhZGVyDQoJew0KCQlyZXR1cm4gbmV3IEhlYWRlcigpOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBUaGUgRXhwb3J0ZXIgQ2xhc3MuDQoJICoNCgkgKiBAcGFyYW0gICBDb250YWluZXIgICRjb250YWluZXIgIFRoZSBESSBjb250YWluZXIuDQoJICoNCgkgKiBAcmV0dXJuICBFeHBvcnRlcg0KCSAqIEBzaW5jZSA1LjAuMw0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRFeHBvcnRlcihDb250YWluZXIgJGNvbnRhaW5lcik6IEV4cG9ydGVyDQoJew0KCQlyZXR1cm4gbmV3IEV4cG9ydGVyKCk7DQoJfQ0KDQoJLyoqDQoJICogR2V0IFRoZSBJbXBvcnRlciBDbGFzcy4NCgkgKg0KCSAqIEBwYXJhbSAgIENvbnRhaW5lciAgJGNvbnRhaW5lciAgVGhlIERJIGNvbnRhaW5lci4NCgkgKg0KCSAqIEByZXR1cm4gIEltcG9ydGVyDQoJICogQHNpbmNlIDUuMC4zDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEltcG9ydGVyKENvbnRhaW5lciAkY29udGFpbmVyKTogSW1wb3J0ZXINCgl7DQoJCXJldHVybiBuZXcgSW1wb3J0ZXIoDQoJCQkkY29udGFpbmVyLT5nZXQoJ1NwcmVhZHNoZWV0LkZpbGVSZWFkZXInKQ0KCQkpOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBUaGUgRmlsZVJlYWRlciBDbGFzcy4NCgkgKg0KCSAqIEBwYXJhbSAgIENvbnRhaW5lciAgJGNvbnRhaW5lciAgVGhlIERJIGNvbnRhaW5lci4NCgkgKg0KCSAqIEByZXR1cm4gIEZpbGVSZWFkZXINCgkgKiBAc2luY2UgNS4wLjMNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0RmlsZVJlYWRlcihDb250YWluZXIgJGNvbnRhaW5lcik6IEZpbGVSZWFkZXINCgl7DQoJCXJldHVybiBuZXcgRmlsZVJlYWRlcigpOw0KCX0=', '{}', '{}', '', 1, '2022-07-09 10:21:53', 19, 0, 1), (103, '8aef58c1-3f70-4bd4-b9e4-3f29fcd41cff', 'VDM.Interfaces.ModelInterface', 'ModelInterface', 'interface', 'Model Interface\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.ModelInterface', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIFNldCB0aGUgY3VycmVudCBhY3RpdmUgdGFibGUNCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgICR0YWJsZSBUaGUgdGFibGUgdGhhdCBzaG91bGQgYmUgYWN0aXZlDQoJICoNCgkgKiBAcmV0dXJuIHNlbGYNCgkgKiBAc2luY2UgMy4yLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gdGFibGUoc3RyaW5nICR0YWJsZSk6IHNlbGY7DQoNCgkvKioNCgkgKiBNb2RlbCB0aGUgdmFsdWUNCgkgKiAgICAgICAgICBFeGFtcGxlOiAkdGhpcy0+dmFsdWUodmFsdWUsICd2YWx1ZV9rZXknLCAndGFibGVfbmFtZScpOw0KCSAqDQoJICogQHBhcmFtICAgbWl4ZWQgICAgICAgICAgJHZhbHVlICAgIFRoZSB2YWx1ZSB0byBtb2RlbA0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgICAgICRmaWVsZCAgICBUaGUgZmllbGQga2V5DQoJICogQHBhcmFtICAgc3RyaW5nfG51bGwgICAgJHRhYmxlICAgIFRoZSB0YWJsZQ0KCSAqDQoJICogQHJldHVybiAgbWl4ZWQNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gdmFsdWUoJHZhbHVlLCBzdHJpbmcgJGZpZWxkLCA/c3RyaW5nICR0YWJsZSA9IG51bGwpOw0KDQoJLyoqDQoJICogTW9kZWwgYSB2YWx1ZSBvZiBtdWx0aXBsZSBpdGVtcw0KCSAqICAgICAgICAgIEV4YW1wbGU6ICR0aGlzLT5pdGVtcyhBcnJheSwgJ3ZhbHVlX2tleScsICd0YWJsZV9uYW1lJyk7DQoJICoNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAgICRpdGVtcyAgICBUaGUgYXJyYXkgb2YgdmFsdWVzDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICAkZmllbGQgICAgVGhlIGZpZWxkIGtleQ0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAgJHRhYmxlICAgIFRoZSB0YWJsZQ0KCSAqDQoJICogQHJldHVybiAgYXJyYXl8bnVsbA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB2YWx1ZXMoP2FycmF5ICRpdGVtcywgc3RyaW5nICRmaWVsZCwgP3N0cmluZyAkdGFibGUgPSBudWxsKTogP2FycmF5Ow0KDQoJLyoqDQoJICogTW9kZWwgdGhlIHZhbHVlcyBvZiBhbiBpdGVtDQoJICogICAgICAgICAgRXhhbXBsZTogJHRoaXMtPml0ZW0oT2JqZWN0LCAndGFibGVfbmFtZScpOw0KCSAqDQoJICogQHBhcmFtICAgb2JqZWN0fG51bGwgICAgJGl0ZW0gICAgICBUaGUgaXRlbSBvYmplY3QNCgkgKiBAcGFyYW0gICBzdHJpbmd8bnVsbCAgICAkdGFibGUgICAgIFRoZSB0YWJsZQ0KCSAqDQoJICogQHJldHVybiAgb2JqZWN0fG51bGwNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gaXRlbSg/b2JqZWN0ICRpdGVtLCA/c3RyaW5nICR0YWJsZSA9IG51bGwpOiA/b2JqZWN0Ow0KDQoJLyoqDQoJICogTW9kZWwgdGhlIHZhbHVlcyBvZiBtdWx0aXBsZSBpdGVtcw0KCSAqICAgICAgICAgIEV4YW1wbGU6ICR0aGlzLT5pdGVtcyhBcnJheSwgJ3RhYmxlX25hbWUnKTsNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICAgJGl0ZW1zICAgIFRoZSBhcnJheSBvZiBpdGVtIG9iamVjdHMNCgkgKiBAcGFyYW0gICBzdHJpbmd8bnVsbCAgICAkdGFibGUgICAgIFRoZSB0YWJsZQ0KCSAqDQoJICogQHJldHVybiAgYXJyYXl8bnVsbA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBpdGVtcyg/YXJyYXkgJGl0ZW1zID0gbnVsbCwgP3N0cmluZyAkdGFibGUgPSBudWxsKTogP2FycmF5Ow0KDQoJLyoqDQoJICogTW9kZWwgdGhlIHZhbHVlcyBvZiBhbiByb3cNCgkgKiAgICAgICAgICBFeGFtcGxlOiAkdGhpcy0+aXRlbShBcnJheSwgJ3RhYmxlX25hbWUnKTsNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICAgICRpdGVtICAgICAgVGhlIGl0ZW0gYXJyYXkNCgkgKiBAcGFyYW0gICBzdHJpbmd8bnVsbCAgICAkdGFibGUgICAgIFRoZSB0YWJsZQ0KCSAqDQoJICogQHJldHVybiAgYXJyYXl8bnVsbA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiByb3coP2FycmF5ICRpdGVtLCA/c3RyaW5nICR0YWJsZSA9IG51bGwpOiA/YXJyYXk7DQoNCgkvKioNCgkgKiBNb2RlbCB0aGUgdmFsdWVzIG9mIG11bHRpcGxlIHJvd3MNCgkgKiAgICAgICAgICBFeGFtcGxlOiAkdGhpcy0+aXRlbXMoQXJyYXksICd0YWJsZV9uYW1lJyk7DQoJICoNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAgICAkaXRlbXMgICAgVGhlIGFycmF5IG9mIGl0ZW0gYXJyYXkNCgkgKiBAcGFyYW0gICBzdHJpbmd8bnVsbCAgICAkdGFibGUgICAgVGhlIHRhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHJvd3MoP2FycmF5ICRpdGVtcyA9IG51bGwsID9zdHJpbmcgJHRhYmxlID0gbnVsbCk6ID9hcnJheTsNCg0KCS8qKg0KCSAqIEdldCBsYXN0IG1vZGVsZWQgSUQNCgkgKiAgICAgICAgICBFeGFtcGxlOiAkdGhpcy0+bGFzdCgndGFibGVfbmFtZScpOw0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nfG51bGwgICAgICR0YWJsZSAgICAgVGhlIHRhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBpbnR8bnVsbA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBsYXN0KD9zdHJpbmcgJHRhYmxlID0gbnVsbCk6ID9pbnQ7DQoNCgkvKioNCgkgKiBTZXQgdGhlIGN1cnJlbnQgYWN0aXZlIHRhYmxlDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICAgJHRhYmxlTmFtZSAgVGhlIHRhYmxlIG5hbWUNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgMy4yLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gc2V0VGFibGUoc3RyaW5nICR0YWJsZU5hbWUpOiB2b2lkOw0KDQoJLyoqDQoJICogU2V0IHRoZSBzd2l0Y2ggdG8gY29udHJvbCB0aGUgYmVoYXZpb3VyIG9mIGVtcHR5IHZhbHVlcw0KCSAqDQoJICogQHBhcmFtIGJvb2wgICAkYWxsb3dFbXB0eSAgVGhlIHN3aXRjaA0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBzZXRBbGxvd0VtcHR5KGJvb2wgJGFsbG93RW1wdHkpOiB2b2lkOw==', '{}', '{}', '', 1, '2022-09-13 10:05:07', 21, 0, 1), (104, '584747d1-3a86-453d-b7a3-a2219de8d777', 'VDM.Abstraction.Model', 'Model', 'abstract class', 'Base Model\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '{\"0\":\"8aef58c1-3f70-4bd4-b9e4-3f29fcd41cff\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Abstraction.Model', 0, '{}', '{}', '', '{\"use_selection0\":{\"use\":\"1f28cb53-60d9-4db1-b517-3c7dc6b429ef\",\"as\":\"default\"},\"use_selection1\":{\"use\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\",\"as\":\"default\"},\"use_selection2\":{\"use\":\"2da6d6c4-eb29-4d69-8bc2-36d96e916adf\",\"as\":\"Table\"}}', 'CS8qKg0KCSAqIExhc3QgSUQNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwcm90ZWN0ZWQgYXJyYXkgJGxhc3Q7DQoNCgkvKioNCgkgKiBTZWFyY2ggVGFibGUNCgkgKg0KCSAqIEB2YXIgICAgVGFibGUNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwcm90ZWN0ZWQgVGFibGUgJHRhYmxlOw0KDQoJLyoqDQoJICogVGFibGUgTmFtZQ0KCSAqDQoJICogQHZhciAgICBzdHJpbmcNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwcm90ZWN0ZWQgc3RyaW5nICR0YWJsZU5hbWU7DQoNCgkvKioNCgkgKiBUaGUgc3dpdGNoIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW91ciBvZiBlbXB0eSB2YWx1ZXMNCgkgKg0KCSAqIEB2YXIgICAgYm9vbA0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXByb3RlY3RlZCBib29sICRhbGxvd0VtcHR5ID0gdHJ1ZTsNCg0KCS8qKg0KCSAqIENvbnN0cnVjdG9yDQoJICoNCgkgKiBAcGFyYW0gVGFibGUgICAgICAgICAkdGFibGUgICAgICAgIFRoZSBzZWFyY2ggdGFibGUgb2JqZWN0Lg0KCSAqIEBwYXJhbSBzdHJpbmd8bnVsbCAgICR0YWJsZU5hbWUgICAgVGhlIHRhYmxlDQoJICogQHBhcmFtIGJvb2x8bnVsbCAgICAgJGFsbG93RW1wdHkgICBUaGUgc3dpdGNoIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW91ciBvZiBlbXB0eSB2YWx1ZXMgKGRlZmF1bHQgdHJ1ZSkNCgkgKg0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChUYWJsZSAkdGFibGUsID9zdHJpbmcgJHRhYmxlTmFtZSA9IG51bGwsID9ib29sICRhbGxvd0VtcHR5ID0gbnVsbCkNCgl7DQoJCSR0aGlzLT50YWJsZSA9ICR0YWJsZTsNCgkJaWYgKCR0YWJsZU5hbWUgIT09IG51bGwpDQoJCXsNCgkJCSR0aGlzLT5zZXRUYWJsZSgkdGFibGVOYW1lKTsNCgkJfQ0KCQlpZiAoJGFsbG93RW1wdHkgIT09IG51bGwpDQoJCXsNCgkJCSR0aGlzLT5zZXRBbGxvd0VtcHR5KCRhbGxvd0VtcHR5KTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIFNldCB0aGUgY3VycmVudCBhY3RpdmUgdGFibGUNCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlIFRoZSB0YWJsZSB0aGF0IHNob3VsZCBiZSBhY3RpdmUNCgkgKg0KCSAqIEByZXR1cm4gc2VsZg0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB0YWJsZShzdHJpbmcgJHRhYmxlKTogc2VsZg0KCXsNCgkJJHRoaXMtPnNldFRhYmxlKCR0YWJsZSk7DQoNCgkJcmV0dXJuICR0aGlzOw0KCX0NCg0KCS8qKg0KCSAqIE1vZGVsIHRoZSB2YWx1ZQ0KCSAqICAgICAgICAgIEV4YW1wbGU6ICR0aGlzLT52YWx1ZSh2YWx1ZSwgJ3ZhbHVlX2tleScsICd0YWJsZV9uYW1lJyk7DQoJICoNCgkgKiBAcGFyYW0gICBtaXhlZCAgICAgICAgICAkdmFsdWUgICAgVGhlIHZhbHVlIHRvIG1vZGVsDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICAgJGZpZWxkICAgIFRoZSBmaWVsZCBrZXkNCgkgKiBAcGFyYW0gICBzdHJpbmd8bnVsbCAgICAkdGFibGUgICAgVGhlIHRhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBtaXhlZA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiB2YWx1ZSgkdmFsdWUsIHN0cmluZyAkZmllbGQsID9zdHJpbmcgJHRhYmxlID0gbnVsbCk7DQoNCgkvKioNCgkgKiBNb2RlbCBhIHZhbHVlIG9mIG11bHRpcGxlIGl0ZW1zDQoJICogICAgICAgICAgRXhhbXBsZTogJHRoaXMtPnZhbHVlcyhBcnJheSwgJ3ZhbHVlX2tleScsICd0YWJsZV9uYW1lJyk7DQoJICoNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAgICRpdGVtcyAgICBUaGUgYXJyYXkgb2YgdmFsdWVzDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICAkZmllbGQgICAgVGhlIGZpZWxkIGtleQ0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAgJHRhYmxlICAgIFRoZSB0YWJsZQ0KCSAqDQoJICogQHJldHVybiAgYXJyYXl8bnVsbA0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB2YWx1ZXMoP2FycmF5ICRpdGVtcywgc3RyaW5nICRmaWVsZCwgP3N0cmluZyAkdGFibGUgPSBudWxsKTogP2FycmF5DQoJew0KCQkvLyBjaGVjayBpZiB0aGlzIGlzIGEgdmFsaWQgdGFibGUNCgkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkaXRlbXMpKQ0KCQl7DQoJCQkvLyBzZXQgdGhlIHRhYmxlIG5hbWUNCgkJCWlmIChlbXB0eSgkdGFibGUpKQ0KCQkJew0KCQkJCSR0YWJsZSA9ICR0aGlzLT5nZXRUYWJsZSgpOw0KCQkJfQ0KDQoJCQkvLyB2YWxpZGF0ZSBpZiBmaWVsZCBleGlzdCBpbiB0YWJsZQ0KCQkJaWYgKCEkdGhpcy0+dGFibGUtPmV4aXN0KCR0YWJsZSwgJGZpZWxkKSkNCgkJCXsNCgkJCQlyZXR1cm4gbnVsbDsNCgkJCX0NCg0KCQkJLy8gdmFsdWUgY291bnRlcg0KCQkJJHZhbHVlX251bWJlciA9IDA7DQoNCgkJCS8vIGNoZWNrIGlmIHRoaXMgaXMgYSB2YWxpZCB0YWJsZQ0KCQkJJGl0ZW1fYnVja2V0ID0gW107DQoNCgkJCWZvcmVhY2ggKCRpdGVtcyBhcyAkdmFsdWUpDQoJCQl7DQoJCQkJaWYgKCEkdGhpcy0+dmFsaWRhdGVCZWZvcmUoJHZhbHVlLCAkZmllbGQsICR0YWJsZSkpDQoJCQkJew0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoNCgkJCQkkdmFsdWUgPSAkdGhpcy0+dmFsdWUoJHZhbHVlLCAkZmllbGQsICR0YWJsZSk7DQoNCgkJCQlpZiAoISR0aGlzLT52YWxpZGF0ZUFmdGVyKCR2YWx1ZSwgJGZpZWxkLCAkdGFibGUpKQ0KCQkJCXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KDQoJCQkJJGl0ZW1fYnVja2V0W10gPSAkdmFsdWU7DQoNCgkJCQkkdmFsdWVfbnVtYmVyKys7DQoJCQl9DQoNCgkJCS8vIGRvIHdlIGhhdmUgYW55IHZhbHVlcyBsZWZ0DQoJCQlpZiAoJHZhbHVlX251bWJlciA+IDApDQoJCQl7DQoJCQkJcmV0dXJuICRpdGVtX2J1Y2tldDsNCgkJCX0NCgkJfQ0KDQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIE1vZGVsIHRoZSB2YWx1ZXMgb2YgYW4gaXRlbQ0KCSAqICAgICAgICAgIEV4YW1wbGU6ICR0aGlzLT5pdGVtKE9iamVjdCwgJ3RhYmxlX25hbWUnKTsNCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdHxudWxsICAgICRpdGVtICAgICAgVGhlIGl0ZW0gb2JqZWN0DQoJICogQHBhcmFtICAgc3RyaW5nfG51bGwgICAgJHRhYmxlICAgICBUaGUgdGFibGUNCgkgKg0KCSAqIEByZXR1cm4gIG9iamVjdHxudWxsDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGl0ZW0oP29iamVjdCAkaXRlbSwgP3N0cmluZyAkdGFibGUgPSBudWxsKTogP29iamVjdA0KCXsNCgkJLy8gd2UgbXVzdCBoYXZlIGFuIG9iamVjdA0KCQlpZiAoZW1wdHkoJGl0ZW0pKQ0KCQl7DQoJCQlyZXR1cm4gbnVsbDsNCgkJfQ0KDQoJCS8vIHNldCB0aGUgdGFibGUgbmFtZQ0KCQlpZiAoZW1wdHkoJHRhYmxlKSkNCgkJew0KCQkJJHRhYmxlID0gJHRoaXMtPmdldFRhYmxlKCk7DQoJCX0NCg0KCQlpZiAoKCRmaWVsZHMgPSAkdGhpcy0+Z2V0VGFibGVGaWVsZHMoJHRhYmxlLCB0cnVlKSkgIT09IG51bGwpDQoJCXsNCgkJCS8vIGZpZWxkIGNvdW50ZXINCgkJCSRmaWVsZF9udW1iZXIgPSAwOw0KDQoJCQkvLyBjaGVjayBpZiB0aGlzIGlzIGEgdmFsaWQgdGFibGUNCgkJCSRpdGVtX2J1Y2tldCA9IG5ldyBcc3RkQ2xhc3MoKTsNCg0KCQkJZm9yZWFjaCAoJGZpZWxkcyBhcyAkZmllbGQpDQoJCQl7DQoJCQkJLy8gbW9kZWwgYSB2YWx1ZSBpZiBpdCBleGlzdHMNCgkJCQlpZihpc3NldCgkaXRlbS0+eyRmaWVsZH0pKQ0KCQkJCXsNCgkJCQkJaWYgKCEkdGhpcy0+dmFsaWRhdGVCZWZvcmUoJGl0ZW0tPnskZmllbGR9LCAkZmllbGQsICR0YWJsZSkpDQoJCQkJCXsNCgkJCQkJCWNvbnRpbnVlOw0KCQkJCQl9DQoNCgkJCQkJJGl0ZW0tPnskZmllbGR9ID0gJHRoaXMtPnZhbHVlKCRpdGVtLT57JGZpZWxkfSwgJGZpZWxkLCAkdGFibGUpOw0KDQoJCQkJCWlmICghJHRoaXMtPnZhbGlkYXRlQWZ0ZXIoJGl0ZW0tPnskZmllbGR9LCAkZmllbGQsICR0YWJsZSkpDQoJCQkJCXsNCgkJCQkJCWNvbnRpbnVlOw0KCQkJCQl9DQoNCgkJCQkJJGl0ZW1fYnVja2V0LT57JGZpZWxkfSA9ICRpdGVtLT57JGZpZWxkfTsNCg0KCQkJCQkkZmllbGRfbnVtYmVyKys7DQoJCQkJfQ0KCQkJfQ0KDQoJCQkvLyBhbGwgaXRlbXMgbXVzdCBoYXZlIG1vcmUgdGhhbiBvbmUgZmllbGQgb3IgaXRzIGVtcHR5ICgxID0ga2V5KQ0KCQkJaWYgKCRmaWVsZF9udW1iZXIgPiAxKQ0KCQkJew0KCQkJCXJldHVybiAkaXRlbV9idWNrZXQ7DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBNb2RlbCB0aGUgdmFsdWVzIG9mIG11bHRpcGxlIGl0ZW1zDQoJICogICAgICAgICAgRXhhbXBsZTogJHRoaXMtPml0ZW1zKEFycmF5LCAndGFibGVfbmFtZScpOw0KCSAqDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICAkaXRlbXMgICAgVGhlIGFycmF5IG9mIGl0ZW0gb2JqZWN0cw0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAgICR0YWJsZSAgICAgVGhlIHRhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGl0ZW1zKD9hcnJheSAkaXRlbXMgPSBudWxsLCA/c3RyaW5nICR0YWJsZSA9IG51bGwpOiA/YXJyYXkNCgl7DQoJCS8vIGNoZWNrIGlmIHRoaXMgaXMgYSB2YWxpZCB0YWJsZQ0KCQlpZiAoQXJyYXlIZWxwZXI6OmNoZWNrKCRpdGVtcykpDQoJCXsNCgkJCS8vIHNldCB0aGUgdGFibGUgbmFtZQ0KCQkJaWYgKGVtcHR5KCR0YWJsZSkpDQoJCQl7DQoJCQkJJHRhYmxlID0gJHRoaXMtPmdldFRhYmxlKCk7DQoJCQl9DQoNCgkJCWZvcmVhY2ggKCRpdGVtcyBhcyAkaWQgPT4gJiRpdGVtKQ0KCQkJew0KCQkJCS8vIG1vZGVsIHRoZSBpdGVtDQoJCQkJaWYgKCgkaXRlbSA9ICR0aGlzLT5pdGVtKCRpdGVtLCAkdGFibGUpKSAhPT0gbnVsbCkNCgkJCQl7DQoJCQkJCS8vIGFkZCB0aGUgbGFzdCBJRA0KCQkJCQkkdGhpcy0+bGFzdFskdGFibGVdID0gJGl0ZW0tPmlkID8/ICR0aGlzLT5sYXN0WyR0YWJsZV0gPz8gbnVsbDsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJdW5zZXQoJGl0ZW1zWyRpZF0pOw0KCQkJCX0NCgkJCX0NCg0KCQkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkaXRlbXMpKQ0KCQkJew0KCQkJCXJldHVybiAkaXRlbXM7DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBNb2RlbCB0aGUgdmFsdWVzIG9mIGFuIHJvdw0KCSAqICAgICAgICAgIEV4YW1wbGU6ICR0aGlzLT5pdGVtKEFycmF5LCAndGFibGVfbmFtZScpOw0KCSAqDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICAgJGl0ZW0gICAgICBUaGUgaXRlbSBhcnJheQ0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAgICR0YWJsZSAgICAgVGhlIHRhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHJvdyg/YXJyYXkgJGl0ZW0sID9zdHJpbmcgJHRhYmxlID0gbnVsbCk6ID9hcnJheQ0KCXsNCgkJLy8gd2UgbXVzdCBoYXZlIGFuIGFycmF5DQoJCWlmIChlbXB0eSgkaXRlbSkpDQoJCXsNCgkJCXJldHVybiBudWxsOw0KCQl9DQoNCgkJLy8gc2V0IHRoZSB0YWJsZSBuYW1lDQoJCWlmIChlbXB0eSgkdGFibGUpKQ0KCQl7DQoJCQkkdGFibGUgPSAkdGhpcy0+Z2V0VGFibGUoKTsNCgkJfQ0KDQoJCWlmICgoJGZpZWxkcyA9ICR0aGlzLT5nZXRUYWJsZUZpZWxkcygkdGFibGUsIHRydWUpKSAhPT0gbnVsbCkNCgkJew0KCQkJLy8gZmllbGQgY291bnRlcg0KCQkJJGZpZWxkX251bWJlciA9IDA7DQoNCgkJCS8vIGNoZWNrIGlmIHRoaXMgaXMgYSB2YWxpZCB0YWJsZQ0KCQkJJGl0ZW1fYnVja2V0ID0gW107DQoNCgkJCWZvcmVhY2ggKCRmaWVsZHMgYXMgJGZpZWxkKQ0KCQkJew0KCQkJCS8vIG1vZGVsIGEgdmFsdWUgaWYgaXQgZXhpc3RzDQoJCQkJaWYoaXNzZXQoJGl0ZW1bJGZpZWxkXSkpDQoJCQkJew0KCQkJCQlpZiAoISR0aGlzLT52YWxpZGF0ZUJlZm9yZSgkaXRlbVskZmllbGRdLCAkZmllbGQsICR0YWJsZSkpDQoJCQkJCXsNCgkJCQkJCWNvbnRpbnVlOw0KCQkJCQl9DQoNCgkJCQkJJGl0ZW1bJGZpZWxkXSA9ICR0aGlzLT52YWx1ZSgkaXRlbVskZmllbGRdLCAkZmllbGQsICR0YWJsZSk7DQoNCgkJCQkJaWYgKCEkdGhpcy0+dmFsaWRhdGVBZnRlcigkaXRlbVskZmllbGRdLCAkZmllbGQsICR0YWJsZSkpDQoJCQkJCXsNCgkJCQkJCWNvbnRpbnVlOw0KCQkJCQl9DQoNCgkJCQkJJGl0ZW1fYnVja2V0WyRmaWVsZF0gPSAkaXRlbVskZmllbGRdOw0KDQoJCQkJCSRmaWVsZF9udW1iZXIrKzsNCgkJCQl9DQoJCQl9DQoNCgkJCS8vIGFsbCBpdGVtcyBtdXN0IGhhdmUgbW9yZSB0aGFuIG9uZSBmaWVsZCBvciBpdHMgZW1wdHkgKDEgPSBpZCBvciBndWlkKQ0KCQkJaWYgKCRmaWVsZF9udW1iZXIgPiAxKQ0KCQkJew0KCQkJCXJldHVybiAkaXRlbV9idWNrZXQ7DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBNb2RlbCB0aGUgdmFsdWVzIG9mIG11bHRpcGxlIHJvd3MNCgkgKiAgICAgICAgICBFeGFtcGxlOiAkdGhpcy0+aXRlbXMoQXJyYXksICd0YWJsZV9uYW1lJyk7DQoJICoNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAgICAkaXRlbXMgICAgVGhlIGFycmF5IG9mIGl0ZW0gYXJyYXkNCgkgKiBAcGFyYW0gICBzdHJpbmd8bnVsbCAgICAkdGFibGUgICAgVGhlIHRhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHJvd3MoP2FycmF5ICRpdGVtcyA9IG51bGwsID9zdHJpbmcgJHRhYmxlID0gbnVsbCk6ID9hcnJheQ0KCXsNCgkJLy8gY2hlY2sgaWYgdGhpcyBpcyBhIHZhbGlkIHRhYmxlDQoJCWlmIChBcnJheUhlbHBlcjo6Y2hlY2soJGl0ZW1zKSkNCgkJew0KCQkJLy8gc2V0IHRoZSB0YWJsZSBuYW1lDQoJCQlpZiAoZW1wdHkoJHRhYmxlKSkNCgkJCXsNCgkJCQkkdGFibGUgPSAkdGhpcy0+Z2V0VGFibGUoKTsNCgkJCX0NCg0KCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpZCA9PiAmJGl0ZW0pDQoJCQl7DQoJCQkJLy8gbW9kZWwgdGhlIGl0ZW0NCgkJCQlpZiAoKCRpdGVtID0gJHRoaXMtPnJvdygkaXRlbSwgJHRhYmxlKSkgIT09IG51bGwpDQoJCQkJew0KCQkJCQkvLyBhZGQgdGhlIGxhc3QgSUQNCgkJCQkJJHRoaXMtPmxhc3RbJHRhYmxlXSA9ICRpdGVtWydpZCddID8/ICR0aGlzLT5sYXN0WyR0YWJsZV0gPz8gbnVsbDsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJdW5zZXQoJGl0ZW1zWyRpZF0pOw0KCQkJCX0NCgkJCX0NCg0KCQkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkaXRlbXMpKQ0KCQkJew0KCQkJCXJldHVybiAkaXRlbXM7DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBHZXQgbGFzdCBtb2RlbGVkIElEDQoJICogICAgICAgICAgRXhhbXBsZTogJHRoaXMtPmxhc3QoJ3RhYmxlX25hbWUnKTsNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAgICAkdGFibGUgICAgIFRoZSB0YWJsZQ0KCSAqDQoJICogQHJldHVybiAgaW50fG51bGwNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gbGFzdCg/c3RyaW5nICR0YWJsZSA9IG51bGwpOiA/aW50DQoJew0KCQkvLyBzZXQgdGhlIHRhYmxlIG5hbWUNCgkJaWYgKGVtcHR5KCR0YWJsZSkpDQoJCXsNCgkJCSR0YWJsZSA9ICR0aGlzLT5nZXRUYWJsZSgpOw0KCQl9DQoNCgkJLy8gY2hlY2sgaWYgdGhpcyBpcyBhIHZhbGlkIHRhYmxlDQoJCWlmICgkdGFibGUgJiYgaXNzZXQoJHRoaXMtPmxhc3RbJHRhYmxlXSkpDQoJCXsNCgkJCXJldHVybiAkdGhpcy0+bGFzdFskdGFibGVdOw0KCQl9DQoNCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJLyoqDQoJICogU2V0IHRoZSBjdXJyZW50IGFjdGl2ZSB0YWJsZQ0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAgICR0YWJsZU5hbWUgIFRoZSB0YWJsZSBuYW1lDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHNldFRhYmxlKHN0cmluZyAkdGFibGVOYW1lKTogdm9pZA0KCXsNCgkJJHRoaXMtPnRhYmxlTmFtZSA9ICR0YWJsZU5hbWU7DQoJfQ0KDQoJLyoqDQoJICogU2V0IHRoZSBzd2l0Y2ggdG8gY29udHJvbCB0aGUgYmVoYXZpb3VyIG9mIGVtcHR5IHZhbHVlcw0KCSAqDQoJICogQHBhcmFtIGJvb2wgICAkYWxsb3dFbXB0eSAgVGhlIHN3aXRjaA0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBzZXRBbGxvd0VtcHR5KGJvb2wgJGFsbG93RW1wdHkpOiB2b2lkDQoJew0KCQkkdGhpcy0+YWxsb3dFbXB0eSA9ICRhbGxvd0VtcHR5Ow0KCX0NCg0KCS8qKg0KCSAqIEdldCB0aGUgY3VycmVudCBhY3RpdmUgdGFibGUNCgkgKg0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRUYWJsZSgpOiBzdHJpbmcNCgl7DQoJCXJldHVybiAkdGhpcy0+dGFibGVOYW1lOw0KCX0NCg0KCS8qKg0KCSAqIEdldCB0aGUgc3dpdGNoIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW91ciBvZiBlbXB0eSB2YWx1ZXMNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgMy4yLjINCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWxsb3dFbXB0eSgpOiBib29sDQoJew0KCQlyZXR1cm4gJHRoaXMtPmFsbG93RW1wdHk7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSBjdXJyZW50IGFjdGl2ZSB0YWJsZSdzIGZpZWxkcyAoaW5jbHVkaW5nIGRlZmF1bHRzKQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAkdGFibGUgICAgIFRoZSBhcmVhDQoJICogQHBhcmFtICAgYm9vbCAgICAkZGVmYXVsdCAgIEFkZCB0aGUgZGVmYXVsdCBmaWVsZHMNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5DQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFRhYmxlRmllbGRzKHN0cmluZyAkdGFibGUsIGJvb2wgJGRlZmF1bHQgPSBmYWxzZSk6ID9hcnJheQ0KCXsNCgkJcmV0dXJuICR0aGlzLT50YWJsZS0+ZmllbGRzKCR0YWJsZSwgJGRlZmF1bHQpOw0KCX0NCg0KCS8qKg0KCSAqIFZhbGlkYXRlIGJlZm9yZSB0aGUgdmFsdWUgaXMgbW9kZWxsZWQgKGJhc2ljLCBvdmVycmlkZSBpbiBjaGlsZCBjbGFzcykNCgkgKg0KCSAqIEBwYXJhbSAgIG1peGVkICAgICAgICAgJHZhbHVlICAgVGhlIGZpZWxkIHZhbHVlDQoJICogQHBhcmFtICAgc3RyaW5nfG51bGwgICAkZmllbGQgICAgIFRoZSBmaWVsZCBrZXkNCgkgKiBAcGFyYW0gICBzdHJpbmd8bnVsbCAgICR0YWJsZSAgIFRoZSB0YWJsZQ0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCWFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiB2YWxpZGF0ZUJlZm9yZSgmJHZhbHVlLCA/c3RyaW5nICRmaWVsZCA9IG51bGwsID9zdHJpbmcgJHRhYmxlID0gbnVsbCk6IGJvb2w7DQoNCgkvKioNCgkgKiBWYWxpZGF0ZSBhZnRlciB0aGUgdmFsdWUgaXMgbW9kZWxsZWQgKGJhc2ljLCBvdmVycmlkZSBpbiBjaGlsZCBjbGFzcykNCgkgKg0KCSAqIEBwYXJhbSAgIG1peGVkICAgICAgICAgJHZhbHVlICAgVGhlIGZpZWxkIHZhbHVlDQoJICogQHBhcmFtICAgc3RyaW5nfG51bGwgICAkZmllbGQgICAgIFRoZSBmaWVsZCBrZXkNCgkgKiBAcGFyYW0gICBzdHJpbmd8bnVsbCAgICR0YWJsZSAgIFRoZSB0YWJsZQ0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCWFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiB2YWxpZGF0ZUFmdGVyKCYkdmFsdWUsID9zdHJpbmcgJGZpZWxkID0gbnVsbCwgP3N0cmluZyAkdGFibGUgPSBudWxsKTogYm9vbDs=', '{}', '{}', '{\"source\":{\"1a1b6f3d-f16c-431a-b270-7a8a80cc7f56-settings\":\"d0e288fa06bf1fb2326fc7508dd27bc2070e448e\",\"1a1b6f3d-f16c-431a-b270-7a8a80cc7f56-power\":\"dc2d8b985257c2ce09e4328112e9c8a70eb5e184\",\"1a1b6f3d-f16c-431a-b270-7a8a80cc7f56-readme\":\"3ad9612244d57ddd86f59f97436493e06b5ea6df\"}}', 1, '2022-09-13 10:05:47', 55, 0, 1), -(124, '06f8eada-d59b-441c-b287-0aea1793da5a', 'VDM.Database.Load', 'Load', 'final class', 'Database Load\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', '6cbef8f8-4813-48e3-b05a-65e1aea95171', '', '', '', '{\"0\":\"2ad31f74-f579-499d-b98b-c4f54fd615dd\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Database.Load', 0, '{}', '{}', '', '{\"use_selection0\":{\"use\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIExvYWQgZGF0YSByb3dzIGFzIGFuIGFycmF5IG9mIGFzc29jaWF0ZWQgYXJyYXlzDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICR0YWJsZXMgICBBcnJheSBvZiB0YWJsZXMgdG8gc2VhcmNoDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICR3aGVyZSAgICBBcnJheSBvZiB3aGVyZSBrZXk9PnZhbHVlIG1hdGNoIGV4aXN0DQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICRvcmRlciAgICBBcnJheSBvZiBob3cgdG8gb3JkZXIgdGhlIGRhdGENCgkgKiBAcGFyYW0gICBpbnR8bnVsbCAgICAgJGxpbWl0ICAgIExpbWl0IHRoZSBudW1iZXIgb2YgdmFsdWVzIHJldHVybmVkDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHJvd3MoYXJyYXkgJHNlbGVjdCwgYXJyYXkgJHRhYmxlcywgP2FycmF5ICR3aGVyZSA9IG51bGwsDQoJCT9hcnJheSAkb3JkZXIgPSBudWxsLCA/aW50ICRsaW1pdCA9IG51bGwpOiA/YXJyYXkNCgl7DQoJCS8vIHNldCBrZXkgaWYgZm91bmQNCgkJJGtleSA9ICR0aGlzLT5nZXRLZXkoJHNlbGVjdCk7DQoNCgkJLy8gY2hlY2sgaWYgd2UgY2FuIGdldCBtYW55IHJvd3MNCgkJaWYgKCR0aGlzLT5tYW55KCRzZWxlY3QsICR0YWJsZXMsICR3aGVyZSwgJG9yZGVyLCAkbGltaXQpKQ0KCQl7DQoJCQkvLyByZXR1cm4gYXNzb2NpYXRlZCBhcnJheXMgZnJvbSB0aGUgdGFibGUgcmVjb3Jkcw0KCQkJcmV0dXJuICR0aGlzLT5kYi0+bG9hZEFzc29jTGlzdCgka2V5KTsNCgkJfQ0KDQoJCS8vIGRhdGEgZG9lcyBub3QgZXhpc3QNCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJLyoqDQoJICogTG9hZCBkYXRhIHJvd3MgYXMgYW4gYXJyYXkgb2Ygb2JqZWN0cw0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICRzZWxlY3QgICBBcnJheSBvZiBzZWxlY3Rpb24ga2V5cw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAkdGFibGVzICAgQXJyYXkgb2YgdGFibGVzIHRvIHNlYXJjaA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICAkd2hlcmUgICAgQXJyYXkgb2Ygd2hlcmUga2V5PT52YWx1ZSBtYXRjaCBleGlzdA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICAkb3JkZXIgICAgQXJyYXkgb2YgaG93IHRvIG9yZGVyIHRoZSBkYXRhDQoJICogQHBhcmFtICAgaW50fG51bGwgICAgICRsaW1pdCAgICBMaW1pdCB0aGUgbnVtYmVyIG9mIHZhbHVlcyByZXR1cm5lZA0KCSAqDQoJICogQHJldHVybiAgYXJyYXl8bnVsbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBpdGVtcyhhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwNCgkJP2FycmF5ICRvcmRlciA9IG51bGwsID9pbnQgJGxpbWl0ID0gbnVsbCk6ID9hcnJheQ0KCXsNCgkJLy8gc2V0IGtleSBpZiBmb3VuZA0KCQkka2V5ID0gJHRoaXMtPmdldEtleSgkc2VsZWN0KTsNCg0KCQkvLyBjaGVjayBpZiB3ZSBjYW4gZ2V0IG1hbnkgcm93cw0KCQlpZiAoJHRoaXMtPm1hbnkoJHNlbGVjdCwgJHRhYmxlcywgJHdoZXJlLCAkb3JkZXIsICRsaW1pdCkpDQoJCXsNCgkJCS8vIHJldHVybiBhc3NvY2lhdGVkIGFycmF5cyBmcm9tIHRoZSB0YWJsZSByZWNvcmRzDQoJCQlyZXR1cm4gJHRoaXMtPmRiLT5sb2FkT2JqZWN0TGlzdCgka2V5KTsNCgkJfQ0KDQoJCS8vIGRhdGEgZG9lcyBub3QgZXhpc3QNCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJLyoqDQoJICogTG9hZCBkYXRhIHJvdyBhcyBhbiBhc3NvY2lhdGVkIGFycmF5DQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgJHRhYmxlcyAgQXJyYXkgb2YgdGFibGVzIHRvIHNlYXJjaA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICR3aGVyZSAgIEFycmF5IG9mIHdoZXJlIGtleT0+dmFsdWUgbWF0Y2ggZXhpc3QNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkb3JkZXIgICAgQXJyYXkgb2YgaG93IHRvIG9yZGVyIHRoZSBkYXRhDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHJvdyhhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwgP2FycmF5ICRvcmRlciA9IG51bGwpOiA/YXJyYXkNCgl7DQoJCS8vIGNoZWNrIGlmIHdlIGNhbiBnZXQgb25lIHJvdw0KCQlpZiAoJHRoaXMtPm9uZSgkc2VsZWN0LCAkdGFibGVzLCAkd2hlcmUsICRvcmRlcikpDQoJCXsNCgkJCXJldHVybiAkdGhpcy0+ZGItPmxvYWRBc3NvYygpOw0KCQl9DQoNCgkJLy8gZGF0YSBkb2VzIG5vdCBleGlzdA0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBMb2FkIGRhdGEgcm93IGFzIGFuIG9iamVjdA0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICRzZWxlY3QgICBBcnJheSBvZiBzZWxlY3Rpb24ga2V5cw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICR0YWJsZXMgIEFycmF5IG9mIHRhYmxlcyB0byBzZWFyY2gNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkd2hlcmUgICBBcnJheSBvZiB3aGVyZSBrZXk9PnZhbHVlIG1hdGNoIGV4aXN0DQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgJG9yZGVyICAgIEFycmF5IG9mIGhvdyB0byBvcmRlciB0aGUgZGF0YQ0KCSAqDQoJICogQHJldHVybiAgb2JqZWN0fG51bGwNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gaXRlbShhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwgP2FycmF5ICRvcmRlciA9IG51bGwpOiA/b2JqZWN0DQoJew0KCQkvLyBjaGVjayBpZiB3ZSBjYW4gZ2V0IG9uZSByb3cNCgkJaWYgKCR0aGlzLT5vbmUoJHNlbGVjdCwgJHRhYmxlcywgJHdoZXJlLCAkb3JkZXIpKQ0KCQl7DQoJCQlyZXR1cm4gJHRoaXMtPmRiLT5sb2FkT2JqZWN0KCk7DQoJCX0NCg0KCQkvLyBkYXRhIGRvZXMgbm90IGV4aXN0DQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIEdldCB0aGUgbWF4IHZhbHVlIGJhc2VkIG9uIGEgZmlsdGVyZWQgcmVzdWx0IGZyb20gYSBnaXZlbiB0YWJsZQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAkZmllbGQgICAgIFRoZSBmaWVsZCBrZXkNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICR0YWJsZXMgICAgVGhlIHRhYmxlcw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgJGZpbHRlciAgICBUaGUgZmlsdGVyIGtleXMNCgkgKg0KCSAqIEByZXR1cm4gIGludHxudWxsDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIG1heCgkZmllbGQsIGFycmF5ICR0YWJsZXMsIGFycmF5ICRmaWx0ZXIpOiA/aW50DQoJew0KCQlpZiAoKCR0YWJsZXMgPSAkdGhpcy0+bm9ybWFsaXplVGFibGVzKCR0YWJsZXMpKSA9PT0gbnVsbCkNCgkJew0KCQkJcmV0dXJuIG51bGw7DQoJCX0NCg0KCQkvLyBnZXQgdGhlIHF1ZXJ5DQoJCSRxdWVyeSA9ICR0aGlzLT5xdWVyeShbImFsbCIgPT4gIk1BWChgJGZpZWxkYCkiXSwgJHRhYmxlcywgJGZpbHRlcik7DQoNCgkJLy8gTG9hZCB0aGUgbWF4IG51bWJlcg0KCQkkdGhpcy0+ZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSR0aGlzLT5kYi0+ZXhlY3V0ZSgpOw0KDQoJCS8vIGNoZWNrIGlmIHdlIGhhdmUgdmFsdWVzDQoJCWlmICgkdGhpcy0+ZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuIChpbnQpICR0aGlzLT5kYi0+bG9hZFJlc3VsdCgpOw0KCQl9DQoNCgkJLy8gZGF0YSBkb2VzIG5vdCBleGlzdA0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGl0ZW1zIGJhc2VkIG9uIGZpbHRlciByZXN1bHQgZnJvbSBhIGdpdmVuIHRhYmxlDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICR0YWJsZXMgICAgVGhlIHRhYmxlDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAkZmlsdGVyICAgIFRoZSBmaWx0ZXIga2V5cw0KCSAqDQoJICogQHJldHVybiAgaW50fG51bGwNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gY291bnQoYXJyYXkgJHRhYmxlcywgYXJyYXkgJGZpbHRlcik6ID9pbnQNCgl7DQoJCWlmICgoJHRhYmxlcyA9ICR0aGlzLT5ub3JtYWxpemVUYWJsZXMoJHRhYmxlcykpID09PSBudWxsKQ0KCQl7DQoJCQlyZXR1cm4gbnVsbDsNCgkJfQ0KDQoJCS8vIGdldCB0aGUgcXVlcnkNCgkJJHF1ZXJ5ID0gJHRoaXMtPnF1ZXJ5KFsiYWxsIiA9PiAnQ09VTlQoKiknXSwgJHRhYmxlcywgJGZpbHRlcik7DQoNCgkJLy8gTG9hZCB0aGUgbWF4IG51bWJlcg0KCQkkdGhpcy0+ZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSR0aGlzLT5kYi0+ZXhlY3V0ZSgpOw0KDQoJCS8vIGNoZWNrIGlmIHdlIGhhdmUgdmFsdWVzDQoJCWlmICgkdGhpcy0+ZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuIChpbnQpICR0aGlzLT5kYi0+bG9hZFJlc3VsdCgpOw0KCQl9DQoNCgkJLy8gZGF0YSBkb2VzIG5vdCBleGlzdA0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBMb2FkIG9uZSB2YWx1ZSBmcm9tIGEgcm93DQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgJHRhYmxlcyAgQXJyYXkgb2YgdGFibGVzIHRvIHNlYXJjaA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICR3aGVyZSAgIEFycmF5IG9mIHdoZXJlIGtleT0+dmFsdWUgbWF0Y2ggZXhpc3QNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkb3JkZXIgICAgQXJyYXkgb2YgaG93IHRvIG9yZGVyIHRoZSBkYXRhDQoJICoNCgkgKiBAcmV0dXJuICBtaXhlZA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiB2YWx1ZShhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwgP2FycmF5ICRvcmRlciA9IG51bGwpDQoJew0KCQkvLyBjaGVjayBpZiB3ZSBjYW4gZ2V0IG9uZSB2YWx1ZQ0KCQlpZiAoJHRoaXMtPm9uZSgkc2VsZWN0LCAkdGFibGVzLCAkd2hlcmUsICRvcmRlcikpDQoJCXsNCgkJCXJldHVybiAkdGhpcy0+ZGItPmxvYWRSZXN1bHQoKTsNCgkJfQ0KDQoJCS8vIGRhdGEgZG9lcyBub3QgZXhpc3QNCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJLyoqDQoJICogTG9hZCB2YWx1ZXMgZnJvbSBtdWx0aXBsZSByb3dzDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICR0YWJsZXMgICBBcnJheSBvZiB0YWJsZXMgdG8gc2VhcmNoDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICR3aGVyZSAgICBBcnJheSBvZiB3aGVyZSBrZXk9PnZhbHVlIG1hdGNoIGV4aXN0DQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICRvcmRlciAgICBBcnJheSBvZiBob3cgdG8gb3JkZXIgdGhlIGRhdGENCgkgKiBAcGFyYW0gICBpbnR8bnVsbCAgICAgJGxpbWl0ICAgIExpbWl0IHRoZSBudW1iZXIgb2YgdmFsdWVzIHJldHVybmVkDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlICAgMy4yLjINCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHZhbHVlcyhhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwNCgkJP2FycmF5ICRvcmRlciA9IG51bGwsID9pbnQgJGxpbWl0ID0gbnVsbCk6ID9hcnJheQ0KCXsNCgkJLy8gY2hlY2sgaWYgd2UgY2FuIGdldCBtYW55IHJvd3MNCgkJaWYgKCR0aGlzLT5tYW55KCRzZWxlY3QsICR0YWJsZXMsICR3aGVyZSwgJG9yZGVyLCAkbGltaXQpKQ0KCQl7DQoJCQlyZXR1cm4gJHRoaXMtPmRiLT5sb2FkQ29sdW1uKCk7DQoJCX0NCg0KCQkvLyBkYXRhIGRvZXMgbm90IGV4aXN0DQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIExvYWQgbWFueQ0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICRzZWxlY3QgICBBcnJheSBvZiBzZWxlY3Rpb24ga2V5cw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAkdGFibGVzICAgQXJyYXkgb2YgdGFibGVzIHRvIHNlYXJjaA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICAkd2hlcmUgICAgQXJyYXkgb2Ygd2hlcmUga2V5PT52YWx1ZSBtYXRjaCBleGlzdA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICAkb3JkZXIgICAgQXJyYXkgb2YgaG93IHRvIG9yZGVyIHRoZSBkYXRhDQoJICogQHBhcmFtICAgaW50fG51bGwgICAgICRsaW1pdCAgICBMaW1pdCB0aGUgbnVtYmVyIG9mIHZhbHVlcyByZXR1cm5lZA0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBtYW55KGFycmF5ICRzZWxlY3QsIGFycmF5ICR0YWJsZXMsID9hcnJheSAkd2hlcmUgPSBudWxsLA0KCQk/YXJyYXkgJG9yZGVyID0gbnVsbCwgP2ludCAkbGltaXQgPSBudWxsKTogYm9vbA0KCXsNCgkJaWYgKCgkdGFibGVzID0gJHRoaXMtPm5vcm1hbGl6ZVRhYmxlcygkdGFibGVzKSkgPT09IG51bGwpDQoJCXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCS8vIGdldCB0aGUgcXVlcnkNCgkJJHF1ZXJ5ID0gJHRoaXMtPnF1ZXJ5KCRzZWxlY3QsICR0YWJsZXMsICR3aGVyZSwgJG9yZGVyLCAkbGltaXQpOw0KDQoJCS8vIExvYWQgdGhlIGl0ZW1zDQoJCSR0aGlzLT5kYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJHRoaXMtPmRiLT5leGVjdXRlKCk7DQoNCgkJLy8gY2hlY2sgaWYgd2UgaGF2ZSB2YWx1ZXMNCgkJaWYgKCR0aGlzLT5kYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KDQoJCS8vIGRhdGEgZG9lcyBub3QgZXhpc3QNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIExvYWQgb25lDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAkc2VsZWN0ICBBcnJheSBvZiBzZWxlY3Rpb24ga2V5cw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICR0YWJsZXMgIEFycmF5IG9mIHRhYmxlcyB0byBzZWFyY2gNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkd2hlcmUgICBBcnJheSBvZiB3aGVyZSBrZXk9PnZhbHVlIG1hdGNoIGV4aXN0DQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgJG9yZGVyICAgQXJyYXkgb2YgaG93IHRvIG9yZGVyIHRoZSBkYXRhDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIG9uZShhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwgP2FycmF5ICRvcmRlciA9IG51bGwpOiBib29sDQoJew0KCQlpZiAoKCR0YWJsZXMgPSAkdGhpcy0+bm9ybWFsaXplVGFibGVzKCR0YWJsZXMpKSA9PT0gbnVsbCkNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJLy8gZ2V0IHRoZSBxdWVyeQ0KCQkkcXVlcnkgPSAkdGhpcy0+cXVlcnkoJHNlbGVjdCwgJHRhYmxlcywgJHdoZXJlLCAkb3JkZXIpOw0KDQoJCS8vIExvYWQgdGhlIGl0ZW0NCgkJJHRoaXMtPmRiLT5zZXRRdWVyeSgkcXVlcnksIDAsIDEpOw0KCQkkdGhpcy0+ZGItPmV4ZWN1dGUoKTsNCg0KCQkvLyBjaGVjayBpZiB3ZSBoYXZlIHZhbHVlcw0KCQlpZiAoJHRoaXMtPmRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoNCgkJLy8gZGF0YSBkb2VzIG5vdCBleGlzdA0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSBxdWVyeSBvYmplY3QuDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzLg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAkdGFibGVzICAgQXJyYXkgb2YgdGFibGVzIHRvIHNlYXJjaC4NCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAgJHdoZXJlICAgIEFycmF5IG9mIHdoZXJlIGtleT0+dmFsdWUgbWF0Y2ggZXhpc3QuDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICRvcmRlciAgICBBcnJheSBvZiBob3cgdG8gb3JkZXIgdGhlIGRhdGEuDQoJICogQHBhcmFtICAgaW50fG51bGwgICAgICRsaW1pdCAgICBMaW1pdCB0aGUgbnVtYmVyIG9mIHZhbHVlcyByZXR1cm5lZC4NCgkgKg0KCSAqIEByZXR1cm4gIG9iamVjdHxudWxsICBUaGUgcXVlcnkgb2JqZWN0IChEYXRhYmFzZVF1ZXJ5KS4NCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBxdWVyeShhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwNCgkJP2FycmF5ICRvcmRlciA9IG51bGwsID9pbnQgJGxpbWl0ID0gbnVsbCk6ID9vYmplY3QNCgl7DQoJCSRxdWVyeSA9ICR0aGlzLT5kYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHRoaXMtPmFwcGx5U2VsZWN0KCRxdWVyeSwgJHNlbGVjdCk7DQoJCSR0aGlzLT5hcHBseUZyb21BbmRKb2lucygkcXVlcnksICR0YWJsZXMpOw0KCQkkdGhpcy0+YXBwbHlXaGVyZSgkcXVlcnksICR3aGVyZSk7DQoJCSR0aGlzLT5hcHBseU9yZGVyKCRxdWVyeSwgJG9yZGVyKTsNCgkJJHRoaXMtPmFwcGx5TGltaXQoJHF1ZXJ5LCAkbGltaXQpOw0KDQoJCXJldHVybiAkcXVlcnk7DQoJfQ0KDQoJLyoqDQoJICogQXBwbHkgU0VMRUNUIGNsYXVzZSB0byB0aGUgcXVlcnkuDQoJICoNCgkgKiBTdXBwb3J0cyBhdXRvLWFsaWFzaW5nIGFuZCBpbnRlbGxpZ2VudCBwcmVmaXhpbmcuDQoJICoNCgkgKiBAcGFyYW0gICBvYmplY3QgICRxdWVyeSAgIFRoZSBxdWVyeSBvYmplY3QuDQoJICogQHBhcmFtICAgYXJyYXkgICAkc2VsZWN0ICBUaGUgc2VsZWN0IGRlZmluaXRpb24uDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gYXBwbHlTZWxlY3Qob2JqZWN0ICRxdWVyeSwgYXJyYXkgJHNlbGVjdCk6IHZvaWQNCgl7DQoJCS8vIEhhbmRsZSAnYWxsJyBzZXBhcmF0ZWx5IGZpcnN0DQoJCWlmIChpc3NldCgkc2VsZWN0WydhbGwnXSkpDQoJCXsNCgkJCWlmIChBcnJheUhlbHBlcjo6Y2hlY2soJHNlbGVjdFsnYWxsJ10pKQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRzZWxlY3RbJ2FsbCddIGFzICRzZWxlY3RBbGwpDQoJCQkJew0KCQkJCQkkcXVlcnktPnNlbGVjdCgkc2VsZWN0QWxsKTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYgKGlzX3N0cmluZygkc2VsZWN0WydhbGwnXSkpDQoJCQl7DQoJCQkJJHF1ZXJ5LT5zZWxlY3QoJHNlbGVjdFsnYWxsJ10pOw0KCQkJfQ0KDQoJCQl1bnNldCgkc2VsZWN0WydhbGwnXSk7DQoJCX0NCg0KCQkvLyBOb3JtYWxpemUgdGhlIHNlbGVjdCBhcnJheSB0byBlbnN1cmUga2V5PT5hbGlhcyBwYWlycw0KCQkkbm9ybWFsaXplZCA9ICR0aGlzLT5ub3JtYWxpemVTZWxlY3RBcnJheSgkc2VsZWN0KTsNCg0KCQlpZiAoIUFycmF5SGVscGVyOjpjaGVjaygkbm9ybWFsaXplZCkpDQoJCXsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCS8vIFF1b3RlIGFuZCBhcHBseSB0byBxdWVyeQ0KCQkkcXVlcnktPnNlbGVjdCgNCgkJCSR0aGlzLT5kYi0+cXVvdGVOYW1lKA0KCQkJCWFycmF5X2tleXMoJG5vcm1hbGl6ZWQpLA0KCQkJCWFycmF5X3ZhbHVlcygkbm9ybWFsaXplZCkNCgkJCSkNCgkJKTsNCgl9DQoNCgkvKioNCgkgKiBBcHBseSBGUk9NIGFuZCBKT0lOIGNsYXVzZXMuDQoJICoNCgkgKiBAcGFyYW0gICBvYmplY3QgICRxdWVyeSAgIFRoZSBxdWVyeSBvYmplY3QuDQoJICogQHBhcmFtICAgYXJyYXkgICAkdGFibGVzICBUaGUgdGFibGUgZGVmaW5pdGlvbnMuDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gYXBwbHlGcm9tQW5kSm9pbnMob2JqZWN0ICRxdWVyeSwgYXJyYXkgJHRhYmxlcyk6IHZvaWQNCgl7DQoJCSRxdWVyeS0+ZnJvbSgkdGhpcy0+ZGItPnF1b3RlTmFtZSgkdGhpcy0+Z2V0VGFibGUoJHRhYmxlc1snYSddKSwgJ2EnKSk7DQoJCXVuc2V0KCR0YWJsZXNbJ2EnXSk7DQoNCgkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkdGFibGVzKSkNCgkJew0KCQkJZm9yZWFjaCAoJHRhYmxlcyBhcyAkYXMgPT4gJGRldGFpbHMpDQoJCQl7DQoJCQkJJHRhYmxlX25hbWUgPSAkZGV0YWlsc1snbmFtZSddID8/IG51bGw7DQoJCQkJJGpvaW5fb24gPSAkZGV0YWlsc1snam9pbl9vbiddID8/IG51bGw7DQoJCQkJJGFzX29uID0gJGRldGFpbHNbJ2FzX29uJ10gPz8gbnVsbDsNCgkJCQkkam9pbiA9IHN0cnRvdXBwZXIoJGRldGFpbHNbJ2pvaW4nXSA/PyAnTEVGVCcpOw0KDQoJCQkJaWYgKGVtcHR5KCR0YWJsZV9uYW1lKSB8fCBlbXB0eSgkam9pbl9vbikgfHwgZW1wdHkoJGFzX29uKSkNCgkJCQl7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0NCg0KCQkJCS8vIGJhc2ljIGpvaW4gZm9yIG5vdyA6KQ0KCQkJCSRxdWVyeS0+am9pbigNCgkJCQkJJGpvaW4sDQoJCQkJCSR0aGlzLT5kYi0+cXVvdGVOYW1lKCR0aGlzLT5nZXRUYWJsZSgkdGFibGVfbmFtZSksICRhcykNCgkJCQkJLiAnIE9OICgnIC4gJHRoaXMtPmRiLT5xdW90ZU5hbWUoJGpvaW5fb24pDQoJCQkJCS4gJyA9ICcgLiAkdGhpcy0+ZGItPnF1b3RlTmFtZSgkYXNfb24pIC4gJyknDQoJCQkJKTsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEFwcGx5IFdIRVJFIGNsYXVzZXMuDQoJICoNCgkgKiBAcGFyYW0gICBvYmplY3QgICAgICAkcXVlcnkgIFRoZSBxdWVyeSBvYmplY3QuDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgJHdoZXJlICBXaGVyZSBjbGF1c2UgYXJyYXkuDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gYXBwbHlXaGVyZShvYmplY3QgJHF1ZXJ5LCA/YXJyYXkgJHdoZXJlKTogdm9pZA0KCXsNCgkJJHdoZXJlID0gJHRoaXMtPm5vcm1hbGl6ZUtleXMoJHdoZXJlID8/IFtdKTsNCgkJaWYgKCFBcnJheUhlbHBlcjo6Y2hlY2soJHdoZXJlKSkNCgkJew0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJZm9yZWFjaCAoJHdoZXJlIGFzICRrZXkgPT4gJGNvbmRpdGlvbikNCgkJew0KCQkJJHRoaXMtPmhhbmRsZVdoZXJlQ29uZGl0aW9uKCRxdWVyeSwgJGtleSwgJGNvbmRpdGlvbik7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBBcHBseSBPUkRFUiBCWSBjbGF1c2UuDQoJICoNCgkgKiBAcGFyYW0gICBvYmplY3QgICAgICAkcXVlcnkgIFRoZSBxdWVyeSBvYmplY3QuDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgJG9yZGVyICBPcmRlciBieSBjbGF1c2UuDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gYXBwbHlPcmRlcihvYmplY3QgJHF1ZXJ5LCA/YXJyYXkgJG9yZGVyKTogdm9pZA0KCXsNCgkJJG9yZGVyID0gJHRoaXMtPm5vcm1hbGl6ZUtleXMoJG9yZGVyID8/IFtdKTsNCgkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkb3JkZXIpKQ0KCQl7DQoJCQlmb3JlYWNoICgkb3JkZXIgYXMgJGtleSA9PiAkZGlyZWN0aW9uKQ0KCQkJew0KCQkJCSRxdWVyeS0+b3JkZXIoJHRoaXMtPmRiLT5xdW90ZU5hbWUoJGtleSkgLiAnICcgLiAkZGlyZWN0aW9uKTsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEFwcGx5IExJTUlUIGNsYXVzZS4NCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICAkcXVlcnkgIFRoZSBxdWVyeSBvYmplY3QuDQoJICogQHBhcmFtICAgaW50fG51bGwgICRsaW1pdCAgTnVtYmVyIG9mIHJlY29yZHMgdG8gbGltaXQuDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gYXBwbHlMaW1pdChvYmplY3QgJHF1ZXJ5LCA/aW50ICRsaW1pdCk6IHZvaWQNCgl7DQoJCWlmIChpc19udW1lcmljKCRsaW1pdCkpDQoJCXsNCgkJCSRxdWVyeS0+c2V0TGltaXQoJGxpbWl0KTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEdldCB0aGUga2V5IGZyb20gdGhlIHNlbGVjdGlvbiBhcnJheS4NCgkgKg0KCSAqIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIGEga2V5IGZyb20gdGhlIHByb3ZpZGVkIHNlbGVjdGlvbiBhcnJheS4NCgkgKiBUaGUga2V5IGlzIHJlbW92ZWQgZnJvbSB0aGUgYXJyYXkgYWZ0ZXIgYmVpbmcgcmV0cmlldmVkLg0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAkc2VsZWN0ICAgQXJyYXkgb2Ygc2VsZWN0aW9uIGtleXMuDQoJICoNCgkgKiBAcmV0dXJuICBzdHJpbmd8bnVsbCAgIFRoZSBrZXksIG9yIG51bGwgaWYgbm8ga2V5IGlzIGZvdW5kLg0KCSAqIEBzaW5jZSAgIDMuMi4yDQoJICoqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRLZXkoYXJyYXkgJiRzZWxlY3QpOiA/c3RyaW5nDQoJew0KCQkka2V5ID0gbnVsbDsNCg0KCQkvLyBDaGVjayBmb3IgJ2tleScgZmlyc3QgYW5kIGVuc3VyZSBpdCdzIGEgc3RyaW5nLg0KCQlpZiAoaXNzZXQoJHNlbGVjdFsna2V5J10pICYmIGlzX3N0cmluZygkc2VsZWN0WydrZXknXSkpDQoJCXsNCgkJCSRrZXkgPSAkc2VsZWN0WydrZXknXTsNCgkJCXVuc2V0KCRzZWxlY3RbJ2tleSddKTsgLy8gUmVtb3ZlICdrZXknIGZyb20gdGhlIGFycmF5Lg0KCQl9DQoNCgkJcmV0dXJuICRrZXk7DQoJfQ0KDQoJLyoqDQoJICogTm9ybWFsaXplIG1peGVkLWZvcm1hdCB0YWJsZSBkZWZpbml0aW9ucyB0byBhIGNvbnNpc3RlbnQgc3RydWN0dXJlLg0KCSAqDQoJICogU3VwcG9ydGVkIGZvcm1hdHM6DQoJICogLSBbJ2EnID0+ICd0YWJsZSddDQoJICogLSBbJ2EnID0+ICd0YWJsZScsICdiJyA9PiBbJ25hbWUnID0+ICd0YWJsZTInLCAnam9pbl9vbicgPT4gJ2EuaWQnLCAnYXNfb24nID0+ICdiLmVudGl0eSddXQ0KCSAqIC0gWydhLnRhYmxlJywgJ2IudGFibGUyLmlkLmVudGl0eSddDQoJICogLSBbJ2E6dGFibGUnLCAnYjp0YWJsZTI6aWQ6ZW50aXR5J10NCgkgKiAtIFsndGFibGUnXQ0KCSAqIC0gWyd0YWJsZScsICd0YWJsZTIuaWQuZW50aXR5J10NCgkgKiAtIFsndGFibGUnLCAndGFibGUyOmlkOmVudGl0eSddDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgJHRhYmxlcyAgVGhlIHJhdyBpbnB1dA0KCSAqDQoJICogQHJldHVybiAgYXJyYXl8bnVsbCAgTm9ybWFsaXplZCBbJ2FsaWFzJyA9PiAndGFibGUnXSBhbmQgam9pbiBtYXBwaW5ncywgb3IgbnVsbCBpZiAnYScgaXMgbWlzc2luZw0KCSAqIEBzaW5jZSAgIDUuMS4xDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIG5vcm1hbGl6ZVRhYmxlcyhhcnJheSAkdGFibGVzKTogP2FycmF5DQoJew0KCQlpZiAoZW1wdHkoJHRhYmxlcykpDQoJCXsNCgkJCXJldHVybiBudWxsOw0KCQl9DQoNCgkJJG5vcm1hbGl6ZWQgPSBbXTsNCg0KCQlmb3JlYWNoICgkdGFibGVzIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQl7DQoJCQlpZiAoaXNfaW50KCRrZXkpKQ0KCQkJew0KCQkJCSR0aGlzLT5wYXJzZVZhcmlvdXNTeW50YXgoJHZhbHVlLCAkbm9ybWFsaXplZCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHRoaXMtPnBhcnNlQXNzb2NTeW50YXgoJGtleSwgJHZhbHVlLCAkbm9ybWFsaXplZCk7DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gaXNzZXQoJG5vcm1hbGl6ZWRbJ2EnXSkgPyAkbm9ybWFsaXplZCA6IG51bGw7DQoJfQ0KDQoJLyoqDQoJICogTm9ybWFsaXplIGFsbCBLZXlzIGluIGFycmF5IGJ5IGVuc3VyaW5nOg0KCSAqIC0gQWxsIGtleXMgYXJlIGZ1bGx5IHF1YWxpZmllZCAoYWRkICJhLiIgaWYgbWlzc2luZykNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAkZGF0YSAgVGhlIHJhdyBkYXRlIGFycmF5DQoJICoNCgkgKiBAcmV0dXJuICBhcnJheSAgTm9ybWFsaXplZCBhcnJheSB3aXRoICd0YWJsZS5jb2x1bW4nID0+ICR2YWx1ZQ0KCSAqIEBzaW5jZSAgIDUuMS4xDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBub3JtYWxpemVLZXlzKGFycmF5ICRkYXRhKTogYXJyYXkNCgl7DQoJCSRub3JtYWxpemVkID0gW107DQoNCgkJZm9yZWFjaCAoJGRhdGEgYXMgJGtleSA9PiAkdmFsdWUpDQoJCXsNCgkJCS8vIElmIGluZGV4ZWQgYXJyYXkgKG5vIGFsaWFzKSwgd2UgaWdub3JlIHRoaXMgcm93DQoJCQlpZiAoaXNfaW50KCRrZXkpKQ0KCQkJew0KCQkJCWNvbnRpbnVlOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRjb2x1bW4gPSAkdGhpcy0+bm9ybWFsaXplQ29sdW1uKCdhJywgJGtleSk7DQoJCQl9DQoNCgkJCSRub3JtYWxpemVkWyRjb2x1bW5dID0gJHZhbHVlOw0KCQl9DQoNCgkJcmV0dXJuICRub3JtYWxpemVkOw0KCX0NCg0KCS8qKg0KCSAqIE5vcm1hbGl6ZSBTRUxFQ1QgYXJyYXkgYnkgZW5zdXJpbmc6DQoJICogLSBBbGwga2V5cyBhcmUgZnVsbHkgcXVhbGlmaWVkIChhZGQgImEuIiBpZiBtaXNzaW5nKQ0KCSAqIC0gQWxsIHZhbHVlcyBhcmUgYWxpYXNlcyAoZWl0aGVyIHByb3ZpZGVkIG9yIGV4dHJhY3RlZCBmcm9tIGtleSkNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAkc2VsZWN0ICBUaGUgcmF3IHNlbGVjdCBhcnJheQ0KCSAqDQoJICogQHJldHVybiAgYXJyYXkgIE5vcm1hbGl6ZWQgYXJyYXkgd2l0aCAndGFibGUuY29sdW1uJyA9PiAnYWxpYXMnDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIG5vcm1hbGl6ZVNlbGVjdEFycmF5KGFycmF5ICRzZWxlY3QpOiBhcnJheQ0KCXsNCgkJJG5vcm1hbGl6ZWQgPSBbXTsNCg0KCQlmb3JlYWNoICgkc2VsZWN0IGFzICRrZXkgPT4gJHZhbHVlKQ0KCQl7DQoJCQkvLyBJZiBpbmRleGVkIGFycmF5IChubyBhbGlhcyksIHVzZSB0aGUgdmFsdWUgYXMga2V5DQoJCQlpZiAoaXNfaW50KCRrZXkpKQ0KCQkJew0KCQkJCSRjb2x1bW4gPSAkdGhpcy0+bm9ybWFsaXplQ29sdW1uKCdhJywgJHZhbHVlKTsNCgkJCQkkYWxpYXMgID0gJHRoaXMtPmV4dHJhY3RBbGlhcygkY29sdW1uKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkY29sdW1uID0gJHRoaXMtPm5vcm1hbGl6ZUNvbHVtbignYScsICRrZXkpOw0KCQkJCSRhbGlhcyAgPSBpc19zdHJpbmcoJHZhbHVlKSAmJiAkdmFsdWUgIT09ICcnID8gJHZhbHVlIDogJHRoaXMtPmV4dHJhY3RBbGlhcygkY29sdW1uKTsNCgkJCX0NCg0KCQkJJG5vcm1hbGl6ZWRbJGNvbHVtbl0gPSAkYWxpYXM7DQoJCX0NCg0KCQlyZXR1cm4gJG5vcm1hbGl6ZWQ7DQoJfQ0KDQoJLyoqDQoJICogRXh0cmFjdHMgdGhlIGFsaWFzIGZyb20gYSBjb2x1bW4gbmFtZS4NCgkgKiAoZS5nLiwgImEuaWQiIOKGkiAiaWQiLCAiYi51c2VyX25hbWUiIOKGkiAidXNlcl9uYW1lIiwgIm5hbWUiIOKGkiAibmFtZSIpDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICRjb2x1bW4gIEZ1bGx5LXF1YWxpZmllZCBjb2x1bW4gbmFtZQ0KCSAqDQoJICogQHJldHVybiAgc3RyaW5nICBBbGlhcw0KCSAqIEBzaW5jZSAgIDUuMS4xDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBleHRyYWN0QWxpYXMoc3RyaW5nICRjb2x1bW4pOiBzdHJpbmcNCgl7DQoJCSRwYXJ0cyA9IGV4cGxvZGUoJy4nLCAkY29sdW1uKTsNCgkJcmV0dXJuIGVuZCgkcGFydHMpOw0KCX0NCg0KCS8qKg0KCSAqIEhhbmRsZSBhIHNpbmdsZSB3aGVyZSBjb25kaXRpb24uDQoJICoNCgkgKiBAcGFyYW0gICBvYmplY3QgICAgICRxdWVyeSAgICAgVGhlIHF1ZXJ5IG9iamVjdC4NCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICRjb2x1bW4gICAgVGhlIGNvbHVtbiBuYW1lLg0KCSAqIEBwYXJhbSAgIG1peGVkICAgICAgJGNvbmRpdGlvbiBUaGUgY29uZGl0aW9uIHZhbHVlIG9yIGNvbmZpZyBhcnJheS4NCgkgKiBAcGFyYW0gICBpbnQgICAgICAgICRjb3VudGVyICAgVGhlIGRlcHRoIGNvdW50ZXIuDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIGhhbmRsZVdoZXJlQ29uZGl0aW9uKG9iamVjdCAkcXVlcnksIHN0cmluZyAkY29sdW1uLCAkY29uZGl0aW9uLCBpbnQgJGNvdW50ZXIgPSAwKTogdm9pZA0KCXsNCgkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkY29uZGl0aW9uKSkNCgkJew0KCQkJaWYgKCFpc3NldCgkY29uZGl0aW9uWyd2YWx1ZSddLCAkY29uZGl0aW9uWydvcGVyYXRvciddKSkNCgkJCXsNCgkJCQkvLyBhbGxvdyBvbmx5IG9uZSBzdGVwIGRvd24sIHNvIG9uZSBjb2x1bW4gY2FuIGRpZmZlcmVudCB3aGVyZSBtYXBwaW5nDQoJCQkJaWYgKCRjb3VudGVyID09PSAwKQ0KCQkJCXsNCgkJCQkJJGNvdW50ZXIrKzsNCgkJCQkJZm9yZWFjaCAoJGNvbmRpdGlvbiBhcyAkY29sdW1uX2NvbmRpdGlvbikNCgkJCQkJew0KCQkJCQkJJHRoaXMtPmhhbmRsZVdoZXJlQ29uZGl0aW9uKCRxdWVyeSwgJGNvbHVtbiwgJGNvbHVtbl9jb25kaXRpb24sICRjb3VudGVyKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlyZXR1cm47DQoJCQl9DQoNCgkJCSR0aGlzLT5oYW5kbGVBZHZhbmNlZENvbmRpdGlvbigNCgkJCQkkcXVlcnksDQoJCQkJJHRoaXMtPmRiLT5xdW90ZU5hbWUoJGNvbHVtbiksDQoJCQkJJGNvbmRpdGlvblsndmFsdWUnXSwNCgkJCQkkY29uZGl0aW9uWydvcGVyYXRvciddLA0KCQkJCSRjb25kaXRpb25bJ3F1b3RlJ10gPz8gdHJ1ZQ0KCQkJKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCS8vIFNpbXBsZSBrZXkgPSB2YWx1ZSBjbGF1c2UNCgkJCSRxdWVyeS0+d2hlcmUoJHRoaXMtPmRiLT5xdW90ZU5hbWUoJGNvbHVtbikgLiAnID0gJyAuICR0aGlzLT5xdW90ZSgkY29uZGl0aW9uKSk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBIYW5kbGUgYWR2YW5jZWQgKG9wZXJhdG9yLWJhc2VkKSB3aGVyZSBjb25kaXRpb25zLg0KCSAqDQoJICogQHBhcmFtICAgb2JqZWN0ICAgICAgICAkcXVlcnkgICAgIFRoZSBxdWVyeSBvYmplY3QuDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICAkY29sdW1uICAgIFRoZSBxdW90ZWQgY29sdW1uIG5hbWUuDQoJICogQHBhcmFtICAgbWl4ZWQgICAgICAgICAkdmFsdWUgICAgIFRoZSB2YWx1ZSB0byBjb21wYXJlLg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgICAgJG9wZXJhdG9yICBUaGUgU1FMIG9wZXJhdG9yIHRvIHVzZS4NCgkgKiBAcGFyYW0gICBib29sICAgICAgICAgICRxdW90ZSAgICAgV2hldGhlciB0byBxdW90ZSB0aGUgdmFsdWUocykuDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIGhhbmRsZUFkdmFuY2VkQ29uZGl0aW9uKA0KCQlvYmplY3QgJHF1ZXJ5LA0KCQlzdHJpbmcgJGNvbHVtbiwNCgkJJHZhbHVlLA0KCQlzdHJpbmcgJG9wZXJhdG9yLA0KCQlib29sICRxdW90ZSA9IHRydWUNCgkpOiB2b2lkDQoJew0KCQlpZiAoQXJyYXlIZWxwZXI6OmNoZWNrKCR2YWx1ZSkpDQoJCXsNCgkJCSR0aGlzLT5oYW5kbGVBcnJheUNvbmRpdGlvbigkcXVlcnksICRjb2x1bW4sICR2YWx1ZSwgJG9wZXJhdG9yLCAkcXVvdGUpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHRoaXMtPmhhbmRsZVNjYWxhckNvbmRpdGlvbigkcXVlcnksICRjb2x1bW4sICR2YWx1ZSwgJG9wZXJhdG9yLCAkcXVvdGUpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogSGFuZGxlIGFuIGFycmF5LWJhc2VkIGNvbmRpdGlvbiwgZS5nLiwgSU4gKC4uLikgb3IgTk9UIElOICguLi4pLg0KCSAqDQoJICogQHBhcmFtICAgb2JqZWN0ICAgICAkcXVlcnkgICAgIFRoZSBxdWVyeSBvYmplY3QuDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAkY29sdW1uICAgIFRoZSBxdW90ZWQgY29sdW1uIG5hbWUuDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAkdmFsdWVzICAgIFRoZSBhcnJheSBvZiB2YWx1ZXMuDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAkb3BlcmF0b3IgIFRoZSBTUUwgb3BlcmF0b3IgKGUuZy4sIElOLCBOT1QgSU4pLg0KCSAqIEBwYXJhbSAgIGJvb2wgICAgICAgJHF1b3RlICAgICBXaGV0aGVyIHRvIHF1b3RlIHRoZSB2YWx1ZXMuDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIGhhbmRsZUFycmF5Q29uZGl0aW9uKA0KCQlvYmplY3QgJHF1ZXJ5LA0KCQlzdHJpbmcgJGNvbHVtbiwNCgkJYXJyYXkgJHZhbHVlcywNCgkJc3RyaW5nICRvcGVyYXRvciwNCgkJYm9vbCAkcXVvdGUgPSB0cnVlDQoJKTogdm9pZA0KCXsNCgkJJGxpc3QgPSAkcXVvdGUNCgkJCT8gaW1wbG9kZSgnLCcsIGFycmF5X21hcChmbigkdikgPT4gJHRoaXMtPnF1b3RlKCR2KSwgJHZhbHVlcykpDQoJCQk6IGltcGxvZGUoJywnLCAkdmFsdWVzKTsNCg0KCQkkcXVlcnktPndoZXJlKCJ7JGNvbHVtbn0geyRvcGVyYXRvcn0gKHskbGlzdH0pIik7DQoJfQ0KDQoJLyoqDQoJICogSGFuZGxlIGEgc2NhbGFyIHZhbHVlIGNvbmRpdGlvbi4NCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICAgJHF1ZXJ5ICAgICBUaGUgcXVlcnkgb2JqZWN0Lg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgJGNvbHVtbiAgICBUaGUgcXVvdGVkIGNvbHVtbiBuYW1lLg0KCSAqIEBwYXJhbSAgIG1peGVkICAgICAgJHZhbHVlICAgICBUaGUgdmFsdWUgdG8gY29tcGFyZS4NCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICRvcGVyYXRvciAgVGhlIFNRTCBvcGVyYXRvciAoZS5nLiwgPSwgIT0sID4pLg0KCSAqIEBwYXJhbSAgIGJvb2wgICAgICAgJHF1b3RlICAgICBXaGV0aGVyIHRvIHF1b3RlIHRoZSB2YWx1ZS4NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gaGFuZGxlU2NhbGFyQ29uZGl0aW9uKA0KCQlvYmplY3QgJHF1ZXJ5LA0KCQlzdHJpbmcgJGNvbHVtbiwNCgkJJHZhbHVlLA0KCQlzdHJpbmcgJG9wZXJhdG9yLA0KCQlib29sICRxdW90ZSA9IHRydWUNCgkpOiB2b2lkDQoJew0KCQkkZm9ybWF0dGVkID0gJHF1b3RlID8gJHRoaXMtPnF1b3RlKCR2YWx1ZSkgOiAkdmFsdWU7DQoJCSRxdWVyeS0+d2hlcmUoInskY29sdW1ufSB7JG9wZXJhdG9yfSB7JGZvcm1hdHRlZH0iKTsNCgl9DQoNCgkvKioNCgkgKiBQYXJzZSB2YXJpb3VzIHNob3J0IHN5bnRheGVzOiBjb2xvbiwgcGlwZSwgZG90LCBvciBmYWxsYmFjayBmbGF0IHZhbHVlLg0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICAkZW50cnkgICAgICAgVGhlIHJhdyBzdHJpbmcgZW50cnkNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgICYkbm9ybWFsaXplZCBUaGUgbm9ybWFsaXplZCBvdXRwdXQgcmVmZXJlbmNlDQoJICogQHBhcmFtICAgc3RyaW5nfG51bGwgICAkYWxpYXMgICAgICAgT3B0aW9uYWwgb3ZlcnJpZGUgYWxpYXMNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VWYXJpb3VzU3ludGF4KHN0cmluZyAkZW50cnksIGFycmF5ICYkbm9ybWFsaXplZCwgP3N0cmluZyAkYWxpYXMgPSBudWxsKTogdm9pZA0KCXsNCgkJJGVudHJ5ID0gdHJpbSgkZW50cnkpOw0KDQoJCWlmICgkZW50cnkgPT09ICcnKQ0KCQl7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQlpZiAoc3RycG9zKCRlbnRyeSwgJzonKSAhPT0gZmFsc2UpDQoJCXsNCgkJCSR0aGlzLT5wYXJzZUNvbG9uU3ludGF4KCRhbGlhcyA/ICJ7JGFsaWFzfTp7JGVudHJ5fSIgOiAkZW50cnksICRub3JtYWxpemVkKTsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCWlmIChzdHJwb3MoJGVudHJ5LCAnfCcpICE9PSBmYWxzZSkNCgkJew0KCQkJJHRoaXMtPnBhcnNlUGlwZVN5bnRheCgkYWxpYXMgPyAieyRhbGlhc318eyRlbnRyeX0iIDogJGVudHJ5LCAkbm9ybWFsaXplZCk7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQlpZiAoc3RycG9zKCRlbnRyeSwgJy4nKSAhPT0gZmFsc2UpDQoJCXsNCgkJCSR0aGlzLT5wYXJzZURvdFN5bnRheCgkYWxpYXMgPyAieyRhbGlhc30ueyRlbnRyeX0iIDogJGVudHJ5LCAkbm9ybWFsaXplZCk7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQkvLyBEZWZhdWx0OiBmbGF0IHRhYmxlIG5hbWUNCgkJaWYgKCFlbXB0eSgkYWxpYXMpKQ0KCQl7DQoJCQlpZiAoJGFsaWFzID09PSAnYScpIC8vIHN0b3AgaW5maW5pdGUgcmVjdXJzaW9uDQoJCQl7DQoJCQkJJHRoaXMtPmFkZFRhYmxlRW50cnkoJGFsaWFzLCAkZW50cnksICRub3JtYWxpemVkKTsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR0aGlzLT5wYXJzZUZsYXRUYWJsZSgkZW50cnksICRub3JtYWxpemVkKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIFBhcnNlIGNvbG9uIHN5bnRheCBzdWNoIGFzICJhOnRhYmxlIiwgImI6dGFibGU6am9pbl9vbjphc19vbiIsIG9yICJ0YWJsZTpqb2luX29uOmFzX29uIg0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAkZW50cnkgICAgICAgVGhlIGNvbG9uLWRlbGltaXRlZCBzdHJpbmcNCgkgKiBAcGFyYW0gICBhcnJheSAgICYkbm9ybWFsaXplZCBUaGUgbm9ybWFsaXplZCBvdXRwdXQgcmVmZXJlbmNlDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlQ29sb25TeW50YXgoc3RyaW5nICRlbnRyeSwgYXJyYXkgJiRub3JtYWxpemVkKTogdm9pZA0KCXsNCgkJJHRoaXMtPnBhcnNlQXJyYXlFbnRyeShleHBsb2RlKCc6JywgJGVudHJ5KSwgJG5vcm1hbGl6ZWQpOw0KCX0NCg0KCS8qKg0KCSAqIFBhcnNlIGNvbG9uIHN5bnRheCBzdWNoIGFzICJhfHRhYmxlIiwgImJ8dGFibGV8am9pbl9vbnxhc19vbiIsIG9yICJ0YWJsZXxqb2luX29uOmFzX29uIg0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAkZW50cnkgICAgICAgVGhlIHBpcGUtZGVsaW1pdGVkIHN0cmluZw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJiRub3JtYWxpemVkIFRoZSBub3JtYWxpemVkIG91dHB1dCByZWZlcmVuY2UNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VQaXBlU3ludGF4KHN0cmluZyAkZW50cnksIGFycmF5ICYkbm9ybWFsaXplZCk6IHZvaWQNCgl7DQoJCSR0aGlzLT5wYXJzZUFycmF5RW50cnkoZXhwbG9kZSgnfCcsICRlbnRyeSksICRub3JtYWxpemVkKTsNCgl9DQoNCgkvKioNCgkgKiBQYXJzZSBkb3Qgc3ludGF4IHN1Y2ggYXMgImEudGFibGUiLCAiYi50YWJsZTIuaWQuZW50aXR5IiwgInRhYmxlLmpvaW5fb24uYXNfb24iDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICRlbnRyeSAgICAgICBUaGUgZG90LWRlbGltaXRlZCBzdHJpbmcNCgkgKiBAcGFyYW0gICBhcnJheSAgICYkbm9ybWFsaXplZCBUaGUgbm9ybWFsaXplZCBvdXRwdXQgcmVmZXJlbmNlDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlRG90U3ludGF4KHN0cmluZyAkZW50cnksIGFycmF5ICYkbm9ybWFsaXplZCk6IHZvaWQNCgl7DQoJCSR0aGlzLT5wYXJzZUFycmF5RW50cnkoZXhwbG9kZSgnLicsICRlbnRyeSksICRub3JtYWxpemVkKTsNCgl9DQoNCgkvKioNCgkgKiBDb21iaW5lIHRoZSBlbnRyeSBwYXJ0cyBpbnQgdGhlIGNvcnJldCBmb3JtYXQNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJHBhcnRzICAgICAgIFRoZSBwYXJ0cyBvZiB0aGUgZW50cnkNCgkgKiBAcGFyYW0gICBhcnJheSAgICYkbm9ybWFsaXplZCBUaGUgbm9ybWFsaXplZCBvdXRwdXQgcmVmZXJlbmNlDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlQXJyYXlFbnRyeShhcnJheSAkcGFydHMsIGFycmF5ICYkbm9ybWFsaXplZCk6IHZvaWQNCgl7DQoJCSRjb3VudCA9IGNvdW50KCRwYXJ0cyk7DQoNCgkJaWYgKCRjb3VudCA9PT0gMikNCgkJew0KCQkJWyRhbGlhcywgJHRhYmxlXSA9ICRwYXJ0czsNCgkJCSR0aGlzLT5hZGRUYWJsZUVudHJ5KCRhbGlhcywgJHRhYmxlLCAkbm9ybWFsaXplZCk7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQlpZiAoJGNvdW50ID09PSAzKQ0KCQl7DQoJCQkkYWxpYXMgPSBjaHIoOTcgKyBjb3VudCgkbm9ybWFsaXplZCkpOw0KCQkJWyR0YWJsZSwgJGpvaW5fb24sICRhc19vbl0gPSAkcGFydHM7DQoJCQkkdGhpcy0+YWRkSm9pblRhYmxlRW50cnkoJGFsaWFzLCAkdGFibGUsICRqb2luX29uLCAkYXNfb24sIG51bGwsICRub3JtYWxpemVkKTsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCWlmICgkY291bnQgPT09IDQpDQoJCXsNCgkJCVskYWxpYXMsICR0YWJsZSwgJGpvaW5fb24sICRhc19vbl0gPSAkcGFydHM7DQoJCQkkdGhpcy0+YWRkSm9pblRhYmxlRW50cnkoJGFsaWFzLCAkdGFibGUsICRqb2luX29uLCAkYXNfb24sIG51bGwsICRub3JtYWxpemVkKTsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCWlmICgkY291bnQgPT09IDUpDQoJCXsNCgkJCVskYWxpYXMsICR0YWJsZSwgJGpvaW5fb24sICRhc19vbiwgJGpvaW5dID0gJHBhcnRzOw0KCQkJJHRoaXMtPmFkZEpvaW5UYWJsZUVudHJ5KCRhbGlhcywgJHRhYmxlLCAkam9pbl9vbiwgJGFzX29uLCAkam9pbiwgJG5vcm1hbGl6ZWQpOw0KCQkJcmV0dXJuOw0KCQl9DQoJCS8vIHNpbGVudGx5IGlnbm9yZSBtYWxmb3JtZWQgaW5wdXQNCgl9DQoNCgkvKioNCgkgKiBQYXJzZSBmbGF0IGVudHJ5IGxpa2UgInRhYmxlIiB3aXRoIGF1dG9tYXRpYyBhbGlhc2luZw0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAkdGFibGUgICAgICAgVGhlIHRhYmxlIG5hbWUNCgkgKiBAcGFyYW0gICBhcnJheSAgICYkbm9ybWFsaXplZCBUaGUgbm9ybWFsaXplZCBvdXRwdXQgcmVmZXJlbmNlDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlRmxhdFRhYmxlKHN0cmluZyAkdGFibGUsIGFycmF5ICYkbm9ybWFsaXplZCk6IHZvaWQNCgl7DQoJCSRhbGlhcyA9IGNocig5NyArIGNvdW50KCRub3JtYWxpemVkKSk7DQoJCSR0aGlzLT5hZGRUYWJsZUVudHJ5KCRhbGlhcywgJHRhYmxlLCAkbm9ybWFsaXplZCk7DQoJfQ0KDQoJLyoqDQoJICogUGFyc2UgYXNzb2NpYXRpdmUgYXJyYXkgZW50cnksIGVpdGhlciBhIHJhdyBzdHJpbmcgb3IgYSBqb2luIHN0cnVjdHVyZQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICAgJGFsaWFzICAgICAgIFRhYmxlIGFsaWFzDQoJICogQHBhcmFtICAgc3RyaW5nfGFycmF5ICAgJHZhbHVlICAgICAgIFRoZSB0YWJsZSBkZWZpbml0aW9uIG9yIGpvaW4gYXJyYXkNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgICAmJG5vcm1hbGl6ZWQgVGhlIG5vcm1hbGl6ZWQgb3V0cHV0IHJlZmVyZW5jZQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAgIDUuMS4xDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZUFzc29jU3ludGF4KHN0cmluZyAkYWxpYXMsICR2YWx1ZSwgYXJyYXkgJiRub3JtYWxpemVkKTogdm9pZA0KCXsNCgkJaWYgKGlzX2FycmF5KCR2YWx1ZSkpDQoJCXsNCgkJCSR0aGlzLT5hZGRKb2luVGFibGVFbnRyeSgNCgkJCQkkYWxpYXMsDQoJCQkJJHZhbHVlWyduYW1lJ10gPz8gJycsDQoJCQkJJHZhbHVlWydqb2luX29uJ10gPz8gJycsDQoJCQkJJHZhbHVlWydhc19vbiddID8/ICcnLA0KCQkJCSR2YWx1ZVsnam9pbiddID8/IG51bGwsDQoJCQkJJG5vcm1hbGl6ZWQNCgkJCSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdGhpcy0+YWRkVGFibGVFbnRyeSgkYWxpYXMsICR2YWx1ZSwgJG5vcm1hbGl6ZWQpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogQWRkIGEgZ2l2ZW4gc2V0IG9mIGVudHJpZXMgdG8gdGhlIG5vcm1hbGl6ZWQgYXJyYXkNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgJGFsaWFzICAgICAgIFRhYmxlIGFsaWFzDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAkdGFibGUgICAgICAgVGFibGUgbmFtZQ0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgJiRub3JtYWxpemVkIFRoZSBub3JtYWxpemVkIG91dHB1dCByZWZlcmVuY2UNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gYWRkVGFibGVFbnRyeShzdHJpbmcgJGFsaWFzLCBzdHJpbmcgJHRhYmxlLCBhcnJheSAmJG5vcm1hbGl6ZWQpOiB2b2lkDQoJew0KCQkkYWxpYXMgPSB0cmltKCRhbGlhcyk7DQoJCSR0YWJsZSA9IHRyaW0oJHRhYmxlKTsNCg0KCQlpZiAoJGFsaWFzID09PSAnYScgJiYgJHRhYmxlICE9PSAnJykNCgkJew0KCQkJaWYgKGlzc2V0KCRub3JtYWxpemVkWyRhbGlhc10pKQ0KCQkJew0KCQkJCXJldHVybjsNCgkJCX0NCg0KCQkJJG5vcm1hbGl6ZWRbJGFsaWFzXSA9ICR0YWJsZTsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCSR0aGlzLT5wYXJzZVZhcmlvdXNTeW50YXgoJHRhYmxlLCAkbm9ybWFsaXplZCwgJGFsaWFzKTsNCgl9DQoNCgkvKioNCgkgKiBBZGQgYSBnaXZlbiBzZXQgb2YgZW50cmllcyB0byB0aGUgbm9ybWFsaXplZCBhcnJheQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICRhbGlhcyAgICAgICBUYWJsZSBhbGlhcw0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgICAkdGFibGUgICAgICAgVGFibGUgbmFtZQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgICAkam9pbk9uICAgICAgVGhlIGpvaW4gb24gY29sdW1uIG5hbWUNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICAgJGFzT24gICAgICAgIFRoZSBhcyBvbiBjb2x1bW4gbmFtZQ0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAkam9pbiAgICAgICAgVGhlIGpvaW4gdHlwZQ0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAmJG5vcm1hbGl6ZWQgVGhlIG5vcm1hbGl6ZWQgb3V0cHV0IHJlZmVyZW5jZQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAgIDUuMS4xDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBhZGRKb2luVGFibGVFbnRyeSgNCgkJc3RyaW5nICRhbGlhcywNCgkJc3RyaW5nICR0YWJsZSwNCgkJc3RyaW5nICRqb2luT24sDQoJCXN0cmluZyAkYXNPbiwNCgkJP3N0cmluZyAkam9pbiwNCgkJYXJyYXkgJiRub3JtYWxpemVkDQoJKTogdm9pZA0KCXsNCgkJJGFsaWFzICAgICA9IHRyaW0oJGFsaWFzKTsNCgkJJHRhYmxlTmFtZSA9IHRyaW0oJHRhYmxlKTsNCgkJJGpvaW5PbiAgICA9IHRyaW0oJGpvaW5Pbik7DQoJCSRhc09uICAgICAgPSB0cmltKCRhc09uKTsNCg0KCQlpZiAoDQoJCQkkYWxpYXMgPT09ICcnIHx8ICRhbGlhcyA9PT0gJ2EnIHx8DQoJCQkkdGFibGUgPT09ICcnIHx8ICRqb2luT24gPT09ICcnIHx8ICRhc09uID09PSAnJw0KCQkpIHsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCWlmIChpc3NldCgkbm9ybWFsaXplZFskYWxpYXNdKSkNCgkJew0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJaWYgKCRqb2luICE9PSBudWxsKQ0KCQl7DQoJCQkkam9pbiA9IHRyaW0oJGpvaW4pOw0KCQl9DQoNCgkJJG5vcm1hbGl6ZWRbJGFsaWFzXSA9IFsNCgkJCSduYW1lJyAgICA9PiAkdGFibGUsDQoJCQknam9pbl9vbicgPT4gJHRoaXMtPm5vcm1hbGl6ZUNvbHVtbignYScsICRqb2luT24pLA0KCQkJJ2FzX29uJyAgID0+ICR0aGlzLT5ub3JtYWxpemVDb2x1bW4oJGFsaWFzLCAkYXNPbiksDQoJCQknam9pbicgICA9PiAkam9pbg0KCQldOw0KCX0NCg0KCS8qKg0KCSAqIEFkZCB0YWJsZSBhbGlhcyB0byBjb2x1bW4gaWYgbm90IGFscmVhZHkgcHJlc2VudC4NCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJGFsaWFzICAgVGhlIHRhYmxlIGFsaWFzDQoJICogQHBhcmFtICAgc3RyaW5nICAkY29sdW1uICBUaGUgY29sdW1uIG5hbWUNCgkgKg0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIEBzaW5jZSAgIDUuMS4xDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBub3JtYWxpemVDb2x1bW4oc3RyaW5nICRhbGlhcywgc3RyaW5nICRjb2x1bW4pOiBzdHJpbmcNCgl7DQoJCXJldHVybiAoc3RycG9zKCRjb2x1bW4sICcuJykgIT09IGZhbHNlKQ0KCQkJPyAkY29sdW1uDQoJCQk6ICJ7JGFsaWFzfS57JGNvbHVtbn0iOw0KCX0=', '{}', '{}', '', 1, '2022-09-03 19:19:27', 69, 0, 1), +(124, '06f8eada-d59b-441c-b287-0aea1793da5a', 'VDM.Database.Load', 'Load', 'final class', 'Database Load\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', '6cbef8f8-4813-48e3-b05a-65e1aea95171', '', '', '', '{\"0\":\"2ad31f74-f579-499d-b98b-c4f54fd615dd\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Database.Load', 0, '{}', '{}', '', '{\"use_selection0\":{\"use\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIExvYWQgZGF0YSByb3dzIGFzIGFuIGFycmF5IG9mIGFzc29jaWF0ZWQgYXJyYXlzDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICR0YWJsZXMgICBBcnJheSBvZiB0YWJsZXMgdG8gc2VhcmNoDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICR3aGVyZSAgICBBcnJheSBvZiB3aGVyZSBrZXk9PnZhbHVlIG1hdGNoIGV4aXN0DQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICRvcmRlciAgICBBcnJheSBvZiBob3cgdG8gb3JkZXIgdGhlIGRhdGENCgkgKiBAcGFyYW0gICBpbnR8bnVsbCAgICAgJGxpbWl0ICAgIExpbWl0IHRoZSBudW1iZXIgb2YgdmFsdWVzIHJldHVybmVkDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHJvd3MoYXJyYXkgJHNlbGVjdCwgYXJyYXkgJHRhYmxlcywgP2FycmF5ICR3aGVyZSA9IG51bGwsDQoJCT9hcnJheSAkb3JkZXIgPSBudWxsLCA/aW50ICRsaW1pdCA9IG51bGwpOiA/YXJyYXkNCgl7DQoJCS8vIHNldCBrZXkgaWYgZm91bmQNCgkJJGtleSA9ICR0aGlzLT5nZXRLZXkoJHNlbGVjdCk7DQoNCgkJLy8gY2hlY2sgaWYgd2UgY2FuIGdldCBtYW55IHJvd3MNCgkJaWYgKCR0aGlzLT5tYW55KCRzZWxlY3QsICR0YWJsZXMsICR3aGVyZSwgJG9yZGVyLCAkbGltaXQpKQ0KCQl7DQoJCQkvLyByZXR1cm4gYXNzb2NpYXRlZCBhcnJheXMgZnJvbSB0aGUgdGFibGUgcmVjb3Jkcw0KCQkJcmV0dXJuICR0aGlzLT5kYi0+bG9hZEFzc29jTGlzdCgka2V5KTsNCgkJfQ0KDQoJCS8vIGRhdGEgZG9lcyBub3QgZXhpc3QNCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJLyoqDQoJICogTG9hZCBkYXRhIHJvd3MgYXMgYW4gYXJyYXkgb2Ygb2JqZWN0cw0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICRzZWxlY3QgICBBcnJheSBvZiBzZWxlY3Rpb24ga2V5cw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAkdGFibGVzICAgQXJyYXkgb2YgdGFibGVzIHRvIHNlYXJjaA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICAkd2hlcmUgICAgQXJyYXkgb2Ygd2hlcmUga2V5PT52YWx1ZSBtYXRjaCBleGlzdA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICAkb3JkZXIgICAgQXJyYXkgb2YgaG93IHRvIG9yZGVyIHRoZSBkYXRhDQoJICogQHBhcmFtICAgaW50fG51bGwgICAgICRsaW1pdCAgICBMaW1pdCB0aGUgbnVtYmVyIG9mIHZhbHVlcyByZXR1cm5lZA0KCSAqDQoJICogQHJldHVybiAgYXJyYXl8bnVsbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBpdGVtcyhhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwNCgkJP2FycmF5ICRvcmRlciA9IG51bGwsID9pbnQgJGxpbWl0ID0gbnVsbCk6ID9hcnJheQ0KCXsNCgkJLy8gc2V0IGtleSBpZiBmb3VuZA0KCQkka2V5ID0gJHRoaXMtPmdldEtleSgkc2VsZWN0KTsNCg0KCQkvLyBjaGVjayBpZiB3ZSBjYW4gZ2V0IG1hbnkgcm93cw0KCQlpZiAoJHRoaXMtPm1hbnkoJHNlbGVjdCwgJHRhYmxlcywgJHdoZXJlLCAkb3JkZXIsICRsaW1pdCkpDQoJCXsNCgkJCS8vIHJldHVybiBhc3NvY2lhdGVkIGFycmF5cyBmcm9tIHRoZSB0YWJsZSByZWNvcmRzDQoJCQlyZXR1cm4gJHRoaXMtPmRiLT5sb2FkT2JqZWN0TGlzdCgka2V5KTsNCgkJfQ0KDQoJCS8vIGRhdGEgZG9lcyBub3QgZXhpc3QNCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJLyoqDQoJICogTG9hZCBkYXRhIHJvdyBhcyBhbiBhc3NvY2lhdGVkIGFycmF5DQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgJHRhYmxlcyAgQXJyYXkgb2YgdGFibGVzIHRvIHNlYXJjaA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICR3aGVyZSAgIEFycmF5IG9mIHdoZXJlIGtleT0+dmFsdWUgbWF0Y2ggZXhpc3QNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkb3JkZXIgICAgQXJyYXkgb2YgaG93IHRvIG9yZGVyIHRoZSBkYXRhDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHJvdyhhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwgP2FycmF5ICRvcmRlciA9IG51bGwpOiA/YXJyYXkNCgl7DQoJCS8vIGNoZWNrIGlmIHdlIGNhbiBnZXQgb25lIHJvdw0KCQlpZiAoJHRoaXMtPm9uZSgkc2VsZWN0LCAkdGFibGVzLCAkd2hlcmUsICRvcmRlcikpDQoJCXsNCgkJCXJldHVybiAkdGhpcy0+ZGItPmxvYWRBc3NvYygpOw0KCQl9DQoNCgkJLy8gZGF0YSBkb2VzIG5vdCBleGlzdA0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBMb2FkIGRhdGEgcm93IGFzIGFuIG9iamVjdA0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICRzZWxlY3QgICBBcnJheSBvZiBzZWxlY3Rpb24ga2V5cw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICR0YWJsZXMgIEFycmF5IG9mIHRhYmxlcyB0byBzZWFyY2gNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkd2hlcmUgICBBcnJheSBvZiB3aGVyZSBrZXk9PnZhbHVlIG1hdGNoIGV4aXN0DQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgJG9yZGVyICAgIEFycmF5IG9mIGhvdyB0byBvcmRlciB0aGUgZGF0YQ0KCSAqDQoJICogQHJldHVybiAgb2JqZWN0fG51bGwNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gaXRlbShhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwgP2FycmF5ICRvcmRlciA9IG51bGwpOiA/b2JqZWN0DQoJew0KCQkvLyBjaGVjayBpZiB3ZSBjYW4gZ2V0IG9uZSByb3cNCgkJaWYgKCR0aGlzLT5vbmUoJHNlbGVjdCwgJHRhYmxlcywgJHdoZXJlLCAkb3JkZXIpKQ0KCQl7DQoJCQlyZXR1cm4gJHRoaXMtPmRiLT5sb2FkT2JqZWN0KCk7DQoJCX0NCg0KCQkvLyBkYXRhIGRvZXMgbm90IGV4aXN0DQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIEdldCB0aGUgbWF4IHZhbHVlIGJhc2VkIG9uIGEgZmlsdGVyZWQgcmVzdWx0IGZyb20gYSBnaXZlbiB0YWJsZQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAkZmllbGQgICAgIFRoZSBmaWVsZCBrZXkNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICR0YWJsZXMgICAgVGhlIHRhYmxlcw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgJGZpbHRlciAgICBUaGUgZmlsdGVyIGtleXMNCgkgKg0KCSAqIEByZXR1cm4gIGludHxudWxsDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIG1heCgkZmllbGQsIGFycmF5ICR0YWJsZXMsIGFycmF5ICRmaWx0ZXIpOiA/aW50DQoJew0KCQlpZiAoKCR0YWJsZXMgPSAkdGhpcy0+bm9ybWFsaXplVGFibGVzKCR0YWJsZXMpKSA9PT0gbnVsbCkNCgkJew0KCQkJcmV0dXJuIG51bGw7DQoJCX0NCg0KCQkvLyBnZXQgdGhlIHF1ZXJ5DQoJCSRxdWVyeSA9ICR0aGlzLT5xdWVyeShbImFsbCIgPT4gIk1BWChgJGZpZWxkYCkiXSwgJHRhYmxlcywgJGZpbHRlcik7DQoNCgkJLy8gTG9hZCB0aGUgbWF4IG51bWJlcg0KCQkkdGhpcy0+ZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSR0aGlzLT5kYi0+ZXhlY3V0ZSgpOw0KDQoJCS8vIGNoZWNrIGlmIHdlIGhhdmUgdmFsdWVzDQoJCWlmICgkdGhpcy0+ZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuIChpbnQpICR0aGlzLT5kYi0+bG9hZFJlc3VsdCgpOw0KCQl9DQoNCgkJLy8gZGF0YSBkb2VzIG5vdCBleGlzdA0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGl0ZW1zIGJhc2VkIG9uIGZpbHRlciByZXN1bHQgZnJvbSBhIGdpdmVuIHRhYmxlDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICR0YWJsZXMgICAgVGhlIHRhYmxlDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAkZmlsdGVyICAgIFRoZSBmaWx0ZXIga2V5cw0KCSAqDQoJICogQHJldHVybiAgaW50fG51bGwNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gY291bnQoYXJyYXkgJHRhYmxlcywgYXJyYXkgJGZpbHRlcik6ID9pbnQNCgl7DQoJCWlmICgoJHRhYmxlcyA9ICR0aGlzLT5ub3JtYWxpemVUYWJsZXMoJHRhYmxlcykpID09PSBudWxsKQ0KCQl7DQoJCQlyZXR1cm4gbnVsbDsNCgkJfQ0KDQoJCS8vIGdldCB0aGUgcXVlcnkNCgkJJHF1ZXJ5ID0gJHRoaXMtPnF1ZXJ5KFsiYWxsIiA9PiAnQ09VTlQoKiknXSwgJHRhYmxlcywgJGZpbHRlcik7DQoNCgkJLy8gTG9hZCB0aGUgbWF4IG51bWJlcg0KCQkkdGhpcy0+ZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSR0aGlzLT5kYi0+ZXhlY3V0ZSgpOw0KDQoJCS8vIGNoZWNrIGlmIHdlIGhhdmUgdmFsdWVzDQoJCWlmICgkdGhpcy0+ZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuIChpbnQpICR0aGlzLT5kYi0+bG9hZFJlc3VsdCgpOw0KCQl9DQoNCgkJLy8gZGF0YSBkb2VzIG5vdCBleGlzdA0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBMb2FkIG9uZSB2YWx1ZSBmcm9tIGEgcm93DQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgJHRhYmxlcyAgQXJyYXkgb2YgdGFibGVzIHRvIHNlYXJjaA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICR3aGVyZSAgIEFycmF5IG9mIHdoZXJlIGtleT0+dmFsdWUgbWF0Y2ggZXhpc3QNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkb3JkZXIgICAgQXJyYXkgb2YgaG93IHRvIG9yZGVyIHRoZSBkYXRhDQoJICoNCgkgKiBAcmV0dXJuICBtaXhlZA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiB2YWx1ZShhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwgP2FycmF5ICRvcmRlciA9IG51bGwpDQoJew0KCQkvLyBjaGVjayBpZiB3ZSBjYW4gZ2V0IG9uZSB2YWx1ZQ0KCQlpZiAoJHRoaXMtPm9uZSgkc2VsZWN0LCAkdGFibGVzLCAkd2hlcmUsICRvcmRlcikpDQoJCXsNCgkJCXJldHVybiAkdGhpcy0+ZGItPmxvYWRSZXN1bHQoKTsNCgkJfQ0KDQoJCS8vIGRhdGEgZG9lcyBub3QgZXhpc3QNCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJLyoqDQoJICogTG9hZCB2YWx1ZXMgZnJvbSBtdWx0aXBsZSByb3dzDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICR0YWJsZXMgICBBcnJheSBvZiB0YWJsZXMgdG8gc2VhcmNoDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICR3aGVyZSAgICBBcnJheSBvZiB3aGVyZSBrZXk9PnZhbHVlIG1hdGNoIGV4aXN0DQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICRvcmRlciAgICBBcnJheSBvZiBob3cgdG8gb3JkZXIgdGhlIGRhdGENCgkgKiBAcGFyYW0gICBpbnR8bnVsbCAgICAgJGxpbWl0ICAgIExpbWl0IHRoZSBudW1iZXIgb2YgdmFsdWVzIHJldHVybmVkDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlICAgMy4yLjINCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHZhbHVlcyhhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwNCgkJP2FycmF5ICRvcmRlciA9IG51bGwsID9pbnQgJGxpbWl0ID0gbnVsbCk6ID9hcnJheQ0KCXsNCgkJLy8gY2hlY2sgaWYgd2UgY2FuIGdldCBtYW55IHJvd3MNCgkJaWYgKCR0aGlzLT5tYW55KCRzZWxlY3QsICR0YWJsZXMsICR3aGVyZSwgJG9yZGVyLCAkbGltaXQpKQ0KCQl7DQoJCQlyZXR1cm4gJHRoaXMtPmRiLT5sb2FkQ29sdW1uKCk7DQoJCX0NCg0KCQkvLyBkYXRhIGRvZXMgbm90IGV4aXN0DQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIExvYWQgbWFueQ0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICRzZWxlY3QgICBBcnJheSBvZiBzZWxlY3Rpb24ga2V5cw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAkdGFibGVzICAgQXJyYXkgb2YgdGFibGVzIHRvIHNlYXJjaA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICAkd2hlcmUgICAgQXJyYXkgb2Ygd2hlcmUga2V5PT52YWx1ZSBtYXRjaCBleGlzdA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICAkb3JkZXIgICAgQXJyYXkgb2YgaG93IHRvIG9yZGVyIHRoZSBkYXRhDQoJICogQHBhcmFtICAgaW50fG51bGwgICAgICRsaW1pdCAgICBMaW1pdCB0aGUgbnVtYmVyIG9mIHZhbHVlcyByZXR1cm5lZA0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBtYW55KGFycmF5ICRzZWxlY3QsIGFycmF5ICR0YWJsZXMsID9hcnJheSAkd2hlcmUgPSBudWxsLA0KCQk/YXJyYXkgJG9yZGVyID0gbnVsbCwgP2ludCAkbGltaXQgPSBudWxsKTogYm9vbA0KCXsNCgkJaWYgKCgkdGFibGVzID0gJHRoaXMtPm5vcm1hbGl6ZVRhYmxlcygkdGFibGVzKSkgPT09IG51bGwpDQoJCXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCS8vIGdldCB0aGUgcXVlcnkNCgkJJHF1ZXJ5ID0gJHRoaXMtPnF1ZXJ5KCRzZWxlY3QsICR0YWJsZXMsICR3aGVyZSwgJG9yZGVyLCAkbGltaXQpOw0KDQoJCS8vIExvYWQgdGhlIGl0ZW1zDQoJCSR0aGlzLT5kYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJHRoaXMtPmRiLT5leGVjdXRlKCk7DQoNCgkJLy8gY2hlY2sgaWYgd2UgaGF2ZSB2YWx1ZXMNCgkJaWYgKCR0aGlzLT5kYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KDQoJCS8vIGRhdGEgZG9lcyBub3QgZXhpc3QNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIExvYWQgb25lDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAkc2VsZWN0ICBBcnJheSBvZiBzZWxlY3Rpb24ga2V5cw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICR0YWJsZXMgIEFycmF5IG9mIHRhYmxlcyB0byBzZWFyY2gNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkd2hlcmUgICBBcnJheSBvZiB3aGVyZSBrZXk9PnZhbHVlIG1hdGNoIGV4aXN0DQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgJG9yZGVyICAgQXJyYXkgb2YgaG93IHRvIG9yZGVyIHRoZSBkYXRhDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIG9uZShhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwgP2FycmF5ICRvcmRlciA9IG51bGwpOiBib29sDQoJew0KCQlpZiAoKCR0YWJsZXMgPSAkdGhpcy0+bm9ybWFsaXplVGFibGVzKCR0YWJsZXMpKSA9PT0gbnVsbCkNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJLy8gZ2V0IHRoZSBxdWVyeQ0KCQkkcXVlcnkgPSAkdGhpcy0+cXVlcnkoJHNlbGVjdCwgJHRhYmxlcywgJHdoZXJlLCAkb3JkZXIpOw0KDQoJCS8vIExvYWQgdGhlIGl0ZW0NCgkJJHRoaXMtPmRiLT5zZXRRdWVyeSgkcXVlcnksIDAsIDEpOw0KCQkkdGhpcy0+ZGItPmV4ZWN1dGUoKTsNCg0KCQkvLyBjaGVjayBpZiB3ZSBoYXZlIHZhbHVlcw0KCQlpZiAoJHRoaXMtPmRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoNCgkJLy8gZGF0YSBkb2VzIG5vdCBleGlzdA0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSBxdWVyeSBvYmplY3QuDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzLg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAkdGFibGVzICAgQXJyYXkgb2YgdGFibGVzIHRvIHNlYXJjaC4NCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAgJHdoZXJlICAgIEFycmF5IG9mIHdoZXJlIGtleT0+dmFsdWUgbWF0Y2ggZXhpc3QuDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICRvcmRlciAgICBBcnJheSBvZiBob3cgdG8gb3JkZXIgdGhlIGRhdGEuDQoJICogQHBhcmFtICAgaW50fG51bGwgICAgICRsaW1pdCAgICBMaW1pdCB0aGUgbnVtYmVyIG9mIHZhbHVlcyByZXR1cm5lZC4NCgkgKg0KCSAqIEByZXR1cm4gIG9iamVjdHxudWxsICBUaGUgcXVlcnkgb2JqZWN0IChEYXRhYmFzZVF1ZXJ5KS4NCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBxdWVyeShhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwNCgkJP2FycmF5ICRvcmRlciA9IG51bGwsID9pbnQgJGxpbWl0ID0gbnVsbCk6ID9vYmplY3QNCgl7DQoJCSRxdWVyeSA9ICR0aGlzLT5kYi0+Y3JlYXRlUXVlcnkoKTsNCg0KCQkkdGhpcy0+YXBwbHlTZWxlY3QoJHF1ZXJ5LCAkc2VsZWN0KTsNCgkJJHRoaXMtPmFwcGx5RnJvbUFuZEpvaW5zKCRxdWVyeSwgJHRhYmxlcyk7DQoJCSR0aGlzLT5hcHBseVdoZXJlKCRxdWVyeSwgJHdoZXJlKTsNCgkJJHRoaXMtPmFwcGx5T3JkZXIoJHF1ZXJ5LCAkb3JkZXIpOw0KCQkkdGhpcy0+YXBwbHlMaW1pdCgkcXVlcnksICRsaW1pdCk7DQoNCgkJcmV0dXJuICRxdWVyeTsNCgl9DQoNCgkvKioNCgkgKiBBcHBseSBTRUxFQ1QgY2xhdXNlIHRvIHRoZSBxdWVyeS4NCgkgKg0KCSAqIFN1cHBvcnRzIGF1dG8tYWxpYXNpbmcgYW5kIGludGVsbGlnZW50IHByZWZpeGluZy4NCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgJHF1ZXJ5ICAgVGhlIHF1ZXJ5IG9iamVjdC4NCgkgKiBAcGFyYW0gICBhcnJheSAgICRzZWxlY3QgIFRoZSBzZWxlY3QgZGVmaW5pdGlvbi4NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBhcHBseVNlbGVjdChvYmplY3QgJHF1ZXJ5LCBhcnJheSAkc2VsZWN0KTogdm9pZA0KCXsNCgkJLy8gSGFuZGxlICdhbGwnIHNlcGFyYXRlbHkgZmlyc3QNCgkJaWYgKGlzc2V0KCRzZWxlY3RbJ2FsbCddKSkNCgkJew0KCQkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkc2VsZWN0WydhbGwnXSkpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJHNlbGVjdFsnYWxsJ10gYXMgJHNlbGVjdEFsbCkNCgkJCQl7DQoJCQkJCSRxdWVyeS0+c2VsZWN0KCRzZWxlY3RBbGwpOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2VpZiAoaXNfc3RyaW5nKCRzZWxlY3RbJ2FsbCddKSkNCgkJCXsNCgkJCQkkcXVlcnktPnNlbGVjdCgkc2VsZWN0WydhbGwnXSk7DQoJCQl9DQoNCgkJCXVuc2V0KCRzZWxlY3RbJ2FsbCddKTsNCgkJfQ0KDQoJCS8vIE5vcm1hbGl6ZSB0aGUgc2VsZWN0IGFycmF5IHRvIGVuc3VyZSBrZXk9PmFsaWFzIHBhaXJzDQoJCSRub3JtYWxpemVkID0gJHRoaXMtPm5vcm1hbGl6ZVNlbGVjdEFycmF5KCRzZWxlY3QpOw0KDQoJCWlmICghQXJyYXlIZWxwZXI6OmNoZWNrKCRub3JtYWxpemVkKSkNCgkJew0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJLy8gUXVvdGUgYW5kIGFwcGx5IHRvIHF1ZXJ5DQoJCSRxdWVyeS0+c2VsZWN0KA0KCQkJJHRoaXMtPmRiLT5xdW90ZU5hbWUoDQoJCQkJYXJyYXlfa2V5cygkbm9ybWFsaXplZCksDQoJCQkJYXJyYXlfdmFsdWVzKCRub3JtYWxpemVkKQ0KCQkJKQ0KCQkpOw0KCX0NCg0KCS8qKg0KCSAqIEFwcGx5IEZST00gYW5kIEpPSU4gY2xhdXNlcy4NCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgJHF1ZXJ5ICAgVGhlIHF1ZXJ5IG9iamVjdC4NCgkgKiBAcGFyYW0gICBhcnJheSAgICR0YWJsZXMgIFRoZSB0YWJsZSBkZWZpbml0aW9ucy4NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBhcHBseUZyb21BbmRKb2lucyhvYmplY3QgJHF1ZXJ5LCBhcnJheSAkdGFibGVzKTogdm9pZA0KCXsNCgkJJHF1ZXJ5LT5mcm9tKCR0aGlzLT5kYi0+cXVvdGVOYW1lKCR0aGlzLT5nZXRUYWJsZSgkdGFibGVzWydhJ10pLCAnYScpKTsNCgkJdW5zZXQoJHRhYmxlc1snYSddKTsNCg0KCQlpZiAoQXJyYXlIZWxwZXI6OmNoZWNrKCR0YWJsZXMpKQ0KCQl7DQoJCQlmb3JlYWNoICgkdGFibGVzIGFzICRhcyA9PiAkZGV0YWlscykNCgkJCXsNCgkJCQkkdGFibGVfbmFtZSA9ICRkZXRhaWxzWyduYW1lJ10gPz8gbnVsbDsNCgkJCQkkam9pbl9vbiA9ICRkZXRhaWxzWydqb2luX29uJ10gPz8gbnVsbDsNCgkJCQkkYXNfb24gPSAkZGV0YWlsc1snYXNfb24nXSA/PyBudWxsOw0KCQkJCSRqb2luID0gc3RydG91cHBlcigkZGV0YWlsc1snam9pbiddID8/ICdMRUZUJyk7DQoNCgkJCQlpZiAoZW1wdHkoJHRhYmxlX25hbWUpIHx8IGVtcHR5KCRqb2luX29uKSB8fCBlbXB0eSgkYXNfb24pKQ0KCQkJCXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KDQoJCQkJLy8gYmFzaWMgam9pbiBmb3Igbm93IDopDQoJCQkJJHF1ZXJ5LT5qb2luKA0KCQkJCQkkam9pbiwNCgkJCQkJJHRoaXMtPmRiLT5xdW90ZU5hbWUoJHRoaXMtPmdldFRhYmxlKCR0YWJsZV9uYW1lKSwgJGFzKQ0KCQkJCQkuICcgT04gKCcgLiAkdGhpcy0+ZGItPnF1b3RlTmFtZSgkam9pbl9vbikNCgkJCQkJLiAnID0gJyAuICR0aGlzLT5kYi0+cXVvdGVOYW1lKCRhc19vbikgLiAnKScNCgkJCQkpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogQXBwbHkgV0hFUkUgY2xhdXNlcy4NCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICAgICRxdWVyeSAgVGhlIHF1ZXJ5IG9iamVjdC4NCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkd2hlcmUgIFdoZXJlIGNsYXVzZSBhcnJheS4NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBhcHBseVdoZXJlKG9iamVjdCAkcXVlcnksID9hcnJheSAkd2hlcmUpOiB2b2lkDQoJew0KCQkkd2hlcmUgPSAkdGhpcy0+bm9ybWFsaXplS2V5cygkd2hlcmUgPz8gW10pOw0KCQlpZiAoIUFycmF5SGVscGVyOjpjaGVjaygkd2hlcmUpKQ0KCQl7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQlmb3JlYWNoICgkd2hlcmUgYXMgJGtleSA9PiAkY29uZGl0aW9uKQ0KCQl7DQoJCQkkdGhpcy0+aGFuZGxlV2hlcmVDb25kaXRpb24oJHF1ZXJ5LCAka2V5LCAkY29uZGl0aW9uKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEFwcGx5IE9SREVSIEJZIGNsYXVzZS4NCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICAgICRxdWVyeSAgVGhlIHF1ZXJ5IG9iamVjdC4NCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkb3JkZXIgIE9yZGVyIGJ5IGNsYXVzZS4NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBhcHBseU9yZGVyKG9iamVjdCAkcXVlcnksID9hcnJheSAkb3JkZXIpOiB2b2lkDQoJew0KCQkkb3JkZXIgPSAkdGhpcy0+bm9ybWFsaXplS2V5cygkb3JkZXIgPz8gW10pOw0KCQlpZiAoQXJyYXlIZWxwZXI6OmNoZWNrKCRvcmRlcikpDQoJCXsNCgkJCWZvcmVhY2ggKCRvcmRlciBhcyAka2V5ID0+ICRkaXJlY3Rpb24pDQoJCQl7DQoJCQkJJHF1ZXJ5LT5vcmRlcigkdGhpcy0+ZGItPnF1b3RlTmFtZSgka2V5KSAuICcgJyAuICRkaXJlY3Rpb24pOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogQXBwbHkgTElNSVQgY2xhdXNlLg0KCSAqDQoJICogQHBhcmFtICAgb2JqZWN0ICAgICRxdWVyeSAgVGhlIHF1ZXJ5IG9iamVjdC4NCgkgKiBAcGFyYW0gICBpbnR8bnVsbCAgJGxpbWl0ICBOdW1iZXIgb2YgcmVjb3JkcyB0byBsaW1pdC4NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBhcHBseUxpbWl0KG9iamVjdCAkcXVlcnksID9pbnQgJGxpbWl0KTogdm9pZA0KCXsNCgkJaWYgKGlzX251bWVyaWMoJGxpbWl0KSkNCgkJew0KCQkJJHF1ZXJ5LT5zZXRMaW1pdCgkbGltaXQpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSBrZXkgZnJvbSB0aGUgc2VsZWN0aW9uIGFycmF5Lg0KCSAqDQoJICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgYSBrZXkgZnJvbSB0aGUgcHJvdmlkZWQgc2VsZWN0aW9uIGFycmF5Lg0KCSAqIFRoZSBrZXkgaXMgcmVtb3ZlZCBmcm9tIHRoZSBhcnJheSBhZnRlciBiZWluZyByZXRyaWV2ZWQuDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICRzZWxlY3QgICBBcnJheSBvZiBzZWxlY3Rpb24ga2V5cy4NCgkgKg0KCSAqIEByZXR1cm4gIHN0cmluZ3xudWxsICAgVGhlIGtleSwgb3IgbnVsbCBpZiBubyBrZXkgaXMgZm91bmQuDQoJICogQHNpbmNlICAgMy4yLjINCgkgKiovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEtleShhcnJheSAmJHNlbGVjdCk6ID9zdHJpbmcNCgl7DQoJCSRrZXkgPSBudWxsOw0KDQoJCS8vIENoZWNrIGZvciAna2V5JyBmaXJzdCBhbmQgZW5zdXJlIGl0J3MgYSBzdHJpbmcuDQoJCWlmIChpc3NldCgkc2VsZWN0WydrZXknXSkgJiYgaXNfc3RyaW5nKCRzZWxlY3RbJ2tleSddKSkNCgkJew0KCQkJJGtleSA9ICRzZWxlY3RbJ2tleSddOw0KCQkJdW5zZXQoJHNlbGVjdFsna2V5J10pOyAvLyBSZW1vdmUgJ2tleScgZnJvbSB0aGUgYXJyYXkuDQoJCX0NCg0KCQlyZXR1cm4gJGtleTsNCgl9DQoNCgkvKioNCgkgKiBOb3JtYWxpemUgbWl4ZWQtZm9ybWF0IHRhYmxlIGRlZmluaXRpb25zIHRvIGEgY29uc2lzdGVudCBzdHJ1Y3R1cmUuDQoJICoNCgkgKiBTdXBwb3J0ZWQgZm9ybWF0czoNCgkgKiAtIFsnYScgPT4gJ3RhYmxlJ10NCgkgKiAtIFsnYScgPT4gJ3RhYmxlJywgJ2InID0+IFsnbmFtZScgPT4gJ3RhYmxlMicsICdqb2luX29uJyA9PiAnYS5pZCcsICdhc19vbicgPT4gJ2IuZW50aXR5J11dDQoJICogLSBbJ2EudGFibGUnLCAnYi50YWJsZTIuaWQuZW50aXR5J10NCgkgKiAtIFsnYTp0YWJsZScsICdiOnRhYmxlMjppZDplbnRpdHknXQ0KCSAqIC0gWyd0YWJsZSddDQoJICogLSBbJ3RhYmxlJywgJ3RhYmxlMi5pZC5lbnRpdHknXQ0KCSAqIC0gWyd0YWJsZScsICd0YWJsZTI6aWQ6ZW50aXR5J10NCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAkdGFibGVzICBUaGUgcmF3IGlucHV0DQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsICBOb3JtYWxpemVkIFsnYWxpYXMnID0+ICd0YWJsZSddIGFuZCBqb2luIG1hcHBpbmdzLCBvciBudWxsIGlmICdhJyBpcyBtaXNzaW5nDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gbm9ybWFsaXplVGFibGVzKGFycmF5ICR0YWJsZXMpOiA/YXJyYXkNCgl7DQoJCWlmIChlbXB0eSgkdGFibGVzKSkNCgkJew0KCQkJcmV0dXJuIG51bGw7DQoJCX0NCg0KCQkkbm9ybWFsaXplZCA9IFtdOw0KDQoJCWZvcmVhY2ggKCR0YWJsZXMgYXMgJGtleSA9PiAkdmFsdWUpDQoJCXsNCgkJCWlmIChpc19pbnQoJGtleSkpDQoJCQl7DQoJCQkJJHRoaXMtPnBhcnNlVmFyaW91c1N5bnRheCgkdmFsdWUsICRub3JtYWxpemVkKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+cGFyc2VBc3NvY1N5bnRheCgka2V5LCAkdmFsdWUsICRub3JtYWxpemVkKTsNCgkJCX0NCgkJfQ0KDQoJCXJldHVybiBpc3NldCgkbm9ybWFsaXplZFsnYSddKSA/ICRub3JtYWxpemVkIDogbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBOb3JtYWxpemUgYWxsIEtleXMgaW4gYXJyYXkgYnkgZW5zdXJpbmc6DQoJICogLSBBbGwga2V5cyBhcmUgZnVsbHkgcXVhbGlmaWVkIChhZGQgImEuIiBpZiBtaXNzaW5nKQ0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICRkYXRhICBUaGUgcmF3IGRhdGUgYXJyYXkNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5ICBOb3JtYWxpemVkIGFycmF5IHdpdGggJ3RhYmxlLmNvbHVtbicgPT4gJHZhbHVlDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIG5vcm1hbGl6ZUtleXMoYXJyYXkgJGRhdGEpOiBhcnJheQ0KCXsNCgkJJG5vcm1hbGl6ZWQgPSBbXTsNCg0KCQlmb3JlYWNoICgkZGF0YSBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJew0KCQkJLy8gSWYgaW5kZXhlZCBhcnJheSAobm8gYWxpYXMpLCB3ZSBpZ25vcmUgdGhpcyByb3cNCgkJCWlmIChpc19pbnQoJGtleSkpDQoJCQl7DQoJCQkJY29udGludWU7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJGNvbHVtbiA9ICR0aGlzLT5ub3JtYWxpemVDb2x1bW4oJ2EnLCAka2V5KTsNCgkJCX0NCg0KCQkJJG5vcm1hbGl6ZWRbJGNvbHVtbl0gPSAkdmFsdWU7DQoJCX0NCg0KCQlyZXR1cm4gJG5vcm1hbGl6ZWQ7DQoJfQ0KDQoJLyoqDQoJICogTm9ybWFsaXplIFNFTEVDVCBhcnJheSBieSBlbnN1cmluZzoNCgkgKiAtIEFsbCBrZXlzIGFyZSBmdWxseSBxdWFsaWZpZWQgKGFkZCAiYS4iIGlmIG1pc3NpbmcpDQoJICogLSBBbGwgdmFsdWVzIGFyZSBhbGlhc2VzIChlaXRoZXIgcHJvdmlkZWQgb3IgZXh0cmFjdGVkIGZyb20ga2V5KQ0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICRzZWxlY3QgIFRoZSByYXcgc2VsZWN0IGFycmF5DQoJICoNCgkgKiBAcmV0dXJuICBhcnJheSAgTm9ybWFsaXplZCBhcnJheSB3aXRoICd0YWJsZS5jb2x1bW4nID0+ICdhbGlhcycNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gbm9ybWFsaXplU2VsZWN0QXJyYXkoYXJyYXkgJHNlbGVjdCk6IGFycmF5DQoJew0KCQkkbm9ybWFsaXplZCA9IFtdOw0KDQoJCWZvcmVhY2ggKCRzZWxlY3QgYXMgJGtleSA9PiAkdmFsdWUpDQoJCXsNCgkJCS8vIElmIGluZGV4ZWQgYXJyYXkgKG5vIGFsaWFzKSwgdXNlIHRoZSB2YWx1ZSBhcyBrZXkNCgkJCWlmIChpc19pbnQoJGtleSkpDQoJCQl7DQoJCQkJJGNvbHVtbiA9ICR0aGlzLT5ub3JtYWxpemVDb2x1bW4oJ2EnLCAkdmFsdWUpOw0KCQkJCSRhbGlhcyAgPSAkdGhpcy0+ZXh0cmFjdEFsaWFzKCRjb2x1bW4pOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRjb2x1bW4gPSAkdGhpcy0+bm9ybWFsaXplQ29sdW1uKCdhJywgJGtleSk7DQoJCQkJJGFsaWFzICA9IGlzX3N0cmluZygkdmFsdWUpICYmICR2YWx1ZSAhPT0gJycgPyAkdmFsdWUgOiAkdGhpcy0+ZXh0cmFjdEFsaWFzKCRjb2x1bW4pOw0KCQkJfQ0KDQoJCQkkbm9ybWFsaXplZFskY29sdW1uXSA9ICRhbGlhczsNCgkJfQ0KDQoJCXJldHVybiAkbm9ybWFsaXplZDsNCgl9DQoNCgkvKioNCgkgKiBFeHRyYWN0cyB0aGUgYWxpYXMgZnJvbSBhIGNvbHVtbiBuYW1lLg0KCSAqIChlLmcuLCAiYS5pZCIg4oaSICJpZCIsICJiLnVzZXJfbmFtZSIg4oaSICJ1c2VyX25hbWUiLCAibmFtZSIg4oaSICJuYW1lIikNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJGNvbHVtbiAgRnVsbHktcXVhbGlmaWVkIGNvbHVtbiBuYW1lDQoJICoNCgkgKiBAcmV0dXJuICBzdHJpbmcgIEFsaWFzDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIGV4dHJhY3RBbGlhcyhzdHJpbmcgJGNvbHVtbik6IHN0cmluZw0KCXsNCgkJJHBhcnRzID0gZXhwbG9kZSgnLicsICRjb2x1bW4pOw0KCQlyZXR1cm4gZW5kKCRwYXJ0cyk7DQoJfQ0KDQoJLyoqDQoJICogSGFuZGxlIGEgc2luZ2xlIHdoZXJlIGNvbmRpdGlvbi4NCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICAgJHF1ZXJ5ICAgICBUaGUgcXVlcnkgb2JqZWN0Lg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgJGNvbHVtbiAgICBUaGUgY29sdW1uIG5hbWUuDQoJICogQHBhcmFtICAgbWl4ZWQgICAgICAkY29uZGl0aW9uIFRoZSBjb25kaXRpb24gdmFsdWUgb3IgY29uZmlnIGFycmF5Lg0KCSAqIEBwYXJhbSAgIGludCAgICAgICAgJGNvdW50ZXIgICBUaGUgZGVwdGggY291bnRlci4NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gaGFuZGxlV2hlcmVDb25kaXRpb24ob2JqZWN0ICRxdWVyeSwgc3RyaW5nICRjb2x1bW4sICRjb25kaXRpb24sIGludCAkY291bnRlciA9IDApOiB2b2lkDQoJew0KCQlpZiAoQXJyYXlIZWxwZXI6OmNoZWNrKCRjb25kaXRpb24pKQ0KCQl7DQoJCQlpZiAoIWlzc2V0KCRjb25kaXRpb25bJ3ZhbHVlJ10sICRjb25kaXRpb25bJ29wZXJhdG9yJ10pKQ0KCQkJew0KCQkJCS8vIGFsbG93IG9ubHkgb25lIHN0ZXAgZG93biwgc28gb25lIGNvbHVtbiBjYW4gZGlmZmVyZW50IHdoZXJlIG1hcHBpbmcNCgkJCQlpZiAoJGNvdW50ZXIgPT09IDApDQoJCQkJew0KCQkJCQkkY291bnRlcisrOw0KCQkJCQlmb3JlYWNoICgkY29uZGl0aW9uIGFzICRjb2x1bW5fY29uZGl0aW9uKQ0KCQkJCQl7DQoJCQkJCQkkdGhpcy0+aGFuZGxlV2hlcmVDb25kaXRpb24oJHF1ZXJ5LCAkY29sdW1uLCAkY29sdW1uX2NvbmRpdGlvbiwgJGNvdW50ZXIpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCXJldHVybjsNCgkJCX0NCg0KCQkJJHRoaXMtPmhhbmRsZUFkdmFuY2VkQ29uZGl0aW9uKA0KCQkJCSRxdWVyeSwNCgkJCQkkdGhpcy0+ZGItPnF1b3RlTmFtZSgkY29sdW1uKSwNCgkJCQkkY29uZGl0aW9uWyd2YWx1ZSddLA0KCQkJCSRjb25kaXRpb25bJ29wZXJhdG9yJ10sDQoJCQkJJGNvbmRpdGlvblsncXVvdGUnXSA/PyB0cnVlDQoJCQkpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJLy8gU2ltcGxlIGtleSA9IHZhbHVlIGNsYXVzZQ0KCQkJJHF1ZXJ5LT53aGVyZSgkdGhpcy0+ZGItPnF1b3RlTmFtZSgkY29sdW1uKSAuICcgPSAnIC4gJHRoaXMtPnF1b3RlKCRjb25kaXRpb24pKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEhhbmRsZSBhZHZhbmNlZCAob3BlcmF0b3ItYmFzZWQpIHdoZXJlIGNvbmRpdGlvbnMuDQoJICoNCgkgKiBAcGFyYW0gICBvYmplY3QgICAgICAgICRxdWVyeSAgICAgVGhlIHF1ZXJ5IG9iamVjdC4NCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICAgICRjb2x1bW4gICAgVGhlIHF1b3RlZCBjb2x1bW4gbmFtZS4NCgkgKiBAcGFyYW0gICBtaXhlZCAgICAgICAgICR2YWx1ZSAgICAgVGhlIHZhbHVlIHRvIGNvbXBhcmUuDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICAkb3BlcmF0b3IgIFRoZSBTUUwgb3BlcmF0b3IgdG8gdXNlLg0KCSAqIEBwYXJhbSAgIGJvb2wgICAgICAgICAgJHF1b3RlICAgICBXaGV0aGVyIHRvIHF1b3RlIHRoZSB2YWx1ZShzKS4NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gaGFuZGxlQWR2YW5jZWRDb25kaXRpb24oDQoJCW9iamVjdCAkcXVlcnksDQoJCXN0cmluZyAkY29sdW1uLA0KCQkkdmFsdWUsDQoJCXN0cmluZyAkb3BlcmF0b3IsDQoJCWJvb2wgJHF1b3RlID0gdHJ1ZQ0KCSk6IHZvaWQNCgl7DQoJCWlmIChBcnJheUhlbHBlcjo6Y2hlY2soJHZhbHVlKSkNCgkJew0KCQkJJHRoaXMtPmhhbmRsZUFycmF5Q29uZGl0aW9uKCRxdWVyeSwgJGNvbHVtbiwgJHZhbHVlLCAkb3BlcmF0b3IsICRxdW90ZSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdGhpcy0+aGFuZGxlU2NhbGFyQ29uZGl0aW9uKCRxdWVyeSwgJGNvbHVtbiwgJHZhbHVlLCAkb3BlcmF0b3IsICRxdW90ZSk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBIYW5kbGUgYW4gYXJyYXktYmFzZWQgY29uZGl0aW9uLCBlLmcuLCBJTiAoLi4uKSBvciBOT1QgSU4gKC4uLikuDQoJICoNCgkgKiBAcGFyYW0gICBvYmplY3QgICAgICRxdWVyeSAgICAgVGhlIHF1ZXJ5IG9iamVjdC4NCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICRjb2x1bW4gICAgVGhlIHF1b3RlZCBjb2x1bW4gbmFtZS4NCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICR2YWx1ZXMgICAgVGhlIGFycmF5IG9mIHZhbHVlcy4NCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICRvcGVyYXRvciAgVGhlIFNRTCBvcGVyYXRvciAoZS5nLiwgSU4sIE5PVCBJTikuDQoJICogQHBhcmFtICAgYm9vbCAgICAgICAkcXVvdGUgICAgIFdoZXRoZXIgdG8gcXVvdGUgdGhlIHZhbHVlcy4NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gaGFuZGxlQXJyYXlDb25kaXRpb24oDQoJCW9iamVjdCAkcXVlcnksDQoJCXN0cmluZyAkY29sdW1uLA0KCQlhcnJheSAkdmFsdWVzLA0KCQlzdHJpbmcgJG9wZXJhdG9yLA0KCQlib29sICRxdW90ZSA9IHRydWUNCgkpOiB2b2lkDQoJew0KCQkkbGlzdCA9ICRxdW90ZQ0KCQkJPyBpbXBsb2RlKCcsJywgYXJyYXlfbWFwKGZuKCR2KSA9PiAkdGhpcy0+cXVvdGUoJHYpLCAkdmFsdWVzKSkNCgkJCTogaW1wbG9kZSgnLCcsICR2YWx1ZXMpOw0KDQoJCSRxdWVyeS0+d2hlcmUoInskY29sdW1ufSB7JG9wZXJhdG9yfSAoeyRsaXN0fSkiKTsNCgl9DQoNCgkvKioNCgkgKiBIYW5kbGUgYSBzY2FsYXIgdmFsdWUgY29uZGl0aW9uLg0KCSAqDQoJICogQHBhcmFtICAgb2JqZWN0ICAgICAkcXVlcnkgICAgIFRoZSBxdWVyeSBvYmplY3QuDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAkY29sdW1uICAgIFRoZSBxdW90ZWQgY29sdW1uIG5hbWUuDQoJICogQHBhcmFtICAgbWl4ZWQgICAgICAkdmFsdWUgICAgIFRoZSB2YWx1ZSB0byBjb21wYXJlLg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgJG9wZXJhdG9yICBUaGUgU1FMIG9wZXJhdG9yIChlLmcuLCA9LCAhPSwgPikuDQoJICogQHBhcmFtICAgYm9vbCAgICAgICAkcXVvdGUgICAgIFdoZXRoZXIgdG8gcXVvdGUgdGhlIHZhbHVlLg0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAgIDUuMS4xDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBoYW5kbGVTY2FsYXJDb25kaXRpb24oDQoJCW9iamVjdCAkcXVlcnksDQoJCXN0cmluZyAkY29sdW1uLA0KCQkkdmFsdWUsDQoJCXN0cmluZyAkb3BlcmF0b3IsDQoJCWJvb2wgJHF1b3RlID0gdHJ1ZQ0KCSk6IHZvaWQNCgl7DQoJCSRmb3JtYXR0ZWQgPSAkcXVvdGUgPyAkdGhpcy0+cXVvdGUoJHZhbHVlKSA6ICR2YWx1ZTsNCgkJJHF1ZXJ5LT53aGVyZSgieyRjb2x1bW59IHskb3BlcmF0b3J9IHskZm9ybWF0dGVkfSIpOw0KCX0NCg0KCS8qKg0KCSAqIFBhcnNlIHZhcmlvdXMgc2hvcnQgc3ludGF4ZXM6IGNvbG9uLCBwaXBlLCBkb3QsIG9yIGZhbGxiYWNrIGZsYXQgdmFsdWUuDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICAgICRlbnRyeSAgICAgICBUaGUgcmF3IHN0cmluZyBlbnRyeQ0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAgJiRub3JtYWxpemVkIFRoZSBub3JtYWxpemVkIG91dHB1dCByZWZlcmVuY2UNCgkgKiBAcGFyYW0gICBzdHJpbmd8bnVsbCAgICRhbGlhcyAgICAgICBPcHRpb25hbCBvdmVycmlkZSBhbGlhcw0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAgIDUuMS4xDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZVZhcmlvdXNTeW50YXgoc3RyaW5nICRlbnRyeSwgYXJyYXkgJiRub3JtYWxpemVkLCA/c3RyaW5nICRhbGlhcyA9IG51bGwpOiB2b2lkDQoJew0KCQkkZW50cnkgPSB0cmltKCRlbnRyeSk7DQoNCgkJaWYgKCRlbnRyeSA9PT0gJycpDQoJCXsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCWlmIChzdHJwb3MoJGVudHJ5LCAnOicpICE9PSBmYWxzZSkNCgkJew0KCQkJJHRoaXMtPnBhcnNlQ29sb25TeW50YXgoJGFsaWFzID8gInskYWxpYXN9OnskZW50cnl9IiA6ICRlbnRyeSwgJG5vcm1hbGl6ZWQpOw0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJaWYgKHN0cnBvcygkZW50cnksICd8JykgIT09IGZhbHNlKQ0KCQl7DQoJCQkkdGhpcy0+cGFyc2VQaXBlU3ludGF4KCRhbGlhcyA/ICJ7JGFsaWFzfXx7JGVudHJ5fSIgOiAkZW50cnksICRub3JtYWxpemVkKTsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCWlmIChzdHJwb3MoJGVudHJ5LCAnLicpICE9PSBmYWxzZSkNCgkJew0KCQkJJHRoaXMtPnBhcnNlRG90U3ludGF4KCRhbGlhcyA/ICJ7JGFsaWFzfS57JGVudHJ5fSIgOiAkZW50cnksICRub3JtYWxpemVkKTsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCS8vIERlZmF1bHQ6IGZsYXQgdGFibGUgbmFtZQ0KCQlpZiAoIWVtcHR5KCRhbGlhcykpDQoJCXsNCgkJCWlmICgkYWxpYXMgPT09ICdhJykgLy8gc3RvcCBpbmZpbml0ZSByZWN1cnNpb24NCgkJCXsNCgkJCQkkdGhpcy0+YWRkVGFibGVFbnRyeSgkYWxpYXMsICRlbnRyeSwgJG5vcm1hbGl6ZWQpOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHRoaXMtPnBhcnNlRmxhdFRhYmxlKCRlbnRyeSwgJG5vcm1hbGl6ZWQpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogUGFyc2UgY29sb24gc3ludGF4IHN1Y2ggYXMgImE6dGFibGUiLCAiYjp0YWJsZTpqb2luX29uOmFzX29uIiwgb3IgInRhYmxlOmpvaW5fb246YXNfb24iDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICRlbnRyeSAgICAgICBUaGUgY29sb24tZGVsaW1pdGVkIHN0cmluZw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJiRub3JtYWxpemVkIFRoZSBub3JtYWxpemVkIG91dHB1dCByZWZlcmVuY2UNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VDb2xvblN5bnRheChzdHJpbmcgJGVudHJ5LCBhcnJheSAmJG5vcm1hbGl6ZWQpOiB2b2lkDQoJew0KCQkkdGhpcy0+cGFyc2VBcnJheUVudHJ5KGV4cGxvZGUoJzonLCAkZW50cnkpLCAkbm9ybWFsaXplZCk7DQoJfQ0KDQoJLyoqDQoJICogUGFyc2UgY29sb24gc3ludGF4IHN1Y2ggYXMgImF8dGFibGUiLCAiYnx0YWJsZXxqb2luX29ufGFzX29uIiwgb3IgInRhYmxlfGpvaW5fb246YXNfb24iDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICRlbnRyeSAgICAgICBUaGUgcGlwZS1kZWxpbWl0ZWQgc3RyaW5nDQoJICogQHBhcmFtICAgYXJyYXkgICAmJG5vcm1hbGl6ZWQgVGhlIG5vcm1hbGl6ZWQgb3V0cHV0IHJlZmVyZW5jZQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAgIDUuMS4xDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZVBpcGVTeW50YXgoc3RyaW5nICRlbnRyeSwgYXJyYXkgJiRub3JtYWxpemVkKTogdm9pZA0KCXsNCgkJJHRoaXMtPnBhcnNlQXJyYXlFbnRyeShleHBsb2RlKCd8JywgJGVudHJ5KSwgJG5vcm1hbGl6ZWQpOw0KCX0NCg0KCS8qKg0KCSAqIFBhcnNlIGRvdCBzeW50YXggc3VjaCBhcyAiYS50YWJsZSIsICJiLnRhYmxlMi5pZC5lbnRpdHkiLCAidGFibGUuam9pbl9vbi5hc19vbiINCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJGVudHJ5ICAgICAgIFRoZSBkb3QtZGVsaW1pdGVkIHN0cmluZw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJiRub3JtYWxpemVkIFRoZSBub3JtYWxpemVkIG91dHB1dCByZWZlcmVuY2UNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VEb3RTeW50YXgoc3RyaW5nICRlbnRyeSwgYXJyYXkgJiRub3JtYWxpemVkKTogdm9pZA0KCXsNCgkJJHRoaXMtPnBhcnNlQXJyYXlFbnRyeShleHBsb2RlKCcuJywgJGVudHJ5KSwgJG5vcm1hbGl6ZWQpOw0KCX0NCg0KCS8qKg0KCSAqIENvbWJpbmUgdGhlIGVudHJ5IHBhcnRzIGludCB0aGUgY29ycmV0IGZvcm1hdA0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAkcGFydHMgICAgICAgVGhlIHBhcnRzIG9mIHRoZSBlbnRyeQ0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJiRub3JtYWxpemVkIFRoZSBub3JtYWxpemVkIG91dHB1dCByZWZlcmVuY2UNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VBcnJheUVudHJ5KGFycmF5ICRwYXJ0cywgYXJyYXkgJiRub3JtYWxpemVkKTogdm9pZA0KCXsNCgkJJGNvdW50ID0gY291bnQoJHBhcnRzKTsNCg0KCQlpZiAoJGNvdW50ID09PSAyKQ0KCQl7DQoJCQlbJGFsaWFzLCAkdGFibGVdID0gJHBhcnRzOw0KCQkJJHRoaXMtPmFkZFRhYmxlRW50cnkoJGFsaWFzLCAkdGFibGUsICRub3JtYWxpemVkKTsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCWlmICgkY291bnQgPT09IDMpDQoJCXsNCgkJCSRhbGlhcyA9IGNocig5NyArIGNvdW50KCRub3JtYWxpemVkKSk7DQoJCQlbJHRhYmxlLCAkam9pbl9vbiwgJGFzX29uXSA9ICRwYXJ0czsNCgkJCSR0aGlzLT5hZGRKb2luVGFibGVFbnRyeSgkYWxpYXMsICR0YWJsZSwgJGpvaW5fb24sICRhc19vbiwgbnVsbCwgJG5vcm1hbGl6ZWQpOw0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJaWYgKCRjb3VudCA9PT0gNCkNCgkJew0KCQkJWyRhbGlhcywgJHRhYmxlLCAkam9pbl9vbiwgJGFzX29uXSA9ICRwYXJ0czsNCgkJCSR0aGlzLT5hZGRKb2luVGFibGVFbnRyeSgkYWxpYXMsICR0YWJsZSwgJGpvaW5fb24sICRhc19vbiwgbnVsbCwgJG5vcm1hbGl6ZWQpOw0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJaWYgKCRjb3VudCA9PT0gNSkNCgkJew0KCQkJWyRhbGlhcywgJHRhYmxlLCAkam9pbl9vbiwgJGFzX29uLCAkam9pbl0gPSAkcGFydHM7DQoJCQkkdGhpcy0+YWRkSm9pblRhYmxlRW50cnkoJGFsaWFzLCAkdGFibGUsICRqb2luX29uLCAkYXNfb24sICRqb2luLCAkbm9ybWFsaXplZCk7DQoJCQlyZXR1cm47DQoJCX0NCgkJLy8gc2lsZW50bHkgaWdub3JlIG1hbGZvcm1lZCBpbnB1dA0KCX0NCg0KCS8qKg0KCSAqIFBhcnNlIGZsYXQgZW50cnkgbGlrZSAidGFibGUiIHdpdGggYXV0b21hdGljIGFsaWFzaW5nDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICR0YWJsZSAgICAgICBUaGUgdGFibGUgbmFtZQ0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJiRub3JtYWxpemVkIFRoZSBub3JtYWxpemVkIG91dHB1dCByZWZlcmVuY2UNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VGbGF0VGFibGUoc3RyaW5nICR0YWJsZSwgYXJyYXkgJiRub3JtYWxpemVkKTogdm9pZA0KCXsNCgkJJGFsaWFzID0gY2hyKDk3ICsgY291bnQoJG5vcm1hbGl6ZWQpKTsNCgkJJHRoaXMtPmFkZFRhYmxlRW50cnkoJGFsaWFzLCAkdGFibGUsICRub3JtYWxpemVkKTsNCgl9DQoNCgkvKioNCgkgKiBQYXJzZSBhc3NvY2lhdGl2ZSBhcnJheSBlbnRyeSwgZWl0aGVyIGEgcmF3IHN0cmluZyBvciBhIGpvaW4gc3RydWN0dXJlDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICAgICAkYWxpYXMgICAgICAgVGFibGUgYWxpYXMNCgkgKiBAcGFyYW0gICBzdHJpbmd8YXJyYXkgICAkdmFsdWUgICAgICAgVGhlIHRhYmxlIGRlZmluaXRpb24gb3Igam9pbiBhcnJheQ0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAgICYkbm9ybWFsaXplZCBUaGUgbm9ybWFsaXplZCBvdXRwdXQgcmVmZXJlbmNlDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlQXNzb2NTeW50YXgoc3RyaW5nICRhbGlhcywgJHZhbHVlLCBhcnJheSAmJG5vcm1hbGl6ZWQpOiB2b2lkDQoJew0KCQlpZiAoaXNfYXJyYXkoJHZhbHVlKSkNCgkJew0KCQkJJHRoaXMtPmFkZEpvaW5UYWJsZUVudHJ5KA0KCQkJCSRhbGlhcywNCgkJCQkkdmFsdWVbJ25hbWUnXSA/PyAnJywNCgkJCQkkdmFsdWVbJ2pvaW5fb24nXSA/PyAnJywNCgkJCQkkdmFsdWVbJ2FzX29uJ10gPz8gJycsDQoJCQkJJHZhbHVlWydqb2luJ10gPz8gbnVsbCwNCgkJCQkkbm9ybWFsaXplZA0KCQkJKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR0aGlzLT5hZGRUYWJsZUVudHJ5KCRhbGlhcywgJHZhbHVlLCAkbm9ybWFsaXplZCk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBBZGQgYSBnaXZlbiBzZXQgb2YgZW50cmllcyB0byB0aGUgbm9ybWFsaXplZCBhcnJheQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAkYWxpYXMgICAgICAgVGFibGUgYWxpYXMNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICR0YWJsZSAgICAgICBUYWJsZSBuYW1lDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAmJG5vcm1hbGl6ZWQgVGhlIG5vcm1hbGl6ZWQgb3V0cHV0IHJlZmVyZW5jZQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAgIDUuMS4xDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBhZGRUYWJsZUVudHJ5KHN0cmluZyAkYWxpYXMsIHN0cmluZyAkdGFibGUsIGFycmF5ICYkbm9ybWFsaXplZCk6IHZvaWQNCgl7DQoJCSRhbGlhcyA9IHRyaW0oJGFsaWFzKTsNCgkJJHRhYmxlID0gdHJpbSgkdGFibGUpOw0KDQoJCWlmICgkYWxpYXMgPT09ICdhJyAmJiAkdGFibGUgIT09ICcnKQ0KCQl7DQoJCQlpZiAoaXNzZXQoJG5vcm1hbGl6ZWRbJGFsaWFzXSkpDQoJCQl7DQoJCQkJcmV0dXJuOw0KCQkJfQ0KDQoJCQkkbm9ybWFsaXplZFskYWxpYXNdID0gJHRhYmxlOw0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJJHRoaXMtPnBhcnNlVmFyaW91c1N5bnRheCgkdGFibGUsICRub3JtYWxpemVkLCAkYWxpYXMpOw0KCX0NCg0KCS8qKg0KCSAqIEFkZCBhIGdpdmVuIHNldCBvZiBlbnRyaWVzIHRvIHRoZSBub3JtYWxpemVkIGFycmF5DQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICAgJGFsaWFzICAgICAgIFRhYmxlIGFsaWFzDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICR0YWJsZSAgICAgICBUYWJsZSBuYW1lDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICRqb2luT24gICAgICBUaGUgam9pbiBvbiBjb2x1bW4gbmFtZQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgICAkYXNPbiAgICAgICAgVGhlIGFzIG9uIGNvbHVtbiBuYW1lDQoJICogQHBhcmFtICAgc3RyaW5nfG51bGwgICRqb2luICAgICAgICBUaGUgam9pbiB0eXBlDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICYkbm9ybWFsaXplZCBUaGUgbm9ybWFsaXplZCBvdXRwdXQgcmVmZXJlbmNlDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIGFkZEpvaW5UYWJsZUVudHJ5KA0KCQlzdHJpbmcgJGFsaWFzLA0KCQlzdHJpbmcgJHRhYmxlLA0KCQlzdHJpbmcgJGpvaW5PbiwNCgkJc3RyaW5nICRhc09uLA0KCQk/c3RyaW5nICRqb2luLA0KCQlhcnJheSAmJG5vcm1hbGl6ZWQNCgkpOiB2b2lkDQoJew0KCQkkYWxpYXMgICAgID0gdHJpbSgkYWxpYXMpOw0KCQkkdGFibGVOYW1lID0gdHJpbSgkdGFibGUpOw0KCQkkam9pbk9uICAgID0gdHJpbSgkam9pbk9uKTsNCgkJJGFzT24gICAgICA9IHRyaW0oJGFzT24pOw0KDQoJCWlmICgNCgkJCSRhbGlhcyA9PT0gJycgfHwgJGFsaWFzID09PSAnYScgfHwNCgkJCSR0YWJsZSA9PT0gJycgfHwgJGpvaW5PbiA9PT0gJycgfHwgJGFzT24gPT09ICcnDQoJCSkgew0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJaWYgKGlzc2V0KCRub3JtYWxpemVkWyRhbGlhc10pKQ0KCQl7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQlpZiAoJGpvaW4gIT09IG51bGwpDQoJCXsNCgkJCSRqb2luID0gdHJpbSgkam9pbik7DQoJCX0NCg0KCQkkbm9ybWFsaXplZFskYWxpYXNdID0gWw0KCQkJJ25hbWUnICAgID0+ICR0YWJsZSwNCgkJCSdqb2luX29uJyA9PiAkdGhpcy0+bm9ybWFsaXplQ29sdW1uKCdhJywgJGpvaW5PbiksDQoJCQknYXNfb24nICAgPT4gJHRoaXMtPm5vcm1hbGl6ZUNvbHVtbigkYWxpYXMsICRhc09uKSwNCgkJCSdqb2luJyAgID0+ICRqb2luDQoJCV07DQoJfQ0KDQoJLyoqDQoJICogQWRkIHRhYmxlIGFsaWFzIHRvIGNvbHVtbiBpZiBub3QgYWxyZWFkeSBwcmVzZW50Lg0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAkYWxpYXMgICBUaGUgdGFibGUgYWxpYXMNCgkgKiBAcGFyYW0gICBzdHJpbmcgICRjb2x1bW4gIFRoZSBjb2x1bW4gbmFtZQ0KCSAqDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbHVtbihzdHJpbmcgJGFsaWFzLCBzdHJpbmcgJGNvbHVtbik6IHN0cmluZw0KCXsNCgkJcmV0dXJuIChzdHJwb3MoJGNvbHVtbiwgJy4nKSAhPT0gZmFsc2UpDQoJCQk/ICRjb2x1bW4NCgkJCTogInskYWxpYXN9LnskY29sdW1ufSI7DQoJfQ==', '{}', '{}', '', 1, '2022-09-03 19:19:27', 70, 0, 1), (125, '2ad31f74-f579-499d-b98b-c4f54fd615dd', 'VDM.Interfaces.Database.LoadInterface', 'LoadInterface', 'interface', 'Database Load Interface\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.Database.LoadInterface', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIExvYWQgZGF0YSByb3dzIGFzIGFuIGFycmF5IG9mIGFzc29jaWF0ZWQgYXJyYXlzDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICR0YWJsZXMgICBBcnJheSBvZiB0YWJsZXMgdG8gc2VhcmNoDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICR3aGVyZSAgICBBcnJheSBvZiB3aGVyZSBrZXk9PnZhbHVlIG1hdGNoIGV4aXN0DQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICRvcmRlciAgICBBcnJheSBvZiBob3cgdG8gb3JkZXIgdGhlIGRhdGENCgkgKiBAcGFyYW0gICBpbnR8bnVsbCAgICAgJGxpbWl0ICAgIExpbWl0IHRoZSBudW1iZXIgb2YgdmFsdWVzIHJldHVybmVkDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHJvd3MoYXJyYXkgJHNlbGVjdCwgYXJyYXkgJHRhYmxlcywgP2FycmF5ICR3aGVyZSA9IG51bGwsDQoJCT9hcnJheSAkb3JkZXIgPSBudWxsLCA/aW50ICRsaW1pdCA9IG51bGwpOiA/YXJyYXk7DQoNCgkvKioNCgkgKiBMb2FkIGRhdGEgcm93cyBhcyBhbiBhcnJheSBvZiBvYmplY3RzDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICR0YWJsZXMgICBBcnJheSBvZiB0YWJsZXMgdG8gc2VhcmNoDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICR3aGVyZSAgICBBcnJheSBvZiB3aGVyZSBrZXk9PnZhbHVlIG1hdGNoIGV4aXN0DQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICRvcmRlciAgICBBcnJheSBvZiBob3cgdG8gb3JkZXIgdGhlIGRhdGENCgkgKiBAcGFyYW0gICBpbnR8bnVsbCAgICAgJGxpbWl0ICAgIExpbWl0IHRoZSBudW1iZXIgb2YgdmFsdWVzIHJldHVybmVkDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIGl0ZW1zKGFycmF5ICRzZWxlY3QsIGFycmF5ICR0YWJsZXMsID9hcnJheSAkd2hlcmUgPSBudWxsLA0KCQk/YXJyYXkgJG9yZGVyID0gbnVsbCwgP2ludCAkbGltaXQgPSBudWxsKTogP2FycmF5Ow0KDQoJLyoqDQoJICogTG9hZCBkYXRhIHJvdyBhcyBhbiBhc3NvY2lhdGVkIGFycmF5DQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgJHRhYmxlcyAgQXJyYXkgb2YgdGFibGVzIHRvIHNlYXJjaA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICR3aGVyZSAgIEFycmF5IG9mIHdoZXJlIGtleT0+dmFsdWUgbWF0Y2ggZXhpc3QNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkb3JkZXIgICAgQXJyYXkgb2YgaG93IHRvIG9yZGVyIHRoZSBkYXRhDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHJvdyhhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwgP2FycmF5ICRvcmRlciA9IG51bGwpOiA/YXJyYXk7DQoNCgkvKioNCgkgKiBMb2FkIGRhdGEgcm93IGFzIGFuIG9iamVjdA0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICRzZWxlY3QgICBBcnJheSBvZiBzZWxlY3Rpb24ga2V5cw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICR0YWJsZXMgIEFycmF5IG9mIHRhYmxlcyB0byBzZWFyY2gNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkd2hlcmUgICBBcnJheSBvZiB3aGVyZSBrZXk9PnZhbHVlIG1hdGNoIGV4aXN0DQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgJG9yZGVyICAgIEFycmF5IG9mIGhvdyB0byBvcmRlciB0aGUgZGF0YQ0KCSAqDQoJICogQHJldHVybiAgb2JqZWN0fG51bGwNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gaXRlbShhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwgP2FycmF5ICRvcmRlciA9IG51bGwpOiA/b2JqZWN0Ow0KDQoJLyoqDQoJICogR2V0IHRoZSBtYXggdmFsdWUgYmFzZWQgb24gYSBmaWx0ZXJlZCByZXN1bHQgZnJvbSBhIGdpdmVuIHRhYmxlDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICRmaWVsZCAgICAgVGhlIGZpZWxkIGtleQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgJHRhYmxlcyAgICBUaGUgdGFibGUNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICRmaWx0ZXIgICAgVGhlIGZpbHRlciBrZXlzDQoJICoNCgkgKiBAcmV0dXJuICBpbnR8bnVsbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBtYXgoJGZpZWxkLCBhcnJheSAkdGFibGVzLCBhcnJheSAkZmlsdGVyKTogP2ludDsNCg0KCS8qKg0KCSAqIENvdW50IHRoZSBudW1iZXIgb2YgaXRlbXMgYmFzZWQgb24gZmlsdGVyIHJlc3VsdCBmcm9tIGEgZ2l2ZW4gdGFibGUNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgJHRhYmxlcyAgICBUaGUgdGFibGUNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICRmaWx0ZXIgICAgVGhlIGZpbHRlciBrZXlzDQoJICoNCgkgKiBAcmV0dXJuICBpbnR8bnVsbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBjb3VudChhcnJheSAkdGFibGVzLCBhcnJheSAkZmlsdGVyKTogP2ludDsNCg0KCS8qKg0KCSAqIExvYWQgb25lIHZhbHVlIGZyb20gYSByb3cNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAkc2VsZWN0ICAgQXJyYXkgb2Ygc2VsZWN0aW9uIGtleXMNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAkdGFibGVzICBBcnJheSBvZiB0YWJsZXMgdG8gc2VhcmNoDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgJHdoZXJlICAgQXJyYXkgb2Ygd2hlcmUga2V5PT52YWx1ZSBtYXRjaCBleGlzdA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICRvcmRlciAgICBBcnJheSBvZiBob3cgdG8gb3JkZXIgdGhlIGRhdGENCgkgKg0KCSAqIEByZXR1cm4gIG1peGVkDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHZhbHVlKGFycmF5ICRzZWxlY3QsIGFycmF5ICR0YWJsZXMsID9hcnJheSAkd2hlcmUgPSBudWxsLCA/YXJyYXkgJG9yZGVyID0gbnVsbCk7DQoNCgkvKioNCgkgKiBMb2FkIHZhbHVlcyBmcm9tIG11bHRpcGxlIHJvd3MNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAkc2VsZWN0ICAgQXJyYXkgb2Ygc2VsZWN0aW9uIGtleXMNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHRhYmxlcyAgIEFycmF5IG9mIHRhYmxlcyB0byBzZWFyY2gNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAgJHdoZXJlICAgIEFycmF5IG9mIHdoZXJlIGtleT0+dmFsdWUgbWF0Y2ggZXhpc3QNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAgJG9yZGVyICAgIEFycmF5IG9mIGhvdyB0byBvcmRlciB0aGUgZGF0YQ0KCSAqIEBwYXJhbSAgIGludHxudWxsICAgICAkbGltaXQgICAgTGltaXQgdGhlIG51bWJlciBvZiB2YWx1ZXMgcmV0dXJuZWQNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5fG51bGwNCgkgKiBAc2luY2UgICAzLjIuMg0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gdmFsdWVzKGFycmF5ICRzZWxlY3QsIGFycmF5ICR0YWJsZXMsID9hcnJheSAkd2hlcmUgPSBudWxsLA0KCQk/YXJyYXkgJG9yZGVyID0gbnVsbCwgP2ludCAkbGltaXQgPSBudWxsKTogP2FycmF5Ow==', '{}', '{}', '', 1, '2022-10-22 19:20:18', 19, 0, 1), (126, '6cbef8f8-4813-48e3-b05a-65e1aea95171', 'VDM.Abstraction.Database', 'Database', 'abstract class', 'Database\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Abstraction.Database', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcRGF0YWJhc2VcRGF0YWJhc2VJbnRlcmZhY2UgYXMgSm9vbWxhRGF0YWJhc2U7', '{\"use_selection0\":{\"use\":\"640b5352-fb09-425f-a26e-cd44eda03f15\",\"as\":\"default\"},\"use_selection1\":{\"use\":\"58ab1a65-9a80-40a3-bb33-c50fbf003b63\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIEZ1bmN0aW9uIHRvIHF1b3RlIHZhbHVlcw0KCSAqDQoJICogQHNpbmNlIDUuMS4xDQoJICovDQoJdXNlIFF1b3RlVHJhaXQ7DQoNCgkvKioNCgkgKiBEYXRhYmFzZSBvYmplY3QgdG8gcXVlcnkgbG9jYWwgREINCgkgKg0KCSAqIEB2YXIgSm9vbWxhRGF0YWJhc2UNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwcm90ZWN0ZWQgSm9vbWxhRGF0YWJhc2UgJGRiOw0KDQoJLyoqDQoJICogQ3VycmVudCBjb21wb25lbnQgY29kZSBuYW1lDQoJICoNCgkgKiBAdmFyICAgICBzdHJpbmcNCgkgKiBAc2luY2UgNS4xLjENCgkgKi8NCglwcm90ZWN0ZWQgc3RyaW5nICRjb21wb25lbnRDb2RlOw0KDQoJLyoqDQoJICogQ29yZSBDb21wb25lbnQgVGFibGUgTmFtZQ0KCSAqDQoJICogQHZhciAgIHN0cmluZw0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXByb3RlY3RlZCBzdHJpbmcgJHRhYmxlOw0KDQoJLyoqDQoJICogQ29uc3RydWN0b3INCgkgKg0KCSAqIEB0aHJvd3MgXEV4Y2VwdGlvbg0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCg/Sm9vbWxhRGF0YWJhc2UgJGRiID0gbnVsbCkNCgl7DQoJCSR0aGlzLT5kYiA9ICRkYiA/OiBGYWN0b3J5OjpnZXRDb250YWluZXIoKS0+Z2V0KEpvb21sYURhdGFiYXNlOjpjbGFzcyk7DQoNCgkJJHRoaXMtPmNvbXBvbmVudENvZGUgPSBIZWxwZXI6OmdldENvZGUoKTsNCgkJJHRoaXMtPnRhYmxlID0gJyNfXycgLiAkdGhpcy0+Y29tcG9uZW50Q29kZTsNCgl9DQoNCgkvKioNCgkgKiBTZXQgYSB0YWJsZSBuYW1lLCBhZGRpbmcgdGhlDQoJICogICAgIGNvcmUgY29tcG9uZW50IGFzIG5lZWRlZA0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAkdGFibGUgICBUaGUgdGFibGUgc3RyaW5nDQoJICoNCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0VGFibGUoc3RyaW5nICR0YWJsZSk6IHN0cmluZw0KCXsNCgkJaWYgKHN0cnBvcygkdGFibGUsICcjX18nKSA9PT0gZmFsc2UpDQoJCXsNCgkJCXJldHVybiAkdGhpcy0+dGFibGUgLiAnXycgLiAkdGFibGU7DQoJCX0NCg0KCQlyZXR1cm4gJHRhYmxlOw0KCX0=', '{}', '{}', '', 1, '2018-10-05 17:01:41', 50, 0, 1), -(133, '524eb8f6-38d4-47dc-92ad-98b94e099ac0', 'VDM.Database.Insert', 'Insert', 'final class', 'Database Insert Class\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 'd9839333-a8f1-4a36-9256-5df4d349b3f6', '', '', '', '{\"0\":\"ad12ca1c-d3ce-4e7f-88c5-c6c92bdedc48\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Database.Insert', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRGF0ZVxEYXRlOw==', '{\"use_selection0\":{\"use\":\"b8176bdf-5615-4d91-8dfa-990d42f44127\",\"as\":\"default\"},\"use_selection1\":{\"use\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIERlZmF1bHQgU3dpdGNoDQoJICoNCgkgKiBAc2luY2UgNS4xLjENCgkgKi8NCgl1c2UgRGVmYXVsdFRyYWl0Ow0KDQoJLyoqDQoJICogVGhlIGhpc3RvcnkgdHJhY2tlciBidWNrZXQNCgkgKg0KCSAqIEB2YXIgICAgICBhcnJheQ0KCSAqIEBzaW5jZSAgNS4xLjENCgkgKiovDQoJcHJvdGVjdGVkIGFycmF5ICRoaXN0b3J5R3VpZDsNCg0KCS8qKg0KCSAqIEluc2VydCByb3dzIHRvIHRoZSBkYXRhYmFzZSAod2l0aCByZW1hcHBpbmcgYW5kIGZpbHRlcmluZyBjb2x1bW5zIG9wdGlvbikNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICRkYXRhICAgICAgRGF0YXNldCB0byBzdG9yZSBpbiBkYXRhYmFzZSBbYXJyYXkgb2YgYXJyYXlzIChrZXkgPT4gdmFsdWUpXQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIHRhYmxlIHdoZXJlIHRoZSBkYXRhIGlzIGJlaW5nIGFkZGVkDQoJICogQHBhcmFtICAgYXJyYXkgICAgJGNvbHVtbnMgICBEYXRhIGNvbHVtbnMgZm9yIHJlbWFwcGluZyBhbmQgZmlsdGVyaW5nDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHJvd3MoYXJyYXkgJGRhdGEsIHN0cmluZyAkdGFibGUsIGFycmF5ICRjb2x1bW5zID0gW10pOiBib29sDQoJew0KCQlpZiAoIUFycmF5SGVscGVyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCWlmICgkY29sdW1ucyA9PT0gW10pDQoJCXsNCgkJCSRjb2x1bW5zID0gJHRoaXMtPmdldEFycmF5Q29sdW1ucygkZGF0YSk7DQoJCX0NCg0KCQlyZXR1cm4gKCRjb2x1bW5zID09PSBbXSkgPyBmYWxzZSA6ICR0aGlzLT5pbnNlcnQoJGRhdGEsICR0YWJsZSwgJGNvbHVtbnMsIHRydWUpOw0KCX0NCg0KCS8qKg0KCSAqIEluc2VydCBpdGVtcyB0byB0aGUgZGF0YWJhc2UgKHdpdGggcmVtYXBwaW5nIGFuZCBmaWx0ZXJpbmcgY29sdW1ucyBvcHRpb24pDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkZGF0YSAgICAgICAgIERhdGEgdG8gc3RvcmUgaW4gZGF0YWJhc2UgKGFycmF5IG9mIG9iamVjdHMpDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRhYmxlICAgICAgICBUaGUgdGFibGUgd2hlcmUgdGhlIGRhdGEgaXMgYmVpbmcgYWRkZWQNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkY29sdW1ucyAgICAgIERhdGEgY29sdW1ucyBmb3IgcmVtYXBwaW5nIGFuZCBmaWx0ZXJpbmcNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gaXRlbXMoYXJyYXkgJGRhdGEsIHN0cmluZyAkdGFibGUsIGFycmF5ICRjb2x1bW5zID0gW10pOiBib29sDQoJew0KCQlpZiAoIUFycmF5SGVscGVyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCWlmICgkY29sdW1ucyA9PT0gW10pDQoJCXsNCgkJCSRjb2x1bW5zID0gJHRoaXMtPmdldE9iamVjdHNDb2x1bW5zKCRkYXRhKTsNCgkJfQ0KDQoJCXJldHVybiAoJGNvbHVtbnMgPT09IFtdKSA/IGZhbHNlIDogJHRoaXMtPmluc2VydCgkZGF0YSwgJHRhYmxlLCAkY29sdW1ucywgZmFsc2UpOw0KCX0NCg0KCS8qKg0KCSAqIEluc2VydCByb3cgdG8gdGhlIGRhdGFiYXNlDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkZGF0YSAgICAgIERhdGFzZXQgdG8gc3RvcmUgaW4gZGF0YWJhc2UgKGtleSA9PiB2YWx1ZSkNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdGFibGUgICAgIFRoZSB0YWJsZSB3aGVyZSB0aGUgZGF0YSBpcyBiZWluZyBhZGRlZA0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiByb3coYXJyYXkgJGRhdGEsIHN0cmluZyAkdGFibGUpOiBib29sDQoJew0KCQlyZXR1cm4gJHRoaXMtPnJvd3MoWyRkYXRhXSwgJHRhYmxlKTsNCgl9DQoNCgkvKioNCgkgKiBJbnNlcnQgaXRlbSB0byB0aGUgZGF0YWJhc2UNCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICAkZGF0YSAgICAgRGF0YXNldCB0byBzdG9yZSBpbiBkYXRhYmFzZSAoa2V5ID0+IHZhbHVlKQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIHRhYmxlIHdoZXJlIHRoZSBkYXRhIGlzIGJlaW5nIGFkZGVkDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIGl0ZW0ob2JqZWN0ICRkYXRhLCBzdHJpbmcgJHRhYmxlKTogYm9vbA0KCXsNCgkJcmV0dXJuICR0aGlzLT5pdGVtcyhbJGRhdGFdLCAkdGFibGUpOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBjb2x1bW5zIGZyb20gZGF0YSBhcnJheQ0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAkZGF0YSAgIERhdGEgYXJyYXkNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5DQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEFycmF5Q29sdW1ucyhhcnJheSAmJGRhdGEpOiBhcnJheQ0KCXsNCgkJJHJvdyA9IGFycmF5X3ZhbHVlcygkZGF0YSlbMF07DQoNCgkJaWYgKCFBcnJheUhlbHBlcjo6Y2hlY2soJHJvdykpDQoJCXsNCgkJCXJldHVybiBbXTsNCgkJfQ0KDQoJCSRjb2x1bW5zID0gYXJyYXlfa2V5cygkcm93KTsNCg0KCQlyZXR1cm4gYXJyYXlfY29tYmluZSgkY29sdW1ucywgJGNvbHVtbnMpOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBjb2x1bW5zIGZyb20gZGF0YSBvYmplY3RzDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICRkYXRhICAgRGF0YSBvYmplY3RzDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheQ0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRPYmplY3RzQ29sdW1ucyhhcnJheSAmJGRhdGEpOiBhcnJheQ0KCXsNCgkJJHJvdyA9IGFycmF5X3ZhbHVlcygkZGF0YSlbMF07DQoNCgkJaWYgKCFpc19vYmplY3QoJHJvdykpDQoJCXsNCgkJCXJldHVybiBbXTsNCgkJfQ0KDQoJCSRjb2x1bW5zID0gZ2V0X29iamVjdF92YXJzKCRyb3cpOw0KDQoJCXJldHVybiBhcnJheV9jb21iaW5lKGFycmF5X2tleXMoJGNvbHVtbnMpLCBhcnJheV9rZXlzKCRjb2x1bW5zKSk7DQoJfQ0KDQoJLyoqDQoJICogSW5zZXJ0IGRhdGEgaW50byB0aGUgZGF0YWJhc2UNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJGRhdGEgICAgICBEYXRhIHRvIHN0b3JlIGluIGRhdGFiYXNlDQoJICogQHBhcmFtICAgc3RyaW5nICAkdGFibGUgICAgIFRoZSB0YWJsZSB3aGVyZSB0aGUgZGF0YSBpcyBiZWluZyBhZGRlZA0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJGNvbHVtbnMgICBEYXRhIGNvbHVtbnMgZm9yIHJlbWFwcGluZyBhbmQgZmlsdGVyaW5nDQoJICogQHBhcmFtICAgYm9vbCAgICAkaXNBcnJheSAgIFdoZXRoZXIgdGhlIGRhdGEgaXMgYW4gYXJyYXkgb2YgYXJyYXlzIG9yIGFuIGFycmF5IG9mIG9iamVjdHMNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gaW5zZXJ0KGFycmF5ICYkZGF0YSwgc3RyaW5nICR0YWJsZSwgYXJyYXkgJGNvbHVtbnMsIGJvb2wgJGlzQXJyYXkpOiBib29sDQoJew0KCQkvLyBzZXQgam9vbWxhIGRlZmF1bHQgY29sdW1ucw0KCQkkYWRkX2NyZWF0ZWQgPSBmYWxzZTsNCgkJJGFkZF9jcmVhdGVkX2J5ID0gZmFsc2U7DQoJCSRhZGRfdmVyc2lvbiA9IGZhbHNlOw0KCQkkYWRkX3B1Ymxpc2hlZCA9IGZhbHNlOw0KDQoJCS8vIGNoZWNrIGlmIHdlIHNob3VsZCBsb2FkIHRoZSBkZWZhdWx0cw0KCQlpZiAoJHRoaXMtPmRlZmF1bHRzKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGRhdGUNCgkJCSRkYXRlID0gKG5ldyBEYXRlKCkpLT50b1NxbCgpOw0KDQoJCQlpZiAoIWlzc2V0KCRjb2x1bW5zWydjcmVhdGVkJ10pKQ0KCQkJew0KCQkJCSRjb2x1bW5zWydjcmVhdGVkJ10gPSAnIChvX08pICc7DQoJCQkJJGFkZF9jcmVhdGVkID0gdHJ1ZTsNCgkJCX0NCg0KCQkJaWYgKCFpc3NldCgkY29sdW1uc1snY3JlYXRlZF9ieSddKSkNCgkJCXsNCgkJCQkkY29sdW1uc1snY3JlYXRlZF9ieSddID0gJyAob19PKSAnOw0KCQkJCSRhZGRfY3JlYXRlZF9ieSA9IHRydWU7DQoJCQl9DQoNCgkJCWlmICghaXNzZXQoJGNvbHVtbnNbJ3ZlcnNpb24nXSkpDQoJCQl7DQoJCQkJJGNvbHVtbnNbJ3ZlcnNpb24nXSA9ICcgKG9fTykgJzsNCgkJCQkkYWRkX3ZlcnNpb24gPSB0cnVlOw0KCQkJfQ0KDQoJCQlpZiAoIWlzc2V0KCRjb2x1bW5zWydwdWJsaXNoZWQnXSkpDQoJCQl7DQoJCQkJJGNvbHVtbnNbJ3B1Ymxpc2hlZCddID0gJyAob19PKSAnOw0KCQkJCSRhZGRfcHVibGlzaGVkID0gdHJ1ZTsNCgkJCX0NCgkJCS8vIHRoZSAob19PKSBwcmV2ZW50cyBhbiBlbXB0eSB2YWx1ZSBmcm9tIGJlaW5nIGxvYWRlZA0KCQl9DQoNCgkJLy8gc2V0IGhpc3RvcnkgdmFycw0KCQkkdGhpcy0+ZW50aXR5ID0gJHRoaXMtPmdldFRhYmxlRW50aXR5TmFtZSgkdGFibGUpOw0KCQkkdGhpcy0+aGlzdG9yeUd1aWQgPSBbXTsNCg0KCQkvLyBnZXQgYSBxdWVyeSBvYmplY3QNCgkJJHF1ZXJ5ID0gJHRoaXMtPmRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHRhYmxlID0gJHRoaXMtPmdldFRhYmxlKCR0YWJsZSk7DQoNCgkJLy8gc2V0IHRoZSBxdWVyeSB0YXJnZXRzDQoJCSRxdWVyeS0+aW5zZXJ0KCR0aGlzLT5kYi0+cXVvdGVOYW1lKCR0YWJsZSkpLT5jb2x1bW5zKCR0aGlzLT5kYi0+cXVvdGVOYW1lKGFycmF5X2tleXMoJGNvbHVtbnMpKSk7DQoNCgkJLy8gbGltaXRpbmcgZmFjdG9yIG9uIHRoZSBhbW91bnQgb2Ygcm93cyB0byBpbnNlcnQgYmVmb3JlIHdlIHJlc2V0IHRoZSBxdWVyeQ0KCQkkbGltaXQgPSAzMDA7DQoNCgkJLy8gc2V0IHRoZSBpbnNlcnQgdmFsdWVzDQoJCWZvcmVhY2ggKCRkYXRhIGFzICRuciA9PiAkdmFsdWUpDQoJCXsNCgkJCS8vIGNoZWNrIHRoZSBsaW1pdA0KCQkJaWYgKCRsaW1pdCA8PSAxKQ0KCQkJew0KCQkJCS8vIGV4ZWN1dGUgYW5kIHJlc2V0IHRoZSBxdWVyeQ0KCQkJCSR0aGlzLT5kYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQkkdGhpcy0+ZGItPmV4ZWN1dGUoKTsNCg0KCQkJCS8vIHJlc2V0IGxpbWl0DQoJCQkJJGxpbWl0ID0gMzAwOw0KDQoJCQkJLy8gZ2V0IGEgcXVlcnkgb2JqZWN0DQoJCQkJJHF1ZXJ5ID0gJHRoaXMtPmRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkJCS8vIHNldCB0aGUgcXVlcnkgdGFyZ2V0cw0KCQkJCSRxdWVyeS0+aW5zZXJ0KCR0aGlzLT5kYi0+cXVvdGVOYW1lKCR0YWJsZSkpLT5jb2x1bW5zKCR0aGlzLT5kYi0+cXVvdGVOYW1lKGFycmF5X2tleXMoJGNvbHVtbnMpKSk7DQoJCQl9DQoNCgkJCSRyb3cgPSBbXTsNCgkJCWZvcmVhY2ggKCRjb2x1bW5zIGFzICRjb2x1bW4gPT4gJGtleSkNCgkJCXsNCgkJCQlpZiAoJyAob19PKSAnID09PSAka2V5KQ0KCQkJCXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KDQoJCQkJJHZhbCA9ICgkaXNBcnJheSAmJiBpc3NldCgkdmFsdWVbJGtleV0pKSA/ICR2YWx1ZVska2V5XQ0KCQkJCQk6ICgoISRpc0FycmF5ICYmIGlzc2V0KCR2YWx1ZS0+eyRrZXl9KSkgPyAkdmFsdWUtPnska2V5fSA6ICcnKTsNCg0KCQkJCS8vIHdlIGNhbiBvbmx5IHNldCBoaXN0b3J5IGlmIHdlIGhhdmUgYSBndWlkIGluIHRoZSBkYXRhIHNldA0KCQkJCWlmICgkY29sdW1uID09PSAnZ3VpZCcgJiYgIWVtcHR5KCR0aGlzLT5lbnRpdHkpICYmICR0aGlzLT5oaXN0b3J5ICYmICFlbXB0eSgkdmFsKSkNCgkJCQl7DQoJCQkJCSR0aGlzLT5oaXN0b3J5R3VpZFskdmFsXSA9IDE7DQoJCQkJfQ0KDQoJCQkJJHJvd1tdID0gJHRoaXMtPnF1b3RlKCR2YWwpOw0KCQkJfQ0KDQoJCQkvLyBzZXQgam9vbWxhIGRlZmF1bHQgY29sdW1ucw0KCQkJaWYgKCRhZGRfY3JlYXRlZCkNCgkJCXsNCgkJCQkkcm93W10gPSAkdGhpcy0+ZGItPnF1b3RlKCRkYXRlKTsNCgkJCX0NCg0KCQkJaWYgKCRhZGRfY3JlYXRlZF9ieSkNCgkJCXsNCgkJCQkkcm93W10gPSAkdGhpcy0+dXNlcklkOw0KCQkJfQ0KDQoJCQlpZiAoJGFkZF92ZXJzaW9uKQ0KCQkJew0KCQkJCSRyb3dbXSA9IDE7DQoJCQl9DQoNCgkJCWlmICgkYWRkX3B1Ymxpc2hlZCkNCgkJCXsNCgkJCQkkcm93W10gPSAxOw0KCQkJfQ0KDQoJCQkvLyBhZGQgdG8gcXVlcnkNCgkJCSRxdWVyeS0+dmFsdWVzKGltcGxvZGUoJywnLCAkcm93KSk7DQoNCgkJCS8vIGRlY3JlbWVudCB0aGUgbGltaXRlcg0KCQkJJGxpbWl0LS07DQoNCgkJCS8vIGNsZWFyIHRoZSBkYXRhIGZyb20gbWVtb3J5DQoJCQl1bnNldCgkZGF0YVskbnJdKTsNCgkJfQ0KDQoJCS8vIGV4ZWN1dGUgdGhlIGZpbmFsIHF1ZXJ5DQoJCSR0aGlzLT5kYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJHRoaXMtPmRiLT5leGVjdXRlKCk7DQoNCgkJLy8gdHJhY2sgdmVyc2lvbiBoaXN0b3J5DQoJCWlmICgkdGhpcy0+aGlzdG9yeSAmJiAhZW1wdHkoJHRoaXMtPmVudGl0eSkgJiYgJHRoaXMtPmhpc3RvcnlHdWlkICE9PSBbXSkNCgkJew0KCQkJJHRoaXMtPnRyYWNrSGlzdG9yeShhcnJheV9rZXlzKCR0aGlzLT5oaXN0b3J5R3VpZCksICR0YWJsZSk7DQoJCX0NCg0KCQkvLyBhbHdheXMgcmVzZXQgdGhlIHN3aXRjaCdzDQoJCSR0aGlzLT5kZWZhdWx0cygpLT5oaXN0b3J5KCk7DQoNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJLyoqDQoJICogQXR0ZW1wdCB0byBzZXQgaGlzdG9yeSByZWNvcmRzIGZvciB0aGUgc3BlY2lmaWVkIGVudGl0eS4NCgkgKg0KCSAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiBoaXN0b3J5IHRyYWNraW5nIGlzIGVuYWJsZWQgYW5kIHRoZSBwcm92aWRlZCBgJGVudGl0eWAgaGFzDQoJICogY29ycmVzcG9uZGluZyBHVUlEcyBpbiB0aGUgYCRoaXN0b3J5YCBhcnJheS4gSXQgdGhlbiBmZXRjaGVzIHRoZSBJRHMgZm9yIHRoZQ0KCSAqIG1hdGNoaW5nIEdVSURzIGZyb20gdGhlIGRhdGFiYXNlIGFuZCB0cmlnZ2VycyBoaXN0b3J5IHNldHRpbmcgb24gdGhlbS4NCgkgKg0KCSAqIEFueSBleGNlcHRpb25zIGR1cmluZyB0aGlzIHByb2Nlc3MgYXJlIHNpbGVudGx5IGNhdWdodCBhbmQgaWdub3JlZC4NCgkgKg0KCSAqIEBwYXJhbSAgYXJyYXkgICAkaGlzdG9yeSAgVGhlIGhpc3RvcnkgbWFwIHdpdGggZW50aXR5IEdVSURzIGFzIHZhbHVlcy4NCgkgKiBAcGFyYW0gIHN0cmluZyAgJHRhYmxlICAgIFRoZSBmdWxsIHRhYmxlIG5hbWUuDQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKiBAc2luY2UgIDUuMS4xDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHRyYWNrSGlzdG9yeShhcnJheSAkaGlzdG9yeSwgc3RyaW5nICR0YWJsZSk6IHZvaWQNCgl7DQoJCXRyeQ0KCQl7DQoJCQkkcXVlcnkgPSAkdGhpcy0+ZGItPmdldFF1ZXJ5KHRydWUpDQoJCQkJLT5zZWxlY3QoJHRoaXMtPmRiLT5xdW90ZU5hbWUoJ2lkJykpDQoJCQkJLT5mcm9tKCR0aGlzLT5kYi0+cXVvdGVOYW1lKCR0YWJsZSkpDQoJCQkJLT53aGVyZSgNCgkJCQkJJHRoaXMtPmRiLT5xdW90ZU5hbWUoJ2d1aWQnKSAuICcgSU4gKCcgLg0KCQkJCQlpbXBsb2RlKCcsJywgYXJyYXlfbWFwKGZuKCR2KSA9PiAkdGhpcy0+cXVvdGUoJHYpLCAkaGlzdG9yeSkpIC4NCgkJCQkJJyknDQoJCQkJKTsNCg0KCQkJJHRoaXMtPmRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJHRoaXMtPmRiLT5leGVjdXRlKCk7DQoNCgkJCWlmICgkdGhpcy0+ZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQkkdGhpcy0+c2V0TXVsdGlwbGVIaXN0b3J5KA0KCQkJCQkkdGhpcy0+ZGItPmxvYWRDb2x1bW4oKQ0KCQkJCSk7DQoJCQl9DQoJCX0NCgkJY2F0Y2ggKFxUaHJvd2FibGUgJGUpDQoJCXsNCgkJCS8vIFNpbGVudGx5IGlnbm9yZSBhbGwgZXJyb3JzDQoJCX0NCgl9', '{}', '{}', '', 1, '2022-09-03 14:06:26', 44, 0, 1), +(133, '524eb8f6-38d4-47dc-92ad-98b94e099ac0', 'VDM.Database.Insert', 'Insert', 'final class', 'Database Insert Class\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 'd9839333-a8f1-4a36-9256-5df4d349b3f6', '', '', '', '{\"0\":\"ad12ca1c-d3ce-4e7f-88c5-c6c92bdedc48\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Database.Insert', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRGF0ZVxEYXRlOw==', '{\"use_selection0\":{\"use\":\"b8176bdf-5615-4d91-8dfa-990d42f44127\",\"as\":\"default\"},\"use_selection1\":{\"use\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIERlZmF1bHQgU3dpdGNoDQoJICoNCgkgKiBAc2luY2UgNS4xLjENCgkgKi8NCgl1c2UgRGVmYXVsdFRyYWl0Ow0KDQoJLyoqDQoJICogVGhlIGhpc3RvcnkgdHJhY2tlciBidWNrZXQNCgkgKg0KCSAqIEB2YXIgICAgICBhcnJheQ0KCSAqIEBzaW5jZSAgNS4xLjENCgkgKiovDQoJcHJvdGVjdGVkIGFycmF5ICRoaXN0b3J5R3VpZDsNCg0KCS8qKg0KCSAqIEluc2VydCByb3dzIHRvIHRoZSBkYXRhYmFzZSAod2l0aCByZW1hcHBpbmcgYW5kIGZpbHRlcmluZyBjb2x1bW5zIG9wdGlvbikNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICRkYXRhICAgICAgRGF0YXNldCB0byBzdG9yZSBpbiBkYXRhYmFzZSBbYXJyYXkgb2YgYXJyYXlzIChrZXkgPT4gdmFsdWUpXQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIHRhYmxlIHdoZXJlIHRoZSBkYXRhIGlzIGJlaW5nIGFkZGVkDQoJICogQHBhcmFtICAgYXJyYXkgICAgJGNvbHVtbnMgICBEYXRhIGNvbHVtbnMgZm9yIHJlbWFwcGluZyBhbmQgZmlsdGVyaW5nDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHJvd3MoYXJyYXkgJGRhdGEsIHN0cmluZyAkdGFibGUsIGFycmF5ICRjb2x1bW5zID0gW10pOiBib29sDQoJew0KCQlpZiAoIUFycmF5SGVscGVyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCWlmICgkY29sdW1ucyA9PT0gW10pDQoJCXsNCgkJCSRjb2x1bW5zID0gJHRoaXMtPmdldEFycmF5Q29sdW1ucygkZGF0YSk7DQoJCX0NCg0KCQlyZXR1cm4gKCRjb2x1bW5zID09PSBbXSkgPyBmYWxzZSA6ICR0aGlzLT5pbnNlcnQoJGRhdGEsICR0YWJsZSwgJGNvbHVtbnMsIHRydWUpOw0KCX0NCg0KCS8qKg0KCSAqIEluc2VydCBpdGVtcyB0byB0aGUgZGF0YWJhc2UgKHdpdGggcmVtYXBwaW5nIGFuZCBmaWx0ZXJpbmcgY29sdW1ucyBvcHRpb24pDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkZGF0YSAgICAgICAgIERhdGEgdG8gc3RvcmUgaW4gZGF0YWJhc2UgKGFycmF5IG9mIG9iamVjdHMpDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRhYmxlICAgICAgICBUaGUgdGFibGUgd2hlcmUgdGhlIGRhdGEgaXMgYmVpbmcgYWRkZWQNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkY29sdW1ucyAgICAgIERhdGEgY29sdW1ucyBmb3IgcmVtYXBwaW5nIGFuZCBmaWx0ZXJpbmcNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gaXRlbXMoYXJyYXkgJGRhdGEsIHN0cmluZyAkdGFibGUsIGFycmF5ICRjb2x1bW5zID0gW10pOiBib29sDQoJew0KCQlpZiAoIUFycmF5SGVscGVyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCWlmICgkY29sdW1ucyA9PT0gW10pDQoJCXsNCgkJCSRjb2x1bW5zID0gJHRoaXMtPmdldE9iamVjdHNDb2x1bW5zKCRkYXRhKTsNCgkJfQ0KDQoJCXJldHVybiAoJGNvbHVtbnMgPT09IFtdKSA/IGZhbHNlIDogJHRoaXMtPmluc2VydCgkZGF0YSwgJHRhYmxlLCAkY29sdW1ucywgZmFsc2UpOw0KCX0NCg0KCS8qKg0KCSAqIEluc2VydCByb3cgdG8gdGhlIGRhdGFiYXNlDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkZGF0YSAgICAgIERhdGFzZXQgdG8gc3RvcmUgaW4gZGF0YWJhc2UgKGtleSA9PiB2YWx1ZSkNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdGFibGUgICAgIFRoZSB0YWJsZSB3aGVyZSB0aGUgZGF0YSBpcyBiZWluZyBhZGRlZA0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiByb3coYXJyYXkgJGRhdGEsIHN0cmluZyAkdGFibGUpOiBib29sDQoJew0KCQlyZXR1cm4gJHRoaXMtPnJvd3MoWyRkYXRhXSwgJHRhYmxlKTsNCgl9DQoNCgkvKioNCgkgKiBJbnNlcnQgaXRlbSB0byB0aGUgZGF0YWJhc2UNCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICAkZGF0YSAgICAgRGF0YXNldCB0byBzdG9yZSBpbiBkYXRhYmFzZSAoa2V5ID0+IHZhbHVlKQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIHRhYmxlIHdoZXJlIHRoZSBkYXRhIGlzIGJlaW5nIGFkZGVkDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIGl0ZW0ob2JqZWN0ICRkYXRhLCBzdHJpbmcgJHRhYmxlKTogYm9vbA0KCXsNCgkJcmV0dXJuICR0aGlzLT5pdGVtcyhbJGRhdGFdLCAkdGFibGUpOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBjb2x1bW5zIGZyb20gZGF0YSBhcnJheQ0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAkZGF0YSAgIERhdGEgYXJyYXkNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5DQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEFycmF5Q29sdW1ucyhhcnJheSAmJGRhdGEpOiBhcnJheQ0KCXsNCgkJJHJvdyA9IGFycmF5X3ZhbHVlcygkZGF0YSlbMF07DQoNCgkJaWYgKCFBcnJheUhlbHBlcjo6Y2hlY2soJHJvdykpDQoJCXsNCgkJCXJldHVybiBbXTsNCgkJfQ0KDQoJCSRjb2x1bW5zID0gYXJyYXlfa2V5cygkcm93KTsNCg0KCQlyZXR1cm4gYXJyYXlfY29tYmluZSgkY29sdW1ucywgJGNvbHVtbnMpOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBjb2x1bW5zIGZyb20gZGF0YSBvYmplY3RzDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICRkYXRhICAgRGF0YSBvYmplY3RzDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheQ0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRPYmplY3RzQ29sdW1ucyhhcnJheSAmJGRhdGEpOiBhcnJheQ0KCXsNCgkJJHJvdyA9IGFycmF5X3ZhbHVlcygkZGF0YSlbMF07DQoNCgkJaWYgKCFpc19vYmplY3QoJHJvdykpDQoJCXsNCgkJCXJldHVybiBbXTsNCgkJfQ0KDQoJCSRjb2x1bW5zID0gZ2V0X29iamVjdF92YXJzKCRyb3cpOw0KDQoJCXJldHVybiBhcnJheV9jb21iaW5lKGFycmF5X2tleXMoJGNvbHVtbnMpLCBhcnJheV9rZXlzKCRjb2x1bW5zKSk7DQoJfQ0KDQoJLyoqDQoJICogSW5zZXJ0IGRhdGEgaW50byB0aGUgZGF0YWJhc2UNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJGRhdGEgICAgICBEYXRhIHRvIHN0b3JlIGluIGRhdGFiYXNlDQoJICogQHBhcmFtICAgc3RyaW5nICAkdGFibGUgICAgIFRoZSB0YWJsZSB3aGVyZSB0aGUgZGF0YSBpcyBiZWluZyBhZGRlZA0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJGNvbHVtbnMgICBEYXRhIGNvbHVtbnMgZm9yIHJlbWFwcGluZyBhbmQgZmlsdGVyaW5nDQoJICogQHBhcmFtICAgYm9vbCAgICAkaXNBcnJheSAgIFdoZXRoZXIgdGhlIGRhdGEgaXMgYW4gYXJyYXkgb2YgYXJyYXlzIG9yIGFuIGFycmF5IG9mIG9iamVjdHMNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gaW5zZXJ0KGFycmF5ICYkZGF0YSwgc3RyaW5nICR0YWJsZSwgYXJyYXkgJGNvbHVtbnMsIGJvb2wgJGlzQXJyYXkpOiBib29sDQoJew0KCQkvLyBzZXQgam9vbWxhIGRlZmF1bHQgY29sdW1ucw0KCQkkYWRkX2NyZWF0ZWQgPSBmYWxzZTsNCgkJJGFkZF9jcmVhdGVkX2J5ID0gZmFsc2U7DQoJCSRhZGRfdmVyc2lvbiA9IGZhbHNlOw0KCQkkYWRkX3B1Ymxpc2hlZCA9IGZhbHNlOw0KDQoJCS8vIGNoZWNrIGlmIHdlIHNob3VsZCBsb2FkIHRoZSBkZWZhdWx0cw0KCQlpZiAoJHRoaXMtPmRlZmF1bHRzKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGRhdGUNCgkJCSRkYXRlID0gKG5ldyBEYXRlKCkpLT50b1NxbCgpOw0KDQoJCQlpZiAoIWlzc2V0KCRjb2x1bW5zWydjcmVhdGVkJ10pKQ0KCQkJew0KCQkJCSRjb2x1bW5zWydjcmVhdGVkJ10gPSAnIChvX08pICc7DQoJCQkJJGFkZF9jcmVhdGVkID0gdHJ1ZTsNCgkJCX0NCg0KCQkJaWYgKCFpc3NldCgkY29sdW1uc1snY3JlYXRlZF9ieSddKSkNCgkJCXsNCgkJCQkkY29sdW1uc1snY3JlYXRlZF9ieSddID0gJyAob19PKSAnOw0KCQkJCSRhZGRfY3JlYXRlZF9ieSA9IHRydWU7DQoJCQl9DQoNCgkJCWlmICghaXNzZXQoJGNvbHVtbnNbJ3ZlcnNpb24nXSkpDQoJCQl7DQoJCQkJJGNvbHVtbnNbJ3ZlcnNpb24nXSA9ICcgKG9fTykgJzsNCgkJCQkkYWRkX3ZlcnNpb24gPSB0cnVlOw0KCQkJfQ0KDQoJCQlpZiAoIWlzc2V0KCRjb2x1bW5zWydwdWJsaXNoZWQnXSkpDQoJCQl7DQoJCQkJJGNvbHVtbnNbJ3B1Ymxpc2hlZCddID0gJyAob19PKSAnOw0KCQkJCSRhZGRfcHVibGlzaGVkID0gdHJ1ZTsNCgkJCX0NCgkJCS8vIHRoZSAob19PKSBwcmV2ZW50cyBhbiBlbXB0eSB2YWx1ZSBmcm9tIGJlaW5nIGxvYWRlZA0KCQl9DQoNCgkJLy8gc2V0IGhpc3RvcnkgdmFycw0KCQkkdGhpcy0+ZW50aXR5ID0gJHRoaXMtPmdldFRhYmxlRW50aXR5TmFtZSgkdGFibGUpOw0KCQkkdGhpcy0+aGlzdG9yeUd1aWQgPSBbXTsNCg0KCQkvLyBnZXQgYSBxdWVyeSBvYmplY3QNCgkJJHF1ZXJ5ID0gJHRoaXMtPmRiLT5jcmVhdGVRdWVyeSgpOw0KCQkkdGFibGUgPSAkdGhpcy0+Z2V0VGFibGUoJHRhYmxlKTsNCg0KCQkvLyBzZXQgdGhlIHF1ZXJ5IHRhcmdldHMNCgkJJHF1ZXJ5LT5pbnNlcnQoJHRoaXMtPmRiLT5xdW90ZU5hbWUoJHRhYmxlKSktPmNvbHVtbnMoJHRoaXMtPmRiLT5xdW90ZU5hbWUoYXJyYXlfa2V5cygkY29sdW1ucykpKTsNCg0KCQkvLyBsaW1pdGluZyBmYWN0b3Igb24gdGhlIGFtb3VudCBvZiByb3dzIHRvIGluc2VydCBiZWZvcmUgd2UgcmVzZXQgdGhlIHF1ZXJ5DQoJCSRsaW1pdCA9IDMwMDsNCg0KCQkvLyBzZXQgdGhlIGluc2VydCB2YWx1ZXMNCgkJZm9yZWFjaCAoJGRhdGEgYXMgJG5yID0+ICR2YWx1ZSkNCgkJew0KCQkJLy8gY2hlY2sgdGhlIGxpbWl0DQoJCQlpZiAoJGxpbWl0IDw9IDEpDQoJCQl7DQoJCQkJLy8gZXhlY3V0ZSBhbmQgcmVzZXQgdGhlIHF1ZXJ5DQoJCQkJJHRoaXMtPmRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCSR0aGlzLT5kYi0+ZXhlY3V0ZSgpOw0KDQoJCQkJLy8gcmVzZXQgbGltaXQNCgkJCQkkbGltaXQgPSAzMDA7DQoNCgkJCQkvLyBnZXQgYSBxdWVyeSBvYmplY3QNCgkJCQkkcXVlcnkgPSAkdGhpcy0+ZGItPmNyZWF0ZVF1ZXJ5KCk7DQoNCgkJCQkvLyBzZXQgdGhlIHF1ZXJ5IHRhcmdldHMNCgkJCQkkcXVlcnktPmluc2VydCgkdGhpcy0+ZGItPnF1b3RlTmFtZSgkdGFibGUpKS0+Y29sdW1ucygkdGhpcy0+ZGItPnF1b3RlTmFtZShhcnJheV9rZXlzKCRjb2x1bW5zKSkpOw0KCQkJfQ0KDQoJCQkkcm93ID0gW107DQoJCQlmb3JlYWNoICgkY29sdW1ucyBhcyAkY29sdW1uID0+ICRrZXkpDQoJCQl7DQoJCQkJaWYgKCcgKG9fTykgJyA9PT0gJGtleSkNCgkJCQl7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0NCg0KCQkJCSR2YWwgPSAoJGlzQXJyYXkgJiYgaXNzZXQoJHZhbHVlWyRrZXldKSkgPyAkdmFsdWVbJGtleV0NCgkJCQkJOiAoKCEkaXNBcnJheSAmJiBpc3NldCgkdmFsdWUtPnska2V5fSkpID8gJHZhbHVlLT57JGtleX0gOiAnJyk7DQoNCgkJCQkvLyB3ZSBjYW4gb25seSBzZXQgaGlzdG9yeSBpZiB3ZSBoYXZlIGEgZ3VpZCBpbiB0aGUgZGF0YSBzZXQNCgkJCQlpZiAoJGNvbHVtbiA9PT0gJ2d1aWQnICYmICFlbXB0eSgkdGhpcy0+ZW50aXR5KSAmJiAkdGhpcy0+aGlzdG9yeSAmJiAhZW1wdHkoJHZhbCkpDQoJCQkJew0KCQkJCQkkdGhpcy0+aGlzdG9yeUd1aWRbJHZhbF0gPSAxOw0KCQkJCX0NCg0KCQkJCSRyb3dbXSA9ICR0aGlzLT5xdW90ZSgkdmFsKTsNCgkJCX0NCg0KCQkJLy8gc2V0IGpvb21sYSBkZWZhdWx0IGNvbHVtbnMNCgkJCWlmICgkYWRkX2NyZWF0ZWQpDQoJCQl7DQoJCQkJJHJvd1tdID0gJHRoaXMtPmRiLT5xdW90ZSgkZGF0ZSk7DQoJCQl9DQoNCgkJCWlmICgkYWRkX2NyZWF0ZWRfYnkpDQoJCQl7DQoJCQkJJHJvd1tdID0gJHRoaXMtPnVzZXJJZDsNCgkJCX0NCg0KCQkJaWYgKCRhZGRfdmVyc2lvbikNCgkJCXsNCgkJCQkkcm93W10gPSAxOw0KCQkJfQ0KDQoJCQlpZiAoJGFkZF9wdWJsaXNoZWQpDQoJCQl7DQoJCQkJJHJvd1tdID0gMTsNCgkJCX0NCg0KCQkJLy8gYWRkIHRvIHF1ZXJ5DQoJCQkkcXVlcnktPnZhbHVlcyhpbXBsb2RlKCcsJywgJHJvdykpOw0KDQoJCQkvLyBkZWNyZW1lbnQgdGhlIGxpbWl0ZXINCgkJCSRsaW1pdC0tOw0KDQoJCQkvLyBjbGVhciB0aGUgZGF0YSBmcm9tIG1lbW9yeQ0KCQkJdW5zZXQoJGRhdGFbJG5yXSk7DQoJCX0NCg0KCQkvLyBleGVjdXRlIHRoZSBmaW5hbCBxdWVyeQ0KCQkkdGhpcy0+ZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSR0aGlzLT5kYi0+ZXhlY3V0ZSgpOw0KDQoJCS8vIHRyYWNrIHZlcnNpb24gaGlzdG9yeQ0KCQlpZiAoJHRoaXMtPmhpc3RvcnkgJiYgIWVtcHR5KCR0aGlzLT5lbnRpdHkpICYmICR0aGlzLT5oaXN0b3J5R3VpZCAhPT0gW10pDQoJCXsNCgkJCSR0aGlzLT50cmFja0hpc3RvcnkoYXJyYXlfa2V5cygkdGhpcy0+aGlzdG9yeUd1aWQpLCAkdGFibGUpOw0KCQl9DQoNCgkJLy8gYWx3YXlzIHJlc2V0IHRoZSBzd2l0Y2gncw0KCQkkdGhpcy0+ZGVmYXVsdHMoKS0+aGlzdG9yeSgpOw0KDQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8qKg0KCSAqIEF0dGVtcHQgdG8gc2V0IGhpc3RvcnkgcmVjb3JkcyBmb3IgdGhlIHNwZWNpZmllZCBlbnRpdHkuDQoJICoNCgkgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgaGlzdG9yeSB0cmFja2luZyBpcyBlbmFibGVkIGFuZCB0aGUgcHJvdmlkZWQgYCRlbnRpdHlgIGhhcw0KCSAqIGNvcnJlc3BvbmRpbmcgR1VJRHMgaW4gdGhlIGAkaGlzdG9yeWAgYXJyYXkuIEl0IHRoZW4gZmV0Y2hlcyB0aGUgSURzIGZvciB0aGUNCgkgKiBtYXRjaGluZyBHVUlEcyBmcm9tIHRoZSBkYXRhYmFzZSBhbmQgdHJpZ2dlcnMgaGlzdG9yeSBzZXR0aW5nIG9uIHRoZW0uDQoJICoNCgkgKiBBbnkgZXhjZXB0aW9ucyBkdXJpbmcgdGhpcyBwcm9jZXNzIGFyZSBzaWxlbnRseSBjYXVnaHQgYW5kIGlnbm9yZWQuDQoJICoNCgkgKiBAcGFyYW0gIGFycmF5ICAgJGhpc3RvcnkgIFRoZSBoaXN0b3J5IG1hcCB3aXRoIGVudGl0eSBHVUlEcyBhcyB2YWx1ZXMuDQoJICogQHBhcmFtICBzdHJpbmcgICR0YWJsZSAgICBUaGUgZnVsbCB0YWJsZSBuYW1lLg0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlICA1LjEuMQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiB0cmFja0hpc3RvcnkoYXJyYXkgJGhpc3RvcnksIHN0cmluZyAkdGFibGUpOiB2b2lkDQoJew0KCQl0cnkNCgkJew0KCQkJJHF1ZXJ5ID0gJHRoaXMtPmRiLT5jcmVhdGVRdWVyeSgpDQoJCQkJLT5zZWxlY3QoJHRoaXMtPmRiLT5xdW90ZU5hbWUoJ2lkJykpDQoJCQkJLT5mcm9tKCR0aGlzLT5kYi0+cXVvdGVOYW1lKCR0YWJsZSkpDQoJCQkJLT53aGVyZSgNCgkJCQkJJHRoaXMtPmRiLT5xdW90ZU5hbWUoJ2d1aWQnKSAuICcgSU4gKCcgLg0KCQkJCQlpbXBsb2RlKCcsJywgYXJyYXlfbWFwKGZuKCR2KSA9PiAkdGhpcy0+cXVvdGUoJHYpLCAkaGlzdG9yeSkpIC4NCgkJCQkJJyknDQoJCQkJKTsNCg0KCQkJJHRoaXMtPmRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJHRoaXMtPmRiLT5leGVjdXRlKCk7DQoNCgkJCWlmICgkdGhpcy0+ZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQkkdGhpcy0+c2V0TXVsdGlwbGVIaXN0b3J5KA0KCQkJCQkkdGhpcy0+ZGItPmxvYWRDb2x1bW4oKQ0KCQkJCSk7DQoJCQl9DQoJCX0NCgkJY2F0Y2ggKFxUaHJvd2FibGUgJGUpDQoJCXsNCgkJCS8vIFNpbGVudGx5IGlnbm9yZSBhbGwgZXJyb3JzDQoJCX0NCgl9', '{}', '{}', '', 1, '2022-09-03 14:06:26', 45, 0, 1), (134, 'ad12ca1c-d3ce-4e7f-88c5-c6c92bdedc48', 'VDM.Interfaces.Database.InsertInterface', 'InsertInterface', 'interface', 'Database Insert Interface\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '{\"0\":\"78931d43-9fb9-4cc1-a2ca-b3e189ef842e\",\"1\":\"ac77cee7-7018-4496-a453-9757623e3849\"}', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.Database.InsertInterface', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIEluc2VydCByb3dzIHRvIHRoZSBkYXRhYmFzZSAod2l0aCByZW1hcHBpbmcgYW5kIGZpbHRlcmluZyBjb2x1bW5zIG9wdGlvbikNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICRkYXRhICAgICAgRGF0YXNldCB0byBzdG9yZSBpbiBkYXRhYmFzZSBbYXJyYXkgb2YgYXJyYXlzIChrZXkgPT4gdmFsdWUpXQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIHRhYmxlIHdoZXJlIHRoZSBkYXRhIGlzIGJlaW5nIGFkZGVkDQoJICogQHBhcmFtICAgYXJyYXkgICAgJGNvbHVtbnMgICBEYXRhIGNvbHVtbnMgZm9yIHJlbWFwcGluZyBhbmQgZmlsdGVyaW5nDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHJvd3MoYXJyYXkgJGRhdGEsIHN0cmluZyAkdGFibGUsIGFycmF5ICRjb2x1bW5zID0gW10pOiBib29sOw0KDQoJLyoqDQoJICogSW5zZXJ0IGl0ZW1zIHRvIHRoZSBkYXRhYmFzZSAod2l0aCByZW1hcHBpbmcgYW5kIGZpbHRlcmluZyBjb2x1bW5zIG9wdGlvbikNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICRkYXRhICAgICAgICAgRGF0YSB0byBzdG9yZSBpbiBkYXRhYmFzZSAoYXJyYXkgb2Ygb2JqZWN0cykNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdGFibGUgICAgICAgIFRoZSB0YWJsZSB3aGVyZSB0aGUgZGF0YSBpcyBiZWluZyBhZGRlZA0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICRjb2x1bW5zICAgICAgRGF0YSBjb2x1bW5zIGZvciByZW1hcHBpbmcgYW5kIGZpbHRlcmluZw0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBpdGVtcyhhcnJheSAkZGF0YSwgc3RyaW5nICR0YWJsZSwgYXJyYXkgJGNvbHVtbnMgPSBbXSk6IGJvb2w7DQoNCgkvKioNCgkgKiBJbnNlcnQgcm93IHRvIHRoZSBkYXRhYmFzZQ0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgJGRhdGEgICAgICBEYXRhc2V0IHRvIHN0b3JlIGluIGRhdGFiYXNlIChrZXkgPT4gdmFsdWUpDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRhYmxlICAgICBUaGUgdGFibGUgd2hlcmUgdGhlIGRhdGEgaXMgYmVpbmcgYWRkZWQNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gcm93KGFycmF5ICRkYXRhLCBzdHJpbmcgJHRhYmxlKTogYm9vbDsNCg0KCS8qKg0KCSAqIEluc2VydCBpdGVtIHRvIHRoZSBkYXRhYmFzZQ0KCSAqDQoJICogQHBhcmFtICAgb2JqZWN0ICAgICRkYXRhICAgICBEYXRhc2V0IHRvIHN0b3JlIGluIGRhdGFiYXNlIChrZXkgPT4gdmFsdWUpDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRhYmxlICAgICBUaGUgdGFibGUgd2hlcmUgdGhlIGRhdGEgaXMgYmVpbmcgYWRkZWQNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gaXRlbShvYmplY3QgJGRhdGEsIHN0cmluZyAkdGFibGUpOiBib29sOw==', '{}', '{}', '', 1, '2022-12-10 14:06:51', 20, 0, 1), (135, 'caf33c5d-858c-4f9a-894f-ab302ec5445a', 'VDM.Interfaces.FactoryInterface', 'FactoryInterface', 'interface', 'The Container Factory Interface\r\n\r\n@since 0.0.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.FactoryInterface', 1, '{}', '{}', 'dXNlIEpvb21sYVxESVxDb250YWluZXI7', '{}', 'CS8qKg0KCSAqIEdldCBhbnkgY2xhc3MgZnJvbSB0aGUgY29udGFpbmVyDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICRrZXkgIFRoZSBjb250YWluZXIgY2xhc3Mga2V5DQoJICoNCgkgKiBAcmV0dXJuICBNaXhlZA0KCSAqIEBzaW5jZSAwLjAuMA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gXyhzdHJpbmcgJGtleSk7DQoNCgkvKioNCgkgKiBHZXQgdGhlIGdsb2JhbCBjb250YWluZXINCgkgKg0KCSAqIEByZXR1cm4gIENvbnRhaW5lcg0KCSAqIEBzaW5jZSAwLjAuMA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q29udGFpbmVyKCk6IENvbnRhaW5lcjs=', '{}', '{}', '', 1, '2022-12-14 07:12:55', 19, 0, 1), (136, 'bfd1d6d5-56c1-4fe9-9fee-1c5910e1f5d8', 'VDM.Table', 'Table', 'class', '[[[Component]]] Tables\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '2.0.0', 'e0f6ddbe-2a35-4537-942c-faff2ebd04f6', '', '', '', '{\"0\":\"2da6d6c4-eb29-4d69-8bc2-36d96e916adf\"}', '', '[[[NamespacePrefix]]]\\Joomla\\[[[ComponentNamespace]]].Table', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIEFsbCBhcmVhcy92aWV3cy90YWJsZXMgd2l0aCB0aGVpciBmaWVsZCBkZXRhaWxzDQoJICoNCgkgKiBAdmFyICAgICBhcnJheQ0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqKi8NCglwcm90ZWN0ZWQgYXJyYXkgJHRhYmxlcyA9ICMjI0FMTF9DT01QT05FTlRfRklFTERTIyMjOw==', '{}', '{}', '', 1, '2022-12-14 07:30:10', 21, 0, 1), @@ -2177,11 +2177,11 @@ INSERT INTO `#__componentbuilder_power` (`id`, `guid`, `system_name`, `name`, `t (379, '1198aecf-84c6-45d2-aea8-d531aa4afdfa', 'Utilities FormHelper', 'FormHelper', 'abstract class', 'Form Helper\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Utilities.FormHelper', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtSGVscGVyIGFzIEpvb21sYUZvcm1IZWxwZXI7DQp1c2UgSm9vbWxhXENNU1xGb3JtXEZvcm1GaWVsZDs=', '{}', 'CS8qKg0KCSAqIGdldCB0aGUgZmllbGQgeG1sDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICRhdHRyaWJ1dGVzICAgVGhlIGFycmF5IG9mIGF0dHJpYnV0ZXMNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICRvcHRpb25zICAgICAgVGhlIG9wdGlvbnMgdG8gYXBwbHkgdG8gdGhlIFhNTCBlbGVtZW50DQoJICoNCgkgKiBAcmV0dXJuICBcU2ltcGxlWE1MRWxlbWVudHxudWxsDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB4bWwoYXJyYXkgJGF0dHJpYnV0ZXMsID9hcnJheSAkb3B0aW9ucyA9IG51bGwpOiA/XFNpbXBsZVhNTEVsZW1lbnQNCgl7DQoJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGF0dHJpYnV0ZXMgYW5kIGEgdHlwZSB2YWx1ZQ0KCQlpZiAoQXJyYXlIZWxwZXI6OmNoZWNrKCRhdHRyaWJ1dGVzKSkNCgkJew0KCQkJLy8gc3RhcnQgZmllbGQgeG1sDQoJCQkkWE1MID0gbmV3IFxTaW1wbGVYTUxFbGVtZW50KCc8ZmllbGQvPicpOw0KDQoJCQkvLyBsb2FkIHRoZSBhdHRyaWJ1dGVzDQoJCQlzZWxmOjphdHRyaWJ1dGVzKCRYTUwsICRhdHRyaWJ1dGVzKTsNCg0KCQkJLy8gY2hlY2sgaWYgd2UgaGF2ZSBvcHRpb25zDQoJCQlpZiAoQXJyYXlIZWxwZXI6OmNoZWNrKCRvcHRpb25zKSkNCgkJCXsNCgkJCQkvLyBsb2FkIHRoZSBvcHRpb25zDQoJCQkJc2VsZjo6b3B0aW9ucygkWE1MLCAkb3B0aW9ucyk7DQoJCQl9DQoNCgkJCS8vIHJldHVybiB0aGUgZmllbGQgeG1sDQoJCQlyZXR1cm4gJFhNTDsNCgkJfQ0KDQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIHhtbEFwcGVuZA0KCSAqDQoJICogQHBhcmFtICAgXFNpbXBsZVhNTEVsZW1lbnQgICAkeG1sICAgICAgVGhlIFhNTCBlbGVtZW50IHJlZmVyZW5jZSBpbiB3aGljaCB0byBpbmplY3QgYSBjb21tZW50DQoJICogQHBhcmFtICAgbWl4ZWQgICAgICAgICAgICAgICRub2RlICAgICBBIFNpbXBsZVhNTEVsZW1lbnQgbm9kZSB0byBhcHBlbmQgdG8gdGhlIFhNTCBlbGVtZW50IHJlZmVyZW5jZSwNCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBzdGRDbGFzcyBvYmplY3QgY29udGFpbmluZyBhIGNvbW1lbnQgYXR0cmlidXRlIHRvIGJlIGluamVjdGVkDQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSB0aGUgWE1MIG5vZGUgYW5kIGEgZmllbGRYTUwgYXR0cmlidXRlIGNvbnRhaW5pbmcgYSBTaW1wbGVYTUxFbGVtZW50DQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhcHBlbmQoXFNpbXBsZVhNTEVsZW1lbnQgJiR4bWwsICRub2RlKQ0KCXsNCgkJaWYgKCEkbm9kZSkNCgkJew0KCQkJLy8gZWxlbWVudCB3YXMgbm90IHJldHVybmVkDQoJCQlyZXR1cm47DQoJCX0NCg0KCQlpZiAoJG5vZGUgaW5zdGFuY2VvZiBcc3RkQ2xhc3MpDQoJCXsNCgkJCWlmIChwcm9wZXJ0eV9leGlzdHMoJG5vZGUsICdjb21tZW50JykpDQoJCQl7DQoJCQkJc2VsZjo6Y29tbWVudCgkeG1sLCAkbm9kZS0+Y29tbWVudCk7DQoJCQl9DQoJCQlpZiAocHJvcGVydHlfZXhpc3RzKCRub2RlLCAnZmllbGRYTUwnKSkNCgkJCXsNCgkJCQlzZWxmOjphcHBlbmQoJHhtbCwgJG5vZGUtPmZpZWxkWE1MKTsNCgkJCX0NCgkJfQ0KCQllbHNlaWYgKCRub2RlIGluc3RhbmNlb2YgXFNpbXBsZVhNTEVsZW1lbnQpDQoJCXsNCgkJCSRkb21YTUwgPSBcZG9tX2ltcG9ydF9zaW1wbGV4bWwoJHhtbCk7DQoJCQkkZG9tTm9kZSA9IFxkb21faW1wb3J0X3NpbXBsZXhtbCgkbm9kZSk7DQoJCQkkZG9tWE1MLT5hcHBlbmRDaGlsZCgkZG9tWE1MLT5vd25lckRvY3VtZW50LT5pbXBvcnROb2RlKCRkb21Ob2RlLCB0cnVlKSk7DQoJCQkkeG1sID0gXHNpbXBsZXhtbF9pbXBvcnRfZG9tKCRkb21YTUwpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogeG1sQ29tbWVudA0KCSAqDQoJICogQHBhcmFtICAgXFNpbXBsZVhNTEVsZW1lbnQgICAkeG1sICAgICAgICBUaGUgWE1MIGVsZW1lbnQgcmVmZXJlbmNlIGluIHdoaWNoIHRvIGluamVjdCBhIGNvbW1lbnQNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICAgICAgICAgJGNvbW1lbnQgICAgVGhlIGNvbW1lbnQgdG8gaW5qZWN0DQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21tZW50KFxTaW1wbGVYTUxFbGVtZW50ICYkeG1sLCBzdHJpbmcgJGNvbW1lbnQpDQoJew0KCQkkZG9tWE1MID0gXGRvbV9pbXBvcnRfc2ltcGxleG1sKCR4bWwpOw0KCQkkZG9tQ29tbWVudCA9IG5ldyBcRE9NQ29tbWVudCgkY29tbWVudCk7DQoJCSRub2RlVGFyZ2V0ID0gJGRvbVhNTC0+b3duZXJEb2N1bWVudC0+aW1wb3J0Tm9kZSgkZG9tQ29tbWVudCwgdHJ1ZSk7DQoJCSRkb21YTUwtPmFwcGVuZENoaWxkKCRub2RlVGFyZ2V0KTsNCgkJJHhtbCA9IFxzaW1wbGV4bWxfaW1wb3J0X2RvbSgkZG9tWE1MKTsNCgl9DQoNCgkvKioNCgkgKiB4bWxBZGRBdHRyaWJ1dGVzDQoJICoNCgkgKiBAcGFyYW0gICBcU2ltcGxlWE1MRWxlbWVudCAgICR4bWwgICAgICAgICAgVGhlIFhNTCBlbGVtZW50IHJlZmVyZW5jZSBpbiB3aGljaCB0byBpbmplY3QgYSBjb21tZW50DQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICAgICAgICRhdHRyaWJ1dGVzICAgVGhlIGF0dHJpYnV0ZXMgdG8gYXBwbHkgdG8gdGhlIFhNTCBlbGVtZW50DQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhdHRyaWJ1dGVzKFxTaW1wbGVYTUxFbGVtZW50ICYkeG1sLCBhcnJheSAkYXR0cmlidXRlcyA9IFtdKQ0KCXsNCgkJZm9yZWFjaCAoJGF0dHJpYnV0ZXMgYXMgJGtleSA9PiAkdmFsdWUpDQoJCXsNCgkJCSR4bWwtPmFkZEF0dHJpYnV0ZSgka2V5LCAkdmFsdWUgPz8gJycpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogeG1sQWRkT3B0aW9ucw0KCSAqDQoJICogQHBhcmFtICAgXFNpbXBsZVhNTEVsZW1lbnQgICAkeG1sICAgICAgICAgIFRoZSBYTUwgZWxlbWVudCByZWZlcmVuY2UgaW4gd2hpY2ggdG8gaW5qZWN0IGEgY29tbWVudA0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAgICAgICAkb3B0aW9ucyAgICAgIFRoZSBvcHRpb25zIHRvIGFwcGx5IHRvIHRoZSBYTUwgZWxlbWVudA0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb3B0aW9ucyhcU2ltcGxlWE1MRWxlbWVudCAmJHhtbCwgYXJyYXkgJG9wdGlvbnMgPSBbXSkNCgl7DQoJCWZvcmVhY2ggKCRvcHRpb25zIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQl7DQoJCQkkYWRkT3B0aW9uID0gJHhtbC0+YWRkQ2hpbGQoJ29wdGlvbicpOw0KCQkJJGFkZE9wdGlvbi0+YWRkQXR0cmlidXRlKCd2YWx1ZScsICRrZXkgPz8gJycpOw0KCQkJJGFkZE9wdGlvbltdID0gJHZhbHVlOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBmaWVsZCBvYmplY3QNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgJGF0dHJpYnV0ZXMgICBUaGUgYXJyYXkgb2YgYXR0cmlidXRlcw0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgJGRlZmF1bHQgICAgICBUaGUgZGVmYXVsdCBvZiB0aGUgZmllbGQNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICRvcHRpb25zICAgICAgVGhlIG9wdGlvbnMgdG8gYXBwbHkgdG8gdGhlIFhNTCBlbGVtZW50DQoJICoNCgkgKiBAcmV0dXJuICBGb3JtRmllbGR8bnVsbA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmllbGQoYXJyYXkgJGF0dHJpYnV0ZXMsIHN0cmluZyAkZGVmYXVsdCA9ICcnLCA/YXJyYXkgJG9wdGlvbnMgPSBudWxsKTogP0Zvcm1GaWVsZA0KCXsNCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgYXR0cmlidXRlcyBhbmQgYSB0eXBlIHZhbHVlDQoJCWlmIChBcnJheUhlbHBlcjo6Y2hlY2soJGF0dHJpYnV0ZXMpICYmIGlzc2V0KCRhdHRyaWJ1dGVzWyd0eXBlJ10pKQ0KCQl7DQoJCQkvLyBnZXQgZmllbGQgdHlwZQ0KCQkJaWYgKCgkZmllbGQgPSBKb29tbGFGb3JtSGVscGVyOjpsb2FkRmllbGRUeXBlKCRhdHRyaWJ1dGVzWyd0eXBlJ10sIHRydWUpKSA9PT0gZmFsc2UpDQoJCQl7DQoJCQkJcmV0dXJuIG51bGw7DQoJCQl9DQoNCgkJCS8vIGdldCBmaWVsZCB4bWwNCgkJCSRYTUwgPSBzZWxmOjp4bWwoJGF0dHJpYnV0ZXMsICRvcHRpb25zKTsNCg0KCQkJLy8gc2V0dXAgdGhlIGZpZWxkDQoJCQkkZmllbGQtPnNldHVwKCRYTUwsICRkZWZhdWx0KTsNCg0KCQkJLy8gcmV0dXJuIHRoZSBmaWVsZCBvYmplY3QNCgkJCXJldHVybiAkZmllbGQ7DQoJCX0NCg0KCQlyZXR1cm4gbnVsbDsNCgl9', '{\"load_selection0\":{\"load\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\"}}', '{}', '', 1, '2023-03-28 17:12:21', 11, 0, 1), (382, '7c1fb50f-8fb1-4627-8705-6fedf7182ca5', 'VDM.Model.Upsert', 'Upsert', 'final class', 'Power Model Update or Insert\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', '584747d1-3a86-453d-b7a3-a2219de8d777', 'Abstraction\\Model', '', '', '{\"0\":\"8aef58c1-3f70-4bd4-b9e4-3f29fcd41cff\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Model.Upsert', 0, '{}', '{}', '', '{\"use_selection0\":{\"use\":\"1f28cb53-60d9-4db1-b517-3c7dc6b429ef\",\"as\":\"default\"},\"use_selection1\":{\"use\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\",\"as\":\"default\"},\"use_selection2\":{\"use\":\"91004529-94a9-4590-b842-e7c6b624ecf5\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIE1vZGVsIHRoZSB2YWx1ZQ0KCSAqICAgICAgICAgIEV4YW1wbGU6ICR0aGlzLT52YWx1ZSh2YWx1ZSwgJ2ZpZWxkX2tleScsICd0YWJsZV9uYW1lJyk7DQoJICoNCgkgKiBAcGFyYW0gICBtaXhlZCAgICAgICAgICAgJHZhbHVlICAgIFRoZSB2YWx1ZSB0byBtb2RlbA0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgICAgICAkZmllbGQgICAgVGhlIGZpZWxkIGtleQ0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAgICAkdGFibGUgICAgVGhlIHRhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBtaXhlZA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB2YWx1ZSgkdmFsdWUsIHN0cmluZyAkZmllbGQsID9zdHJpbmcgJHRhYmxlID0gbnVsbCkNCgl7DQoJCS8vIHNldCB0aGUgdGFibGUgbmFtZQ0KCQlpZiAoZW1wdHkoJHRhYmxlKSkNCgkJew0KCQkJJHRhYmxlID0gJHRoaXMtPmdldFRhYmxlKCk7DQoJCX0NCg0KCQkvLyBjaGVjayBpZiB0aGlzIGlzIGEgdmFsaWQgdGFibGUNCgkJaWYgKCgkc3RvcmUgPSAkdGhpcy0+dGFibGUtPmdldCgkdGFibGUsICRmaWVsZCwgJ3N0b3JlJykpICE9PSBudWxsKQ0KCQl7DQoJCQkvLyBvcGVuIHRoZSB2YWx1ZSBiYXNlZCBvbiB0aGUgc3RvcmUgbWV0aG9kDQoJCQlzd2l0Y2goJHN0b3JlKQ0KCQkJew0KCQkJCWNhc2UgJ2Jhc2U2NCc6DQoJCQkJCSR2YWx1ZSA9IGJhc2U2NF9lbmNvZGUoKHN0cmluZykgJHZhbHVlKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICdqc29uJzoNCgkJCQkJJHZhbHVlID0ganNvbl9lbmNvZGUoJHZhbHVlLCAgSlNPTl9GT1JDRV9PQkpFQ1QpOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuICR2YWx1ZTsNCgl9DQoNCgkvKioNCgkgKiBWYWxpZGF0ZSBiZWZvcmUgdGhlIHZhbHVlIGlzIG1vZGVsbGVkDQoJICoNCgkgKiBAcGFyYW0gICBtaXhlZCAgICAgICAgICR2YWx1ZSAgIFRoZSBmaWVsZCB2YWx1ZQ0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAgJGZpZWxkICAgICBUaGUgZmllbGQga2V5DQoJICogQHBhcmFtICAgc3RyaW5nfG51bGwgICAkdGFibGUgICBUaGUgdGFibGUNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gdmFsaWRhdGVCZWZvcmUoJiR2YWx1ZSwgP3N0cmluZyAkZmllbGQgPSBudWxsLCA/c3RyaW5nICR0YWJsZSA9IG51bGwpOiBib29sDQoJew0KCQkvLyBjaGVjayB2YWx1ZXMNCgkJaWYgKFN0cmluZ0hlbHBlcjo6Y2hlY2soJHZhbHVlKSB8fCBBcnJheUhlbHBlcjo6Y2hlY2soJHZhbHVlLCB0cnVlKSAgfHwgT2JqZWN0SGVscGVyOjpjaGVjaygkdmFsdWUpIHx8IGlzX251bWVyaWMoJHZhbHVlKSkNCgkJew0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJLy8gY2hlY2sgaWYgd2UgYWxsb3cgZW1wdHkNCgkJZWxzZWlmICgkdGhpcy0+Z2V0QWxsb3dFbXB0eSgpICYmIGVtcHR5KCR2YWx1ZSkpDQoJCXsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCS8vIHJlbW92ZSBlbXB0eSB2YWx1ZXMNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIFZhbGlkYXRlIGFmdGVyIHRoZSB2YWx1ZSBpcyBtb2RlbGxlZA0KCSAqDQoJICogQHBhcmFtICAgbWl4ZWQgICAgICAgICAkdmFsdWUgICBUaGUgZmllbGQgdmFsdWUNCgkgKiBAcGFyYW0gICBzdHJpbmd8bnVsbCAgICRmaWVsZCAgICAgVGhlIGZpZWxkIGtleQ0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAgJHRhYmxlICAgVGhlIHRhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHZhbGlkYXRlQWZ0ZXIoJiR2YWx1ZSwgP3N0cmluZyAkZmllbGQgPSBudWxsLCA/c3RyaW5nICR0YWJsZSA9IG51bGwpOiBib29sDQoJew0KCQkvLyBvbmx5IHN0cmluZ3Mgb3IgbnVtYmVycyBhbGxvd2VkDQoJCWlmIChTdHJpbmdIZWxwZXI6OmNoZWNrKCR2YWx1ZSkgfHwgaXNfbnVtZXJpYygkdmFsdWUpKQ0KCQl7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQkvLyBjaGVjayBpZiB3ZSBhbGxvdyBlbXB0eQ0KCQllbHNlaWYgKCR0aGlzLT5nZXRBbGxvd0VtcHR5KCkgJiYgZW1wdHkoJHZhbHVlKSkNCgkJew0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJLy8gcmVtb3ZlIGVtcHR5IHZhbHVlcw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ==', '{}', '{}', '', 1, '2023-04-01 02:49:38', 32, 0, 1), (383, '7179fde6-1e51-4b51-8545-7ca18f74a0f4', 'VDM.Interfaces.Database.UpdateInterface', 'UpdateInterface', 'interface', 'Database Update Interface\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '{\"0\":\"ac77cee7-7018-4496-a453-9757623e3849\",\"1\":\"78931d43-9fb9-4cc1-a2ca-b3e189ef842e\"}', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.Database.UpdateInterface', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIFVwZGF0ZSByb3dzIGluIHRoZSBkYXRhYmFzZSAod2l0aCByZW1hcHBpbmcgYW5kIGZpbHRlcmluZyBjb2x1bW5zIG9wdGlvbikNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICRkYXRhICAgICAgRGF0YXNldCB0byB1cGRhdGUgaW4gZGF0YWJhc2UgW2FycmF5IG9mIGFycmF5cyAoa2V5ID0+IHZhbHVlKV0NCgkgKiBAcGFyYW0gICBzdHJpbmcgICAka2V5ICAgICAgIERhdGFzZXQga2V5IGNvbHVtbiB0byB1c2UgaW4gdXBkYXRpbmcgdGhlIHZhbHVlcyBpbiB0aGUgRGF0YWJhc2UNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdGFibGUgICAgIFRoZSB0YWJsZSB3aGVyZSB0aGUgZGF0YSBpcyBiZWluZyB1cGRhdGVkDQoJICogQHBhcmFtICAgYXJyYXkgICAgJGNvbHVtbnMgICBEYXRhIGNvbHVtbnMgZm9yIHJlbWFwcGluZyBhbmQgZmlsdGVyaW5nDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHJvd3MoYXJyYXkgJGRhdGEsIHN0cmluZyAka2V5LCBzdHJpbmcgJHRhYmxlLCBhcnJheSAkY29sdW1ucyA9IFtdKTogYm9vbDsNCg0KCS8qKg0KCSAqIFVwZGF0ZSBpdGVtcyBpbiB0aGUgZGF0YWJhc2UgKHdpdGggcmVtYXBwaW5nIGFuZCBmaWx0ZXJpbmcgY29sdW1ucyBvcHRpb24pDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkZGF0YSAgICAgIERhdGEgdG8gdXBkYXRlZCBpbiBkYXRhYmFzZSAoYXJyYXkgb2Ygb2JqZWN0cykNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAka2V5ICAgICAgIERhdGFzZXQga2V5IGNvbHVtbiB0byB1c2UgaW4gdXBkYXRpbmcgdGhlIHZhbHVlcyBpbiB0aGUgRGF0YWJhc2UNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdGFibGUgICAgIFRoZSB0YWJsZSB3aGVyZSB0aGUgZGF0YSBpcyBiZWluZyB1cGRhdGUNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkY29sdW1ucyAgIERhdGEgY29sdW1ucyBmb3IgcmVtYXBwaW5nIGFuZCBmaWx0ZXJpbmcNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gaXRlbXMoYXJyYXkgJGRhdGEsIHN0cmluZyAka2V5LCBzdHJpbmcgJHRhYmxlLCBhcnJheSAkY29sdW1ucyA9IFtdKTogYm9vbDsNCg0KCS8qKg0KCSAqIFVwZGF0ZSByb3cgaW4gdGhlIGRhdGFiYXNlDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkZGF0YSAgICAgIERhdGFzZXQgdG8gdXBkYXRlIGluIGRhdGFiYXNlIChrZXkgPT4gdmFsdWUpDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGtleSAgICAgICBEYXRhc2V0IGtleSBjb2x1bW4gdG8gdXNlIGluIHVwZGF0aW5nIHRoZSB2YWx1ZXMgaW4gdGhlIERhdGFiYXNlDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRhYmxlICAgICBUaGUgdGFibGUgd2hlcmUgdGhlIGRhdGEgaXMgYmVpbmcgdXBkYXRlZA0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiByb3coYXJyYXkgJGRhdGEsIHN0cmluZyAka2V5LCBzdHJpbmcgJHRhYmxlKTogYm9vbDsNCg0KCS8qKg0KCSAqIFVwZGF0ZSBpdGVtIGluIHRoZSBkYXRhYmFzZQ0KCSAqDQoJICogQHBhcmFtICAgb2JqZWN0ICAgJGRhdGEgICAgICBEYXRhc2V0IHRvIHVwZGF0ZSBpbiBkYXRhYmFzZSAoa2V5ID0+IHZhbHVlKQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRrZXkgICAgICAgRGF0YXNldCBrZXkgY29sdW1uIHRvIHVzZSBpbiB1cGRhdGluZyB0aGUgdmFsdWVzIGluIHRoZSBEYXRhYmFzZQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIHRhYmxlIHdoZXJlIHRoZSBkYXRhIGlzIGJlaW5nIHVwZGF0ZWQNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gaXRlbShvYmplY3QgJGRhdGEsIHN0cmluZyAka2V5LCBzdHJpbmcgJHRhYmxlKTogYm9vbDsNCg0KCS8qKg0KCSAqIFVwZGF0ZSBhIHNpbmdsZSBjb2x1bW4gdmFsdWUgZm9yIGFsbCByb3dzIGluIHRoZSB0YWJsZQ0KCSAqDQoJICogQHBhcmFtICAgbWl4ZWQgICAkdmFsdWUgICBUaGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBjb2x1bW4NCgkgKiBAcGFyYW0gICBzdHJpbmcgICRrZXkgICAgIERhdGFzZXQga2V5IGNvbHVtbiB0byB1c2UgaW4gdXBkYXRpbmcgdGhlIHZhbHVlcyBpbiB0aGUgRGF0YWJhc2UNCgkgKiBAcGFyYW0gICBzdHJpbmcgICR0YWJsZSAgIFRoZSB0YWJsZSB3aGVyZSB0aGUgdXBkYXRlIHNob3VsZCBiZSBhcHBsaWVkDQoJICoNCgkgKiBAcmV0dXJuICBib29sICBUcnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBjb2x1bW4obWl4ZWQgJHZhbHVlLCBzdHJpbmcgJGtleSwgc3RyaW5nICR0YWJsZSk6IGJvb2w7', '{}', '{}', '', 1, '2023-04-01 19:54:56', 18, 0, 1), -(384, 'cce56585-58b0-4f72-a92c-e2635ea52d83', 'VDM.Database.Update', 'Update', 'final class', 'Database Update Class\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 'd9839333-a8f1-4a36-9256-5df4d349b3f6', '', '', '', '{\"0\":\"7179fde6-1e51-4b51-8545-7ca18f74a0f4\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Database.Update', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRGF0ZVxEYXRlOw==', '{\"use_selection0\":{\"use\":\"b8176bdf-5615-4d91-8dfa-990d42f44127\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIERlZmF1bHQgU3dpdGNoDQoJICoNCgkgKiBAc2luY2UgNS4xLjENCgkgKi8NCgl1c2UgRGVmYXVsdFRyYWl0Ow0KDQoJLyoqDQoJICogVXBkYXRlIHJvd3MgaW4gdGhlIGRhdGFiYXNlICh3aXRoIHJlbWFwcGluZyBhbmQgZmlsdGVyaW5nIGNvbHVtbnMgb3B0aW9uKQ0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgJGRhdGEgICAgICBEYXRhc2V0IHRvIHVwZGF0ZSBpbiBkYXRhYmFzZSBbYXJyYXkgb2YgYXJyYXlzIChrZXkgPT4gdmFsdWUpXQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRrZXkgICAgICAgRGF0YXNldCBrZXkgY29sdW1uIHRvIHVzZSBpbiB1cGRhdGluZyB0aGUgdmFsdWVzIGluIHRoZSBEYXRhYmFzZQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIHRhYmxlIHdoZXJlIHRoZSBkYXRhIGlzIGJlaW5nIHVwZGF0ZWQNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkY29sdW1ucyAgIERhdGEgY29sdW1ucyBmb3IgcmVtYXBwaW5nIGFuZCBmaWx0ZXJpbmcNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gcm93cyhhcnJheSAkZGF0YSwgc3RyaW5nICRrZXksIHN0cmluZyAkdGFibGUsIGFycmF5ICRjb2x1bW5zID0gW10pOiBib29sDQoJew0KCQkvLyBzZXQgdGhlIHVwZGF0ZSBjb2x1bW5zDQoJCWlmICgkZGF0YSA9PT0gW10gfHwgc3RybGVuKCRrZXkpID09IDApDQoJCXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCS8vIHNldCB0aGUgdXBkYXRlIHZhbHVlcw0KCQlmb3JlYWNoICgkZGF0YSBhcyAkdmFsdWVzKQ0KCQl7DQoJCQlpZiAoJGNvbHVtbnMgIT09IFtdKQ0KCQkJew0KCQkJCS8vIGxvYWQgb25seSB3aGF0IGlzIHBhcnQgb2YgdGhlIGNvbHVtbnMgc2V0DQoJCQkJJHJvdyA9IFtdOw0KCQkJCWZvcmVhY2ggKCRjb2x1bW5zIGFzICRjb2x1bW4gPT4gJGtleV8pDQoJCQkJew0KCQkJCQlpZiAoaXNzZXQoJHZhbHVlc1ska2V5X10pKQ0KCQkJCQl7DQoJCQkJCQkkcm93WyRjb2x1bW5dID0gJHZhbHVlc1ska2V5X107DQoJCQkJCX0NCgkJCQl9DQoNCgkJCQkvLyB1cGRhdGUgdGhlIHJvdw0KCQkJCSR0aGlzLT5yb3coJHJvdywgJGtleSwgJHRhYmxlKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyB1cGRhdGUgdGhlIHJvdw0KCQkJCSR0aGlzLT5yb3coKGFycmF5KSAkdmFsdWVzLCAka2V5LCAkdGFibGUpOw0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJLyoqDQoJICogVXBkYXRlIGl0ZW1zIGluIHRoZSBkYXRhYmFzZSAod2l0aCByZW1hcHBpbmcgYW5kIGZpbHRlcmluZyBjb2x1bW5zIG9wdGlvbikNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICRkYXRhICAgICAgRGF0YSB0byB1cGRhdGVkIGluIGRhdGFiYXNlIChhcnJheSBvZiBvYmplY3RzKQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRrZXkgICAgICAgRGF0YXNldCBrZXkgY29sdW1uIHRvIHVzZSBpbiB1cGRhdGluZyB0aGUgdmFsdWVzIGluIHRoZSBEYXRhYmFzZQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIHRhYmxlIHdoZXJlIHRoZSBkYXRhIGlzIGJlaW5nIHVwZGF0ZQ0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICRjb2x1bW5zICAgRGF0YSBjb2x1bW5zIGZvciByZW1hcHBpbmcgYW5kIGZpbHRlcmluZw0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBpdGVtcyhhcnJheSAkZGF0YSwgc3RyaW5nICRrZXksIHN0cmluZyAkdGFibGUsIGFycmF5ICRjb2x1bW5zID0gW10pOiBib29sDQoJew0KCQkvLyBzZXQgdGhlIHVwZGF0ZSBjb2x1bW5zDQoJCWlmICgkZGF0YSA9PT0gW10gfHwgc3RybGVuKCRrZXkpID09IDApDQoJCXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCS8vIHNldCB0aGUgdXBkYXRlIHZhbHVlcw0KCQlmb3JlYWNoICgkZGF0YSBhcyAkbnIgPT4gJHZhbHVlcykNCgkJew0KCQkJaWYgKCRjb2x1bW5zICE9PSBbXSkNCgkJCXsNCgkJCQkvLyBsb2FkIG9ubHkgd2hhdCBpcyBwYXJ0IG9mIHRoZSBjb2x1bW5zIHNldA0KCQkJCSRyb3cgPSBbXTsNCgkJCQlmb3JlYWNoICgkY29sdW1ucyBhcyAkY29sdW1uID0+ICRrZXlfKQ0KCQkJCXsNCgkJCQkJaWYgKGlzc2V0KCR2YWx1ZXMtPnska2V5X30pKQ0KCQkJCQl7DQoJCQkJCQkkcm93WyRjb2x1bW5dID0gJHZhbHVlcy0+eyRrZXlffTsNCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCS8vIHVwZGF0ZSB0aGUgcm93DQoJCQkJJHRoaXMtPnJvdygkcm93LCAka2V5LCAkdGFibGUpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIHVwZGF0ZSB0aGUgcm93DQoJCQkJJHRoaXMtPnJvdygoYXJyYXkpICR2YWx1ZXMsICRrZXksICR0YWJsZSk7DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCgkvKioNCgkgKiBVcGRhdGUgcm93IGluIHRoZSBkYXRhYmFzZQ0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgJGRhdGEgICAgICBEYXRhc2V0IHRvIHVwZGF0ZSBpbiBkYXRhYmFzZSAoa2V5ID0+IHZhbHVlKQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRrZXkgICAgICAgRGF0YXNldCBrZXkgY29sdW1uIHRvIHVzZSBpbiB1cGRhdGluZyB0aGUgdmFsdWVzIGluIHRoZSBEYXRhYmFzZQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIHRhYmxlIHdoZXJlIHRoZSBkYXRhIGlzIGJlaW5nIHVwZGF0ZWQNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gcm93KGFycmF5ICRkYXRhLCBzdHJpbmcgJGtleSwgc3RyaW5nICR0YWJsZSk6IGJvb2wNCgl7DQoJCS8vIHNldCB0aGUgdXBkYXRlIGNvbHVtbnMNCgkJaWYgKCRkYXRhID09PSBbXSB8fCBzdHJsZW4oJGtleSkgPT0gMCkNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJLy8gc2V0IGpvb21sYSBkZWZhdWx0IGNvbHVtbnMNCgkJJGFkZF9tb2RpZmllZCA9IGZhbHNlOw0KCQkkYWRkX21vZGlmaWVkX2J5ID0gZmFsc2U7DQoNCgkJLy8gY2hlY2sgaWYgd2Ugc2hvdWxkIGxvYWQgdGhlIGRlZmF1bHRzDQoJCWlmICgkdGhpcy0+ZGVmYXVsdHMpDQoJCXsNCgkJCWlmICghaXNzZXQoJGRhdGFbJ21vZGlmaWVkJ10pKQ0KCQkJew0KCQkJCSRhZGRfbW9kaWZpZWQgPSB0cnVlOw0KCQkJfQ0KDQoJCQlpZiAoIWlzc2V0KCRkYXRhWydtb2RpZmllZF9ieSddKSkNCgkJCXsNCgkJCQkkYWRkX21vZGlmaWVkX2J5ID0gdHJ1ZTsNCgkJCX0NCgkJfQ0KDQoJCS8vIHNldCBoaXN0b3J5IHZhcnMNCgkJJHRoaXMtPmVudGl0eSA9ICR0aGlzLT5nZXRUYWJsZUVudGl0eU5hbWUoJHRhYmxlKTsNCgkJJHRhYmxlID0gJHRoaXMtPmdldFRhYmxlKCR0YWJsZSk7DQoNCgkJLy8gZ2V0IGEgcXVlcnkgb2JqZWN0DQoJCSRxdWVyeSA9ICR0aGlzLT5kYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJLy8gc2V0IHRoZSBxdWVyeSB0YXJnZXRzDQoJCSRxdWVyeS0+dXBkYXRlKCR0aGlzLT5kYi0+cXVvdGVOYW1lKCR0YWJsZSkpOw0KDQoJCS8vIHNldCB0aGUgdXBkYXRlIHZhbHVlcw0KCQkka2V5XyA9IG51bGw7DQoJCSRndWlkID0gbnVsbDsNCgkJJGlkID0gbnVsbDsNCgkJZm9yZWFjaCAoJGRhdGEgYXMgJGNvbHVtbiA9PiAkdmFsdWUpDQoJCXsNCgkJCWlmICgkY29sdW1uID09PSAka2V5KQ0KCQkJew0KCQkJCSRrZXlfID0gJHZhbHVlOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRxdWVyeS0+c2V0KCR0aGlzLT5kYi0+cXVvdGVOYW1lKCRjb2x1bW4pIC4gJyA9ICcgLiAkdGhpcy0+cXVvdGUoJHZhbHVlKSk7DQoJCQl9DQoNCgkJCWlmICghZW1wdHkoJHRoaXMtPmVudGl0eSkgJiYgJHRoaXMtPmhpc3RvcnkgJiYgIWVtcHR5KCR2YWx1ZSkpDQoJCQl7DQoJCQkJaWYgKCRjb2x1bW4gPT09ICdndWlkJykNCgkJCQl7DQoJCQkJCSRndWlkID0gJHZhbHVlOw0KCQkJCX0NCgkJCQllbHNlaWYgKCRjb2x1bW4gPT09ICdpZCcpDQoJCQkJew0KCQkJCQkkaWQgPSAoaW50KSAkdmFsdWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJLy8gYWRkIHRoZSBrZXkgY29uZGl0aW9uDQoJCWlmICgka2V5XyAhPT0gbnVsbCkNCgkJew0KCQkJaWYgKCRhZGRfbW9kaWZpZWQpDQoJCQl7DQoJCQkJJHF1ZXJ5LT5zZXQoJHRoaXMtPmRiLT5xdW90ZU5hbWUoJ21vZGlmaWVkJykgLiAnID0gJyAuICR0aGlzLT5xdW90ZSgobmV3IERhdGUoKSktPnRvU3FsKCkpKTsNCgkJCX0NCg0KCQkJaWYgKCRhZGRfbW9kaWZpZWRfYnkpDQoJCQl7DQoJCQkJJHF1ZXJ5LT5zZXQoJHRoaXMtPmRiLT5xdW90ZU5hbWUoJ21vZGlmaWVkX2J5JykgLiAnID0gJyAuICR0aGlzLT51c2VySWQpOw0KCQkJfQ0KDQoJCQkkcXVlcnktPndoZXJlKCR0aGlzLT5kYi0+cXVvdGVOYW1lKCRrZXkpIC4gJyA9ICcgLiAkdGhpcy0+cXVvdGUoJGtleV8pKTsNCg0KCQkJLy8gZXhlY3V0ZSB0aGUgZmluYWwgcXVlcnkNCgkJCSR0aGlzLT5kYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCg0KCQkJJHJlc3VsdCA9ICR0aGlzLT5kYi0+ZXhlY3V0ZSgpOw0KDQoJCQkvLyB0cmFjdCBoaXN0b3J5DQoJCQlpZiAoJHJlc3VsdCAmJiAkdGhpcy0+aGlzdG9yeSAmJiAhZW1wdHkoJHRoaXMtPmVudGl0eSkgJiYgKCFlbXB0eSgkaWQpIHx8ICFlbXB0eSgkZ3VpZCkpKQ0KCQkJew0KCQkJCSR0aGlzLT50cmFja0hpc3RvcnkoJGlkLCAkZ3VpZCwgJHRhYmxlKTsNCgkJCX0NCg0KCQkJLy8gYWx3YXlzIHJlc2V0IHRoZSBzd2l0Y2gncw0KCQkJJHRoaXMtPmRlZmF1bHRzKCktPmhpc3RvcnkoKTsNCg0KCQkJcmV0dXJuICRyZXN1bHQ7DQoJCX0NCg0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogVXBkYXRlIGl0ZW0gaW4gdGhlIGRhdGFiYXNlDQoJICoNCgkgKiBAcGFyYW0gICBvYmplY3QgICAkZGF0YSAgICAgIERhdGFzZXQgdG8gdXBkYXRlIGluIGRhdGFiYXNlIChrZXkgPT4gdmFsdWUpDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGtleSAgICAgICBEYXRhc2V0IGtleSBjb2x1bW4gdG8gdXNlIGluIHVwZGF0aW5nIHRoZSB2YWx1ZXMgaW4gdGhlIERhdGFiYXNlDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRhYmxlICAgICBUaGUgdGFibGUgd2hlcmUgdGhlIGRhdGEgaXMgYmVpbmcgdXBkYXRlZA0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBpdGVtKG9iamVjdCAkZGF0YSwgc3RyaW5nICRrZXksIHN0cmluZyAkdGFibGUpOiBib29sDQoJew0KCQkvLyBjb252ZXJ0IHRvIGFuIGFycmF5DQoJCXJldHVybiAkdGhpcy0+cm93KChhcnJheSkgZ2V0X29iamVjdF92YXJzKCRkYXRhKSwgJGtleSwgJHRhYmxlKTsNCgl9DQoNCgkvKioNCgkgKiBVcGRhdGUgYSBzaW5nbGUgY29sdW1uIHZhbHVlIGZvciBhbGwgcm93cyBpbiB0aGUgdGFibGUNCgkgKg0KCSAqIEBwYXJhbSAgIG1peGVkICAgJHZhbHVlICAgVGhlIHZhbHVlIHRvIGFzc2lnbiB0byB0aGUgY29sdW1uDQoJICogQHBhcmFtICAgc3RyaW5nICAka2V5ICAgICBEYXRhc2V0IGtleSBjb2x1bW4gdG8gdXNlIGluIHVwZGF0aW5nIHRoZSB2YWx1ZXMgaW4gdGhlIERhdGFiYXNlDQoJICogQHBhcmFtICAgc3RyaW5nICAkdGFibGUgICBUaGUgdGFibGUgd2hlcmUgdGhlIHVwZGF0ZSBzaG91bGQgYmUgYXBwbGllZA0KCSAqDQoJICogQHJldHVybiAgYm9vbCAgVHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gY29sdW1uKG1peGVkICR2YWx1ZSwgc3RyaW5nICRrZXksIHN0cmluZyAkdGFibGUpOiBib29sDQoJew0KCQkvLyBFbnN1cmUgdmFsaWQgaW5wdXQNCgkJaWYgKCRrZXkgPT09ICcnIHx8ICR0YWJsZSA9PT0gJycpDQoJCXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCS8vIEdldCBhIHF1ZXJ5IG9iamVjdA0KCQkkcXVlcnkgPSAkdGhpcy0+ZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCS8vIFByZXBhcmUgdGhlIHVwZGF0ZSBzdGF0ZW1lbnQNCgkJJHF1ZXJ5LT51cGRhdGUoJHRoaXMtPmRiLT5xdW90ZU5hbWUoJHRoaXMtPmdldFRhYmxlKCR0YWJsZSkpKQ0KCQkgICAgICAtPnNldCgkdGhpcy0+ZGItPnF1b3RlTmFtZSgka2V5KSAuICcgPSAnIC4gJHRoaXMtPnF1b3RlKCR2YWx1ZSkpOw0KDQoJCS8vIEFwcGx5IHRoZSBxdWVyeQ0KCQkkdGhpcy0+ZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoNCgkJcmV0dXJuICR0aGlzLT5kYi0+ZXhlY3V0ZSgpOw0KCX0NCg0KCS8qKg0KCSAqIEF0dGVtcHQgdG8gc2V0IGhpc3RvcnkgcmVjb3JkcyBmb3IgdGhlIHNwZWNpZmllZCBlbnRpdHkuDQoJICoNCgkgKiBBbnkgZXhjZXB0aW9ucyBkdXJpbmcgdGhpcyBwcm9jZXNzIGFyZSBzaWxlbnRseSBjYXVnaHQgYW5kIGlnbm9yZWQuDQoJICoNCgkgKiBAcGFyYW0gIGludCAgICAgJGlkICAgICAgVGhlIGVudGl0eSBpZC4NCgkgKiBAcGFyYW0gIHN0cmluZyAgJGd1aWQgICAgVGhlIGVudGl0eSBHVUlELg0KCSAqIEBwYXJhbSAgc3RyaW5nICAkdGFibGUgICBUaGUgZnVsbCB0YWJsZSBuYW1lLg0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlICA1LjEuMQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiB0cmFja0hpc3RvcnkoP2ludCAkaWQsID9zdHJpbmcgJGd1aWQsICR0YWJsZSk6IHZvaWQNCgl7DQoJCWlmICgkaWQgIT09IG51bGwpDQoJCXsNCgkJCXRyeQ0KCQkJew0KCQkJCSR0aGlzLT5zZXRIaXN0b3J5KCRpZCk7DQoJCQl9DQoJCQljYXRjaCAoXFRocm93YWJsZSAkZSkNCgkJCXsNCgkJCQkvLyBTaWxlbnRseSBpZ25vcmUgYWxsIGVycm9ycw0KCQkJfQ0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJaWYgKCRndWlkID09PSBudWxsKQ0KCQl7DQoJCQkvLyBzaG91bGQgbmV2ZXIgaGFwcGVuDQoJCQlyZXR1cm47DQoJCX0NCg0KCQl0cnkNCgkJew0KCQkJJHF1ZXJ5ID0gJHRoaXMtPmRiLT5nZXRRdWVyeSh0cnVlKQ0KCQkJCS0+c2VsZWN0KCR0aGlzLT5kYi0+cXVvdGVOYW1lKCdpZCcpKQ0KCQkJCS0+ZnJvbSgkdGhpcy0+ZGItPnF1b3RlTmFtZSgkdGFibGUpKQ0KCQkJCS0+d2hlcmUoJHRoaXMtPmRiLT5xdW90ZU5hbWUoJ2d1aWQnKSAuICcgPSAnIC4gJHRoaXMtPnF1b3RlKCRndWlkKSk7DQoNCgkJCSR0aGlzLT5kYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSR0aGlzLT5kYi0+ZXhlY3V0ZSgpOw0KDQoJCQlpZiAoJHRoaXMtPmRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJJHRoaXMtPnNldEhpc3RvcnkoDQoJCQkJCSR0aGlzLT5kYi0+bG9hZFJlc3VsdCgpDQoJCQkJKTsNCgkJCX0NCgkJfQ0KCQljYXRjaCAoXFRocm93YWJsZSAkZSkNCgkJew0KCQkJLy8gU2lsZW50bHkgaWdub3JlIGFsbCBlcnJvcnMNCgkJfQ0KCX0=', '{}', '{}', '', 1, '2023-04-01 20:02:28', 32, 0, 1), +(384, 'cce56585-58b0-4f72-a92c-e2635ea52d83', 'VDM.Database.Update', 'Update', 'final class', 'Database Update Class\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 'd9839333-a8f1-4a36-9256-5df4d349b3f6', '', '', '', '{\"0\":\"7179fde6-1e51-4b51-8545-7ca18f74a0f4\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Database.Update', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRGF0ZVxEYXRlOw==', '{\"use_selection0\":{\"use\":\"b8176bdf-5615-4d91-8dfa-990d42f44127\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIERlZmF1bHQgU3dpdGNoDQoJICoNCgkgKiBAc2luY2UgNS4xLjENCgkgKi8NCgl1c2UgRGVmYXVsdFRyYWl0Ow0KDQoJLyoqDQoJICogVXBkYXRlIHJvd3MgaW4gdGhlIGRhdGFiYXNlICh3aXRoIHJlbWFwcGluZyBhbmQgZmlsdGVyaW5nIGNvbHVtbnMgb3B0aW9uKQ0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgJGRhdGEgICAgICBEYXRhc2V0IHRvIHVwZGF0ZSBpbiBkYXRhYmFzZSBbYXJyYXkgb2YgYXJyYXlzIChrZXkgPT4gdmFsdWUpXQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRrZXkgICAgICAgRGF0YXNldCBrZXkgY29sdW1uIHRvIHVzZSBpbiB1cGRhdGluZyB0aGUgdmFsdWVzIGluIHRoZSBEYXRhYmFzZQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIHRhYmxlIHdoZXJlIHRoZSBkYXRhIGlzIGJlaW5nIHVwZGF0ZWQNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkY29sdW1ucyAgIERhdGEgY29sdW1ucyBmb3IgcmVtYXBwaW5nIGFuZCBmaWx0ZXJpbmcNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gcm93cyhhcnJheSAkZGF0YSwgc3RyaW5nICRrZXksIHN0cmluZyAkdGFibGUsIGFycmF5ICRjb2x1bW5zID0gW10pOiBib29sDQoJew0KCQkvLyBzZXQgdGhlIHVwZGF0ZSBjb2x1bW5zDQoJCWlmICgkZGF0YSA9PT0gW10gfHwgc3RybGVuKCRrZXkpID09IDApDQoJCXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCS8vIHNldCB0aGUgdXBkYXRlIHZhbHVlcw0KCQlmb3JlYWNoICgkZGF0YSBhcyAkdmFsdWVzKQ0KCQl7DQoJCQlpZiAoJGNvbHVtbnMgIT09IFtdKQ0KCQkJew0KCQkJCS8vIGxvYWQgb25seSB3aGF0IGlzIHBhcnQgb2YgdGhlIGNvbHVtbnMgc2V0DQoJCQkJJHJvdyA9IFtdOw0KCQkJCWZvcmVhY2ggKCRjb2x1bW5zIGFzICRjb2x1bW4gPT4gJGtleV8pDQoJCQkJew0KCQkJCQlpZiAoaXNzZXQoJHZhbHVlc1ska2V5X10pKQ0KCQkJCQl7DQoJCQkJCQkkcm93WyRjb2x1bW5dID0gJHZhbHVlc1ska2V5X107DQoJCQkJCX0NCgkJCQl9DQoNCgkJCQkvLyB1cGRhdGUgdGhlIHJvdw0KCQkJCSR0aGlzLT5yb3coJHJvdywgJGtleSwgJHRhYmxlKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyB1cGRhdGUgdGhlIHJvdw0KCQkJCSR0aGlzLT5yb3coKGFycmF5KSAkdmFsdWVzLCAka2V5LCAkdGFibGUpOw0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJLyoqDQoJICogVXBkYXRlIGl0ZW1zIGluIHRoZSBkYXRhYmFzZSAod2l0aCByZW1hcHBpbmcgYW5kIGZpbHRlcmluZyBjb2x1bW5zIG9wdGlvbikNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICRkYXRhICAgICAgRGF0YSB0byB1cGRhdGVkIGluIGRhdGFiYXNlIChhcnJheSBvZiBvYmplY3RzKQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRrZXkgICAgICAgRGF0YXNldCBrZXkgY29sdW1uIHRvIHVzZSBpbiB1cGRhdGluZyB0aGUgdmFsdWVzIGluIHRoZSBEYXRhYmFzZQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIHRhYmxlIHdoZXJlIHRoZSBkYXRhIGlzIGJlaW5nIHVwZGF0ZQ0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICRjb2x1bW5zICAgRGF0YSBjb2x1bW5zIGZvciByZW1hcHBpbmcgYW5kIGZpbHRlcmluZw0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBpdGVtcyhhcnJheSAkZGF0YSwgc3RyaW5nICRrZXksIHN0cmluZyAkdGFibGUsIGFycmF5ICRjb2x1bW5zID0gW10pOiBib29sDQoJew0KCQkvLyBzZXQgdGhlIHVwZGF0ZSBjb2x1bW5zDQoJCWlmICgkZGF0YSA9PT0gW10gfHwgc3RybGVuKCRrZXkpID09IDApDQoJCXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCS8vIHNldCB0aGUgdXBkYXRlIHZhbHVlcw0KCQlmb3JlYWNoICgkZGF0YSBhcyAkbnIgPT4gJHZhbHVlcykNCgkJew0KCQkJaWYgKCRjb2x1bW5zICE9PSBbXSkNCgkJCXsNCgkJCQkvLyBsb2FkIG9ubHkgd2hhdCBpcyBwYXJ0IG9mIHRoZSBjb2x1bW5zIHNldA0KCQkJCSRyb3cgPSBbXTsNCgkJCQlmb3JlYWNoICgkY29sdW1ucyBhcyAkY29sdW1uID0+ICRrZXlfKQ0KCQkJCXsNCgkJCQkJaWYgKGlzc2V0KCR2YWx1ZXMtPnska2V5X30pKQ0KCQkJCQl7DQoJCQkJCQkkcm93WyRjb2x1bW5dID0gJHZhbHVlcy0+eyRrZXlffTsNCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCS8vIHVwZGF0ZSB0aGUgcm93DQoJCQkJJHRoaXMtPnJvdygkcm93LCAka2V5LCAkdGFibGUpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIHVwZGF0ZSB0aGUgcm93DQoJCQkJJHRoaXMtPnJvdygoYXJyYXkpICR2YWx1ZXMsICRrZXksICR0YWJsZSk7DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCgkvKioNCgkgKiBVcGRhdGUgcm93IGluIHRoZSBkYXRhYmFzZQ0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgJGRhdGEgICAgICBEYXRhc2V0IHRvIHVwZGF0ZSBpbiBkYXRhYmFzZSAoa2V5ID0+IHZhbHVlKQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRrZXkgICAgICAgRGF0YXNldCBrZXkgY29sdW1uIHRvIHVzZSBpbiB1cGRhdGluZyB0aGUgdmFsdWVzIGluIHRoZSBEYXRhYmFzZQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIHRhYmxlIHdoZXJlIHRoZSBkYXRhIGlzIGJlaW5nIHVwZGF0ZWQNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gcm93KGFycmF5ICRkYXRhLCBzdHJpbmcgJGtleSwgc3RyaW5nICR0YWJsZSk6IGJvb2wNCgl7DQoJCS8vIHNldCB0aGUgdXBkYXRlIGNvbHVtbnMNCgkJaWYgKCRkYXRhID09PSBbXSB8fCBzdHJsZW4oJGtleSkgPT0gMCkNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJLy8gc2V0IGpvb21sYSBkZWZhdWx0IGNvbHVtbnMNCgkJJGFkZF9tb2RpZmllZCA9IGZhbHNlOw0KCQkkYWRkX21vZGlmaWVkX2J5ID0gZmFsc2U7DQoNCgkJLy8gY2hlY2sgaWYgd2Ugc2hvdWxkIGxvYWQgdGhlIGRlZmF1bHRzDQoJCWlmICgkdGhpcy0+ZGVmYXVsdHMpDQoJCXsNCgkJCWlmICghaXNzZXQoJGRhdGFbJ21vZGlmaWVkJ10pKQ0KCQkJew0KCQkJCSRhZGRfbW9kaWZpZWQgPSB0cnVlOw0KCQkJfQ0KDQoJCQlpZiAoIWlzc2V0KCRkYXRhWydtb2RpZmllZF9ieSddKSkNCgkJCXsNCgkJCQkkYWRkX21vZGlmaWVkX2J5ID0gdHJ1ZTsNCgkJCX0NCgkJfQ0KDQoJCS8vIHNldCBoaXN0b3J5IHZhcnMNCgkJJHRoaXMtPmVudGl0eSA9ICR0aGlzLT5nZXRUYWJsZUVudGl0eU5hbWUoJHRhYmxlKTsNCgkJJHRhYmxlID0gJHRoaXMtPmdldFRhYmxlKCR0YWJsZSk7DQoNCgkJLy8gZ2V0IGEgcXVlcnkgb2JqZWN0DQoJCSRxdWVyeSA9ICR0aGlzLT5kYi0+Y3JlYXRlUXVlcnkoKTsNCg0KCQkvLyBzZXQgdGhlIHF1ZXJ5IHRhcmdldHMNCgkJJHF1ZXJ5LT51cGRhdGUoJHRoaXMtPmRiLT5xdW90ZU5hbWUoJHRhYmxlKSk7DQoNCgkJLy8gc2V0IHRoZSB1cGRhdGUgdmFsdWVzDQoJCSRrZXlfID0gbnVsbDsNCgkJJGd1aWQgPSBudWxsOw0KCQkkaWQgPSBudWxsOw0KCQlmb3JlYWNoICgkZGF0YSBhcyAkY29sdW1uID0+ICR2YWx1ZSkNCgkJew0KCQkJaWYgKCRjb2x1bW4gPT09ICRrZXkpDQoJCQl7DQoJCQkJJGtleV8gPSAkdmFsdWU7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHF1ZXJ5LT5zZXQoJHRoaXMtPmRiLT5xdW90ZU5hbWUoJGNvbHVtbikgLiAnID0gJyAuICR0aGlzLT5xdW90ZSgkdmFsdWUpKTsNCgkJCX0NCg0KCQkJaWYgKCFlbXB0eSgkdGhpcy0+ZW50aXR5KSAmJiAkdGhpcy0+aGlzdG9yeSAmJiAhZW1wdHkoJHZhbHVlKSkNCgkJCXsNCgkJCQlpZiAoJGNvbHVtbiA9PT0gJ2d1aWQnKQ0KCQkJCXsNCgkJCQkJJGd1aWQgPSAkdmFsdWU7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoJGNvbHVtbiA9PT0gJ2lkJykNCgkJCQl7DQoJCQkJCSRpZCA9IChpbnQpICR2YWx1ZTsNCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQkvLyBhZGQgdGhlIGtleSBjb25kaXRpb24NCgkJaWYgKCRrZXlfICE9PSBudWxsKQ0KCQl7DQoJCQlpZiAoJGFkZF9tb2RpZmllZCkNCgkJCXsNCgkJCQkkcXVlcnktPnNldCgkdGhpcy0+ZGItPnF1b3RlTmFtZSgnbW9kaWZpZWQnKSAuICcgPSAnIC4gJHRoaXMtPnF1b3RlKChuZXcgRGF0ZSgpKS0+dG9TcWwoKSkpOw0KCQkJfQ0KDQoJCQlpZiAoJGFkZF9tb2RpZmllZF9ieSkNCgkJCXsNCgkJCQkkcXVlcnktPnNldCgkdGhpcy0+ZGItPnF1b3RlTmFtZSgnbW9kaWZpZWRfYnknKSAuICcgPSAnIC4gJHRoaXMtPnVzZXJJZCk7DQoJCQl9DQoNCgkJCSRxdWVyeS0+d2hlcmUoJHRoaXMtPmRiLT5xdW90ZU5hbWUoJGtleSkgLiAnID0gJyAuICR0aGlzLT5xdW90ZSgka2V5XykpOw0KDQoJCQkvLyBleGVjdXRlIHRoZSBmaW5hbCBxdWVyeQ0KCQkJJHRoaXMtPmRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KDQoJCQkkcmVzdWx0ID0gJHRoaXMtPmRiLT5leGVjdXRlKCk7DQoNCgkJCS8vIHRyYWN0IGhpc3RvcnkNCgkJCWlmICgkcmVzdWx0ICYmICR0aGlzLT5oaXN0b3J5ICYmICFlbXB0eSgkdGhpcy0+ZW50aXR5KSAmJiAoIWVtcHR5KCRpZCkgfHwgIWVtcHR5KCRndWlkKSkpDQoJCQl7DQoJCQkJJHRoaXMtPnRyYWNrSGlzdG9yeSgkaWQsICRndWlkLCAkdGFibGUpOw0KCQkJfQ0KDQoJCQkvLyBhbHdheXMgcmVzZXQgdGhlIHN3aXRjaCdzDQoJCQkkdGhpcy0+ZGVmYXVsdHMoKS0+aGlzdG9yeSgpOw0KDQoJCQlyZXR1cm4gJHJlc3VsdDsNCgkJfQ0KDQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBVcGRhdGUgaXRlbSBpbiB0aGUgZGF0YWJhc2UNCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICRkYXRhICAgICAgRGF0YXNldCB0byB1cGRhdGUgaW4gZGF0YWJhc2UgKGtleSA9PiB2YWx1ZSkNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAka2V5ICAgICAgIERhdGFzZXQga2V5IGNvbHVtbiB0byB1c2UgaW4gdXBkYXRpbmcgdGhlIHZhbHVlcyBpbiB0aGUgRGF0YWJhc2UNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdGFibGUgICAgIFRoZSB0YWJsZSB3aGVyZSB0aGUgZGF0YSBpcyBiZWluZyB1cGRhdGVkDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIGl0ZW0ob2JqZWN0ICRkYXRhLCBzdHJpbmcgJGtleSwgc3RyaW5nICR0YWJsZSk6IGJvb2wNCgl7DQoJCS8vIGNvbnZlcnQgdG8gYW4gYXJyYXkNCgkJcmV0dXJuICR0aGlzLT5yb3coKGFycmF5KSBnZXRfb2JqZWN0X3ZhcnMoJGRhdGEpLCAka2V5LCAkdGFibGUpOw0KCX0NCg0KCS8qKg0KCSAqIFVwZGF0ZSBhIHNpbmdsZSBjb2x1bW4gdmFsdWUgZm9yIGFsbCByb3dzIGluIHRoZSB0YWJsZQ0KCSAqDQoJICogQHBhcmFtICAgbWl4ZWQgICAkdmFsdWUgICBUaGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBjb2x1bW4NCgkgKiBAcGFyYW0gICBzdHJpbmcgICRrZXkgICAgIERhdGFzZXQga2V5IGNvbHVtbiB0byB1c2UgaW4gdXBkYXRpbmcgdGhlIHZhbHVlcyBpbiB0aGUgRGF0YWJhc2UNCgkgKiBAcGFyYW0gICBzdHJpbmcgICR0YWJsZSAgIFRoZSB0YWJsZSB3aGVyZSB0aGUgdXBkYXRlIHNob3VsZCBiZSBhcHBsaWVkDQoJICoNCgkgKiBAcmV0dXJuICBib29sICBUcnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBjb2x1bW4obWl4ZWQgJHZhbHVlLCBzdHJpbmcgJGtleSwgc3RyaW5nICR0YWJsZSk6IGJvb2wNCgl7DQoJCS8vIEVuc3VyZSB2YWxpZCBpbnB1dA0KCQlpZiAoJGtleSA9PT0gJycgfHwgJHRhYmxlID09PSAnJykNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJLy8gR2V0IGEgcXVlcnkgb2JqZWN0DQoJCSRxdWVyeSA9ICR0aGlzLT5kYi0+Y3JlYXRlUXVlcnkoKTsNCg0KCQkvLyBQcmVwYXJlIHRoZSB1cGRhdGUgc3RhdGVtZW50DQoJCSRxdWVyeS0+dXBkYXRlKCR0aGlzLT5kYi0+cXVvdGVOYW1lKCR0aGlzLT5nZXRUYWJsZSgkdGFibGUpKSkNCgkJICAgICAgLT5zZXQoJHRoaXMtPmRiLT5xdW90ZU5hbWUoJGtleSkgLiAnID0gJyAuICR0aGlzLT5xdW90ZSgkdmFsdWUpKTsNCg0KCQkvLyBBcHBseSB0aGUgcXVlcnkNCgkJJHRoaXMtPmRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KDQoJCXJldHVybiAkdGhpcy0+ZGItPmV4ZWN1dGUoKTsNCgl9DQoNCgkvKioNCgkgKiBBdHRlbXB0IHRvIHNldCBoaXN0b3J5IHJlY29yZHMgZm9yIHRoZSBzcGVjaWZpZWQgZW50aXR5Lg0KCSAqDQoJICogQW55IGV4Y2VwdGlvbnMgZHVyaW5nIHRoaXMgcHJvY2VzcyBhcmUgc2lsZW50bHkgY2F1Z2h0IGFuZCBpZ25vcmVkLg0KCSAqDQoJICogQHBhcmFtICBpbnQgICAgICRpZCAgICAgIFRoZSBlbnRpdHkgaWQuDQoJICogQHBhcmFtICBzdHJpbmcgICRndWlkICAgIFRoZSBlbnRpdHkgR1VJRC4NCgkgKiBAcGFyYW0gIHN0cmluZyAgJHRhYmxlICAgVGhlIGZ1bGwgdGFibGUgbmFtZS4NCgkgKg0KCSAqIEByZXR1cm4gdm9pZA0KCSAqIEBzaW5jZSAgNS4xLjENCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gdHJhY2tIaXN0b3J5KD9pbnQgJGlkLCA/c3RyaW5nICRndWlkLCAkdGFibGUpOiB2b2lkDQoJew0KCQlpZiAoJGlkICE9PSBudWxsKQ0KCQl7DQoJCQl0cnkNCgkJCXsNCgkJCQkkdGhpcy0+c2V0SGlzdG9yeSgkaWQpOw0KCQkJfQ0KCQkJY2F0Y2ggKFxUaHJvd2FibGUgJGUpDQoJCQl7DQoJCQkJLy8gU2lsZW50bHkgaWdub3JlIGFsbCBlcnJvcnMNCgkJCX0NCgkJCXJldHVybjsNCgkJfQ0KDQoJCWlmICgkZ3VpZCA9PT0gbnVsbCkNCgkJew0KCQkJLy8gc2hvdWxkIG5ldmVyIGhhcHBlbg0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJdHJ5DQoJCXsNCgkJCSRxdWVyeSA9ICR0aGlzLT5kYi0+Y3JlYXRlUXVlcnkoKQ0KCQkJCS0+c2VsZWN0KCR0aGlzLT5kYi0+cXVvdGVOYW1lKCdpZCcpKQ0KCQkJCS0+ZnJvbSgkdGhpcy0+ZGItPnF1b3RlTmFtZSgkdGFibGUpKQ0KCQkJCS0+d2hlcmUoJHRoaXMtPmRiLT5xdW90ZU5hbWUoJ2d1aWQnKSAuICcgPSAnIC4gJHRoaXMtPnF1b3RlKCRndWlkKSk7DQoNCgkJCSR0aGlzLT5kYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSR0aGlzLT5kYi0+ZXhlY3V0ZSgpOw0KDQoJCQlpZiAoJHRoaXMtPmRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJJHRoaXMtPnNldEhpc3RvcnkoDQoJCQkJCSR0aGlzLT5kYi0+bG9hZFJlc3VsdCgpDQoJCQkJKTsNCgkJCX0NCgkJfQ0KCQljYXRjaCAoXFRocm93YWJsZSAkZSkNCgkJew0KCQkJLy8gU2lsZW50bHkgaWdub3JlIGFsbCBlcnJvcnMNCgkJfQ0KCX0=', '{}', '{}', '', 1, '2023-04-01 20:02:28', 33, 0, 1), (435, 'e0f6ddbe-2a35-4537-942c-faff2ebd04f6', 'VDM.Abstraction.BaseTable', 'BaseTable', 'abstract class', 'Base Table\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '{\"0\":\"2da6d6c4-eb29-4d69-8bc2-36d96e916adf\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Abstraction.BaseTable', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIEFsbCBhcmVhcy92aWV3cy90YWJsZXMgd2l0aCB0aGVpciBmaWVsZCBkZXRhaWxzDQoJICoNCgkgKiBAdmFyICAgICBhcnJheQ0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqKi8NCglwcm90ZWN0ZWQgYXJyYXkgJHRhYmxlczsNCg0KCS8qKg0KCSAqIEFsbCBkZWZhdWx0IGZpZWxkcw0KCSAqDQoJICogQHZhciAgICAgYXJyYXkNCgkgKiBAc2luY2UgMy4yLjENCgkgKiovDQoJcHJvdGVjdGVkIGFycmF5ICRkZWZhdWx0cyA9IFsNCgkJJ2lkJyA9PiBbDQoJCQknb3JkZXInID0+IC0xLA0KCQkJJ25hbWUnID0+ICdpZCcsDQoJCQknbGFiZWwnID0+ICdJRCcsDQoJCQkndHlwZScgPT4gJ3RleHQnLA0KCQkJJ3RpdGxlJyA9PiBmYWxzZSwNCgkJCSdsaXN0JyA9PiBOVUxMLA0KCQkJJ3N0b3JlJyA9PiBOVUxMLA0KCQkJJ3RhYl9uYW1lJyA9PiBOVUxMLA0KCQkJJ2RiJyA9PiBbDQoJCQkJJ3R5cGUnID0+ICdJTlQoMTEpJywNCgkJCQknZGVmYXVsdCcgPT4gJ0VNUFRZJywNCgkJCQknYXV0b19pbmNyZW1lbnQnID0+IHRydWUsDQoJCQkJJ3ByaW1hcnlfa2V5JyA9PiB0cnVlLA0KCQkJCSdudWxsX3N3aXRjaCcgPT4gJ05PVCBOVUxMJw0KCQkJXQ0KCQldLA0KCQknYXNzZXRfaWQnID0+IFsNCgkJCSduYW1lJyA9PiAnYXNzZXRfaWQnLA0KCQkJJ2xhYmVsJyA9PiBOVUxMLA0KCQkJJ3R5cGUnID0+IE5VTEwsDQoJCQkndGl0bGUnID0+IGZhbHNlLA0KCQkJJ2xpc3QnID0+IE5VTEwsDQoJCQknc3RvcmUnID0+IE5VTEwsDQoJCQkndGFiX25hbWUnID0+IE5VTEwsDQoJCQknZGInID0+IFsNCgkJCQkndHlwZScgPT4gJ0lOVCgxMCkgdW5zaWduZWQnLA0KCQkJCSdkZWZhdWx0JyA9PiAnMCcsDQoJCQkJJ251bGxfc3dpdGNoJyA9PiAnTlVMTCcsDQoJCQkJJ2NvbW1lbnQnID0+ICdGSyB0byB0aGUgI19fYXNzZXRzIHRhYmxlLicNCgkJCV0NCgkJXSwNCgkJJ29yZGVyaW5nJyA9PiBbDQoJCQknbmFtZScgPT4gJ29yZGVyaW5nJywNCgkJCSdsYWJlbCcgPT4gJ09yZGVyaW5nJywNCgkJCSd0eXBlJyA9PiAnbnVtYmVyJywNCgkJCSd0aXRsZScgPT4gZmFsc2UsDQoJCQknbGlzdCcgPT4gTlVMTCwNCgkJCSdzdG9yZScgPT4gTlVMTCwNCgkJCSd0YWJfbmFtZScgPT4gTlVMTCwNCgkJCSdkYicgPT4gWw0KCQkJCSd0eXBlJyA9PiAnSU5UKDExKScsDQoJCQkJJ2RlZmF1bHQnID0+ICcwJywNCgkJCQknbnVsbF9zd2l0Y2gnID0+ICdOVUxMJw0KCQkJXQ0KCQldLA0KCQkncHVibGlzaGVkJyA9PiBbDQoJCQknbmFtZScgPT4gJ3B1Ymxpc2hlZCcsDQoJCQknbGFiZWwnID0+ICdTdGF0dXMnLA0KCQkJJ3R5cGUnID0+ICdsaXN0JywNCgkJCSd0aXRsZScgPT4gZmFsc2UsDQoJCQknbGlzdCcgPT4gTlVMTCwNCgkJCSdzdG9yZScgPT4gTlVMTCwNCgkJCSd0YWJfbmFtZScgPT4gTlVMTCwNCgkJCSdkYicgPT4gWw0KCQkJCSd0eXBlJyA9PiAnVElOWUlOVCgzKScsDQoJCQkJJ2RlZmF1bHQnID0+ICcxJywNCgkJCQknbnVsbF9zd2l0Y2gnID0+ICdOVUxMJywNCgkJCQkna2V5JyA9PiB0cnVlLA0KCQkJCSdrZXlfbmFtZScgPT4gJ3N0YXRlJw0KCQkJXQ0KCQldLA0KCQknbW9kaWZpZWRfYnknID0+IFsNCgkJCSduYW1lJyA9PiAnbW9kaWZpZWRfYnknLA0KCQkJJ2xhYmVsJyA9PiAnTW9kaWZpZWQgYnknLA0KCQkJJ3R5cGUnID0+ICd1c2VyJywNCgkJCSd0aXRsZScgPT4gZmFsc2UsDQoJCQknbGlzdCcgPT4gTlVMTCwNCgkJCSdzdG9yZScgPT4gTlVMTCwNCgkJCSd0YWJfbmFtZScgPT4gTlVMTCwNCgkJCSdkYicgPT4gWw0KCQkJCSd0eXBlJyA9PiAnSU5UIHVuc2lnbmVkJywNCgkJCQknbnVsbF9zd2l0Y2gnID0+ICdOVUxMJywNCgkJCQkna2V5JyA9PiB0cnVlLA0KCQkJCSdrZXlfbmFtZScgPT4gJ21vZGlmaWVkYnknDQoJCQldDQoJCV0sDQoJCSdtb2RpZmllZCcgPT4gWw0KCQkJJ25hbWUnID0+ICdtb2RpZmllZCcsDQoJCQknbGFiZWwnID0+ICdNb2RpZmllZCcsDQoJCQkndHlwZScgPT4gJ2NhbGVuZGFyJywNCgkJCSd0aXRsZScgPT4gZmFsc2UsDQoJCQknbGlzdCcgPT4gTlVMTCwNCgkJCSdzdG9yZScgPT4gTlVMTCwNCgkJCSd0YWJfbmFtZScgPT4gTlVMTCwNCgkJCSdkYicgPT4gWw0KCQkJCSd0eXBlJyA9PiAnREFURVRJTUUnLA0KCQkJCSdudWxsX3N3aXRjaCcgPT4gJ05VTEwnDQoJCQldDQoJCV0sDQoJCSdjcmVhdGVkX2J5JyA9PiBbDQoJCQknbmFtZScgPT4gJ2NyZWF0ZWRfYnknLA0KCQkJJ2xhYmVsJyA9PiAnQ3JlYXRlZCBieScsDQoJCQkndHlwZScgPT4gJ3VzZXInLA0KCQkJJ3RpdGxlJyA9PiBmYWxzZSwNCgkJCSdsaXN0JyA9PiBOVUxMLA0KCQkJJ3N0b3JlJyA9PiBOVUxMLA0KCQkJJ3RhYl9uYW1lJyA9PiBOVUxMLA0KCQkJJ2RiJyA9PiBbDQoJCQkJJ3R5cGUnID0+ICdJTlQgdW5zaWduZWQnLA0KCQkJCSdkZWZhdWx0JyA9PiAnMCcsDQoJCQkJJ251bGxfc3dpdGNoJyA9PiAnTlVMTCcsDQoJCQkJJ2tleScgPT4gdHJ1ZSwNCgkJCQkna2V5X25hbWUnID0+ICdjcmVhdGVkYnknDQoJCQldDQoJCV0sDQoJCSdjcmVhdGVkJyA9PiBbDQoJCQknbmFtZScgPT4gJ2NyZWF0ZWQnLA0KCQkJJ2xhYmVsJyA9PiAnQ3JlYXRlZCcsDQoJCQkndHlwZScgPT4gJ2NhbGVuZGFyJywNCgkJCSd0aXRsZScgPT4gZmFsc2UsDQoJCQknbGlzdCcgPT4gTlVMTCwNCgkJCSdzdG9yZScgPT4gTlVMTCwNCgkJCSd0YWJfbmFtZScgPT4gTlVMTCwNCgkJCSdkYicgPT4gWw0KCQkJCSd0eXBlJyA9PiAnREFURVRJTUUnLA0KCQkJCSdkZWZhdWx0JyA9PiAnQ1VSUkVOVF9USU1FU1RBTVAnLA0KCQkJCSdudWxsX3N3aXRjaCcgPT4gJ05VTEwnDQoJCQldDQoJCV0sDQoJCSdjaGVja2VkX291dCcgPT4gWw0KCQkJJ25hbWUnID0+ICdjaGVja2VkX291dCcsDQoJCQknbGFiZWwnID0+IE5VTEwsDQoJCQkndHlwZScgPT4gTlVMTCwNCgkJCSd0aXRsZScgPT4gZmFsc2UsDQoJCQknbGlzdCcgPT4gTlVMTCwNCgkJCSdzdG9yZScgPT4gTlVMTCwNCgkJCSd0YWJfbmFtZScgPT4gTlVMTCwNCgkJCSdkYicgPT4gWw0KCQkJCSd0eXBlJyA9PiAnSU5UIHVuc2lnbmVkJywNCgkJCQknbnVsbF9zd2l0Y2gnID0+ICdOVUxMJywNCgkJCQkna2V5JyA9PiB0cnVlLA0KCQkJCSdrZXlfbmFtZScgPT4gJ2NoZWNrb3V0Jw0KCQkJXQ0KCQldLA0KCQknY2hlY2tlZF9vdXRfdGltZScgPT4gWw0KCQkJJ25hbWUnID0+ICdjaGVja2VkX291dF90aW1lJywNCgkJCSdsYWJlbCcgPT4gTlVMTCwNCgkJCSd0eXBlJyA9PiBOVUxMLA0KCQkJJ3RpdGxlJyA9PiBmYWxzZSwNCgkJCSdsaXN0JyA9PiBOVUxMLA0KCQkJJ3N0b3JlJyA9PiBOVUxMLA0KCQkJJ3RhYl9uYW1lJyA9PiBOVUxMLA0KCQkJJ2RiJyA9PiBbDQoJCQkJJ3R5cGUnID0+ICdEQVRFVElNRScsDQoJCQkJJ251bGxfc3dpdGNoJyA9PiAnTlVMTCcNCgkJCV0NCgkJXSwNCgkJJ2hpdHMnID0+IFsNCgkJCSduYW1lJyA9PiAnaGl0cycsDQoJCQknbGFiZWwnID0+ICdIaXRzJywNCgkJCSd0eXBlJyA9PiAnbnVtYmVyJywNCgkJCSd0aXRsZScgPT4gZmFsc2UsDQoJCQknbGlzdCcgPT4gTlVMTCwNCgkJCSdzdG9yZScgPT4gTlVMTCwNCgkJCSd0YWJfbmFtZScgPT4gTlVMTCwNCgkJCSdkYicgPT4gWw0KCQkJCSd0eXBlJyA9PiAnSU5UKDEwKSB1bnNpZ25lZCcsDQoJCQkJJ2RlZmF1bHQnID0+ICcwJywNCgkJCQknbnVsbF9zd2l0Y2gnID0+ICdOVUxMJw0KCQkJXQ0KCQldLA0KCQkndmVyc2lvbicgPT4gWw0KCQkJJ25hbWUnID0+ICd2ZXJzaW9uJywNCgkJCSdsYWJlbCcgPT4gJ1ZlcnNpb24nLA0KCQkJJ3R5cGUnID0+ICd0ZXh0JywNCgkJCSd0aXRsZScgPT4gZmFsc2UsDQoJCQknbGlzdCcgPT4gTlVMTCwNCgkJCSdzdG9yZScgPT4gTlVMTCwNCgkJCSd0YWJfbmFtZScgPT4gTlVMTCwNCgkJCSdkYicgPT4gWw0KCQkJCSd0eXBlJyA9PiAnSU5UKDEwKSB1bnNpZ25lZCcsDQoJCQkJJ2RlZmF1bHQnID0+ICcxJywNCgkJCQknbnVsbF9zd2l0Y2gnID0+ICdOVUxMJw0KCQkJXQ0KCQldLA0KCQkncGFyYW1zJyA9PiBbDQoJCQknbmFtZScgPT4gJ3BhcmFtcycsDQoJCQknbGFiZWwnID0+IE5VTEwsDQoJCQkndHlwZScgPT4gTlVMTCwNCgkJCSd0aXRsZScgPT4gZmFsc2UsDQoJCQknbGlzdCcgPT4gTlVMTCwNCgkJCSdzdG9yZScgPT4gJ2pzb24nLA0KCQkJJ3RhYl9uYW1lJyA9PiBOVUxMLA0KCQkJJ2RiJyA9PiBbDQoJCQkJJ3R5cGUnID0+ICdURVhUJywNCgkJCQknZGVmYXVsdCcgPT4gJ0VNUFRZJywNCgkJCQknbnVsbF9zd2l0Y2gnID0+ICdOVUxMJw0KCQkJXQ0KCQldDQoJXTsNCg0KCS8qKg0KCSAqIEdldCBhbnkgdmFsdWUgZnJvbSBhIGl0ZW0vZmllbGQvY29sdW1uIG9mIGFuIGFyZWEvdmlldy90YWJsZQ0KCSAqICAgICAgICAgIEV4YW1wbGU6ICR0aGlzLT5nZXQoJ3RhYmxlX25hbWUnLCAnZmllbGRfbmFtZScsICd2YWx1ZV9rZXknKTsNCgkgKiBHZXQgYW4gaXRlbS9maWVsZC9jb2x1bW4gb2YgYW4gYXJlYS92aWV3L3RhYmxlDQoJICogICAgICAgICAgRXhhbXBsZTogJHRoaXMtPmdldCgndGFibGVfbmFtZScsICdmaWVsZF9uYW1lJyk7DQoJICogR2V0IGFsbCBpdGVtcy9maWVsZHMvY29sdW1ucyBvZiBhbiBhcmVhL3ZpZXcvdGFibGUNCgkgKiAgICAgICAgICBFeGFtcGxlOiAkdGhpcy0+Z2V0KCd0YWJsZV9uYW1lJyk7DQoJICogR2V0IGFsbCBhcmVhcy92aWV3cy90YWJsZXMgd2l0aCBhbGwgdGhlaXIgaXRlbS9maWVsZC9jb2x1bW4gZGV0YWlscw0KCSAqICAgICAgICAgIEV4YW1wbGU6ICR0aGlzLT5nZXQoJ0FsbCcpOw0KCSAqICAgICAgICAgIEV4YW1wbGU6ICR0aGlzLT5nZXQoKTsNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAkdGFibGUgIFRoZSB0YWJsZQ0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAkZmllbGQgIFRoZSBmaWVsZA0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAka2V5ICAgIFRoZSB2YWx1ZSBrZXkNCgkgKg0KCSAqIEByZXR1cm4gIG1peGVkDQoJICogQHNpbmNlIDMuMi4xDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldCg/c3RyaW5nICR0YWJsZSA9IG51bGwsID9zdHJpbmcgJGZpZWxkID0gbnVsbCwgP3N0cmluZyAka2V5ID0gbnVsbCkNCgl7DQoJCS8vIFJldHVybiBzcGVjaWZpYyB2YWx1ZQ0KCQlpZiAoJHRhYmxlICYmICRmaWVsZCAmJiAka2V5KQ0KCQl7DQoJCQlyZXR1cm4gJHRoaXMtPnRhYmxlc1skdGFibGVdWyRmaWVsZF1bJGtleV0gPz8gJHRoaXMtPmdldERlZmF1bHRLZXkoJGZpZWxkLCAka2V5KTsNCgkJfQ0KDQoJCS8vIFJldHVybiBmaWVsZCB3aXRoaW4gdGFibGUNCgkJaWYgKCR0YWJsZSAmJiAkZmllbGQpDQoJCXsNCgkJCXJldHVybiAkdGhpcy0+dGFibGVzWyR0YWJsZV1bJGZpZWxkXSA/PyAkdGhpcy0+Z2V0RGVmYXVsdCgkZmllbGQpOw0KCQl9DQoNCgkJLy8gUmV0dXJuIGFsbCBmaWVsZHMgaW4gYSB0YWJsZSBvciBhbGwgdGFibGVzIGlmICdBbGwnIGlzIHBhc3NlZA0KCQlpZiAoJHRhYmxlKQ0KCQl7DQoJCQlpZiAoc3RydG91cHBlcigkdGFibGUpID09PSAnQUxMJykNCgkJCXsNCgkJCQlyZXR1cm4gJHRoaXMtPnRhYmxlczsNCgkJCX0NCg0KCQkJcmV0dXJuICR0aGlzLT50YWJsZXNbJHRhYmxlXSA/PyBudWxsOw0KCQl9DQoNCgkJLy8gUmV0dXJuIGFsbCB0YWJsZXMNCgkJcmV0dXJuICR0aGlzLT50YWJsZXM7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRpdGxlIGZpZWxkIGZyb20gYW4gYXJlYS92aWV3L3RhYmxlDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdGFibGUgIFRoZSBhcmVhDQoJICoNCgkgKiBAcmV0dXJuICA/YXJyYXkNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gdGl0bGUoc3RyaW5nICR0YWJsZSk6ID9hcnJheQ0KCXsNCgkJLy8gcmV0dXJuIHRoZSB0aXRsZSBpdGVtL2ZpZWxkL2NvbHVtbiBvZiBhbiBhcmVhL3ZpZXcvdGFibGUgDQoJCWlmICgoJHRhYmxlID0gJHRoaXMtPmdldCgkdGFibGUpKSAhPT0gbnVsbCkNCgkJew0KCQkJZm9yZWFjaCAoJHRhYmxlIGFzICRpdGVtKQ0KCQkJew0KCQkJCWlmICgkaXRlbVsndGl0bGUnXSkNCgkJCQl7DQoJCQkJCXJldHVybiAkaXRlbTsNCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQkvLyBub25lIGZvdW5kDQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIEdldCB0aXRsZSBmaWVsZCBuYW1lDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdGFibGUgIFRoZSBhcmVhDQoJICoNCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gdGl0bGVOYW1lKHN0cmluZyAkdGFibGUpOiBzdHJpbmcNCgl7DQoJCS8vIHJldHVybiB0aGUgdGl0bGUgbmFtZSBvZiBhbiBhcmVhL3ZpZXcvdGFibGUNCgkJaWYgKCgkZmllbGQgPSAkdGhpcy0+dGl0bGUoJHRhYmxlKSkgIT09IG51bGwpDQoJCXsNCgkJCXJldHVybiAkZmllbGRbJ25hbWUnXTsNCgkJfQ0KDQoJCS8vIG5vbmUgZm91bmQgZGVmYXVsdCB0byBJRA0KCQlyZXR1cm4gJ2lkJzsNCgl9DQoNCgkvKioNCgkgKiBHZXQgYWxsIHRhYmxlcw0KCSAqDQoJICogQHJldHVybiAgYXJyYXkNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gdGFibGVzKCk6IGFycmF5DQoJew0KCQkvLyByZXR1cm4gYWxsIGFyZWFzL3ZpZXdzL3RhYmxlcw0KCQlyZXR1cm4gYXJyYXlfa2V5cygkdGhpcy0+dGFibGVzKTsNCgl9DQoNCgkvKioNCgkgKiBDaGVjayBpZiBhIHRhYmxlIChhbmQgZmllbGQpIGV4aXN0DQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICAgJHRhYmxlICBUaGUgYXJlYQ0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAkZmllbGQgIFRoZSBhcmVhDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGV4aXN0KHN0cmluZyAkdGFibGUsID9zdHJpbmcgJGZpZWxkID0gbnVsbCk6IGJvb2wNCgl7DQoJCWlmIChpc3NldCgkdGhpcy0+dGFibGVzWyR0YWJsZV0pKQ0KCQl7DQoJCQkvLyBpZiB3ZSBoYXZlIGEgZmllbGQNCgkJCWlmIChpc19zdHJpbmcoJGZpZWxkKSkNCgkJCXsNCgkJCQlpZiAoaXNzZXQoJHRoaXMtPnRhYmxlc1skdGFibGVdWyRmaWVsZF0pKQ0KCQkJCXsNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuICR0aGlzLT5pc0RlZmF1bHQoJGZpZWxkKTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgYWxsIGZpZWxkcyBvZiBhbiBhcmVhL3ZpZXcvdGFibGUNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJHRhYmxlICAgICBUaGUgYXJlYQ0KCSAqIEBwYXJhbSAgIGJvb2wgICAgJGRlZmF1bHQgICBBZGQgdGhlIGRlZmF1bHQgZmllbGRzDQoJICogQHBhcmFtICAgYm9vbCAgICAkZGV0YWlscyAgIEFkZC9MZWF2ZSBmaWVsZHMgdGhlIGRldGFpbHMNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5fG51bGwgICBPbiBzdWNjZXNzIGFuIGFycmF5IG9mIGZpZWxkcw0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBmaWVsZHMoc3RyaW5nICR0YWJsZSwgYm9vbCAkZGVmYXVsdCA9IGZhbHNlLCBib29sICRkZXRhaWxzID0gZmFsc2UpOiA/YXJyYXkNCgl7DQoJCS8vIFJldHJpZXZlIGZpZWxkcyBmcm9tIHRoZSBzcGVjaWZpZWQgdGFibGUNCgkJJGZpZWxkcyA9ICR0aGlzLT5nZXQoJHRhYmxlKTsNCg0KCQlpZiAoJGZpZWxkcyA9PT0gbnVsbCkNCgkJew0KCQkJcmV0dXJuIG51bGw7DQoJCX0NCg0KCQkvLyBEZXRlcm1pbmUgdGhlIGZpZWxkcyBvdXRwdXQgYmFzZWQgb24gdGhlICRkZWZhdWx0IGFuZCAkZGV0YWlscyBmbGFncw0KCQlpZiAoJGRldGFpbHMpDQoJCXsNCgkJCXJldHVybiAkZGVmYXVsdCA/ICR0aGlzLT5hZGREZWZhdWx0RGV0YWlscygkZmllbGRzKSA6ICRmaWVsZHM7DQoJCX0NCg0KCQkkZmllbGRLZXlzID0gYXJyYXlfa2V5cygkZmllbGRzKTsNCg0KCQlyZXR1cm4gJGRlZmF1bHQgPyAkdGhpcy0+YWRkRGVmYXVsdCgkZmllbGRLZXlzKSA6ICRmaWVsZEtleXM7DQoJfQ0KDQoJLyoqDQoJICogQWRkIHRoZSBkZWZhdWx0IGZpZWxkcw0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICRmaWVsZHMgICBUaGUgdGFibGUgZHluYW1pYyBmaWVsZHMNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5ICAgRmllbGRzICh3aXRoIGRlZmF1bHRzIGFkZGVkKQ0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBhZGREZWZhdWx0KGFycmF5ICRmaWVsZHMpOiBhcnJheQ0KCXsNCgkJLy8gYWRkIGRlZmF1bHQgZmllbGRzDQoJCWZvcmVhY2ggKCR0aGlzLT5kZWZhdWx0cyBhcyAkZGVmYXVsdCkNCgkJew0KCQkJaWYgKGluX2FycmF5KCRkZWZhdWx0WyduYW1lJ10sICRmaWVsZHMpKQ0KCQkJew0KCQkJCWNvbnRpbnVlOw0KCQkJfQ0KDQoJCQkvLyB1c2VkIGp1c3QgZm9yIGxvYWRpbmcgdGhlIGZpZWxkcw0KCQkJJG9yZGVyID0gJGRlZmF1bHRbJ29yZGVyJ10gPz8gMTsNCgkJCXVuc2V0KCRkZWZhdWx0WydvcmRlciddKTsNCg0KCQkJaWYgKCRvcmRlciA8IDApDQoJCQl7DQoJCQkJYXJyYXlfdW5zaGlmdCgkZmllbGRzLCAkZGVmYXVsdFsnbmFtZSddKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkZmllbGRzW10gPSAkZGVmYXVsdFsnbmFtZSddOw0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuICRmaWVsZHM7DQoJfQ0KDQoJLyoqDQoJICogQWRkIHRoZSBkZWZhdWx0IGZpZWxkcw0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICRmaWVsZHMgICBUaGUgdGFibGUgZHluYW1pYyBmaWVsZHMNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5ICAgRmllbGRzICh3aXRoIGRlZmF1bHRzIGRldGFpbHMgYWRkZWQpDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGFkZERlZmF1bHREZXRhaWxzKGFycmF5ICRmaWVsZHMpOiBhcnJheQ0KCXsNCgkJLy8gYWRkIGRlZmF1bHQgZmllbGRzDQoJCWZvcmVhY2ggKCR0aGlzLT5kZWZhdWx0cyBhcyAkZGVmYXVsdCkNCgkJew0KCQkJLy8gcmVtb3ZlIG9yZGVyaW5nIGZvciBub3cNCgkJCXVuc2V0KCRkZWZhdWx0WydvcmRlciddKTsNCg0KCQkJaWYgKCFpc3NldCgkZmllbGRzWyRkZWZhdWx0WyduYW1lJ11dKSkNCgkJCXsNCgkJCQkkZmllbGRzWyRkZWZhdWx0WyduYW1lJ11dID0gJGRlZmF1bHQ7DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gJGZpZWxkczsNCgl9DQoNCgkvKioNCgkgKiBDaGVjayBpZiB0aGUgZmllbGQgaXMgYSBkZWZhdWx0IGZpZWxkDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICRmaWVsZCAgVGhlIGZpZWxkIHRvIGNoZWNrDQoJICoNCgkgKiBAcmV0dXJuICBib29sICAgVHJ1ZSBpZiBhIGRlZmF1bHQgZmllbGQNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gaXNEZWZhdWx0KHN0cmluZyAkZmllbGQpOiBib29sDQoJew0KCQlyZXR1cm4gaXNzZXQoJHRoaXMtPmRlZmF1bHRzWyRmaWVsZF0pOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBhIGRlZmF1bHQgZmllbGQNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJGZpZWxkICBUaGUgZmllbGQgdG8gY2hlY2sNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5fG51bGwgICBUcnVlIGlmIGEgZGVmYXVsdCBmaWVsZA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXREZWZhdWx0KHN0cmluZyAkZmllbGQpOiA/YXJyYXkNCgl7DQoJCXJldHVybiAkdGhpcy0+ZGVmYXVsdHNbJGZpZWxkXSA/PyBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBhIGRlZmF1bHQgZmllbGQgcHJvcGVydHkNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJGZpZWxkICAgVGhlIGZpZWxkIHRvIGNoZWNrDQoJICogQHBhcmFtICAgc3RyaW5nICAka2V5ICAgICBUaGUgZmllbGQga2V5L3Byb3BlcnR5IHRvIGNoZWNrDQoJICoNCgkgKiBAcmV0dXJuICBtaXhlZCAgIFN0cmluZyB2YWx1ZSBpZiBhIGRlZmF1bHQgZmllbGQgcHJvcGVydHkgZXhpc3QNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RGVmYXVsdEtleShzdHJpbmcgJGZpZWxkLCBzdHJpbmcgJGtleSkNCgl7DQoJCXJldHVybiAkdGhpcy0+ZGVmYXVsdHNbJGZpZWxkXVska2V5XSA/PyBudWxsOw0KCX0=', '{}', '{}', '', 1, '2023-06-02 01:08:35', 43, 0, 1), (436, 'ff8d5fdb-2d1f-4178-bd18-a43b8efd1068', 'JCB.Import.Factory', 'Factory', 'abstract class', 'Import Factory\r\n\r\n@since 3.2.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', '2e5bf608-de5c-4b00-a20d-47c26aa350d9', '', '', '', '{\"0\":\"caf33c5d-858c-4f9a-894f-ab302ec5445a\"}', '', '[[[NamespacePrefix]]]\\Joomla\\[[[ComponentNamespace]]].Import.Factory', 1, '{}', '{}', 'dXNlIEpvb21sYVxESVxDb250YWluZXI7', '{\"use_selection0\":{\"use\":\"19b2ba92-1655-4384-acfb-979c80de8b6d\",\"as\":\"default\"},\"use_selection1\":{\"use\":\"4815e1c7-a433-443d-a112-d1e03d7df84b\",\"as\":\"default\"},\"use_selection2\":{\"use\":\"2dcedd6c-c95b-4a37-9cac-95d28faedca3\",\"as\":\"default\"},\"use_selection3\":{\"use\":\"a5daf189-3345-4b13-8716-c51f686f545b\",\"as\":\"default\"},\"use_selection4\":{\"use\":\"21754a8b-2323-4a77-8459-378a74c1ec97\",\"as\":\"default\"},\"use_selection5\":{\"use\":\"202ccd9e-dfcf-4cde-a0ce-bde1fd27f088\",\"as\":\"default\"},\"use_selection6\":{\"use\":\"c4a188de-ad78-4a6d-9d5b-01866846d701\",\"as\":\"default\"},\"use_selection7\":{\"use\":\"b5184f80-613e-46c8-b40a-b60de779bb78\",\"as\":\"ItemImport\"}}', 'CS8qKg0KCSAqIEdsb2JhbCBQYWNrYWdlIENvbnRhaW5lcg0KCSAqDQoJICogQHZhciAgIENvbnRhaW5lcnxudWxsDQoJICogQHNpbmNlIDAuMC4wDQoJICoqLw0KCXByb3RlY3RlZCBzdGF0aWMgP0NvbnRhaW5lciAkY29udGFpbmVyID0gbnVsbDsNCg0KCS8qKg0KCSAqIENyZWF0ZSBhIGNvbnRhaW5lciBvYmplY3QNCgkgKg0KCSAqIEByZXR1cm4gIENvbnRhaW5lcg0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlQ29udGFpbmVyKCk6IENvbnRhaW5lcg0KCXsNCgkJcmV0dXJuIChuZXcgQ29udGFpbmVyKCkpDQoJCQktPnJlZ2lzdGVyU2VydmljZVByb3ZpZGVyKG5ldyBUYWJsZSgpKQ0KCQkJLT5yZWdpc3RlclNlcnZpY2VQcm92aWRlcihuZXcgRGF0YWJhc2UoKSkNCgkJCS0+cmVnaXN0ZXJTZXJ2aWNlUHJvdmlkZXIobmV3IE1vZGVsKCkpDQoJCQktPnJlZ2lzdGVyU2VydmljZVByb3ZpZGVyKG5ldyBEYXRhKCkpDQoJCQktPnJlZ2lzdGVyU2VydmljZVByb3ZpZGVyKG5ldyBJbXBvcnQoKSkNCgkJCS0+cmVnaXN0ZXJTZXJ2aWNlUHJvdmlkZXIobmV3IEZpbGUoKSkNCgkJCS0+cmVnaXN0ZXJTZXJ2aWNlUHJvdmlkZXIobmV3IFNwcmVhZHNoZWV0KCkpDQoJCQktPnJlZ2lzdGVyU2VydmljZVByb3ZpZGVyKG5ldyBJdGVtSW1wb3J0KCkpOw0KCX0=', '{}', '{}', '', 1, '2023-06-02 01:14:26', 16, 0, 1), (462, '9c3aa650-e536-4eea-a2d4-73cc3e184aa9', 'VDM.Interfaces.Database.DeleteInterface', 'DeleteInterface', 'interface', 'Database Delete Interface\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.Database.DeleteInterface', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIERlbGV0ZSBhbGwgcm93cyBpbiB0aGUgZGF0YWJhc2UgdGhhdCBtYXRjaCB0aGVzZSBjb25kaXRpb25zDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkY29uZGl0aW9ucyAgICBDb25kaXRpb25zIGJ5IHdoaWNoIHRvIGRlbGV0ZSB0aGUgZGF0YSBpbiBkYXRhYmFzZSBbYXJyYXkgb2YgYXJyYXlzIChrZXkgPT4gdmFsdWUpXQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgICAgIFRoZSB0YWJsZSB3aGVyZSB0aGUgZGF0YSBpcyBiZWluZyBkZWxldGVkDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIGl0ZW1zKGFycmF5ICRjb25kaXRpb25zLCBzdHJpbmcgJHRhYmxlKTogYm9vbDsNCg0KCS8qKg0KCSAqIFRydW5jYXRlIGEgdGFibGUNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICBUaGUgdGFibGUgdGhhdCBzaG91bGQgYmUgdHJ1bmNhdGVkDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgMy4yLjINCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHRydW5jYXRlKHN0cmluZyAkdGFibGUpOiB2b2lkOw==', '{}', '{}', '', 1, '2023-07-19 04:17:01', 10, 0, 1), -(463, '92291f1f-f248-4ec0-9f2a-3d47c49eeac1', 'VDM.Database.Delete', 'Delete', 'final class', 'Database Delete Class\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', '6cbef8f8-4813-48e3-b05a-65e1aea95171', '', '', '', '{\"0\":\"9c3aa650-e536-4eea-a2d4-73cc3e184aa9\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Database.Delete', 0, '{}', '{}', '', '{\"use_selection0\":{\"use\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIERlbGV0ZSBhbGwgaXRlbXMgaW4gdGhlIGRhdGFiYXNlIHRoYXQgbWF0Y2ggdGhlc2UgY29uZGl0aW9ucw0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgJGNvbmRpdGlvbnMgICAgQ29uZGl0aW9ucyBieSB3aGljaCB0byBkZWxldGUgdGhlIGRhdGEgaW4gZGF0YWJhc2UgW2FycmF5IG9mIGFycmF5cyAoa2V5ID0+IHZhbHVlKV0NCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdGFibGUgICAgICAgICBUaGUgdGFibGUgd2hlcmUgdGhlIGRhdGEgaXMgYmVpbmcgZGVsZXRlZA0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAgIDMuMi4yDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBpdGVtcyhhcnJheSAkY29uZGl0aW9ucywgc3RyaW5nICR0YWJsZSk6IGJvb2wNCgl7DQoJCS8vIHNldCB0aGUgdXBkYXRlIGNvbHVtbnMNCgkJaWYgKCRjb25kaXRpb25zID09PSBbXSkNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJLy8gZ2V0IGEgcXVlcnkgb2JqZWN0DQoJCSRxdWVyeSA9ICR0aGlzLT5kYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJLy8gc3RhcnQgdGhlIGNvbmRpdGlvbnMgYnVja2V0DQoJCSRfY29uZGl0aW9ucyA9IFtdOw0KCQlmb3JlYWNoICgkY29uZGl0aW9ucyBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJew0KCQkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkdmFsdWUpKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkdmFsdWVbJ3ZhbHVlJ10pICYmIGlzc2V0KCR2YWx1ZVsnb3BlcmF0b3InXSkpDQoJCQkJew0KCQkJCQkvLyBjaGVjayBpZiB2YWx1ZSBuZWVkcyB0byBiZSBxdW90ZWQNCgkJCQkJJHF1b3RlID0gJHZhbHVlWydxdW90ZSddID8/IHRydWU7DQoJCQkJCWlmICghJHF1b3RlKQ0KCQkJCQl7DQoJCQkJCQlpZiAoQXJyYXlIZWxwZXI6OmNoZWNrKCR2YWx1ZVsndmFsdWUnXSkpDQoJCQkJCQl7DQoJCQkJCQkJLy8gYWRkIHRoZSB3aGVyZSBieSBhcnJheQ0KCQkJCQkJCSRfY29uZGl0aW9uc1tdID0gJHRoaXMtPmRiLT5xdW90ZU5hbWUoJGtleSkNCgkJCQkJCQkJLiAnICcgLiAkdmFsdWVbJ29wZXJhdG9yJ10NCgkJCQkJCQkJLiAnICcgLiAnICgnIC4NCgkJCQkJCQkJaW1wbG9kZSgnLCcsICR2YWx1ZVsndmFsdWUnXSkNCgkJCQkJCQkJLiAnKSc7DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJLy8gYWRkIHRoZSBjb25kaXRpb25zDQoJCQkJCQkJJF9jb25kaXRpb25zW10gPSAkdGhpcy0+ZGItPnF1b3RlTmFtZSgka2V5KQ0KCQkJCQkJCQkuICcgJyAuICR2YWx1ZVsnb3BlcmF0b3InXQ0KCQkJCQkJCQkuICcgJyAuICR2YWx1ZVsndmFsdWUnXTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCWlmIChBcnJheUhlbHBlcjo6Y2hlY2soJHZhbHVlWyd2YWx1ZSddKSkNCgkJCQkJCXsNCgkJCQkJCQkvLyBhZGQgdGhlIHdoZXJlIGJ5IGFycmF5DQoJCQkJCQkJJF9jb25kaXRpb25zW10gPSAkdGhpcy0+ZGItPnF1b3RlTmFtZSgka2V5KQ0KCQkJCQkJCQkuICcgJyAuICR2YWx1ZVsnb3BlcmF0b3InXQ0KCQkJCQkJCQkuICcgJyAuICcgKCcgLg0KCQkJCQkJCQlpbXBsb2RlKCcsJywgYXJyYXlfbWFwKGZuKCR2YWwpID0+ICR0aGlzLT5xdW90ZSgkdmFsKSwgJHZhbHVlWyd2YWx1ZSddKSkNCgkJCQkJCQkJLiAnKSc7DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJLy8gYWRkIHRoZSBjb25kaXRpb25zDQoJCQkJCQkJJF9jb25kaXRpb25zW10gPSAkdGhpcy0+ZGItPnF1b3RlTmFtZSgka2V5KQ0KCQkJCQkJCQkuICcgJyAuICR2YWx1ZVsnb3BlcmF0b3InXQ0KCQkJCQkJCQkuICcgJyAuICR0aGlzLT5xdW90ZSgkdmFsdWVbJ3ZhbHVlJ10pOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCS8vIHdlIHNob3VsZCB0aHJvdWdoIGFuIGV4Y2VwdGlvbg0KCQkJCQkvLyBmb3Igc2VjdXJpdHkgd2UganVzdCByZXR1cm4gZmFsc2UgZm9yIG5vdw0KCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIGFkZCBkZWZhdWx0IGNvbmRpdGlvbg0KCQkJCSRfY29uZGl0aW9uc1tdID0gJHRoaXMtPmRiLT5xdW90ZU5hbWUoJGtleSkgLiAnID0gJyAuICR0aGlzLT5xdW90ZSgkdmFsdWUpOw0KCQkJfQ0KCQl9DQoNCgkJLy8gc2V0IHRoZSBxdWVyeSB0YXJnZXRzDQoJCSRxdWVyeS0+ZGVsZXRlKCR0aGlzLT5kYi0+cXVvdGVOYW1lKCR0aGlzLT5nZXRUYWJsZSgkdGFibGUpKSk7DQoJCSRxdWVyeS0+d2hlcmUoJF9jb25kaXRpb25zKTsNCg0KCQkkdGhpcy0+ZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoNCgkJcmV0dXJuICR0aGlzLT5kYi0+ZXhlY3V0ZSgpOw0KCX0NCg0KCS8qKg0KCSAqIFRydW5jYXRlIGEgdGFibGUNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICBUaGUgdGFibGUgdGhhdCBzaG91bGQgYmUgdHJ1bmNhdGVkDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgMy4yLjINCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHRydW5jYXRlKHN0cmluZyAkdGFibGUpOiB2b2lkDQoJew0KCQkkdGhpcy0+ZGItPnRydW5jYXRlVGFibGUoJHRoaXMtPmdldFRhYmxlKCR0YWJsZSkpOw0KCX0=', '{}', '{}', '', 1, '2023-07-19 04:27:21', 11, 0, 1), +(463, '92291f1f-f248-4ec0-9f2a-3d47c49eeac1', 'VDM.Database.Delete', 'Delete', 'final class', 'Database Delete Class\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', '6cbef8f8-4813-48e3-b05a-65e1aea95171', '', '', '', '{\"0\":\"9c3aa650-e536-4eea-a2d4-73cc3e184aa9\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Database.Delete', 0, '{}', '{}', '', '{\"use_selection0\":{\"use\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIERlbGV0ZSBhbGwgaXRlbXMgaW4gdGhlIGRhdGFiYXNlIHRoYXQgbWF0Y2ggdGhlc2UgY29uZGl0aW9ucw0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgJGNvbmRpdGlvbnMgICAgQ29uZGl0aW9ucyBieSB3aGljaCB0byBkZWxldGUgdGhlIGRhdGEgaW4gZGF0YWJhc2UgW2FycmF5IG9mIGFycmF5cyAoa2V5ID0+IHZhbHVlKV0NCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdGFibGUgICAgICAgICBUaGUgdGFibGUgd2hlcmUgdGhlIGRhdGEgaXMgYmVpbmcgZGVsZXRlZA0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAgIDMuMi4yDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBpdGVtcyhhcnJheSAkY29uZGl0aW9ucywgc3RyaW5nICR0YWJsZSk6IGJvb2wNCgl7DQoJCS8vIHNldCB0aGUgdXBkYXRlIGNvbHVtbnMNCgkJaWYgKCRjb25kaXRpb25zID09PSBbXSkNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJLy8gZ2V0IGEgcXVlcnkgb2JqZWN0DQoJCSRxdWVyeSA9ICR0aGlzLT5kYi0+Y3JlYXRlUXVlcnkoKTsNCg0KCQkvLyBzdGFydCB0aGUgY29uZGl0aW9ucyBidWNrZXQNCgkJJF9jb25kaXRpb25zID0gW107DQoJCWZvcmVhY2ggKCRjb25kaXRpb25zIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQl7DQoJCQlpZiAoQXJyYXlIZWxwZXI6OmNoZWNrKCR2YWx1ZSkpDQoJCQl7DQoJCQkJaWYgKGlzc2V0KCR2YWx1ZVsndmFsdWUnXSkgJiYgaXNzZXQoJHZhbHVlWydvcGVyYXRvciddKSkNCgkJCQl7DQoJCQkJCS8vIGNoZWNrIGlmIHZhbHVlIG5lZWRzIHRvIGJlIHF1b3RlZA0KCQkJCQkkcXVvdGUgPSAkdmFsdWVbJ3F1b3RlJ10gPz8gdHJ1ZTsNCgkJCQkJaWYgKCEkcXVvdGUpDQoJCQkJCXsNCgkJCQkJCWlmIChBcnJheUhlbHBlcjo6Y2hlY2soJHZhbHVlWyd2YWx1ZSddKSkNCgkJCQkJCXsNCgkJCQkJCQkvLyBhZGQgdGhlIHdoZXJlIGJ5IGFycmF5DQoJCQkJCQkJJF9jb25kaXRpb25zW10gPSAkdGhpcy0+ZGItPnF1b3RlTmFtZSgka2V5KQ0KCQkJCQkJCQkuICcgJyAuICR2YWx1ZVsnb3BlcmF0b3InXQ0KCQkJCQkJCQkuICcgJyAuICcgKCcgLg0KCQkJCQkJCQlpbXBsb2RlKCcsJywgJHZhbHVlWyd2YWx1ZSddKQ0KCQkJCQkJCQkuICcpJzsNCgkJCQkJCX0NCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQkvLyBhZGQgdGhlIGNvbmRpdGlvbnMNCgkJCQkJCQkkX2NvbmRpdGlvbnNbXSA9ICR0aGlzLT5kYi0+cXVvdGVOYW1lKCRrZXkpDQoJCQkJCQkJCS4gJyAnIC4gJHZhbHVlWydvcGVyYXRvciddDQoJCQkJCQkJCS4gJyAnIC4gJHZhbHVlWyd2YWx1ZSddOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkdmFsdWVbJ3ZhbHVlJ10pKQ0KCQkJCQkJew0KCQkJCQkJCS8vIGFkZCB0aGUgd2hlcmUgYnkgYXJyYXkNCgkJCQkJCQkkX2NvbmRpdGlvbnNbXSA9ICR0aGlzLT5kYi0+cXVvdGVOYW1lKCRrZXkpDQoJCQkJCQkJCS4gJyAnIC4gJHZhbHVlWydvcGVyYXRvciddDQoJCQkJCQkJCS4gJyAnIC4gJyAoJyAuDQoJCQkJCQkJCWltcGxvZGUoJywnLCBhcnJheV9tYXAoZm4oJHZhbCkgPT4gJHRoaXMtPnF1b3RlKCR2YWwpLCAkdmFsdWVbJ3ZhbHVlJ10pKQ0KCQkJCQkJCQkuICcpJzsNCgkJCQkJCX0NCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQkvLyBhZGQgdGhlIGNvbmRpdGlvbnMNCgkJCQkJCQkkX2NvbmRpdGlvbnNbXSA9ICR0aGlzLT5kYi0+cXVvdGVOYW1lKCRrZXkpDQoJCQkJCQkJCS4gJyAnIC4gJHZhbHVlWydvcGVyYXRvciddDQoJCQkJCQkJCS4gJyAnIC4gJHRoaXMtPnF1b3RlKCR2YWx1ZVsndmFsdWUnXSk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gd2Ugc2hvdWxkIHRocm91Z2ggYW4gZXhjZXB0aW9uDQoJCQkJCS8vIGZvciBzZWN1cml0eSB3ZSBqdXN0IHJldHVybiBmYWxzZSBmb3Igbm93DQoJCQkJCXJldHVybiBmYWxzZTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gYWRkIGRlZmF1bHQgY29uZGl0aW9uDQoJCQkJJF9jb25kaXRpb25zW10gPSAkdGhpcy0+ZGItPnF1b3RlTmFtZSgka2V5KSAuICcgPSAnIC4gJHRoaXMtPnF1b3RlKCR2YWx1ZSk7DQoJCQl9DQoJCX0NCg0KCQkvLyBzZXQgdGhlIHF1ZXJ5IHRhcmdldHMNCgkJJHF1ZXJ5LT5kZWxldGUoJHRoaXMtPmRiLT5xdW90ZU5hbWUoJHRoaXMtPmdldFRhYmxlKCR0YWJsZSkpKTsNCgkJJHF1ZXJ5LT53aGVyZSgkX2NvbmRpdGlvbnMpOw0KDQoJCSR0aGlzLT5kYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCg0KCQlyZXR1cm4gJHRoaXMtPmRiLT5leGVjdXRlKCk7DQoJfQ0KDQoJLyoqDQoJICogVHJ1bmNhdGUgYSB0YWJsZQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRhYmxlICAgIFRoZSB0YWJsZSB0aGF0IHNob3VsZCBiZSB0cnVuY2F0ZWQNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICAzLjIuMg0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gdHJ1bmNhdGUoc3RyaW5nICR0YWJsZSk6IHZvaWQNCgl7DQoJCSR0aGlzLT5kYi0+dHJ1bmNhdGVUYWJsZSgkdGhpcy0+Z2V0VGFibGUoJHRhYmxlKSk7DQoJfQ==', '{}', '{}', '', 1, '2023-07-19 04:27:21', 12, 0, 1), (485, '43134867-5cb8-4280-9be8-309fd2fd135f', 'VDM.Abstraction.ActiveRegistry', 'ActiveRegistry', 'abstract class', 'Active Storage Registry.\r\n\r\nDon\'t use this beyond 10 dimensional depth for best performance.\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '{\"0\":\"af0eedbe-603b-4671-8e5a-28165d88254b\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Abstraction.ActiveRegistry', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIFRoZSByZWdpc3RyeSBhcnJheS4NCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgMy4yLjANCgkgKiovDQoJcHJvdGVjdGVkIGFycmF5ICRhY3RpdmUgPSBbXTsNCg0KCS8qKg0KCSAqIEJhc2Ugc3dpdGNoIHRvIGFkZCB2YWx1ZXMgYXMgc3RyaW5nIG9yIGFycmF5DQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgMy4yLjANCgkgKiovDQoJcHJvdGVjdGVkIGJvb2wgJGFkZEFzQXJyYXkgPSBmYWxzZTsNCg0KCS8qKg0KCSAqIEJhc2Ugc3dpdGNoIHRvIGtlZXAgYXJyYXkgdmFsdWVzIHVuaXF1ZQ0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlIDMuMi4yDQoJICoqLw0KCXByb3RlY3RlZCBib29sICR1bmlxdWVBcnJheSA9IGZhbHNlOw0KDQoJLyoqDQoJICogQ2hlY2sgaWYgdGhlIHJlZ2lzdHJ5IGhhcyBhbnkgY29udGVudC4NCgkgKg0KCSAqIEByZXR1cm4gYm9vbCAgUmV0dXJucyB0cnVlIGlmIHRoZSBhY3RpdmUgYXJyYXkgaXMgbm90IGVtcHR5LCBmYWxzZSBvdGhlcndpc2UuDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGlzQWN0aXZlKCk6IGJvb2wNCgl7DQoJCXJldHVybiAhZW1wdHkoJHRoaXMtPmFjdGl2ZSk7DQoJfQ0KDQoJLyoqDQoJICogR2V0IGFsbCB2YWx1ZSBmcm9tIHRoZSBhY3RpdmUgcmVnaXN0cnkuDQoJICoNCgkgKiBAcmV0dXJuIGFycmF5ICAgVGhlIHZhbHVlcyBvciBlbXB0eSBhcnJheS4NCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gYWxsQWN0aXZlKCk6IGFycmF5DQoJew0KCQlyZXR1cm4gJHRoaXMtPmFjdGl2ZTsNCgl9DQoNCgkvKioNCgkgKiBTZXRzIGEgdmFsdWUgaW50byB0aGUgcmVnaXN0cnkgdXNpbmcgbXVsdGlwbGUga2V5cy4NCgkgKg0KCSAqIEBwYXJhbSBtaXhlZCAgICR2YWx1ZSAgICAgVGhlIHZhbHVlIHRvIHNldC4NCgkgKiBAcGFyYW0gc3RyaW5nICAuLi4ka2V5cyAgIFRoZSBrZXlzIHRvIGRldGVybWluZSB0aGUgbG9jYXRpb24uDQoJICoNCgkgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgYW55IG9mIHRoZSBrZXlzIGFyZSBub3QgYSBudW1iZXIgb3Igc3RyaW5nLg0KCSAqIEByZXR1cm4gdm9pZA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBzZXRBY3RpdmUoJHZhbHVlLCBzdHJpbmcgLi4uJGtleXMpOiB2b2lkDQoJew0KCQlpZiAoISR0aGlzLT52YWxpZEFjdGl2ZUtleXMoJGtleXMpKQ0KCQl7DQoJCQl0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiS2V5cyBtdXN0IG9ubHkgYmUgc3RyaW5ncyBvciBudW1iZXJzIHRvIHNldCBhbnkgdmFsdWUuIik7DQoJCX0NCg0KCQkkYXJyYXkgPSAmJHRoaXMtPmFjdGl2ZTsNCg0KCQlmb3JlYWNoICgka2V5cyBhcyAka2V5KQ0KCQl7DQoJCQlpZiAoIWlzc2V0KCRhcnJheVska2V5XSkpDQoJCQl7DQoJCQkJaWYgKCFpc19hcnJheSgkYXJyYXkpKQ0KCQkJCXsNCgkJCQkJJHBhdGggPSAnWycgLiBpbXBsb2RlKCddWycsICRrZXlzKSAuICddJzsNCgkJCQkJdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIkF0dGVtcHRlZCB0byB1c2Uga2V5ICd7JGtleX0nIG9uIGEgbm9uLWFycmF5IHZhbHVlOiB7JGFycmF5fS4gUGF0aDogeyRwYXRofSBWYWx1ZTogeyR2YWx1ZX0iKTsNCgkJCQl9DQoNCgkJCQkkYXJyYXlbJGtleV0gPSBbXTsNCgkJCX0NCgkJCSRhcnJheSA9ICYkYXJyYXlbJGtleV07DQoJCX0NCg0KCQkkYXJyYXkgPSAkdmFsdWU7DQoJfQ0KDQoJLyoqDQoJICogQWRkcyBjb250ZW50IGludG8gdGhlIHJlZ2lzdHJ5LiBJZiBhIGtleSBleGlzdHMsDQoJICogaXQgZWl0aGVyIGFwcGVuZHMgb3IgY29uY2F0ZW5hdGVzIGJhc2VkIG9uIHRoZSB2YWx1ZSdzIHR5cGUuDQoJICoNCgkgKiBAcGFyYW0gbWl4ZWQgICAgICAgJHZhbHVlICAgICBUaGUgdmFsdWUgdG8gc2V0Lg0KCSAqIEBwYXJhbSBib29sfG51bGwgICAkYXNBcnJheSAgIERldGVybWluZXMgaWYgdGhlIG5ldyB2YWx1ZSBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBhcnJheS4NCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBpcyAkYWRkQXNBcnJheSA9IGZhbHNlIChpZiBudWxsKSBpbiBiYXNlIGNsYXNzLg0KCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdmVycmlkZSBpbiBjaGlsZCBjbGFzcyBhbGxvd2VkIHNldCBjbGFzcyBwcm9wZXJ0eSAkYWRkQXNBcnJheSA9IHRydWUuDQoJICogQHBhcmFtIHN0cmluZyAgICAgIC4uLiRrZXlzICAgVGhlIGtleXMgdG8gZGV0ZXJtaW5lIHRoZSBsb2NhdGlvbi4NCgkgKg0KCSAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiBhbnkgb2YgdGhlIGtleXMgYXJlIG5vdCBhIG51bWJlciBvciBzdHJpbmcuDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGFkZEFjdGl2ZSgkdmFsdWUsID9ib29sICRhc0FycmF5LCBzdHJpbmcgLi4uJGtleXMpOiB2b2lkDQoJew0KCQlpZiAoISR0aGlzLT52YWxpZEFjdGl2ZUtleXMoJGtleXMpKQ0KCQl7DQoJCQl0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiS2V5cyBtdXN0IG9ubHkgYmUgc3RyaW5ncyBvciBudW1iZXJzIHRvIGFkZCBhbnkgdmFsdWUuIik7DQoJCX0NCg0KCQkvLyBudWxsIGZhbGxiYWNrIHRvIGNsYXNzIHZhbHVlDQoJCWlmICgkYXNBcnJheSA9PT0gbnVsbCkNCgkJew0KCQkJJGFzQXJyYXkgPSAkdGhpcy0+YWRkQXNBcnJheTsNCgkJfQ0KDQoJCSRhcnJheSA9ICYkdGhpcy0+YWN0aXZlOw0KDQoJCWZvcmVhY2ggKCRrZXlzIGFzICRrZXkpDQoJCXsNCgkJCWlmICghaXNzZXQoJGFycmF5WyRrZXldKSkNCgkJCXsNCgkJCQlpZiAoIWlzX2FycmF5KCRhcnJheSkpDQoJCQkJew0KCQkJCQkkcGF0aCA9ICdbJyAuIGltcGxvZGUoJ11bJywgJGtleXMpIC4gJ10nOw0KCQkJCQl0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiQXR0ZW1wdGVkIHRvIHVzZSBrZXkgJ3ska2V5fScgb24gYSBub24tYXJyYXkgdmFsdWU6IHskYXJyYXl9LiBQYXRoOiB7JHBhdGh9IFZhbHVlOiB7JHZhbHVlfSIpOw0KCQkJCX0NCg0KCQkJCSRhcnJheVska2V5XSA9IFtdOw0KCQkJfQ0KCQkJJGFycmF5ID0gJiRhcnJheVska2V5XTsNCgkJfQ0KDQoJCS8vIGFkZCBzdHJpbmcNCgkJaWYgKCEkYXNBcnJheSAmJiAkYXJyYXkgPT09IFtdKQ0KCQl7DQoJCQkkYXJyYXkgPSAnJzsNCgkJfQ0KDQoJCS8vIEhhbmRsZSB0aGUgYWRkaW5nIGxvZ2ljIGF0IHRoZSB0aXAgb2YgdGhlIGFycmF5DQoJCWlmIChpc19hcnJheSgkYXJyYXkpIHx8ICRhc0FycmF5KQ0KCQl7DQoJCQlpZiAoIWlzX2FycmF5KCRhcnJheSkpDQoJCQl7DQoJCQkJLy8gQ29udmVydCB0byBhcnJheSBpZiBpdCdzIG5vdCBhbHJlYWR5IGFuIGFycmF5DQoJCQkJJGFycmF5ID0gWyRhcnJheV07DQoJCQl9DQoNCgkJCWlmICgkdGhpcy0+dW5pcXVlQXJyYXkgJiYgaW5fYXJyYXkoJHZhbHVlLCAkYXJyYXkpKQ0KCQkJew0KCQkJCS8vIHdlIGRvIG5vdGhpbmcNCgkJCQlyZXR1cm47DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJGFycmF5W10gPSAkdmFsdWU7DQoJCQl9DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQlpZiAoaXNfc3RyaW5nKCR2YWx1ZSkgfHwgaXNfbnVtZXJpYygkdmFsdWUpKQ0KCQkJew0KCQkJCSRhcnJheSAuPSAoc3RyaW5nKSAkdmFsdWU7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJGFycmF5ID0gJHZhbHVlOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogUmV0cmlldmVzIGEgdmFsdWUgKG9yIHN1Yi1hcnJheSkgZnJvbSB0aGUgcmVnaXN0cnkgdXNpbmcgbXVsdGlwbGUga2V5cy4NCgkgKg0KCSAqIEBwYXJhbSBtaXhlZCAgICRkZWZhdWx0ICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpZiBub3Qgc2V0Lg0KCSAqIEBwYXJhbSBzdHJpbmcgIC4uLiRrZXlzICAgICAgVGhlIGtleXMgdG8gZGV0ZXJtaW5lIHRoZSBsb2NhdGlvbi4NCgkgKg0KCSAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiBhbnkgb2YgdGhlIGtleXMgYXJlIG5vdCBhIG51bWJlciBvciBzdHJpbmcuDQoJICogQHJldHVybiBtaXhlZCBUaGUgdmFsdWUgb3Igc3ViLWFycmF5IGZyb20gdGhlIHN0b3JhZ2UuIE51bGwgaWYgdGhlIGxvY2F0aW9uIGRvZXNuJ3QgZXhpc3QuDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEFjdGl2ZSgkZGVmYXVsdCwgc3RyaW5nIC4uLiRrZXlzKQ0KCXsNCgkJaWYgKCEkdGhpcy0+dmFsaWRBY3RpdmVLZXlzKCRrZXlzKSkNCgkJew0KCQkJdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIktleXMgbXVzdCBvbmx5IGJlIHN0cmluZ3Mgb3IgbnVtYmVycyB0byBnZXQgYW55IHZhbHVlLiIpOw0KCQl9DQoNCgkJJGFycmF5ID0gJHRoaXMtPmFjdGl2ZTsNCg0KCQlmb3JlYWNoICgka2V5cyBhcyAka2V5KQ0KCQl7DQoJCQlpZiAoIWlzc2V0KCRhcnJheVska2V5XSkpDQoJCQl7DQoJCQkJcmV0dXJuICRkZWZhdWx0Ow0KCQkJfQ0KCQkJJGFycmF5ID0gJGFycmF5WyRrZXldOw0KCQl9DQoNCgkJcmV0dXJuICRhcnJheTsNCgl9DQoNCgkvKioNCgkgKiBSZW1vdmVzIGEgdmFsdWUgKG9yIHN1Yi1hcnJheSkgZnJvbSB0aGUgcmVnaXN0cnkgdXNpbmcgbXVsdGlwbGUga2V5cy4NCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgLi4uJGtleXMgVGhlIGtleXMgdG8gZGV0ZXJtaW5lIHRoZSBsb2NhdGlvbi4NCgkgKg0KCSAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiBhbnkgb2YgdGhlIGtleXMgYXJlIG5vdCBhIG51bWJlciBvciBzdHJpbmcuDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHJlbW92ZUFjdGl2ZShzdHJpbmcgLi4uJGtleXMpOiB2b2lkDQoJew0KCQlpZiAoISR0aGlzLT52YWxpZEFjdGl2ZUtleXMoJGtleXMpKQ0KCQl7DQoJCQl0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiS2V5cyBtdXN0IG9ubHkgYmUgc3RyaW5ncyBvciBudW1iZXJzIHRvIHJlbW92ZSBhbnkgdmFsdWUuIik7DQoJCX0NCg0KCQkkYXJyYXkgPSAmJHRoaXMtPmFjdGl2ZTsNCgkJJGxhc3RLZXkgPSBhcnJheV9wb3AoJGtleXMpOw0KDQoJCWZvcmVhY2ggKCRrZXlzIGFzICRrZXkpDQoJCXsNCgkJCWlmICghaXNzZXQoJGFycmF5WyRrZXldKSkNCgkJCXsNCgkJCQlyZXR1cm47ICAvLyBFeGl0IGVhcmx5IGlmIHRoZSBrZXkgZG9lc24ndCBleGlzdA0KCQkJfQ0KCQkJJGFycmF5ID0gJiRhcnJheVska2V5XTsNCgkJfQ0KDQoJCXVuc2V0KCRhcnJheVskbGFzdEtleV0pOw0KCX0NCg0KCS8qKg0KCSAqIENoZWNrcyB0aGUgZXhpc3RlbmNlIG9mIGEgcGFydGljdWxhciBsb2NhdGlvbiBpbiB0aGUgcmVnaXN0cnkgdXNpbmcgbXVsdGlwbGUga2V5cy4NCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgLi4uJGtleXMgVGhlIGtleXMgdG8gZGV0ZXJtaW5lIHRoZSBsb2NhdGlvbi4NCgkgKg0KCSAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiBhbnkgb2YgdGhlIGtleXMgYXJlIG5vdCBhIG51bWJlciBvciBzdHJpbmcuDQoJICogQHJldHVybiBib29sIFRydWUgaWYgdGhlIGxvY2F0aW9uIGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlLg0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBleGlzdHNBY3RpdmUoc3RyaW5nIC4uLiRrZXlzKTogYm9vbA0KCXsNCgkJaWYgKCEkdGhpcy0+dmFsaWRBY3RpdmVLZXlzKCRrZXlzKSkNCgkJew0KCQkJdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIktleXMgbXVzdCBvbmx5IGJlIHN0cmluZ3Mgb3IgbnVtYmVycyB0byBjaGVjayBpZiBhbnkgdmFsdWUgZXhpc3QuIik7DQoJCX0NCg0KCQkkYXJyYXkgPSAkdGhpcy0+YWN0aXZlOw0KDQoJCWZvcmVhY2ggKCRrZXlzIGFzICRrZXkpDQoJCXsNCgkJCWlmICghaXNzZXQoJGFycmF5WyRrZXldKSkNCgkJCXsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCQkkYXJyYXkgPSAkYXJyYXlbJGtleV07DQoJCX0NCg0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCgkvKioNCgkgKiBDaGVja3MgdGhhdCB0aGUga2V5cyBhcmUgdmFsaWQNCgkgKg0KCSAqIEBwYXJhbSBhcnJheSAgJGtleXMgVGhlIGtleXMgdG8gZGV0ZXJtaW5lIHRoZSBsb2NhdGlvbi4NCgkgKg0KCSAqIEByZXR1cm4gYm9vbCAgIEZhbHNlIGlmIGFueSBvZiB0aGUga2V5cyBhcmUgbm90IGEgbnVtYmVyIG9yIHN0cmluZy4NCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gdmFsaWRBY3RpdmVLZXlzKGFycmF5ICRrZXlzKTogYm9vbA0KCXsNCgkJZm9yZWFjaCAoJGtleXMgYXMgJGtleSkNCgkJew0KCQkJaWYgKCRrZXkgPT09ICcnIHx8ICghaXNfc3RyaW5nKCRrZXkpICYmICFpc19udW1lcmljKCRrZXkpKSkNCgkJCXsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gdHJ1ZTsNCgl9', '{}', '{}', '', 1, '2023-09-08 16:04:26', 40, 0, 1), (486, 'af0eedbe-603b-4671-8e5a-28165d88254b', 'VDM.Interfaces.Activeregistryinterface', 'Activeregistryinterface', 'interface', 'The Active Registry Interface\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.Activeregistryinterface', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIENoZWNrIGlmIHRoZSByZWdpc3RyeSBoYXMgYW55IGNvbnRlbnQuDQoJICoNCgkgKiBAcmV0dXJuIGJvb2wgIFJldHVybnMgdHJ1ZSBpZiB0aGUgYWN0aXZlIGFycmF5IGlzIG5vdCBlbXB0eSwgZmFsc2Ugb3RoZXJ3aXNlLg0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBpc0FjdGl2ZSgpOiBib29sOw0KDQoJLyoqDQoJICogUmV0cmlldmVzIGFsbCB2YWx1ZSBmcm9tIHRoZSByZWdpc3RyeS4NCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkgICBUaGUgdmFsdWVzLg0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBhbGxBY3RpdmUoKTogYXJyYXk7DQoNCgkvKioNCgkgKiBTZXRzIGEgdmFsdWUgaW50byB0aGUgcmVnaXN0cnkgdXNpbmcgbXVsdGlwbGUga2V5cy4NCgkgKg0KCSAqIEBwYXJhbSBtaXhlZCAgICR2YWx1ZSAgICAgVGhlIHZhbHVlIHRvIHNldC4NCgkgKiBAcGFyYW0gc3RyaW5nICAuLi4ka2V5cyAgIFRoZSBrZXlzIHRvIGRldGVybWluZSB0aGUgbG9jYXRpb24uDQoJICoNCgkgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgYW55IG9mIHRoZSBrZXlzIGFyZSBub3QgYSBudW1iZXIgb3Igc3RyaW5nLg0KCSAqIEByZXR1cm4gdm9pZA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBzZXRBY3RpdmUoJHZhbHVlLCBzdHJpbmcgLi4uJGtleXMpOiB2b2lkOw0KDQoJLyoqDQoJICogQWRkcyBjb250ZW50IGludG8gdGhlIHJlZ2lzdHJ5LiBJZiBhIGtleSBleGlzdHMsDQoJICogaXQgZWl0aGVyIGFwcGVuZHMgb3IgY29uY2F0ZW5hdGVzIGJhc2VkIG9uIHRoZSB2YWx1ZSdzIHR5cGUuDQoJICoNCgkgKiBAcGFyYW0gbWl4ZWQgICAgICAgJHZhbHVlICAgICBUaGUgdmFsdWUgdG8gc2V0Lg0KCSAqIEBwYXJhbSBib29sfG51bGwgICAkYXNBcnJheSAgIERldGVybWluZXMgaWYgdGhlIG5ldyB2YWx1ZSBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBhcnJheS4NCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBpcyAkYWRkQXNBcnJheSA9IGZhbHNlIChpZiBudWxsKSBpbiBiYXNlIGNsYXNzLg0KCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdmVycmlkZSBpbiBjaGlsZCBjbGFzcyBhbGxvd2VkIHNldCBjbGFzcyBwcm9wZXJ0eSAkYWRkQXNBcnJheSA9IHRydWUuDQoJICogQHBhcmFtIHN0cmluZyAgICAgIC4uLiRrZXlzICAgVGhlIGtleXMgdG8gZGV0ZXJtaW5lIHRoZSBsb2NhdGlvbi4NCgkgKg0KCSAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiBhbnkgb2YgdGhlIGtleXMgYXJlIG5vdCBhIG51bWJlciBvciBzdHJpbmcuDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGFkZEFjdGl2ZSgkdmFsdWUsID9ib29sICRhc0FycmF5LCBzdHJpbmcgLi4uJGtleXMpOiB2b2lkOw0KDQoJLyoqDQoJICogUmV0cmlldmVzIGEgdmFsdWUgKG9yIHN1Yi1hcnJheSkgZnJvbSB0aGUgcmVnaXN0cnkgdXNpbmcgbXVsdGlwbGUga2V5cy4NCgkgKg0KCSAqIEBwYXJhbSBtaXhlZCAgICRkZWZhdWx0ICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpZiBub3Qgc2V0Lg0KCSAqIEBwYXJhbSBzdHJpbmcgIC4uLiRrZXlzICAgICAgVGhlIGtleXMgdG8gZGV0ZXJtaW5lIHRoZSBsb2NhdGlvbi4NCgkgKg0KCSAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiBhbnkgb2YgdGhlIGtleXMgYXJlIG5vdCBhIG51bWJlciBvciBzdHJpbmcuDQoJICogQHJldHVybiBtaXhlZCBUaGUgdmFsdWUgb3Igc3ViLWFycmF5IGZyb20gdGhlIHN0b3JhZ2UuIE51bGwgaWYgdGhlIGxvY2F0aW9uIGRvZXNuJ3QgZXhpc3QuDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEFjdGl2ZSgkZGVmYXVsdCwgc3RyaW5nIC4uLiRrZXlzKTsNCg0KCS8qKg0KCSAqIFJlbW92ZXMgYSB2YWx1ZSAob3Igc3ViLWFycmF5KSBmcm9tIHRoZSByZWdpc3RyeSB1c2luZyBtdWx0aXBsZSBrZXlzLg0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAuLi4ka2V5cyBUaGUga2V5cyB0byBkZXRlcm1pbmUgdGhlIGxvY2F0aW9uLg0KCSAqDQoJICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIGFueSBvZiB0aGUga2V5cyBhcmUgbm90IGEgbnVtYmVyIG9yIHN0cmluZy4NCgkgKiBAcmV0dXJuIHZvaWQNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlQWN0aXZlKHN0cmluZyAuLi4ka2V5cyk6IHZvaWQ7DQoNCgkvKioNCgkgKiBDaGVja3MgdGhlIGV4aXN0ZW5jZSBvZiBhIHBhcnRpY3VsYXIgbG9jYXRpb24gaW4gdGhlIHJlZ2lzdHJ5IHVzaW5nIG11bHRpcGxlIGtleXMuDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nIC4uLiRrZXlzIFRoZSBrZXlzIHRvIGRldGVybWluZSB0aGUgbG9jYXRpb24uDQoJICoNCgkgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgYW55IG9mIHRoZSBrZXlzIGFyZSBub3QgYSBudW1iZXIgb3Igc3RyaW5nLg0KCSAqIEByZXR1cm4gYm9vbCBUcnVlIGlmIHRoZSBsb2NhdGlvbiBleGlzdHMsIGZhbHNlIG90aGVyd2lzZS4NCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZXhpc3RzQWN0aXZlKHN0cmluZyAuLi4ka2V5cyk6IGJvb2w7', '{}', '{}', '', 1, '2023-09-08 16:12:43', 18, 0, 1), (489, '7e822c03-1b20-41d1-9427-f5b8d5836af7', 'VDM.Abstraction.Registry', 'Registry', 'abstract class', 'VDM Basic Registry.\r\n\r\nDon\'t use this beyond 10 dimensional depth for best performance.\r\n\r\n@since 3.2.0\r\n@since 5.0.4 Joomla Registry Compatible', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', '43134867-5cb8-4280-9be8-309fd2fd135f', '', '', '', '{\"0\":\"64e291c2-11f1-423d-a44d-837cc12cc017\",\"1\":\"-1\"}', ' \\JsonSerializable, \\ArrayAccess, \\IteratorAggregate, \\Countable', '[[[NamespacePrefix]]]\\Joomla\\Abstraction.Registry', 1, '{}', '{}', 'dXNlIEpvb21sYVxSZWdpc3RyeVxGYWN0b3J5IGFzIEZvcm1hdEZhY3Rvcnk7', '{}', 'CS8qKg0KCSAqIFBhdGggc2VwYXJhdG9yDQoJICoNCgkgKiBAdmFyICAgIHN0cmluZ3xudWxsDQoJICogQHNpbmNlICAzLjIuMA0KCSAqLw0KCXByb3RlY3RlZCA/c3RyaW5nICRzZXBhcmF0b3IgPSAnLic7DQoNCgkvKioNCgkgKiBUaGUgbmFtZSBvZiB0aGUgcmVnaXN0cnkuDQoJICoNCgkgKiBAdmFyICAgc3RyaW5nfG51bGwNCgkgKiBAc2luY2UgNS4wLjQNCgkgKi8NCglwcm90ZWN0ZWQgP3N0cmluZyAkbmFtZSA9IG51bGw7DQoNCgkvKioNCgkgKiBDb25zdHJ1Y3Rvci4NCgkgKg0KCSAqIEluaXRpYWxpemVzIHRoZSBSZWdpc3RyeSBvYmplY3Qgd2l0aCBvcHRpb25hbCBkYXRhLg0KCSAqDQoJICogQHBhcmFtICBtaXhlZCAgICAgICAgJGRhdGEgICAgICBPcHRpb25hbCBkYXRhIHRvIGxvYWQgaW50byB0aGUgcmVnaXN0cnkuDQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgYW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0Lg0KCSAqIEBwYXJhbSAgc3RyaW5nfG51bGwgICRzZXBhcmF0b3IgVGhlIHBhdGggc2VwYXJhdG9yLCBhbmQgZW1wdHkgc3RyaW5nIHdpbGwgZmxhdHRlbiB0aGUgcmVnaXN0cnkuDQoJICogQHNpbmNlICA1LjAuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZGF0YSA9IG51bGwsID9zdHJpbmcgJHNlcGFyYXRvciA9IG51bGwpDQoJew0KCQkvLyB3ZSBkb24ndCBhbGxvdyBudWxsIG9uIGluaXRpYWxpemF0aW9uIChkZWZhdWx0IGlzIGEgZG90KQ0KCQkvLyBzbyB0aGF0IGFsbCBjbGFzcyBpbmhlcml0YW5jZSBjYW4gb3ZlcnJpZGUgdGhlIHNlcGFyYXRvciBwcm9wZXJ0eQ0KCQkvLyB1c2UgYW4gZW1wdHkgc3RyaW5nIGlmIHlvdSB3YW50IHRvIGZsYXR0ZW4gdGhlIHJlZ2lzdHJ5DQoJCWlmICgkc2VwYXJhdG9yICE9PSBudWxsKQ0KCQl7DQoJCQkkdGhpcy0+c2V0U2VwYXJhdG9yKCRzZXBhcmF0b3IpOw0KCQl9DQoNCgkJaWYgKCRkYXRhICE9PSBudWxsKQ0KCQl7DQoJCQlpZiAoaXNfYXJyYXkoJGRhdGEpKQ0KCQkJew0KCQkJCSR0aGlzLT5sb2FkQXJyYXkoJGRhdGEpOw0KCQkJfQ0KCQkJZWxzZWlmIChpc19zdHJpbmcoJGRhdGEpKQ0KCQkJew0KCQkJCSR0aGlzLT5sb2FkU3RyaW5nKCRkYXRhKTsNCgkJCX0NCgkJCWVsc2VpZiAoaXNfb2JqZWN0KCRkYXRhKSkNCgkJCXsNCgkJCQkkdGhpcy0+bG9hZE9iamVjdCgkZGF0YSk7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBNYWdpYyBtZXRob2QgdG8gZ2V0IGEgdmFsdWUgZnJvbSB0aGUgcmVnaXN0cnkuDQoJICoNCgkgKiBBbGxvd3MgZm9yIGFjY2Vzc2luZyByZWdpc3RyeSBkYXRhIHVzaW5nIG9iamVjdCBwcm9wZXJ0eSBzeW50YXguDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuDQoJICoNCgkgKiBAcmV0dXJuIG1peGVkIFRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHksIG9yIG51bGwgaWYgbm90IGZvdW5kLg0KCSAqIEBzaW5jZSAgNS4wLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gX19nZXQoJG5hbWUpDQoJew0KCQlyZXR1cm4gJHRoaXMtPmdldCgkbmFtZSk7DQoJfQ0KDQoJLyoqDQoJICogTWFnaWMgbWV0aG9kIHRvIHNldCBhIHZhbHVlIGluIHRoZSByZWdpc3RyeS4NCgkgKg0KCSAqIEFsbG93cyBmb3Igc2V0dGluZyByZWdpc3RyeSBkYXRhIHVzaW5nIG9iamVjdCBwcm9wZXJ0eSBzeW50YXguDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRuYW1lICBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0Lg0KCSAqIEBwYXJhbSBtaXhlZCAgJHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuDQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKiBAc2luY2UgIDUuMC40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIF9fc2V0KCRuYW1lLCAkdmFsdWUpDQoJew0KCQkkdGhpcy0+c2V0KCRuYW1lLCAkdmFsdWUpOw0KCX0NCg0KCS8qKg0KCSAqIE1hZ2ljIG1ldGhvZCB0byBjaGVjayBpZiBhIHByb3BlcnR5IGlzIHNldCBpbiB0aGUgcmVnaXN0cnkuDQoJICoNCgkgKiBBbGxvd3MgZm9yIHVzaW5nIGlzc2V0KCkgb24gcmVnaXN0cnkgcHJvcGVydGllcy4NCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGNoZWNrLg0KCSAqDQoJICogQHJldHVybiBib29sIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLg0KCSAqIEBzaW5jZSAgNS4wLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gX19pc3NldCgkbmFtZSkNCgl7DQoJCXJldHVybiAkdGhpcy0+ZXhpc3RzKCRuYW1lKTsNCgl9DQoNCgkvKioNCgkgKiBNYWdpYyBtZXRob2QgdG8gdW5zZXQgYSBwcm9wZXJ0eSBpbiB0aGUgcmVnaXN0cnkuDQoJICoNCgkgKiBBbGxvd3MgZm9yIHVzaW5nIHVuc2V0KCkgb24gcmVnaXN0cnkgcHJvcGVydGllcy4NCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHVuc2V0Lg0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlICA1LjAuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBfX3Vuc2V0KCRuYW1lKQ0KCXsNCgkJJHRoaXMtPnJlbW92ZSgkbmFtZSk7DQoJfQ0KDQoJLyoqDQoJICogTWFnaWMgbWV0aG9kIHRvIGNsb25lIHRoZSByZWdpc3RyeS4NCgkgKg0KCSAqIFBlcmZvcm1zIGEgZGVlcCBjb3B5IG9mIHRoZSByZWdpc3RyeSBkYXRhLg0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlICA1LjAuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBfX2Nsb25lKCkNCgl7DQoJCSR0aGlzLT5hY3RpdmUgPSB1bnNlcmlhbGl6ZShzZXJpYWxpemUoJHRoaXMtPmFjdGl2ZSkpOw0KCX0NCg0KCS8qKg0KCSAqIE1hZ2ljIG1ldGhvZCB0byBjb252ZXJ0IHRoZSByZWdpc3RyeSB0byBhIHN0cmluZy4NCgkgKg0KCSAqIFJldHVybnMgdGhlIHJlZ2lzdHJ5IGRhdGEgaW4gSlNPTiBmb3JtYXQuDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZyBUaGUgcmVnaXN0cnkgZGF0YSBpbiBKU09OIGZvcm1hdC4NCgkgKiBAc2luY2UgIDUuMC40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQ0KCXsNCgkJcmV0dXJuICR0aGlzLT50b1N0cmluZygpOw0KCX0NCg0KCS8qKg0KCSAqIExvYWRzIGRhdGEgaW50byB0aGUgcmVnaXN0cnkgZnJvbSBhIHN0cmluZyB1c2luZyBKb29tbGEncyBmb3JtYXQgY2xhc3Nlcy4NCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgICRkYXRhICAgICBUaGUgZGF0YSBzdHJpbmcgdG8gbG9hZC4NCgkgKiBAcGFyYW0gc3RyaW5nICAkZm9ybWF0ICAgVGhlIGZvcm1hdCBvZiB0aGUgZGF0YSBzdHJpbmcuIFN1cHBvcnRlZCBmb3JtYXRzOiAnanNvbicsICdpbmknLCAneG1sJywgJ3BocCcuDQoJICogQHBhcmFtICBhcnJheSAgJG9wdGlvbnMgIE9wdGlvbnMgdXNlZCBieSB0aGUgZm9ybWF0dGVyDQoJICoNCgkgKiBAcmV0dXJuIHNlbGYNCgkgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgdGhlIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLg0KCSAqIEBzaW5jZSAgNS4wLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gbG9hZFN0cmluZyhzdHJpbmcgJGRhdGEsIHN0cmluZyAkZm9ybWF0ID0gJ0pTT04nLCBhcnJheSAkb3B0aW9ucyA9IFtdKTogc2VsZg0KCXsNCgkJLy8gTG9hZCBhIHN0cmluZyBpbnRvIHRoZSBnaXZlbiBuYW1lc3BhY2UgW29yIGRlZmF1bHQgbmFtZXNwYWNlIGlmIG5vdCBnaXZlbl0NCgkJJG9iamVjdCA9IEZvcm1hdEZhY3Rvcnk6OmdldEZvcm1hdCgkZm9ybWF0LCAkb3B0aW9ucyktPnN0cmluZ1RvT2JqZWN0KCRkYXRhLCAkb3B0aW9ucyk7DQoNCgkJLy8gTWVyZ2UgdGhlIG9iamVjdCBpbnRvIHRoZSByZWdpc3RyeQ0KCQkkdGhpcy0+bG9hZE9iamVjdCgkb2JqZWN0KTsNCg0KCQlyZXR1cm4gJHRoaXM7DQoJfQ0KDQoJLyoqDQoJICogTG9hZHMgZGF0YSBpbnRvIHRoZSByZWdpc3RyeSBmcm9tIGFuIG9iamVjdC4NCgkgKg0KCSAqIEBwYXJhbSBvYmplY3QgICRvYmplY3QgIFRoZSBkYXRhIG9iamVjdCB0byBsb2FkLg0KCSAqDQoJICogQHJldHVybiBzZWxmDQoJICogQHNpbmNlICA1LjAuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBsb2FkT2JqZWN0KG9iamVjdCAkb2JqZWN0KTogc2VsZg0KCXsNCgkJLy8gQ29udmVydCB0aGUgb2JqZWN0IHRvIGFuIGFycmF5DQoJCSRhcnJheSA9ICR0aGlzLT5vYmplY3RUb0FycmF5KCRvYmplY3QpOw0KDQoJCS8vIE1lcmdlIHRoZSBhcnJheSBpbnRvIHRoZSByZWdpc3RyeQ0KCQkkdGhpcy0+bG9hZEFycmF5KCRhcnJheSk7DQoNCgkJcmV0dXJuICR0aGlzOw0KCX0NCg0KCS8qKg0KCSAqIExvYWRzIGRhdGEgaW50byB0aGUgcmVnaXN0cnkgZnJvbSBhbiBhcnJheS4NCgkgKg0KCSAqIFRoZSBsb2FkZWQgZGF0YSB3aWxsIGJlIG1lcmdlZCBpbnRvIHRoZSByZWdpc3RyeSdzIGV4aXN0aW5nIGRhdGEuDQoJICoNCgkgKiBAcGFyYW0gYXJyYXkgJGFycmF5IFRoZSBhcnJheSBvZiBkYXRhIHRvIGxvYWQgaW50byB0aGUgcmVnaXN0cnkuDQoJICoNCgkgKiBAcmV0dXJuIHNlbGYNCgkgKiBAc2luY2UgIDUuMC40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGxvYWRBcnJheShhcnJheSAkYXJyYXkpOiBzZWxmDQoJew0KCQkkdGhpcy0+YWN0aXZlID0gJHRoaXMtPmFycmF5TWVyZ2VSZWN1cnNpdmUoJHRoaXMtPmFjdGl2ZSwgJGFycmF5KTsNCgkJcmV0dXJuICR0aGlzOw0KCX0NCg0KCS8qKg0KCSAqIExvYWRzIGRhdGEgaW50byB0aGUgcmVnaXN0cnkgZnJvbSBhIGZpbGUuDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRwYXRoICAgVGhlIHBhdGggdG8gdGhlIGZpbGUgdG8gbG9hZC4NCgkgKiBAcGFyYW0gc3RyaW5nICRmb3JtYXQgVGhlIGZvcm1hdCBvZiB0aGUgZmlsZS4gU3VwcG9ydGVkIGZvcm1hdHM6ICdqc29uJywgJ2luaScsICd4bWwnLCAncGhwJy4NCgkgKg0KCSAqIEByZXR1cm4gc2VsZg0KCSAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgcmVhZGFibGUuDQoJICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBJZiB0aGUgZmlsZSBjYW5ub3QgYmUgcmVhZC4NCgkgKiBAc2luY2UgIDUuMC40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGxvYWRGaWxlKHN0cmluZyAkcGF0aCwgc3RyaW5nICRmb3JtYXQgPSAnanNvbicpOiBzZWxmDQoJew0KCQlpZiAoIWZpbGVfZXhpc3RzKCRwYXRoKSB8fCAhaXNfcmVhZGFibGUoJHBhdGgpKQ0KCQl7DQoJCQl0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiRmlsZSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgcmVhZGFibGU6IHskcGF0aH0iKTsNCgkJfQ0KDQoJCSRkYXRhID0gZmlsZV9nZXRfY29udGVudHMoJHBhdGgpOw0KDQoJCWlmICgkZGF0YSA9PT0gZmFsc2UpDQoJCXsNCgkJCXRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiRmFpbGVkIHRvIHJlYWQgZmlsZTogeyRwYXRofSIpOw0KCQl9DQoNCgkJJHRoaXMtPmxvYWRTdHJpbmcoJGRhdGEsICRmb3JtYXQpOw0KDQoJCXJldHVybiAkdGhpczsNCgl9DQoNCgkvKioNCgkgKiBTZXRzIGEgdmFsdWUgaW50byB0aGUgcmVnaXN0cnkgdXNpbmcgbXVsdGlwbGUga2V5cy4NCgkgKg0KCSAqIEBwYXJhbSAgc3RyaW5nICAkcGF0aCAgICAgIFJlZ2lzdHJ5IHBhdGggKGUuZy4gdmRtLmNvbnRlbnQuYnVpbGRlcikNCgkgKiBAcGFyYW0gIG1peGVkICAgJHZhbHVlICAgICBWYWx1ZSBvZiBlbnRyeQ0KCSAqDQoJICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIGFueSBvZiB0aGUgcGF0aCB2YWx1ZXMgYXJlIG5vdCBhIG51bWJlciBvciBzdHJpbmcuDQoJICogQHJldHVybiBzZWxmDQoJICogQHNpbmNlICAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBzZXQoc3RyaW5nICRwYXRoLCAkdmFsdWUpOiBzZWxmDQoJew0KCQlpZiAoKCRrZXlzID0gJHRoaXMtPmdldEFjdGl2ZUtleXMoJHBhdGgpKSA9PT0gbnVsbCkNCgkJew0KCQkJdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIlBhdGggbXVzdCBvbmx5IGJlIHN0cmluZ3Mgb3IgbnVtYmVycyB0byBzZXQgYW55IHZhbHVlLiIpOw0KCQl9DQoNCgkJJHRoaXMtPnNldEFjdGl2ZSgkdmFsdWUsIC4uLiRrZXlzKTsNCg0KCQlyZXR1cm4gJHRoaXM7DQoJfQ0KDQoJLyoqDQoJICogQWRkcyBjb250ZW50IGludG8gdGhlIHJlZ2lzdHJ5LiBJZiBhIGtleSBleGlzdHMsDQoJICogaXQgZWl0aGVyIGFwcGVuZHMgb3IgY29uY2F0ZW5hdGVzIGJhc2VkIG9uICRhc0FycmF5IHN3aXRjaC4NCgkgKg0KCSAqIEBwYXJhbSAgc3RyaW5nICAgICAgJHBhdGggICAgICBSZWdpc3RyeSBwYXRoIChlLmcuIHZkbS5jb250ZW50LmJ1aWxkZXIpDQoJICogQHBhcmFtICBtaXhlZCAgICAgICAkdmFsdWUgICAgIFZhbHVlIG9mIGVudHJ5DQoJICogQHBhcmFtICBib29sfG51bGwgICAkYXNBcnJheSAgIERldGVybWluZXMgaWYgdGhlIG5ldyB2YWx1ZSBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBhcnJheS4NCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBpcyAkYWRkQXNBcnJheSA9IGZhbHNlIChpZiBudWxsKSBpbiBiYXNlIGNsYXNzLg0KCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdmVycmlkZSBpbiBjaGlsZCBjbGFzcyBhbGxvd2VkIHNldCBjbGFzcyBwcm9wZXJ0eSAkYWRkQXNBcnJheSA9IHRydWUuDQoJICoNCgkgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgYW55IG9mIHRoZSBwYXRoIHZhbHVlcyBhcmUgbm90IGEgbnVtYmVyIG9yIHN0cmluZy4NCgkgKiBAcmV0dXJuIHNlbGYNCgkgKiBAc2luY2UgIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGFkZChzdHJpbmcgJHBhdGgsICR2YWx1ZSwgP2Jvb2wgJGFzQXJyYXkgPSBudWxsKTogc2VsZg0KCXsNCgkJaWYgKCgka2V5cyA9ICR0aGlzLT5nZXRBY3RpdmVLZXlzKCRwYXRoKSkgPT09IG51bGwpDQoJCXsNCgkJCXRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJQYXRoIG11c3Qgb25seSBiZSBzdHJpbmdzIG9yIG51bWJlcnMgdG8gYWRkIGFueSB2YWx1ZS4iKTsNCgkJfQ0KDQoJCSR0aGlzLT5hZGRBY3RpdmUoJHZhbHVlLCAkYXNBcnJheSwgLi4uJGtleXMpOw0KDQoJCXJldHVybiAkdGhpczsNCgl9DQoNCgkvKioNCgkgKiBSZXRyaWV2ZXMgYSB2YWx1ZSAob3Igc3ViLWFycmF5KSBmcm9tIHRoZSByZWdpc3RyeSB1c2luZyBtdWx0aXBsZSBrZXlzLg0KCSAqDQoJICogQHBhcmFtICBzdHJpbmcgICRwYXRoICAgICBSZWdpc3RyeSBwYXRoIChlLmcuIHZkbS5jb250ZW50LmJ1aWxkZXIpDQoJICogQHBhcmFtICBtaXhlZCAgICRkZWZhdWx0ICBPcHRpb25hbCBkZWZhdWx0IHZhbHVlLCByZXR1cm5lZCBpZiB0aGUgaW50ZXJuYWwgZG9lc24ndCBleGlzdC4NCgkgKg0KCSAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiBhbnkgb2YgdGhlIHBhdGggdmFsdWVzIGFyZSBub3QgYSBudW1iZXIgb3Igc3RyaW5nLg0KCSAqIEByZXR1cm4gbWl4ZWQgVGhlIHZhbHVlIG9yIHN1Yi1hcnJheSBmcm9tIHRoZSBzdG9yYWdlLiBOdWxsIGlmIHRoZSBsb2NhdGlvbiBkb2Vzbid0IGV4aXN0Lg0KCSAqIEBzaW5jZSAgMy4yLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0KHN0cmluZyAkcGF0aCwgJGRlZmF1bHQgPSBudWxsKTogbWl4ZWQNCgl7DQoJCWlmICgoJGtleXMgPSAkdGhpcy0+Z2V0QWN0aXZlS2V5cygkcGF0aCkpID09PSBudWxsKQ0KCQl7DQoJCQl0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiUGF0aCBtdXN0IG9ubHkgYmUgc3RyaW5ncyBvciBudW1iZXJzIHRvIGdldCBhbnkgdmFsdWUuIik7DQoJCX0NCg0KCQlyZXR1cm4gJHRoaXMtPmdldEFjdGl2ZSgkZGVmYXVsdCwgLi4uJGtleXMpOw0KCX0NCg0KCS8qKg0KCSAqIFJlbW92ZXMgYSB2YWx1ZSAob3Igc3ViLWFycmF5KSBmcm9tIHRoZSByZWdpc3RyeSB1c2luZyBtdWx0aXBsZSBrZXlzLg0KCSAqDQoJICogQHBhcmFtICBzdHJpbmcgICRwYXRoICBSZWdpc3RyeSBwYXRoIChlLmcuIHZkbS5jb250ZW50LmJ1aWxkZXIpDQoJICoNCgkgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgYW55IG9mIHRoZSBwYXRoIHZhbHVlcyBhcmUgbm90IGEgbnVtYmVyIG9yIHN0cmluZy4NCgkgKiBAcmV0dXJuIHNlbGYNCgkgKiBAc2luY2UgIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHJlbW92ZShzdHJpbmcgJHBhdGgpOiBzZWxmDQoJew0KCQlpZiAoKCRrZXlzID0gJHRoaXMtPmdldEFjdGl2ZUtleXMoJHBhdGgpKSA9PT0gbnVsbCkNCgkJew0KCQkJdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIlBhdGggbXVzdCBvbmx5IGJlIHN0cmluZ3Mgb3IgbnVtYmVycyB0byByZW1vdmUgYW55IHZhbHVlLiIpOw0KCQl9DQoNCgkJJHRoaXMtPnJlbW92ZUFjdGl2ZSguLi4ka2V5cyk7DQoNCgkJcmV0dXJuICR0aGlzOw0KCX0NCg0KCS8qKg0KCSAqIENoZWNrcyB0aGUgZXhpc3RlbmNlIG9mIGEgcGFydGljdWxhciBsb2NhdGlvbiBpbiB0aGUgcmVnaXN0cnkgdXNpbmcgbXVsdGlwbGUga2V5cy4NCgkgKg0KCSAqIEBwYXJhbSAgc3RyaW5nICAkcGF0aCAgUmVnaXN0cnkgcGF0aCAoZS5nLiB2ZG0uY29udGVudC5idWlsZGVyKQ0KCSAqDQoJICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIGFueSBvZiB0aGUgcGF0aCB2YWx1ZXMgYXJlIG5vdCBhIG51bWJlciBvciBzdHJpbmcuDQoJICogQHJldHVybiBib29sIFRydWUgaWYgdGhlIGxvY2F0aW9uIGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlLg0KCSAqIEBzaW5jZSAgMy4yLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZXhpc3RzKHN0cmluZyAkcGF0aCk6IGJvb2wNCgl7DQoJCWlmICgoJGtleXMgPSAkdGhpcy0+Z2V0QWN0aXZlS2V5cygkcGF0aCkpID09PSBudWxsKQ0KCQl7DQoJCQl0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiUGF0aCBtdXN0IG9ubHkgYmUgc3RyaW5ncyBvciBudW1iZXJzIHRvIGNoZWNrIGlmIGFueSB2YWx1ZSBleGlzdC4iKTsNCgkJfQ0KDQoJCXJldHVybiAkdGhpcy0+ZXhpc3RzQWN0aXZlKC4uLiRrZXlzKTsNCgl9DQoNCgkvKioNCgkgKiBTcGVjaWZ5IGRhdGEgd2hpY2ggc2hvdWxkIGJlIHNlcmlhbGl6ZWQgdG8gSlNPTi4NCgkgKg0KCSAqIEByZXR1cm4gbWl4ZWQgRGF0YSB3aGljaCBjYW4gYmUgc2VyaWFsaXplZCBieSBqc29uX2VuY29kZSgpLA0KCSAqICAgICAgICAgICAgICAgICB3aGljaCBpcyBhIHZhbHVlIG9mIGFueSB0eXBlIG90aGVyIHRoYW4gYSByZXNvdXJjZS4NCgkgKiBAc2luY2UgIDUuMC40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogbWl4ZWQNCgl7DQoJCXJldHVybiAkdGhpcy0+YWN0aXZlOw0KCX0NCg0KCS8qKg0KCSAqIENvdW50IGVsZW1lbnRzIG9mIHRoZSByZWdpc3RyeS4NCgkgKg0KCSAqIEByZXR1cm4gaW50IFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHJlZ2lzdHJ5Lg0KCSAqIEBzaW5jZSAgNS4wLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50DQoJew0KCQlyZXR1cm4gY291bnQoJHRoaXMtPmFjdGl2ZSk7DQoJfQ0KDQoJLyoqDQoJICogV2hldGhlciBhIGdpdmVuIG9mZnNldCBleGlzdHMgaW4gdGhlIHJlZ2lzdHJ5Lg0KCSAqDQoJICogQHBhcmFtIG1peGVkICRvZmZzZXQgQW4gb2Zmc2V0IHRvIGNoZWNrIGZvci4NCgkgKg0KCSAqIEByZXR1cm4gYm9vbCBUcnVlIGlmIHRoZSBvZmZzZXQgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuDQoJICogQHNpbmNlICA1LjAuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMobWl4ZWQgJG9mZnNldCk6IGJvb2wNCgl7DQoJCWlmICghaXNfc3RyaW5nKCRvZmZzZXQpKQ0KCQl7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJcmV0dXJuICR0aGlzLT5leGlzdHMoJG9mZnNldCk7DQoJfQ0KDQoJLyoqDQoJICogUmV0cmlldmUgdGhlIHZhbHVlIGF0IGEgZ2l2ZW4gb2Zmc2V0Lg0KCSAqDQoJICogQHBhcmFtIG1peGVkICRvZmZzZXQgVGhlIG9mZnNldCB0byByZXRyaWV2ZS4NCgkgKg0KCSAqIEByZXR1cm4gbWl4ZWQgVGhlIHZhbHVlIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0Lg0KCSAqIEBzaW5jZSAgNS4wLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0R2V0KG1peGVkICRvZmZzZXQpOiBtaXhlZA0KCXsNCgkJaWYgKCFpc19zdHJpbmcoJG9mZnNldCkpDQoJCXsNCgkJCXJldHVybiBudWxsOw0KCQl9DQoJCXJldHVybiAkdGhpcy0+Z2V0KCRvZmZzZXQpOw0KCX0NCg0KCS8qKg0KCSAqIFNldCB0aGUgdmFsdWUgYXQgYSBnaXZlbiBvZmZzZXQuDQoJICoNCgkgKiBAcGFyYW0gbWl4ZWQgJG9mZnNldCBUaGUgb2Zmc2V0IHRvIGFzc2lnbiB0aGUgdmFsdWUgdG8uDQoJICogQHBhcmFtIG1peGVkICR2YWx1ZSAgVGhlIHZhbHVlIHRvIHNldC4NCgkgKg0KCSAqIEByZXR1cm4gdm9pZA0KCSAqIEBzaW5jZSAgNS4wLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0U2V0KG1peGVkICRvZmZzZXQsIG1peGVkICR2YWx1ZSk6IHZvaWQNCgl7DQoJCWlmICghaXNfc3RyaW5nKCRvZmZzZXQpKQ0KCQl7DQoJCQlyZXR1cm47DQoJCX0NCgkJJHRoaXMtPnNldCgkb2Zmc2V0LCAkdmFsdWUpOw0KCX0NCg0KCS8qKg0KCSAqIFVuc2V0IHRoZSB2YWx1ZSBhdCBhIGdpdmVuIG9mZnNldC4NCgkgKg0KCSAqIEBwYXJhbSBtaXhlZCAkb2Zmc2V0IFRoZSBvZmZzZXQgdG8gdW5zZXQuDQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKiBAc2luY2UgIDUuMC40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9mZnNldFVuc2V0KG1peGVkICRvZmZzZXQpOiB2b2lkDQoJew0KCQlpZiAoIWlzX3N0cmluZygkb2Zmc2V0KSkNCgkJew0KCQkJcmV0dXJuOw0KCQl9DQoJCSR0aGlzLT5yZW1vdmUoJG9mZnNldCk7DQoJfQ0KDQoJLyoqDQoJICogUmV0cmlldmUgYW4gZXh0ZXJuYWwgaXRlcmF0b3IgZm9yIHRoZSByZWdpc3RyeS4NCgkgKg0KCSAqIEByZXR1cm4gXFRyYXZlcnNhYmxlIEFuIGluc3RhbmNlIG9mIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgSXRlcmF0b3Igb3IgVHJhdmVyc2FibGUuDQoJICogQHNpbmNlICA1LjAuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpOiBcVHJhdmVyc2FibGUNCgl7DQoJCXJldHVybiBuZXcgXEFycmF5SXRlcmF0b3IoJHRoaXMtPmFjdGl2ZSk7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSByZWdpc3RyeSBkYXRhIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5Lg0KCSAqDQoJICogQHJldHVybiBhcnJheSBUaGUgcmVnaXN0cnkgZGF0YS4NCgkgKiBAc2luY2UgIDUuMC40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHRvQXJyYXkoKTogYXJyYXkNCgl7DQoJCXJldHVybiAkdGhpcy0+YWN0aXZlOw0KCX0NCg0KCS8qKg0KCSAqIEdldCB0aGUgcmVnaXN0cnkgZGF0YSBhcyBhbiBvYmplY3QuDQoJICoNCgkgKiBAcmV0dXJuIG9iamVjdCBUaGUgcmVnaXN0cnkgZGF0YSBjb252ZXJ0ZWQgdG8gYW4gb2JqZWN0Lg0KCSAqIEBzaW5jZSAgNS4wLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gdG9PYmplY3QoKQ0KCXsNCgkJcmV0dXJuICR0aGlzLT5hcnJheVRvT2JqZWN0KCR0aGlzLT5hY3RpdmUpOw0KCX0NCg0KCS8qKg0KCSAqIENvbnZlcnRzIHRoZSByZWdpc3RyeSBkYXRhIHRvIGEgc3RyaW5nIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0Lg0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAkZm9ybWF0ICBUaGUgZm9ybWF0IHRvIG91dHB1dCB0aGUgc3RyaW5nIGluLiBTdXBwb3J0ZWQgZm9ybWF0czogJ2pzb24nLCAnaW5pJywgJ3htbCcsICdwaHAnLg0KCSAqIEBwYXJhbSBhcnJheSAgJG9wdGlvbnMgT3B0aW9ucyB1c2VkIGJ5IHRoZSBmb3JtYXR0ZXIuDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZyBUaGUgcmVnaXN0cnkgZGF0YSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdC4NCgkgKg0KCSAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuDQoJICogQHNpbmNlICA1LjAuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB0b1N0cmluZyhzdHJpbmcgJGZvcm1hdCA9ICdKU09OJywgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IHN0cmluZw0KCXsNCgkJLy8gQ29udmVydCB0aGUgaW50ZXJuYWwgYXJyYXkgdG8gYW4gb2JqZWN0DQoJCSRvYmplY3QgPSAkdGhpcy0+YXJyYXlUb09iamVjdCgkdGhpcy0+YWN0aXZlKTsNCg0KCQlyZXR1cm4gRm9ybWF0RmFjdG9yeTo6Z2V0Rm9ybWF0KCRmb3JtYXQsICRvcHRpb25zKS0+b2JqZWN0VG9TdHJpbmcoJG9iamVjdCwgJG9wdGlvbnMpOw0KCX0NCg0KCS8qKg0KCSAqIEZsYXR0ZW5zIHRoZSByZWdpc3RyeSBkYXRhIGludG8gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkuDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHNlcGFyYXRvciAgVGhlIHNlcGFyYXRvciBmb3IgdGhlIGtleSBuYW1lcy4NCgkgKiBAcGFyYW0gYm9vbCAgICAgICAgJGZ1bGwgICAgICAgVHJ1ZSB0byBpbmNsdWRlIHRoZSBmdWxsIHBhdGggYXMga2V5cy4NCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkgVGhlIGZsYXR0ZW5lZCBkYXRhIGFycmF5Lg0KCSAqIEBzaW5jZSA1LjAuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBmbGF0dGVuKD9zdHJpbmcgJHNlcGFyYXRvciA9IG51bGwsIGJvb2wgJGZ1bGwgPSBmYWxzZSk6IGFycmF5DQoJew0KCQkvLyB3ZSB1c2UgZGVmYXVsdCBzZXBhcmF0b3INCgkJaWYgKCRzZXBhcmF0b3IgPT09IG51bGwpDQoJCXsNCgkJCSRzZXBhcmF0b3IgPSAkdGhpcy0+c2VwYXJhdG9yOw0KCQl9DQoNCgkJcmV0dXJuICR0aGlzLT5mbGF0dGVuQXJyYXkoJHRoaXMtPmFjdGl2ZSwgJHNlcGFyYXRvciwgJGZ1bGwpOw0KCX0NCg0KCS8qKg0KCSAqIFNldHMgYSBkZWZhdWx0IHZhbHVlIGlmIG5vdCBhbHJlYWR5IHNldC4NCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJHBhdGggVGhlIHJlZ2lzdHJ5IHBhdGggKGUuZy4sICd2ZG0uY29udGVudC5idWlsZGVyJykuDQoJICogQHBhcmFtIG1peGVkICAkZGVmYXVsdCBUaGUgZGVmYXVsdCB2YWx1ZSB0byBzZXQgaWYgdGhlIHBhdGggZG9lcyBub3QgZXhpc3QuDQoJICoNCgkgKiBAcmV0dXJuIG1peGVkIFRoZSB2YWx1ZSBvZiB0aGUgcGF0aCBhZnRlciB0aGUgbWV0aG9kIGNhbGwuDQoJICogQHNpbmNlICA1LjAuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBkZWYoc3RyaW5nICRwYXRoLCAkZGVmYXVsdCkNCgl7DQoJCWlmICghJHRoaXMtPmV4aXN0cygkcGF0aCkpDQoJCXsNCgkJCSR0aGlzLT5zZXQoJHBhdGgsICRkZWZhdWx0KTsNCgkJCXJldHVybiAkZGVmYXVsdDsNCgkJfQ0KCQlyZXR1cm4gJHRoaXMtPmdldCgkcGF0aCk7DQoJfQ0KDQoJLyoqDQoJICogTWVyZ2VzIGFub3RoZXIgcmVnaXN0cnkgaW50byB0aGlzIG9uZS4NCgkgKg0KCSAqIFRoZSBkYXRhIGZyb20gdGhlIHNvdXJjZSByZWdpc3RyeSB3aWxsIGJlIG1lcmdlZCBpbnRvIHRoaXMgcmVnaXN0cnksDQoJICogb3ZlcndyaXRpbmcgYW55IGV4aXN0aW5nIHZhbHVlcyB3aXRoIHRoZSBzYW1lIGtleXMuDQoJICoNCgkgKiBAcGFyYW0gUmVnaXN0cnlpbnRlcmZhY2UgJHNvdXJjZSBUaGUgcmVnaXN0cnkgdG8gbWVyZ2Ugd2l0aCB0aGlzIG9uZS4NCgkgKg0KCSAqIEByZXR1cm4gc2VsZg0KCSAqIEBzaW5jZSAgNS4wLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gbWVyZ2UoUmVnaXN0cnlpbnRlcmZhY2UgJHNvdXJjZSk6IHNlbGYNCgl7DQoJCSR0aGlzLT5hY3RpdmUgPSAkdGhpcy0+YXJyYXlNZXJnZVJlY3Vyc2l2ZSgkdGhpcy0+YWN0aXZlLCAkc291cmNlLT50b0FycmF5KCkpOw0KCQlyZXR1cm4gJHRoaXM7DQoJfQ0KDQoJLyoqDQoJICogQ2xlYXJzIGFsbCBkYXRhIGZyb20gdGhlIHJlZ2lzdHJ5Lg0KCSAqDQoJICogQHJldHVybiBzZWxmDQoJICogQHNpbmNlICA1LjAuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBjbGVhcigpOiBzZWxmDQoJew0KCQkkdGhpcy0+YWN0aXZlID0gW107DQoJCXJldHVybiAkdGhpczsNCgl9DQoNCgkvKioNCgkgKiBFeHRyYWN0cyBhIHN1YnNldCBvZiB0aGUgcmVnaXN0cnkgZGF0YSBiYXNlZCBvbiBhIGdpdmVuIHBhdGguDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICAgICAgJHBhdGggICAgICBUaGUgcmVnaXN0cnkgcGF0aCB0byBleHRyYWN0Lg0KCSAqIEBwYXJhbSBtaXhlZCAgICAgICAkZGVmYXVsdCAgIE9wdGlvbmFsIGRlZmF1bHQgdmFsdWUsIHJldHVybmVkIGlmIHRoZSBwYXRoIGRvZXMgbm90IGV4aXN0Lg0KCSAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkc2VwYXJhdG9yIFRoZSBwYXRoIHNlcGFyYXRvci4NCgkgKg0KCSAqIEByZXR1cm4gc2VsZiAgIEEgbmV3IFJlZ2lzdHJ5IGluc3RhbmNlIHdpdGggdGhlIGV4dHJhY3RlZCBkYXRhLg0KCSAqIEBzaW5jZSAgNS4wLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZXh0cmFjdChzdHJpbmcgJHBhdGgsICRkZWZhdWx0ID0gbnVsbCwgP3N0cmluZyAkc2VwYXJhdG9yID0gbnVsbCk6IHNlbGYNCgl7DQoJCSRvcmlnaW5hbFNlcGFyYXRvciA9ICR0aGlzLT5nZXRTZXBhcmF0b3IoKTsNCgkJaWYgKCRzZXBhcmF0b3IgIT09IG51bGwpDQoJCXsNCgkJCSR0aGlzLT5zZXRTZXBhcmF0b3IoJHNlcGFyYXRvcik7DQoJCX0NCg0KCQkkZGF0YSA9ICR0aGlzLT5nZXQoJHBhdGgsICRkZWZhdWx0KTsNCg0KCQlpZiAoJHNlcGFyYXRvciAhPT0gbnVsbCkNCgkJew0KCQkJJHRoaXMtPnNldFNlcGFyYXRvcigkb3JpZ2luYWxTZXBhcmF0b3IpOw0KCQl9DQoNCgkJJG5ld1JlZ2lzdHJ5ID0gbmV3IHN0YXRpYygpOw0KDQoJCWlmICgkZGF0YSAhPT0gJGRlZmF1bHQpDQoJCXsNCgkJCWlmIChpc19hcnJheSgkZGF0YSkpDQoJCQl7DQoJCQkJJG5ld1JlZ2lzdHJ5LT5sb2FkQXJyYXkoJGRhdGEpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRuZXdSZWdpc3RyeS0+c2V0KCd2YWx1ZScsICRkYXRhKTsNCgkJCX0NCgkJfQ0KDQoJCXJldHVybiAkbmV3UmVnaXN0cnk7DQoJfQ0KDQoJLyoqDQoJICogQXBwZW5kcyBjb250ZW50IGludG8gdGhlIHJlZ2lzdHJ5Lg0KCSAqDQoJICogSWYgYSBrZXkgZXhpc3RzLCB0aGUgdmFsdWUgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZXhpc3RpbmcgdmFsdWUuDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRwYXRoICBUaGUgcmVnaXN0cnkgcGF0aCAoZS5nLiwgJ3ZkbS5jb250ZW50LmJ1aWxkZXInKS4NCgkgKiBAcGFyYW0gbWl4ZWQgICR2YWx1ZSBUaGUgdmFsdWUgdG8gYXBwZW5kLg0KCSAqDQoJICogQHJldHVybiBzZWxmDQoJICogQHNpbmNlIDUuMC40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGFwcGVuZChzdHJpbmcgJHBhdGgsICR2YWx1ZSk6IHNlbGYNCgl7DQoJCXJldHVybiAkdGhpcy0+YWRkKCRwYXRoLCAkdmFsdWUsIGZhbHNlKTsNCgl9DQoNCgkvKioNCgkgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSByZWdpc3RyeS4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIG5hbWUgb2YgdGhlIHJlZ2lzdHJ5Lg0KCSAqIEBzaW5jZSAgNS4wLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpOiA/c3RyaW5nDQoJew0KCQlyZXR1cm4gJHRoaXMtPm5hbWU7DQoJfQ0KDQoJLyoqDQoJICogU2V0cyB0aGUgbmFtZSBvZiB0aGUgcmVnaXN0cnkuDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nfG51bGwgJG5hbWUgVGhlIG5hbWUgdG8gc2V0Lg0KCSAqDQoJICogQHJldHVybiBzZWxmDQoJICogQHNpbmNlICA1LjAuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBzZXROYW1lKD9zdHJpbmcgJG5hbWUpOiBzZWxmDQoJew0KCQkkdGhpcy0+bmFtZSA9ICRuYW1lOw0KCQlyZXR1cm4gJHRoaXM7DQoJfQ0KDQoJLyoqDQoJICogU2V0cyBhIHNlcGFyYXRvciB2YWx1ZQ0KCSAqDQoJICogQHBhcmFtIHN0cmluZ3xudWxsICAgJHZhbHVlICAgICBUaGUgdmFsdWUgdG8gc2V0Lg0KCSAqDQoJICogQHJldHVybiBzZWxmDQoJICogQHNpbmNlICAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBzZXRTZXBhcmF0b3IoP3N0cmluZyAkdmFsdWUpOiBzZWxmDQoJew0KCQkkdGhpcy0+c2VwYXJhdG9yID0gJHZhbHVlOw0KDQoJCXJldHVybiAkdGhpczsNCgl9DQoNCgkvKioNCgkgKiBHZXRzIHRoZSBjdXJyZW50IHBhdGggc2VwYXJhdG9yIHVzZWQgaW4gcmVnaXN0cnkgcGF0aHMuDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFRoZSBwYXRoIHNlcGFyYXRvci4NCgkgKiBAc2luY2UgIDUuMC40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldFNlcGFyYXRvcigpOiA/c3RyaW5nDQoJew0KCQlyZXR1cm4gJHRoaXMtPnNlcGFyYXRvcjsNCgl9DQoNCgkvKioNCgkgKiBSZWN1cnNpdmVseSBjb252ZXJ0cyBhbiBhcnJheSB0byBhbiBvYmplY3QuDQoJICoNCgkgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlIGludGVybmFsIGFycmF5IGRhdGEgaW50byBhbiBvYmplY3QNCgkgKiBzdHJ1Y3R1cmUgc3VpdGFibGUgZm9yIHNlcmlhbGl6YXRpb24gb3Igb3RoZXIgb3BlcmF0aW9ucyB0aGF0IHJlcXVpcmUgb2JqZWN0cy4NCgkgKg0KCSAqIEBwYXJhbSBtaXhlZCAkZGF0YSBUaGUgZGF0YSB0byBjb252ZXJ0Lg0KCSAqDQoJICogQHJldHVybiBtaXhlZCBUaGUgY29udmVydGVkIG9iamVjdCwgb3IgdGhlIG9yaWdpbmFsIGRhdGEgaWYgbm90IGFuIGFycmF5Lg0KCSAqIEBzaW5jZSAgNS4wLjQNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gYXJyYXlUb09iamVjdCgkZGF0YSkNCgl7DQoJCWlmIChpc19hcnJheSgkZGF0YSkpDQoJCXsNCgkJCSRvYmplY3QgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQlmb3JlYWNoICgkZGF0YSBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJCXsNCgkJCQkvLyBIYW5kbGUgbnVtZXJpYyBrZXlzIGZvciBvYmplY3QgcHJvcGVydGllcw0KCQkJCWlmIChpc19udW1lcmljKCRrZXkpKQ0KCQkJCXsNCgkJCQkJJGtleSA9ICdpdGVtJyAuICRrZXk7DQoJCQkJfQ0KCQkJCSRvYmplY3QtPnska2V5fSA9ICR0aGlzLT5hcnJheVRvT2JqZWN0KCR2YWx1ZSk7DQoJCQl9DQoJCQlyZXR1cm4gJG9iamVjdDsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCXJldHVybiAkZGF0YTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIFJlY3Vyc2l2ZWx5IGNvbnZlcnRzIGFuIG9iamVjdCB0byBhbiBhcnJheS4NCgkgKg0KCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY29udmVydCBkYXRhIGxvYWRlZCBmcm9tIGZvcm1hdHMgdGhhdCBwcm9kdWNlIG9iamVjdHMNCgkgKiAoZS5nLiwgSlNPTiwgWE1MKSBpbnRvIGFuIGFycmF5IHN0cnVjdHVyZSBmb3IgaW50ZXJuYWwgc3RvcmFnZS4NCgkgKg0KCSAqIEBwYXJhbSBtaXhlZCAkZGF0YSBUaGUgZGF0YSB0byBjb252ZXJ0Lg0KCSAqDQoJICogQHJldHVybiBtaXhlZCBUaGUgY29udmVydGVkIGFycmF5LCBvciB0aGUgb3JpZ2luYWwgZGF0YSBpZiBub3QgYW4gb2JqZWN0Lg0KCSAqIEBzaW5jZSAgNS4wLjQNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gb2JqZWN0VG9BcnJheSgkZGF0YSkNCgl7DQoJCXJldHVybiBqc29uX2RlY29kZShqc29uX2VuY29kZSgkZGF0YSksIHRydWUpOw0KCX0NCg0KCS8qKg0KCSAqIFJlY3Vyc2l2ZWx5IG1lcmdlcyB0d28gYXJyYXlzLg0KCSAqDQoJICogVGhpcyBtZXRob2QgbWVyZ2VzIHRoZSBlbGVtZW50cyBvZiB0d28gYXJyYXlzIHRvZ2V0aGVyIHNvIHRoYXQgdGhlIHZhbHVlcyBvZiBvbmUNCgkgKiBhcmUgYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgb25lLiBJdCBwcmVzZXJ2ZXMgbnVtZXJpYyBrZXlzLg0KCSAqDQoJICogQHBhcmFtIGFycmF5ICRhcnJheTEgVGhlIGFycmF5IHRvIG1lcmdlIGludG8uDQoJICogQHBhcmFtIGFycmF5ICRhcnJheTIgVGhlIGFycmF5IHRvIG1lcmdlIGZyb20uDQoJICoNCgkgKiBAcmV0dXJuIGFycmF5IFRoZSBtZXJnZWQgYXJyYXkuDQoJICogQHNpbmNlICA1LjAuNA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBhcnJheU1lcmdlUmVjdXJzaXZlKGFycmF5ICRhcnJheTEsIGFycmF5ICRhcnJheTIpOiBhcnJheQ0KCXsNCgkJZm9yZWFjaCAoJGFycmF5MiBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJew0KCQkJLy8gSWYgdGhlIHZhbHVlIGlzIGFuIGFycmF5IGFuZCB0aGUga2V5IGV4aXN0cyBpbiBib3RoIGFycmF5cywgbWVyZ2UgcmVjdXJzaXZlbHkNCgkJCWlmIChpc19hcnJheSgkdmFsdWUpICYmIGlzc2V0KCRhcnJheTFbJGtleV0pICYmIGlzX2FycmF5KCRhcnJheTFbJGtleV0pKQ0KCQkJew0KCQkJCSRhcnJheTFbJGtleV0gPSAkdGhpcy0+YXJyYXlNZXJnZVJlY3Vyc2l2ZSgkYXJyYXkxWyRrZXldLCAkdmFsdWUpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIE90aGVyd2lzZSwgcmVwbGFjZSBvciBzZXQgdGhlIHZhbHVlDQoJCQkJJGFycmF5MVska2V5XSA9ICR2YWx1ZTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJGFycmF5MTsNCgl9DQoNCgkvKioNCgkgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVjdXJzaXZlbHkgZmxhdHRlbiB0aGUgYXJyYXkuDQoJICoNCgkgKiBAcGFyYW0gYXJyYXkgICRhcnJheSAgICAgICBUaGUgYXJyYXkgdG8gZmxhdHRlbi4NCgkgKiBAcGFyYW0gc3RyaW5nICRzZXBhcmF0b3IgICBUaGUgc2VwYXJhdG9yIGZvciB0aGUga2V5IG5hbWVzLg0KCSAqIEBwYXJhbSBib29sICAgJGZ1bGwgICAgICAgIFRydWUgdG8gaW5jbHVkZSB0aGUgZnVsbCBwYXRoIGFzIGtleXMuDQoJICogQHBhcmFtIGFycmF5ICAkZmxhdHRlbmVkICAgVGhlIGZsYXR0ZW5lZCBhcnJheSAodXNlZCBpbnRlcm5hbGx5IGZvciByZWN1cnNpb24pLg0KCSAqIEBwYXJhbSBzdHJpbmcgJHBhdGggICAgICAgIFRoZSBjdXJyZW50IHBhdGggKHVzZWQgaW50ZXJuYWxseSBmb3IgcmVjdXJzaW9uKS4NCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkgVGhlIGZsYXR0ZW5lZCBhcnJheS4NCgkgKiBAc2luY2UgIDUuMC40DQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGZsYXR0ZW5BcnJheShhcnJheSAkYXJyYXksIHN0cmluZyAkc2VwYXJhdG9yLCBib29sICRmdWxsLCBhcnJheSAkZmxhdHRlbmVkID0gW10sIHN0cmluZyAkcGF0aCA9ICcnKTogYXJyYXkNCgl7DQoJCWZvcmVhY2ggKCRhcnJheSBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJew0KCQkJaWYgKCRmdWxsKQ0KCQkJew0KCQkJCSRuZXdQYXRoID0gJHBhdGggPT09ICcnID8gJGtleSA6ICRwYXRoIC4gJHNlcGFyYXRvciAuICRrZXk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJG5ld1BhdGggPSAka2V5Ow0KCQkJfQ0KDQoJCQlpZiAoaXNfYXJyYXkoJHZhbHVlKSkNCgkJCXsNCgkJCQkkZmxhdHRlbmVkID0gJHRoaXMtPmZsYXR0ZW5BcnJheSgkdmFsdWUsICRzZXBhcmF0b3IsICRmdWxsLCAkZmxhdHRlbmVkLCAkbmV3UGF0aCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJGZsYXR0ZW5lZFskbmV3UGF0aF0gPSAkdmFsdWU7DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRmbGF0dGVuZWQ7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoYXQgdGhlIGFjdGl2ZSBrZXlzIGZyb20gYSBwYXRoDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICAkcGF0aCAgIFRoZSBwYXRoIHRvIGRldGVybWluZSB0aGUgbG9jYXRpb24gcmVnaXN0cnkuDQoJICoNCgkgKiBAcmV0dXJuIGFycmF5fG51bGwgICAgICBUaGUgdmFsaWQgYXJyYXkgb2Yga2V5cw0KCSAqIEBzaW5jZSAgMy4yLjANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWN0aXZlS2V5cyhzdHJpbmcgJHBhdGgpOiA/YXJyYXkNCgl7DQoJCS8vIGVtcHR5IHBhdGggbm8gYWxsb3dlZA0KCQlpZiAoJHBhdGggPT09ICcnKQ0KCQl7DQoJCQlyZXR1cm4gbnVsbDsNCgkJfQ0KDQoJCS8vIEZsYXR0ZW4gdGhlIHBhdGgNCgkJaWYgKCR0aGlzLT5zZXBhcmF0b3IgPT09IG51bGwgfHwgJHRoaXMtPnNlcGFyYXRvciA9PT0gJycpDQoJCXsNCgkJCXJldHVybiBbJHBhdGhdOw0KCQl9DQoNCgkJJGtleXMgPSBhcnJheV92YWx1ZXMoYXJyYXlfZmlsdGVyKGV4cGxvZGUoJHRoaXMtPnNlcGFyYXRvciwgJHBhdGgpLCAnc3RybGVuJykpOw0KDQoJCWlmIChlbXB0eSgka2V5cykpDQoJCXsNCgkJCXJldHVybiBudWxsOw0KCQl9DQoNCgkJcmV0dXJuICRrZXlzOw0KCX0=', '{}', '{}', '', 1, '2023-09-09 17:29:07', 44, 0, 1), @@ -2220,7 +2220,7 @@ INSERT INTO `#__componentbuilder_power` (`id`, `guid`, `system_name`, `name`, `t (770, '13c2cac1-a70d-42d7-99fc-eb7ac3443069', 'Utilities Class Helper', 'ClassHelper', 'abstract class', 'Class Helper for JCB Powers\r\n\r\n@since 3.2.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Utilities.ClassHelper', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIEVuc3VyZXMgdGhhdCBhIGNsYXNzIGluIHRoZSBuYW1lc3BhY2UgaXMgYXZhaWxhYmxlLg0KCSAqIElmIHRoZSBjbGFzcyBpcyBub3QgYWxyZWFkeSBsb2FkZWQsIGl0IGF0dGVtcHRzIHRvIGxvYWQgaXQgdmlhIHRoZSBzcGVjaWZpZWQgYXV0b2xvYWRlci4NCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgICRjbGFzc05hbWUgICAgICAgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBjbGFzcyB0byBjaGVjay4NCgkgKiBAcGFyYW0gc3RyaW5nICAkY29tcG9uZW50ICAgICAgIFRoZSBjb21wb25lbnQgbmFtZSB3aGVyZSB0aGUgYXV0b2xvYWRlciByZXNpZGVzLg0KCSAqIEBwYXJhbSBzdHJpbmcgICRhdXRvbG9hZGVyUGF0aCAgVGhlIHBhdGggdG8gdGhlIGF1dG9sb2FkZXIgZmlsZSB3aXRoaW4gdGhlIGNvbXBvbmVudC4NCgkgKg0KCSAqIEByZXR1cm4gYm9vbCBUcnVlIGlmIHRoZSBjbGFzcyBleGlzdHMgb3Igd2FzIHN1Y2Nlc3NmdWxseSBsb2FkZWQsIGZhbHNlIG90aGVyd2lzZS4NCgkgKiBAc2luY2UgMy4yLjINCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGV4aXN0cyhzdHJpbmcgJGNsYXNzTmFtZSwgc3RyaW5nICRjb21wb25lbnQsIHN0cmluZyAkYXV0b2xvYWRlclBhdGgpOiBib29sDQoJew0KCQlpZiAoIWNsYXNzX2V4aXN0cygkY2xhc3NOYW1lLCB0cnVlKSkNCgkJew0KCQkJLy8gQ29uc3RydWN0IHRoZSBwYXRoIHRvIHRoZSBhdXRvbG9hZGVyIGZpbGUNCgkJCSRhdXRvbG9hZGVyRmlsZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tXycgLiAkY29tcG9uZW50IC4gJy8nIC4gJGF1dG9sb2FkZXJQYXRoOw0KDQoJCQlpZiAoZmlsZV9leGlzdHMoJGF1dG9sb2FkZXJGaWxlKSkNCgkJCXsNCgkJCQlyZXF1aXJlX29uY2UgJGF1dG9sb2FkZXJGaWxlOw0KCQkJfQ0KDQoJCQkvLyBDaGVjayBhZ2FpbiBpZiB0aGUgY2xhc3Mgbm93IGV4aXN0cyBhZnRlciByZXF1aXJpbmcgdGhlIGF1dG9sb2FkZXINCgkJCWlmICghY2xhc3NfZXhpc3RzKCRjbGFzc05hbWUsIHRydWUpKQ0KCQkJew0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQo=', '{}', '{}', NULL, 1, '2024-07-12 11:44:53', 7, 0, 1), (781, '900456a2-feb5-48b9-9f05-c5a032a32c59', 'VDM.PHPConfigurationChecker', 'PHPConfigurationChecker', 'abstract class', 'PHP Configuration Checker\r\n\r\n@since 5.0.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', '7e822c03-1b20-41d1-9427-f5b8d5836af7', '', '', '', '{\"0\":\"95c02df3-fe0a-405b-b506-b7a5b8605b66\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Abstraction.PHPConfigurationChecker', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTs=', '{}', 'CS8qKg0KCSAqIFRoZSB1cGxvYWQgbWF4IGZpbGVzaXplIHZhbHVlDQoJICoNCgkgKiBAdmFyICAgIHN0cmluZw0KCSAqIEBzaW5jZSAgNS4wLjINCgkgKiovDQoJcHJvdGVjdGVkICBzdHJpbmcgJHVwbG9hZF9tYXhfZmlsZXNpemU7DQoNCgkvKioNCgkgKiBUaGUgcG9zdCBtYXggc2l6ZSB2YWx1ZQ0KCSAqDQoJICogQHZhciAgICBzdHJpbmcNCgkgKiBAc2luY2UgIDUuMC4yDQoJICoqLw0KCXByb3RlY3RlZCAgc3RyaW5nICRwb3N0X21heF9zaXplOw0KDQoJLyoqDQoJICogVGhlIG1heCBleGVjdXRpb24gdGltZSB2YWx1ZQ0KCSAqDQoJICogQHZhciAgICBpbnQNCgkgKiBAc2luY2UgIDUuMC4yDQoJICoqLw0KCXByb3RlY3RlZCAgaW50ICRtYXhfZXhlY3V0aW9uX3RpbWU7DQoNCgkvKioNCgkgKiBUaGUgbWF4IGlucHV0IHZhcnMgdmFsdWUNCgkgKg0KCSAqIEB2YXIgICAgaW50DQoJICogQHNpbmNlICA1LjAuMg0KCSAqKi8NCglwcm90ZWN0ZWQgIGludCAkbWF4X2lucHV0X3ZhcnM7DQoNCgkvKioNCgkgKiBUaGUgbWF4IGlucHV0IHRpbWUgdmFsdWUNCgkgKg0KCSAqIEB2YXIgICAgaW50DQoJICogQHNpbmNlICA1LjAuMg0KCSAqKi8NCglwcm90ZWN0ZWQgIGludCAkbWF4X2lucHV0X3RpbWU7DQoNCgkvKioNCgkgKiBUaGUgbWVtb3J5IGxpbWl0IHZhbHVlDQoJICoNCgkgKiBAdmFyICAgIHN0cmluZw0KCSAqIEBzaW5jZSAgNS4wLjINCgkgKiovDQoJcHJvdGVjdGVkICBzdHJpbmcgJG1lbW9yeV9saW1pdDsNCg0KCS8qKg0KCSAqIFRoZSByZWdpc3RyeSBhcnJheS4NCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgNS4wLjINCgkgKiovDQoJcHJvdGVjdGVkIGFycmF5ICRhY3RpdmUgPSBbDQoJCSdwaHAnID0+IFsNCgkJCSd1cGxvYWRfbWF4X2ZpbGVzaXplJyA9PiBbDQoJCQkJJ3N1Y2Nlc3MnID0+ICdUaGUgdXBsb2FkX21heF9maWxlc2l6ZSBpcyBhcHByb3ByaWF0ZWx5IHNldCB0byBoYW5kbGUgbGFyZ2UgZmlsZXMsIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgdXBsb2FkaW5nIHN1YnN0YW50aWFsIGNvbXBvbmVudHMgYW5kIG1lZGlhLicsDQoJCQkJJ3dhcm5pbmcnID0+ICdUaGUgY3VycmVudCB1cGxvYWRfbWF4X2ZpbGVzaXplIG1heSBub3Qgc3VwcG9ydCBsYXJnZSBmaWxlIHVwbG9hZHMgZWZmZWN0aXZlbHksIHBvdGVudGlhbGx5IGNhdXNpbmcgZmFpbHVyZXMgZHVyaW5nIGNvbXBvbmVudCBpbnN0YWxsYXRpb24uJw0KCQkJXSwNCgkJCSdwb3N0X21heF9zaXplJyA9PiBbDQoJCQkJJ3N1Y2Nlc3MnID0+ICdUaGUgcG9zdF9tYXhfc2l6ZSBzZXR0aW5nIGlzIHN1ZmZpY2llbnQgdG8gbWFuYWdlIGxhcmdlIGRhdGEgc3VibWlzc2lvbnMsIGVuc3VyaW5nIHNtb290aCBkYXRhIHByb2Nlc3Npbmcgd2l0aGluIGZvcm1zIGFuZCB1cGxvYWRzLicsDQoJCQkJJ3dhcm5pbmcnID0+ICdBbiBpbnN1ZmZpY2llbnQgcG9zdF9tYXhfc2l6ZSBjYW4gbGVhZCB0byB0cnVuY2F0ZWQgZGF0YSBzdWJtaXNzaW9ucywgYWZmZWN0aW5nIGZvcm0gZnVuY3Rpb25hbGl0eSBhbmQgZGF0YSBpbnRlZ3JpdHkuJw0KCQkJXSwNCgkJCSdtYXhfZXhlY3V0aW9uX3RpbWUnID0+IFsNCgkJCQknc3VjY2VzcycgPT4gJ01heCBleGVjdXRpb24gdGltZSBpcyBzZXQgaGlnaCBlbm91Z2ggdG8gZXhlY3V0ZSBjb21wbGV4IG9wZXJhdGlvbnMgd2l0aG91dCBwcmVtYXR1cmUgdGVybWluYXRpb24sIHdoaWNoIGlzIGNydWNpYWwgZm9yIGxlbmd0aHkgb3BlcmF0aW9ucy4nLA0KCQkJCSd3YXJuaW5nJyA9PiAnQSBsb3cgbWF4IGV4ZWN1dGlvbiB0aW1lIGNvdWxkIGxlYWQgdG8gc2NyaXB0IHRpbWVvdXRzLCBlc3BlY2lhbGx5IGR1cmluZyBpbnRlbnNpdmUgb3BlcmF0aW9ucywgd2hpY2ggbWlnaHQgaW50ZXJydXB0IGV4ZWN1dGlvbiBhbmQgY2F1c2UgZmFpbHVyZXMgZHVyaW5nIHRoZSBjb21waWxpbmcgb2YgYSBsYXJnZSBleHRlbnNpb24uJw0KCQkJXSwNCgkJCSdtYXhfaW5wdXRfdmFycycgPT4gWw0KCQkJCSdzdWNjZXNzJyA9PiAnVGhlIG1heF9pbnB1dF92YXJzIHNldHRpbmcgc3VwcG9ydHMgYSBoaWdoIG51bWJlciBvZiBpbnB1dCB2YXJpYWJsZXMsIGZhY2lsaXRhdGluZyBjb21wbGV4IGZvcm1zIGFuZCBkZXRhaWxlZCBjb21wb25lbnQgY29uZmlndXJhdGlvbnMuJywNCgkJCQknd2FybmluZycgPT4gJ1RvbyBmZXcgbWF4X2lucHV0X3ZhcnMgbWF5IHJlc3VsdCBpbiBsb3N0IGRhdGEgZHVyaW5nIHByb2Nlc3NpbmcgY29tcGxleCBmb3Jtcywgd2hpY2ggY2FuIGxlYWQgdG8gaW5jb21wbGV0ZSBjb25maWd1cmF0aW9ucyBhbmQgb3BlcmF0aW9uYWwgaXNzdWVzLicNCgkJCV0sDQoJCQknbWF4X2lucHV0X3RpbWUnID0+IFsNCgkJCQknc3VjY2VzcycgPT4gJ01heCBpbnB1dCB0aW1lIGlzIGFkZXF1YXRlIGZvciBwcm9jZXNzaW5nIGlucHV0cyBlZmZpY2llbnRseSBkdXJpbmcgaGlnaC1sb2FkIG9wZXJhdGlvbnMsIGVuc3VyaW5nIG5vIHByZW1hdHVyZSB0aW1lb3V0cy4nLA0KCQkJCSd3YXJuaW5nJyA9PiAnQW4gaW5zdWZmaWNpZW50IG1heCBpbnB1dCB0aW1lIGNvdWxkIHJlc3VsdCBpbiBpbmNvbXBsZXRlIGRhdGEgcHJvY2Vzc2luZyBkdXJpbmcgaW5wdXQtaGVhdnkgb3BlcmF0aW9ucywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBlcnJvcnMgYW5kIGRhdGEgbG9zcy4nDQoJCQldLA0KCQkJJ21lbW9yeV9saW1pdCcgPT4gWw0KCQkJCSdzdWNjZXNzJyA9PiAnVGhlIG1lbW9yeSBsaW1pdCBpcyBzZXQgaGlnaCB0byBhY2NvbW1vZGF0ZSBleHRlbnNpdmUgb3BlcmF0aW9ucyBhbmQgZGF0YSBwcm9jZXNzaW5nLCB3aGljaCBlbmhhbmNlcyBvdmVyYWxsIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuJywNCgkJCQknd2FybmluZycgPT4gJ0EgbG93IG1lbW9yeSBsaW1pdCBjYW4gbGVhZCB0byBmcmVxdWVudCBjcmFzaGVzIGFuZCBwZXJmb3JtYW5jZSBpc3N1ZXMsIHBhcnRpY3VsYXJseSB3aGVuIHByb2Nlc3NpbmcgbGFyZ2UgYW1vdW50cyBvZiBkYXRhIG9yIGNvbXBsZXggY2FsY3VsYXRpb25zLicNCgkJCV0NCgkJXSwNCgkJJ2Vudmlyb25tZW50JyA9PiBbDQoJCQknbmFtZScgPT4gJ2V4dGVuc2lvbiBlbnZpcm9ubWVudCcsDQoJCQknb2JqZWN0aXZlJyA9PiAnVGhlc2Ugc2V0dGluZ3MgYXJlIGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoZSBzdWNjZXNzZnVsIGluc3RhbGxhdGlvbiBhbmQgc3RhYmxlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGV4dGVuc2lvbi4nLA0KCQkJJ3dpa2lfbmFtZScgPT4gJ1BIUCBTZXR0aW5ncyBXaWtpJywNCgkJCSd3aWtpX3VybCcgPT4gJyMnDQoJCV0NCgldOw0KDQoJLyoqDQoJICogQXBwbGljYXRpb24gb2JqZWN0Lg0KCSAqDQoJICogQHNpbmNlICA1LjAuMg0KCSAqKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBDb25zdHJ1Y3Rvci4NCgkgKg0KCSAqIEBwYXJhbSAgICAgICAkYXBwICAgICAgVGhlIGFwcCBvYmplY3QuDQoJICoNCgkgKiBAc2luY2UgIDUuMC4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRhcHAgPSBudWxsKQ0KCXsNCgkJJHRoaXMtPmFwcCA9ICRhcHAgPzogRmFjdG9yeTo6Z2V0QXBwbGljYXRpb24oKTsNCg0KCQkvLyBzZXQgdGhlIHJlcXVpcmVkIFBIUCBDb25maWd1cmVzDQoJCSR0aGlzLT5zZXQoJ3BocC51cGxvYWRfbWF4X2ZpbGVzaXplLnZhbHVlJywgJHRoaXMtPnVwbG9hZF9tYXhfZmlsZXNpemUpOw0KCQkkdGhpcy0+c2V0KCdwaHAucG9zdF9tYXhfc2l6ZS52YWx1ZScsICR0aGlzLT5wb3N0X21heF9zaXplKTsNCgkJJHRoaXMtPnNldCgncGhwLm1heF9leGVjdXRpb25fdGltZS52YWx1ZScsICR0aGlzLT5tYXhfZXhlY3V0aW9uX3RpbWUpOw0KCQkkdGhpcy0+c2V0KCdwaHAubWF4X2lucHV0X3ZhcnMudmFsdWUnLCAkdGhpcy0+bWF4X2lucHV0X3ZhcnMpOw0KCQkkdGhpcy0+c2V0KCdwaHAubWF4X2lucHV0X3RpbWUudmFsdWUnLCAkdGhpcy0+bWF4X2lucHV0X3RpbWUpOw0KCQkkdGhpcy0+c2V0KCdwaHAubWVtb3J5X2xpbWl0LnZhbHVlJywgJHRoaXMtPm1lbW9yeV9saW1pdCk7DQoJfQ0KDQoJLyoqDQoJICogQ2hlY2sgdGhhdCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYXJlIHNldCBmb3IgUEhQDQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKiBAc2luY2UgIDUuMC4yDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBydW4oKTogdm9pZA0KCXsNCgkJJHNob3dIZWxwID0gZmFsc2U7DQoNCgkJLy8gQ2hlY2sgZWFjaCBjb25maWd1cmF0aW9uIGFuZCBwcm92aWRlIGRldGFpbGVkIGZlZWRiYWNrDQoJCSRjb25maWd1cmF0aW9ucyA9ICR0aGlzLT5hY3RpdmVbJ3BocCddID8/IFtdOw0KCQlmb3JlYWNoICgkY29uZmlndXJhdGlvbnMgYXMgJGNvbmZpZ05hbWUgPT4gJGNvbmZpZ0RldGFpbHMpDQoJCXsNCgkJCSRjdXJyZW50VmFsdWUgPSBpbmlfZ2V0KCRjb25maWdOYW1lKTsNCgkJCWlmICgkY3VycmVudFZhbHVlID09PSBmYWxzZSkNCgkJCXsNCgkJCQkkdGhpcy0+YXBwLT5lbnF1ZXVlTWVzc2FnZSgiRXJyb3I6IFVuYWJsZSB0byByZXRyaWV2ZSBjdXJyZW50IHNldHRpbmcgZm9yICd7JGNvbmZpZ05hbWV9Jy4iLCAnZXJyb3InKTsNCgkJCQljb250aW51ZTsNCgkJCX0NCg0KCQkJJHJlcXVpcmVkVmFsdWUgPSAkY29uZmlnRGV0YWlsc1sndmFsdWUnXSA/PyAwOw0KCQkJJGlzTWVtb3J5VmFsdWUgPSBzdHJwYnJrKCRyZXF1aXJlZFZhbHVlLCAnS01HJykgIT09IGZhbHNlOw0KDQoJCQkkcmVxdWlyZWRWYWx1ZUJ5dGVzID0gJGlzTWVtb3J5VmFsdWUgPyAkdGhpcy0+Y29udmVydFRvQnl0ZXMoJHJlcXVpcmVkVmFsdWUpIDogKGludCkgJHJlcXVpcmVkVmFsdWU7DQoJCQkkY3VycmVudFZhbHVlQnl0ZXMgPSAkaXNNZW1vcnlWYWx1ZSA/ICR0aGlzLT5jb252ZXJ0VG9CeXRlcygkY3VycmVudFZhbHVlKSA6IChpbnQpICRjdXJyZW50VmFsdWU7DQoJCQkkY29uZGl0aW9uTWV0ID0gJGN1cnJlbnRWYWx1ZUJ5dGVzID49ICRyZXF1aXJlZFZhbHVlQnl0ZXM7DQoNCgkJCSRtZXNzYWdlVHlwZSA9ICRjb25kaXRpb25NZXQgPyAnbWVzc2FnZScgOiAnd2FybmluZyc7DQoJCQkkbWVzc2FnZVRleHQgPSAkY29uZGl0aW9uTWV0ID8NCgkJCQkiU3VjY2VzczogeyRjb25maWdOYW1lfSBpcyBzZXQgdG8geyRjdXJyZW50VmFsdWV9LiAiIC4gJGNvbmZpZ0RldGFpbHNbJ3N1Y2Nlc3MnXSA/PyAnJzoNCgkJCQkiV2FybmluZzogeyRjb25maWdOYW1lfSBjb25maWd1cmF0aW9uIHNob3VsZCBiZSBhdCBsZWFzdCB7JHJlcXVpcmVkVmFsdWV9IGJ1dCBpcyBjdXJyZW50bHkgeyRjdXJyZW50VmFsdWV9LiAiIC4gJGNvbmZpZ0RldGFpbHNbJ3dhcm5pbmcnXSA/PyAnJzsNCg0KCQkJJHNob3dIZWxwID0gKCRzaG93SGVscCB8fCAkbWVzc2FnZVR5cGUgPT09ICd3YXJuaW5nJykgPyB0cnVlIDogZmFsc2U7DQoNCgkJCSR0aGlzLT5hcHAtPmVucXVldWVNZXNzYWdlKCRtZXNzYWdlVGV4dCwgJG1lc3NhZ2VUeXBlKTsNCgkJfQ0KDQoJCWlmICgkc2hvd0hlbHApDQoJCXsNCgkJCSR0aGlzLT5hcHAtPmVucXVldWVNZXNzYWdlKCJUbyBvcHRpbWl6ZSB5b3VyIHskdGhpcy0+Z2V0KCdlbnZpcm9ubWVudC5uYW1lJywgJ2V4dGVuc2lvbicpfSwgc3BlY2lmaWMgUEhQIHNldHRpbmdzIG11c3QgYmUgZW5oYW5jZWQuPGJyPnskdGhpcy0+Z2V0KCdlbnZpcm9ubWVudC5vYmplY3RpdmUnLCAnJyl9PGJyPldlJ3ZlIGlkZW50aWZpZWQgdGhhdCBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIGN1cnJlbnRseSBkbyBub3QgbWVldCB0aGUgcmVjb21tZW5kZWQgc3RhbmRhcmRzLjxicj5UbyBhZGp1c3QgdGhlc2Ugc2V0dGluZ3MgYW5kIHByZXZlbnQgcG90ZW50aWFsIGlzc3VlcywgcGxlYXNlIGNvbnN1bHQgb3VyIGRldGFpbGVkIGd1aWRlIGF2YWlsYWJsZSBhdCA8YSBocmVmPVwiaHR0cHM6Ly97JHRoaXMtPmdldCgnZW52aXJvbm1lbnQud2lraV91cmwnLCAnIycpfVwiIHRhcmdldD1cIl9ibGFua1wiPnskdGhpcy0+Z2V0KCdlbnZpcm9ubWVudC53aWtpX25hbWUnLCAnUEhQIFNldHRpbmdzIFdpa2knKX08L2E+LiIsICdub3RpY2UnKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IFBIUCBJTkkgbWVtb3J5IHZhbHVlcyB0byBieXRlcw0KCSAqDQoJICogQHBhcmFtICBzdHJpbmcgICR2YWx1ZSAgICAgVGhlIHZhbHVlIHRvIGNvbnZlcnQNCgkgKg0KCSAqIEByZXR1cm4gaW50ICAgICBUaGUgYnl0ZXMgdmFsdWUNCgkgKiBAc2luY2UgIDUuMC4yDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGNvbnZlcnRUb0J5dGVzKHN0cmluZyAkdmFsdWUpOiBpbnQNCgl7DQoJCSR2YWx1ZSA9IHRyaW0oJHZhbHVlKTsNCgkJJGxhc3RDaGFyID0gc3RydG9sb3dlcigkdmFsdWVbc3RybGVuKCR2YWx1ZSkgLSAxXSk7DQoJCSRudW1WYWx1ZSA9IHN1YnN0cigkdmFsdWUsIDAsIC0xKTsNCg0KCQlzd2l0Y2ggKCRsYXN0Q2hhcikNCgkJew0KCQkJY2FzZSAnZyc6DQoJCQkJcmV0dXJuICRudW1WYWx1ZSAqIDEwMjQgKiAxMDI0ICogMTAyNDsNCgkJCWNhc2UgJ20nOg0KCQkJCXJldHVybiAkbnVtVmFsdWUgKiAxMDI0ICogMTAyNDsNCgkJCWNhc2UgJ2snOg0KCQkJCXJldHVybiAkbnVtVmFsdWUgKiAxMDI0Ow0KCQkJZGVmYXVsdDoNCgkJCQlyZXR1cm4gKGludCkgJHZhbHVlOw0KCQl9DQoJfQ==', '{}', '{}', NULL, 1, '2024-07-27 10:01:40', 17, 0, 1), (782, '4b2d6f28-346e-46ec-bf24-d470319cca2d', 'VDM.Component.PHPConfigurationChecker', 'PHPConfigurationChecker', 'final class', '[[[Component]]] PHP Configuration Checker\r\n\r\n@since 5.02', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', '900456a2-feb5-48b9-9f05-c5a032a32c59', '', '', '', '{\"0\":\"95c02df3-fe0a-405b-b506-b7a5b8605b66\"}', '', '[[[NamespacePrefix]]]\\Joomla\\[[[ComponentNamespace]]].PHPConfigurationChecker', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIFRoZSB1cGxvYWQgbWF4IGZpbGVzaXplIHZhbHVlDQoJICoNCgkgKiBAdmFyICAgIHN0cmluZw0KCSAqIEBzaW5jZSAgNS4wLjINCgkgKiovDQoJcHJvdGVjdGVkICBzdHJpbmcgJHVwbG9hZF9tYXhfZmlsZXNpemUgPSAnW1tbdXBsb2FkX21heF9maWxlc2l6ZV1dXSc7DQoNCgkvKioNCgkgKiBUaGUgcG9zdCBtYXggc2l6ZSB2YWx1ZQ0KCSAqDQoJICogQHZhciAgICBzdHJpbmcNCgkgKiBAc2luY2UgIDUuMC4yDQoJICoqLw0KCXByb3RlY3RlZCAgc3RyaW5nICRwb3N0X21heF9zaXplID0gJ1tbW3Bvc3RfbWF4X3NpemVdXV0nOw0KDQoJLyoqDQoJICogVGhlIG1heCBleGVjdXRpb24gdGltZSB2YWx1ZQ0KCSAqDQoJICogQHZhciAgICBpbnQNCgkgKiBAc2luY2UgIDUuMC4yDQoJICoqLw0KCXByb3RlY3RlZCAgaW50ICRtYXhfZXhlY3V0aW9uX3RpbWUgPSBbW1ttYXhfZXhlY3V0aW9uX3RpbWVdXV07DQoNCgkvKioNCgkgKiBUaGUgbWF4IGlucHV0IHZhcnMgdmFsdWUNCgkgKg0KCSAqIEB2YXIgICAgaW50DQoJICogQHNpbmNlICA1LjAuMg0KCSAqKi8NCglwcm90ZWN0ZWQgIGludCAkbWF4X2lucHV0X3ZhcnMgPSBbW1ttYXhfaW5wdXRfdmFyc11dXTsNCg0KCS8qKg0KCSAqIFRoZSBtYXggaW5wdXQgdGltZSB2YWx1ZQ0KCSAqDQoJICogQHZhciAgICBpbnQNCgkgKiBAc2luY2UgIDUuMC4yDQoJICoqLw0KCXByb3RlY3RlZCAgaW50ICRtYXhfaW5wdXRfdGltZSA9IFtbW21heF9pbnB1dF90aW1lXV1dOw0KDQoJLyoqDQoJICogVGhlIG1lbW9yeSBsaW1pdCB2YWx1ZQ0KCSAqDQoJICogQHZhciAgICBzdHJpbmcNCgkgKiBAc2luY2UgIDUuMC4yDQoJICoqLw0KCXByb3RlY3RlZCAgc3RyaW5nICRtZW1vcnlfbGltaXQgPSAnW1tbbWVtb3J5X2xpbWl0XV1dJzsNCg0KCS8qKg0KCSAqIENvbnN0cnVjdG9yLg0KCSAqDQoJICogQHNpbmNlICA1LjAuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkYXBwID0gbnVsbCkNCgl7DQoJCXBhcmVudDo6X19jb25zdHJ1Y3QoJGFwcCk7DQoNCgkJLy8gc2V0IHRoZSByZXF1aXJlZCBQSFAgQ29uZmlndXJlcw0KCQkkdGhpcy0+c2V0KCdlbnZpcm9ubWVudC5uYW1lJywgJ1tbW0NvbXBvbmVudF1dXSBlbnZpcm9ubWVudCcpOw0KCQkkdGhpcy0+c2V0KCdlbnZpcm9ubWVudC53aWtpX3VybCcsICdbW1tlbnZpcm9ubWVudF93aWtpX3VybF1dXScpOw0KCX0=', '{}', '{}', NULL, 1, '2024-07-27 12:38:37', 4, 0, 1), -(821, '7832a726-87b6-4e95-887e-7b725d3fab8f', 'Joomla.Utilities.UserHelper', 'UserHelper', 'abstract class', 'Create & Update User [Save]\r\n\r\n@since 5.0.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\[[[ComponentNamespace]]].Utilities.UserHelper', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcQ01TXEZvcm1cRm9ybTsNCnVzZSBKb29tbGFcQ01TXExhbmd1YWdlXFRleHQ7DQp1c2UgSm9vbWxhXENNU1xVc2VyXFVzZXI7DQp1c2UgSm9vbWxhXENNU1xVc2VyXFVzZXJIZWxwZXIgYXMgSm9vbWxhVXNlckhlbHBlcjsNCnVzZSBKb29tbGFcQ01TXE1WQ1xNb2RlbFxCYXNlRGF0YWJhc2VNb2RlbDs=', '{\"use_selection0\":{\"use\":\"640b5352-fb09-425f-a26e-cd44eda03f15\",\"as\":\"Component\"},\"use_selection1\":{\"use\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\",\"as\":\"default\"},\"use_selection2\":{\"use\":\"1f28cb53-60d9-4db1-b517-3c7dc6b429ef\",\"as\":\"default\"},\"use_selection3\":{\"use\":\"1c10a5f1-204d-4f17-ad9f-0e0684f2030d\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIFNhdmUgdXNlciBkZXRhaWxzIGJ5IGVpdGhlciBjcmVhdGluZyBhIG5ldyB1c2VyIG9yIHVwZGF0aW5nIGFuIGV4aXN0aW5nIHVzZXIuDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgJGNyZWRlbnRpYWxzICBVc2VyIGNyZWRlbnRpYWxzIGluY2x1ZGluZyAnbmFtZScsICd1c2VybmFtZScsICdlbWFpbCcsICdwYXNzd29yZCcsIGFuZCAncGFzc3dvcmQyJy4NCgkgKiBAcGFyYW0gICBpbnQgICAgJGF1dG9sb2dpbiAgICBGbGFnIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGF1dG8tbG9naW4gdGhlIHVzZXIgYWZ0ZXIgcmVnaXN0cmF0aW9uLg0KCSAqIEBwYXJhbSAgIGFycmF5ICAkcGFyYW1zICAgICAgIFBhcmFtZXRlcnMgZm9yIHVzZXIgYWN0aXZhdGlvbiwgcGFzc3dvcmQgc2VuZGluZywgYW5kIHVzZXIgcmVnaXN0cmF0aW9uIGFsbG93YW5jZS4NCgkgKiBAcGFyYW0gICBpbnQgICAgJG1vZGUgICAgICAgICBNb2RlIG9mIHJlZ2lzdHJhdGlvbjogMSA9IFNpdGUgUmVnaXN0cmF0aW9uLCAwID0gQWRtaW4gUmVnaXN0cmF0aW9uLCAyID0gQ3VzdG9tIEhlbHBlciBNZXRob2QuDQoJICoNCgkgKiBAcmV0dXJuICBpbnQgIFVzZXIgSUQgb24gc3VjY2Vzcy4NCgkgKg0KCSAqIEB0aHJvd3MgIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gIElmIHJlcXVpcmVkIGNyZWRlbnRpYWxzIGFyZSBtaXNzaW5nLg0KCSAqIEB0aHJvd3MgIFxSdW50aW1lRXhjZXB0aW9uICAgICAgICAgIElmIHRoZSB1c2VyIHVwZGF0ZSBvciBjcmVhdGlvbiBmYWlscy4NCgkgKiBAdGhyb3dzICBOb1VzZXJJZEZvdW5kRXhjZXB0aW9uICAgICBJZiB0aGUgdXNlciBpcyBub3QgZm91bmQuDQoJICoNCgkgKiBAc2luY2UgICA1LjAuMw0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2F2ZShhcnJheSAkY3JlZGVudGlhbHMsIGludCAkYXV0b2xvZ2luID0gMCwNCgkJYXJyYXkgJHBhcmFtcyA9IFsndXNlcmFjdGl2YXRpb24nID0+IDAsICdzZW5kcGFzc3dvcmQnID0+IDFdLCBpbnQgJG1vZGUgPSAxKTogaW50DQoJew0KCQkvLyBjYW4gbm90IGNvbnRpbnVlIHdpdGhvdXQgYW4gZW1haWwNCgkJaWYgKGVtcHR5KCRjcmVkZW50aWFsc1snZW1haWwnXSkpDQoJCXsNCgkJCXRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFRleHQ6Ol8oJ0NhbiBub3Qgc2F2ZSB1c2VyIHdpdGhvdXQgZW1haWwgdmFsdWUuJykpOw0KCQl9DQoNCgkJLy8gRW5zdXJlIHRoZSAndXNlcm5hbWUnIGtleSBleGlzdHMgaW4gdGhlIGNyZWRlbnRpYWxzIGFycmF5LCBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIG5vdCBwcm92aWRlZC4NCgkJJHVzZXJuYW1lID0gJGNyZWRlbnRpYWxzWyd1c2VybmFtZSddID8/ICRjcmVkZW50aWFsc1snZW1haWwnXTsNCg0KCQkvLyBJZiB0aGUgdXNlcidzIElEIGlzIHNldCBhbmQgdmFsaWQsIGhhbmRsZSB0aGUgdXBkYXRlIGxvZ2ljLg0KCQlpZiAoIWVtcHR5KCRjcmVkZW50aWFsc1snaWQnXSkgJiYgJGNyZWRlbnRpYWxzWydpZCddID4gMCkNCgkJew0KCQkJJHVzZXJJZCA9ICRjcmVkZW50aWFsc1snaWQnXTsNCgkJCSRlbWFpbCA9ICRjcmVkZW50aWFsc1snZW1haWwnXTsNCg0KCQkJLy8gRmV0Y2ggZXhpc3RpbmcgdXNlciBieSBlbWFpbCBhbmQgdXNlcm5hbWUuDQoJCQkkZXhpc3RpbmdFbWFpbFVzZXJJZCA9IHN0YXRpYzo6Z2V0VXNlcklkQnlFbWFpbCgkZW1haWwpOw0KCQkJJGV4aXN0aW5nVXNlcm5hbWVJZCA9IHN0YXRpYzo6Z2V0VXNlcklkQnlVc2VybmFtZSgkdXNlcm5hbWUpOw0KDQoJCQkvLyBWYWxpZGF0ZSB0aGF0IHdlIGFyZW4ndCBhdHRlbXB0aW5nIHRvIHVwZGF0ZSBvdGhlciB1c2VycyBvciByZXVzZSBhbm90aGVyIHVzZXIncyBlbWFpbC91c2VybmFtZS4NCgkJCWlmICgNCgkJCQkoJGV4aXN0aW5nRW1haWxVc2VySWQgJiYgJGV4aXN0aW5nRW1haWxVc2VySWQgIT0gJHVzZXJJZCkgfHwNCgkJCQkoJGV4aXN0aW5nVXNlcm5hbWVJZCAmJiAkZXhpc3RpbmdVc2VybmFtZUlkICE9ICR1c2VySWQpIHx8DQoJCQkJKCRleGlzdGluZ0VtYWlsVXNlcklkICYmICRleGlzdGluZ1VzZXJuYW1lSWQgJiYgJGV4aXN0aW5nRW1haWxVc2VySWQgIT0gJGV4aXN0aW5nVXNlcm5hbWVJZCkNCgkJCSkgew0KCQkJCXRocm93IG5ldyBOb1VzZXJJZEZvdW5kRXhjZXB0aW9uKA0KCQkJCQlUZXh0OjpzcHJpbnRmKA0KCQkJCQkJJ1VzZXIgSUQgbWlzbWF0Y2ggZGV0ZWN0ZWQgd2hlbiB0cnlpbmcgdG8gc2F2ZSAlcyAoJXMpIGNyZWRlbnRpYWxzLicsDQoJCQkJCQkkdXNlcm5hbWUsDQoJCQkJCQkkZW1haWwNCgkJCQkJKQ0KCQkJCSk7DQoJCQl9DQoNCgkJCS8vIFVwZGF0ZSB0aGUgZXhpc3RpbmcgdXNlci4NCgkJCXJldHVybiBzdGF0aWM6OnVwZGF0ZSgkY3JlZGVudGlhbHMpOw0KCQl9DQoNCgkJLy8gQ3JlYXRlIGEgbmV3IHVzZXIgaWYgbm8gZXhpc3RpbmcgdXNlciBpcyBmb3VuZC4NCgkJcmV0dXJuIHN0YXRpYzo6Y3JlYXRlKCRjcmVkZW50aWFscywgJGF1dG9sb2dpbiwgJHBhcmFtcywgJG1vZGUpOw0KCX0NCg0KCS8qKg0KCSAqIENyZWF0ZSBhIHVzZXIgYW5kIHVwZGF0ZSB0aGUgZ2l2ZW4gdGFibGUuDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgJGNyZWRlbnRpYWxzICBVc2VyIGNyZWRlbnRpYWxzIGluY2x1ZGluZyAnbmFtZScsICd1c2VybmFtZScsICdlbWFpbCcsICdwYXNzd29yZCcsIGFuZCAncGFzc3dvcmQyJy4NCgkgKiBAcGFyYW0gICBpbnQgICAgJGF1dG9sb2dpbiAgICBGbGFnIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGF1dG8tbG9naW4gdGhlIHVzZXIgYWZ0ZXIgcmVnaXN0cmF0aW9uLg0KCSAqIEBwYXJhbSAgIGFycmF5ICAkcGFyYW1zICAgICAgIFBhcmFtZXRlcnMgZm9yIHVzZXIgYWN0aXZhdGlvbiwgcGFzc3dvcmQgc2VuZGluZywgYW5kIHVzZXIgcmVnaXN0cmF0aW9uIGFsbG93YW5jZS4NCgkgKiBAcGFyYW0gICBpbnQgICAgJG1vZGUgICAgICAgICBNb2RlIG9mIHJlZ2lzdHJhdGlvbjogMSA9IFNpdGUgUmVnaXN0cmF0aW9uLCAwID0gQWRtaW4gUmVnaXN0cmF0aW9uLCAyID0gQ3VzdG9tIEhlbHBlciBNZXRob2QuDQoJICoNCgkgKiBAcmV0dXJuICBpbnQgVXNlciBJRCBvbiBzdWNjZXNzLg0KCSAqDQoJICogQHRocm93cyAgXFJ1bnRpbWVFeGNlcHRpb24gICAgICAgSWYgdXNlciBjcmVhdGlvbiBmYWlscy4NCgkgKiBAdGhyb3dzICBOb1VzZXJJZEZvdW5kRXhjZXB0aW9uICBJZiB0aGUgdXNlciBpcyBub3QgZm91bmQuDQoJICoNCgkgKiBAc2luY2UgICA1LjAuMw0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKGFycmF5ICRjcmVkZW50aWFscywgaW50ICRhdXRvbG9naW4gPSAwLA0KCQlhcnJheSAkcGFyYW1zID0gWyd1c2VyYWN0aXZhdGlvbicgPT4gMCwgJ3NlbmRwYXNzd29yZCcgPT4gMV0sIGludCAkbW9kZSA9IDEpOiBpbnQNCgl7DQoJCSRsYW5nID0gRmFjdG9yeTo6Z2V0TGFuZ3VhZ2UoKTsNCgkJJGxhbmctPmxvYWQoJ2NvbV91c2VycycsIEpQQVRIX1NJVEUsICdlbi1HQicsIHRydWUpOw0KDQoJCS8vIEhhbmRsZSBjdXN0b20gcmVnaXN0cmF0aW9uIG1vZGUNCgkJaWYgKCRtb2RlID09PSAyICYmIG1ldGhvZF9leGlzdHMoSm9vbWxhX19fYWViZmViOWZfZjhhM180MmJlX2EyMWRfNWRiNTZhZTMwYzFjX19fUG93ZXI6OmNsYXNzLCAncmVnaXN0ZXJVc2VyJykpDQoJCXsNCgkJCSRwYXJhbXNbJ2F1dG9sb2dpbiddID0gJGF1dG9sb2dpbjsNCgkJCSR1c2VySWQgPSBKb29tbGFfX19hZWJmZWI5Zl9mOGEzXzQyYmVfYTIxZF81ZGI1NmFlMzBjMWNfX19Qb3dlcjo6cmVnaXN0ZXJVc2VyKCRjcmVkZW50aWFscywgJHBhcmFtcyk7DQoNCgkJCWlmIChpc19udW1lcmljKCR1c2VySWQpKQ0KCQkJew0KCQkJCXJldHVybiAkdXNlcklkOw0KCQkJfQ0KDQoJCQl0aHJvdyBuZXcgTm9Vc2VySWRGb3VuZEV4Y2VwdGlvbihUZXh0OjpfKCdVc2VyIGNyZWF0aW9uIGZhaWxlZCEnKSk7DQoJCX0NCg0KCQkvLyBDaGVjayBpZiB3ZSBoYXZlIHBhcmFtcy9jb25maWcNCgkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkcGFyYW1zKSkNCgkJew0KCQkJLy8gTWFrZSBjaGFuZ2VzIHRvIHVzZXIgY29uZmlnDQoJCQlmb3JlYWNoICgkcGFyYW1zIGFzICRwYXJhbSA9PiAkc2V0KQ0KCQkJew0KCQkJCS8vIElmIHlvdSBrbm93IG9mIGEgYmV0dGVyIHBhdGgsIGxldCBtZSBrbm93DQoJCQkJJHBhcmFtc1skcGFyYW1dID0gQ29tcG9uZW50OjpzZXRQYXJhbXMoJHBhcmFtLCAkc2V0LCAnY29tX3VzZXJzJyk7DQoJCQl9DQoJCX0NCg0KCQkvLyBGYWxsYmFjayB0byBTaXRlIFJlZ2lzdHJhdGlvbnMgaWYgbW9kZSBpcyBzZXQgdG8gMiBidXQgdGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0DQoJCSRtb2RlID0gJG1vZGUgPT09IDIgPyAxIDogJG1vZGU7DQoNCgkJLy8gTG9hZCB0aGUgYXBwcm9wcmlhdGUgdXNlciBtb2RlbA0KCQkkbW9kZWwgPSBzdGF0aWM6OmdldE1vZGVsQnlNb2RlKCRtb2RlKTsNCg0KCQkvLyBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIG1pc3NpbmcgY3JlZGVudGlhbHMNCgkJJGNyZWRlbnRpYWxzWyd1c2VybmFtZSddID0gJGNyZWRlbnRpYWxzWyd1c2VybmFtZSddID8/ICRjcmVkZW50aWFsc1snZW1haWwnXTsNCg0KCQkvLyBQcmVwYXJlIHVzZXIgZGF0YQ0KCQkkZGF0YSA9IHN0YXRpYzo6cHJlcGFyZVVzZXJEYXRhKCRjcmVkZW50aWFscywgJG1vZGUpOw0KDQoJCS8vIFNldCBmb3JtIHBhdGggKGJ1ZyBmaXggZm9yIEpvb21sYSkNCgkJc3RhdGljOjpzZXRGb3JtUGF0aEZvclVzZXJDbGFzcygkbW9kZSk7DQoNCgkJLy8gSGFuZGxlIHVzZXIgY3JlYXRpb24NCgkJJHVzZXJJZCA9ICRtb2RlID09PSAxID8gJG1vZGVsLT5yZWdpc3RlcigkZGF0YSkgOiBzdGF0aWM6OmFkbWluUmVnaXN0ZXIoJG1vZGVsLCAkZGF0YSk7DQoNCgkJLy8gQ2hlY2sgaWYgd2UgaGF2ZSBwYXJhbXMNCgkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkcGFyYW1zKSkNCgkJew0KCQkJLy8gQ2hhbmdlIHVzZXIgcGFyYW1zL2NvbmZpZyBiYWNrDQoJCQlmb3JlYWNoICgkcGFyYW1zIGFzICRwYXJhbSA9PiAkc2V0KQ0KCQkJew0KCQkJCS8vIElmIHlvdSBrbm93IG9mIGEgYmV0dGVyIHBhdGgsIGxldCBtZSBrbm93DQoJCQkJQ29tcG9uZW50OjpzZXRQYXJhbXMoJHBhcmFtLCAkc2V0LCAnY29tX3VzZXJzJyk7DQoJCQl9DQoJCX0NCg0KCQlpZiAoISR1c2VySWQpDQoJCXsNCgkJCSRjdXJyZW50X3VzZXIgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5nZXRJZGVudGl0eSgpOw0KDQoJCQkvLyBvbmx5IGFsbG93IHRob3NlIHdpdGggYWNjZXNzIHRvIFVzZXJzIHRvIGlnbm9yZSBlcnJvcnMNCgkJCWlmICgkY3VycmVudF91c2VyLT5hdXRob3Jpc2UoJ2NvcmUubWFuYWdlJywgJ2NvbV91c2VycycpKQ0KCQkJew0KCQkJCSR1c2VySWQgPSBzdGF0aWM6OmdldFVzZXJJZEJ5VXNlcm5hbWUoJGNyZWRlbnRpYWxzWyd1c2VybmFtZSddKTsNCgkJCX0NCgkJfQ0KDQoJCWlmIChpc19udW1lcmljKCR1c2VySWQpICYmICR1c2VySWQgPiAwKQ0KCQl7DQoJCQkvLyBIYW5kbGUgcG9zdC1yZWdpc3RyYXRpb24gcHJvY2Vzc2VzDQoJCQlyZXR1cm4gc3RhdGljOjpoYW5kbGVQb3N0UmVnaXN0cmF0aW9uKCR1c2VySWQsICRhdXRvbG9naW4sICRjcmVkZW50aWFscyk7DQoJCX0NCg0KCQkkZXJyb3JfbWVzc2FnZXMgPSAnJzsNCgkJaWYgKG1ldGhvZF9leGlzdHMoJG1vZGVsLCAnZ2V0RXJyb3InKSkNCgkJew0KCQkJJGVycm9ycyA9ICRtb2RlbC0+Z2V0RXJyb3IoKTsNCgkJCWlmICghZW1wdHkoJGVycm9ycykpDQoJCQl7DQoJCQkJaWYgKGlzX2FycmF5KCRlcnJvcnMpKQ0KCQkJCXsNCgkJCQkJJGVycm9yX21lc3NhZ2VzID0gJzxicj4nIC4gaW1wbG9kZSgnPGJyPicsICRlcnJvcnMpOw0KCQkJCX0NCgkJCQllbHNlaWYgKGlzX3N0cmluZygkZXJyb3JzKSkNCgkJCQl7DQoJCQkJCSRlcnJvcl9tZXNzYWdlcyA9ICc8YnI+JyAuICRlcnJvcnM7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJdGhyb3cgbmV3IE5vVXNlcklkRm91bmRFeGNlcHRpb24oDQoJCQlUZXh0OjpzcHJpbnRmKCdVc2VyICVzICglcykgY3JlYXRpb24gZmFpbGVkISVzJywNCgkJCQkoc3RyaW5nKSAkY3JlZGVudGlhbHNbJ3VzZXJuYW1lJ10sDQoJCQkJKHN0cmluZykgJGNyZWRlbnRpYWxzWydlbWFpbCddLA0KCQkJCSRlcnJvcl9tZXNzYWdlcw0KCQkJKQ0KCQkpOw0KCX0NCg0KCS8qKg0KCSAqIFVwZGF0ZSB1c2VyIGRldGFpbHMuDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgJHVzZXJEZXRhaWxzICBBcnJheSBjb250YWluaW5nIHVzZXIgZGV0YWlscyB0byBiZSB1cGRhdGVkLg0KCSAqDQoJICogQHJldHVybiAgaW50ICAgVXBkYXRlZCB1c2VyIElEIG9uIHN1Y2Nlc3MuDQoJICoNCgkgKiBAdGhyb3dzICBcUnVudGltZUV4Y2VwdGlvbiAgSWYgdXNlciB1cGRhdGUgZmFpbHMuDQoJICoNCgkgKiBAc2luY2UgICA1LjAuMw0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXBkYXRlKGFycmF5ICR1c2VyRGV0YWlscyk6IGludA0KCXsNCgkJJGxhbmcgPSBGYWN0b3J5OjpnZXRMYW5ndWFnZSgpOw0KCQkkbGFuZy0+bG9hZCgnY29tX3VzZXJzJywgSlBBVEhfQURNSU5JU1RSQVRPUiwgJ2VuLUdCJywgdHJ1ZSk7DQoNCgkJJG1vZGVsID0gQ29tcG9uZW50OjpnZXRNb2RlbCgnVXNlcicsICdBZG1pbmlzdHJhdG9yJywgJ2NvbV91c2VycycpOw0KDQoJCS8vIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbWlzc2luZyBjcmVkZW50aWFscw0KCQkkdXNlckRldGFpbHNbJ3VzZXJuYW1lJ10gPSAkdXNlckRldGFpbHNbJ3VzZXJuYW1lJ10gPz8gJHVzZXJEZXRhaWxzWydlbWFpbCddOw0KDQoJCS8vIFByZXBhcmUgdXNlciBkYXRhIGZvciB1cGRhdGUNCgkJJGRhdGEgPSBbDQoJCQknaWQnID0+ICR1c2VyRGV0YWlsc1snaWQnXSwNCgkJCSd1c2VybmFtZScgPT4gJHVzZXJEZXRhaWxzWyd1c2VybmFtZSddLA0KCQkJJ25hbWUnID0+ICR1c2VyRGV0YWlsc1snbmFtZSddLA0KCQkJJ2VtYWlsJyA9PiAkdXNlckRldGFpbHNbJ2VtYWlsJ10sDQoJCQkncGFzc3dvcmQnID0+ICR1c2VyRGV0YWlsc1sncGFzc3dvcmQnXSA/PyBudWxsLA0KCQkJJ3Bhc3N3b3JkMicgPT4gJHVzZXJEZXRhaWxzWydwYXNzd29yZDInXSA/PyBudWxsLA0KCQkJJ2Jsb2NrJyA9PiAwDQoJCV07DQoNCgkJLy8gc2V0IGdyb3VwcyBpZiBmb3VuZA0KCQlpZiAoaXNzZXQoJHVzZXJEZXRhaWxzWydncm91cHMnXSkgJiYgQXJyYXlIZWxwZXI6OmNoZWNrKCR1c2VyRGV0YWlsc1snZ3JvdXBzJ10pKQ0KCQl7DQoJCQkkZGF0YVsnZ3JvdXBzJ10gPSAkdXNlckRldGFpbHNbJ2dyb3VwcyddOw0KCQl9DQoNCgkJLy8gVXBkYXRlIHRoZSB1c2VyDQoJCWlmICgkbW9kZWwtPnNhdmUoJGRhdGEpKQ0KCQl7DQoJCQlyZXR1cm4gJHVzZXJEZXRhaWxzWydpZCddOw0KCQl9DQoNCgkJJGVycm9yX21lc3NhZ2VzID0gJyc7DQoJCWlmIChtZXRob2RfZXhpc3RzKCRtb2RlbCwgJ2dldEVycm9yJykpDQoJCXsNCgkJCSRlcnJvcnMgPSAkbW9kZWwtPmdldEVycm9yKCk7DQoJCQlpZiAoIWVtcHR5KCRlcnJvcnMpKQ0KCQkJew0KCQkJCWlmIChpc19hcnJheSgkZXJyb3JzKSkNCgkJCQl7DQoJCQkJCSRlcnJvcl9tZXNzYWdlcyA9ICc8YnI+JyAuIGltcGxvZGUoJzxicj4nLCAkZXJyb3JzKTsNCgkJCQl9DQoJCQkJZWxzZWlmIChpc19zdHJpbmcoJGVycm9ycykpDQoJCQkJew0KCQkJCQkkZXJyb3JfbWVzc2FnZXMgPSAnPGJyPicgLiAkZXJyb3JzOw0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCXRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigNCgkJCVRleHQ6OnNwcmludGYoJ1VwZGF0ZSBvZiB1c2VyICVzICglcykgZmFpbGVkISVzJywNCgkJCQkoc3RyaW5nKSAkdXNlckRldGFpbHNbJ3VzZXJuYW1lJ10sDQoJCQkJKHN0cmluZykgJHVzZXJEZXRhaWxzWydlbWFpbCddLA0KCQkJCShzdHJpbmcpICRlcnJvcl9tZXNzYWdlcw0KCQkJKQ0KCQkpOw0KCX0NCg0KCS8qKg0KCSAqIE1ldGhvZCB0byBnZXQgYW4gaW5zdGFuY2Ugb2YgYSB1c2VyIGZvciB0aGUgZ2l2ZW4gaWQuDQoJICoNCgkgKiBAcGFyYW0gICBpbnQgICRpZCAgVGhlIGlkDQoJICoNCgkgKiBAcmV0dXJuICBVc2VyDQoJICoNCgkgKiBAc2luY2UgICA1LjAuMw0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VXNlckJ5SWQoaW50ICRpZCk6IFVzZXINCgl7DQoJCSByZXR1cm4gbmV3IFVzZXIoJGlkKTsNCgl9DQoNCgkvKioNCgkgKiBSZXRyaWV2ZSB0aGUgdXNlciBJRCBieSB1c2VybmFtZS4NCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJHVzZXJuYW1lICBUaGUgdXNlcm5hbWUgdG8gY2hlY2suDQoJICoNCgkgKiBAcmV0dXJuICBpbnR8bnVsbCAgVGhlIHVzZXIgSUQgaWYgdGhlIHVzZXIgZXhpc3RzLCBudWxsIG90aGVyd2lzZS4NCgkgKg0KCSAqIEBzaW5jZSAgIDUuMC4zDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRVc2VySWRCeVVzZXJuYW1lKHN0cmluZyAkdXNlcm5hbWUpOiA/aW50DQoJew0KCQkkdXNlcklkID0gSm9vbWxhVXNlckhlbHBlcjo6Z2V0VXNlcklkKCR1c2VybmFtZSk7DQoJCXJldHVybiAkdXNlcklkID86IG51bGw7DQoJfQ0KDQoJLyoqDQoJICogUmV0cmlldmUgdGhlIHVzZXIgSUQgYnkgZW1haWwuDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICRlbWFpbCAgVGhlIGVtYWlsIGFkZHJlc3MgdG8gY2hlY2suDQoJICoNCgkgKiBAcmV0dXJuICBpbnR8bnVsbCAgVGhlIHVzZXIgSUQgaWYgdGhlIHVzZXIgZXhpc3RzLCBudWxsIG90aGVyd2lzZS4NCgkgKg0KCSAqIEBzaW5jZSAgIDUuMC4zDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRVc2VySWRCeUVtYWlsKHN0cmluZyAkZW1haWwpOiA/aW50DQoJew0KCQkvLyBJbml0aWFsaXNlIHNvbWUgdmFyaWFibGVzDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpDQoJCQktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgnaWQnKSkNCgkJCS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fdXNlcnMnKSkNCgkJCS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2VtYWlsJykgLiAnID0gOmVtYWlsJykNCgkJCS0+YmluZCgnOmVtYWlsJywgJGVtYWlsKQ0KCQkJLT5zZXRMaW1pdCgxKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KDQoJCSR1c2VySWQgPSAkZGItPmxvYWRSZXN1bHQoKTsNCgkJcmV0dXJuICR1c2VySWQgPzogbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBMb2FkIHRoZSBjb3JyZWN0IHVzZXIgbW9kZWwgYmFzZWQgb24gdGhlIHJlZ2lzdHJhdGlvbiBtb2RlLg0KCSAqDQoJICogQHBhcmFtICAgaW50ICAkbW9kZSAgVGhlIHJlZ2lzdHJhdGlvbiBtb2RlLg0KCSAqDQoJICogQHJldHVybiAgQmFzZURhdGFiYXNlTW9kZWwgIFRoZSBhcHByb3ByaWF0ZSB1c2VyIG1vZGVsLg0KCSAqDQoJICogQHNpbmNlICAgNS4wLjMNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldE1vZGVsQnlNb2RlKGludCAkbW9kZSk6IEJhc2VEYXRhYmFzZU1vZGVsDQoJew0KCQlpZiAoJG1vZGUgPT09IDEpDQoJCXsNCgkJCXJldHVybiBDb21wb25lbnQ6OmdldE1vZGVsKCdSZWdpc3RyYXRpb24nLCAnU2l0ZScsICdjb21fdXNlcnMnKTsNCgkJfQ0KDQoJCXJldHVybiBDb21wb25lbnQ6OmdldE1vZGVsKCdVc2VyJywgJ0FkbWluaXN0cmF0b3InLCAnY29tX3VzZXJzJyk7DQoJfQ0KDQoJLyoqDQoJICogUHJlcGFyZSB1c2VyIGRhdGEgYXJyYXkgZm9yIHJlZ2lzdHJhdGlvbiBvciB1cGRhdGUuDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgJGNyZWRlbnRpYWxzICBVc2VyIGNyZWRlbnRpYWxzLg0KCSAqIEBwYXJhbSAgIGludCAgICAkbW9kZSAgICAgICAgIFRoZSByZWdpc3RyYXRpb24gbW9kZS4NCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5ICBUaGUgcHJlcGFyZWQgdXNlciBkYXRhIGFycmF5Lg0KCSAqDQoJICogQHNpbmNlICAgNS4wLjMNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHByZXBhcmVVc2VyRGF0YShhcnJheSAkY3JlZGVudGlhbHMsIGludCAkbW9kZSkNCgl7DQoJCSRkYXRhID0gWw0KCQkJJ3VzZXJuYW1lJyA9PiAkY3JlZGVudGlhbHNbJ3VzZXJuYW1lJ10sDQoJCQknbmFtZScgPT4gJGNyZWRlbnRpYWxzWyduYW1lJ10sDQoJCQknYmxvY2snID0+IDANCgkJXTsNCg0KCQlpZiAoJG1vZGUgPT09IDEpDQoJCXsNCgkJCSRkYXRhWydlbWFpbDEnXSA9ICRjcmVkZW50aWFsc1snZW1haWwnXTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRkYXRhWydlbWFpbCddID0gJGNyZWRlbnRpYWxzWydlbWFpbCddOw0KCQkJJGRhdGFbJ3JlZ2lzdGVyRGF0ZSddID0gRmFjdG9yeTo6Z2V0RGF0ZSgpLT50b1NxbCgpOw0KCQl9DQoNCgkJaWYgKCRtb2RlID09PSAxICYmIGVtcHR5KCRjcmVkZW50aWFsc1sncGFzc3dvcmQnXSkpDQoJCXsNCgkJCSRjcmVkZW50aWFsc1sncGFzc3dvcmQnXSA9IFN0cmluZ0hlbHBlcjo6cmFuZG9tKDEwKTsNCgkJCSRjcmVkZW50aWFsc1sncGFzc3dvcmQyJ10gPSAkY3JlZGVudGlhbHNbJ3Bhc3N3b3JkJ107DQoJCX0NCg0KCQlpZiAoIWVtcHR5KCRjcmVkZW50aWFsc1sncGFzc3dvcmQnXSkgJiYgIWVtcHR5KCRjcmVkZW50aWFsc1sncGFzc3dvcmQyJ10pKQ0KCQl7DQoJCQkkZGF0YVsncGFzc3dvcmQxJ10gPSAkY3JlZGVudGlhbHNbJ3Bhc3N3b3JkJ107DQoJCQkkZGF0YVsncGFzc3dvcmQyJ10gPSAkY3JlZGVudGlhbHNbJ3Bhc3N3b3JkMiddOw0KCQl9DQoNCgkJaWYgKCRtb2RlID09PSAwICYmIGlzc2V0KCRjcmVkZW50aWFsc1snZ3JvdXBzJ10pICYmIEFycmF5SGVscGVyOjpjaGVjaygkY3JlZGVudGlhbHNbJ2dyb3VwcyddKSkNCgkJew0KCQkJJGRhdGFbJ2dyb3VwcyddID0gJGNyZWRlbnRpYWxzWydncm91cHMnXTsNCgkJfQ0KDQoJCXJldHVybiAkZGF0YTsNCgl9DQoNCgkvKioNCgkgKiBIYW5kbGUgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGZvciBhZG1pbiBtb2RlLg0KCSAqDQoJICogQHBhcmFtICAgQmFzZURhdGFiYXNlTW9kZWwgICRtb2RlbCAgVGhlIHVzZXIgbW9kZWwuDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICAgICAgICRkYXRhICAgVGhlIHVzZXIgZGF0YS4NCgkgKg0KCSAqIEByZXR1cm4gIGludCAgVGhlIElEIG9mIHRoZSBjcmVhdGVkIHVzZXIuDQoJICoNCgkgKiBAc2luY2UgICA1LjAuMw0KCSAqLw0KCXByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGFkbWluUmVnaXN0ZXIoQmFzZURhdGFiYXNlTW9kZWwgJG1vZGVsLCBhcnJheSAkZGF0YSk6IGludA0KCXsNCgkJJG1vZGVsLT5zYXZlKCRkYXRhKTsNCg0KCQlyZXR1cm4gJG1vZGVsLT5nZXRTdGF0ZSgndXNlci5pZCcsIDApOw0KCX0NCg0KCS8qKg0KCSAqIEhhbmRsZSBwb3N0LXJlZ2lzdHJhdGlvbiBwcm9jZXNzZXMgbGlrZSBhdXRvLWxvZ2luLg0KCSAqDQoJICogQHBhcmFtICAgaW50ICAgICR1c2VySWQgICAgICBUaGUgSUQgb2YgdGhlIGNyZWF0ZWQgdXNlci4NCgkgKiBAcGFyYW0gICBpbnQgICAgJGF1dG9sb2dpbiAgIEZsYWcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gYXV0by1sb2dpbiB0aGUgdXNlci4NCgkgKiBAcGFyYW0gICBhcnJheSAgJGNyZWRlbnRpYWxzIFRoZSB1c2VyIGNyZWRlbnRpYWxzLg0KCSAqDQoJICogQHJldHVybiAgaW50IFRoZSB1c2VyIElEIG9uIHN1Y2Nlc3MuDQoJICoNCgkgKiBAc2luY2UgICA1LjAuMw0KCSAqLw0KCXByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGhhbmRsZVBvc3RSZWdpc3RyYXRpb24oaW50ICR1c2VySWQsIGludCAkYXV0b2xvZ2luLCBhcnJheSAkY3JlZGVudGlhbHMpOiBpbnQNCgl7DQoJCS8vIG1ha2Ugc3VyZSB1c2VyIGlzIGl0IHRoZSBjb3JyZWN0IGdyb3Vwcw0KCQlpZiAoJHVzZXJJZCA+IDAgJiYgIWVtcHR5KCRjcmVkZW50aWFsc1snZ3JvdXBzJ10pKQ0KCQl7DQoJCQl0cnkNCgkJCXsNCgkJCQlKb29tbGFVc2VySGVscGVyOjpzZXRVc2VyR3JvdXBzKCR1c2VySWQsICRjcmVkZW50aWFsc1snZ3JvdXBzJ10pOw0KCQkJfQ0KCQkJY2F0Y2ggKFxFeGNlcHRpb24gJGUpDQoJCQl7DQoJCQkJLy8gd2UgbWlnaHQgbmVlZCBzYXkgc29tZXRoaW5nDQoJCQl9DQoJCX0NCg0KCQlpZiAoJGF1dG9sb2dpbiAmJiAhZW1wdHkoJGNyZWRlbnRpYWxzWydwYXNzd29yZCddKSkNCgkJew0KCQkJdHJ5DQoJCQl7DQoJCQkJRmFjdG9yeTo6Z2V0QXBwbGljYXRpb24oKS0+bG9naW4oJGNyZWRlbnRpYWxzKTsNCgkJCX0NCgkJCWNhdGNoIChcRXhjZXB0aW9uICRlKQ0KCQkJew0KCQkJCS8vIHdlIG1pZ2h0IG5lZWQgdG8gcmVkaXJlY3QgaGVyZT8NCgkJCX0NCgkJfQ0KDQoJCXJldHVybiAkdXNlcklkOw0KCX0NCg0KCS8qKg0KCSAqIEFkZHJlc3MgYnVnIG9uIFxKb29tbGFcQ01TXE1WQ1xNb2RlbFxGb3JtQmVoYXZpb3JUcmFpdCBMaW5lIDc2DQoJICogICBUaGUgdXNlIG9mIEpQQVRIX0NPTVBPTkVOVCBjYXVzZSBpdCB0byBsb2FkIHRoZQ0KCSAqICAgYWN0aXZlIGNvbXBvbmVudCBmb3JtcyBhbmQgZmllbGRzLCB3aGljaCBicmVha3MgdGhlIHJlZ2lzdHJhdGlvbiBtb2RlbC4NCgkgKg0KCSAqIEBwYXJhbSBpbnQgICRtb2RlDQoJICoNCgkgKiBAc2luY2UgNS4wLjMNCgkgKi8NCglwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBzZXRGb3JtUGF0aEZvclVzZXJDbGFzcyhpbnQgJG1vZGUpOiB2b2lkDQoJew0KCQlpZiAoJG1vZGUgPT0gMSkgLy8gMSA9IHVzZSBvZiB0aGUgUmVnaXN0cmF0aW9uIE1vZGVsDQoJCXsNCgkJCS8vIEdldCB0aGUgZm9ybS4NCgkJCUZvcm06OmFkZEZvcm1QYXRoKEpQQVRIX1JPT1QgLiAnL2NvbXBvbmVudHMvY29tX3VzZXJzL2Zvcm1zJyk7DQoJCX0NCgl9', '{}', '{}', NULL, 1, '2024-08-29 15:27:21', 45, 0, 1), +(821, '7832a726-87b6-4e95-887e-7b725d3fab8f', 'Joomla.Utilities.UserHelper', 'UserHelper', 'abstract class', 'Create & Update User [Save]\r\n\r\n@since 5.0.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\[[[ComponentNamespace]]].Utilities.UserHelper', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcQ01TXEZvcm1cRm9ybTsNCnVzZSBKb29tbGFcQ01TXExhbmd1YWdlXFRleHQ7DQp1c2UgSm9vbWxhXENNU1xVc2VyXFVzZXI7DQp1c2UgSm9vbWxhXENNU1xVc2VyXFVzZXJIZWxwZXIgYXMgSm9vbWxhVXNlckhlbHBlcjsNCnVzZSBKb29tbGFcQ01TXE1WQ1xNb2RlbFxCYXNlRGF0YWJhc2VNb2RlbDs=', '{\"use_selection0\":{\"use\":\"640b5352-fb09-425f-a26e-cd44eda03f15\",\"as\":\"Component\"},\"use_selection1\":{\"use\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\",\"as\":\"default\"},\"use_selection2\":{\"use\":\"1f28cb53-60d9-4db1-b517-3c7dc6b429ef\",\"as\":\"default\"},\"use_selection3\":{\"use\":\"1c10a5f1-204d-4f17-ad9f-0e0684f2030d\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIFNhdmUgdXNlciBkZXRhaWxzIGJ5IGVpdGhlciBjcmVhdGluZyBhIG5ldyB1c2VyIG9yIHVwZGF0aW5nIGFuIGV4aXN0aW5nIHVzZXIuDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgJGNyZWRlbnRpYWxzICBVc2VyIGNyZWRlbnRpYWxzIGluY2x1ZGluZyAnbmFtZScsICd1c2VybmFtZScsICdlbWFpbCcsICdwYXNzd29yZCcsIGFuZCAncGFzc3dvcmQyJy4NCgkgKiBAcGFyYW0gICBpbnQgICAgJGF1dG9sb2dpbiAgICBGbGFnIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGF1dG8tbG9naW4gdGhlIHVzZXIgYWZ0ZXIgcmVnaXN0cmF0aW9uLg0KCSAqIEBwYXJhbSAgIGFycmF5ICAkcGFyYW1zICAgICAgIFBhcmFtZXRlcnMgZm9yIHVzZXIgYWN0aXZhdGlvbiwgcGFzc3dvcmQgc2VuZGluZywgYW5kIHVzZXIgcmVnaXN0cmF0aW9uIGFsbG93YW5jZS4NCgkgKiBAcGFyYW0gICBpbnQgICAgJG1vZGUgICAgICAgICBNb2RlIG9mIHJlZ2lzdHJhdGlvbjogMSA9IFNpdGUgUmVnaXN0cmF0aW9uLCAwID0gQWRtaW4gUmVnaXN0cmF0aW9uLCAyID0gQ3VzdG9tIEhlbHBlciBNZXRob2QuDQoJICoNCgkgKiBAcmV0dXJuICBpbnQgIFVzZXIgSUQgb24gc3VjY2Vzcy4NCgkgKg0KCSAqIEB0aHJvd3MgIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gIElmIHJlcXVpcmVkIGNyZWRlbnRpYWxzIGFyZSBtaXNzaW5nLg0KCSAqIEB0aHJvd3MgIFxSdW50aW1lRXhjZXB0aW9uICAgICAgICAgIElmIHRoZSB1c2VyIHVwZGF0ZSBvciBjcmVhdGlvbiBmYWlscy4NCgkgKiBAdGhyb3dzICBOb1VzZXJJZEZvdW5kRXhjZXB0aW9uICAgICBJZiB0aGUgdXNlciBpcyBub3QgZm91bmQuDQoJICoNCgkgKiBAc2luY2UgICA1LjAuMw0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2F2ZShhcnJheSAkY3JlZGVudGlhbHMsIGludCAkYXV0b2xvZ2luID0gMCwNCgkJYXJyYXkgJHBhcmFtcyA9IFsndXNlcmFjdGl2YXRpb24nID0+IDAsICdzZW5kcGFzc3dvcmQnID0+IDFdLCBpbnQgJG1vZGUgPSAxKTogaW50DQoJew0KCQkvLyBjYW4gbm90IGNvbnRpbnVlIHdpdGhvdXQgYW4gZW1haWwNCgkJaWYgKGVtcHR5KCRjcmVkZW50aWFsc1snZW1haWwnXSkpDQoJCXsNCgkJCXRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFRleHQ6Ol8oJ0NhbiBub3Qgc2F2ZSB1c2VyIHdpdGhvdXQgZW1haWwgdmFsdWUuJykpOw0KCQl9DQoNCgkJLy8gRW5zdXJlIHRoZSAndXNlcm5hbWUnIGtleSBleGlzdHMgaW4gdGhlIGNyZWRlbnRpYWxzIGFycmF5LCBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIG5vdCBwcm92aWRlZC4NCgkJJHVzZXJuYW1lID0gJGNyZWRlbnRpYWxzWyd1c2VybmFtZSddID8/ICRjcmVkZW50aWFsc1snZW1haWwnXTsNCg0KCQkvLyBJZiB0aGUgdXNlcidzIElEIGlzIHNldCBhbmQgdmFsaWQsIGhhbmRsZSB0aGUgdXBkYXRlIGxvZ2ljLg0KCQlpZiAoIWVtcHR5KCRjcmVkZW50aWFsc1snaWQnXSkgJiYgJGNyZWRlbnRpYWxzWydpZCddID4gMCkNCgkJew0KCQkJJHVzZXJJZCA9ICRjcmVkZW50aWFsc1snaWQnXTsNCgkJCSRlbWFpbCA9ICRjcmVkZW50aWFsc1snZW1haWwnXTsNCg0KCQkJLy8gRmV0Y2ggZXhpc3RpbmcgdXNlciBieSBlbWFpbCBhbmQgdXNlcm5hbWUuDQoJCQkkZXhpc3RpbmdFbWFpbFVzZXJJZCA9IHN0YXRpYzo6Z2V0VXNlcklkQnlFbWFpbCgkZW1haWwpOw0KCQkJJGV4aXN0aW5nVXNlcm5hbWVJZCA9IHN0YXRpYzo6Z2V0VXNlcklkQnlVc2VybmFtZSgkdXNlcm5hbWUpOw0KDQoJCQkvLyBWYWxpZGF0ZSB0aGF0IHdlIGFyZW4ndCBhdHRlbXB0aW5nIHRvIHVwZGF0ZSBvdGhlciB1c2VycyBvciByZXVzZSBhbm90aGVyIHVzZXIncyBlbWFpbC91c2VybmFtZS4NCgkJCWlmICgNCgkJCQkoJGV4aXN0aW5nRW1haWxVc2VySWQgJiYgJGV4aXN0aW5nRW1haWxVc2VySWQgIT0gJHVzZXJJZCkgfHwNCgkJCQkoJGV4aXN0aW5nVXNlcm5hbWVJZCAmJiAkZXhpc3RpbmdVc2VybmFtZUlkICE9ICR1c2VySWQpIHx8DQoJCQkJKCRleGlzdGluZ0VtYWlsVXNlcklkICYmICRleGlzdGluZ1VzZXJuYW1lSWQgJiYgJGV4aXN0aW5nRW1haWxVc2VySWQgIT0gJGV4aXN0aW5nVXNlcm5hbWVJZCkNCgkJCSkgew0KCQkJCXRocm93IG5ldyBOb1VzZXJJZEZvdW5kRXhjZXB0aW9uKA0KCQkJCQlUZXh0OjpzcHJpbnRmKA0KCQkJCQkJJ1VzZXIgSUQgbWlzbWF0Y2ggZGV0ZWN0ZWQgd2hlbiB0cnlpbmcgdG8gc2F2ZSAlcyAoJXMpIGNyZWRlbnRpYWxzLicsDQoJCQkJCQkkdXNlcm5hbWUsDQoJCQkJCQkkZW1haWwNCgkJCQkJKQ0KCQkJCSk7DQoJCQl9DQoNCgkJCS8vIFVwZGF0ZSB0aGUgZXhpc3RpbmcgdXNlci4NCgkJCXJldHVybiBzdGF0aWM6OnVwZGF0ZSgkY3JlZGVudGlhbHMpOw0KCQl9DQoNCgkJLy8gQ3JlYXRlIGEgbmV3IHVzZXIgaWYgbm8gZXhpc3RpbmcgdXNlciBpcyBmb3VuZC4NCgkJcmV0dXJuIHN0YXRpYzo6Y3JlYXRlKCRjcmVkZW50aWFscywgJGF1dG9sb2dpbiwgJHBhcmFtcywgJG1vZGUpOw0KCX0NCg0KCS8qKg0KCSAqIENyZWF0ZSBhIHVzZXIgYW5kIHVwZGF0ZSB0aGUgZ2l2ZW4gdGFibGUuDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgJGNyZWRlbnRpYWxzICBVc2VyIGNyZWRlbnRpYWxzIGluY2x1ZGluZyAnbmFtZScsICd1c2VybmFtZScsICdlbWFpbCcsICdwYXNzd29yZCcsIGFuZCAncGFzc3dvcmQyJy4NCgkgKiBAcGFyYW0gICBpbnQgICAgJGF1dG9sb2dpbiAgICBGbGFnIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGF1dG8tbG9naW4gdGhlIHVzZXIgYWZ0ZXIgcmVnaXN0cmF0aW9uLg0KCSAqIEBwYXJhbSAgIGFycmF5ICAkcGFyYW1zICAgICAgIFBhcmFtZXRlcnMgZm9yIHVzZXIgYWN0aXZhdGlvbiwgcGFzc3dvcmQgc2VuZGluZywgYW5kIHVzZXIgcmVnaXN0cmF0aW9uIGFsbG93YW5jZS4NCgkgKiBAcGFyYW0gICBpbnQgICAgJG1vZGUgICAgICAgICBNb2RlIG9mIHJlZ2lzdHJhdGlvbjogMSA9IFNpdGUgUmVnaXN0cmF0aW9uLCAwID0gQWRtaW4gUmVnaXN0cmF0aW9uLCAyID0gQ3VzdG9tIEhlbHBlciBNZXRob2QuDQoJICoNCgkgKiBAcmV0dXJuICBpbnQgVXNlciBJRCBvbiBzdWNjZXNzLg0KCSAqDQoJICogQHRocm93cyAgXFJ1bnRpbWVFeGNlcHRpb24gICAgICAgSWYgdXNlciBjcmVhdGlvbiBmYWlscy4NCgkgKiBAdGhyb3dzICBOb1VzZXJJZEZvdW5kRXhjZXB0aW9uICBJZiB0aGUgdXNlciBpcyBub3QgZm91bmQuDQoJICoNCgkgKiBAc2luY2UgICA1LjAuMw0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKGFycmF5ICRjcmVkZW50aWFscywgaW50ICRhdXRvbG9naW4gPSAwLA0KCQlhcnJheSAkcGFyYW1zID0gWyd1c2VyYWN0aXZhdGlvbicgPT4gMCwgJ3NlbmRwYXNzd29yZCcgPT4gMV0sIGludCAkbW9kZSA9IDEpOiBpbnQNCgl7DQoJCSRsYW5nID0gRmFjdG9yeTo6Z2V0TGFuZ3VhZ2UoKTsNCgkJJGxhbmctPmxvYWQoJ2NvbV91c2VycycsIEpQQVRIX1NJVEUsICdlbi1HQicsIHRydWUpOw0KDQoJCS8vIEhhbmRsZSBjdXN0b20gcmVnaXN0cmF0aW9uIG1vZGUNCgkJaWYgKCRtb2RlID09PSAyICYmIG1ldGhvZF9leGlzdHMoSm9vbWxhX19fYWViZmViOWZfZjhhM180MmJlX2EyMWRfNWRiNTZhZTMwYzFjX19fUG93ZXI6OmNsYXNzLCAncmVnaXN0ZXJVc2VyJykpDQoJCXsNCgkJCSRwYXJhbXNbJ2F1dG9sb2dpbiddID0gJGF1dG9sb2dpbjsNCgkJCSR1c2VySWQgPSBKb29tbGFfX19hZWJmZWI5Zl9mOGEzXzQyYmVfYTIxZF81ZGI1NmFlMzBjMWNfX19Qb3dlcjo6cmVnaXN0ZXJVc2VyKCRjcmVkZW50aWFscywgJHBhcmFtcyk7DQoNCgkJCWlmIChpc19udW1lcmljKCR1c2VySWQpKQ0KCQkJew0KCQkJCXJldHVybiAkdXNlcklkOw0KCQkJfQ0KDQoJCQl0aHJvdyBuZXcgTm9Vc2VySWRGb3VuZEV4Y2VwdGlvbihUZXh0OjpfKCdVc2VyIGNyZWF0aW9uIGZhaWxlZCEnKSk7DQoJCX0NCg0KCQkvLyBDaGVjayBpZiB3ZSBoYXZlIHBhcmFtcy9jb25maWcNCgkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkcGFyYW1zKSkNCgkJew0KCQkJLy8gTWFrZSBjaGFuZ2VzIHRvIHVzZXIgY29uZmlnDQoJCQlmb3JlYWNoICgkcGFyYW1zIGFzICRwYXJhbSA9PiAkc2V0KQ0KCQkJew0KCQkJCS8vIElmIHlvdSBrbm93IG9mIGEgYmV0dGVyIHBhdGgsIGxldCBtZSBrbm93DQoJCQkJJHBhcmFtc1skcGFyYW1dID0gQ29tcG9uZW50OjpzZXRQYXJhbXMoJHBhcmFtLCAkc2V0LCAnY29tX3VzZXJzJyk7DQoJCQl9DQoJCX0NCg0KCQkvLyBGYWxsYmFjayB0byBTaXRlIFJlZ2lzdHJhdGlvbnMgaWYgbW9kZSBpcyBzZXQgdG8gMiBidXQgdGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0DQoJCSRtb2RlID0gJG1vZGUgPT09IDIgPyAxIDogJG1vZGU7DQoNCgkJLy8gTG9hZCB0aGUgYXBwcm9wcmlhdGUgdXNlciBtb2RlbA0KCQkkbW9kZWwgPSBzdGF0aWM6OmdldE1vZGVsQnlNb2RlKCRtb2RlKTsNCg0KCQkvLyBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIG1pc3NpbmcgY3JlZGVudGlhbHMNCgkJJGNyZWRlbnRpYWxzWyd1c2VybmFtZSddID0gJGNyZWRlbnRpYWxzWyd1c2VybmFtZSddID8/ICRjcmVkZW50aWFsc1snZW1haWwnXTsNCg0KCQkvLyBQcmVwYXJlIHVzZXIgZGF0YQ0KCQkkZGF0YSA9IHN0YXRpYzo6cHJlcGFyZVVzZXJEYXRhKCRjcmVkZW50aWFscywgJG1vZGUpOw0KDQoJCS8vIFNldCBmb3JtIHBhdGggKGJ1ZyBmaXggZm9yIEpvb21sYSkNCgkJc3RhdGljOjpzZXRGb3JtUGF0aEZvclVzZXJDbGFzcygkbW9kZSk7DQoNCgkJLy8gSGFuZGxlIHVzZXIgY3JlYXRpb24NCgkJJHVzZXJJZCA9ICRtb2RlID09PSAxID8gJG1vZGVsLT5yZWdpc3RlcigkZGF0YSkgOiBzdGF0aWM6OmFkbWluUmVnaXN0ZXIoJG1vZGVsLCAkZGF0YSk7DQoNCgkJLy8gQ2hlY2sgaWYgd2UgaGF2ZSBwYXJhbXMNCgkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkcGFyYW1zKSkNCgkJew0KCQkJLy8gQ2hhbmdlIHVzZXIgcGFyYW1zL2NvbmZpZyBiYWNrDQoJCQlmb3JlYWNoICgkcGFyYW1zIGFzICRwYXJhbSA9PiAkc2V0KQ0KCQkJew0KCQkJCS8vIElmIHlvdSBrbm93IG9mIGEgYmV0dGVyIHBhdGgsIGxldCBtZSBrbm93DQoJCQkJQ29tcG9uZW50OjpzZXRQYXJhbXMoJHBhcmFtLCAkc2V0LCAnY29tX3VzZXJzJyk7DQoJCQl9DQoJCX0NCg0KCQlpZiAoISR1c2VySWQpDQoJCXsNCgkJCSRjdXJyZW50X3VzZXIgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5nZXRJZGVudGl0eSgpOw0KDQoJCQkvLyBvbmx5IGFsbG93IHRob3NlIHdpdGggYWNjZXNzIHRvIFVzZXJzIHRvIGlnbm9yZSBlcnJvcnMNCgkJCWlmICgkY3VycmVudF91c2VyLT5hdXRob3Jpc2UoJ2NvcmUubWFuYWdlJywgJ2NvbV91c2VycycpKQ0KCQkJew0KCQkJCSR1c2VySWQgPSBzdGF0aWM6OmdldFVzZXJJZEJ5VXNlcm5hbWUoJGNyZWRlbnRpYWxzWyd1c2VybmFtZSddKTsNCgkJCX0NCgkJfQ0KDQoJCWlmIChpc19udW1lcmljKCR1c2VySWQpICYmICR1c2VySWQgPiAwKQ0KCQl7DQoJCQkvLyBIYW5kbGUgcG9zdC1yZWdpc3RyYXRpb24gcHJvY2Vzc2VzDQoJCQlyZXR1cm4gc3RhdGljOjpoYW5kbGVQb3N0UmVnaXN0cmF0aW9uKCR1c2VySWQsICRhdXRvbG9naW4sICRjcmVkZW50aWFscyk7DQoJCX0NCg0KCQkkZXJyb3JfbWVzc2FnZXMgPSAnJzsNCgkJaWYgKG1ldGhvZF9leGlzdHMoJG1vZGVsLCAnZ2V0RXJyb3InKSkNCgkJew0KCQkJJGVycm9ycyA9ICRtb2RlbC0+Z2V0RXJyb3IoKTsNCgkJCWlmICghZW1wdHkoJGVycm9ycykpDQoJCQl7DQoJCQkJaWYgKGlzX2FycmF5KCRlcnJvcnMpKQ0KCQkJCXsNCgkJCQkJJGVycm9yX21lc3NhZ2VzID0gJzxicj4nIC4gaW1wbG9kZSgnPGJyPicsICRlcnJvcnMpOw0KCQkJCX0NCgkJCQllbHNlaWYgKGlzX3N0cmluZygkZXJyb3JzKSkNCgkJCQl7DQoJCQkJCSRlcnJvcl9tZXNzYWdlcyA9ICc8YnI+JyAuICRlcnJvcnM7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJdGhyb3cgbmV3IE5vVXNlcklkRm91bmRFeGNlcHRpb24oDQoJCQlUZXh0OjpzcHJpbnRmKCdVc2VyICVzICglcykgY3JlYXRpb24gZmFpbGVkISVzJywNCgkJCQkoc3RyaW5nKSAkY3JlZGVudGlhbHNbJ3VzZXJuYW1lJ10sDQoJCQkJKHN0cmluZykgJGNyZWRlbnRpYWxzWydlbWFpbCddLA0KCQkJCSRlcnJvcl9tZXNzYWdlcw0KCQkJKQ0KCQkpOw0KCX0NCg0KCS8qKg0KCSAqIFVwZGF0ZSB1c2VyIGRldGFpbHMuDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgJHVzZXJEZXRhaWxzICBBcnJheSBjb250YWluaW5nIHVzZXIgZGV0YWlscyB0byBiZSB1cGRhdGVkLg0KCSAqDQoJICogQHJldHVybiAgaW50ICAgVXBkYXRlZCB1c2VyIElEIG9uIHN1Y2Nlc3MuDQoJICoNCgkgKiBAdGhyb3dzICBcUnVudGltZUV4Y2VwdGlvbiAgSWYgdXNlciB1cGRhdGUgZmFpbHMuDQoJICoNCgkgKiBAc2luY2UgICA1LjAuMw0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXBkYXRlKGFycmF5ICR1c2VyRGV0YWlscyk6IGludA0KCXsNCgkJJGxhbmcgPSBGYWN0b3J5OjpnZXRMYW5ndWFnZSgpOw0KCQkkbGFuZy0+bG9hZCgnY29tX3VzZXJzJywgSlBBVEhfQURNSU5JU1RSQVRPUiwgJ2VuLUdCJywgdHJ1ZSk7DQoNCgkJJG1vZGVsID0gQ29tcG9uZW50OjpnZXRNb2RlbCgnVXNlcicsICdBZG1pbmlzdHJhdG9yJywgJ2NvbV91c2VycycpOw0KDQoJCS8vIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbWlzc2luZyBjcmVkZW50aWFscw0KCQkkdXNlckRldGFpbHNbJ3VzZXJuYW1lJ10gPSAkdXNlckRldGFpbHNbJ3VzZXJuYW1lJ10gPz8gJHVzZXJEZXRhaWxzWydlbWFpbCddOw0KDQoJCS8vIFByZXBhcmUgdXNlciBkYXRhIGZvciB1cGRhdGUNCgkJJGRhdGEgPSBbDQoJCQknaWQnID0+ICR1c2VyRGV0YWlsc1snaWQnXSwNCgkJCSd1c2VybmFtZScgPT4gJHVzZXJEZXRhaWxzWyd1c2VybmFtZSddLA0KCQkJJ25hbWUnID0+ICR1c2VyRGV0YWlsc1snbmFtZSddLA0KCQkJJ2VtYWlsJyA9PiAkdXNlckRldGFpbHNbJ2VtYWlsJ10sDQoJCQkncGFzc3dvcmQnID0+ICR1c2VyRGV0YWlsc1sncGFzc3dvcmQnXSA/PyBudWxsLA0KCQkJJ3Bhc3N3b3JkMicgPT4gJHVzZXJEZXRhaWxzWydwYXNzd29yZDInXSA/PyBudWxsLA0KCQkJJ2Jsb2NrJyA9PiAwDQoJCV07DQoNCgkJLy8gc2V0IGdyb3VwcyBpZiBmb3VuZA0KCQlpZiAoaXNzZXQoJHVzZXJEZXRhaWxzWydncm91cHMnXSkgJiYgQXJyYXlIZWxwZXI6OmNoZWNrKCR1c2VyRGV0YWlsc1snZ3JvdXBzJ10pKQ0KCQl7DQoJCQkkZGF0YVsnZ3JvdXBzJ10gPSAkdXNlckRldGFpbHNbJ2dyb3VwcyddOw0KCQl9DQoNCgkJLy8gVXBkYXRlIHRoZSB1c2VyDQoJCWlmICgkbW9kZWwtPnNhdmUoJGRhdGEpKQ0KCQl7DQoJCQlyZXR1cm4gJHVzZXJEZXRhaWxzWydpZCddOw0KCQl9DQoNCgkJJGVycm9yX21lc3NhZ2VzID0gJyc7DQoJCWlmIChtZXRob2RfZXhpc3RzKCRtb2RlbCwgJ2dldEVycm9yJykpDQoJCXsNCgkJCSRlcnJvcnMgPSAkbW9kZWwtPmdldEVycm9yKCk7DQoJCQlpZiAoIWVtcHR5KCRlcnJvcnMpKQ0KCQkJew0KCQkJCWlmIChpc19hcnJheSgkZXJyb3JzKSkNCgkJCQl7DQoJCQkJCSRlcnJvcl9tZXNzYWdlcyA9ICc8YnI+JyAuIGltcGxvZGUoJzxicj4nLCAkZXJyb3JzKTsNCgkJCQl9DQoJCQkJZWxzZWlmIChpc19zdHJpbmcoJGVycm9ycykpDQoJCQkJew0KCQkJCQkkZXJyb3JfbWVzc2FnZXMgPSAnPGJyPicgLiAkZXJyb3JzOw0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCXRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigNCgkJCVRleHQ6OnNwcmludGYoJ1VwZGF0ZSBvZiB1c2VyICVzICglcykgZmFpbGVkISVzJywNCgkJCQkoc3RyaW5nKSAkdXNlckRldGFpbHNbJ3VzZXJuYW1lJ10sDQoJCQkJKHN0cmluZykgJHVzZXJEZXRhaWxzWydlbWFpbCddLA0KCQkJCShzdHJpbmcpICRlcnJvcl9tZXNzYWdlcw0KCQkJKQ0KCQkpOw0KCX0NCg0KCS8qKg0KCSAqIE1ldGhvZCB0byBnZXQgYW4gaW5zdGFuY2Ugb2YgYSB1c2VyIGZvciB0aGUgZ2l2ZW4gaWQuDQoJICoNCgkgKiBAcGFyYW0gICBpbnQgICRpZCAgVGhlIGlkDQoJICoNCgkgKiBAcmV0dXJuICBVc2VyDQoJICoNCgkgKiBAc2luY2UgICA1LjAuMw0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VXNlckJ5SWQoaW50ICRpZCk6IFVzZXINCgl7DQoJCSByZXR1cm4gbmV3IFVzZXIoJGlkKTsNCgl9DQoNCgkvKioNCgkgKiBSZXRyaWV2ZSB0aGUgdXNlciBJRCBieSB1c2VybmFtZS4NCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJHVzZXJuYW1lICBUaGUgdXNlcm5hbWUgdG8gY2hlY2suDQoJICoNCgkgKiBAcmV0dXJuICBpbnR8bnVsbCAgVGhlIHVzZXIgSUQgaWYgdGhlIHVzZXIgZXhpc3RzLCBudWxsIG90aGVyd2lzZS4NCgkgKg0KCSAqIEBzaW5jZSAgIDUuMC4zDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRVc2VySWRCeVVzZXJuYW1lKHN0cmluZyAkdXNlcm5hbWUpOiA/aW50DQoJew0KCQkkdXNlcklkID0gSm9vbWxhVXNlckhlbHBlcjo6Z2V0VXNlcklkKCR1c2VybmFtZSk7DQoJCXJldHVybiAkdXNlcklkID86IG51bGw7DQoJfQ0KDQoJLyoqDQoJICogUmV0cmlldmUgdGhlIHVzZXIgSUQgYnkgZW1haWwuDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICRlbWFpbCAgVGhlIGVtYWlsIGFkZHJlc3MgdG8gY2hlY2suDQoJICoNCgkgKiBAcmV0dXJuICBpbnR8bnVsbCAgVGhlIHVzZXIgSUQgaWYgdGhlIHVzZXIgZXhpc3RzLCBudWxsIG90aGVyd2lzZS4NCgkgKg0KCSAqIEBzaW5jZSAgIDUuMC4zDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRVc2VySWRCeUVtYWlsKHN0cmluZyAkZW1haWwpOiA/aW50DQoJew0KCQkvLyBJbml0aWFsaXNlIHNvbWUgdmFyaWFibGVzDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpDQoJCQktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgnaWQnKSkNCgkJCS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fdXNlcnMnKSkNCgkJCS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2VtYWlsJykgLiAnID0gOmVtYWlsJykNCgkJCS0+YmluZCgnOmVtYWlsJywgJGVtYWlsKQ0KCQkJLT5zZXRMaW1pdCgxKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KDQoJCSR1c2VySWQgPSAkZGItPmxvYWRSZXN1bHQoKTsNCgkJcmV0dXJuICR1c2VySWQgPzogbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBMb2FkIHRoZSBjb3JyZWN0IHVzZXIgbW9kZWwgYmFzZWQgb24gdGhlIHJlZ2lzdHJhdGlvbiBtb2RlLg0KCSAqDQoJICogQHBhcmFtICAgaW50ICAkbW9kZSAgVGhlIHJlZ2lzdHJhdGlvbiBtb2RlLg0KCSAqDQoJICogQHJldHVybiAgQmFzZURhdGFiYXNlTW9kZWwgIFRoZSBhcHByb3ByaWF0ZSB1c2VyIG1vZGVsLg0KCSAqDQoJICogQHNpbmNlICAgNS4wLjMNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldE1vZGVsQnlNb2RlKGludCAkbW9kZSk6IEJhc2VEYXRhYmFzZU1vZGVsDQoJew0KCQlpZiAoJG1vZGUgPT09IDEpDQoJCXsNCgkJCXJldHVybiBDb21wb25lbnQ6OmdldE1vZGVsKCdSZWdpc3RyYXRpb24nLCAnU2l0ZScsICdjb21fdXNlcnMnKTsNCgkJfQ0KDQoJCXJldHVybiBDb21wb25lbnQ6OmdldE1vZGVsKCdVc2VyJywgJ0FkbWluaXN0cmF0b3InLCAnY29tX3VzZXJzJyk7DQoJfQ0KDQoJLyoqDQoJICogUHJlcGFyZSB1c2VyIGRhdGEgYXJyYXkgZm9yIHJlZ2lzdHJhdGlvbiBvciB1cGRhdGUuDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgJGNyZWRlbnRpYWxzICBVc2VyIGNyZWRlbnRpYWxzLg0KCSAqIEBwYXJhbSAgIGludCAgICAkbW9kZSAgICAgICAgIFRoZSByZWdpc3RyYXRpb24gbW9kZS4NCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5ICBUaGUgcHJlcGFyZWQgdXNlciBkYXRhIGFycmF5Lg0KCSAqDQoJICogQHNpbmNlICAgNS4wLjMNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHByZXBhcmVVc2VyRGF0YShhcnJheSAkY3JlZGVudGlhbHMsIGludCAkbW9kZSkNCgl7DQoJCSRkYXRhID0gWw0KCQkJJ3VzZXJuYW1lJyA9PiAkY3JlZGVudGlhbHNbJ3VzZXJuYW1lJ10sDQoJCQknbmFtZScgPT4gJGNyZWRlbnRpYWxzWyduYW1lJ10sDQoJCQknYmxvY2snID0+IDANCgkJXTsNCg0KCQlpZiAoJG1vZGUgPT09IDEpDQoJCXsNCgkJCSRkYXRhWydlbWFpbDEnXSA9ICRjcmVkZW50aWFsc1snZW1haWwnXTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRkYXRhWydlbWFpbCddID0gJGNyZWRlbnRpYWxzWydlbWFpbCddOw0KCQkJJGRhdGFbJ3JlZ2lzdGVyRGF0ZSddID0gRmFjdG9yeTo6Z2V0RGF0ZSgpLT50b1NxbCgpOw0KCQl9DQoNCgkJaWYgKCRtb2RlID09PSAxICYmIGVtcHR5KCRjcmVkZW50aWFsc1sncGFzc3dvcmQnXSkpDQoJCXsNCgkJCSRjcmVkZW50aWFsc1sncGFzc3dvcmQnXSA9IFN0cmluZ0hlbHBlcjo6cmFuZG9tKDEwKTsNCgkJCSRjcmVkZW50aWFsc1sncGFzc3dvcmQyJ10gPSAkY3JlZGVudGlhbHNbJ3Bhc3N3b3JkJ107DQoJCX0NCg0KCQlpZiAoIWVtcHR5KCRjcmVkZW50aWFsc1sncGFzc3dvcmQnXSkgJiYgIWVtcHR5KCRjcmVkZW50aWFsc1sncGFzc3dvcmQyJ10pKQ0KCQl7DQoJCQkkZGF0YVsncGFzc3dvcmQxJ10gPSAkY3JlZGVudGlhbHNbJ3Bhc3N3b3JkJ107DQoJCQkkZGF0YVsncGFzc3dvcmQyJ10gPSAkY3JlZGVudGlhbHNbJ3Bhc3N3b3JkMiddOw0KCQl9DQoNCgkJaWYgKCRtb2RlID09PSAwICYmIGlzc2V0KCRjcmVkZW50aWFsc1snZ3JvdXBzJ10pICYmIEFycmF5SGVscGVyOjpjaGVjaygkY3JlZGVudGlhbHNbJ2dyb3VwcyddKSkNCgkJew0KCQkJJGRhdGFbJ2dyb3VwcyddID0gJGNyZWRlbnRpYWxzWydncm91cHMnXTsNCgkJfQ0KDQoJCXJldHVybiAkZGF0YTsNCgl9DQoNCgkvKioNCgkgKiBIYW5kbGUgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGZvciBhZG1pbiBtb2RlLg0KCSAqDQoJICogQHBhcmFtICAgQmFzZURhdGFiYXNlTW9kZWwgICRtb2RlbCAgVGhlIHVzZXIgbW9kZWwuDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICAgICAgICRkYXRhICAgVGhlIHVzZXIgZGF0YS4NCgkgKg0KCSAqIEByZXR1cm4gIGludCAgVGhlIElEIG9mIHRoZSBjcmVhdGVkIHVzZXIuDQoJICoNCgkgKiBAc2luY2UgICA1LjAuMw0KCSAqLw0KCXByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGFkbWluUmVnaXN0ZXIoQmFzZURhdGFiYXNlTW9kZWwgJG1vZGVsLCBhcnJheSAkZGF0YSk6IGludA0KCXsNCgkJJG1vZGVsLT5zYXZlKCRkYXRhKTsNCg0KCQlyZXR1cm4gJG1vZGVsLT5nZXRTdGF0ZSgndXNlci5pZCcsIDApOw0KCX0NCg0KCS8qKg0KCSAqIEhhbmRsZSBwb3N0LXJlZ2lzdHJhdGlvbiBwcm9jZXNzZXMgbGlrZSBhdXRvLWxvZ2luLg0KCSAqDQoJICogQHBhcmFtICAgaW50ICAgICR1c2VySWQgICAgICBUaGUgSUQgb2YgdGhlIGNyZWF0ZWQgdXNlci4NCgkgKiBAcGFyYW0gICBpbnQgICAgJGF1dG9sb2dpbiAgIEZsYWcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gYXV0by1sb2dpbiB0aGUgdXNlci4NCgkgKiBAcGFyYW0gICBhcnJheSAgJGNyZWRlbnRpYWxzIFRoZSB1c2VyIGNyZWRlbnRpYWxzLg0KCSAqDQoJICogQHJldHVybiAgaW50IFRoZSB1c2VyIElEIG9uIHN1Y2Nlc3MuDQoJICoNCgkgKiBAc2luY2UgICA1LjAuMw0KCSAqLw0KCXByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGhhbmRsZVBvc3RSZWdpc3RyYXRpb24oaW50ICR1c2VySWQsIGludCAkYXV0b2xvZ2luLCBhcnJheSAkY3JlZGVudGlhbHMpOiBpbnQNCgl7DQoJCS8vIG1ha2Ugc3VyZSB1c2VyIGlzIGl0IHRoZSBjb3JyZWN0IGdyb3Vwcw0KCQlpZiAoJHVzZXJJZCA+IDAgJiYgIWVtcHR5KCRjcmVkZW50aWFsc1snZ3JvdXBzJ10pKQ0KCQl7DQoJCQl0cnkNCgkJCXsNCgkJCQlKb29tbGFVc2VySGVscGVyOjpzZXRVc2VyR3JvdXBzKCR1c2VySWQsICRjcmVkZW50aWFsc1snZ3JvdXBzJ10pOw0KCQkJfQ0KCQkJY2F0Y2ggKFxFeGNlcHRpb24gJGUpDQoJCQl7DQoJCQkJLy8gd2UgbWlnaHQgbmVlZCBzYXkgc29tZXRoaW5nDQoJCQl9DQoJCX0NCg0KCQlpZiAoJGF1dG9sb2dpbiAmJiAhZW1wdHkoJGNyZWRlbnRpYWxzWydwYXNzd29yZCddKSkNCgkJew0KCQkJdHJ5DQoJCQl7DQoJCQkJRmFjdG9yeTo6Z2V0QXBwbGljYXRpb24oKS0+bG9naW4oJGNyZWRlbnRpYWxzKTsNCgkJCX0NCgkJCWNhdGNoIChcRXhjZXB0aW9uICRlKQ0KCQkJew0KCQkJCS8vIHdlIG1pZ2h0IG5lZWQgdG8gcmVkaXJlY3QgaGVyZT8NCgkJCX0NCgkJfQ0KDQoJCXJldHVybiAkdXNlcklkOw0KCX0NCg0KCS8qKg0KCSAqIEFkZHJlc3MgYnVnIG9uIFxKb29tbGFcQ01TXE1WQ1xNb2RlbFxGb3JtQmVoYXZpb3JUcmFpdCBMaW5lIDc2DQoJICogICBUaGUgdXNlIG9mIEpQQVRIX0NPTVBPTkVOVCBjYXVzZSBpdCB0byBsb2FkIHRoZQ0KCSAqICAgYWN0aXZlIGNvbXBvbmVudCBmb3JtcyBhbmQgZmllbGRzLCB3aGljaCBicmVha3MgdGhlIHJlZ2lzdHJhdGlvbiBtb2RlbC4NCgkgKg0KCSAqIEBwYXJhbSBpbnQgICRtb2RlDQoJICoNCgkgKiBAc2luY2UgNS4wLjMNCgkgKi8NCglwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBzZXRGb3JtUGF0aEZvclVzZXJDbGFzcyhpbnQgJG1vZGUpOiB2b2lkDQoJew0KCQlpZiAoJG1vZGUgPT0gMSkgLy8gMSA9IHVzZSBvZiB0aGUgUmVnaXN0cmF0aW9uIE1vZGVsDQoJCXsNCgkJCS8vIEdldCB0aGUgZm9ybS4NCgkJCUZvcm06OmFkZEZvcm1QYXRoKEpQQVRIX1JPT1QgLiAnL2NvbXBvbmVudHMvY29tX3VzZXJzL2Zvcm1zJyk7DQoJCX0NCgl9', '{}', '{}', NULL, 1, '2024-08-29 15:27:21', 46, 0, 1), (822, '46b98346-ec98-42b3-a393-96c7d1282b1c', 'VDM.Data.UsersSubform', 'UsersSubform', 'final class', 'CRUD the user data of any sub-form to another view (table)\r\n\r\n@since 5.0.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '{\"0\":\"576685fd-263c-46bb-9fdc-1f5eb234cbb6\",\"1\":\"34959721-415b-4b5e-8002-3d1fc84b3b2b\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Data.UsersSubform', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcQ01TXFVzZXJcVXNlcjs=', '{\"use_selection0\":{\"use\":\"7212e4db-371f-4cfd-8122-32e9bb100d83\",\"as\":\"Items\"},\"use_selection1\":{\"use\":\"5acded67-0e3d-4c6b-a6ea-b533b076de0c\",\"as\":\"default\"},\"use_selection2\":{\"use\":\"7832a726-87b6-4e95-887e-7b725d3fab8f\",\"as\":\"default\"},\"use_selection3\":{\"use\":\"1c10a5f1-204d-4f17-ad9f-0e0684f2030d\",\"as\":\"default\"},\"use_selection4\":{\"use\":\"640b5352-fb09-425f-a26e-cd44eda03f15\",\"as\":\"Component\"}}', 'CS8qKg0KCSAqIFRoZSBHbG9iYWxseSBVbmlxdWUgSWRlbnRpZmllci4NCgkgKg0KCSAqIEBzaW5jZSA1LjAuMg0KCSAqLw0KCXVzZSBHdWlkOw0KDQoJLyoqDQoJICogVGhlIEl0ZW1zIENsYXNzLg0KCSAqDQoJICogQHZhciAgIEl0ZW1zDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHJvdGVjdGVkIEl0ZW1zICRpdGVtczsNCg0KCS8qKg0KCSAqIFRhYmxlIE5hbWUNCgkgKg0KCSAqIEB2YXIgICAgc3RyaW5nDQoJICogQHNpbmNlIDMuMi4xDQoJICovDQoJcHJvdGVjdGVkIHN0cmluZyAkdGFibGU7DQoNCgkvKioNCgkgKiBUaGUgdXNlciBwcm9wZXJ0aWVzDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICogQHNpbmNlIDUuMC4yDQoJICovDQoJcHJvdGVjdGVkIGFycmF5ICR1c2VyOw0KDQoJLyoqDQoJICogVGhlIGN1cnJlbnQgYWN0aXZlIHVzZXINCgkgKg0KCSAqIEB2YXIgICAgVXNlcg0KCSAqIEBzaW5jZSA1LjAuMg0KCSAqLw0KCXByb3RlY3RlZCBVc2VyICRpZGVudGl0eTsNCg0KCS8qKg0KCSAqIFRoZSBhY3RpdmUgdXNlcnMNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgNS4wLjINCgkgKi8NCglwcm90ZWN0ZWQgYXJyYXkgJGFjdGl2ZVVzZXJzID0gW107DQoNCgkvKioNCgkgKiBDb25zdHJ1Y3Rvci4NCgkgKg0KCSAqIEBwYXJhbSBJdGVtcyAgICAgICAkaXRlbXMgICBUaGUgaXRlbXMgQ2xhc3MuDQoJICogQHBhcmFtIHN0cmluZ3xudWxsICR0YWJsZSAgIFRoZSB0YWJsZSBuYW1lLg0KCSAqDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEl0ZW1zICRpdGVtcywgP3N0cmluZyAkdGFibGUgPSBudWxsKQ0KCXsNCgkJJHRoaXMtPml0ZW1zID0gJGl0ZW1zOw0KCQlpZiAoJHRhYmxlICE9PSBudWxsKQ0KCQl7DQoJCQkkdGhpcy0+dGFibGUgPSAkdGFibGU7DQoJCX0NCg0KCQkkdGhpcy0+aWRlbnRpdHkgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5nZXRJZGVudGl0eSgpOw0KDQoJCS8vIFJldHJpZXZlIHRoZSB1c2VyIHByb3BlcnRpZXMNCgkJJHRoaXMtPmluaXRpYWxpemVVc2VyUHJvcGVydGllcygpOw0KCX0NCg0KCS8qKg0KCSAqIFNldCB0aGUgY3VycmVudCBhY3RpdmUgdGFibGUNCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlIFRoZSB0YWJsZSB0aGF0IHNob3VsZCBiZSBhY3RpdmUNCgkgKg0KCSAqIEByZXR1cm4gc2VsZg0KCSAqIEBzaW5jZSAgMy4yLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gdGFibGUoc3RyaW5nICR0YWJsZSk6IHNlbGYNCgl7DQoJCSR0aGlzLT50YWJsZSA9ICR0YWJsZTsNCg0KCQlyZXR1cm4gJHRoaXM7DQoJfQ0KDQoJLyoqDQoJICogR2V0IGEgc3ViZm9ybSBpdGVtcw0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAgICRsaW5rVmFsdWUgIFRoZSB2YWx1ZSBvZiB0aGUgbGluayBrZXkgaW4gY2hpbGQgdGFibGUuDQoJICogQHBhcmFtIHN0cmluZyAgICRsaW5rS2V5ICAgIFRoZSBsaW5rIGtleSBvbiB3aGljaCB0aGUgaXRlbXMgd2hlcmUgbGlua2VkIGluIHRoZSBjaGlsZCB0YWJsZS4NCgkgKiBAcGFyYW0gc3RyaW5nICAgJGZpZWxkICAgICAgVGhlIHBhcmVudCBmaWVsZCBuYW1lIG9mIHRoZSBzdWJmb3JtIGluIHRoZSBwYXJlbnQgdmlldy4NCgkgKiBAcGFyYW0gYXJyYXkgICAgJGdldCAgICAgICAgVGhlIGFycmF5IGdldDpzZXQgb2YgdGhlIGtleXMgb2YgZWFjaCByb3cgaW4gdGhlIHN1YmZvcm0uDQoJICogQHBhcmFtIGJvb2wgICAgICRtdWx0aSAgICAgIFRoZSBzd2l0Y2ggdG8gcmV0dXJuIGEgbXVsdGlwbGUgc2V0Lg0KCSAqDQoJICogQHJldHVybiBhcnJheXxudWxsICAgVGhlIHN1YmZvcm0NCgkgKiBAc2luY2UgIDMuMi4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldChzdHJpbmcgJGxpbmtWYWx1ZSwgc3RyaW5nICRsaW5rS2V5LCBzdHJpbmcgJGZpZWxkLCBhcnJheSAkZ2V0LCBib29sICRtdWx0aSA9IHRydWUpOiA/YXJyYXkNCgl7DQoJCWlmICgoJGl0ZW1zID0gJHRoaXMtPml0ZW1zLT50YWJsZSgkdGhpcy0+Z2V0VGFibGUoKSktPmdldChbJGxpbmtWYWx1ZV0sICRsaW5rS2V5KSkgIT09IG51bGwpDQoJCXsNCgkJCXJldHVybiAkdGhpcy0+Y29udmVydGVyKA0KCQkJCSR0aGlzLT5nZXRVc2Vyc0RldGFpbHMoJGl0ZW1zKSwNCgkJCQkkZ2V0LA0KCQkJCSRmaWVsZCwNCgkJCQkkbXVsdGkNCgkJCSk7DQoJCX0NCg0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBTZXQgYSBzdWJmb3JtIGl0ZW1zDQoJICoNCgkgKiBAcGFyYW0gbWl4ZWQgICAgJGl0ZW1zICAgICAgVGhlIGxpc3Qgb2YgaXRlbXMgZnJvbSB0aGUgc3ViZm9ybSB0byBzZXQNCgkgKiBAcGFyYW0gc3RyaW5nICAgJGluZGV4S2V5ICAgVGhlIGluZGV4IGtleSBvbiB3aGljaCB0aGUgaXRlbXMgc2hvdWxkIGJlIG9ic2VydmVkIGFzIGl0IHJlbGF0ZXMgdG8gaW5zZXJ0L3VwZGF0ZS9kZWxldGUuDQoJICogQHBhcmFtIHN0cmluZyAgICRsaW5rS2V5ICAgIFRoZSBsaW5rIGtleSBvbiB3aGljaCB0aGUgaXRlbXMgd2hlcmUgbGlua2VkIGluIHRoZSBjaGlsZCB0YWJsZS4NCgkgKiBAcGFyYW0gc3RyaW5nICAgJGxpbmtWYWx1ZSAgVGhlIHZhbHVlIG9mIHRoZSBsaW5rIGtleSBpbiBjaGlsZCB0YWJsZS4NCgkgKg0KCSAqIEByZXR1cm4gYm9vbA0KCSAqIEBzaW5jZSAgMy4yLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gc2V0KG1peGVkICRpdGVtcywgc3RyaW5nICRpbmRleEtleSwgc3RyaW5nICRsaW5rS2V5LCBzdHJpbmcgJGxpbmtWYWx1ZSk6IGJvb2wNCgl7DQoJCSRpdGVtcyA9ICR0aGlzLT5wcm9jZXNzKCRpdGVtcywgJGluZGV4S2V5LCAkbGlua0tleSwgJGxpbmtWYWx1ZSk7DQoNCgkJJHRoaXMtPnB1cmdlKCRpdGVtcywgJGluZGV4S2V5LCAkbGlua0tleSwgJGxpbmtWYWx1ZSk7DQoNCgkJaWYgKGVtcHR5KCRpdGVtcykpDQoJCXsNCgkJCXJldHVybiB0cnVlOyAvLyBub3RoaW5nIHRvIHNldCAoYWxyZWFkeSBwdXJnZWQpDQoJCX0NCg0KCQlyZXR1cm4gJHRoaXMtPml0ZW1zLT50YWJsZSgkdGhpcy0+Z2V0VGFibGUoKSktPnNldCgNCgkJCSRpdGVtcywgJGluZGV4S2V5DQoJCSk7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSBjdXJyZW50IGFjdGl2ZSB0YWJsZQ0KCSAqDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogQHNpbmNlICAgMy4yLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0VGFibGUoKTogc3RyaW5nDQoJew0KCQlyZXR1cm4gJHRoaXMtPnRhYmxlOw0KCX0NCg0KCS8qKg0KCSAqIEluaXRpYWxpemVzIHRoZSB1c2VyIHByb3BlcnRpZXMuDQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKiBAc2luY2UgIDUuMC4yDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBpbml0aWFsaXplVXNlclByb3BlcnRpZXMoKTogdm9pZA0KCXsNCgkJJHVzZXIgPSBVc2VySGVscGVyOjpnZXRVc2VyQnlJZCgwKTsNCg0KCQkvLyBQb3B1bGF0ZSB1c2VyIHByb3BlcnRpZXMgYXJyYXkgZXhjbHVkaW5nIHRoZSAnaWQnDQoJCWZvcmVhY2ggKGdldF9vYmplY3RfdmFycygkdXNlcikgYXMgJHByb3BlcnR5ID0+ICR2YWx1ZSkNCgkJew0KCQkJaWYgKCRwcm9wZXJ0eSAhPT0gJ2lkJykNCgkJCXsNCgkJCQkkdGhpcy0+dXNlclskcHJvcGVydHldID0gJHByb3BlcnR5Ow0KCQkJfQ0KCQl9DQoJCSR0aGlzLT51c2VyWydwYXNzd29yZDInXSA9ICdwYXNzd29yZDInOw0KCX0NCg0KCS8qKg0KCSAqIFB1cmdlIGFsbCBpdGVtcyBubyBsb25nZXIgaW4gc3ViZm9ybQ0KCSAqDQoJICogQHBhcmFtIGFycmF5ICAgICRpdGVtcyAgICAgIFRoZSBsaXN0IG9mIGl0ZW1zIHRvIHNldC4NCgkgKiBAcGFyYW0gc3RyaW5nICAgJGluZGV4S2V5ICAgVGhlIGluZGV4IGtleSBvbiB3aGljaCB0aGUgaXRlbXMgc2hvdWxkIGJlIG9ic2VydmVkIGFzIGl0IHJlbGF0ZXMgdG8gaW5zZXJ0L3VwZGF0ZS9kZWxldGUNCgkgKiBAcGFyYW0gc3RyaW5nICAgJGxpbmtLZXkgICAgVGhlIGxpbmsga2V5IG9uIHdoaWNoIHRoZSBpdGVtcyB3aGVyZSBsaW5rZWQgaW4gdGhlIGNoaWxkIHRhYmxlLg0KCSAqIEBwYXJhbSBzdHJpbmcgICAkbGlua1ZhbHVlICBUaGUgdmFsdWUgb2YgdGhlIGxpbmsga2V5IGluIGNoaWxkIHRhYmxlLg0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlICAzLjIuMg0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gcHVyZ2UoYXJyYXkgJGl0ZW1zLCBzdHJpbmcgJGluZGV4S2V5LCBzdHJpbmcgJGxpbmtLZXksIHN0cmluZyAkbGlua1ZhbHVlKTogdm9pZA0KCXsNCgkJLy8gR2V0IHRoZSBjdXJyZW50IGluZGV4IHZhbHVlcyBmcm9tIHRoZSBkYXRhYmFzZQ0KCQkkY3VycmVudEluZGV4VmFsdWVzID0gJHRoaXMtPml0ZW1zLT50YWJsZSgkdGhpcy0+Z2V0VGFibGUoKSktPnZhbHVlcyhbJGxpbmtWYWx1ZV0sICRsaW5rS2V5LCAkaW5kZXhLZXkpOw0KDQoJCWlmICgkY3VycmVudEluZGV4VmFsdWVzICE9PSBudWxsKQ0KCQl7DQoJCQkvLyBDaGVjayBpZiB0aGUgaXRlbXMgYXJyYXkgaXMgZW1wdHkNCgkJCWlmIChlbXB0eSgkaXRlbXMpKQ0KCQkJew0KCQkJCS8vIFNldCBhY3RpdmVJbmRleFZhbHVlcyB0byBhbiBlbXB0eSBhcnJheSBpZiBpdGVtcyBpcyBlbXB0eQ0KCQkJCSRhY3RpdmVJbmRleFZhbHVlcyA9IFtdOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIEV4dHJhY3QgdGhlIGluZGV4IHZhbHVlcyBmcm9tIHRoZSBpdGVtcyBhcnJheQ0KCQkJCSRhY3RpdmVJbmRleFZhbHVlcyA9IGFycmF5X3ZhbHVlcyhhcnJheV9tYXAoZnVuY3Rpb24oJGl0ZW0pIHVzZSAoJGluZGV4S2V5KSB7DQoJCQkJCXJldHVybiAkaXRlbVskaW5kZXhLZXldID8/IG51bGw7DQoJCQkJfSwgJGl0ZW1zKSk7DQoJCQl9DQoNCgkJCS8vIEZpbmQgdGhlIGluZGV4IHZhbHVlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGl0ZW1zIGFycmF5DQoJCQkkaW5hY3RpdmVJbmRleFZhbHVlcyA9IGFycmF5X2RpZmYoJGN1cnJlbnRJbmRleFZhbHVlcywgJGFjdGl2ZUluZGV4VmFsdWVzKTsNCg0KCQkJLy8gRGVsZXRlIHRoZSBpbmFjdGl2ZSBpbmRleCB2YWx1ZXMNCgkJCWlmICghZW1wdHkoJGluYWN0aXZlSW5kZXhWYWx1ZXMpKQ0KCQkJew0KCQkJCSR0aGlzLT5pdGVtcy0+dGFibGUoJHRoaXMtPmdldFRhYmxlKCkpLT5kZWxldGUoJGluYWN0aXZlSW5kZXhWYWx1ZXMsICRpbmRleEtleSk7DQoNCgkJCQkvLyAkdGhpcy0+ZGVsZXRlVXNlcnMoJGluYWN0aXZlSW5kZXhWYWx1ZXMpOyAoc29vbikNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEdldCB0aGUgdXNlcnMgZGV0YWlscyBmb3VuZCBpbiB0aGUgdXNlciB0YWJsZS4NCgkgKg0KCSAqIEBwYXJhbSBhcnJheSAgJGl0ZW1zICBBcnJheSBvZiBvYmplY3RzIG9yIGFycmF5cyB0byBiZSBmaWx0ZXJlZC4NCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKiBAc2luY2UgIDUuMC4yDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBnZXRVc2Vyc0RldGFpbHMoYXJyYXkgJGl0ZW1zKTogYXJyYXkNCgl7DQoJCWZvcmVhY2ggKCRpdGVtcyBhcyAkaW5kZXggPT4gJiRpdGVtKQ0KCQl7DQoJCQkkaXRlbSA9IChhcnJheSkgJGl0ZW07DQoJCQkkdGhpcy0+Z2V0VXNlckRldGFpbHMoJGl0ZW0pOw0KCQl9DQoNCgkJcmV0dXJuICRpdGVtczsNCgl9DQoNCgkvKioNCgkgKiBHZXQgdGhlIHVzZXIgZGV0YWlscyBmb3VuZCBpbiB0aGUgdXNlciB0YWJsZS4NCgkgKg0KCSAqIEBwYXJhbSBhcnJheSAgJGl0ZW0gIFRoZSB1c2VyIG1hcCBhcnJheQ0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlICA1LjAuMg0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gZ2V0VXNlckRldGFpbHMoYXJyYXkgJiRpdGVtKTogdm9pZA0KCXsNCgkJLy8gVmFsaWRhdGUgdGhlIHVzZXJfaWQgYW5kIGVuc3VyZSBpdCBpcyBudW1lcmljIGFuZCBncmVhdGVyIHRoYW4gMA0KCQlpZiAoZW1wdHkoJGl0ZW1bJ3VzZXJfaWQnXSkgfHwgIWlzX251bWVyaWMoJGl0ZW1bJ3VzZXJfaWQnXSkgfHwgJGl0ZW1bJ3VzZXJfaWQnXSA8PSAwKQ0KCQl7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQkvLyBSZXRyaWV2ZSB0aGUgdXNlciBieSBJRA0KCQkkdXNlciA9IFVzZXJIZWxwZXI6OmdldFVzZXJCeUlkKChpbnQpJGl0ZW1bJ3VzZXJfaWQnXSk7DQoNCgkJLy8gVmVyaWZ5IGlmIHRoZSB1c2VyIGV4aXN0cyBhbmQgdGhlIElEIG1hdGNoZXMNCgkJaWYgKCR1c2VyICYmICR1c2VyLT5pZCA9PT0gKGludCkgJGl0ZW1bJ3VzZXJfaWQnXSkNCgkJew0KCQkJLy8gSXRlcmF0ZSBvdmVyIHB1YmxpYyBwcm9wZXJ0aWVzIG9mIHRoZSB1c2VyIG9iamVjdA0KCQkJZm9yZWFjaCAoZ2V0X29iamVjdF92YXJzKCR1c2VyKSBhcyAkcHJvcGVydHkgPT4gJHZhbHVlKQ0KCQkJew0KCQkJCS8vIEF2b2lkIG92ZXJ3cml0aW5nIHRoZSBpZCBpbiB0aGUgaXRlbQ0KCQkJCWlmICgkcHJvcGVydHkgIT09ICdpZCcpDQoJCQkJew0KCQkJCQkkaXRlbVskcHJvcGVydHldID0gJHZhbHVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEZpbHRlcnMgdGhlIHNwZWNpZmllZCBrZXlzIGZyb20gYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciBhcnJheXMsIGNvbnZlcnRzIHRoZW0gdG8gYXJyYXlzLA0KCSAqIGFuZCBzZXRzIHRoZW0gYnkgYXNzb2NpYXRpb24gd2l0aCBhIHNwZWNpZmllZCBrZXkgYW5kIGFuIGluY3JlbWVudGluZyBpbnRlZ2VyLg0KCSAqDQoJICogQHBhcmFtIGFycmF5ICAkaXRlbXMgIEFycmF5IG9mIG9iamVjdHMgb3IgYXJyYXlzIHRvIGJlIGZpbHRlcmVkLg0KCSAqIEBwYXJhbSBhcnJheSAgJGtleVNldCBBcnJheSBvZiBrZXlzIHRvIHJldGFpbiBpbiBlYWNoIGl0ZW0uDQoJICogQHBhcmFtIHN0cmluZyAkZmllbGQgIFRoZSBmaWVsZCBwcmVmaXggZm9yIHRoZSByZXN1bHRpbmcgYXNzb2NpYXRpdmUgYXJyYXkuDQoJICogQHBhcmFtIGJvb2wgICAkbXVsdGkgIFRoZSBzd2l0Y2ggdG8gcmV0dXJuIGEgbXVsdGlwbGUgc2V0Lg0KCSAqDQoJICogQHJldHVybiBhcnJheSBBcnJheSBvZiBmaWx0ZXJlZCBhcnJheXMgc2V0IGJ5IGFzc29jaWF0aW9uLg0KCSAqIEBzaW5jZSAgMy4yLjINCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIGNvbnZlcnRlcihhcnJheSAkaXRlbXMsIGFycmF5ICRrZXlTZXQsIHN0cmluZyAkZmllbGQsIGJvb2wgJG11bHRpKTogYXJyYXkNCgl7DQoJCS8qKg0KCQkgKiBGaWx0ZXJzIGtleXMgZm9yIGEgc2luZ2xlIGl0ZW0gYW5kIGNvbnZlcnRzIGl0IHRvIGFuIGFycmF5Lg0KCQkgKg0KCQkgKiBAcGFyYW0gb2JqZWN0fGFycmF5ICRpdGVtICAgVGhlIGl0ZW0gdG8gZmlsdGVyLg0KCQkgKiBAcGFyYW0gYXJyYXkgICAgICAgICRrZXlTZXQgVGhlIGtleXMgdG8gcmV0YWluLg0KCQkgKg0KCQkgKiBAcmV0dXJuIGFycmF5IFRoZSBmaWx0ZXJlZCBhcnJheS4NCgkJICogQHNpbmNlIDMuMi4yDQoJCSAqLw0KCQkkZmlsdGVyS2V5cyA9IGZ1bmN0aW9uICgkaXRlbSwgYXJyYXkgJGtleVNldCkgew0KCQkJJGZpbHRlcmVkQXJyYXkgPSBbXTsNCgkJCWZvcmVhY2ggKCRrZXlTZXQgYXMgJGtleSkgew0KCQkJCWlmIChpc19vYmplY3QoJGl0ZW0pICYmIHByb3BlcnR5X2V4aXN0cygkaXRlbSwgJGtleSkpIHsNCgkJCQkJJGZpbHRlcmVkQXJyYXlbJGtleV0gPSAkaXRlbS0+eyRrZXl9Ow0KCQkJCX0gZWxzZWlmIChpc19hcnJheSgkaXRlbSkgJiYgYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkaXRlbSkpIHsNCgkJCQkJJGZpbHRlcmVkQXJyYXlbJGtleV0gPSAkaXRlbVska2V5XTsNCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gJGZpbHRlcmVkQXJyYXk7DQoJCX07DQoNCgkJJHJlc3VsdCA9IFtdOw0KCQlmb3JlYWNoICgkaXRlbXMgYXMgJGluZGV4ID0+ICRpdGVtKQ0KCQl7DQoJCQlpZiAoISRtdWx0aSkNCgkJCXsNCgkJCQlyZXR1cm4gJGZpbHRlcktleXMoJGl0ZW0sICRrZXlTZXQpOw0KCQkJfQ0KCQkJJGZpbHRlcmVkQXJyYXkgPSAkZmlsdGVyS2V5cygkaXRlbSwgJGtleVNldCk7DQoJCQkkcmVzdWx0WyRmaWVsZCAuICRpbmRleF0gPSAkZmlsdGVyZWRBcnJheTsNCgkJfQ0KDQoJCXJldHVybiAkcmVzdWx0Ow0KCX0NCg0KCS8qKg0KCSAqIFByb2Nlc3NlcyBhbiBhcnJheSBvZiBhcnJheXMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBrZXkuDQoJICoNCgkgKiBAcGFyYW0gbWl4ZWQgICAgJGl0ZW1zICAgICAgQXJyYXkgb2YgYXJyYXlzIHRvIGJlIHByb2Nlc3NlZC4NCgkgKiBAcGFyYW0gc3RyaW5nICAgJGluZGV4S2V5ICAgVGhlIGluZGV4IGtleSBvbiB3aGljaCB0aGUgaXRlbXMgc2hvdWxkIGJlIG9ic2VydmVkIGFzIGl0IHJlbGF0ZXMgdG8gaW5zZXJ0L3VwZGF0ZS9kZWxldGUNCgkgKiBAcGFyYW0gc3RyaW5nICAgJGxpbmtLZXkgICAgVGhlIGxpbmsga2V5IG9uIHdoaWNoIHRoZSBpdGVtcyB3aGVyZSBsaW5rZWQgaW4gdGhlIGNoaWxkIHRhYmxlLg0KCSAqIEBwYXJhbSBzdHJpbmcgICAkbGlua1ZhbHVlICBUaGUgdmFsdWUgb2YgdGhlIGxpbmsga2V5IGluIGNoaWxkIHRhYmxlLg0KCSAqDQoJICogQHJldHVybiBhcnJheSAgVGhlIHByb2Nlc3NlZCBhcnJheSBvZiBhcnJheXMuDQoJICogQHNpbmNlICAzLjIuMg0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gcHJvY2VzcygkaXRlbXMsIHN0cmluZyAkaW5kZXhLZXksIHN0cmluZyAkbGlua0tleSwgc3RyaW5nICRsaW5rVmFsdWUpOiBhcnJheQ0KCXsNCgkJJGl0ZW1zID0gaXNfYXJyYXkoJGl0ZW1zKSA/ICRpdGVtcyA6IFtdOw0KCQlpZiAoJGl0ZW1zICE9PSBbXSAmJiAhJHRoaXMtPmlzTXVsdGlwbGVTZXRzKCRpdGVtcykpDQoJCXsNCgkJCSRpdGVtcyA9IFskaXRlbXNdOw0KCQl9DQoNCgkJZm9yZWFjaCAoJGl0ZW1zIGFzICRuID0+ICYkaXRlbSkNCgkJew0KCQkJJHZhbHVlID0gJGl0ZW1bJGluZGV4S2V5XSA/PyAnJzsNCgkJCXN3aXRjaCAoJGluZGV4S2V5KSB7DQoJCQkJY2FzZSAnZ3VpZCc6DQoJCQkJCWlmIChlbXB0eSgkdmFsdWUpKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgSU5ERVgNCgkJCQkJCSRpdGVtWyRpbmRleEtleV0gPSAkdGhpcy0+Z2V0R3VpZCgkaW5kZXhLZXkpOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2lkJzoNCgkJCQkJaWYgKGVtcHR5KCR2YWx1ZSkpDQoJCQkJCXsNCgkJCQkJCSRpdGVtWyRpbmRleEtleV0gPSAwOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWRlZmF1bHQ6DQoJCQkJCS8vIE5vIGFjdGlvbiBmb3Igb3RoZXIga2V5cyBpZiBlbXB0eQ0KCQkJCQlicmVhazsNCgkJCX0NCg0KCQkJLy8gc2V0IExJTksNCgkJCSRpdGVtWyRsaW5rS2V5XSA9ICRsaW5rVmFsdWU7DQoNCgkJCS8vIGNyZWF0ZS91cGRhdGUgdXNlcg0KCQkJJGl0ZW1bJ3VzZXJfaWQnXSA9ICR0aGlzLT5zZXRVc2VyRGV0YWlscygNCgkJCQkkaXRlbSwNCgkJCQkkdGhpcy0+Z2V0QWN0aXZlVXNlcnMoDQoJCQkJCSRsaW5rS2V5LA0KCQkJCQkkbGlua1ZhbHVlDQoJCQkJKQ0KCQkJKTsNCg0KCQkJLy8gcmVtb3ZlIGVtcHR5IHJvdyAobWVhbnMgbm8gdXNlciBsaW5rZWQpDQoJCQlpZiAoJGl0ZW1bJ3VzZXJfaWQnXSA9PSAwKQ0KCQkJew0KCQkJCXVuc2V0KCRpdGVtc1skbl0pOw0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuIGFycmF5X3ZhbHVlcygkaXRlbXMpOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBjdXJyZW50IGFjdGl2ZSBVc2VycyBMaW5rZWQgdG8gdGhpcyBlbnRpdHkNCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgICAkbGlua0tleSAgICBUaGUgbGluayBrZXkgb24gd2hpY2ggdGhlIGl0ZW1zIHdoZXJlIGxpbmtlZCBpbiB0aGUgY2hpbGQgdGFibGUuDQoJICogQHBhcmFtIHN0cmluZyAgICRsaW5rVmFsdWUgIFRoZSB2YWx1ZSBvZiB0aGUgbGluayBrZXkgaW4gY2hpbGQgdGFibGUuDQoJICoNCgkgKiBAcmV0dXJuIGFycmF5ICAgVGhlIElEcyBvZiBhbGwgYWN0aXZlIHVzZXJzLg0KCSAqIEBzaW5jZSAgNS4wLjINCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIGdldEFjdGl2ZVVzZXJzKHN0cmluZyAkbGlua0tleSwgc3RyaW5nICRsaW5rVmFsdWUpOiBhcnJheQ0KCXsNCgkJaWYgKGlzc2V0KCR0aGlzLT5hY3RpdmVVc2Vyc1skbGlua0tleSAuICRsaW5rVmFsdWVdKSkNCgkJew0KCQkJcmV0dXJuICR0aGlzLT5hY3RpdmVVc2Vyc1skbGlua0tleSAuICRsaW5rVmFsdWVdOw0KCQl9DQoNCgkJaWYgKCgkdXNlcnMgPSAkdGhpcy0+aXRlbXMtPnRhYmxlKCR0aGlzLT5nZXRUYWJsZSgpKS0+dmFsdWVzKFskbGlua1ZhbHVlXSwgJGxpbmtLZXksICd1c2VyX2lkJykpICE9PSBudWxsKQ0KCQl7DQoJCQkkdGhpcy0+YWN0aXZlVXNlcnNbJGxpbmtLZXkgLiAkbGlua1ZhbHVlXSA9ICR1c2VyczsNCgkJCXJldHVybiAkdXNlcnM7DQoJCX0NCg0KCQlyZXR1cm4gW107DQoJfQ0KDQoJLyoqDQoJICogSGFuZGxlcyBzZXR0aW5nIHVzZXIgZGV0YWlscyBhbmQgc2F2aW5nIHRoZW0uDQoJICoNCgkgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgdXNlciBieSBJRCwgc2V0cyB0aGUgdXNlciBkZXRhaWxzLCANCgkgKiBhbmQgYWRkcyBhcHByb3ByaWF0ZSB1c2VyIGdyb3VwcyBiZWZvcmUgc2F2aW5nIHRoZSB1c2VyLg0KCSAqDQoJICogQHBhcmFtIGFycmF5ICRpdGVtICAgICAgICBUaGUgdXNlciBkZXRhaWxzIHBhc3NlZCBieSByZWZlcmVuY2UuDQoJICogQHBhcmFtIGFycmF5ICRhY3RpdmVVc2VycyBUaGUgY3VycmVudCBhY3RpdmUgdXNlciBsaW5rZWQgdG8gdGhpcyBlbnRpdHkuDQoJICoNCgkgKiBAcmV0dXJuIGludCBUaGUgSUQgb2YgdGhlIHNhdmVkIHVzZXIsIG9yIDAgb24gZmFpbHVyZS4NCgkgKiBAc2luY2UgIDUuMC4yDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBzZXRVc2VyRGV0YWlscyhhcnJheSAmJGl0ZW0sIGFycmF5ICRhY3RpdmVVc2Vycyk6IGludA0KCXsNCgkJJHVzZXIgPSAkdGhpcy0+bG9hZFVzZXIoJGl0ZW0sICRhY3RpdmVVc2Vycyk7DQoJCSRkZXRhaWxzID0gJHRoaXMtPmV4dHJhY3RVc2VyRGV0YWlscygkaXRlbSwgJHVzZXIpOw0KDQoJCWlmICgkdGhpcy0+aWRlbnRpdHktPmlkICE9ICR1c2VyLT5pZCkNCgkJew0KCQkJJHRoaXMtPmFzc2lnblVzZXJHcm91cHMoJGRldGFpbHMsICR1c2VyLCAkaXRlbSk7DQoJCX0NCg0KCQlyZXR1cm4gJHRoaXMtPnNhdmVVc2VyRGV0YWlscygkZGV0YWlscywgJGRldGFpbHNbJ2lkJ10gPz8gMCk7DQoJfQ0KDQoJLyoqDQoJICogTG9hZCB0aGUgdXNlciBiYXNlZCBvbiB0aGUgdXNlciBJRCBmcm9tIHRoZSBpdGVtIGFycmF5Lg0KCSAqDQoJICogQHBhcmFtIGFycmF5ICRpdGVtICAgICAgICAgVGhlIGFycmF5IGNvbnRhaW5pbmcgdXNlciBkZXRhaWxzLg0KCSAqIEBwYXJhbSBhcnJheSAkYWN0aXZlVXNlcnMgIFRoZSBjdXJyZW50IGFjdGl2ZSB1c2VyIGxpbmtlZCB0byB0aGlzIGVudGl0eS4NCgkgKiANCgkgKiBAcmV0dXJuIFVzZXJ8bnVsbCBUaGUgdXNlciBvYmplY3QgaWYgZm91bmQsIG51bGwgb3RoZXJ3aXNlLg0KCSAqIEBzaW5jZSAgNS4wLjINCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIGxvYWRVc2VyKGFycmF5ICRpdGVtLCBhcnJheSAkYWN0aXZlVXNlcnMpOiA/VXNlcg0KCXsNCgkJaWYgKCFpc3NldCgkaXRlbVsndXNlcl9pZCddKSB8fCAhaXNfbnVtZXJpYygkaXRlbVsndXNlcl9pZCddKSB8fCAkaXRlbVsndXNlcl9pZCddIDw9IDApDQoJCXsNCgkJCXJldHVybiBudWxsOw0KCQl9DQoNCgkJLy8gb25seSBhbGxvdyB1cGRhdGUgdG8gbGlua2VkIHVzZXJzDQoJCWlmICghaW5fYXJyYXkoJGl0ZW1bJ3VzZXJfaWQnXSwgJGFjdGl2ZVVzZXJzKSkNCgkJew0KCQkJcmV0dXJuIG51bGw7DQoJCX0NCg0KCQkkdXNlciA9IFVzZXJIZWxwZXI6OmdldFVzZXJCeUlkKChpbnQpICRpdGVtWyd1c2VyX2lkJ10pOw0KDQoJCWlmICgkdXNlciAmJiAkdXNlci0+aWQgPT0gJGl0ZW1bJ3VzZXJfaWQnXSkNCgkJew0KCQkJcmV0dXJuICR1c2VyOw0KCQl9DQoNCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJLyoqDQoJICogRXh0cmFjdCB1c2VyIGRldGFpbHMgZnJvbSB0aGUgaXRlbSBhcnJheSBhbmQgcHJlcGFyZSB0aGVtIGZvciBzYXZpbmcuDQoJICoNCgkgKiBAcGFyYW0gYXJyYXkgICAgICRpdGVtIFRoZSBhcnJheSBjb250YWluaW5nIHVzZXIgZGV0YWlscy4NCgkgKiBAcGFyYW0gVXNlcnxudWxsICR1c2VyIFRoZSB1c2VyIG9iamVjdCBpZiBmb3VuZCwgbnVsbCBvdGhlcndpc2UuDQoJICogDQoJICogQHJldHVybiBhcnJheSBUaGUgcHJlcGFyZWQgdXNlciBkZXRhaWxzIGFycmF5Lg0KCSAqIEBzaW5jZSAgNS4wLjINCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIGV4dHJhY3RVc2VyRGV0YWlscyhhcnJheSAmJGl0ZW0sID9Vc2VyICR1c2VyKTogYXJyYXkNCgl7DQoJCSRkZXRhaWxzID0gW107DQoNCgkJaWYgKCR1c2VyICE9PSBudWxsKQ0KCQl7DQoJCQkkZGV0YWlsc1snaWQnXSA9IChpbnQpICRpdGVtWyd1c2VyX2lkJ107DQoJCX0NCg0KCQlmb3JlYWNoICgkdGhpcy0+dXNlciBhcyAkcHJvcGVydHkpDQoJCXsNCgkJCWlmIChpc3NldCgkaXRlbVskcHJvcGVydHldKSkNCgkJCXsNCgkJCQkkZGV0YWlsc1skcHJvcGVydHldID0gJGl0ZW1bJHByb3BlcnR5XTsNCgkJCQl1bnNldCgkaXRlbVskcHJvcGVydHldKTsNCgkJCX0NCgkJfQ0KDQoJCXJldHVybiAkZGV0YWlsczsNCgl9DQoNCgkvKioNCgkgKiBBc3NpZ25zIHVzZXIgZ3JvdXBzIGJhc2VkIG9uIGV4aXN0aW5nIGdyb3VwcyBhbmQgZW50aXR5IHR5cGUuDQoJICoNCgkgKiBAcGFyYW0gYXJyYXkgICAgICYkZGV0YWlscyBUaGUgYXJyYXkgdG8gc3RvcmUgdXNlciBkZXRhaWxzIGluY2x1ZGluZyBncm91cHMuDQoJICogQHBhcmFtIFVzZXJ8bnVsbCAkdXNlciAgICAgVGhlIHVzZXIgb2JqZWN0IGlmIGZvdW5kLCBudWxsIG90aGVyd2lzZS4NCgkgKiBAcGFyYW0gYXJyYXkgICAgICRpdGVtICAgICBUaGUgYXJyYXkgY29udGFpbmluZyBhZGRpdGlvbmFsIHVzZXIgZGV0YWlscy4NCgkgKg0KCSAqIEByZXR1cm4gdm9pZA0KCSAqIEBzaW5jZSA1LjAuMg0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gYXNzaWduVXNlckdyb3VwcyhhcnJheSAmJGRldGFpbHMsID9Vc2VyICR1c2VyLCBhcnJheSAkaXRlbSk6IHZvaWQNCgl7DQoJCSRncm91cHMgPSAkdXNlciAhPT0gbnVsbCA/IChhcnJheSkgJHVzZXItPmdyb3VwcyA6IFtdOw0KDQoJCWlmICghZW1wdHkoJGl0ZW1bJ2VudGl0eV90eXBlJ10pKQ0KCQl7DQoJCQkkZ2xvYmFsX2VudGl0eV9ncm91cHMgPSBDb21wb25lbnQ6OmdldFBhcmFtcygpLT5nZXQoJGl0ZW1bJ2VudGl0eV90eXBlJ10gLiAnX2dyb3VwcycsIFtdKTsNCgkJCWZvcmVhY2ggKCRnbG9iYWxfZW50aXR5X2dyb3VwcyBhcyAkZ3JvdXApDQoJCQl7DQoJCQkJaWYgKCFpbl9hcnJheSgkZ3JvdXAsICRncm91cHMpKQ0KCQkJCXsNCgkJCQkJJGdyb3Vwc1tdID0gJGdyb3VwOw0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCS8vIEVuc3VyZSAkZGV0YWlsc1snZ3JvdXBzJ10gaXMgYW4gYXJyYXkgaWYgaXQgZXhpc3RzLCBlbHNlIGRlZmF1bHQgdG8gYW4gZW1wdHkgYXJyYXkNCgkJJGRldGFpbHNHcm91cHMgPSBpc3NldCgkZGV0YWlsc1snZ3JvdXBzJ10pID8gKGFycmF5KSAkZGV0YWlsc1snZ3JvdXBzJ10gOiBbXTsNCg0KCQkvLyBNZXJnZSB0aGUgYXJyYXlzIGFuZCByZW1vdmUgZHVwbGljYXRlcw0KCQkkbWVyZ2VkR3JvdXBzID0gYXJyYXlfdW5pcXVlKGFycmF5X21lcmdlKCRkZXRhaWxzR3JvdXBzLCAkZ3JvdXBzKSk7DQoNCgkJLy8gT25seSBzZXQgJGRldGFpbHNbJ2dyb3VwcyddIGlmIHRoZSBtZXJnZWQgYXJyYXkgaXMgbm90IGVtcHR5DQoJCWlmICghZW1wdHkoJG1lcmdlZEdyb3VwcykpDQoJCXsNCgkJCSRkZXRhaWxzWydncm91cHMnXSA9ICRtZXJnZWRHcm91cHM7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQl1bnNldCgkZGV0YWlsc1snZ3JvdXBzJ10pOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogU2F2ZSB0aGUgdXNlciBkZXRhaWxzIHVzaW5nIFVzZXJIZWxwZXIgYW5kIGhhbmRsZSBleGNlcHRpb25zLg0KCSAqDQoJICogQHBhcmFtIGFycmF5ICRkZXRhaWxzIFRoZSBwcmVwYXJlZCB1c2VyIGRldGFpbHMgYXJyYXkuDQoJICogQHBhcmFtIGludCAgICR1c2VySWQgIFRoZSBJRCBvZiB0aGUgdXNlciBiZWluZyBwcm9jZXNzZWQuDQoJICogDQoJICogQHJldHVybiBpbnQgVGhlIElEIG9mIHRoZSBzYXZlZCB1c2VyLCBvciAwIG9uIGZhaWx1cmUuDQoJICogQHNpbmNlIDUuMC4yDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBzYXZlVXNlckRldGFpbHMoYXJyYXkgJGRldGFpbHMsIGludCAkdXNlcklkKTogaW50DQoJew0KCQl0cnkgew0KCQkJcmV0dXJuIFVzZXJIZWxwZXI6OnNhdmUoJGRldGFpbHMsIDAsIFsndXNlcmFjdGl2YXRpb24nID0+IDAsICdzZW5kcGFzc3dvcmQnID0+IDEsICdhbGxvd1VzZXJSZWdpc3RyYXRpb24nID0+IDFdKTsNCgkJfSBjYXRjaCAoTm9Vc2VySWRGb3VuZEV4Y2VwdGlvbiAkZSkgew0KCQkJRmFjdG9yeTo6Z2V0QXBwbGljYXRpb24oKS0+ZW5xdWV1ZU1lc3NhZ2UoJGUtPmdldE1lc3NhZ2UoKSwgJ2Vycm9yJyk7DQoJCX0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsNCgkJCUZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCktPmVucXVldWVNZXNzYWdlKCRlLT5nZXRNZXNzYWdlKCksICd3YXJuaW5nJyk7DQoJCQlyZXR1cm4gJHVzZXJJZDsNCgkJfQ0KDQoJCXJldHVybiAwOw0KCX0NCg0KCS8qKg0KCSAqIEZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiB0aGUgYXJyYXkgY29uc2lzdHMgb2YgbXVsdGlwbGUgZGF0YSBzZXRzIChhcnJheXMgb2YgYXJyYXlzKS4NCgkgKiANCgkgKiBAcGFyYW0gYXJyYXkgJGFycmF5IFRoZSBpbnB1dCBhcnJheSB0byBiZSBjaGVja2VkLg0KCSAqIA0KCSAqIEByZXR1cm4gYm9vbCBUcnVlIGlmIHRoZSBhcnJheSBjb250YWlucyBvbmx5IGFycmF5cyAobXVsdGlwbGUgZGF0YSBzZXRzKSwgZmFsc2Ugb3RoZXJ3aXNlLg0KCSAqIEBzaW5jZSAgNS4wLjINCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIGlzTXVsdGlwbGVTZXRzKGFycmF5ICRhcnJheSk6IGJvb2wNCgl7DQoJCWZvcmVhY2ggKCRhcnJheSBhcyAkZWxlbWVudCkNCgkJew0KCQkJLy8gQXMgc29vbiBhcyB3ZSBmaW5kIGEgbm9uLWFycmF5IGVsZW1lbnQsIHJldHVybiBmYWxzZQ0KCQkJaWYgKCFpc19hcnJheSgkZWxlbWVudCkpDQoJCQl7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9DQoNCgkJLy8gSWYgYWxsIGVsZW1lbnRzIGFyZSBhcnJheXMsIHJldHVybiB0cnVlDQoJCXJldHVybiB0cnVlOw0KCX0=', '{}', '{}', NULL, 1, '2024-09-01 23:13:51', 31, 0, 1), (823, '5acded67-0e3d-4c6b-a6ea-b533b076de0c', 'VDM.Data.Guid', 'Guid', 'trait', 'Globally Unique Identifier\r\n\r\n@since 5.0.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Data.Guid', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIFJldHVybnMgYSBHVUlEdjQgc3RyaW5nLg0KCSAqIA0KCSAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgYmVzdCBjcnlwdG9ncmFwaGljYWxseSBzZWN1cmUgbWV0aG9kDQoJICogYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybSB3aXRoIGEgZmFsbGJhY2sgdG8gYW4gb2xkZXIsIGxlc3Mgc2VjdXJlIHZlcnNpb24uDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBjaGVjayBhbmQgbW9kaWZ5IHZhbHVlcy4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nIEEgR1VJRHY0IHN0cmluZy4NCgkgKg0KCSAqIEBzaW5jZSA1LjAuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRHdWlkKHN0cmluZyAka2V5KTogc3RyaW5nDQoJew0KCQkvLyBXaW5kb3dzOiBVc2UgY29tX2NyZWF0ZV9ndWlkIGlmIGF2YWlsYWJsZQ0KCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdjb21fY3JlYXRlX2d1aWQnKSkNCgkJew0KCQkJJGd1aWQgPSB0cmltKFxjb21fY3JlYXRlX2d1aWQoKSwgJ3t9Jyk7DQoJCQlyZXR1cm4gJHRoaXMtPmNoZWNrR3VpZCgkZ3VpZCwgJGtleSk7DQoJCX0NCg0KCQkvLyBVbml4LWJhc2VkIHN5c3RlbXM6IFVzZSBvcGVuc3NsX3JhbmRvbV9wc2V1ZG9fYnl0ZXMgaWYgYXZhaWxhYmxlDQoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ3JhbmRvbV9ieXRlcycpKQ0KCQl7DQoJCQl0cnkgew0KCQkJCSRkYXRhID0gcmFuZG9tX2J5dGVzKDE2KTsNCgkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgew0KCQkJCS8vIEhhbmRsZSB0aGUgZXJyb3IgYXBwcm9wcmlhdGVseSAobG9nZ2luZywgdGhyb3dpbmcsIGV0Yy4pDQoJCQkJcmV0dXJuICR0aGlzLT5mYWxsYmFja0d1aWQoJGtleSk7DQoJCQl9DQoNCgkJCS8vIFNldCB0aGUgdmVyc2lvbiB0byAwMTAwIGFuZCB0aGUgYml0cyA2LTcgdG8gMTAgYXMgcGVyIFJGQyA0MTIyDQoJCQkkZGF0YVs2XSA9IGNocihvcmQoJGRhdGFbNl0pICYgMHgwZiB8IDB4NDApOw0KCQkJJGRhdGFbOF0gPSBjaHIob3JkKCRkYXRhWzhdKSAmIDB4M2YgfCAweDgwKTsNCg0KCQkJJGd1aWQgPSB2c3ByaW50ZignJXMlcy0lcy0lcy0lcy0lcyVzJXMnLCBzdHJfc3BsaXQoYmluMmhleCgkZGF0YSksIDQpKTsNCgkJCXJldHVybiAkdGhpcy0+Y2hlY2tHdWlkKCRndWlkLCAka2V5KTsNCgkJfQ0KDQoJCS8vIEZhbGxiYWNrIHRvIG9sZGVyIG1ldGhvZHMgaWYgc2VjdXJlIG1ldGhvZHMgYXJlIG5vdCBhdmFpbGFibGUNCgkJcmV0dXJuICR0aGlzLT5mYWxsYmFja0d1aWQoJGtleSk7DQoJfQ0KDQoJLyoqDQoJICogVmFsaWRhdGUgdGhlIEdsb2JhbGx5IFVuaXF1ZSBJZGVudGlmaWVyDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRndWlkDQoJICoNCgkgKiBAcmV0dXJuIGJvb2wNCgkgKiBAc2luY2UgIDUuMC40DQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB2YWxpZGF0ZUd1aWQoJGd1aWQpDQoJew0KCQkvLyBjaGVjayBpZiB3ZSBoYXZlIGEgc3RyaW5nDQoJCWlmICghZW1wdHkoJGd1aWQpICYmIGlzX3N0cmluZygkZ3VpZCkpDQoJCXsNCgkJCXJldHVybiBwcmVnX21hdGNoKCIvXihceyk/W2EtZlxkXXs4fSgtW2EtZlxkXXs0fSl7NH1bYS1mXGRdezh9KD8oMSlcfSkkL2kiLCAkZ3VpZCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEdlbmVyYXRlcyBhIGZhbGxiYWNrIEdVSUR2NCB1c2luZyBsZXNzIHNlY3VyZSBtZXRob2RzLg0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgdG8gY2hlY2sgYW5kIG1vZGlmeSB2YWx1ZXMuDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZyBBIEdVSUR2NCBzdHJpbmcuDQoJICoNCgkgKiBAc2luY2UgNS4wLjINCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIGZhbGxiYWNrR3VpZChzdHJpbmcgJGtleSk6IHN0cmluZw0KCXsNCgkJJGNoYXJpZCA9IHN0cnRvbG93ZXIobWQ1KHVuaXFpZChyYW5kb21faW50KDAsIFBIUF9JTlRfTUFYKSwgdHJ1ZSkpKTsNCgkJJGd1aWR2NCA9IHNwcmludGYoDQoJCQknJXMtJXMtJXMtJXMtJXMnLA0KCQkJc3Vic3RyKCRjaGFyaWQsICAwLCA4KSwNCgkJCXN1YnN0cigkY2hhcmlkLCAgOCwgNCksDQoJCQlzdWJzdHIoJGNoYXJpZCwgMTIsIDQpLA0KCQkJc3Vic3RyKCRjaGFyaWQsIDE2LCA0KSwNCgkJCXN1YnN0cigkY2hhcmlkLCAyMCwgMTIpDQoJCSk7DQoNCgkJcmV0dXJuICR0aGlzLT5jaGVja0d1aWQoJGd1aWR2NCwgJGtleSk7DQoJfQ0KDQoJLyoqDQoJICogQ2hlY2tzIGlmIHRoZSBHVUlEIHZhbHVlIGlzIHVuaXF1ZSBhbmQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4NCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJGd1aWQgVGhlIEdVSUQgdmFsdWUgdG8gY2hlY2suDQoJICogQHBhcmFtIHN0cmluZyAka2V5ICBUaGUga2V5IHRvIGNoZWNrIGFuZCBtb2RpZnkgdmFsdWVzLg0KCSAqDQoJICogQHJldHVybiBzdHJpbmcgVGhlIHVuaXF1ZSBHVUlEIHZhbHVlLg0KCSAqDQoJICogQHNpbmNlIDUuMC4yDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0d1aWQoc3RyaW5nICRndWlkLCBzdHJpbmcgJGtleSk6IHN0cmluZw0KCXsNCgkJLy8gQ2hlY2sgdGhhdCB0aGUgR1VJRCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0DQoJCWlmICgkdGhpcy0+aXRlbXMtPnRhYmxlKCR0aGlzLT5nZXRUYWJsZSgpKS0+dmFsdWVzKFskZ3VpZF0sICRrZXkpKQ0KCQl7DQoJCQlyZXR1cm4gJHRoaXMtPmdldEd1aWQoJGtleSk7DQoJCX0NCg0KCQlyZXR1cm4gJGd1aWQ7DQoJfQ==', '{}', '{}', NULL, 1, '2024-09-02 00:08:44', 4, 0, 1), (824, '576685fd-263c-46bb-9fdc-1f5eb234cbb6', 'VDM.Interfaces.Data.GuidInterface', 'GuidInterface', 'interface', 'Globally Unique Identifier Interface\r\n\r\n@since 5.0.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.Data.GuidInterface', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIFJldHVybnMgYSBHVUlEdjQgc3RyaW5nLg0KCSAqIA0KCSAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgYmVzdCBjcnlwdG9ncmFwaGljYWxseSBzZWN1cmUgbWV0aG9kDQoJICogYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybSB3aXRoIGEgZmFsbGJhY2sgdG8gYW4gb2xkZXIsIGxlc3Mgc2VjdXJlIHZlcnNpb24uDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBjaGVjayBhbmQgbW9kaWZ5IHZhbHVlcy4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nIEEgR1VJRHY0IHN0cmluZy4NCgkgKg0KCSAqIEBzaW5jZSA1LjAuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRHdWlkKHN0cmluZyAka2V5KTogc3RyaW5nOw==', '{}', '{}', NULL, 1, '2024-09-02 00:11:37', 3, 0, 1), @@ -2432,7 +2432,7 @@ INSERT INTO `#__componentbuilder_class_method` (`id`, `arguments`, `code`, `comm (15, 'JGNvbnRleHQsICRwa3MsICR2YWx1ZQ==', '', 'CS8qKg0KCSAqIFRoaXMgaXMgYW4gZXZlbnQgdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgY29udGVudHMgc3RhdGUgaXMgY2hhbmdlZC4NCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRjb250ZXh0ICBUaGUgY29udGV4dCBmb3IgdGhlIGNvbnRlbnQgcGFzc2VkIHRvIHRoZSBwbHVnaW4uDQoJICogQHBhcmFtICAgYXJyYXkgICAgJHBrcyAgICAgIEEgbGlzdCBvZiBwcmltYXJ5IGtleSBpZHMgb2YgdGhlIGNvbnRlbnQgdGhhdCBoYXMgY2hhbmdlZCBzdGF0ZS4NCgkgKiBAcGFyYW0gICBpbnRlZ2VyICAkdmFsdWUgICAgVGhlIHZhbHVlIG9mIHRoZSBzdGF0ZSB0aGF0IHRoZSBjb250ZW50IGhhcyBiZWVuIGNoYW5nZWQgdG8uDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', '92e46234-5c28-4eb1-b3e9-b7adbfc7bbd4', '37f35ae4-fc6c-49f0-b070-8701da85455d', 'onContentChangeState', 'public', '', 1, '2019-07-15 11:06:03', '2025-05-31 19:43:43', 19, 0, 1), (16, 'JGNvbnRleHQsICYkcm93LCAmJHBhcmFtcywgJHBhZ2UgPSAw', '', 'CS8qKg0KCSAqIFRoaXMgaXMgdGhlIGZpcnN0IHN0YWdlIGluIHByZXBhcmluZyBjb250ZW50IGZvciBvdXRwdXQgYW5kIGlzIHRoZQ0KCSAqIG1vc3QgY29tbW9uIHBvaW50IGZvciBjb250ZW50IG9yaWVudGF0ZWQgcGx1Z2lucyB0byBkbyB0aGVpciB3b3JrLg0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGNvbnRleHQgIFRoZSBjb250ZXh0IG9mIHRoZSBjb250ZW50IGJlaW5nIHBhc3NlZCB0byB0aGUgcGx1Z2luLg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICYkcm93ICAgICBUaGUgYXJ0aWNsZSBvYmplY3QuICBOb3RlICRhcnRpY2xlLT50ZXh0IGlzIGFsc28gYXZhaWxhYmxlDQoJICogQHBhcmFtICAgbWl4ZWQgICAgJiRwYXJhbXMgIFRoZSBhcnRpY2xlIHBhcmFtcw0KCSAqIEBwYXJhbSAgIGludGVnZXIgICRwYWdlICAgICBUaGUgJ3BhZ2UnIG51bWJlcg0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', '92fe98ad-c529-494a-9147-5ae1e4d78068', '37f35ae4-fc6c-49f0-b070-8701da85455d', 'onContentPrepare', 'public', '', 1, '2019-07-15 11:06:03', '2025-05-31 19:45:24', 19, 0, 1), (17, 'JG5hbWU=', 'CQkkbGluayA9ICdpbmRleC5waHA/b3B0aW9uPWNvbV9mb28mYW1wO3ZpZXc9Zm9vJmFtcDtsYXlvdXQ9bW9kYWwmYW1wO3RtcGw9Y29tcG9uZW50JmFtcDsnDQoJCQkuIFNlc3Npb246OmdldEZvcm1Ub2tlbigpIC4gJz0xJmFtcDtlZGl0b3I9JyAuICRuYW1lOw0KDQoJCSRidXR0b24gPSBuZXcgQ01TT2JqZWN0Ow0KCQkkYnV0dG9uLT5tb2RhbCA9IHRydWU7DQoJCSRidXR0b24tPmNsYXNzID0gJ2J0biBidG4tc2Vjb25kYXJ5JzsNCgkJJGJ1dHRvbi0+bGluayA9ICRsaW5rOw0KCQkkYnV0dG9uLT50ZXh0ID0gVGV4dDo6XygnUExHX0VESVRPUlNYVERfRk9PX0JVVFRPTl9GT08nKTsNCgkJJGJ1dHRvbi0+bmFtZSA9ICdmaWxlLWFkZCc7DQoJCSRidXR0b24tPm9wdGlvbnMgPSBhcnJheSgNCgkJCSdoZWlnaHQnICAgICA9PiAnMzAwcHgnLA0KCQkJJ3dpZHRoJyAgICAgID0+ICc4MDBweCcsDQoJCQknYm9keUhlaWdodCcgPT4gJzcwJywNCgkJCSdtb2RhbFdpZHRoJyA9PiAnODAnLA0KCQkpOw0KDQoJCXJldHVybiAkYnV0dG9uOw==', 'CS8qKg0KCSAqIERpc3BsYXkgdGhlIGJ1dHRvbg0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICRuYW1lIFRoZSBuYW1lIG9mIHRoZSBidXR0b24gdG8gYWRkDQoJICoNCgkgKiBAcmV0dXJuICBDTVNPYmplY3QgIFRoZSBidXR0b24gb3B0aW9ucyBhcyBKT2JqZWN0DQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', 'b1d55780-5ba8-40d2-8dd6-fd9cd1ecf7f4', '9d4e911a-866f-4363-a47e-fc63f219aa01', 'onDisplay', 'public', '', 1, '2019-07-15 11:06:03', '2025-05-31 19:51:26', 19, 0, 1), -(18, 'JGZpZWxkLCBET01FbGVtZW50ICRwYXJlbnQsIEpGb3JtICRmb3Jt', '', 'CS8qKg0KCSAqIFRyYW5zZm9ybXMgdGhlIGZpZWxkIGludG8gYSBET00gWE1MIGVsZW1lbnQgYW5kIGFwcGVuZHMgaXQgYXMgYSBjaGlsZCBvbiB0aGUgZ2l2ZW4gcGFyZW50Lg0KCSAqDQoJICogQHBhcmFtICAgc3RkQ2xhc3MgICAkZmllbGQgIFRoZSBmaWVsZC4NCgkgKiBAcGFyYW0gICBET01FbGVtZW50ICRwYXJlbnQgVGhlIGZpZWxkIG5vZGUgcGFyZW50Lg0KCSAqIEBwYXJhbSAgIEpGb3JtICAgICAgJGZvcm0gICBUaGUgZm9ybS4NCgkgKg0KCSAqIEByZXR1cm4gIERPTUVsZW1lbnQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMC4wDQoJICov', 'plugins', '62a85e6b-8d40-46fb-bb82-6999d79bddac', 'cc5b64a6-dbec-45b7-97e2-87893ea6827d', 'onCustomFieldsPrepareDom', 'public', '', 1, '2019-07-15 11:06:03', '2025-05-31 20:24:05', 19, 0, 1), +(18, 'JGZpZWxkLCBET01FbGVtZW50ICRwYXJlbnQsIEpvb21sYV9fX2M0ZmU3Mzc3X2Y4OTFfNDIxOF9iN2UzX2E0MGJjOTljMGE2MV9fX1Bvd2VyICRmb3Jt', '', 'CS8qKg0KCSAqIFRyYW5zZm9ybXMgdGhlIGZpZWxkIGludG8gYSBET00gWE1MIGVsZW1lbnQgYW5kIGFwcGVuZHMgaXQgYXMgYSBjaGlsZCBvbiB0aGUgZ2l2ZW4gcGFyZW50Lg0KCSAqDQoJICogQHBhcmFtICAgc3RkQ2xhc3MgICAkZmllbGQgIFRoZSBmaWVsZC4NCgkgKiBAcGFyYW0gICBET01FbGVtZW50ICRwYXJlbnQgVGhlIGZpZWxkIG5vZGUgcGFyZW50Lg0KCSAqIEBwYXJhbSAgIEpvb21sYV9fX2M0ZmU3Mzc3X2Y4OTFfNDIxOF9iN2UzX2E0MGJjOTljMGE2MV9fX1Bvd2VyICAgICAgJGZvcm0gICBUaGUgZm9ybS4NCgkgKg0KCSAqIEByZXR1cm4gIERPTUVsZW1lbnQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMC4wDQoJICov', 'plugins', '62a85e6b-8d40-46fb-bb82-6999d79bddac', 'cc5b64a6-dbec-45b7-97e2-87893ea6827d', 'onCustomFieldsPrepareDom', 'public', '', 1, '2019-07-15 11:06:03', '2025-05-31 20:24:05', 19, 0, 1), (19, 'JGNvbnRleHQsICRpdGVtLCAkaXNOZXcsICRkYXRhID0gYXJyYXko', '', 'CS8qKg0KCSAqIFRoZSBzYXZlIGV2ZW50Lg0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAkY29udGV4dCBUaGUgY29udGV4dA0KCSAqIEBwYXJhbSAgIEpUYWJsZSAgJGl0ZW0gICAgVGhlIHRhYmxlDQoJICogQHBhcmFtICAgYm9vbGVhbiAkaXNOZXcgICBJcyBuZXcgaXRlbQ0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJGRhdGEgICAgVGhlIHZhbGlkYXRlZCBkYXRhDQoJICoNCgkgKiBAcmV0dXJuICBib29sZWFuDQoJICoNCgkgKiBAc2luY2UgICAxLjAuMA0KCSAqLw==', 'plugins', 'd831a202-15f1-4458-b26c-7c69dee2caf5', 'cc5b64a6-dbec-45b7-97e2-87893ea6827d', 'onContentBeforeSave', 'public', '', 1, '2019-07-15 11:06:03', '2025-05-31 20:25:05', 19, 0, 1), (20, 'JGV4dGVuc2lvbiwgJHBrcywgJHZhbHVl', 'CQkvLyBNYWtlIHN1cmUgd2UncmUgaGFuZGxpbmcgY29tX2NvbnRlbnQgY2F0ZWdvcmllcy4NCgkJaWYgKCRleHRlbnNpb24gPT09ICdjb21fZm9vJykNCgkJew0KCQkJJHRoaXMtPmNhdGVnb3J5U3RhdGVDaGFuZ2UoJHBrcywgJHZhbHVlKTsNCgkJfQ==', 'CS8qKg0KCSAqIE1ldGhvZCB0byB1cGRhdGUgdGhlIGl0ZW0gbGluayBpbmZvcm1hdGlvbiB3aGVuIHRoZSBpdGVtIGNhdGVnb3J5IGlzDQoJICogY2hhbmdlZC4gVGhpcyBpcyBmaXJlZCB3aGVuIHRoZSBpdGVtIGNhdGVnb3J5IGlzIHB1Ymxpc2hlZCBvciB1bnB1Ymxpc2hlZA0KCSAqIGZyb20gdGhlIGxpc3Qgdmlldy4NCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRleHRlbnNpb24gIFRoZSBleHRlbnNpb24gd2hvc2UgY2F0ZWdvcnkgaGFzIGJlZW4gdXBkYXRlZC4NCgkgKiBAcGFyYW0gICBhcnJheSAgICAkcGtzICAgICAgICBBIGxpc3Qgb2YgcHJpbWFyeSBrZXkgaWRzIG9mIHRoZSBjb250ZW50IHRoYXQgaGFzIGNoYW5nZWQgc3RhdGUuDQoJICogQHBhcmFtICAgaW50ZWdlciAgJHZhbHVlICAgICAgVGhlIHZhbHVlIG9mIHRoZSBzdGF0ZSB0aGF0IHRoZSBjb250ZW50IGhhcyBiZWVuIGNoYW5nZWQgdG8uDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', 'fcccc173-d2ef-411c-9d39-b1db373bdc5d', '75021594-d111-4e01-9d42-4e86e57bbec3', 'onFinderCategoryChangeState', 'public', '', 1, '2019-07-15 11:06:03', '2025-05-31 20:28:26', 19, 0, 1), (21, 'JGNvbnRleHQsICR0YWJsZQ==', 'CQlpZiAoJGNvbnRleHQgPT09ICdjb21fZm9vLmZvbycpDQoJCXsNCgkJCSRpZCA9ICR0YWJsZS0+aWQ7DQoJCX0NCgkJZWxzZWlmICgkY29udGV4dCA9PT0gJ2NvbV9maW5kZXIuaW5kZXgnKQ0KCQl7DQoJCQkkaWQgPSAkdGFibGUtPmxpbmtfaWQ7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KDQoJCS8vIFJlbW92ZSBpdGVtIGZyb20gdGhlIGluZGV4Lg0KCQlyZXR1cm4gJHRoaXMtPnJlbW92ZSgkaWQpOw==', 'CS8qKg0KCSAqIE1ldGhvZCB0byByZW1vdmUgdGhlIGxpbmsgaW5mb3JtYXRpb24gZm9yIGl0ZW1zIHRoYXQgaGF2ZSBiZWVuIGRlbGV0ZWQuDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICRjb250ZXh0ICBUaGUgY29udGV4dCBvZiB0aGUgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZC4NCgkgKiBAcGFyYW0gICBKVGFibGUgICR0YWJsZSAgICBBIEpUYWJsZSBvYmplY3QgY29udGFpbmluZyB0aGUgcmVjb3JkIHRvIGJlIGRlbGV0ZWQNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2xlYW4gIFRydWUgb24gc3VjY2Vzcy4NCgkgKg0KCSAqIEBzaW5jZSAgIDIuNQ0KCSAqIEB0aHJvd3MgIEV4Y2VwdGlvbiBvbiBkYXRhYmFzZSBlcnJvci4NCgkgKi8=', 'plugins', '581a6599-d81c-4b98-9eca-5d934abad88c', '75021594-d111-4e01-9d42-4e86e57bbec3', 'onFinderAfterDelete', 'public', '', 1, '2019-07-15 11:06:03', '2025-05-31 20:28:43', 19, 0, 1), @@ -2528,7 +2528,7 @@ INSERT INTO `#__componentbuilder_class_method` (`id`, `arguments`, `code`, `comm (111, 'JG1vZGVsLCAmJHBhY2thZ2UsICRpbnN0YWxsZXIsICYkcmVzdWx0LCAmJG1zZw==', '', 'CS8qKg0KCSAqIG9uSW5zdGFsbGVyQWZ0ZXJJbnN0YWxsZXIuDQoJICoNCgkgKiBUaGlzIGV2ZW50IGFsbG93cyBhIGN1c3RvbSBhIHBvc3QtZmxpZ2h0DQoJICoNCgkgKiBAcmV0dXJuICBib29sZWFuDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', 'e3633016-5801-44ab-81d8-ff19c396745f', '93940067-92d1-4cc2-b4e2-d3fc118d99bd', 'onInstallerAfterInstaller', 'public', '', 1, '2019-08-14 14:59:09', '2025-05-31 20:40:34', 19, 0, 1), (112, 'JGNvbnRleHQsICYkZGF0YQ==', '', 'CS8qKg0KCSAqIFJ1bnMgb24gY29udGVudCBwcmVwYXJhdGlvbiBvZiBkYXRhDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICRjb250ZXh0ICBUaGUgY29udGV4dCBmb3IgdGhlIGRhdGENCgkgKiBAcGFyYW0gICBvYmplY3QgICRkYXRhICAgICBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgZGF0YSBmb3IgdGhlIGZvcm0uDQoJICoNCgkgKiBAcmV0dXJuICBib29sZWFuDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', 'ab056f69-a17e-4060-99c3-3b0505da2c49', '37f35ae4-fc6c-49f0-b070-8701da85455d', 'onContentPrepareData', 'public', '', 1, '2019-08-17 01:59:23', '2025-05-31 19:46:40', 15, 0, 4), (113, 'Rm9ybSAkZm9ybSwgJGRhdGE=', '', 'CS8qKg0KCSAqIFJ1bnMgb24gY29udGVudCBwcmVwYXJhdGlvbiBvZiBmb3JtLg0KCSAqDQoJICogQHBhcmFtICAgRm9ybSAgICAgJGZvcm0gIFRoZSBmb3JtDQoJICogQHBhcmFtICAgc3RkQ2xhc3MgICRkYXRhICBUaGUgZGF0YQ0KCSAqDQoJICogQHJldHVybiAgYm9vbGVhbg0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', '2d8f2ef2-5f8c-420f-a3c9-c252315b10ab', '37f35ae4-fc6c-49f0-b070-8701da85455d', 'onContentPrepareForm', 'public', '', 1, '2019-08-17 01:59:23', '2025-05-31 19:47:38', 15, 0, 4), -(114, 'SkZvcm0gJGZvcm0sICYkZGF0YQ==', '', 'CS8qKgoJICogVGhlIHZhbGlkYXRpb24gZXZlbnQuCgkgKgoJICogQHBhcmFtICAgSkZvcm0gICAgICRmb3JtICBUaGUgZm9ybQoJICogQHBhcmFtICAgc3RkQ2xhc3MgICRkYXRhICBUaGUgZGF0YQoJICoKCSAqIEByZXR1cm4gIHZvaWQKCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', '962e479a-7e71-40e2-92ff-b944f8345e42', 'cc83a326-07a4-41d0-a456-4123eb77e655', 'onUserBeforeDataValidation', 'public', '', 1, '2019-08-17 01:59:23', '0000-00-00 00:00:00', 1, 0, 4), +(114, 'Sm9vbWxhX19fYzRmZTczNzdfZjg5MV80MjE4X2I3ZTNfYTQwYmM5OWMwYTYxX19fUG93ZXIgJGZvcm0sICYkZGF0YQ==', '', 'CS8qKgoJICogVGhlIHZhbGlkYXRpb24gZXZlbnQuCgkgKgoJICogQHBhcmFtICAgSm9vbWxhX19fYzRmZTczNzdfZjg5MV80MjE4X2I3ZTNfYTQwYmM5OWMwYTYxX19fUG93ZXIgICAgICRmb3JtICBUaGUgZm9ybQoJICogQHBhcmFtICAgc3RkQ2xhc3MgICRkYXRhICBUaGUgZGF0YQoJICoKCSAqIEByZXR1cm4gIHZvaWQKCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', '962e479a-7e71-40e2-92ff-b944f8345e42', 'cc83a326-07a4-41d0-a456-4123eb77e655', 'onUserBeforeDataValidation', 'public', '', 1, '2019-08-17 01:59:23', '0000-00-00 00:00:00', 1, 0, 4), (115, 'JGNvbnRleHQsICRkYXRhLCBGb3JtICRmb3Jt', '', 'CS8qKg0KCSAqIE5vcm1hbGl6ZXMgdGhlIHJlcXVlc3QgZGF0YS4NCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJGNvbnRleHQgIFRoZSBjb250ZXh0DQoJICogQHBhcmFtICAgb2JqZWN0ICAkZGF0YSAgICAgVGhlIG9iamVjdA0KCSAqIEBwYXJhbSAgIEZvcm0gICAgJGZvcm0gICAgIFRoZSBmb3JtDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', '782ad30f-b914-439a-913e-1f173041f146', '37f35ae4-fc6c-49f0-b070-8701da85455d', 'onContentNormaliseRequestData', 'public', '', 1, '2019-08-22 01:09:18', '2025-05-31 19:48:10', 14, 0, 5), (116, 'JiRjb25maWcsICRjb21waWxlcg==', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZUdldCBldmVudA==', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBHZXRdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', '36244a14-d958-4eca-a144-641e7a443116', 'e0947c15-d3d0-4e21-8e60-044ee8a946d6', 'jcb_ce_onBeforeGet', 'public', '', 1, '2019-08-22 01:09:18', '2025-05-31 20:14:30', 21, 0, 1), (117, '', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyR2V0IGV2ZW50', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEdldF0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw==', 'plugins', '0695639b-a4b9-4e90-a6cb-a7664b8299fa', 'e0947c15-d3d0-4e21-8e60-044ee8a946d6', 'jcb_ce_onAfterGet', 'public', '', 1, '2019-08-22 01:09:18', '2025-05-31 20:18:21', 21, 0, 1), @@ -2904,7 +2904,7 @@ INSERT INTO `#__componentbuilder_fieldtype` (`id`, `description`, `name`, `prope (44, 'The imagelist form field type provides a drop down list of image files in a specified directory. Only files with .png, .gif, .jpg, .bmp, .ico extensions are listed. If the field has a saved value this is selected when the page is first loaded. If not, the default value (if any) is selected.\r\n\r\nBy default, the first item on the list is \'- Do not use -\' (which is translatable) and is given the value \'-1\' and this is followed by \'- Use default -\' (also translatable) given the value \'0\'.', 'Imagelist', '{\"properties0\":{\"name\":\"type\",\"example\":\"imagelist\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be imagelist.\"},\"properties1\":{\"name\":\"name\",\"example\":\"myimagelist\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select an image\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"directory\",\"example\":\"images\\/stories\",\"adjustable\":\"1\",\"description\":\"(optional) is the filesystem path to the directory containing the image files to be listed. If omitted the directory given by JPATH_ROOT is assumed.\"},\"properties4\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the default image file name.\"},\"properties5\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties6\":{\"name\":\"filter\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a regular expression string which is used to filter the list of image files selected for inclusion in the drop-down list. If omitted, all image files in the directory are included. The filter argument expression is applied before the exclude argument expression. For information on constructing regular expressions see Regular expressions in parameter arguments.\"},\"properties7\":{\"name\":\"exclude\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a regular expression string which is used to exclude image files from the list. The exclude argument expression is applied after the filter argument expression. For information on constructing regular expressions see Regular expressions in parameter arguments.\"},\"properties8\":{\"name\":\"stripext\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a Boolean argument. If true then file name extensions will be stripped from the image file names listed. Also note that the file name will be saved without the extension too.\"},\"properties9\":{\"name\":\"hide_none\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a Boolean argument. If true, the \'- Do not use -\' item is omitted from the drop-down list.\"},\"properties10\":{\"name\":\"hide_default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a Boolean argument. If true, the \'- Use default -\' item is omitted from the drop-down list.\"},\"properties11\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'Image file dropdown from directory.', '', 1, 4, 0, 14, '72680e92-2859-49c6-ad92-c2329c52f9f8'), (45, ' The Modal menu form field type provides a styled drop-down list of Joomla menu items, visually matching Joomla\'s modal UI patterns. Unlike the modal select field type, it does not open a modal window for selection but instead presents menu items in a compact, dropdown format consistent with the modal design language used in Joomla\'s administrator interface.', 'Modal Menu', '{\"properties0\":{\"name\":\"type\",\"example\":\"modal_menu\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be modal_menu.\"},\"properties1\":{\"name\":\"name\",\"example\":\"base\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Base Item\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"option\",\"example\":\"Current\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) set the options of this radio. Separate options with commas and use the pipe symbol to separate value from text.\"},\"properties4\":{\"name\":\"select\",\"example\":\"true\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) show select options\"},\"properties5\":{\"name\":\"new\",\"example\":\"true\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory)\"},\"properties6\":{\"name\":\"edit\",\"example\":\"true\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory)\"},\"properties7\":{\"name\":\"description\",\"example\":\"Select a menu item to always be used as the base for the menu display. You must set the Start Level to the same level or higher than the level of the base item. This will cause the module to be displayed on all assigned pages. If Current is selected the active item is used as the base. This causes the module to only display when the parent menu item is active.\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties8\":{\"name\":\"clear\",\"example\":\"true\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory)\"},\"properties9\":{\"name\":\"disable\",\"example\":\"separator,alias,heading,url\",\"adjustable\":\"1\",\"description\":\"(optional)\"},\"properties10\":{\"name\":\"filter\",\"example\":\"integer\",\"adjustable\":\"1\",\"description\":\"(optional) is a regular expression string which is used to filter the list of image files selected for inclusion in the drop-down list. If omitted, all image files in the directory are included. The filter argument expression is applied before the exclude argument expression. For information on constructing regular expressions see Regular expressions in parameter arguments.\"},\"properties11\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\\r\\n\"}}', 'Styled dropdown of menu items.', '', 1, 8, 0, 15, '715256a4-8cc2-4d66-9d08-31e58ca5b036'), (46, 'The menu form field type provides a drop down list of the available menus from your Joomla! site. If the field has a saved value this is selected when the page is first loaded. If not, the default value (if any) is selected. ', 'Menu', '{\"properties0\":{\"name\":\"type\",\"example\":\"menu\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be menu.\"},\"properties1\":{\"name\":\"name\",\"example\":\"menutype\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the filed.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Menu to Show\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"Choose which menu should be rendered with this instance of module.\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) tooltip for the form field.\"},\"properties4\":{\"name\":\"clientid\",\"example\":\"0\",\"adjustable\":\"1\",\"description\":\"\"},\"properties5\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the default menu. Note that this is the name of the menu shown in the Type column on the Menu Manager screen and not the menu ID number.\"},\"properties6\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Allows you to hide the field based on the value(s) of another field; for Joomla 3.2.4+ https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties7\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'Dropdown list of Joomla menus.', '', 1, 6, 0, 16, '6349f152-8ef5-43bd-a89b-ce18f33ac5e5'), -(47, 'Dynamic Checkboxes generates a list of checkboxes dynamically based on data retrieved at runtime, such as from a database query or external source. Useful for displaying variable options that may change depending on context or configuration.', 'DynamicCheckboxes@', '{\"properties0\":{\"name\":\"type\",\"example\":\"change_this\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) can be anything, just not the same as any other default Joomla field type. You can also not use the \\\"_\\\" (underscore) or \\\"-\\\" (hyphen) in the type name, and no spaces.\"},\"properties1\":{\"name\":\"name\",\"example\":\"dynamic_checkboxes\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Dynamic Checkboxes\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"The checkbox linked to global subform of the same name\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties4\":{\"name\":\"option\",\"example\":\"1|Default\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) set the options of this checkboxes. Separate options with commas and use the pipe symbol to separate value from text.\"},\"properties5\":{\"name\":\"default\",\"example\":\"1\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value.\"},\"properties6\":{\"name\":\"required\",\"example\":\"true\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties7\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties8\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"},\"properties9\":{\"name\":\"extends\",\"example\":\"checkboxes\",\"mandatory\":\"1\",\"description\":\"Must be checkboxes\"},\"properties10\":{\"name\":\"type_phpHEADER_1\",\"example\":\"\\\\JFormHelper::loadFieldClass(\'checkboxes\');\\r\\nuse VDM\\\\Joomla\\\\Utilities\\\\Component\\\\Helper;\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"The Header USE options\"},\"properties11\":{\"name\":\"type_php_1\",\"example\":\"\\t\\/**\\r\\n\\t * Method to get the data to be passed to the layout for rendering.\\r\\n\\t *\\r\\n\\t * @return array\\r\\n\\t *\\r\\n\\t * @since 3.5\\r\\n\\t *\\/\\r\\n\\tprotected function getLayoutData()\\r\\n\\t{\\r\\n\\t\\t$data = parent::getLayoutData();\\r\\n\\r\\n\\t\\t\\/\\/ True if the field has \'value\' set. In other words, it has been stored, don\'t use the default values.\\r\\n\\t\\t$hasValue = (isset($this->value) && !empty($this->value));\\r\\n\\r\\n\\t\\t\\/\\/ If a value has been stored, use it. Otherwise, use the defaults.\\r\\n\\t\\t$checkedOptions = $hasValue ? $this->value : $this->checkedOptions;\\r\\n\\r\\n\\t\\t\\/\\/ get the form options\\r\\n\\t\\t$options = $this->getOptions();\\r\\n\\r\\n\\t\\t\\/\\/ get the component params\\r\\n\\t\\t$params = Helper::getParams();\\r\\n\\t\\t$subform = $params->get($this->fieldname);\\r\\n\\r\\n\\t\\t\\/\\/ add the paths found in global settings\\r\\n\\t\\tif (is_array($subform) && $subform !== [])\\r\\n\\t\\t{\\r\\n\\t\\t\\tforeach ($subform as $value)\\r\\n\\t\\t\\t{\\r\\n\\t\\t\\t\\tif (isset($value->path) && strlen($value->path) > 3)\\r\\n\\t\\t\\t\\t{\\r\\n\\t\\t\\t\\t\\t$tmp = new \\\\stdClass;\\r\\n\\t\\t\\t\\t\\t$tmp->value = $value->set_me;\\r\\n\\t\\t\\t\\t\\t$tmp->text = $value->set_me;\\r\\n\\t\\t\\t\\t\\t$tmp->checked = false;\\r\\n\\r\\n\\t\\t\\t\\t\\t$options[] = $tmp;\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\t$extraData = array(\\r\\n\\t\\t\\t\'checkedOptions\' => is_array($checkedOptions) ? $checkedOptions : explode(\',\', (string) $checkedOptions),\\r\\n\\t\\t\\t\'hasValue\' => $hasValue,\\r\\n\\t\\t\\t\'options\' => $options\\r\\n\\t\\t);\\r\\n\\r\\n\\t\\treturn array_merge($data, $extraData);\\r\\n\\t}\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"The php for the getLayoutData method.\"}}', 'Super Power Repository Paths', '', 1, 15, 0, 12, '7ed21e79-cbc5-48e3-9ed0-ca72b0f2f1a1'), +(47, 'Dynamic Checkboxes generates a list of checkboxes dynamically based on data retrieved at runtime, such as from a database query or external source. Useful for displaying variable options that may change depending on context or configuration.', 'DynamicCheckboxes@', '{\"properties0\":{\"name\":\"type\",\"example\":\"change_this\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) can be anything, just not the same as any other default Joomla field type. You can also not use the \\\"_\\\" (underscore) or \\\"-\\\" (hyphen) in the type name, and no spaces.\"},\"properties1\":{\"name\":\"name\",\"example\":\"dynamic_checkboxes\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Dynamic Checkboxes\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"The checkbox linked to global subform of the same name\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties4\":{\"name\":\"option\",\"example\":\"1|Default\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) set the options of this checkboxes. Separate options with commas and use the pipe symbol to separate value from text.\"},\"properties5\":{\"name\":\"default\",\"example\":\"1\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value.\"},\"properties6\":{\"name\":\"required\",\"example\":\"true\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties7\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties8\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"},\"properties9\":{\"name\":\"extends\",\"example\":\"checkboxes\",\"mandatory\":\"1\",\"description\":\"Must be checkboxes\"},\"properties10\":{\"name\":\"type_phpHEADER_1\",\"example\":\"FormHelper::loadFieldClass(\'checkboxes\');\\r\\nuse VDM\\\\Joomla\\\\Utilities\\\\Component\\\\Helper;\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"The Header USE options\"},\"properties11\":{\"name\":\"type_php_1\",\"example\":\"\\t\\/**\\r\\n\\t * Method to get the data to be passed to the layout for rendering.\\r\\n\\t *\\r\\n\\t * @return array\\r\\n\\t *\\r\\n\\t * @since 3.5\\r\\n\\t *\\/\\r\\n\\tprotected function getLayoutData()\\r\\n\\t{\\r\\n\\t\\t$data = parent::getLayoutData();\\r\\n\\r\\n\\t\\t\\/\\/ True if the field has \'value\' set. In other words, it has been stored, don\'t use the default values.\\r\\n\\t\\t$hasValue = (isset($this->value) && !empty($this->value));\\r\\n\\r\\n\\t\\t\\/\\/ If a value has been stored, use it. Otherwise, use the defaults.\\r\\n\\t\\t$checkedOptions = $hasValue ? $this->value : $this->checkedOptions;\\r\\n\\r\\n\\t\\t\\/\\/ get the form options\\r\\n\\t\\t$options = $this->getOptions();\\r\\n\\r\\n\\t\\t\\/\\/ get the component params\\r\\n\\t\\t$params = Helper::getParams();\\r\\n\\t\\t$subform = $params->get($this->fieldname);\\r\\n\\r\\n\\t\\t\\/\\/ add the paths found in global settings\\r\\n\\t\\tif (is_array($subform) && $subform !== [])\\r\\n\\t\\t{\\r\\n\\t\\t\\tforeach ($subform as $value)\\r\\n\\t\\t\\t{\\r\\n\\t\\t\\t\\tif (isset($value->path) && strlen($value->path) > 3)\\r\\n\\t\\t\\t\\t{\\r\\n\\t\\t\\t\\t\\t$tmp = new \\\\stdClass;\\r\\n\\t\\t\\t\\t\\t$tmp->value = $value->set_me;\\r\\n\\t\\t\\t\\t\\t$tmp->text = $value->set_me;\\r\\n\\t\\t\\t\\t\\t$tmp->checked = false;\\r\\n\\r\\n\\t\\t\\t\\t\\t$options[] = $tmp;\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\t$extraData = array(\\r\\n\\t\\t\\t\'checkedOptions\' => is_array($checkedOptions) ? $checkedOptions : explode(\',\', (string) $checkedOptions),\\r\\n\\t\\t\\t\'hasValue\' => $hasValue,\\r\\n\\t\\t\\t\'options\' => $options\\r\\n\\t\\t);\\r\\n\\r\\n\\t\\treturn array_merge($data, $extraData);\\r\\n\\t}\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"The php for the getLayoutData method.\"}}', 'Super Power Repository Paths', '', 1, 15, 0, 12, '7ed21e79-cbc5-48e3-9ed0-ca72b0f2f1a1'), (48, 'The ModalSelectField offers an intuitive, user-friendly modal popup interface within Joomla\'s administrator forms. It enables users to select existing records, create new records, edit existing records, or clear selected records directly from within the form. The field retrieves and displays the selected record\'s title dynamically, based on configurable database parameters. It simplifies relational data handling, enhancing the user experience by minimizing page transitions and streamlining record management tasks in Joomla administration interfaces.', 'ModalSelect', '{\"properties0\":{\"name\":\"type\",\"example\":\"ModalSelect\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be ModalSelect.\"},\"properties1\":{\"name\":\"name\",\"example\":\"targetview\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Enter some text\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"sql_title_table\",\"example\":\"#__###component###_targetview\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"Database table (with prefix) used for retrieving title.\"},\"properties4\":{\"name\":\"sql_title_column\",\"example\":\"title\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"Column used for the title display in the modal input field.\"},\"properties5\":{\"name\":\"sql_title_key\",\"example\":\"id\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"Primary key column name of the selected item (usually id).\"},\"properties6\":{\"name\":\"urlSelect\",\"example\":\"index.php?option=com_###component###&view=targetviews&layout=modal&tmpl=component&titleKey=id\",\"adjustable\":\"1\",\"description\":\"URL for opening modal to select an existing record. Important note, the [titleKey] in the url must be equal to [sql_title_key]\"},\"properties7\":{\"name\":\"urlNew\",\"example\":\"index.php?option=com_###component###&task=targetview.add&layout=modal&tmpl=component\",\"adjustable\":\"1\",\"description\":\"URL for opening modal to create a new record.\"},\"properties8\":{\"name\":\"urlEdit\",\"example\":\"index.php?option=com_###component###&task=targetview.edit&id={id}&layout=modal&tmpl=component\",\"adjustable\":\"1\",\"description\":\"URL for editing selected record. {id} dynamically replaced with the [sql_title_key] valiue.\"},\"properties9\":{\"name\":\"titleSelect\",\"example\":\"Select Targetview\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"Modal title for the record selection window.\"},\"properties10\":{\"name\":\"titleNew\",\"example\":\"New Targetview\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"Modal title displayed when creating a new record.\"},\"properties11\":{\"name\":\"titleEdit\",\"example\":\"Edit Targetview\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"Modal title displayed when editing existing record.\"},\"properties12\":{\"name\":\"iconSelect\",\"example\":\"icon-copy\",\"adjustable\":\"1\",\"description\":\"CSS icon class from Icomoon or FontAwesome for select button.\"},\"properties13\":{\"name\":\"select\",\"example\":\"true\",\"adjustable\":\"1\",\"description\":\"Allow users to select a record (true\\/false). Default: true.\"},\"properties14\":{\"name\":\"new\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"Allow users to create a new record (true\\/false). Default: false.\"},\"properties15\":{\"name\":\"edit\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"Allow editing of selected record (true\\/false). Default: false.\"},\"properties16\":{\"name\":\"clear\",\"example\":\"true\",\"adjustable\":\"1\",\"description\":\"Allow clearing of the current selection (true\\/false). Default: true.\"},\"properties17\":{\"name\":\"required\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties18\":{\"name\":\"class\",\"example\":\"input-large\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'input-large\'.\"},\"properties19\":{\"name\":\"description\",\"example\":\"Enter some description\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties20\":{\"name\":\"hint\",\"example\":\"Select a Targetview\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) The placeholder to display inside the text box.\"},\"properties21\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value of the field (item ID).\"},\"properties22\":{\"name\":\"readonly\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value\"},\"properties23\":{\"name\":\"disabled\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value - it will also not submit\"},\"properties24\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Allows you to hide the field based on the value(s) of another field; for Joomla 3.2.4+ https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'Modal Select to manage a database record. (J5+ only)', NULL, 1, 33, 0, 17, 'a1cdb0a5-517c-425c-998a-333e92af3e32'); -- diff --git a/admin/src/Helper/ComponentbuilderEmail.php b/admin/src/Helper/ComponentbuilderEmail.php index 8fd72a136..5591f86ec 100644 --- a/admin/src/Helper/ComponentbuilderEmail.php +++ b/admin/src/Helper/ComponentbuilderEmail.php @@ -14,78 +14,107 @@ use Joomla\CMS\Factory; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Mail\Mail; use Joomla\Registry\Registry; -use VDM\Joomla\Utilities\ArrayHelper; +use Joomla\CMS\Mail\MailerInterface; +use Joomla\CMS\Mail\MailerFactoryInterface; -// No direct access to this file \defined('_JEXEC') or die; /** * Componentbuilder component email helper * - * @since 3.0 + * Provides a complete and configurable mailer integration for Joomla components. + * Allows for custom headers, DKIM signing, embedded images, and HTML styling. + * + * @since 3.0 */ abstract class ComponentbuilderEmail { /** - * The active recipient + * The active recipient. * - * @var activeRecipient (array) + * @var array + * @since 3.0 */ - public static $active = []; + public static array $active = []; /** - * Configuration object + * Mail instances container. * - * @var Registry + * @var MailerInterface[] + * @since 1.7.3 */ - public static ?Registry $config = null; + protected static array $instances = []; /** - * Mailer object + * Global Configuration object. * - * @var Mail + * @var Registry|null + * @since 5.1.1 */ - public static ?Mail $mailer = null; + protected static ?Registry $gConfig = null; /** - * Custom Headers + * Component Configuration object. * - * @var array + * @var Registry|null + * @since 3.0 + */ + protected static ?Registry $config = null; + + /** + * Mailer object. + * + * @var MailerInterface|null + * @since 3.0 + */ + protected static ?MailerInterface $mailer = null; + + /** + * Custom email headers. + * + * @var array + * @since 3.0 */ protected static array $header = []; /** - * Get a configuration object + * Retrieve the component configuration. * + * @return Registry Component configuration object + * @since 3.0 */ - public static function getConfig() + protected static function getConfig(): Registry { - if (!self::$config) - { - self::$config = ComponentHelper::getParams('com_componentbuilder'); - } - - return self::$config; + return self::$config ??= ComponentHelper::getParams('com_componentbuilder'); } /** - * Returns the global mailer object, only creating it if it doesn't already exist. + * Retrieve the global configuration. * + * @return Registry Global configuration object + * @since 3.0 */ - public static function getMailerInstance() + protected static function getGlobalConfig(): Registry { - if (!self::$mailer) - { - self::$mailer = self::createMailer(); - } - - return self::$mailer; + return self::$gConfig ??= Factory::getApplication()->getConfig(); } /** - * Check that a string looks like an email address. - * @param string $address The email address to check - * @param string|callable $patternselect A selector for the validation pattern to use : + * Get or create a Mailer instance. + * + * @return MailerInterface A cloned Mail object instance + * @since 3.0 + */ + public static function getMailer(): MailerInterface + { + return self::$mailer ??= self::createMailer(); + } + + /** + * Validate an email address using a selected pattern or callable. + * + * @param string $address Email address to validate. + * @param string|callable|null $patternselect Validation pattern or callable. * * `auto` Pick best pattern automatically; * * `pcre8` Use the squiloople.com pattern, requires PCRE > 8.0, PHP >= 5.3.2, 5.2.14; * * `pcre` Use old PCRE implementation; @@ -97,374 +126,357 @@ abstract class ComponentbuilderEmail * return (strpos($address, '@') !== false); * }); * You can also set the PHPMailer::$validator static to a callable, allowing built-in methods to use your validator. - * @return boolean - * @static - * @access public + * + * @return bool True if valid, false otherwise + * @since 3.0 */ - public static function validateAddress($address, $patternselect = null): bool + public static function validateAddress(string $address, $patternselect = null): bool { - return self::getMailerInstance()->validateAddress($address, $patternselect); + return self::getMailer()->validateAddress($address, $patternselect); } /** - * Get a mailer object. + * Set a custom email header. * - * Returns the global {@link Mail} object, only creating it if it doesn't already exist. + * @param string $key Header name. + * @param string $value Header value. * - * @return Mail object - * - * @see Mail + * @return void + * @since 3.0 */ - public static function getMailer(): Mail + public static function setHeader(string $key, string $value): void { - if (!self::$mailer) + self::$header[$key] = $value; + } + + /** + * Get or create a Mail instance with specific configuration. + * + * @param string $id Instance ID. + * @param bool $exceptions Enable exceptions. + * + * @return MailerInterface Configured Mail instance + * @since 5.1.1 + */ + public static function getInstance(string $id = 'Joomla', bool $exceptions = true): MailerInterface + { + if (!isset(self::$instances[$id])) { - self::$mailer = self::createMailer(); + $config = clone self::getGlobalConfig(); + $config->set('throw_exceptions', $exceptions); + self::$instances[$id] = Factory::getContainer()->get(MailerFactoryInterface::class)->createMailer($config); } - $copy = clone self::$mailer; - - return $copy; + return self::$instances[$id]; } /** - * Create a mailer object + * Create a configured Mail instance. * - * @return Mail object - * - * @see Mail + * @return MailerInterface The created Mail object with sender, reply-to and transport settings. + * @since 3.0 */ - protected static function createMailer(): Mail + protected static function createMailer(): MailerInterface { - // set component params - $conf = self::getConfig(); - - // now load the mailer + $conf = self::getConfig(); $mailer = $conf->get('mailer', 'global'); + $mail = self::getInstance(); - // Create a Mail object - $mail = Mail::getInstance(); - - // check if set to global - if ('global' == $mailer) + if ($mailer === 'global') { - // get the global details - $globalConf = Factory::getConfig(); - - $mailer = $globalConf->get('mailer'); - $smtpauth = ($globalConf->get('smtpauth') == 0) ? null : 1; - $smtpuser = $globalConf->get('smtpuser'); - $smtppass = $globalConf->get('smtppass'); - $smtphost = $globalConf->get('smtphost'); - $smtpsecure = $globalConf->get('smtpsecure'); - $smtpport = $globalConf->get('smtpport'); - $sendmail = $globalConf->get('sendmail'); - $mailfrom = $globalConf->get('mailfrom'); - $fromname = $globalConf->get('fromname'); - $replyto = $globalConf->get('replyto'); - $replytoname = $globalConf->get('replytoname'); + $global = self::getGlobalConfig(); + $mailer = $global->get('mailer'); + $params = [ + 'smtpauth' => $global->get('smtpauth') ? 1 : null, + 'smtpuser' => $global->get('smtpuser'), + 'smtppass' => $global->get('smtppass'), + 'smtphost' => $global->get('smtphost'), + 'smtpsecure' => $global->get('smtpsecure'), + 'smtpport' => $global->get('smtpport'), + 'sendmail' => $global->get('sendmail'), + 'from' => $global->get('mailfrom'), + 'name' => $global->get('fromname'), + 'replyto' => $global->get('replyto'), + 'replytoname' => $global->get('replytoname'), + ]; } else { - $smtpauth = ($conf->get('smtpauth') == 0) ? null : 1; - $smtpuser = $conf->get('smtpuser'); - $smtppass = $conf->get('smtppass'); - $smtphost = $conf->get('smtphost'); - $smtpsecure = $conf->get('smtpsecure'); - $smtpport = $conf->get('smtpport'); - $sendmail = $conf->get('sendmail'); - $mailfrom = $conf->get('emailfrom'); - $fromname = $conf->get('fromname'); - $replyto = $conf->get('replyto'); - $replytoname = $conf->get('replytoname'); + $params = [ + 'smtpauth' => $conf->get('smtpauth') ? 1 : null, + 'smtpuser' => $conf->get('smtpuser'), + 'smtppass' => $conf->get('smtppass'), + 'smtphost' => $conf->get('smtphost'), + 'smtpsecure' => $conf->get('smtpsecure'), + 'smtpport' => $conf->get('smtpport'), + 'sendmail' => $conf->get('sendmail'), + 'from' => $conf->get('emailfrom'), + 'name' => $conf->get('fromname'), + 'replyto' => $conf->get('replyto'), + 'replytoname' => $conf->get('replytoname'), + ]; } - // Set global sender - $mail->setSender(array($mailfrom, $fromname)); + $mail->setSender([$params['from'], $params['name']]); - // set the global reply-to if found - if ($replyto && $replytoname) - { + if (!empty($params['replyto']) && !empty($params['replytoname'])) + { $mail->ClearReplyTos(); - $mail->addReplyTo($replyto, $replytoname); + $mail->addReplyTo($params['replyto'], $params['replytoname']); } - // Default mailer is to use PHP's mail function switch ($mailer) { case 'smtp': - // set the SMTP option - $mail->useSMTP($smtpauth, $smtphost, $smtpuser, $smtppass, $smtpsecure, $smtpport); + $mail->useSMTP( + $params['smtpauth'], + $params['smtphost'], + $params['smtpuser'], + $params['smtppass'], + $params['smtpsecure'], + $params['smtpport'] + ); break; - case 'sendmail': - // set the sendmail option - $mail->useSendmail($sendmail); + $mail->useSendmail($params['sendmail']); $mail->IsSendmail(); break; - default: $mail->IsMail(); - break; } return $mail; } /** - * Set a Mail custom header. + * Compose and send an email with full options including attachments, HTML, DKIM, and reply-to support. * - * @return void + * @param string|array $recipient Email or list of recipients. + * @param string $subject Subject line. + * @param string $body HTML body. + * @param string|null $textonly Optional plain text fallback. + * @param int $mode 1 = HTML, 0 = plain text. + * @param string|null $bounce_email Optional bounce email address. + * @param string|null $idsession Optional message tracking tag. + * @param string|array|null $mailreply Optional reply-to address(es). + * @param string|array|null $replyname Optional reply-to name(s). + * @param string|null $mailfrom Optional sender email override. + * @param string|null $fromname Optional sender name override. + * @param array|null $cc CC recipients. + * @param array|null $bcc BCC recipients. + * @param array|string|null $attachment Attachments. + * @param bool $embeded Embed image flag. + * @param array|null $embeds Embedded image definitions. + * + * @return bool True on success, false on failure. + * @since 3.0 */ - public static function setHeader($target, $value) - { - // set the header - self::$header[$target] = $value; - } - - /** - * Send an email - * - * @return bool on success - * - */ - public static function send($recipient, $subject, $body, $textonly, $mode = 0, $bounce_email = null, $idsession = null, $mailreply = null, $replyname = null , $mailfrom = null, $fromname = null, $cc = null, $bcc = null, $attachment = null, $embeded = null , $embeds = null) - { - // Get a Mail instance + public static function send( + $recipient, + string $subject, + string $body, + ?string $textonly, + int $mode = 0, + ?string $bounce_email = null, + ?string $idsession = null, + $mailreply = null, + $replyname = null, + ?string $mailfrom = null, + ?string $fromname = null, + ?array $cc = null, + ?array $bcc = null, + $attachment = null, + bool $embeded = false, + ?array $embeds = null + ): bool { $mail = self::getMailer(); - - // set component params $conf = self::getConfig(); - // set if we have override if ($mailfrom && $fromname) { - $mail->setSender(array($mailfrom, $fromname)); + $mail->setSender([$mailfrom, $fromname]); } - // load the bounce email as sender if set - if (!is_null($bounce_email)) + if ($bounce_email) { $mail->Sender = $bounce_email; } - // Add tag to email to identify it - if (!is_null($idsession)) + if ($idsession) { - $mail->addCustomHeader('X-VDMmethodID:'.$idsession); + $mail->addCustomHeader('X-VDMmethodID:' . $idsession); } - // set headers if found - if (isset(self::$header) && is_array(self::$header) && count((array)self::$header) > 0) + foreach (self::$header as $key => $val) { - foreach (self::$header as $_target => $_value) - { - $mail->addCustomHeader($_target.':'.$_value); - } + $mail->addCustomHeader($key . ':' . $val); } - // set the subject & Body $mail->setSubject($subject); $mail->setBody($body); - // Are we sending the email as HTML? if ($mode) { - $mail->IsHTML(true); + $mail->isHTML(true); $mail->AltBody = $textonly; } - //embed images - if ($embeded) + if ($embeded && !empty($embeds)) { - if(ArrayHelper::check($embeds)) + foreach ($embeds as $embed) { - foreach($embeds as $embed) - { - $mail->AddEmbeddedImage($embed->Path,$embed->FileName); - } + $mail->addEmbeddedImage($embed->Path, $embed->FileName); } } $mail->addRecipient($recipient); - $mail->addCC($cc); - $mail->addBCC($bcc); - $mail->addAttachment($attachment); + if (!empty($cc)) $mail->addCC($cc); + if (!empty($bcc)) $mail->addBCC($bcc); + if (!empty($attachment)) $mail->addAttachment($attachment); - // Take care of reply email addresses - if (is_array($mailreply)) + if (!empty($mailreply)) { $mail->ClearReplyTos(); - $numReplyTo = count((array)$mailreply); - for ($i=0; $i < $numReplyTo; $i++) + if (is_array($mailreply)) { - $mail->addReplyTo($mailreply[$i], $replyname[$i]); + foreach ($mailreply as $i => $reply) + { + $mail->addReplyTo($reply, $replyname[$i] ?? ''); + } + } + else + { + $mail->addReplyTo($mailreply, (string) $replyname); } } - elseif (!empty($mailreply)) - { - $mail->ClearReplyTos(); - $mail->addReplyTo($mailreply, $replyname); - } - // check if we can add the DKIM to email - if ($conf->get('enable_dkim')) - { - if (!empty($conf->get('dkim_domain')) && !empty($conf->get('dkim_selector')) && !empty($conf->get('dkim_private')) && !empty($conf->get('dkim_public'))) - { - $mail->DKIM_domain = $conf->get('dkim_domain'); - $mail->DKIM_selector = $conf->get('dkim_selector'); - $mail->DKIM_identity = $conf->get('dkim_identity'); - $mail->DKIM_passphrase = $conf->get('dkim_passphrase'); + $sent = false; + $tmp = null; + + try { + if ( + $conf->get('enable_dkim') && + ($domain = $conf->get('dkim_domain')) && + ($selector = $conf->get('dkim_selector')) && + ($privateKey = $conf->get('dkim_private')) + ) { + $mail->DKIM_domain = $domain; + $mail->DKIM_selector = $selector; + $mail->DKIM_identity = $conf->get('dkim_identity') ?: $domain; + $mail->DKIM_passphrase = $conf->get('dkim_passphrase'); $tmp = tempnam(sys_get_temp_dir(), 'VDM'); - $h = fopen($tmp, 'w'); - fwrite($h, $conf->get('dkim_private')); - fclose($h); - $mail->DKIM_private = $tmp; + if ($tmp === false || file_put_contents($tmp, $privateKey) === false) + { + throw new \RuntimeException('Failed to create temporary DKIM private key file.'); + } + + $mail->DKIM_private = $tmp; + } + + $sent = $mail->Send(); + } finally { + if ($tmp && file_exists($tmp)) + { + @unlink($tmp); } } - $sendmail = $mail->Send(); + $sent = $mail->Send(); - if ($conf->get('enable_dkim') && !empty($conf->get('dkim_domain')) && !empty($conf->get('dkim_selector')) && !empty($conf->get('dkim_private')) && !empty($conf->get('dkim_public'))) + if ($tmp) { @unlink($tmp); } - if (method_exists('ComponentbuilderHelper','storeMessage')) + if (method_exists('ComponentbuilderHelper', 'storeMessage')) { - // if we have active recipient details - if (isset(self::$active[$recipient])) - { - // store the massage if the method is set - ComponentbuilderHelper::storeMessage($sendmail, self::$active[$recipient], $subject, $body, $textonly, $mode, 'email'); - // clear memory - unset(self::$active[$recipient]); - } - else - { - // store the massage if the method is set - ComponentbuilderHelper::storeMessage($sendmail, $recipient, $subject, $body, $textonly, $mode, 'email'); - } + $data = self::$active[$recipient] ?? $recipient; + ComponentbuilderHelper::storeMessage($sent, $data, $subject, $body, $textonly, $mode, 'email'); + unset(self::$active[$recipient]); } - return $sendmail; + return $sent; } /** - * Set html text (in a row) and subject (as title) to a email table. - * do not use

instead use
- * in your html that you pass to this method - * since it is a table row it does not - * work well with paragraphs + * Build a complete minimal HTML email body with basic headers. + * Use
instead of

for layout consistency in emails. * - * @return string on success + * @param string $html Body HTML content. + * @param string $subject Email subject/title used in the tag. * + * @return string Full HTML email body. + * @since 3.0 */ - public static function setBasicBody($html, $subject) + public static function setBasicBody(string $html, string $subject): string { - $body = []; - $body[] = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"; - $body[] = "<html xmlns=\"http://www.w3.org/1999/xhtml\">"; - $body[] = "<head>"; - $body[] = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"; - $body[] = "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>"; - $body[] = "<title>" . $subject . ""; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = $html; - $body[] = ""; - $body[] = ""; - - return implode("\n", $body); + return implode("\n", [ + '', + '', + '', + '', + '', + '' . htmlspecialchars($subject) . '', + '', + '', + '', + '', + $html, + '', + '' + ]); } /** - * Set html text (in a row) and subject (as title) to a email table. - * do not use

instead use
- * in your html that you pass to this method - * since it is a table row it does not - * work well with paragraphs + * Build a styled HTML email with outer table formatting for wide layout support. + * Suitable for rich content emails that need outer table structure. * - * @return string on success + * @param string $html Inner body HTML content. + * @param string $subject Email subject/title used in the tag. * + * @return string Complete HTML email content. + * @since 3.0 */ - public static function setTableBody($html, $subject) + public static function setTableBody(string $html, string $subject): string { - $body = []; - $body[] = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"; - $body[] = "<html xmlns=\"http://www.w3.org/1999/xhtml\">"; - $body[] = "<head>"; - $body[] = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"; - $body[] = "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>"; - $body[] = "<title>" . $subject . ""; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = "\n"; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = "
"; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = "
"; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = ""; - $body[] = "
"; - $body[] = $html; - $body[] = "
"; - $body[] = ""; - $body[] = "
"; - $body[] = ""; - $body[] = "
"; - $body[] = ""; - $body[] = ""; - $body[] = ""; - - return implode("\n", $body); + return implode("\n", [ + '', + '', + '', + '', + '', + '' . htmlspecialchars($subject) . '', + '', + '', + '', + '', + '', + '
', + '', + '
', + '', + '
', + $html, + '
', + '
', + '
', + '', + '' + ]); } } diff --git a/admin/src/Helper/ComponentbuilderHelper.php b/admin/src/Helper/ComponentbuilderHelper.php index 44125cc58..439309234 100644 --- a/admin/src/Helper/ComponentbuilderHelper.php +++ b/admin/src/Helper/ComponentbuilderHelper.php @@ -46,6 +46,7 @@ use VDM\Joomla\Utilities\FileHelper; use VDM\Joomla\Utilities\JsonHelper; use VDM\Joomla\Utilities\ObjectHelper; use VDM\Joomla\Utilities\Component\Helper; +use VDM\Joomla\Utilities\SessionHelper; use VDM\Joomla\Componentbuilder\Compiler\Utilities\FieldHelper; use VDM\Joomla\Componentbuilder\Compiler\Factory as CompilerFactory; use VDM\Joomla\Utilities\Base64Helper; @@ -1469,15 +1470,6 @@ abstract class ComponentbuilderHelper return false; } - /** - * set the session defaults if not set - **/ - protected static function setSessionDefaults() - { - // noting for now - return true; - } - /** * check if it is a new hash **/ @@ -2294,61 +2286,70 @@ abstract class ComponentbuilderHelper /** - * the Butler - **/ - public static $session = array(); + * Local in-memory cache of session values for faster access. + * + * @var array + * @since 3.5.2 + */ + protected static array $localSession = []; /** - * the Butler Assistant - **/ - protected static $localSession = array(); - - /** - * start a session if not already set, and load with data - **/ - public static function loadSession() + * Initialize the session and set default values. + * + * This ensures the session is ready and can be used safely. + * Defaults can be loaded or checked here if needed. + * + * @return void + * @throws \RuntimeException if the session cannot be initialized + * @since 3.5.2 + */ + public static function loadSession(): void { - if (!isset(self::$session) || !ObjectHelper::check(self::$session)) + // Ensure the session is initialized (handled by the session() method). + SessionHelper::session(); + + // Set default session values if needed + if (method_exists(static::class, 'setSessionDefaults')) { - self::$session = Factory::getApplication()->getSession(); + static::setSessionDefaults(); } - // set the defaults - self::setSessionDefaults(); } /** - * give Session more to keep - **/ - public static function set($key, $value) + * Store a key-value pair in the session and local memory. + * + * @param string $key The session key name + * @param mixed $value The value to store + * + * @return mixed The previous session value if it existed + * @since 3.5.2 + */ + public static function set(string $key, $value) { - if (!isset(self::$session) || !ObjectHelper::check(self::$session)) - { - self::$session = Factory::getApplication()->getSession(); - } - // set to local memory to speed up program - self::$localSession[$key] = $value; - // load to session for later use - return self::$session->set($key, self::$localSession[$key]); + static::$localSession[$key] = $value; + + return SessionHelper::set($key, $value); } /** - * get info from Session - **/ - public static function get($key, $default = null) + * Retrieve a value from the session. + * Uses local cache if already fetched during this request. + * + * @param string $key The session key name + * @param mixed $default Default value if the key is not found + * + * @return mixed The session value + * @since 3.5.2 + */ + public static function get(string $key, $default = null) { - if (!isset(self::$session) || !ObjectHelper::check(self::$session)) + if (!array_key_exists($key, static::$localSession)) { - self::$session = Factory::getApplication()->getSession(); + static::$localSession[$key] = SessionHelper::get($key, $default); } - // check if in local memory - if (!isset(self::$localSession[$key])) - { - // set to local memory to speed up program - self::$localSession[$key] = self::$session->get($key, $default); - } - return self::$localSession[$key]; - } + return static::$localSession[$key]; + } /** * get field type properties diff --git a/admin/src/Model/Admin_viewModel.php b/admin/src/Model/Admin_viewModel.php index b31bd40e7..f1972957e 100644 --- a/admin/src/Model/Admin_viewModel.php +++ b/admin/src/Model/Admin_viewModel.php @@ -970,7 +970,7 @@ class Admin_viewModel extends AdminModel /** * Method to validate the form data. * - * @param JForm $form The form to validate against. + * @param Form $form The form to validate against. * @param array $data The data to validate. * @param string $group The name of the field group to validate. * diff --git a/admin/src/Model/Admin_viewsModel.php b/admin/src/Model/Admin_viewsModel.php index cae2caa38..4c8cfb2c4 100644 --- a/admin/src/Model/Admin_viewsModel.php +++ b/admin/src/Model/Admin_viewsModel.php @@ -28,6 +28,7 @@ use VDM\Joomla\Utilities\FormHelper as JCBFormHelper; use VDM\Joomla\Utilities\ArrayHelper as UtilitiesArrayHelper; use VDM\Joomla\Utilities\ObjectHelper; use VDM\Joomla\Utilities\StringHelper; +use Joomla\CMS\Form\Form; // No direct access to this file \defined('_JEXEC') or die; @@ -109,7 +110,7 @@ class Admin_viewsModel extends ListModel * @param array $data data * @param boolean $loadData load current data * - * @return \JForm|boolean The \JForm object or false on error + * @return Form|boolean The Form object or false on error * * @since JCB 2.12.5 */ diff --git a/admin/src/Model/Custom_admin_viewsModel.php b/admin/src/Model/Custom_admin_viewsModel.php index cbdc3bd99..53cba2ccb 100644 --- a/admin/src/Model/Custom_admin_viewsModel.php +++ b/admin/src/Model/Custom_admin_viewsModel.php @@ -28,6 +28,7 @@ use VDM\Joomla\Componentbuilder\Utilities\FilterHelper as JCBFilterHelper; use VDM\Joomla\Utilities\ArrayHelper as UtilitiesArrayHelper; use VDM\Joomla\Utilities\ObjectHelper; use VDM\Joomla\Utilities\StringHelper; +use Joomla\CMS\Form\Form; // No direct access to this file \defined('_JEXEC') or die; @@ -108,7 +109,7 @@ class Custom_admin_viewsModel extends ListModel * @param array $data data * @param boolean $loadData load current data * - * @return \JForm|boolean The \JForm object or false on error + * @return Form|boolean The Form object or false on error * * @since JCB 2.12.5 */ diff --git a/admin/src/Model/Custom_codeModel.php b/admin/src/Model/Custom_codeModel.php index 90246696e..661ded6eb 100644 --- a/admin/src/Model/Custom_codeModel.php +++ b/admin/src/Model/Custom_codeModel.php @@ -592,7 +592,7 @@ class Custom_codeModel extends AdminModel /** * Method to validate the form data. * - * @param JForm $form The form to validate against. + * @param Form $form The form to validate against. * @param array $data The data to validate. * @param string $group The name of the field group to validate. * diff --git a/admin/src/Model/Dynamic_getModel.php b/admin/src/Model/Dynamic_getModel.php index 6564b8387..928623be6 100644 --- a/admin/src/Model/Dynamic_getModel.php +++ b/admin/src/Model/Dynamic_getModel.php @@ -747,7 +747,7 @@ class Dynamic_getModel extends AdminModel /** * Method to validate the form data. * - * @param JForm $form The form to validate against. + * @param Form $form The form to validate against. * @param array $data The data to validate. * @param string $group The name of the field group to validate. * diff --git a/admin/src/Model/FieldModel.php b/admin/src/Model/FieldModel.php index 013521948..74e43feb2 100644 --- a/admin/src/Model/FieldModel.php +++ b/admin/src/Model/FieldModel.php @@ -678,7 +678,7 @@ class FieldModel extends AdminModel /** * Method to validate the form data. * - * @param JForm $form The form to validate against. + * @param Form $form The form to validate against. * @param array $data The data to validate. * @param string $group The name of the field group to validate. * diff --git a/admin/src/Model/FieldsModel.php b/admin/src/Model/FieldsModel.php index 7215c6b9e..25d33b844 100644 --- a/admin/src/Model/FieldsModel.php +++ b/admin/src/Model/FieldsModel.php @@ -28,6 +28,7 @@ use VDM\Joomla\Componentbuilder\Utilities\FilterHelper as JCBFilterHelper; use VDM\Joomla\Utilities\ArrayHelper as UtilitiesArrayHelper; use VDM\Joomla\Utilities\ObjectHelper; use VDM\Joomla\Utilities\StringHelper; +use Joomla\CMS\Form\Form; // No direct access to this file \defined('_JEXEC') or die; @@ -111,7 +112,7 @@ class FieldsModel extends ListModel * @param array $data data * @param boolean $loadData load current data * - * @return \JForm|boolean The \JForm object or false on error + * @return Form|boolean The Form object or false on error * * @since JCB 2.12.5 */ diff --git a/admin/src/Model/FieldtypeModel.php b/admin/src/Model/FieldtypeModel.php index 5ec4b3578..a94f9503a 100644 --- a/admin/src/Model/FieldtypeModel.php +++ b/admin/src/Model/FieldtypeModel.php @@ -611,7 +611,7 @@ class FieldtypeModel extends AdminModel /** * Method to validate the form data. * - * @param JForm $form The form to validate against. + * @param Form $form The form to validate against. * @param array $data The data to validate. * @param string $group The name of the field group to validate. * diff --git a/admin/src/Model/Help_documentModel.php b/admin/src/Model/Help_documentModel.php index 0baeba291..5e975e6f8 100644 --- a/admin/src/Model/Help_documentModel.php +++ b/admin/src/Model/Help_documentModel.php @@ -477,7 +477,7 @@ class Help_documentModel extends AdminModel /** * Method to validate the form data. * - * @param JForm $form The form to validate against. + * @param Form $form The form to validate against. * @param array $data The data to validate. * @param string $group The name of the field group to validate. * diff --git a/admin/src/Model/Joomla_componentModel.php b/admin/src/Model/Joomla_componentModel.php index 0ac277022..6c4df7323 100644 --- a/admin/src/Model/Joomla_componentModel.php +++ b/admin/src/Model/Joomla_componentModel.php @@ -904,7 +904,7 @@ class Joomla_componentModel extends AdminModel /** * Method to validate the form data. * - * @param JForm $form The form to validate against. + * @param Form $form The form to validate against. * @param array $data The data to validate. * @param string $group The name of the field group to validate. * diff --git a/admin/src/Model/Language_translationModel.php b/admin/src/Model/Language_translationModel.php index 27299dcbd..85fc79f63 100644 --- a/admin/src/Model/Language_translationModel.php +++ b/admin/src/Model/Language_translationModel.php @@ -202,6 +202,30 @@ class Language_translationModel extends AdminModel $item->metadata = $registry->toArray(); } + if (!empty($item->plugins)) + { + // Convert the plugins field to an array. + $plugins = new Registry; + $plugins->loadString($item->plugins); + $item->plugins = $plugins->toArray(); + } + + if (!empty($item->modules)) + { + // Convert the modules field to an array. + $modules = new Registry; + $modules->loadString($item->modules); + $item->modules = $modules->toArray(); + } + + if (!empty($item->components)) + { + // Convert the components field to an array. + $components = new Registry; + $components->loadString($item->components); + $item->components = $components->toArray(); + } + if (!empty($item->translation)) { // Convert the translation field to an array. @@ -210,24 +234,6 @@ class Language_translationModel extends AdminModel $item->translation = $translation->toArray(); } - if (!empty($item->plugins)) - { - // JSON Decode plugins. - $item->plugins = json_decode($item->plugins); - } - - if (!empty($item->modules)) - { - // JSON Decode modules. - $item->modules = json_decode($item->modules); - } - - if (!empty($item->components)) - { - // JSON Decode components. - $item->components = json_decode($item->components); - } - if (empty($item->id)) { @@ -987,6 +993,45 @@ class Language_translationModel extends AdminModel $data['metadata'] = (string) $metadata; } + // Set the plugins items to data. + if (isset($data['plugins']) && is_array($data['plugins'])) + { + $plugins = new Registry; + $plugins->loadArray($data['plugins']); + $data['plugins'] = (string) $plugins; + } + elseif (!isset($data['plugins'])) + { + // Set the empty plugins to data + $data['plugins'] = ''; + } + + // Set the modules items to data. + if (isset($data['modules']) && is_array($data['modules'])) + { + $modules = new Registry; + $modules->loadArray($data['modules']); + $data['modules'] = (string) $modules; + } + elseif (!isset($data['modules'])) + { + // Set the empty modules to data + $data['modules'] = ''; + } + + // Set the components items to data. + if (isset($data['components']) && is_array($data['components'])) + { + $components = new Registry; + $components->loadArray($data['components']); + $data['components'] = (string) $components; + } + elseif (!isset($data['components'])) + { + // Set the empty components to data + $data['components'] = ''; + } + // Set the translation items to data. if (isset($data['translation']) && is_array($data['translation'])) { @@ -1000,24 +1045,6 @@ class Language_translationModel extends AdminModel $data['translation'] = ''; } - // Set the plugins string to JSON string. - if (isset($data['plugins'])) - { - $data['plugins'] = (string) json_encode($data['plugins']); - } - - // Set the modules string to JSON string. - if (isset($data['modules'])) - { - $data['modules'] = (string) json_encode($data['modules']); - } - - // Set the components string to JSON string. - if (isset($data['components'])) - { - $data['components'] = (string) json_encode($data['components']); - } - // Set the Params Items to data if (isset($data['params']) && is_array($data['params'])) { diff --git a/admin/src/Model/Language_translationsModel.php b/admin/src/Model/Language_translationsModel.php index 3fa452160..31ddafc9b 100644 --- a/admin/src/Model/Language_translationsModel.php +++ b/admin/src/Model/Language_translationsModel.php @@ -29,6 +29,7 @@ use VDM\Joomla\Utilities\ArrayHelper as UtilitiesArrayHelper; use VDM\Joomla\Utilities\ObjectHelper; use VDM\Joomla\Utilities\StringHelper; use VDM\Joomla\Utilities\JsonHelper; +use Joomla\CMS\Form\Form; // No direct access to this file \defined('_JEXEC') or die; @@ -104,7 +105,7 @@ class Language_translationsModel extends ListModel * @param array $data data * @param boolean $loadData load current data * - * @return \JForm|boolean The \JForm object or false on error + * @return Form|boolean The Form object or false on error * * @since JCB 2.12.5 */ @@ -355,54 +356,50 @@ class Language_translationsModel extends ListModel // From the componentbuilder_item table $query->from($db->quoteName('#__componentbuilder_language_translation', 'a')); - // do not use these filters in the export method - if (!isset($_export) || !$_export) + // Filtering "translated in" + $filter_translated = $this->state->get("filter.translated"); + if ($filter_translated !== null && !empty($filter_translated)) { - // Filtering "translated in" - $filter_translated = $this->state->get("filter.translated"); - if ($filter_translated !== null && !empty($filter_translated)) + if (($ids = JCBFilterHelper::translations($filter_translated)) !== null) { - if (($ids = JCBFilterHelper::translations($filter_translated)) !== null) - { - $query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')'); - } - else - { - // there is none - $query->where($db->quoteName('a.id') . ' = ' . 0); - } + $query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')'); } - - // Filtering "not translated in" - $filter_not_translated = $this->state->get("filter.not_translated"); - if ($filter_not_translated !== null && !empty($filter_not_translated)) + else { - if (($ids = JCBFilterHelper::translations($filter_not_translated, false)) !== null) - { - $query->where($db->quoteName('a.id') . ' IN (' . implode(',',$ids) . ')'); - } - else - { - // there is none - $query->where($db->quoteName('a.id') . ' = ' . 0); - } + // there is none + $query->where($db->quoteName('a.id') . ' = ' . 0); } + } - // Filtering "extension" - $filter_extension = $this->state->get("filter.extension"); - if ($filter_extension !== null && !empty($filter_extension)) + // Filtering "not translated in" + $filter_not_translated = $this->state->get("filter.not_translated"); + if ($filter_not_translated !== null && !empty($filter_not_translated)) + { + if (($ids = JCBFilterHelper::translations($filter_not_translated, false)) !== null) { - // column name, and id - $type_extension = explode('__', $filter_extension); - if (($ids = JCBFilterHelper::translation((int) $type_extension[1], $type_extension[0])) !== null) - { - $query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')'); - } - else - { - // there is none - $query->where($db->quoteName('a.id') . ' = ' . 0); - } + $query->where($db->quoteName('a.id') . ' IN (' . implode(',',$ids) . ')'); + } + else + { + // there is none + $query->where($db->quoteName('a.id') . ' = ' . 0); + } + } + + // Filtering "extension" + $filter_extension = $this->state->get("filter.extension"); + if ($filter_extension !== null && !empty($filter_extension)) + { + // column name, and id + $type_extension = explode('__', $filter_extension); + if (($ids = JCBFilterHelper::translation((string) $type_extension[1], (string) $type_extension[0])) !== null) + { + $query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')'); + } + else + { + // there is none + $query->where($db->quoteName('a.id') . ' = ' . 0); } } @@ -516,54 +513,50 @@ class Language_translationsModel extends ListModel $query->where('a.id IN (' . implode(',',$pks) . ')'); } - // do not use these filters in the export method - if (!isset($_export) || !$_export) - { // Filtering "translated in" - $filter_translated = $this->state->get("filter.translated"); - if ($filter_translated !== null && !empty($filter_translated)) + $filter_translated = $this->state->get("filter.translated"); + if ($filter_translated !== null && !empty($filter_translated)) + { + if (($ids = JCBFilterHelper::translations($filter_translated)) !== null) { - if (($ids = JCBFilterHelper::translations($filter_translated)) !== null) - { - $query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')'); - } - else - { - // there is none - $query->where($db->quoteName('a.id') . ' = ' . 0); - } + $query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')'); } - - // Filtering "not translated in" - $filter_not_translated = $this->state->get("filter.not_translated"); - if ($filter_not_translated !== null && !empty($filter_not_translated)) + else { - if (($ids = JCBFilterHelper::translations($filter_not_translated, false)) !== null) - { - $query->where($db->quoteName('a.id') . ' IN (' . implode(',',$ids) . ')'); - } - else - { - // there is none - $query->where($db->quoteName('a.id') . ' = ' . 0); - } + // there is none + $query->where($db->quoteName('a.id') . ' = ' . 0); } + } - // Filtering "extension" - $filter_extension = $this->state->get("filter.extension"); - if ($filter_extension !== null && !empty($filter_extension)) + // Filtering "not translated in" + $filter_not_translated = $this->state->get("filter.not_translated"); + if ($filter_not_translated !== null && !empty($filter_not_translated)) + { + if (($ids = JCBFilterHelper::translations($filter_not_translated, false)) !== null) { - // column name, and id - $type_extension = explode('__', $filter_extension); - if (($ids = JCBFilterHelper::translation((int) $type_extension[1], $type_extension[0])) !== null) - { - $query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')'); - } - else - { - // there is none - $query->where($db->quoteName('a.id') . ' = ' . 0); - } + $query->where($db->quoteName('a.id') . ' IN (' . implode(',',$ids) . ')'); + } + else + { + // there is none + $query->where($db->quoteName('a.id') . ' = ' . 0); + } + } + + // Filtering "extension" + $filter_extension = $this->state->get("filter.extension"); + if ($filter_extension !== null && !empty($filter_extension)) + { + // column name, and id + $type_extension = explode('__', $filter_extension); + if (($ids = JCBFilterHelper::translation((string) $type_extension[1], (string) $type_extension[0])) !== null) + { + $query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')'); + } + else + { + // there is none + $query->where($db->quoteName('a.id') . ' = ' . 0); } } // Implement View Level Access diff --git a/admin/src/Model/LibraryModel.php b/admin/src/Model/LibraryModel.php index afcc4b4ba..e0f26d5a1 100644 --- a/admin/src/Model/LibraryModel.php +++ b/admin/src/Model/LibraryModel.php @@ -615,7 +615,7 @@ class LibraryModel extends AdminModel /** * Method to validate the form data. * - * @param JForm $form The form to validate against. + * @param Form $form The form to validate against. * @param array $data The data to validate. * @param string $group The name of the field group to validate. * diff --git a/admin/src/Model/PowersModel.php b/admin/src/Model/PowersModel.php index 4a74b6c85..34ba0ed74 100644 --- a/admin/src/Model/PowersModel.php +++ b/admin/src/Model/PowersModel.php @@ -28,6 +28,7 @@ use VDM\Joomla\Utilities\FormHelper as JCBFormHelper; use VDM\Joomla\Utilities\ArrayHelper as UtilitiesArrayHelper; use VDM\Joomla\Utilities\ObjectHelper; use VDM\Joomla\Utilities\StringHelper; +use Joomla\CMS\Form\Form; // No direct access to this file \defined('_JEXEC') or die; @@ -107,7 +108,7 @@ class PowersModel extends ListModel * @param array $data data * @param boolean $loadData load current data * - * @return \JForm|boolean The \JForm object or false on error + * @return Form|boolean The Form object or false on error * * @since JCB 2.12.5 */ diff --git a/admin/src/Model/ServerModel.php b/admin/src/Model/ServerModel.php index 3fcaead08..e89776ecd 100644 --- a/admin/src/Model/ServerModel.php +++ b/admin/src/Model/ServerModel.php @@ -534,7 +534,7 @@ class ServerModel extends AdminModel /** * Method to validate the form data. * - * @param JForm $form The form to validate against. + * @param Form $form The form to validate against. * @param array $data The data to validate. * @param string $group The name of the field group to validate. * diff --git a/admin/src/Model/Site_viewsModel.php b/admin/src/Model/Site_viewsModel.php index 95279fe5f..34e959e30 100644 --- a/admin/src/Model/Site_viewsModel.php +++ b/admin/src/Model/Site_viewsModel.php @@ -28,6 +28,7 @@ use VDM\Joomla\Componentbuilder\Utilities\FilterHelper as JCBFilterHelper; use VDM\Joomla\Utilities\ArrayHelper as UtilitiesArrayHelper; use VDM\Joomla\Utilities\ObjectHelper; use VDM\Joomla\Utilities\StringHelper; +use Joomla\CMS\Form\Form; // No direct access to this file \defined('_JEXEC') or die; @@ -109,7 +110,7 @@ class Site_viewsModel extends ListModel * @param array $data data * @param boolean $loadData load current data * - * @return \JForm|boolean The \JForm object or false on error + * @return Form|boolean The Form object or false on error * * @since JCB 2.12.5 */ diff --git a/componentbuilder.xml b/componentbuilder.xml index 9b486bba7..abc0b94a5 100644 --- a/componentbuilder.xml +++ b/componentbuilder.xml @@ -1,15 +1,15 @@ COM_COMPONENTBUILDER - 25th June, 2025 + 1st July, 2025 Llewellyn van der Merwe joomla@vdm.io https://dev.vdm.io Copyright (C) 2015 Vast Development Method. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt - 5.1.1-beta5 + 5.1.1-beta6 Component Builder (v.5.1.1-beta5) +

Component Builder (v.5.1.1-beta6)

The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time. diff --git a/componentbuilder_update_server.xml b/componentbuilder_update_server.xml index 4aea7aaa2..c2e1534ca 100644 --- a/componentbuilder_update_server.xml +++ b/componentbuilder_update_server.xml @@ -8,7 +8,7 @@ 3.2.5 https://dev.vdm.io - https://github.com/vdm-io/pkg-component-builder/archive/refs/tags/v3.2.5.zip + https://github.com/joomengine/pkg-component-builder/archive/refs/tags/v3.2.5.zip stable @@ -26,7 +26,7 @@ 4.1.0 https://dev.vdm.io - https://github.com/vdm-io/pkg-component-builder/archive/refs/tags/v4.1.0.zip + https://github.com/joomengine/pkg-component-builder/archive/refs/tags/v4.1.0.zip stable @@ -44,7 +44,7 @@ 5.0.0 https://dev.vdm.io - https://github.com/vdm-io/pkg-component-builder/archive/refs/tags/v5.0.0.zip + https://github.com/joomengine/pkg-component-builder/archive/refs/tags/v5.0.0.zip stable @@ -62,7 +62,7 @@ 5.0.1 https://dev.vdm.io - https://github.com/vdm-io/pkg-component-builder/archive/refs/tags/v5.0.1.zip + https://github.com/joomengine/pkg-component-builder/archive/refs/tags/v5.0.1.zip stable @@ -80,7 +80,7 @@ 5.0.2 https://dev.vdm.io - https://github.com/vdm-io/pkg-component-builder/archive/refs/tags/v5.0.2.zip + https://github.com/joomengine/pkg-component-builder/archive/refs/tags/v5.0.2.zip stable @@ -98,7 +98,7 @@ 5.0.3 https://dev.vdm.io - https://github.com/vdm-io/pkg-component-builder/archive/refs/tags/v5.0.3.zip + https://github.com/joomengine/pkg-component-builder/archive/refs/tags/v5.0.3.zip stable @@ -116,7 +116,7 @@ 5.1.0 https://dev.vdm.io - https://github.com/vdm-io/pkg-component-builder/archive/refs/tags/v5.1.0.zip + https://github.com/joomengine/pkg-component-builder/archive/refs/tags/v5.1.0.zip stable @@ -134,7 +134,7 @@ 5.1.1-beta https://dev.vdm.io - https://github.com/vdm-io/pkg-component-builder/archive/refs/tags/v5.1.1-beta5.zip + https://github.com/joomengine/pkg-component-builder/archive/refs/tags/v5.1.1-beta6.zip beta @@ -149,10 +149,10 @@ pkg_component_builder package site - 5.1.1-beta5 + 5.1.1-beta6 https://dev.vdm.io - https://github.com/vdm-io/pkg-component-builder/archive/refs/tags/v5.1.1-beta5.zip + https://github.com/joomengine/pkg-component-builder/archive/refs/tags/v5.1.1-beta6.zip beta diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Interpretation.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Interpretation.php index 509edd39d..1e1a0d7bb 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Interpretation.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Interpretation.php @@ -29,6 +29,7 @@ use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; use VDM\Joomla\Componentbuilder\Compiler\Utilities\Minify; use VDM\Joomla\Componentbuilder\Compiler\Helper\Fields; +use Joomla\CMS\Form\Form; /** @@ -17415,7 +17416,7 @@ class Interpretation extends Fields . " * Method to validate the form data."; $fix .= PHP_EOL . Indent::_(1) . " *"; $fix .= PHP_EOL . Indent::_(1) - . " * @param JForm \$form The form to validate against."; + . " * @param Form \$form The form to validate against."; $fix .= PHP_EOL . Indent::_(1) . " * @param array \$data The data to validate."; $fix .= PHP_EOL . Indent::_(1) diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaThree/Header.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaThree/Header.php index e2245ac5e..cc947d4d4 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaThree/Header.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaThree/Header.php @@ -25,6 +25,7 @@ use VDM\Joomla\Componentbuilder\Compiler\Builder\Tags; use VDM\Joomla\Utilities\ArrayHelper; use VDM\Joomla\Utilities\StringHelper; use VDM\Joomla\Componentbuilder\Compiler\Interfaces\HeaderInterface; +use Joomla\CMS\Form\FormHelper; /** @@ -422,7 +423,7 @@ final class Header implements HeaderInterface case 'form.custom.field': $headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;'; $headers[] = "jimport('joomla.form.helper');"; - $headers[] = "\JFormHelper::loadFieldClass('###JFORM_extends###');"; + $headers[] = "FormHelper::loadFieldClass('###JFORM_extends###');"; break; default: diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Readme/Main.php index bcce657a5..a2522d8e9 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Readme/Main.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Readme/Main.php @@ -78,7 +78,7 @@ You write clean, readable logic — and JCB ensures compatibility under the hood MD; // What can be found here - $readme[] = '### What's in This Repository?'; + $readme[] = '### What\'s in This Repository?'; $readme[] = << 'TINYINT(1)', 'default' => '1', 'GUID' => '2089f202-667a-4fbd-881c-cc0fe1343ce4', - 'null_switch' => 'NOT NULL', + 'null_switch' => 'NULL', 'unique_key' => false, 'key' => true, ], @@ -10863,7 +10863,7 @@ class Table extends BaseTable implements TableInterface 'store' => 'json', 'tab_name' => 'Details', 'db' => [ - 'type' => 'TEXT', + 'type' => 'MEDIUMTEXT', 'default' => 'EMPTY', 'GUID' => '36edbdce-b9b7-4b89-b2d9-03f91bb56019', 'null_switch' => 'NULL', diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Database/Delete.php b/libraries/vendor_jcb/VDM.Joomla/src/Database/Delete.php index 731ad428a..18b361803 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Database/Delete.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Database/Delete.php @@ -42,7 +42,7 @@ final class Delete extends Database implements DeleteInterface } // get a query object - $query = $this->db->getQuery(true); + $query = $this->db->createQuery(); // start the conditions bucket $_conditions = []; diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Database/Insert.php b/libraries/vendor_jcb/VDM.Joomla/src/Database/Insert.php index 2cc70b4ed..cf11c39ab 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Database/Insert.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Database/Insert.php @@ -219,7 +219,7 @@ final class Insert extends Versioning implements InsertInterface $this->historyGuid = []; // get a query object - $query = $this->db->getQuery(true); + $query = $this->db->createQuery(); $table = $this->getTable($table); // set the query targets @@ -242,7 +242,7 @@ final class Insert extends Versioning implements InsertInterface $limit = 300; // get a query object - $query = $this->db->getQuery(true); + $query = $this->db->createQuery(); // set the query targets $query->insert($this->db->quoteName($table))->columns($this->db->quoteName(array_keys($columns))); @@ -334,7 +334,7 @@ final class Insert extends Versioning implements InsertInterface { try { - $query = $this->db->getQuery(true) + $query = $this->db->createQuery() ->select($this->db->quoteName('id')) ->from($this->db->quoteName($table)) ->where( diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Database/Load.php b/libraries/vendor_jcb/VDM.Joomla/src/Database/Load.php index 4dac6532c..5e31cb03c 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Database/Load.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Database/Load.php @@ -330,7 +330,7 @@ final class Load extends Database implements LoadInterface protected function query(array $select, array $tables, ?array $where = null, ?array $order = null, ?int $limit = null): ?object { - $query = $this->db->getQuery(true); + $query = $this->db->createQuery(); $this->applySelect($query, $select); $this->applyFromAndJoins($query, $tables); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Database/Update.php b/libraries/vendor_jcb/VDM.Joomla/src/Database/Update.php index a88308a22..3eef64a4d 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Database/Update.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Database/Update.php @@ -167,7 +167,7 @@ final class Update extends Versioning implements UpdateInterface $table = $this->getTable($table); // get a query object - $query = $this->db->getQuery(true); + $query = $this->db->createQuery(); // set the query targets $query->update($this->db->quoteName($table)); @@ -270,7 +270,7 @@ final class Update extends Versioning implements UpdateInterface } // Get a query object - $query = $this->db->getQuery(true); + $query = $this->db->createQuery(); // Prepare the update statement $query->update($this->db->quoteName($this->getTable($table))) @@ -317,7 +317,7 @@ final class Update extends Versioning implements UpdateInterface try { - $query = $this->db->getQuery(true) + $query = $this->db->createQuery() ->select($this->db->quoteName('id')) ->from($this->db->quoteName($table)) ->where($this->db->quoteName('guid') . ' = ' . $this->quote($guid)); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Utilities/StringHelper.php b/libraries/vendor_jcb/VDM.Joomla/src/Utilities/StringHelper.php index 69c884d01..a2033d9e9 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Utilities/StringHelper.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Utilities/StringHelper.php @@ -87,12 +87,12 @@ abstract class StringHelper { // Safely escape output for HTML $title = self::shorten($string, 400 , false); - $escapedTitle = htmlspecialchars($title, ENT_QUOTES, 'UTF-8'); - $escapedShort = htmlspecialchars($shortened, ENT_QUOTES, 'UTF-8'); - return '' - . $escapedShort - . ''; + return sprintf( + '%s', + htmlspecialchars($title, ENT_QUOTES, 'UTF-8'), + htmlspecialchars($shortened, ENT_QUOTES, 'UTF-8') + ); } // Return shortened version without tooltip