Japanese English

PHP deobfuscation, decryption, reconstruction tool

De-obfuscate PHP malware/viruses and tampering code on Wordpress to original readable code.

*Please note that not all obfuscation codes can be decoded.

Decoded the code below.

<?php /* * @ https://EasyToYou.eu - IonCube v11 Decoder Online * @ PHP 7.2 & 7.3 * @ Decoder version: 1.0.6 * @ Release: 10/08/2022 */ if (!defined("WHMCS")) { exit("This file cannot be accessed directly"); } function pterobill_MetaData() { return ["DisplayName" => "PteroBill", "APIVersion...



Obfuscated php code

<?php
/*
 * @ https://EasyToYou.eu - IonCube v11 Decoder Online
 * @ PHP 7.2 & 7.3
 * @ Decoder version: 1.0.6
 * @ Release: 10/08/2022
 */

if (!defined("WHMCS")) {
    exit("This file cannot be accessed directly");
}
function pterobill_MetaData()
{
    return ["DisplayName" => "PteroBill", "APIVersion" => "1.1", "RequiresServer" => true, "ListAccountsUniqueIdentifierField" => "username", "ListAccountsUniqueIdentifierDisplayName" => "Service ID"];
}
function pterobill_CreateDatabaseTable()
{
    try {
        WHMCS\Database\Capsule::schema()->create("tblpterobill_iptracker", function ($table) {
            $table->increments("id");
            $table->string("ip_addr");
            $table->integer("external_id");
        });
    } catch (Exception $_obfuscated_0D2A04310F0E140F3B2A090E3839221803192B0F170122_) {
        logModuleCall("PteroBill", "Create database failed", "", $_obfuscated_0D2A04310F0E140F3B2A090E3839221803192B0F170122_->getMessage());
    }
}
function pterobill_GetHostname($params)
{
    $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ = $params["serverhostname"];
    foreach (["DOT" => ".", "DASH" => "-"] as $_obfuscated_0D3E5B40241631263C1B250B04312E213F1A5C1C2A3932_ => $_obfuscated_0D382A3C0E122A1C1D0501050D301206242D2118030F11_) {
        $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ = str_replace($_obfuscated_0D3E5B40241631263C1B250B04312E213F1A5C1C2A3932_, $_obfuscated_0D382A3C0E122A1C1D0501050D301206242D2118030F11_, $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_);
    }
    if (ip2long($_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_) !== false) {
        $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ = "http://" . $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_;
    } else {
        $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ = ($params["serversecure"] ? "https://" : "http://") . $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_;
    }
    return rtrim($_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_, "/");
}
function pterobill_ApiCall($params, $endpoint, $data = [], $method = "GET", $api_type = "admin")
{
    if ($api_type == "admin") {
        $_obfuscated_0D2513050A2221212C0F13263C30172B2F052727130532_ = $params["serverpassword"];
        $_obfuscated_0D3B31061A1415174038370E143524052A361D2F2D1222_ = "application";
    } else {
        if ($api_type == "client") {
            $_obfuscated_0D2513050A2221212C0F13263C30172B2F052727130532_ = $params["serveraccesshash"];
            $_obfuscated_0D3B31061A1415174038370E143524052A361D2F2D1222_ = "client";
        }
    }
    $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ = pterobill_gethostname($params);
    $url = $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ . "/api/" . $_obfuscated_0D3B31061A1415174038370E143524052A361D2F2D1222_ . "/" . $endpoint;
    $_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_ = curl_init();
    curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_URL, $url);
    curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_CUSTOMREQUEST, $method);
    curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_POSTREDIR, CURL_REDIR_POST_301);
    curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
    curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_TIMEOUT, 5);
    curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_USERAGENT, "PteroBill");
    $_obfuscated_0D162F0B373226171A051A122540353D37222735150801_ = ["Authorization: Bearer " . $_obfuscated_0D2513050A2221212C0F13263C30172B2F052727130532_, "Accept: Application/vnd.pterodactyl.v1+json"];
    if ($method === "POST" || $method === "PATCH") {
        $_obfuscated_0D1529393F2731270921035B3605110722115B310F2E32_ = json_encode($data);
        curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_POSTFIELDS, $_obfuscated_0D1529393F2731270921035B3605110722115B310F2E32_);
        array_push($_obfuscated_0D162F0B373226171A051A122540353D37222735150801_, "Content-Type: application/json");
        array_push($_obfuscated_0D162F0B373226171A051A122540353D37222735150801_, "Content-Length: " . strlen($_obfuscated_0D1529393F2731270921035B3605110722115B310F2E32_));
    }
    curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_HTTPHEADER, $_obfuscated_0D162F0B373226171A051A122540353D37222735150801_);
    $_obfuscated_0D0A140A2F2B0203245C1C06173D273222290926353E11_ = curl_exec($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_);
    $_obfuscated_0D3726262C121A041F2103043D0B222816261F1A120D32_ = json_decode($_obfuscated_0D0A140A2F2B0203245C1C06173D273222290926353E11_, true);
    $_obfuscated_0D3726262C121A041F2103043D0B222816261F1A120D32_["status_code"] = curl_getinfo($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLINFO_HTTP_CODE);
    if ($_obfuscated_0D3726262C121A041F2103043D0B222816261F1A120D32_["status_code"] === 0) {
        logModuleCall("PteroBill", "Curl Error", curl_errno($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_) . " - " . curl_error($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_), $_obfuscated_0D3726262C121A041F2103043D0B222816261F1A120D32_);
    }
    curl_close($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_);
    logModuleCall("PteroBill", $method . " - " . $url, isset($data) ? json_encode($data) : "", print_r($_obfuscated_0D3726262C121A041F2103043D0B222816261F1A120D32_, true));
    return $_obfuscated_0D3726262C121A041F2103043D0B222816261F1A120D32_;
}
function pterobill_TestConnection($params)
{
    try {
        $data = pterobill_apicall($params, "locations");
        if ($data["status_code"] === 200) {
            $_obfuscated_0D08221139331C39390D0615300A3C0F2B0F2631285C32_ = true;
            $_obfuscated_0D043F1A0B31181C0A071E16242A1B100B2E0C30241E22_ = "";
        } else {
            logModuleCall("PteroBill", "pterobill_TestConnection", $params, $data["status_code"], $data["errors"]);
            $_obfuscated_0D08221139331C39390D0615300A3C0F2B0F2631285C32_ = false;
            $_obfuscated_0D043F1A0B31181C0A071E16242A1B100B2E0C30241E22_ = $data["errors"];
        }
    } catch (Exception $_obfuscated_0D2A04310F0E140F3B2A090E3839221803192B0F170122_) {
        logModuleCall("PteroBill", "pterobill_TestConnection", $params, $data["status_code"], $data["errors"]);
        $_obfuscated_0D08221139331C39390D0615300A3C0F2B0F2631285C32_ = false;
        $_obfuscated_0D043F1A0B31181C0A071E16242A1B100B2E0C30241E22_ = $data["errors"];
    }
    return ["success" => $_obfuscated_0D08221139331C39390D0615300A3C0F2B0F2631285C32_, "error" => $_obfuscated_0D043F1A0B31181C0A071E16242A1B100B2E0C30241E22_];
}
function pterobill_PopulateLocations($params)
{
    $data = pterobill_apicall($params, "locations");
    $_obfuscated_0D230D08113331132B363C3D1C13302902371E11180F32_ = [];
    foreach ($data["data"] as $_obfuscated_0D291F0F2C2A2A1234161A2B0F161F262F16191C382F01_) {
        $_obfuscated_0D2E360F5B2928131011010B2A2D06312506050E075C11_ = $_obfuscated_0D291F0F2C2A2A1234161A2B0F161F262F16191C382F01_["attributes"]["id"];
        $_obfuscated_0D5C25212A3122195C5C113B5C1D5C0D020209243B0311_ = $_obfuscated_0D291F0F2C2A2A1234161A2B0F161F262F16191C382F01_["attributes"]["long"];
        $_obfuscated_0D230D08113331132B363C3D1C13302902371E11180F32_[$_obfuscated_0D2E360F5B2928131011010B2A2D06312506050E075C11_] = $_obfuscated_0D5C25212A3122195C5C113B5C1D5C0D020209243B0311_;
    }
    return $_obfuscated_0D230D08113331132B363C3D1C13302902371E11180F32_;
}
function pterobill_PopulateNests($params)
{
    $data = pterobill_apicall($params, "nests");
    $_obfuscated_0D11233B3C3C1C35210537313B2109162C1B0822050B11_ = [];
    foreach ($data["data"] as $_obfuscated_0D2C061219372D010C1B06281A1B272E1E240404360932_) {
        $_obfuscated_0D11113F34061D3926145C3C133F2714130B2724193801_ = $_obfuscated_0D2C061219372D010C1B06281A1B272E1E240404360932_["attributes"]["id"];
        $_obfuscated_0D3B293B223C39140F391F1D5B4022405B342D05300411_ = $_obfuscated_0D2C061219372D010C1B06281A1B272E1E240404360932_["attributes"]["name"];
        $_obfuscated_0D11233B3C3C1C35210537313B2109162C1B0822050B11_[$_obfuscated_0D11113F34061D3926145C3C133F2714130B2724193801_] = $_obfuscated_0D3B293B223C39140F391F1D5B4022405B342D05300411_;
    }
    return $_obfuscated_0D11233B3C3C1C35210537313B2109162C1B0822050B11_;
}
function pterobill_ConfigOptions()
{
    return ["server_name" => ["FriendlyName" => "Server Name", "Type" => "text", "Size" => "20", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Server display name in panel, not required to be unique\">Help</a>", "SimpleMode" => true], "location_id" => ["FriendlyName" => "Location", "Type" => "text", "Size" => "20", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Location to deploy configured in Pterodactyl\">Help</a>", "Loader" => "pterobill_PopulateLocations", "SimpleMode" => true], "cpu" => ["FriendlyName" => "CPU Limit", "Type" => "text", "Size" => "10", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Percentage of CPU usable. 100% is 1 core, 250% is 2.5 cores, 0 for unlimited.\">Help</a>", "SimpleMode" => true, "Default" => "0"], "memory" => ["FriendlyName" => "Memory (MB)", "Type" => "text", "Size" => "10", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Memory available to server in MB. 0 for unlimited.\">Help</a>", "SimpleMode" => true, "Default" => "0"], "disk" => ["FriendlyName" => "Disk (MB)", "Type" => "text", "Size" => "10", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Disk space available to server in MB. 0 for unlimited.\">Help</a>", "SimpleMode" => true, "Default" => "0"], "swap" => ["FriendlyName" => "Swap (MB)", "Type" => "text", "Size" => "10", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Swap space available to server in MB. -1 for unlimited, 0 to disable swap.\">Help</a>", "SimpleMode" => true, "Default" => "0"], "io" => ["FriendlyName" => "IO Weight", "Type" => "text", "Size" => "10", "Description" => "<a class=\"text-primary\" target=\"_blank\" href=\"https://docs.docker.com/engine/reference/run/#block-io-bandwidth-blkio-constraint\" data-toggle=\"tooltip\" title=\"Between 10 and 1000. Higher values are increased priority. Click for more info.\">Help</a>", "SimpleMode" => true, "Default" => "500"], "port_array" => ["FriendlyName" => "Port Array", "Type" => "text", "Size" => "20", "Description" => "<a class=\"text-primary\" href=\"https://pterobill.com/setup-guide.html#portarray\" target=\"_blank\" data-toggle=\"tooltip\" title='Array of ports and environment variables they should map to. Must be valid JSON, e.g. {\"SERVER_PORT\": 27015, \"RCON_PORT\": 27017} - SERVER_PORT is required. When specified ports are unavailable auto-allocator will find the best match. Click for more info.'>Help</a>", "SimpleMode" => true], "create_allocations" => ["FriendlyName" => "Create Allocations", "Type" => "yesno", "Description" => "<a class=\"text-primary\" target=\"_blank\" href=\"https://pterobill.com/setup-guide.html#createallocs\" data-toggle=\"tooltip\" title=\"Create allocations on demand. This feature is not yet implemented.\">Help</a>", "SimpleMode" => true], "dedicated_ip" => ["FriendlyName" => "Dedicated IP", "Type" => "yesno", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Assign a dedicated IP for this server.\">Help</a>", "SimpleMode" => true], "nest_id" => ["FriendlyName" => "Nest", "Type" => "text", "Size" => "20", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Pterodactyl Nest including the desired Egg.\">Help</a>", "Loader" => "pterobill_PopulateNests", "SimpleMode" => true], "egg_id" => ["FriendlyName" => "Egg ID", "Type" => "text", "Size" => "10", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Pterodactyl Egg ID to install.\">Help</a>", "SimpleMode" => true], "pack_id" => ["FriendlyName" => "Pack", "Type" => "text", "Size" => "10", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Pterodactyl Egg Pack ID to install.\">Help</a>", "SimpleMode" => true], "databases" => ["FriendlyName" => "Database Limit", "Type" => "text", "Size" => "10", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Number of databases user can create. Leave blank for unlimited.\">Help</a>", "SimpleMode" => true, "Default" => "0"], "autoallocate_increment" => ["FriendlyName" => "AutoAllocator Increment", "Type" => "text", "Size" => "10", "Description" => "<a class=\"text-primary\" href=\"https://pterobill.com/setup-guide.html#allocincrement\" target=\"_blank\" data-toggle=\"tooltip\" title=\"Number of ports the AutoAllocator will increment by. Defaults to 1. Click for more info\">Help</a>", "SimpleMode" => true, "Default" => "1"], "backups" => ["FriendlyName" => "Backup Limit", "Type" => "text", "Size" => "10", "Description" => "<a class=\"text-primary\" data-toggle=\"tooltip\" title=\"Number of backups allowed.  0 for none.\">Help</a>", "SimpleMode" => true, "Default" => "1"]];
}
function pterobill_GetOption($params, $id, $default = NULL)
{
    $_obfuscated_0D3E12335C0F40060E370329321E042D153034140E1311_ = pterobill_configoptions();
    $_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_ = $_obfuscated_0D3E12335C0F40060E370329321E042D153034140E1311_[$id]["FriendlyName"];
    if (isset($params["configoptions"][$_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_]) && $params["configoptions"][$_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_] !== "") {
        return $params["configoptions"][$_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_];
    }
    if (isset($params["configoptions"][$id]) && $params["configoptions"][$id] !== "") {
        return $params["configoptions"][$id];
    }
    if (isset($params["customfields"][$_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_]) && $params["customfields"][$_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_] !== "") {
        return $params["customfields"][$_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_];
    }
    if (isset($params["customfields"][$id]) && $params["customfields"][$id] !== "") {
        return $params["customfields"][$id];
    }
    $_obfuscated_0D3B3B3B3D0F042A1D162C1B050B2405390B0C26303301_ = false;
    $i = 0;
    foreach (pterobill_configoptions() as $key => $value) {
        $i++;
        if ($key === $id) {
            $_obfuscated_0D3B3B3B3D0F042A1D162C1B050B2405390B0C26303301_ = true;
            if ($_obfuscated_0D3B3B3B3D0F042A1D162C1B050B2405390B0C26303301_ && isset($params["configoption" . $i]) && $params["configoption" . $i] !== "") {
                return $params["configoption" . $i];
            }
            return $default;
        }
    }
}
function pterobill_CalculateNodeUtilization($nodesResult)
{
    $_obfuscated_0D2F2434170F0617293213093F30110717141621341C22_ = $nodesResult["attributes"]["relationships"]["nodes"]["data"];
    $_obfuscated_0D2C30220D143F2C10032D38020C0C063D3F1B010D2D22_ = $nodesResult["attributes"]["relationships"]["servers"]["data"];
    $_obfuscated_0D163609125C0D1B0B1F190C1D091F3F17071031301501_ = [];
    foreach ($_obfuscated_0D2F2434170F0617293213093F30110717141621341C22_ as $_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_) {
        $_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_ = $_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_["attributes"];
        if ($_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_["public"] && !$_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_["maintenance_mode"]) {
            $_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_["memory_used"] = 0;
            $_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_["disk_used"] = 0;
            $_obfuscated_0D163609125C0D1B0B1F190C1D091F3F17071031301501_[$_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_["id"]] = $_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_;
        }
    }
    foreach ($_obfuscated_0D2C30220D143F2C10032D38020C0C063D3F1B010D2D22_ as $_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_) {
        $_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_ = $_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["attributes"];
        if (array_key_exists($_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["node"], $_obfuscated_0D163609125C0D1B0B1F190C1D091F3F17071031301501_)) {
            $_obfuscated_0D163609125C0D1B0B1F190C1D091F3F17071031301501_[$_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["node"]]["memory_used"] += $_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["limits"]["memory"];
            $_obfuscated_0D163609125C0D1B0B1F190C1D091F3F17071031301501_[$_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["node"]]["disk_used"] += $_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["limits"]["disk"];
        }
    }
    return $_obfuscated_0D163609125C0D1B0B1F190C1D091F3F17071031301501_;
}
function pterobill_FilterAvailableNodes($params, $nodes)
{
    $_obfuscated_0D1E33062B312D2C0806403F3114341C03133429121132_ = [];
    $_obfuscated_0D0923272D11083B273B061D260B1D1A051C0928330811_ = pterobill_getoption($params, "memory");
    $_obfuscated_0D261E3712023223353431193E2B27160C110728231711_ = pterobill_getoption($params, "disk");
    foreach ($nodes as $_obfuscated_0D3F3E31390829363B112E19163D141D16312F0E313301_ => $_obfuscated_0D1F132D140F2C1E180D14220440333D3C0E212A2C3B01_) {
        if ($_obfuscated_0D1F132D140F2C1E180D14220440333D3C0E212A2C3B01_["memory_used"] + $_obfuscated_0D0923272D11083B273B061D260B1D1A051C0928330811_ <= $_obfuscated_0D1F132D140F2C1E180D14220440333D3C0E212A2C3B01_["memory"] * (1 + $_obfuscated_0D1F132D140F2C1E180D14220440333D3C0E212A2C3B01_["memory_overallocate"] / 100) || $_obfuscated_0D1F132D140F2C1E180D14220440333D3C0E212A2C3B01_["disk_used"] + $_obfuscated_0D261E3712023223353431193E2B27160C110728231711_ <= $_obfuscated_0D1F132D140F2C1E180D14220440333D3C0E212A2C3B01_["disk"] * (1 + $_obfuscated_0D1F132D140F2C1E180D14220440333D3C0E212A2C3B01_["disk_overallocate"] / 100)) {
            $_obfuscated_0D1E33062B312D2C0806403F3114341C03133429121132_[] = $_obfuscated_0D1F132D140F2C1E180D14220440333D3C0E212A2C3B01_;
        }
    }
    return $_obfuscated_0D1E33062B312D2C0806403F3114341C03133429121132_;
}
function pterobill_GetNodesForLocation($params)
{
    $_obfuscated_0D2E360F5B2928131011010B2A2D06312506050E075C11_ = pterobill_getoption($params, "location_id");
    $_obfuscated_0D010728301A0918212F1E1735180F1C233B0909052D11_ = pterobill_apicall($params, "locations/" . $_obfuscated_0D2E360F5B2928131011010B2A2D06312506050E075C11_ . "?include=nodes,servers");
    $_obfuscated_0D1E33062B312D2C0806403F3114341C03133429121132_ = pterobill_calculatenodeutilization($_obfuscated_0D010728301A0918212F1E1735180F1C233B0909052D11_);
    $_obfuscated_0D101A223B06101A130822090E2E2E335C2B020C030511_ = pterobill_filteravailablenodes($params, $_obfuscated_0D1E33062B312D2C0806403F3114341C03133429121132_);
    logModuleCall("PteroBill", "Node Utilization", "Found " . count($_obfuscated_0D1E33062B312D2C0806403F3114341C03133429121132_) . " valid nodes with " . count($_obfuscated_0D101A223B06101A130822090E2E2E335C2B020C030511_) . " available nodes", $_obfuscated_0D101A223B06101A130822090E2E2E335C2B020C030511_);
    return $_obfuscated_0D101A223B06101A130822090E2E2E335C2B020C030511_;
}
function pterobill_GetAllocationsForNode($params, $node_id)
{
    $_obfuscated_0D032C152F06232824212B3E25113D0E0C0E2127061F22_ = [];
    $_obfuscated_0D5C132934031C0401222C3F273D2E221F3E2708090132_ = pterobill_apicall($params, "nodes/" . $node_id . "/allocations");
    $_obfuscated_0D191B1E34382C14262B273F19160B1A282A5C1E051101_ = (int) $_obfuscated_0D5C132934031C0401222C3F273D2E221F3E2708090132_["meta"]["pagination"]["total_pages"] + 1;
    for ($i = 2; $i <= $_obfuscated_0D191B1E34382C14262B273F19160B1A282A5C1E051101_; $i++) {
        foreach ($_obfuscated_0D5C132934031C0401222C3F273D2E221F3E2708090132_["data"] as $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_) {
            $_obfuscated_0D032C152F06232824212B3E25113D0E0C0E2127061F22_[] = $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_["attributes"];
        }
        if ($i != $_obfuscated_0D191B1E34382C14262B273F19160B1A282A5C1E051101_) {
            $_obfuscated_0D5C132934031C0401222C3F273D2E221F3E2708090132_ = pterobill_apicall($params, "nodes/" . $node_id . "/allocations?page=" . $i);
        }
    }
    return $_obfuscated_0D032C152F06232824212B3E25113D0E0C0E2127061F22_;
}
function pterobill_FilterAvailableAllocations($allocations)
{
    $_obfuscated_0D191527310D4007115B093E29032122153706092A1101_ = [];
    foreach ($allocations as $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_) {
        if (!$_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_["assigned"]) {
            $_obfuscated_0D191527310D4007115B093E29032122153706092A1101_[] = $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_;
        }
    }
    return $_obfuscated_0D191527310D4007115B093E29032122153706092A1101_;
}
function pterobill_MapAllocsIpsAndPorts($allocations)
{
    $_obfuscated_0D26012D062D103C1A1A144015260C0A121F3631382E32_ = [];
    $_obfuscated_0D0518120B2F2D3B2C06260B3C0D373015032735113122_ = [];
    foreach ($allocations as $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_) {
        $_obfuscated_0D3639400D19050F26065B373D103F123505093C340601_ = $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_["ip"];
        if (!array_key_exists($_obfuscated_0D3639400D19050F26065B373D103F123505093C340601_, $_obfuscated_0D26012D062D103C1A1A144015260C0A121F3631382E32_)) {
            $_obfuscated_0D26012D062D103C1A1A144015260C0A121F3631382E32_[$_obfuscated_0D3639400D19050F26065B373D103F123505093C340601_] = ["ports" => [], "available" => 0];
        }
        $_obfuscated_0D26012D062D103C1A1A144015260C0A121F3631382E32_[$_obfuscated_0D3639400D19050F26065B373D103F123505093C340601_]["ports"][] = $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_["port"];
        if ($_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_["assigned"] === false) {
            $_obfuscated_0D26012D062D103C1A1A144015260C0A121F3631382E32_[$_obfuscated_0D3639400D19050F26065B373D103F123505093C340601_]["available"] += 1;
            $_obfuscated_0D26012D062D103C1A1A144015260C0A121F3631382E32_[$_obfuscated_0D3639400D19050F26065B373D103F123505093C340601_]["ports_available"][] = $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_["port"];
        }
        $_obfuscated_0D0518120B2F2D3B2C06260B3C0D373015032735113122_[$_obfuscated_0D3639400D19050F26065B373D103F123505093C340601_][$_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_["port"]] = $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_;
    }
    return [$_obfuscated_0D26012D062D103C1A1A144015260C0A121F3631382E32_, $_obfuscated_0D0518120B2F2D3B2C06260B3C0D373015032735113122_];
}
function pterobill_FilterIpAddresses($ports_per_ip, $dedicated, $ports)
{
    if (!WHMCS\Database\Capsule::schema()->hasTable("tblpterobill_iptracker")) {
        pterobill_createdatabasetable();
    }
    $_obfuscated_0D11363F0D185B33193F2E5B2818310B32142D092A2E01_ = [];
    $_obfuscated_0D3B3B40271D28035B2C32210B1F101A302C3E34193E32_ = 0;
    foreach ($ports_per_ip as $key => $val) {
        $_obfuscated_0D142528213C1A5B08092D3F063C0A0605381011063D11_ = WHMCS\Database\Capsule::table("tblpterobill_iptracker")->where("ip_addr", $key)->get();
        if (is_array($_obfuscated_0D142528213C1A5B08092D3F063C0A0605381011063D11_)) {
            $_obfuscated_0D02153C35170211360D231A5B240F2B230C08373C0D32_ = !$_obfuscated_0D142528213C1A5B08092D3F063C0A0605381011063D11_;
        } else {
            $_obfuscated_0D02153C35170211360D231A5B240F2B230C08373C0D32_ = $_obfuscated_0D142528213C1A5B08092D3F063C0A0605381011063D11_->isEmpty();
        }
        if ($_obfuscated_0D02153C35170211360D231A5B240F2B230C08373C0D32_) {
            if ($val["available"] === count($val["ports"])) {
                if ($dedicated === true) {
                    $_obfuscated_0D11363F0D185B33193F2E5B2818310B32142D092A2E01_[] = $key;
                } else {
                    $_obfuscated_0D0C13351B29373B2F35293B252C332724151F371C1D32_ = $key;
                }
            } else {
                if ($val["available"] >= count($ports)) {
                    if ($dedicated === false) {
                        $_obfuscated_0D11363F0D185B33193F2E5B2818310B32142D092A2E01_[] = $key;
                    }
                }
            }
        } else {
            $_obfuscated_0D3B3B40271D28035B2C32210B1F101A302C3E34193E32_ += 1;
        }
    }
    if (empty($_obfuscated_0D11363F0D185B33193F2E5B2818310B32142D092A2E01_) && $dedicated === false && 0 < count($ports_per_ip)) {
        logModuleCall("PteroBill", "AutoAllocator", "", "No candidate for shared IP address found, using an empty IP.");
        $_obfuscated_0D11363F0D185B33193F2E5B2818310B32142D092A2E01_[] = $_obfuscated_0D0C13351B29373B2F35293B252C332724151F371C1D32_;
    }
    logModuleCall("PteroBill", "AutoAllocator", "Considered " . count($ports_per_ip) . " IPs and found " . count($_obfuscated_0D11363F0D185B33193F2E5B2818310B32142D092A2E01_) . " matches skipping " . $_obfuscated_0D3B3B40271D28035B2C32210B1F101A302C3E34193E32_ . " dedicated IPs", $_obfuscated_0D11363F0D185B33193F2E5B2818310B32142D092A2E01_);
    return $_obfuscated_0D11363F0D185B33193F2E5B2818310B32142D092A2E01_;
}
function pterobill_GetPortArray($params)
{
    $_obfuscated_0D0A21371E34380B2E3D22032C283D332C31141C2E2222_ = pterobill_getoption($params, "port_array");
    $_obfuscated_0D2E37262527100732250A123B012B180C132C1E061201_ = json_decode($_obfuscated_0D0A21371E34380B2E3D22032C283D332C31141C2E2222_, true);
    if (!array_key_exists("SERVER_PORT", $_obfuscated_0D2E37262527100732250A123B012B180C132C1E061201_)) {
        throw new Exception("Port array is not valid JSON or does not include a SERVER_PORT entry.");
    }
    if (is_array($_obfuscated_0D2E37262527100732250A123B012B180C132C1E061201_["NONE"])) {
        $_obfuscated_0D26060B0D183E3E351D1C333D062D0C2C3B1009100722_ = $_obfuscated_0D2E37262527100732250A123B012B180C132C1E061201_["NONE"];
        unset($_obfuscated_0D2E37262527100732250A123B012B180C132C1E061201_["NONE"]);
        foreach ($_obfuscated_0D26060B0D183E3E351D1C333D062D0C2C3B1009100722_ as $key => $value) {
            $_obfuscated_0D0D242D1A1C142D401939380D2114211D3B2804052701_ = "NONE" . $key;
            $_obfuscated_0D2E37262527100732250A123B012B180C132C1E061201_[$_obfuscated_0D0D242D1A1C142D401939380D2114211D3B2804052701_] = $value;
        }
    }
    return $_obfuscated_0D2E37262527100732250A123B012B180C132C1E061201_;
}
function pterobill_AutoAllocatePick($params, $dedicated_ip)
{
    $_obfuscated_0D152A1E0D300F063D161B2415012D031B2E1D38062601_ = pterobill_getoption($params, "autoallocate_increment") ?: 1;
    $_obfuscated_0D1E33062B312D2C0806403F3114341C03133429121132_ = pterobill_getnodesforlocation($params);
    logModuleCall("PteroBill", "AutoAllocator", "AutoAllocator starting.  Looking on " . count($_obfuscated_0D1E33062B312D2C0806403F3114341C03133429121132_) . " nodes.", "");
    foreach ($_obfuscated_0D1E33062B312D2C0806403F3114341C03133429121132_ as $_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_) {
        $ports = pterobill_getportarray($params);
        $node_id = $_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_["id"];
        $_obfuscated_0D0E0A1D3E192109090E40173E0B1B0E09272F2D032C22_ = pterobill_getallocationsfornode($params, $node_id);
        $_obfuscated_0D2F1D093C1C1015370A5C0835083B032D303E04250222_ = pterobill_filteravailableallocations($_obfuscated_0D0E0A1D3E192109090E40173E0B1B0E09272F2D032C22_);
        list($ports_per_ip, $_obfuscated_0D0518120B2F2D3B2C06260B3C0D373015032735113122_) = pterobill_mapallocsipsandports($_obfuscated_0D0E0A1D3E192109090E40173E0B1B0E09272F2D032C22_);
        $_obfuscated_0D222C34372E2A282F3C280F3E0534150F322A23213F01_ = pterobill_filteripaddresses($ports_per_ip, $dedicated_ip, $ports);
        if (empty($_obfuscated_0D222C34372E2A282F3C280F3E0534150F322A23213F01_)) {
            return "Failed to find an available IP address.";
        }
        logModuleCall("PteroBill", "AutoAllocator", "", "AutoAllocator found " . count($_obfuscated_0D2F1D093C1C1015370A5C0835083B032D303E04250222_) . " available allocations out of " . count($_obfuscated_0D0E0A1D3E192109090E40173E0B1B0E09272F2D032C22_) . " total allocations for node_id " . $node_id . " with " . count($ports_per_ip) . " unique IPs. Using increment of " . $_obfuscated_0D152A1E0D300F063D161B2415012D031B2E1D38062601_ . ".");
        foreach ($_obfuscated_0D222C34372E2A282F3C280F3E0534150F322A23213F01_ as $_obfuscated_0D2A243F120F103B32083E2C07321001282221113C3D01_) {
            $ports = pterobill_getportarray($params);
            $_obfuscated_0D2206272C0C5B3E0F2D12303937013C283605152C2D11_ = 1000;
            logModuleCall("PteroBill", "AutoAllocator", "", "AutoAllocator selected IP " . $_obfuscated_0D2A243F120F103B32083E2C07321001282221113C3D01_ . " with " . count($ports_per_ip[$_obfuscated_0D2A243F120F103B32083E2C07321001282221113C3D01_]["ports_available"]) . " available allocations. Trying " . $_obfuscated_0D2206272C0C5B3E0F2D12303937013C283605152C2D11_ . " times.");
            for ($i = 0; $i < $_obfuscated_0D2206272C0C5B3E0F2D12303937013C283605152C2D11_; $i++) {
                $_obfuscated_0D2B3F2640090D251A400F3E2F3E051E11403409232D32_ = [];
                $_obfuscated_0D0A1F3224350C352A0D0B3E1A5B3916300E22061C0222_ = array_intersect($ports, $ports_per_ip[$_obfuscated_0D2A243F120F103B32083E2C07321001282221113C3D01_]["ports_available"]);
                if ($_obfuscated_0D0A1F3224350C352A0D0B3E1A5B3916300E22061C0222_ === $ports) {
                    foreach ($ports as $key => $port) {
                        $_obfuscated_0D3C12373E32123C032625392132045B0F04165B3E2932_ = $_obfuscated_0D0518120B2F2D3B2C06260B3C0D373015032735113122_[$_obfuscated_0D2A243F120F103B32083E2C07321001282221113C3D01_][$port];
                        if (!is_null($_obfuscated_0D3C12373E32123C032625392132045B0F04165B3E2932_)) {
                            $_obfuscated_0D2B3F2640090D251A400F3E2F3E051E11403409232D32_[$key] = $_obfuscated_0D3C12373E32123C032625392132045B0F04165B3E2932_;
                        }
                    }
                    if (count($_obfuscated_0D2B3F2640090D251A400F3E2F3E051E11403409232D32_) !== count($ports)) {
                    }
                } else {
                    $ports = array_map(function ($val) {
                        static $autoallocate_increment = NULL;
                        return (int) $val + (int) $autoallocate_increment;
                    }, $ports);
                }
            }
            if (!empty($_obfuscated_0D2B3F2640090D251A400F3E2F3E051E11403409232D32_)) {
                return $_obfuscated_0D2B3F2640090D251A400F3E2F3E051E11403409232D32_;
            }
        }
    }
    return "AutoAllocator failed to find suitable allocations";
}
function pterobill_GenerateUsername($length = 8)
{
    $_obfuscated_0D07033D0B4001162C282213373C313C07353B1E290C11_ = array_merge(range(0, 9), range("a", "z"), range("A", "Z"));
    $username = "";
    for ($i = 0; $i < $length; $i++) {
        $username .= $_obfuscated_0D07033D0B4001162C282213373C313C07353B1E290C11_[mt_rand(0, count($_obfuscated_0D07033D0B4001162C282213373C313C07353B1E290C11_) - 1)];
    }
    return $username;
}
function pterobill_CreateAccount($params)
{
    try {
        $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ = pterobill_GetServerID($params);
        if (isset($_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_)) {
            throw new Exception("Server with this ID already exists, aborting account creation.");
        }
        $_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_ = pterobill_apicall($params, "users/external/" . $params["clientsdetails"]["id"]);
        if ($_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_["status_code"] === 404) {
            $_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_ = pterobill_apicall($params, "users?filter[email]=" . urlencode($params["clientsdetails"]["email"]));
            if ($_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_["meta"]["pagination"]["total"] === 0) {
                $_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_ = pterobill_apicall($params, "users", ["username" => pterobill_getoption($params, "username", pterobill_generateusername()), "email" => $params["clientsdetails"]["email"], "first_name" => $params["clientsdetails"]["firstname"], "last_name" => $params["clientsdetails"]["lastname"], "external_id" => $params["clientsdetails"]["id"]], "POST");
            } else {
                foreach ($_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_["data"] as $key => $value) {
                    if ($value["attributes"]["email"] === $params["clientsdetails"]["email"]) {
                        $_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_ = array_merge($_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_, $value);
                        $_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_ = array_merge($_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_, $_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_["data"][0]);
                    }
                }
            }
        }
        if ($_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_["status_code"] === 200 || $_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_["status_code"] === 201) {
            $_obfuscated_0D1D242B2A5C240202083314182C033E0E0C1E2A241E32_ = $_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_["attributes"]["id"];
            $_obfuscated_0D23223E33382825381D5B08171A060D14092F16090622_ = pterobill_getoption($params, "nest_id");
            $_obfuscated_0D2D2422160340031E095B283924172908352C1F093D11_ = pterobill_getoption($params, "egg_id");
            $_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_ = pterobill_apicall($params, "nests/" . $_obfuscated_0D23223E33382825381D5B08171A060D14092F16090622_ . "/eggs/" . $_obfuscated_0D2D2422160340031E095B283924172908352C1F093D11_ . "?include=variables");
            if ($_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_["status_code"] !== 200) {
                throw new Exception("Fetching egg data failed with error: " . $_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_["status_code"] . ". For additional information enable module debug mode.");
            }
            $dedicated_ip = pterobill_getoption($params, "dedicated_ip") ? true : false;
            $_obfuscated_0D21351D310B0D1E2B3B113F1C08212C06101204180B01_ = pterobill_autoallocatepick($params, $dedicated_ip);
            if (!is_array($_obfuscated_0D21351D310B0D1E2B3B113F1C08212C06101204180B01_)) {
                throw new Exception($_obfuscated_0D21351D310B0D1E2B3B113F1C08212C06101204180B01_);
            }
            $_obfuscated_0D1C2C0A3B3E2D15013814311B0F3805060A1A1E3B1322_ = $_obfuscated_0D21351D310B0D1E2B3B113F1C08212C06101204180B01_["SERVER_PORT"]["id"];
            $_obfuscated_0D2A243F120F103B32083E2C07321001282221113C3D01_ = $_obfuscated_0D21351D310B0D1E2B3B113F1C08212C06101204180B01_["SERVER_PORT"]["ip"];
            unset($_obfuscated_0D21351D310B0D1E2B3B113F1C08212C06101204180B01_["SERVER_PORT"]);
            $_obfuscated_0D250B292240340C3B39352C1D19310B39232D262B2C11_ = array_column($_obfuscated_0D21351D310B0D1E2B3B113F1C08212C06101204180B01_, "id");
            if (($_obfuscated_0D173B151F042D2B06390D282F30180B3C2635053B0132_ = array_search($_obfuscated_0D1C2C0A3B3E2D15013814311B0F3805060A1A1E3B1322_, $_obfuscated_0D250B292240340C3B39352C1D19310B39232D262B2C11_)) !== false) {
                unset($_obfuscated_0D250B292240340C3B39352C1D19310B39232D262B2C11_[$_obfuscated_0D173B151F042D2B06390D282F30180B3C2635053B0132_]);
            }
            $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_ = [];
            foreach ($_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_["attributes"]["relationships"]["variables"]["data"] as $key => $val) {
                $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_ = $val["attributes"];
                $_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_ = $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_["env_variable"];
                $default = $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_["default_value"];
                $_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_ = pterobill_getoption($params, $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_["name"]);
                $_obfuscated_0D281D26020A36195B0F270229393C291B300A181A1A01_ = pterobill_getoption($params, $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_["env_variable"]);
                if (isset($_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_)) {
                    $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_[$_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_] = (string) $_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_;
                } else {
                    if (isset($_obfuscated_0D281D26020A36195B0F270229393C291B300A181A1A01_)) {
                        $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_[$_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_] = (string) $_obfuscated_0D281D26020A36195B0F270229393C291B300A181A1A01_;
                    } else {
                        $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_[$_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_] = $default;
                    }
                }
            }
            foreach ($_obfuscated_0D21351D310B0D1E2B3B113F1C08212C06101204180B01_ as $key => $val) {
                if (substr($key, 0, 4) !== "NONE") {
                    $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_[$key] = (string) $val["port"];
                }
            }
            $_obfuscated_0D29260310392B320E2C041C0B3E401E1F350F123E2522_ = pterobill_getoption($params, "server_name", pterobill_generateusername() . "_" . $params["serviceid"]);
            $_obfuscated_0D0D1D360A04402B40242D1B0F1A3B120B11405B2A1C11_ = pterobill_getoption($params, "memory");
            $_obfuscated_0D082F1D06303F3C14022A0539210D282E320B23053832_ = pterobill_getoption($params, "swap");
            $_obfuscated_0D0B1C2B0F10340E0F0609182E2F1C1E041E371A102122_ = pterobill_getoption($params, "io");
            $_obfuscated_0D105B1E072A0A251A08070C5C0C21112F0126382B1611_ = pterobill_getoption($params, "cpu");
            $_obfuscated_0D24191130043004351B3C2D051231180D171E2B130911_ = pterobill_getoption($params, "disk");
            $_obfuscated_0D010F13363B133607342531042135090E1E023D3C0A01_ = pterobill_getoption($params, "pack_id");
            $_obfuscated_0D023C2B5B5B351A07190A1F15230F3F3B09400A160D11_ = pterobill_getoption($params, "image", $_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_["attributes"]["docker_image"]);
            $_obfuscated_0D311127100338053137293B1A0313365B2A0601141A32_ = pterobill_getoption($params, "startup", $_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_["attributes"]["startup"]);
            $_obfuscated_0D16092D0E2A1E09091E0B32022F0B3537161229025C32_ = pterobill_getoption($params, "databases");
            $allocations = pterobill_getoption($params, "allocations");
            $_obfuscated_0D020C37040F3421014012022F22031F0A0B1912214001_ = pterobill_getoption($params, "backups");
            $_obfuscated_0D270F1D0A0D243E2C121B0610260815251E383B371501_ = pterobill_getoption($params, "oom_disabled") ? true : false;
            $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_ = ["name" => $_obfuscated_0D29260310392B320E2C041C0B3E401E1F350F123E2522_, "user" => (int) $_obfuscated_0D1D242B2A5C240202083314182C033E0E0C1E2A241E32_, "nest" => (int) $_obfuscated_0D23223E33382825381D5B08171A060D14092F16090622_, "egg" => (int) $_obfuscated_0D2D2422160340031E095B283924172908352C1F093D11_, "docker_image" => $_obfuscated_0D023C2B5B5B351A07190A1F15230F3F3B09400A160D11_, "startup" => $_obfuscated_0D311127100338053137293B1A0313365B2A0601141A32_, "oom_disabled" => $_obfuscated_0D270F1D0A0D243E2C121B0610260815251E383B371501_, "limits" => ["memory" => (int) $_obfuscated_0D0D1D360A04402B40242D1B0F1A3B120B11405B2A1C11_, "swap" => (int) $_obfuscated_0D082F1D06303F3C14022A0539210D282E320B23053832_, "io" => (int) $_obfuscated_0D0B1C2B0F10340E0F0609182E2F1C1E041E371A102122_, "cpu" => (int) $_obfuscated_0D105B1E072A0A251A08070C5C0C21112F0126382B1611_, "disk" => (int) $_obfuscated_0D24191130043004351B3C2D051231180D171E2B130911_], "feature_limits" => ["databases" => $_obfuscated_0D16092D0E2A1E09091E0B32022F0B3537161229025C32_ ? (int) $_obfuscated_0D16092D0E2A1E09091E0B32022F0B3537161229025C32_ : NULL, "allocations" => (int) $allocations, "backups" => (int) $_obfuscated_0D020C37040F3421014012022F22031F0A0B1912214001_], "environment" => $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_, "start_on_completion" => true, "external_id" => (string) $params["serviceid"], "allocation" => ["default" => (int) $_obfuscated_0D1C2C0A3B3E2D15013814311B0F3805060A1A1E3B1322_, "additional" => $_obfuscated_0D250B292240340C3B39352C1D19310B39232D262B2C11_]];
            if (isset($_obfuscated_0D010F13363B133607342531042135090E1E023D3C0A01_)) {
                $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["pack"] = (int) $_obfuscated_0D010F13363B133607342531042135090E1E023D3C0A01_;
            }
            $_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_ = pterobill_apicall($params, "servers", $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_, "POST");
            if ($_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["status_code"] === 400) {
                throw new Exception("No available node matching the request.");
            }
            if ($_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["status_code"] !== 201) {
                throw new Exception("Creating server failed with error: " . $_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["status_code"] . ". For additional information enable module debug mode.");
            }
        } else {
            throw new Exception("User creation failed with error: " . $_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_["status_code"] . ". For additional information enable module debug mode.");
        }
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        logModuleCall("PteroBill", "Server creation failed", $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_, $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage());
        return $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage();
    }
    try {
        if ($dedicated_ip) {
            WHMCS\Database\Capsule::table("tblpterobill_iptracker")->insert(["ip_addr" => $_obfuscated_0D2A243F120F103B32083E2C07321001282221113C3D01_, "external_id" => $params["serviceid"]]);
            $params["model"]->serviceProperties->save(["dedicatedip" => $_obfuscated_0D2A243F120F103B32083E2C07321001282221113C3D01_]);
        }
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        return "Error recording the Dedicated IP: " . $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage();
    }
    return "success";
}
function pterobill_GetServerID($params, $raw = false)
{
    $_obfuscated_0D40031C4029241A175B0401372C220F353E0A0F061722_ = pterobill_apicall($params, "servers/external/" . $params["serviceid"], [], "GET");
    if ($_obfuscated_0D40031C4029241A175B0401372C220F353E0A0F061722_["status_code"] === 200) {
        if ($raw) {
            return $_obfuscated_0D40031C4029241A175B0401372C220F353E0A0F061722_;
        }
        return $_obfuscated_0D40031C4029241A175B0401372C220F353E0A0F061722_["attributes"]["id"];
    }
    if ($_obfuscated_0D40031C4029241A175B0401372C220F353E0A0F061722_["status_code"] === 500) {
        throw new Exception("Error getting the server ID from Pterodactyl. For additional information check the panel logs.");
    }
}
function pterobill_SuspendAccount($params)
{
    try {
        $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ = pterobill_getserverid($params);
        if (!isset($_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_)) {
            throw new Exception("Suspending server failed because it does not exist.");
        }
        $_obfuscated_0D35382538123D0B2E041D043337342A2B3F181F5B0222_ = pterobill_apicall($params, "servers/" . $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ . "/suspend", [], "POST");
        if ($_obfuscated_0D35382538123D0B2E041D043337342A2B3F181F5B0222_["status_code"] !== 204) {
            throw new Exception("Suspending server failed with error: " . $_obfuscated_0D35382538123D0B2E041D043337342A2B3F181F5B0222_["status_code"] . ". For additional information enable module debug mode.");
        }
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        return $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage();
    }
    return "success";
}
function pterobill_UnsuspendAccount($params)
{
    try {
        $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ = pterobill_getserverid($params);
        if (!isset($_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_)) {
            throw new Exception("Un-suspending server failed because it does not exist.");
        }
        $_obfuscated_0D35382538123D0B2E041D043337342A2B3F181F5B0222_ = pterobill_apicall($params, "servers/" . $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ . "/unsuspend", [], "POST");
        if ($_obfuscated_0D35382538123D0B2E041D043337342A2B3F181F5B0222_["status_code"] !== 204) {
            throw new Exception("Un-suspending server failed with error: " . $_obfuscated_0D35382538123D0B2E041D043337342A2B3F181F5B0222_["status_code"] . ". For additional information enable module debug mode.");
        }
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        return $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage();
    }
    return "success";
}
function pterobill_TerminateAccount($params)
{
    $_obfuscated_0D3E0B3E2F34021F111D2213131F30303E151936401D32_ = $params["serviceid"];
    try {
        $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ = pterobill_getserverid($params);
        if (!isset($_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_)) {
            throw new Exception("Failed to terminate server because it doesn't exist.");
        }
        $_obfuscated_0D1B163421351C0F402440362C2E13020D180D283F1622_ = pterobill_apicall($params, "servers/" . $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_, [], "DELETE");
        if ($_obfuscated_0D1B163421351C0F402440362C2E13020D180D283F1622_["status_code"] !== 204) {
            throw new Exception("Terminating server failed with error: " . $_obfuscated_0D1B163421351C0F402440362C2E13020D180D283F1622_["status_code"] . ". For additional information enable module debug mode.");
        }
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        return $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage();
    }
    try {
        WHMCS\Database\Capsule::table("tblpterobill_iptracker")->where("external_id", $_obfuscated_0D3E0B3E2F34021F111D2213131F30303E151936401D32_)->delete();
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        return "Error freeing dedicated IP: " . $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage();
    }
    return "success";
}
function pterobill_ChangePackage($params)
{
    try {
        $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_ = pterobill_getserverid($params, true);
        if ($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["status_code"] === 404 || !isset($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["id"])) {
            throw new Exception("Changing package failed because the specified server does not exist.");
        }
        $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ = $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["id"];
        $_obfuscated_0D0D1D360A04402B40242D1B0F1A3B120B11405B2A1C11_ = pterobill_getoption($params, "memory");
        $_obfuscated_0D082F1D06303F3C14022A0539210D282E320B23053832_ = pterobill_getoption($params, "swap");
        $_obfuscated_0D0B1C2B0F10340E0F0609182E2F1C1E041E371A102122_ = pterobill_getoption($params, "io");
        $_obfuscated_0D105B1E072A0A251A08070C5C0C21112F0126382B1611_ = pterobill_getoption($params, "cpu");
        $_obfuscated_0D24191130043004351B3C2D051231180D171E2B130911_ = pterobill_getoption($params, "disk");
        $_obfuscated_0D16092D0E2A1E09091E0B32022F0B3537161229025C32_ = pterobill_getoption($params, "databases");
        $allocations = pterobill_getoption($params, "options");
        $_obfuscated_0D270F1D0A0D243E2C121B0610260815251E383B371501_ = pterobill_getoption($params, "oom_disabled") ? true : false;
        $_obfuscated_0D390901032D272E04090C302F14291E2407252A211932_ = ["allocation" => $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["allocation"], "memory" => (int) $_obfuscated_0D0D1D360A04402B40242D1B0F1A3B120B11405B2A1C11_, "swap" => (int) $_obfuscated_0D082F1D06303F3C14022A0539210D282E320B23053832_, "io" => (int) $_obfuscated_0D0B1C2B0F10340E0F0609182E2F1C1E041E371A102122_, "cpu" => (int) $_obfuscated_0D105B1E072A0A251A08070C5C0C21112F0126382B1611_, "disk" => (int) $_obfuscated_0D24191130043004351B3C2D051231180D171E2B130911_, "oom_disabled" => $_obfuscated_0D270F1D0A0D243E2C121B0610260815251E383B371501_, "feature_limits" => ["databases" => (int) $_obfuscated_0D16092D0E2A1E09091E0B32022F0B3537161229025C32_, "allocations" => (int) $allocations, "backups" => (int) $_obfuscated_0D020C37040F3421014012022F22031F0A0B1912214001_]];
        $_obfuscated_0D5C222D35160B185C0721142609030227012C2F260232_ = pterobill_apicall($params, "servers/" . $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ . "/build", $_obfuscated_0D390901032D272E04090C302F14291E2407252A211932_, "PATCH");
        if ($_obfuscated_0D5C222D35160B185C0721142609030227012C2F260232_["status_code"] !== 200) {
            throw new Exception("Updating the server build data failed with error: " . $_obfuscated_0D5C222D35160B185C0721142609030227012C2F260232_["status_code"] . ". For additional information enable module debug mode.");
        }
        $_obfuscated_0D23223E33382825381D5B08171A060D14092F16090622_ = pterobill_getoption($params, "nest_id");
        $_obfuscated_0D2D2422160340031E095B283924172908352C1F093D11_ = pterobill_getoption($params, "egg_id");
        $_obfuscated_0D010F13363B133607342531042135090E1E023D3C0A01_ = pterobill_getoption($params, "pack_id");
        $_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_ = pterobill_apicall($params, "nests/" . $_obfuscated_0D23223E33382825381D5B08171A060D14092F16090622_ . "/eggs/" . $_obfuscated_0D2D2422160340031E095B283924172908352C1F093D11_ . "?include=variables");
        if ($_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_["status_code"] !== 200) {
            throw new Exception("Fetching eggs from panel failed with error: " . $_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_["status_code"] . ". For additional information enable module debug mode.");
        }
        $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_ = [];
        foreach ($_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_["attributes"]["relationships"]["variables"]["data"] as $key => $val) {
            $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_ = $val["attributes"];
            $_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_ = $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_["env_variable"];
            $_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_ = pterobill_getoption($params, $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_["name"]);
            $_obfuscated_0D281D26020A36195B0F270229393C291B300A181A1A01_ = pterobill_getoption($params, $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_["env_variable"]);
            if (isset($_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_)) {
                $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_[$_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_] = $_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_;
            } else {
                if (isset($_obfuscated_0D281D26020A36195B0F270229393C291B300A181A1A01_)) {
                    $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_[$_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_] = $_obfuscated_0D281D26020A36195B0F270229393C291B300A181A1A01_;
                } else {
                    if (isset($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["container"]["environment"][$_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_])) {
                        $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_[$_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_] = $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["container"]["environment"][$_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_];
                    } else {
                        if (isset($_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_["default_value"])) {
                            $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_[$_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_] = $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_["default_value"];
                        }
                    }
                }
            }
        }
        $_obfuscated_0D023C2B5B5B351A07190A1F15230F3F3B09400A160D11_ = pterobill_getoption($params, "image", $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["container"]["image"]);
        $_obfuscated_0D311127100338053137293B1A0313365B2A0601141A32_ = pterobill_getoption($params, "startup", $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["container"]["startup_command"]);
        $_obfuscated_0D390901032D272E04090C302F14291E2407252A211932_ = ["environment" => $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_, "startup" => $_obfuscated_0D311127100338053137293B1A0313365B2A0601141A32_, "egg" => (int) $_obfuscated_0D2D2422160340031E095B283924172908352C1F093D11_, "pack" => (int) $_obfuscated_0D010F13363B133607342531042135090E1E023D3C0A01_, "image" => $_obfuscated_0D023C2B5B5B351A07190A1F15230F3F3B09400A160D11_, "skip_scripts" => false];
        $_obfuscated_0D5C222D35160B185C0721142609030227012C2F260232_ = pterobill_apicall($params, "servers/" . $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ . "/startup", $_obfuscated_0D390901032D272E04090C302F14291E2407252A211932_, "PATCH");
        if ($_obfuscated_0D5C222D35160B185C0721142609030227012C2F260232_["status_code"] !== 200) {
            throw new Exception("Updating the server startup config failed with error: " . $_obfuscated_0D5C222D35160B185C0721142609030227012C2F260232_["status_code"] . ". For additional information enable module debug mode.");
        }
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        return $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage();
    }
    return "success";
}
function pterobill_ReinstallServer($params)
{
    try {
        $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_ = pterobill_getserverid($params, true);
        if ($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["status_code"] === 404 || !isset($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["id"])) {
            return NULL;
        }
        $endpoint = "servers/" . $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["id"] . "/reinstall";
        pterobill_apicall($params, $endpoint, [], "POST");
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        logModuleCall("PteroBill", "Server Reinstall Failed", "", $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage());
        return "Error reinstalling server";
    }
    return "success";
}
function pterobill_RebootServer($params)
{
    try {
        $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_ = pterobill_getserverid($params, true);
        if ($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["status_code"] === 404 || !isset($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["id"])) {
            return NULL;
        }
        $endpoint = "servers/" . $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["identifier"] . "/power";
        pterobill_apicall($params, $endpoint, ["signal" => "restart"], "POST", "client");
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        logModuleCall("PteroBill", "Server Reboot Failed", "", $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage());
        return "Error rebooting server";
    }
    return "success";
}
function pterobill_StartServer($params)
{
    try {
        $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_ = pterobill_getserverid($params, true);
        if ($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["status_code"] === 404 || !isset($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["id"])) {
            return NULL;
        }
        $endpoint = "servers/" . $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["identifier"] . "/power";
        pterobill_apicall($params, $endpoint, ["signal" => "start"], "POST", "client");
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        logModuleCall("PteroBill", "Server Start Failed", "", $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage());
        return "Error starting server";
    }
    return "success";
}
function pterobill_StopServer($params)
{
    try {
        $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_ = pterobill_getserverid($params, true);
        if ($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["status_code"] === 404 || !isset($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["id"])) {
            return NULL;
        }
        $endpoint = "servers/" . $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["identifier"] . "/power";
        pterobill_apicall($params, $endpoint, ["signal" => "stop"], "POST", "client");
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        logModuleCall("PteroBill", "Server Stop Failed", "", $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage());
        return "Error stopping server";
    }
    return "success";
}
function pterobill_ClientAreaAllowedFunctions()
{
    $_obfuscated_0D0C0A0110013B1A271B1724274028163D1F0B150D3401_ = ["Reinstall Server" => "ReinstallServer", "Reboot Server" => "RebootServer", "Start Server" => "StartServer", "Stop Server" => "StopServer"];
    return $_obfuscated_0D0C0A0110013B1A271B1724274028163D1F0B150D3401_;
}
function pterobill_LoginLink($params)
{
    if ($params["moduletype"] !== "pterobill") {
        return NULL;
    }
    try {
        $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ = pterobill_getserverid($params);
        if (!isset($_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_)) {
            return NULL;
        }
        $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ = pterobill_gethostname($params);
        echo "<a class=\"text-primary\" href=\"" . $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ . "/admin/servers/view/" . $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ . "\" target=\"_blank\">Go to Server</a>";
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
    }
}
function pterobill_ClientArea($params)
{
    if ($params["moduletype"] !== "pterobill") {
        return NULL;
    }
    try {
        $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_ = pterobill_getserverid($params, true);
        if ($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["status_code"] === 404 || !isset($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["id"])) {
            return NULL;
        }
        $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ = pterobill_gethostname($params);
        return ["templatefile" => "clientarea", "vars" => ["serviceurl" => $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ . "/server/" . $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["identifier"], "starturl" => "clientarea.php?action=productdetails&id=" . $params["serviceid"] . "&modop=custom&a=StartServer", "stopurl" => "clientarea.php?action=productdetails&id=" . $params["serviceid"] . "&modop=custom&a=StopServer", "rebooturl" => "clientarea.php?action=productdetails&id=" . $params["serviceid"] . "&modop=custom&a=RebootServer", "reinstallurl" => "clientarea.php?action=productdetails&id=" . $params["serviceid"] . "&modop=custom&a=ReinstallServer", "memory" => $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["limits"]["memory"] . " MB", "disk" => $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["limits"]["disk"] / 1000 . " GB", "cpu" => $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["limits"]["cpu"] . "%", "location" => $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["container"]["environment"]["P_SERVER_LOCATION"]]];
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
    }
}
function pterobill_ListAccounts($params)
{
    $_obfuscated_0D2A2B0F073726220609081403082D071509103D322601_ = [];
    $_obfuscated_0D232817242640060D0B3C1625222C3F22182923373511_ = [];
    try {
        $data = pterobill_apicall($params, "servers");
        $_obfuscated_0D191B1E34382C14262B273F19160B1A282A5C1E051101_ = (int) $data["meta"]["pagination"]["total_pages"] + 1;
        for ($i = 2; $i <= $_obfuscated_0D191B1E34382C14262B273F19160B1A282A5C1E051101_; $i++) {
            foreach ($data["data"] as $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_) {
                $_obfuscated_0D232817242640060D0B3C1625222C3F22182923373511_[] = $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_["attributes"];
            }
            if ($i != $_obfuscated_0D191B1E34382C14262B273F19160B1A282A5C1E051101_) {
                $data = pterobill_apicall($params, "servers?page=" . $i);
            }
        }
        foreach ($_obfuscated_0D232817242640060D0B3C1625222C3F22182923373511_ as $_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_) {
            if (isset($_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["external_id"])) {
                $_obfuscated_0D342209180927381A0C1D331F280B5B1E5B16222D2711_ = $_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_

Decoded(de-Obfuscated) php code

<?php

/*
 * @ https://EasyToYou.eu - IonCube v11 Decoder Online
 * @ PHP 7.2 & 7.3
 * @ Decoder version: 1.0.6
 * @ Release: 10/08/2022
 */
if (!defined("WHMCS")) {
    exit("This file cannot be accessed directly");
}
function pterobill_MetaData()
{
    return ["DisplayName" => "PteroBill", "APIVersion" => "1.1", "RequiresServer" => true, "ListAccountsUniqueIdentifierField" => "username", "ListAccountsUniqueIdentifierDisplayName" => "Service ID"];
}
function pterobill_CreateDatabaseTable()
{
    try {
        WHMCS\Database\Capsule::schema()->create("tblpterobill_iptracker", function ($table) {
            $table->increments("id");
            $table->string("ip_addr");
            $table->integer("external_id");
        });
    } catch (Exception $_obfuscated_0D2A04310F0E140F3B2A090E3839221803192B0F170122_) {
        logModuleCall("PteroBill", "Create database failed", "", $_obfuscated_0D2A04310F0E140F3B2A090E3839221803192B0F170122_->getMessage());
    }
}
function pterobill_GetHostname($params)
{
    $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ = $params["serverhostname"];
    foreach (["DOT" => ".", "DASH" => "-"] as $_obfuscated_0D3E5B40241631263C1B250B04312E213F1A5C1C2A3932_ => $_obfuscated_0D382A3C0E122A1C1D0501050D301206242D2118030F11_) {
        $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ = str_replace($_obfuscated_0D3E5B40241631263C1B250B04312E213F1A5C1C2A3932_, $_obfuscated_0D382A3C0E122A1C1D0501050D301206242D2118030F11_, $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_);
    }
    if (ip2long($_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_) !== false) {
        $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ = "http://" . $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_;
    } else {
        $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ = ($params["serversecure"] ? "https://" : "http://") . $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_;
    }
    return rtrim($_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_, "/");
}
function pterobill_ApiCall($params, $endpoint, $data = array(), $method = "GET", $api_type = "admin")
{
    if ($api_type == "admin") {
        $_obfuscated_0D2513050A2221212C0F13263C30172B2F052727130532_ = $params["serverpassword"];
        $_obfuscated_0D3B31061A1415174038370E143524052A361D2F2D1222_ = "application";
    } else {
        if ($api_type == "client") {
            $_obfuscated_0D2513050A2221212C0F13263C30172B2F052727130532_ = $params["serveraccesshash"];
            $_obfuscated_0D3B31061A1415174038370E143524052A361D2F2D1222_ = "client";
        }
    }
    $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ = pterobill_gethostname($params);
    $url = $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ . "/api/" . $_obfuscated_0D3B31061A1415174038370E143524052A361D2F2D1222_ . "/" . $endpoint;
    $_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_ = curl_init();
    curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_URL, $url);
    curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_CUSTOMREQUEST, $method);
    curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_POSTREDIR, CURL_REDIR_POST_301);
    curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
    curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_TIMEOUT, 5);
    curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_USERAGENT, "PteroBill");
    $_obfuscated_0D162F0B373226171A051A122540353D37222735150801_ = ["Authorization: Bearer " . $_obfuscated_0D2513050A2221212C0F13263C30172B2F052727130532_, "Accept: Application/vnd.pterodactyl.v1+json"];
    if ($method === "POST" || $method === "PATCH") {
        $_obfuscated_0D1529393F2731270921035B3605110722115B310F2E32_ = json_encode($data);
        curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_POSTFIELDS, $_obfuscated_0D1529393F2731270921035B3605110722115B310F2E32_);
        array_push($_obfuscated_0D162F0B373226171A051A122540353D37222735150801_, "Content-Type: application/json");
        array_push($_obfuscated_0D162F0B373226171A051A122540353D37222735150801_, "Content-Length: " . strlen($_obfuscated_0D1529393F2731270921035B3605110722115B310F2E32_));
    }
    curl_setopt($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLOPT_HTTPHEADER, $_obfuscated_0D162F0B373226171A051A122540353D37222735150801_);
    $_obfuscated_0D0A140A2F2B0203245C1C06173D273222290926353E11_ = curl_exec($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_);
    $_obfuscated_0D3726262C121A041F2103043D0B222816261F1A120D32_ = json_decode($_obfuscated_0D0A140A2F2B0203245C1C06173D273222290926353E11_, true);
    $_obfuscated_0D3726262C121A041F2103043D0B222816261F1A120D32_["status_code"] = curl_getinfo($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_, CURLINFO_HTTP_CODE);
    if ($_obfuscated_0D3726262C121A041F2103043D0B222816261F1A120D32_["status_code"] === 0) {
        logModuleCall("PteroBill", "Curl Error", curl_errno($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_) . " - " . curl_error($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_), $_obfuscated_0D3726262C121A041F2103043D0B222816261F1A120D32_);
    }
    curl_close($_obfuscated_0D0F232A291E220D1C0A2E2540083D1B0B35235B5B1D11_);
    logModuleCall("PteroBill", $method . " - " . $url, isset($data) ? json_encode($data) : "", print_r($_obfuscated_0D3726262C121A041F2103043D0B222816261F1A120D32_, true));
    return $_obfuscated_0D3726262C121A041F2103043D0B222816261F1A120D32_;
}
function pterobill_TestConnection($params)
{
    try {
        $data = pterobill_apicall($params, "locations");
        if ($data["status_code"] === 200) {
            $_obfuscated_0D08221139331C39390D0615300A3C0F2B0F2631285C32_ = true;
            $_obfuscated_0D043F1A0B31181C0A071E16242A1B100B2E0C30241E22_ = "";
        } else {
            logModuleCall("PteroBill", "pterobill_TestConnection", $params, $data["status_code"], $data["errors"]);
            $_obfuscated_0D08221139331C39390D0615300A3C0F2B0F2631285C32_ = false;
            $_obfuscated_0D043F1A0B31181C0A071E16242A1B100B2E0C30241E22_ = $data["errors"];
        }
    } catch (Exception $_obfuscated_0D2A04310F0E140F3B2A090E3839221803192B0F170122_) {
        logModuleCall("PteroBill", "pterobill_TestConnection", $params, $data["status_code"], $data["errors"]);
        $_obfuscated_0D08221139331C39390D0615300A3C0F2B0F2631285C32_ = false;
        $_obfuscated_0D043F1A0B31181C0A071E16242A1B100B2E0C30241E22_ = $data["errors"];
    }
    return ["success" => $_obfuscated_0D08221139331C39390D0615300A3C0F2B0F2631285C32_, "error" => $_obfuscated_0D043F1A0B31181C0A071E16242A1B100B2E0C30241E22_];
}
function pterobill_PopulateLocations($params)
{
    $data = pterobill_apicall($params, "locations");
    $_obfuscated_0D230D08113331132B363C3D1C13302902371E11180F32_ = [];
    foreach ($data["data"] as $_obfuscated_0D291F0F2C2A2A1234161A2B0F161F262F16191C382F01_) {
        $_obfuscated_0D2E360F5B2928131011010B2A2D06312506050E075C11_ = $_obfuscated_0D291F0F2C2A2A1234161A2B0F161F262F16191C382F01_["attributes"]["id"];
        $_obfuscated_0D5C25212A3122195C5C113B5C1D5C0D020209243B0311_ = $_obfuscated_0D291F0F2C2A2A1234161A2B0F161F262F16191C382F01_["attributes"]["long"];
        $_obfuscated_0D230D08113331132B363C3D1C13302902371E11180F32_[$_obfuscated_0D2E360F5B2928131011010B2A2D06312506050E075C11_] = $_obfuscated_0D5C25212A3122195C5C113B5C1D5C0D020209243B0311_;
    }
    return $_obfuscated_0D230D08113331132B363C3D1C13302902371E11180F32_;
}
function pterobill_PopulateNests($params)
{
    $data = pterobill_apicall($params, "nests");
    $_obfuscated_0D11233B3C3C1C35210537313B2109162C1B0822050B11_ = [];
    foreach ($data["data"] as $_obfuscated_0D2C061219372D010C1B06281A1B272E1E240404360932_) {
        $_obfuscated_0D11113F34061D3926145C3C133F2714130B2724193801_ = $_obfuscated_0D2C061219372D010C1B06281A1B272E1E240404360932_["attributes"]["id"];
        $_obfuscated_0D3B293B223C39140F391F1D5B4022405B342D05300411_ = $_obfuscated_0D2C061219372D010C1B06281A1B272E1E240404360932_["attributes"]["name"];
        $_obfuscated_0D11233B3C3C1C35210537313B2109162C1B0822050B11_[$_obfuscated_0D11113F34061D3926145C3C133F2714130B2724193801_] = $_obfuscated_0D3B293B223C39140F391F1D5B4022405B342D05300411_;
    }
    return $_obfuscated_0D11233B3C3C1C35210537313B2109162C1B0822050B11_;
}
function pterobill_ConfigOptions()
{
    return ["server_name" => ["FriendlyName" => "Server Name", "Type" => "text", "Size" => "20", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Server display name in panel, not required to be unique\">Help</a>", "SimpleMode" => true], "location_id" => ["FriendlyName" => "Location", "Type" => "text", "Size" => "20", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Location to deploy configured in Pterodactyl\">Help</a>", "Loader" => "pterobill_PopulateLocations", "SimpleMode" => true], "cpu" => ["FriendlyName" => "CPU Limit", "Type" => "text", "Size" => "10", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Percentage of CPU usable. 100% is 1 core, 250% is 2.5 cores, 0 for unlimited.\">Help</a>", "SimpleMode" => true, "Default" => "0"], "memory" => ["FriendlyName" => "Memory (MB)", "Type" => "text", "Size" => "10", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Memory available to server in MB. 0 for unlimited.\">Help</a>", "SimpleMode" => true, "Default" => "0"], "disk" => ["FriendlyName" => "Disk (MB)", "Type" => "text", "Size" => "10", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Disk space available to server in MB. 0 for unlimited.\">Help</a>", "SimpleMode" => true, "Default" => "0"], "swap" => ["FriendlyName" => "Swap (MB)", "Type" => "text", "Size" => "10", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Swap space available to server in MB. -1 for unlimited, 0 to disable swap.\">Help</a>", "SimpleMode" => true, "Default" => "0"], "io" => ["FriendlyName" => "IO Weight", "Type" => "text", "Size" => "10", "Description" => "<a class=\"text-primary\" target=\"_blank\" href=\"https://docs.docker.com/engine/reference/run/#block-io-bandwidth-blkio-constraint\" data-toggle=\"tooltip\" title=\"Between 10 and 1000. Higher values are increased priority. Click for more info.\">Help</a>", "SimpleMode" => true, "Default" => "500"], "port_array" => ["FriendlyName" => "Port Array", "Type" => "text", "Size" => "20", "Description" => "<a class=\"text-primary\" href=\"https://pterobill.com/setup-guide.html#portarray\" target=\"_blank\" data-toggle=\"tooltip\" title='Array of ports and environment variables they should map to. Must be valid JSON, e.g. {\"SERVER_PORT\": 27015, \"RCON_PORT\": 27017} - SERVER_PORT is required. When specified ports are unavailable auto-allocator will find the best match. Click for more info.'>Help</a>", "SimpleMode" => true], "create_allocations" => ["FriendlyName" => "Create Allocations", "Type" => "yesno", "Description" => "<a class=\"text-primary\" target=\"_blank\" href=\"https://pterobill.com/setup-guide.html#createallocs\" data-toggle=\"tooltip\" title=\"Create allocations on demand. This feature is not yet implemented.\">Help</a>", "SimpleMode" => true], "dedicated_ip" => ["FriendlyName" => "Dedicated IP", "Type" => "yesno", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Assign a dedicated IP for this server.\">Help</a>", "SimpleMode" => true], "nest_id" => ["FriendlyName" => "Nest", "Type" => "text", "Size" => "20", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Pterodactyl Nest including the desired Egg.\">Help</a>", "Loader" => "pterobill_PopulateNests", "SimpleMode" => true], "egg_id" => ["FriendlyName" => "Egg ID", "Type" => "text", "Size" => "10", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Pterodactyl Egg ID to install.\">Help</a>", "SimpleMode" => true], "pack_id" => ["FriendlyName" => "Pack", "Type" => "text", "Size" => "10", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Pterodactyl Egg Pack ID to install.\">Help</a>", "SimpleMode" => true], "databases" => ["FriendlyName" => "Database Limit", "Type" => "text", "Size" => "10", "Description" => "<a href=\"#\" data-toggle=\"tooltip\" title=\"Number of databases user can create. Leave blank for unlimited.\">Help</a>", "SimpleMode" => true, "Default" => "0"], "autoallocate_increment" => ["FriendlyName" => "AutoAllocator Increment", "Type" => "text", "Size" => "10", "Description" => "<a class=\"text-primary\" href=\"https://pterobill.com/setup-guide.html#allocincrement\" target=\"_blank\" data-toggle=\"tooltip\" title=\"Number of ports the AutoAllocator will increment by. Defaults to 1. Click for more info\">Help</a>", "SimpleMode" => true, "Default" => "1"], "backups" => ["FriendlyName" => "Backup Limit", "Type" => "text", "Size" => "10", "Description" => "<a class=\"text-primary\" data-toggle=\"tooltip\" title=\"Number of backups allowed.  0 for none.\">Help</a>", "SimpleMode" => true, "Default" => "1"]];
}
function pterobill_GetOption($params, $id, $default = NULL)
{
    $_obfuscated_0D3E12335C0F40060E370329321E042D153034140E1311_ = pterobill_configoptions();
    $_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_ = $_obfuscated_0D3E12335C0F40060E370329321E042D153034140E1311_[$id]["FriendlyName"];
    if (isset($params["configoptions"][$_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_]) && $params["configoptions"][$_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_] !== "") {
        return $params["configoptions"][$_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_];
    }
    if (isset($params["configoptions"][$id]) && $params["configoptions"][$id] !== "") {
        return $params["configoptions"][$id];
    }
    if (isset($params["customfields"][$_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_]) && $params["customfields"][$_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_] !== "") {
        return $params["customfields"][$_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_];
    }
    if (isset($params["customfields"][$id]) && $params["customfields"][$id] !== "") {
        return $params["customfields"][$id];
    }
    $_obfuscated_0D3B3B3B3D0F042A1D162C1B050B2405390B0C26303301_ = false;
    $i = 0;
    foreach (pterobill_configoptions() as $key => $value) {
        $i++;
        if ($key === $id) {
            $_obfuscated_0D3B3B3B3D0F042A1D162C1B050B2405390B0C26303301_ = true;
            if ($_obfuscated_0D3B3B3B3D0F042A1D162C1B050B2405390B0C26303301_ && isset($params["configoption" . $i]) && $params["configoption" . $i] !== "") {
                return $params["configoption" . $i];
            }
            return $default;
        }
    }
}
function pterobill_CalculateNodeUtilization($nodesResult)
{
    $_obfuscated_0D2F2434170F0617293213093F30110717141621341C22_ = $nodesResult["attributes"]["relationships"]["nodes"]["data"];
    $_obfuscated_0D2C30220D143F2C10032D38020C0C063D3F1B010D2D22_ = $nodesResult["attributes"]["relationships"]["servers"]["data"];
    $_obfuscated_0D163609125C0D1B0B1F190C1D091F3F17071031301501_ = [];
    foreach ($_obfuscated_0D2F2434170F0617293213093F30110717141621341C22_ as $_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_) {
        $_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_ = $_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_["attributes"];
        if ($_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_["public"] && !$_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_["maintenance_mode"]) {
            $_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_["memory_used"] = 0;
            $_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_["disk_used"] = 0;
            $_obfuscated_0D163609125C0D1B0B1F190C1D091F3F17071031301501_[$_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_["id"]] = $_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_;
        }
    }
    foreach ($_obfuscated_0D2C30220D143F2C10032D38020C0C063D3F1B010D2D22_ as $_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_) {
        $_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_ = $_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["attributes"];
        if (array_key_exists($_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["node"], $_obfuscated_0D163609125C0D1B0B1F190C1D091F3F17071031301501_)) {
            $_obfuscated_0D163609125C0D1B0B1F190C1D091F3F17071031301501_[$_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["node"]]["memory_used"] += $_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["limits"]["memory"];
            $_obfuscated_0D163609125C0D1B0B1F190C1D091F3F17071031301501_[$_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["node"]]["disk_used"] += $_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["limits"]["disk"];
        }
    }
    return $_obfuscated_0D163609125C0D1B0B1F190C1D091F3F17071031301501_;
}
function pterobill_FilterAvailableNodes($params, $nodes)
{
    $_obfuscated_0D1E33062B312D2C0806403F3114341C03133429121132_ = [];
    $_obfuscated_0D0923272D11083B273B061D260B1D1A051C0928330811_ = pterobill_getoption($params, "memory");
    $_obfuscated_0D261E3712023223353431193E2B27160C110728231711_ = pterobill_getoption($params, "disk");
    foreach ($nodes as $_obfuscated_0D3F3E31390829363B112E19163D141D16312F0E313301_ => $_obfuscated_0D1F132D140F2C1E180D14220440333D3C0E212A2C3B01_) {
        if ($_obfuscated_0D1F132D140F2C1E180D14220440333D3C0E212A2C3B01_["memory_used"] + $_obfuscated_0D0923272D11083B273B061D260B1D1A051C0928330811_ <= $_obfuscated_0D1F132D140F2C1E180D14220440333D3C0E212A2C3B01_["memory"] * (1 + $_obfuscated_0D1F132D140F2C1E180D14220440333D3C0E212A2C3B01_["memory_overallocate"] / 100) || $_obfuscated_0D1F132D140F2C1E180D14220440333D3C0E212A2C3B01_["disk_used"] + $_obfuscated_0D261E3712023223353431193E2B27160C110728231711_ <= $_obfuscated_0D1F132D140F2C1E180D14220440333D3C0E212A2C3B01_["disk"] * (1 + $_obfuscated_0D1F132D140F2C1E180D14220440333D3C0E212A2C3B01_["disk_overallocate"] / 100)) {
            $_obfuscated_0D1E33062B312D2C0806403F3114341C03133429121132_[] = $_obfuscated_0D1F132D140F2C1E180D14220440333D3C0E212A2C3B01_;
        }
    }
    return $_obfuscated_0D1E33062B312D2C0806403F3114341C03133429121132_;
}
function pterobill_GetNodesForLocation($params)
{
    $_obfuscated_0D2E360F5B2928131011010B2A2D06312506050E075C11_ = pterobill_getoption($params, "location_id");
    $_obfuscated_0D010728301A0918212F1E1735180F1C233B0909052D11_ = pterobill_apicall($params, "locations/" . $_obfuscated_0D2E360F5B2928131011010B2A2D06312506050E075C11_ . "?include=nodes,servers");
    $_obfuscated_0D1E33062B312D2C0806403F3114341C03133429121132_ = pterobill_calculatenodeutilization($_obfuscated_0D010728301A0918212F1E1735180F1C233B0909052D11_);
    $_obfuscated_0D101A223B06101A130822090E2E2E335C2B020C030511_ = pterobill_filteravailablenodes($params, $_obfuscated_0D1E33062B312D2C0806403F3114341C03133429121132_);
    logModuleCall("PteroBill", "Node Utilization", "Found " . count($_obfuscated_0D1E33062B312D2C0806403F3114341C03133429121132_) . " valid nodes with " . count($_obfuscated_0D101A223B06101A130822090E2E2E335C2B020C030511_) . " available nodes", $_obfuscated_0D101A223B06101A130822090E2E2E335C2B020C030511_);
    return $_obfuscated_0D101A223B06101A130822090E2E2E335C2B020C030511_;
}
function pterobill_GetAllocationsForNode($params, $node_id)
{
    $_obfuscated_0D032C152F06232824212B3E25113D0E0C0E2127061F22_ = [];
    $_obfuscated_0D5C132934031C0401222C3F273D2E221F3E2708090132_ = pterobill_apicall($params, "nodes/" . $node_id . "/allocations");
    $_obfuscated_0D191B1E34382C14262B273F19160B1A282A5C1E051101_ = (int) $_obfuscated_0D5C132934031C0401222C3F273D2E221F3E2708090132_["meta"]["pagination"]["total_pages"] + 1;
    for ($i = 2; $i <= $_obfuscated_0D191B1E34382C14262B273F19160B1A282A5C1E051101_; $i++) {
        foreach ($_obfuscated_0D5C132934031C0401222C3F273D2E221F3E2708090132_["data"] as $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_) {
            $_obfuscated_0D032C152F06232824212B3E25113D0E0C0E2127061F22_[] = $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_["attributes"];
        }
        if ($i != $_obfuscated_0D191B1E34382C14262B273F19160B1A282A5C1E051101_) {
            $_obfuscated_0D5C132934031C0401222C3F273D2E221F3E2708090132_ = pterobill_apicall($params, "nodes/" . $node_id . "/allocations?page=" . $i);
        }
    }
    return $_obfuscated_0D032C152F06232824212B3E25113D0E0C0E2127061F22_;
}
function pterobill_FilterAvailableAllocations($allocations)
{
    $_obfuscated_0D191527310D4007115B093E29032122153706092A1101_ = [];
    foreach ($allocations as $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_) {
        if (!$_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_["assigned"]) {
            $_obfuscated_0D191527310D4007115B093E29032122153706092A1101_[] = $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_;
        }
    }
    return $_obfuscated_0D191527310D4007115B093E29032122153706092A1101_;
}
function pterobill_MapAllocsIpsAndPorts($allocations)
{
    $_obfuscated_0D26012D062D103C1A1A144015260C0A121F3631382E32_ = [];
    $_obfuscated_0D0518120B2F2D3B2C06260B3C0D373015032735113122_ = [];
    foreach ($allocations as $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_) {
        $_obfuscated_0D3639400D19050F26065B373D103F123505093C340601_ = $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_["ip"];
        if (!array_key_exists($_obfuscated_0D3639400D19050F26065B373D103F123505093C340601_, $_obfuscated_0D26012D062D103C1A1A144015260C0A121F3631382E32_)) {
            $_obfuscated_0D26012D062D103C1A1A144015260C0A121F3631382E32_[$_obfuscated_0D3639400D19050F26065B373D103F123505093C340601_] = ["ports" => [], "available" => 0];
        }
        $_obfuscated_0D26012D062D103C1A1A144015260C0A121F3631382E32_[$_obfuscated_0D3639400D19050F26065B373D103F123505093C340601_]["ports"][] = $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_["port"];
        if ($_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_["assigned"] === false) {
            $_obfuscated_0D26012D062D103C1A1A144015260C0A121F3631382E32_[$_obfuscated_0D3639400D19050F26065B373D103F123505093C340601_]["available"] += 1;
            $_obfuscated_0D26012D062D103C1A1A144015260C0A121F3631382E32_[$_obfuscated_0D3639400D19050F26065B373D103F123505093C340601_]["ports_available"][] = $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_["port"];
        }
        $_obfuscated_0D0518120B2F2D3B2C06260B3C0D373015032735113122_[$_obfuscated_0D3639400D19050F26065B373D103F123505093C340601_][$_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_["port"]] = $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_;
    }
    return [$_obfuscated_0D26012D062D103C1A1A144015260C0A121F3631382E32_, $_obfuscated_0D0518120B2F2D3B2C06260B3C0D373015032735113122_];
}
function pterobill_FilterIpAddresses($ports_per_ip, $dedicated, $ports)
{
    if (!WHMCS\Database\Capsule::schema()->hasTable("tblpterobill_iptracker")) {
        pterobill_createdatabasetable();
    }
    $_obfuscated_0D11363F0D185B33193F2E5B2818310B32142D092A2E01_ = [];
    $_obfuscated_0D3B3B40271D28035B2C32210B1F101A302C3E34193E32_ = 0;
    foreach ($ports_per_ip as $key => $val) {
        $_obfuscated_0D142528213C1A5B08092D3F063C0A0605381011063D11_ = WHMCS\Database\Capsule::table("tblpterobill_iptracker")->where("ip_addr", $key)->get();
        if (is_array($_obfuscated_0D142528213C1A5B08092D3F063C0A0605381011063D11_)) {
            $_obfuscated_0D02153C35170211360D231A5B240F2B230C08373C0D32_ = !$_obfuscated_0D142528213C1A5B08092D3F063C0A0605381011063D11_;
        } else {
            $_obfuscated_0D02153C35170211360D231A5B240F2B230C08373C0D32_ = $_obfuscated_0D142528213C1A5B08092D3F063C0A0605381011063D11_->isEmpty();
        }
        if ($_obfuscated_0D02153C35170211360D231A5B240F2B230C08373C0D32_) {
            if ($val["available"] === count($val["ports"])) {
                if ($dedicated === true) {
                    $_obfuscated_0D11363F0D185B33193F2E5B2818310B32142D092A2E01_[] = $key;
                } else {
                    $_obfuscated_0D0C13351B29373B2F35293B252C332724151F371C1D32_ = $key;
                }
            } else {
                if ($val["available"] >= count($ports)) {
                    if ($dedicated === false) {
                        $_obfuscated_0D11363F0D185B33193F2E5B2818310B32142D092A2E01_[] = $key;
                    }
                }
            }
        } else {
            $_obfuscated_0D3B3B40271D28035B2C32210B1F101A302C3E34193E32_ += 1;
        }
    }
    if (empty($_obfuscated_0D11363F0D185B33193F2E5B2818310B32142D092A2E01_) && $dedicated === false && 0 < count($ports_per_ip)) {
        logModuleCall("PteroBill", "AutoAllocator", "", "No candidate for shared IP address found, using an empty IP.");
        $_obfuscated_0D11363F0D185B33193F2E5B2818310B32142D092A2E01_[] = $_obfuscated_0D0C13351B29373B2F35293B252C332724151F371C1D32_;
    }
    logModuleCall("PteroBill", "AutoAllocator", "Considered " . count($ports_per_ip) . " IPs and found " . count($_obfuscated_0D11363F0D185B33193F2E5B2818310B32142D092A2E01_) . " matches skipping " . $_obfuscated_0D3B3B40271D28035B2C32210B1F101A302C3E34193E32_ . " dedicated IPs", $_obfuscated_0D11363F0D185B33193F2E5B2818310B32142D092A2E01_);
    return $_obfuscated_0D11363F0D185B33193F2E5B2818310B32142D092A2E01_;
}
function pterobill_GetPortArray($params)
{
    $_obfuscated_0D0A21371E34380B2E3D22032C283D332C31141C2E2222_ = pterobill_getoption($params, "port_array");
    $_obfuscated_0D2E37262527100732250A123B012B180C132C1E061201_ = json_decode($_obfuscated_0D0A21371E34380B2E3D22032C283D332C31141C2E2222_, true);
    if (!array_key_exists("SERVER_PORT", $_obfuscated_0D2E37262527100732250A123B012B180C132C1E061201_)) {
        throw new Exception("Port array is not valid JSON or does not include a SERVER_PORT entry.");
    }
    if (is_array($_obfuscated_0D2E37262527100732250A123B012B180C132C1E061201_["NONE"])) {
        $_obfuscated_0D26060B0D183E3E351D1C333D062D0C2C3B1009100722_ = $_obfuscated_0D2E37262527100732250A123B012B180C132C1E061201_["NONE"];
        unset($_obfuscated_0D2E37262527100732250A123B012B180C132C1E061201_["NONE"]);
        foreach ($_obfuscated_0D26060B0D183E3E351D1C333D062D0C2C3B1009100722_ as $key => $value) {
            $_obfuscated_0D0D242D1A1C142D401939380D2114211D3B2804052701_ = "NONE" . $key;
            $_obfuscated_0D2E37262527100732250A123B012B180C132C1E061201_[$_obfuscated_0D0D242D1A1C142D401939380D2114211D3B2804052701_] = $value;
        }
    }
    return $_obfuscated_0D2E37262527100732250A123B012B180C132C1E061201_;
}
function pterobill_AutoAllocatePick($params, $dedicated_ip)
{
    $_obfuscated_0D152A1E0D300F063D161B2415012D031B2E1D38062601_ = pterobill_getoption($params, "autoallocate_increment") ?: 1;
    $_obfuscated_0D1E33062B312D2C0806403F3114341C03133429121132_ = pterobill_getnodesforlocation($params);
    logModuleCall("PteroBill", "AutoAllocator", "AutoAllocator starting.  Looking on " . count($_obfuscated_0D1E33062B312D2C0806403F3114341C03133429121132_) . " nodes.", "");
    foreach ($_obfuscated_0D1E33062B312D2C0806403F3114341C03133429121132_ as $_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_) {
        $ports = pterobill_getportarray($params);
        $node_id = $_obfuscated_0D38341939371E2B3339402D2814231222341A06053411_["id"];
        $_obfuscated_0D0E0A1D3E192109090E40173E0B1B0E09272F2D032C22_ = pterobill_getallocationsfornode($params, $node_id);
        $_obfuscated_0D2F1D093C1C1015370A5C0835083B032D303E04250222_ = pterobill_filteravailableallocations($_obfuscated_0D0E0A1D3E192109090E40173E0B1B0E09272F2D032C22_);
        list($ports_per_ip, $_obfuscated_0D0518120B2F2D3B2C06260B3C0D373015032735113122_) = pterobill_mapallocsipsandports($_obfuscated_0D0E0A1D3E192109090E40173E0B1B0E09272F2D032C22_);
        $_obfuscated_0D222C34372E2A282F3C280F3E0534150F322A23213F01_ = pterobill_filteripaddresses($ports_per_ip, $dedicated_ip, $ports);
        if (empty($_obfuscated_0D222C34372E2A282F3C280F3E0534150F322A23213F01_)) {
            return "Failed to find an available IP address.";
        }
        logModuleCall("PteroBill", "AutoAllocator", "", "AutoAllocator found " . count($_obfuscated_0D2F1D093C1C1015370A5C0835083B032D303E04250222_) . " available allocations out of " . count($_obfuscated_0D0E0A1D3E192109090E40173E0B1B0E09272F2D032C22_) . " total allocations for node_id " . $node_id . " with " . count($ports_per_ip) . " unique IPs. Using increment of " . $_obfuscated_0D152A1E0D300F063D161B2415012D031B2E1D38062601_ . ".");
        foreach ($_obfuscated_0D222C34372E2A282F3C280F3E0534150F322A23213F01_ as $_obfuscated_0D2A243F120F103B32083E2C07321001282221113C3D01_) {
            $ports = pterobill_getportarray($params);
            $_obfuscated_0D2206272C0C5B3E0F2D12303937013C283605152C2D11_ = 1000;
            logModuleCall("PteroBill", "AutoAllocator", "", "AutoAllocator selected IP " . $_obfuscated_0D2A243F120F103B32083E2C07321001282221113C3D01_ . " with " . count($ports_per_ip[$_obfuscated_0D2A243F120F103B32083E2C07321001282221113C3D01_]["ports_available"]) . " available allocations. Trying " . $_obfuscated_0D2206272C0C5B3E0F2D12303937013C283605152C2D11_ . " times.");
            for ($i = 0; $i < $_obfuscated_0D2206272C0C5B3E0F2D12303937013C283605152C2D11_; $i++) {
                $_obfuscated_0D2B3F2640090D251A400F3E2F3E051E11403409232D32_ = [];
                $_obfuscated_0D0A1F3224350C352A0D0B3E1A5B3916300E22061C0222_ = array_intersect($ports, $ports_per_ip[$_obfuscated_0D2A243F120F103B32083E2C07321001282221113C3D01_]["ports_available"]);
                if ($_obfuscated_0D0A1F3224350C352A0D0B3E1A5B3916300E22061C0222_ === $ports) {
                    foreach ($ports as $key => $port) {
                        $_obfuscated_0D3C12373E32123C032625392132045B0F04165B3E2932_ = $_obfuscated_0D0518120B2F2D3B2C06260B3C0D373015032735113122_[$_obfuscated_0D2A243F120F103B32083E2C07321001282221113C3D01_][$port];
                        if (!is_null($_obfuscated_0D3C12373E32123C032625392132045B0F04165B3E2932_)) {
                            $_obfuscated_0D2B3F2640090D251A400F3E2F3E051E11403409232D32_[$key] = $_obfuscated_0D3C12373E32123C032625392132045B0F04165B3E2932_;
                        }
                    }
                    if (count($_obfuscated_0D2B3F2640090D251A400F3E2F3E051E11403409232D32_) !== count($ports)) {
                    }
                } else {
                    $ports = array_map(function ($val) {
                        static $autoallocate_increment = NULL;
                        return (int) $val + (int) $autoallocate_increment;
                    }, $ports);
                }
            }
            if (!empty($_obfuscated_0D2B3F2640090D251A400F3E2F3E051E11403409232D32_)) {
                return $_obfuscated_0D2B3F2640090D251A400F3E2F3E051E11403409232D32_;
            }
        }
    }
    return "AutoAllocator failed to find suitable allocations";
}
function pterobill_GenerateUsername($length = 8)
{
    $_obfuscated_0D07033D0B4001162C282213373C313C07353B1E290C11_ = array_merge(range(0, 9), range("a", "z"), range("A", "Z"));
    $username = "";
    for ($i = 0; $i < $length; $i++) {
        $username .= $_obfuscated_0D07033D0B4001162C282213373C313C07353B1E290C11_[mt_rand(0, count($_obfuscated_0D07033D0B4001162C282213373C313C07353B1E290C11_) - 1)];
    }
    return $username;
}
function pterobill_CreateAccount($params)
{
    try {
        $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ = pterobill_GetServerID($params);
        if (isset($_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_)) {
            throw new Exception("Server with this ID already exists, aborting account creation.");
        }
        $_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_ = pterobill_apicall($params, "users/external/" . $params["clientsdetails"]["id"]);
        if ($_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_["status_code"] === 404) {
            $_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_ = pterobill_apicall($params, "users?filter[email]=" . urlencode($params["clientsdetails"]["email"]));
            if ($_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_["meta"]["pagination"]["total"] === 0) {
                $_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_ = pterobill_apicall($params, "users", ["username" => pterobill_getoption($params, "username", pterobill_generateusername()), "email" => $params["clientsdetails"]["email"], "first_name" => $params["clientsdetails"]["firstname"], "last_name" => $params["clientsdetails"]["lastname"], "external_id" => $params["clientsdetails"]["id"]], "POST");
            } else {
                foreach ($_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_["data"] as $key => $value) {
                    if ($value["attributes"]["email"] === $params["clientsdetails"]["email"]) {
                        $_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_ = array_merge($_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_, $value);
                        $_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_ = array_merge($_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_, $_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_["data"][0]);
                    }
                }
            }
        }
        if ($_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_["status_code"] === 200 || $_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_["status_code"] === 201) {
            $_obfuscated_0D1D242B2A5C240202083314182C033E0E0C1E2A241E32_ = $_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_["attributes"]["id"];
            $_obfuscated_0D23223E33382825381D5B08171A060D14092F16090622_ = pterobill_getoption($params, "nest_id");
            $_obfuscated_0D2D2422160340031E095B283924172908352C1F093D11_ = pterobill_getoption($params, "egg_id");
            $_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_ = pterobill_apicall($params, "nests/" . $_obfuscated_0D23223E33382825381D5B08171A060D14092F16090622_ . "/eggs/" . $_obfuscated_0D2D2422160340031E095B283924172908352C1F093D11_ . "?include=variables");
            if ($_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_["status_code"] !== 200) {
                throw new Exception("Fetching egg data failed with error: " . $_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_["status_code"] . ". For additional information enable module debug mode.");
            }
            $dedicated_ip = pterobill_getoption($params, "dedicated_ip") ? true : false;
            $_obfuscated_0D21351D310B0D1E2B3B113F1C08212C06101204180B01_ = pterobill_autoallocatepick($params, $dedicated_ip);
            if (!is_array($_obfuscated_0D21351D310B0D1E2B3B113F1C08212C06101204180B01_)) {
                throw new Exception($_obfuscated_0D21351D310B0D1E2B3B113F1C08212C06101204180B01_);
            }
            $_obfuscated_0D1C2C0A3B3E2D15013814311B0F3805060A1A1E3B1322_ = $_obfuscated_0D21351D310B0D1E2B3B113F1C08212C06101204180B01_["SERVER_PORT"]["id"];
            $_obfuscated_0D2A243F120F103B32083E2C07321001282221113C3D01_ = $_obfuscated_0D21351D310B0D1E2B3B113F1C08212C06101204180B01_["SERVER_PORT"]["ip"];
            unset($_obfuscated_0D21351D310B0D1E2B3B113F1C08212C06101204180B01_["SERVER_PORT"]);
            $_obfuscated_0D250B292240340C3B39352C1D19310B39232D262B2C11_ = array_column($_obfuscated_0D21351D310B0D1E2B3B113F1C08212C06101204180B01_, "id");
            if (($_obfuscated_0D173B151F042D2B06390D282F30180B3C2635053B0132_ = array_search($_obfuscated_0D1C2C0A3B3E2D15013814311B0F3805060A1A1E3B1322_, $_obfuscated_0D250B292240340C3B39352C1D19310B39232D262B2C11_)) !== false) {
                unset($_obfuscated_0D250B292240340C3B39352C1D19310B39232D262B2C11_[$_obfuscated_0D173B151F042D2B06390D282F30180B3C2635053B0132_]);
            }
            $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_ = [];
            foreach ($_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_["attributes"]["relationships"]["variables"]["data"] as $key => $val) {
                $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_ = $val["attributes"];
                $_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_ = $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_["env_variable"];
                $default = $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_["default_value"];
                $_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_ = pterobill_getoption($params, $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_["name"]);
                $_obfuscated_0D281D26020A36195B0F270229393C291B300A181A1A01_ = pterobill_getoption($params, $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_["env_variable"]);
                if (isset($_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_)) {
                    $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_[$_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_] = (string) $_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_;
                } else {
                    if (isset($_obfuscated_0D281D26020A36195B0F270229393C291B300A181A1A01_)) {
                        $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_[$_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_] = (string) $_obfuscated_0D281D26020A36195B0F270229393C291B300A181A1A01_;
                    } else {
                        $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_[$_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_] = $default;
                    }
                }
            }
            foreach ($_obfuscated_0D21351D310B0D1E2B3B113F1C08212C06101204180B01_ as $key => $val) {
                if (substr($key, 0, 4) !== "NONE") {
                    $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_[$key] = (string) $val["port"];
                }
            }
            $_obfuscated_0D29260310392B320E2C041C0B3E401E1F350F123E2522_ = pterobill_getoption($params, "server_name", pterobill_generateusername() . "_" . $params["serviceid"]);
            $_obfuscated_0D0D1D360A04402B40242D1B0F1A3B120B11405B2A1C11_ = pterobill_getoption($params, "memory");
            $_obfuscated_0D082F1D06303F3C14022A0539210D282E320B23053832_ = pterobill_getoption($params, "swap");
            $_obfuscated_0D0B1C2B0F10340E0F0609182E2F1C1E041E371A102122_ = pterobill_getoption($params, "io");
            $_obfuscated_0D105B1E072A0A251A08070C5C0C21112F0126382B1611_ = pterobill_getoption($params, "cpu");
            $_obfuscated_0D24191130043004351B3C2D051231180D171E2B130911_ = pterobill_getoption($params, "disk");
            $_obfuscated_0D010F13363B133607342531042135090E1E023D3C0A01_ = pterobill_getoption($params, "pack_id");
            $_obfuscated_0D023C2B5B5B351A07190A1F15230F3F3B09400A160D11_ = pterobill_getoption($params, "image", $_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_["attributes"]["docker_image"]);
            $_obfuscated_0D311127100338053137293B1A0313365B2A0601141A32_ = pterobill_getoption($params, "startup", $_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_["attributes"]["startup"]);
            $_obfuscated_0D16092D0E2A1E09091E0B32022F0B3537161229025C32_ = pterobill_getoption($params, "databases");
            $allocations = pterobill_getoption($params, "allocations");
            $_obfuscated_0D020C37040F3421014012022F22031F0A0B1912214001_ = pterobill_getoption($params, "backups");
            $_obfuscated_0D270F1D0A0D243E2C121B0610260815251E383B371501_ = pterobill_getoption($params, "oom_disabled") ? true : false;
            $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_ = ["name" => $_obfuscated_0D29260310392B320E2C041C0B3E401E1F350F123E2522_, "user" => (int) $_obfuscated_0D1D242B2A5C240202083314182C033E0E0C1E2A241E32_, "nest" => (int) $_obfuscated_0D23223E33382825381D5B08171A060D14092F16090622_, "egg" => (int) $_obfuscated_0D2D2422160340031E095B283924172908352C1F093D11_, "docker_image" => $_obfuscated_0D023C2B5B5B351A07190A1F15230F3F3B09400A160D11_, "startup" => $_obfuscated_0D311127100338053137293B1A0313365B2A0601141A32_, "oom_disabled" => $_obfuscated_0D270F1D0A0D243E2C121B0610260815251E383B371501_, "limits" => ["memory" => (int) $_obfuscated_0D0D1D360A04402B40242D1B0F1A3B120B11405B2A1C11_, "swap" => (int) $_obfuscated_0D082F1D06303F3C14022A0539210D282E320B23053832_, "io" => (int) $_obfuscated_0D0B1C2B0F10340E0F0609182E2F1C1E041E371A102122_, "cpu" => (int) $_obfuscated_0D105B1E072A0A251A08070C5C0C21112F0126382B1611_, "disk" => (int) $_obfuscated_0D24191130043004351B3C2D051231180D171E2B130911_], "feature_limits" => ["databases" => $_obfuscated_0D16092D0E2A1E09091E0B32022F0B3537161229025C32_ ? (int) $_obfuscated_0D16092D0E2A1E09091E0B32022F0B3537161229025C32_ : NULL, "allocations" => (int) $allocations, "backups" => (int) $_obfuscated_0D020C37040F3421014012022F22031F0A0B1912214001_], "environment" => $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_, "start_on_completion" => true, "external_id" => (string) $params["serviceid"], "allocation" => ["default" => (int) $_obfuscated_0D1C2C0A3B3E2D15013814311B0F3805060A1A1E3B1322_, "additional" => $_obfuscated_0D250B292240340C3B39352C1D19310B39232D262B2C11_]];
            if (isset($_obfuscated_0D010F13363B133607342531042135090E1E023D3C0A01_)) {
                $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["pack"] = (int) $_obfuscated_0D010F13363B133607342531042135090E1E023D3C0A01_;
            }
            $_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_ = pterobill_apicall($params, "servers", $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_, "POST");
            if ($_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["status_code"] === 400) {
                throw new Exception("No available node matching the request.");
            }
            if ($_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["status_code"] !== 201) {
                throw new Exception("Creating server failed with error: " . $_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["status_code"] . ". For additional information enable module debug mode.");
            }
        } else {
            throw new Exception("User creation failed with error: " . $_obfuscated_0D222705352E2F0E1F135C3D053810120206173C2E2122_["status_code"] . ". For additional information enable module debug mode.");
        }
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        logModuleCall("PteroBill", "Server creation failed", $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_, $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage());
        return $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage();
    }
    try {
        if ($dedicated_ip) {
            WHMCS\Database\Capsule::table("tblpterobill_iptracker")->insert(["ip_addr" => $_obfuscated_0D2A243F120F103B32083E2C07321001282221113C3D01_, "external_id" => $params["serviceid"]]);
            $params["model"]->serviceProperties->save(["dedicatedip" => $_obfuscated_0D2A243F120F103B32083E2C07321001282221113C3D01_]);
        }
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        return "Error recording the Dedicated IP: " . $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage();
    }
    return "success";
}
function pterobill_GetServerID($params, $raw = false)
{
    $_obfuscated_0D40031C4029241A175B0401372C220F353E0A0F061722_ = pterobill_apicall($params, "servers/external/" . $params["serviceid"], [], "GET");
    if ($_obfuscated_0D40031C4029241A175B0401372C220F353E0A0F061722_["status_code"] === 200) {
        if ($raw) {
            return $_obfuscated_0D40031C4029241A175B0401372C220F353E0A0F061722_;
        }
        return $_obfuscated_0D40031C4029241A175B0401372C220F353E0A0F061722_["attributes"]["id"];
    }
    if ($_obfuscated_0D40031C4029241A175B0401372C220F353E0A0F061722_["status_code"] === 500) {
        throw new Exception("Error getting the server ID from Pterodactyl. For additional information check the panel logs.");
    }
}
function pterobill_SuspendAccount($params)
{
    try {
        $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ = pterobill_getserverid($params);
        if (!isset($_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_)) {
            throw new Exception("Suspending server failed because it does not exist.");
        }
        $_obfuscated_0D35382538123D0B2E041D043337342A2B3F181F5B0222_ = pterobill_apicall($params, "servers/" . $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ . "/suspend", [], "POST");
        if ($_obfuscated_0D35382538123D0B2E041D043337342A2B3F181F5B0222_["status_code"] !== 204) {
            throw new Exception("Suspending server failed with error: " . $_obfuscated_0D35382538123D0B2E041D043337342A2B3F181F5B0222_["status_code"] . ". For additional information enable module debug mode.");
        }
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        return $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage();
    }
    return "success";
}
function pterobill_UnsuspendAccount($params)
{
    try {
        $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ = pterobill_getserverid($params);
        if (!isset($_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_)) {
            throw new Exception("Un-suspending server failed because it does not exist.");
        }
        $_obfuscated_0D35382538123D0B2E041D043337342A2B3F181F5B0222_ = pterobill_apicall($params, "servers/" . $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ . "/unsuspend", [], "POST");
        if ($_obfuscated_0D35382538123D0B2E041D043337342A2B3F181F5B0222_["status_code"] !== 204) {
            throw new Exception("Un-suspending server failed with error: " . $_obfuscated_0D35382538123D0B2E041D043337342A2B3F181F5B0222_["status_code"] . ". For additional information enable module debug mode.");
        }
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        return $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage();
    }
    return "success";
}
function pterobill_TerminateAccount($params)
{
    $_obfuscated_0D3E0B3E2F34021F111D2213131F30303E151936401D32_ = $params["serviceid"];
    try {
        $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ = pterobill_getserverid($params);
        if (!isset($_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_)) {
            throw new Exception("Failed to terminate server because it doesn't exist.");
        }
        $_obfuscated_0D1B163421351C0F402440362C2E13020D180D283F1622_ = pterobill_apicall($params, "servers/" . $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_, [], "DELETE");
        if ($_obfuscated_0D1B163421351C0F402440362C2E13020D180D283F1622_["status_code"] !== 204) {
            throw new Exception("Terminating server failed with error: " . $_obfuscated_0D1B163421351C0F402440362C2E13020D180D283F1622_["status_code"] . ". For additional information enable module debug mode.");
        }
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        return $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage();
    }
    try {
        WHMCS\Database\Capsule::table("tblpterobill_iptracker")->where("external_id", $_obfuscated_0D3E0B3E2F34021F111D2213131F30303E151936401D32_)->delete();
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        return "Error freeing dedicated IP: " . $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage();
    }
    return "success";
}
function pterobill_ChangePackage($params)
{
    try {
        $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_ = pterobill_getserverid($params, true);
        if ($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["status_code"] === 404 || !isset($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["id"])) {
            throw new Exception("Changing package failed because the specified server does not exist.");
        }
        $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ = $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["id"];
        $_obfuscated_0D0D1D360A04402B40242D1B0F1A3B120B11405B2A1C11_ = pterobill_getoption($params, "memory");
        $_obfuscated_0D082F1D06303F3C14022A0539210D282E320B23053832_ = pterobill_getoption($params, "swap");
        $_obfuscated_0D0B1C2B0F10340E0F0609182E2F1C1E041E371A102122_ = pterobill_getoption($params, "io");
        $_obfuscated_0D105B1E072A0A251A08070C5C0C21112F0126382B1611_ = pterobill_getoption($params, "cpu");
        $_obfuscated_0D24191130043004351B3C2D051231180D171E2B130911_ = pterobill_getoption($params, "disk");
        $_obfuscated_0D16092D0E2A1E09091E0B32022F0B3537161229025C32_ = pterobill_getoption($params, "databases");
        $allocations = pterobill_getoption($params, "options");
        $_obfuscated_0D270F1D0A0D243E2C121B0610260815251E383B371501_ = pterobill_getoption($params, "oom_disabled") ? true : false;
        $_obfuscated_0D390901032D272E04090C302F14291E2407252A211932_ = ["allocation" => $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["allocation"], "memory" => (int) $_obfuscated_0D0D1D360A04402B40242D1B0F1A3B120B11405B2A1C11_, "swap" => (int) $_obfuscated_0D082F1D06303F3C14022A0539210D282E320B23053832_, "io" => (int) $_obfuscated_0D0B1C2B0F10340E0F0609182E2F1C1E041E371A102122_, "cpu" => (int) $_obfuscated_0D105B1E072A0A251A08070C5C0C21112F0126382B1611_, "disk" => (int) $_obfuscated_0D24191130043004351B3C2D051231180D171E2B130911_, "oom_disabled" => $_obfuscated_0D270F1D0A0D243E2C121B0610260815251E383B371501_, "feature_limits" => ["databases" => (int) $_obfuscated_0D16092D0E2A1E09091E0B32022F0B3537161229025C32_, "allocations" => (int) $allocations, "backups" => (int) $_obfuscated_0D020C37040F3421014012022F22031F0A0B1912214001_]];
        $_obfuscated_0D5C222D35160B185C0721142609030227012C2F260232_ = pterobill_apicall($params, "servers/" . $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ . "/build", $_obfuscated_0D390901032D272E04090C302F14291E2407252A211932_, "PATCH");
        if ($_obfuscated_0D5C222D35160B185C0721142609030227012C2F260232_["status_code"] !== 200) {
            throw new Exception("Updating the server build data failed with error: " . $_obfuscated_0D5C222D35160B185C0721142609030227012C2F260232_["status_code"] . ". For additional information enable module debug mode.");
        }
        $_obfuscated_0D23223E33382825381D5B08171A060D14092F16090622_ = pterobill_getoption($params, "nest_id");
        $_obfuscated_0D2D2422160340031E095B283924172908352C1F093D11_ = pterobill_getoption($params, "egg_id");
        $_obfuscated_0D010F13363B133607342531042135090E1E023D3C0A01_ = pterobill_getoption($params, "pack_id");
        $_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_ = pterobill_apicall($params, "nests/" . $_obfuscated_0D23223E33382825381D5B08171A060D14092F16090622_ . "/eggs/" . $_obfuscated_0D2D2422160340031E095B283924172908352C1F093D11_ . "?include=variables");
        if ($_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_["status_code"] !== 200) {
            throw new Exception("Fetching eggs from panel failed with error: " . $_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_["status_code"] . ". For additional information enable module debug mode.");
        }
        $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_ = [];
        foreach ($_obfuscated_0D2413240D2A042D3C2C3B03345C3C160F3F1A2E2A3B01_["attributes"]["relationships"]["variables"]["data"] as $key => $val) {
            $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_ = $val["attributes"];
            $_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_ = $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_["env_variable"];
            $_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_ = pterobill_getoption($params, $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_["name"]);
            $_obfuscated_0D281D26020A36195B0F270229393C291B300A181A1A01_ = pterobill_getoption($params, $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_["env_variable"]);
            if (isset($_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_)) {
                $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_[$_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_] = $_obfuscated_0D391D1F2C19171F040D1E24112F252B2C0F23092B0132_;
            } else {
                if (isset($_obfuscated_0D281D26020A36195B0F270229393C291B300A181A1A01_)) {
                    $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_[$_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_] = $_obfuscated_0D281D26020A36195B0F270229393C291B300A181A1A01_;
                } else {
                    if (isset($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["container"]["environment"][$_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_])) {
                        $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_[$_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_] = $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["container"]["environment"][$_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_];
                    } else {
                        if (isset($_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_["default_value"])) {
                            $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_[$_obfuscated_0D0A310D0C27173F403F0B5B5C3F0C1C05331A1F290601_] = $_obfuscated_0D3C2D3921363F1F3410251F2A0C330B162F3F121C1311_["default_value"];
                        }
                    }
                }
            }
        }
        $_obfuscated_0D023C2B5B5B351A07190A1F15230F3F3B09400A160D11_ = pterobill_getoption($params, "image", $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["container"]["image"]);
        $_obfuscated_0D311127100338053137293B1A0313365B2A0601141A32_ = pterobill_getoption($params, "startup", $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["container"]["startup_command"]);
        $_obfuscated_0D390901032D272E04090C302F14291E2407252A211932_ = ["environment" => $_obfuscated_0D2E0F5C17232B0E1C1C023D050708101C252C2D2C1401_, "startup" => $_obfuscated_0D311127100338053137293B1A0313365B2A0601141A32_, "egg" => (int) $_obfuscated_0D2D2422160340031E095B283924172908352C1F093D11_, "pack" => (int) $_obfuscated_0D010F13363B133607342531042135090E1E023D3C0A01_, "image" => $_obfuscated_0D023C2B5B5B351A07190A1F15230F3F3B09400A160D11_, "skip_scripts" => false];
        $_obfuscated_0D5C222D35160B185C0721142609030227012C2F260232_ = pterobill_apicall($params, "servers/" . $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ . "/startup", $_obfuscated_0D390901032D272E04090C302F14291E2407252A211932_, "PATCH");
        if ($_obfuscated_0D5C222D35160B185C0721142609030227012C2F260232_["status_code"] !== 200) {
            throw new Exception("Updating the server startup config failed with error: " . $_obfuscated_0D5C222D35160B185C0721142609030227012C2F260232_["status_code"] . ". For additional information enable module debug mode.");
        }
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        return $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage();
    }
    return "success";
}
function pterobill_ReinstallServer($params)
{
    try {
        $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_ = pterobill_getserverid($params, true);
        if ($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["status_code"] === 404 || !isset($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["id"])) {
            return NULL;
        }
        $endpoint = "servers/" . $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["id"] . "/reinstall";
        pterobill_apicall($params, $endpoint, [], "POST");
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        logModuleCall("PteroBill", "Server Reinstall Failed", "", $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage());
        return "Error reinstalling server";
    }
    return "success";
}
function pterobill_RebootServer($params)
{
    try {
        $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_ = pterobill_getserverid($params, true);
        if ($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["status_code"] === 404 || !isset($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["id"])) {
            return NULL;
        }
        $endpoint = "servers/" . $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["identifier"] . "/power";
        pterobill_apicall($params, $endpoint, ["signal" => "restart"], "POST", "client");
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        logModuleCall("PteroBill", "Server Reboot Failed", "", $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage());
        return "Error rebooting server";
    }
    return "success";
}
function pterobill_StartServer($params)
{
    try {
        $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_ = pterobill_getserverid($params, true);
        if ($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["status_code"] === 404 || !isset($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["id"])) {
            return NULL;
        }
        $endpoint = "servers/" . $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["identifier"] . "/power";
        pterobill_apicall($params, $endpoint, ["signal" => "start"], "POST", "client");
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        logModuleCall("PteroBill", "Server Start Failed", "", $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage());
        return "Error starting server";
    }
    return "success";
}
function pterobill_StopServer($params)
{
    try {
        $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_ = pterobill_getserverid($params, true);
        if ($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["status_code"] === 404 || !isset($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["id"])) {
            return NULL;
        }
        $endpoint = "servers/" . $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["identifier"] . "/power";
        pterobill_apicall($params, $endpoint, ["signal" => "stop"], "POST", "client");
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
        logModuleCall("PteroBill", "Server Stop Failed", "", $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_->getMessage());
        return "Error stopping server";
    }
    return "success";
}
function pterobill_ClientAreaAllowedFunctions()
{
    $_obfuscated_0D0C0A0110013B1A271B1724274028163D1F0B150D3401_ = ["Reinstall Server" => "ReinstallServer", "Reboot Server" => "RebootServer", "Start Server" => "StartServer", "Stop Server" => "StopServer"];
    return $_obfuscated_0D0C0A0110013B1A271B1724274028163D1F0B150D3401_;
}
function pterobill_LoginLink($params)
{
    if ($params["moduletype"] !== "pterobill") {
        return NULL;
    }
    try {
        $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ = pterobill_getserverid($params);
        if (!isset($_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_)) {
            return NULL;
        }
        $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ = pterobill_gethostname($params);
        echo "<a class=\"text-primary\" href=\"" . $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ . "/admin/servers/view/" . $_obfuscated_0D282331143F013F3F261F5C082E0C1015373D1D1A1211_ . "\" target=\"_blank\">Go to Server</a>";
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
    }
}
function pterobill_ClientArea($params)
{
    if ($params["moduletype"] !== "pterobill") {
        return NULL;
    }
    try {
        $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_ = pterobill_getserverid($params, true);
        if ($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["status_code"] === 404 || !isset($_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["id"])) {
            return NULL;
        }
        $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ = pterobill_gethostname($params);
        return ["templatefile" => "clientarea", "vars" => ["serviceurl" => $_obfuscated_0D2A12053606101E1205210504303E39330F2222043E22_ . "/server/" . $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["identifier"], "starturl" => "clientarea.php?action=productdetails&id=" . $params["serviceid"] . "&modop=custom&a=StartServer", "stopurl" => "clientarea.php?action=productdetails&id=" . $params["serviceid"] . "&modop=custom&a=StopServer", "rebooturl" => "clientarea.php?action=productdetails&id=" . $params["serviceid"] . "&modop=custom&a=RebootServer", "reinstallurl" => "clientarea.php?action=productdetails&id=" . $params["serviceid"] . "&modop=custom&a=ReinstallServer", "memory" => $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["limits"]["memory"] . " MB", "disk" => $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["limits"]["disk"] / 1000 . " GB", "cpu" => $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["limits"]["cpu"] . "%", "location" => $_obfuscated_0D0E2A2E5C155C36103B2634022F0B29083B2B25242B11_["attributes"]["container"]["environment"]["P_SERVER_LOCATION"]]];
    } catch (Exception $_obfuscated_0D27013E22280D3011170F1A025C02381F083F0B300911_) {
    }
}
function pterobill_ListAccounts($params)
{
    $_obfuscated_0D2A2B0F073726220609081403082D071509103D322601_ = [];
    $_obfuscated_0D232817242640060D0B3C1625222C3F22182923373511_ = [];
    try {
        $data = pterobill_apicall($params, "servers");
        $_obfuscated_0D191B1E34382C14262B273F19160B1A282A5C1E051101_ = (int) $data["meta"]["pagination"]["total_pages"] + 1;
        for ($i = 2; $i <= $_obfuscated_0D191B1E34382C14262B273F19160B1A282A5C1E051101_; $i++) {
            foreach ($data["data"] as $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_) {
                $_obfuscated_0D232817242640060D0B3C1625222C3F22182923373511_[] = $_obfuscated_0D111112142B2F5C2D18183D343D0E362D0D0A3B2E3311_["attributes"];
            }
            if ($i != $_obfuscated_0D191B1E34382C14262B273F19160B1A282A5C1E051101_) {
                $data = pterobill_apicall($params, "servers?page=" . $i);
            }
        }
        foreach ($_obfuscated_0D232817242640060D0B3C1625222C3F22182923373511_ as $_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_) {
            if (isset($_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["external_id"])) {
                $_obfuscated_0D342209180927381A0C1D331F280B5B1E5B16222D2711_ = $_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["suspended"] ? WHMCS\Service\Status::SUSPENDED : WHMCS\Service\Status::ACTIVE;
                $_obfuscated_0D0909142805030F05241C0715231114312D140E2C2F32_ = new DateTime($_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["created_at"]);
                $_obfuscated_0D2A2B0F073726220609081403082D071509103D322601_[] = ["email" => "", "username" => "", "domain" => "", "uniqueIdentifier" => $_obfuscated_0D231B2B0C3F39183C05221D2A072F381B2F2314232311_["identifier"], "primaryip" => "", "created" => $_obfuscated_0D0909142805030F05241C0715231114312D140E2C2F32_->format("Y-m-d H:i:s"), "status" => $_obfuscated_0D342209180927381A0C1D331F280B5B1E5B16222D2711_];
            }
  


Malware detection & removal plugin for WordPress

(C)2020 Wordpress Doctor All rights reserved.