diff --git a/.env b/.env
index 0d932d7..67b5888 100644
--- a/.env
+++ b/.env
@@ -1,3 +1,4 @@
APP_SIGNATURE = fcsc.gov.ae.X7pL9qZm2A
-BASE_URL = https://pb.venbait.in
\ No newline at end of file
+LIVE_BASE_URL = https://pb.venbait.in
+BASE_URL = http://127.0.0.1:8090
diff --git a/main.go b/main.go
index d75f467..d148581 100755
--- a/main.go
+++ b/main.go
@@ -1,6 +1,7 @@
package main
import (
+ "bytes"
"context"
"crypto/rand"
"encoding/hex"
@@ -36,6 +37,7 @@ import (
)
var baseUrl = os.Getenv("BASE_URL")
+var liveBaseUrl = os.Getenv("LIVE_BASE_URL")
type EmailConfigurationResponse struct {
Page int `json:"page"`
@@ -95,6 +97,9 @@ func fetchAndConvertXMLToJSON(apiURL string, outputDir string, fileName string,
if err != nil {
return nil, err
}
+ // fmt.Println("Response url:", apiURL)
+ // fmt.Println("Response status:", resp.Status)
+ // fmt.Println("Response body:", string(body))
// Clean the XML by removing namespace prefixes
cleanXML := []byte(removeNamespace(body))
@@ -472,6 +477,7 @@ func main() {
}
var baseUrl = os.Getenv("BASE_URL")
+ var liveBaseUrl = os.Getenv("LIVE_BASE_URL")
app = pocketbase.New()
@@ -1458,112 +1464,6 @@ func main() {
})
- // e.Router.GET("/api/getHomePageData", func(c echo.Context) error {
-
- // language := c.QueryParam("language")
- // colorMode := c.QueryParam("color_mode")
-
- // var colorPatternColumn string
- // if colorMode == "dark" {
- // colorPatternColumn = "color_pattern_dark"
- // } else {
- // colorPatternColumn = "color_pattern_light"
- // }
-
- // var languageSpecificColumn string
- // if language == "en" {
- // languageSpecificColumn = "data_set_tile_heading_en"
- // } else {
- // languageSpecificColumn = "data_set_tile_heading_ar"
- // }
-
- // // Define the struct for holding the query results
- // mainTopics := []struct {
- // MainTopicEn string `db:"main_topic_en" json:"main_topic_en"`
- // MainTopicAr string `db:"main_topic_ar" json:"main_topic_ar"`
- // MainTopicListOrder string `db:"main_topic_list_order" json:"main_topic_list_order"`
- // ColorPattern string `db:"color_pattern" json:"color_pattern"`
- // }{}
-
- // // Execute the query
- // query := fmt.Sprintf(`
- // SELECT
- // main_topic_en,
- // main_topic_ar,
- // main_topic_list_order,
- // %s AS color_pattern
- // FROM home_screen
- // GROUP BY main_topic_en, main_topic_ar, main_topic_list_order, %s
- // ORDER BY main_topic_list_order ASC
- // `, colorPatternColumn, colorPatternColumn)
-
- // err := app.DB().NewQuery(query).All(&mainTopics)
-
- // // err := app.DB().
- // // Select("main_topic_en", "main_topic_ar", "main_topic_list_order", "color_pattern").
- // // From("home_screen").
- // // GroupBy("main_topic_en", "main_topic_ar", "color_pattern").
- // // OrderBy("main_topic_list_order ASC").
- // // All(&mainTopics)
-
- // if err != nil {
- // log.Printf("Failed to fetch home_screen data: %v", err)
- // return c.JSON(http.StatusInternalServerError, map[string]string{"error": "Failed to fetch records"})
- // }
-
- // // If no records are found
- // if len(mainTopics) == 0 {
- // return c.JSON(http.StatusNotFound, map[string]string{"error": "No records found for home screen"})
- // }
-
- // // Final result structure
- // result := []map[string]interface{}{}
-
- // // Loop through main topics and fetch sub-topic data for each
- // for _, mainTopic := range mainTopics {
-
- // dataSets := []struct {
- // DataSet string `db:"data_set" json:"data_set"`
- // DataSetTileHeading string `db:"data_set_tile_heading" json:"data_set_tile_heading"`
- // ValueSource string `db:"value_source" json:"value_source"`
- // Value string `db:"value" json:"value"`
- // DataSetListOrder string `db:"data_set_list_order" json:"data_set_list_order"`
- // }{}
-
- // query := ` SELECT data_set,` + languageSpecificColumn + ` AS data_set_tile_heading,value_source,value, data_set_list_order FROM home_screen WHERE main_topic_en = {:topic}`
- // err := app.DB().
- // NewQuery(query).
- // Bind(dbx.Params{
- // "topic": mainTopic.MainTopicEn,
- // }).
- // All(&dataSets)
-
- // if err != nil {
- // log.Printf("Error fetching data sets: %v", err)
- // continue
- // }
-
- // var MainTopic string
- // if language == "en" {
- // MainTopic = mainTopic.MainTopicEn
- // } else {
- // MainTopic = mainTopic.MainTopicAr
- // }
-
- // // Add the main topic and its sub-topics to the result
- // result = append(result, map[string]interface{}{
- // "main_topic": MainTopic,
- // "main_topic_list_order": mainTopic.MainTopicListOrder,
- // "color_pattern": mainTopic.ColorPattern,
- // "tile_data": dataSets,
- // })
- // }
-
- // // Send the combined result as JSON
- // return c.JSON(http.StatusOK, result)
-
- // })
-
e.Router.GET("/api/getUAENumbersData", func(c echo.Context) error {
apiKey := c.Request().Header.Get("APP_SIGNATURE")
@@ -1801,6 +1701,183 @@ func main() {
})
+ type DownloadRequest struct {
+ Username string `json:"username"`
+ Password string `json:"password"`
+ Collection string `json:"collection"`
+ SyncWithLive bool `json:"syncWithLive"`
+ LiveUsername string `json:"liveUsername"`
+ LivePassword string `json:"livePassword"`
+ }
+
+ type AdminLoginResponse struct {
+ Token string `json:"token"`
+ Admin map[string]interface{} `json:"admin"`
+ }
+
+ type DownloadResponse struct {
+ Collection string `json:"collection"`
+ Records []map[string]interface{} `json:"records"`
+ }
+
+ e.Router.POST("/api/downloadWithLogin", func(c echo.Context) error {
+ reqBody := new(DownloadRequest)
+ if err := c.Bind(reqBody); err != nil {
+ return c.JSON(400, map[string]string{"error": "invalid request"})
+ }
+
+ if reqBody.Username == "" || reqBody.Password == "" || reqBody.Collection == "" {
+ return c.JSON(400, map[string]string{"error": "username, password, and collection are required"})
+ }
+
+ // 1️⃣ Login to PocketBase
+ loginPayload := map[string]string{
+ "identity": reqBody.Username,
+ "password": reqBody.Password,
+ }
+ data, _ := json.Marshal(loginPayload)
+
+ loginReq, _ := http.NewRequest("POST", fmt.Sprintf("%s/api/admins/auth-with-password", baseUrl), bytes.NewBuffer(data))
+ loginReq.Header.Set("Content-Type", "application/json")
+
+ loginResp, err := http.DefaultClient.Do(loginReq)
+ if err != nil {
+ return c.JSON(500, map[string]string{"error": "failed to connect to PB"})
+ }
+ defer loginResp.Body.Close()
+
+ loginBody, _ := ioutil.ReadAll(loginResp.Body)
+
+ if loginResp.StatusCode != 200 {
+ return c.JSON(401, map[string]string{"error": "invalid admin credentials", "details": string(loginBody)})
+ }
+
+ var loginRes AdminLoginResponse
+ if err := json.Unmarshal(loginBody, &loginRes); err != nil {
+ return c.JSON(500, map[string]string{"error": "failed to parse login response"})
+ }
+
+ // 2️⃣ Use token to fetch records
+ url := fmt.Sprintf("%s/api/collections/%s/records?perPage=500", baseUrl, reqBody.Collection)
+ fmt.Println("Fetching collection from URL:", url)
+
+ req, _ := http.NewRequest("GET", url, nil)
+ req.Header.Set("Authorization", loginRes.Token)
+ fmt.Println("Using token:", loginRes.Token)
+
+ resp, err := http.DefaultClient.Do(req)
+ if err != nil {
+ fmt.Println("Error fetching collection:", err)
+ return c.JSON(500, map[string]string{"error": "failed to fetch collection"})
+ }
+ defer resp.Body.Close()
+
+ body, _ := ioutil.ReadAll(resp.Body)
+ fmt.Println("HTTP Status Code:", resp.StatusCode)
+
+ // parse JSON
+ var parsed map[string]interface{}
+ if err := json.Unmarshal(body, &parsed); err != nil {
+ fmt.Println("JSON Unmarshal error:", err)
+ return c.JSON(500, map[string]string{"error": "invalid JSON from PocketBase"})
+ }
+
+ items, ok := parsed["items"].([]interface{})
+ if !ok {
+ return c.JSON(500, map[string]string{"error": "no items found"})
+ }
+
+ records := []map[string]interface{}{}
+ for _, i := range items {
+ rec := i.(map[string]interface{})
+ records = append(records, rec)
+ }
+
+ syncResult := map[string]interface{}{"synced": []string{}, "errors": []string{}}
+
+ // 3️⃣ If syncWithLive=true, sync to live PB
+ if reqBody.SyncWithLive {
+ if reqBody.LiveUsername == "" || reqBody.LivePassword == "" {
+ return c.JSON(400, map[string]string{"error": "live username and password required for sync"})
+ }
+
+ // Login to live
+ livePayload := map[string]string{
+ "identity": reqBody.LiveUsername,
+ "password": reqBody.LivePassword,
+ }
+ data, _ := json.Marshal(livePayload)
+ liveReq, _ := http.NewRequest("POST", fmt.Sprintf("%s/api/admins/auth-with-password", liveBaseUrl), bytes.NewBuffer(data))
+ liveReq.Header.Set("Content-Type", "application/json")
+ liveResp, err := http.DefaultClient.Do(liveReq)
+ fmt.Println("Live url:", liveBaseUrl)
+ fmt.Println("Live req:", liveReq)
+ if err != nil {
+ return c.JSON(500, map[string]string{"error": "failed to connect to Live PB"})
+ }
+ defer liveResp.Body.Close()
+
+ liveBody, _ := ioutil.ReadAll(liveResp.Body)
+ if liveResp.StatusCode != 200 {
+ return c.JSON(401, map[string]string{"error": "invalid live admin credentials", "details": string(liveBody)})
+ }
+
+ var liveLogin AdminLoginResponse
+ if err := json.Unmarshal(liveBody, &liveLogin); err != nil {
+ return c.JSON(500, map[string]string{"error": "failed to parse live login response"})
+ }
+
+ // Sync each record
+ for _, rec := range records {
+ id := rec["id"].(string)
+ data, _ := json.Marshal(rec)
+
+ // Try PATCH first
+ patchURL := fmt.Sprintf("%s/api/collections/%s/records/%s", liveBaseUrl, reqBody.Collection, id)
+ req, _ := http.NewRequest("PATCH", patchURL, bytes.NewBuffer(data))
+ req.Header.Set("Authorization", liveLogin.Token)
+ req.Header.Set("Content-Type", "application/json")
+
+ resp, err := http.DefaultClient.Do(req)
+ if err != nil {
+ syncResult["errors"] = append(syncResult["errors"].([]string), fmt.Sprintf("%s: %s", id, err.Error()))
+ continue
+ }
+ defer resp.Body.Close()
+
+ if resp.StatusCode == 404 {
+ // Create instead
+ postURL := fmt.Sprintf("%s/api/collections/%s/records", liveBaseUrl, reqBody.Collection)
+ req, _ := http.NewRequest("POST", postURL, bytes.NewBuffer(data))
+ req.Header.Set("Authorization", liveLogin.Token)
+ req.Header.Set("Content-Type", "application/json")
+
+ resp, err = http.DefaultClient.Do(req)
+ if err != nil {
+ syncResult["errors"] = append(syncResult["errors"].([]string), fmt.Sprintf("%s: %s", id, err.Error()))
+ continue
+ }
+ defer resp.Body.Close()
+
+ if resp.StatusCode >= 300 {
+ body, _ := ioutil.ReadAll(resp.Body)
+ syncResult["errors"] = append(syncResult["errors"].([]string), fmt.Sprintf("%s: create failed: %s", id, string(body)))
+ continue
+ }
+ }
+
+ syncResult["synced"] = append(syncResult["synced"].([]string), id)
+ }
+ }
+
+ // 4️⃣ Return dev records + optional sync result
+ return c.JSON(200, map[string]interface{}{
+ "collection": reqBody.Collection,
+ "records": records,
+ "sync": syncResult,
+ })
+ })
+
return nil
})
diff --git a/pb.zip b/pb.zip
new file mode 100644
index 0000000..6611fdb
Binary files /dev/null and b/pb.zip differ
diff --git a/pb/.env b/pb/.env
new file mode 100644
index 0000000..5f2b1eb
--- /dev/null
+++ b/pb/.env
@@ -0,0 +1,4 @@
+APP_SIGNATURE = fcsc.gov.ae.X7pL9qZm2A
+
+LIVE_BASE_URL = https://pocket.fcsc.gov.ae
+BASE_URL = https://pocket.fcsc.gov.ae
diff --git a/pb/main.go b/pb/main.go
new file mode 100755
index 0000000..d148581
--- /dev/null
+++ b/pb/main.go
@@ -0,0 +1,3069 @@
+package main
+
+import (
+ "bytes"
+ "context"
+ "crypto/rand"
+ "encoding/hex"
+ "encoding/json"
+ "encoding/xml"
+ "fmt"
+ "io/ioutil"
+ "log"
+ "math/big"
+ "net/http"
+ "net/mail"
+ "os"
+ "path/filepath"
+ "pocketbase/utils"
+ "strings"
+ "time"
+
+ firebase "firebase.google.com/go"
+ "firebase.google.com/go/messaging"
+ "github.com/joho/godotenv"
+ "github.com/labstack/echo/v5"
+ "github.com/pocketbase/dbx"
+ "github.com/pocketbase/pocketbase"
+ "github.com/pocketbase/pocketbase/apis"
+ "github.com/pocketbase/pocketbase/core"
+ "github.com/pocketbase/pocketbase/models"
+
+ // "github.com/pocketbase/pocketbase/tools/hook"
+
+ "github.com/pocketbase/pocketbase/tools/mailer"
+ "github.com/pocketbase/pocketbase/tools/types"
+ "google.golang.org/api/option"
+)
+
+var baseUrl = os.Getenv("BASE_URL")
+var liveBaseUrl = os.Getenv("LIVE_BASE_URL")
+
+type EmailConfigurationResponse struct {
+ Page int `json:"page"`
+ PerPage int `json:"perPage"`
+ TotalItems int `json:"totalItems"`
+ TotalPages int `json:"totalPages"`
+ Items []struct {
+ Type string `json:"type"`
+ Email string `json:"email"`
+ } `json:"items"`
+}
+
+type GenericData struct {
+ XMLName xml.Name `xml:"GenericData"`
+ DataSet []Obs `xml:"DataSet>Obs"`
+}
+
+type Obs struct {
+ ObsKey []ObsKey `xml:"ObsKey>Value"` // Dynamic key-value pairs
+ ObsValue ObsValue `xml:"ObsValue"`
+}
+
+type ObsKey struct {
+ ID string `xml:"id,attr"` // Attribute for 'id'
+ Value string `xml:"value,attr"` // Attribute for 'value'
+}
+
+type ObsValue struct {
+ Value string `xml:"value,attr"` // Attribute for 'value'
+}
+
+// Helper function to map ObsKey into a dictionary
+func mapObsKey(keys []ObsKey) map[string]string {
+ result := map[string]string{}
+ for _, key := range keys {
+ result[key.ID] = key.Value
+ }
+ return result
+}
+
+// Helper function to clean XML namespace prefixes
+func removeNamespace(xmlBytes []byte) string {
+ return strings.ReplaceAll(string(xmlBytes), "generic:", "")
+}
+
+// Function to fetch XML from an API and convert it to JSON
+func fetchAndConvertXMLToJSON(apiURL string, outputDir string, fileName string, tableName string, id string) ([]map[string]interface{}, error) {
+ // Call the API and get the XML response
+ resp, err := http.Get(apiURL)
+ if err != nil {
+ return nil, err
+ }
+ defer resp.Body.Close()
+
+ // Read the response body
+ body, err := ioutil.ReadAll(resp.Body)
+ if err != nil {
+ return nil, err
+ }
+ // fmt.Println("Response url:", apiURL)
+ // fmt.Println("Response status:", resp.Status)
+ // fmt.Println("Response body:", string(body))
+
+ // Clean the XML by removing namespace prefixes
+ cleanXML := []byte(removeNamespace(body))
+
+ // Parse the cleaned XML data
+ var data GenericData
+ err = xml.Unmarshal(cleanXML, &data)
+ if err != nil {
+ return nil, err
+ }
+
+ // Transform the data for JSON output
+ response := []map[string]interface{}{}
+ for _, obs := range data.DataSet {
+ obsMap := map[string]interface{}{
+ "ObsKey": mapObsKey(obs.ObsKey),
+ "ObsValue": obs.ObsValue,
+ }
+ response = append(response, obsMap)
+ }
+
+ // Convert the response to JSON
+ jsonData, err := json.MarshalIndent(response, "", " ")
+ if err != nil {
+ return nil, err
+ }
+
+ // Save the JSON data to a file if required
+ // Ensure the folder exists
+ if err := os.MkdirAll(outputDir, os.ModePerm); err != nil {
+ return nil, err
+ }
+
+ // Save the file
+ file := fmt.Sprintf("%s/%s.json", outputDir, fileName)
+ if err := ioutil.WriteFile(file, jsonData, 0644); err != nil {
+ return nil, err
+ }
+
+ // Find the charts record
+ record, err := app.Dao().FindRecordById(tableName, id)
+ if err != nil {
+ // return c.JSON(500, map[string]interface{}{"code": 500,"message": "Error finding user.",})
+ }
+ record.Set("file_status", true)
+ if err := app.Dao().SaveRecord(record); err != nil {
+ // return c.JSON(500, map[string]interface{}{"code": 500,"message": "Failed to verify user.",})
+ }
+
+ return response, nil
+}
+
+// Function to read JSON data from a file
+func readJSONFromFile(folderName, fileName string) ([]map[string]interface{}, error) {
+ // Construct the file path dynamically using the folder name
+ filePath := fmt.Sprintf("%s/%s.json", folderName, fileName)
+
+ // Read and return the JSON content from the file
+ fileContent, err := ioutil.ReadFile(filePath)
+ if err != nil {
+ return nil, fmt.Errorf("failed to read file '%s': %w", filePath, err)
+ }
+
+ // Parse the JSON content from the file
+ var jsonResponse []map[string]interface{}
+ if err := json.Unmarshal(fileContent, &jsonResponse); err != nil {
+ return nil, fmt.Errorf("failed to parse JSON from file '%s': %w", filePath, err)
+ }
+
+ return jsonResponse, nil
+}
+
+type ResponseItem struct {
+ ObsKey map[string]string `json:"ObsKey"`
+ ObsValue map[string]string `json:"ObsValue"`
+}
+
+type FilterJsonData struct {
+ Order int `json:"order"`
+ En string `json:"en"`
+ Ar string `json:"ar"`
+}
+
+type FilterGroup struct {
+ FilterKey string `json:"filter_key"`
+ FilterData []interface{} `json:"filter_data"`
+ FilterTextAndOrder FilterJsonData `json:"filter_text_and_order"`
+}
+
+func generateFilters(responseRaw []map[string]interface{}, filterKeys []string, filterJsonData map[string]FilterJsonData) ([]FilterGroup, error) {
+ // Transform responseRaw to []ResponseItem
+ var response []ResponseItem
+ responseBytes, err := json.Marshal(responseRaw) // Marshal raw data to JSON
+ if err != nil {
+ log.Printf("Failed to marshal raw response: %v", err)
+ return nil, err
+ }
+
+ if err := json.Unmarshal(responseBytes, &response); err != nil { // Unmarshal to []ResponseItem
+ log.Printf("Failed to unmarshal response: %v", err)
+ return nil, err
+ }
+
+ // Create a map to hold unique filter data
+ filterMap := make(map[string]map[string]struct{})
+ for _, key := range filterKeys {
+ filterMap[key] = make(map[string]struct{})
+ }
+
+ // Populate filter data dynamically
+ for _, item := range response {
+ for _, key := range filterKeys {
+ if value, exists := item.ObsKey[key]; exists {
+ filterMap[key][value] = struct{}{}
+ }
+ }
+ }
+
+ // Convert filter map to the desired structure
+ var filters []FilterGroup
+ for key, values := range filterMap {
+ filterData := make([]interface{}, 0, len(values))
+ for value := range values {
+ filterData = append(filterData, value)
+ }
+
+ if key == "REF_AREA" {
+ filterData = []interface{}{"AE-AZ", "AE-DU", "AE-SH", "AE-AJ", "AE-UQ", "AE-RK", "AE-FJ"}
+ }
+ filters = append(filters, FilterGroup{
+ FilterKey: key,
+ FilterData: filterData,
+ FilterTextAndOrder: filterJsonData[key],
+ })
+ }
+
+ return filters, nil
+}
+
+// Function to fetch filter data of dataset
+func fetchfilterJSON(kpi string) ([]FilterGroup, error) {
+
+ // Define struct for the result
+ var dataSetFilter struct {
+ Id string `db:"id" json:"id"`
+ FullDataUrl string `db:"full_data_url" json:"full_data_url"`
+ FilterKeys string `db:"filter_keys" json:"filter_keys"`
+ FileStatus bool `db:"file_status" json:"file_status"`
+ DataSet string `db:"dataset" json:"dataset"`
+ Kpi string `db:"kpi" json:"kpi"`
+ ExclusionFiltersJSON string `db:"exclusion_filters_array" json:"exclusion_filters_array"`
+ FilterJson string `db:"filter_json" json:"filter_json"`
+ }
+
+ // Query to get one row from the data_set_filter table
+ err := app.DB().
+ Select("id", "full_data_url", "filter_keys", "file_status", "dataset", "kpi", "filter_json", "exclusion_filters_array").
+ From("data_set_filter").
+ Where(dbx.HashExp{"kpi": kpi}).
+ One(&dataSetFilter)
+
+ if err != nil {
+ log.Printf("Failed to fetch data_set_filter data: %v", err)
+ return nil, err
+ }
+
+ // Use a map to store the dynamic JSON keys
+ var filterJson map[string]FilterJsonData
+
+ // Parse the JSON
+ err = json.Unmarshal([]byte(dataSetFilter.FilterJson), &filterJson)
+ if err != nil {
+ log.Fatalf("Error parsing JSON: %v", err)
+ }
+
+ // Fetch and convert XML to JSON if file is not saved
+ if !dataSetFilter.FileStatus { // Check if FileStatus is false
+ _, err := fetchAndConvertXMLToJSON(dataSetFilter.FullDataUrl, "filter_files", dataSetFilter.Kpi, "data_set_filter", dataSetFilter.Id)
+ if err != nil {
+ log.Printf("Failed to process URL '%s': %v", dataSetFilter.FullDataUrl, err)
+ return nil, err
+ }
+ }
+
+ // Read the JSON data from the file
+ response, err := readJSONFromFile("filter_files", dataSetFilter.Kpi)
+ if err != nil {
+ log.Printf("Failed to read JSON for Kpi filter '%s': %v", dataSetFilter.Kpi, err)
+ return nil, err
+ }
+
+ // Parse the filter keys
+ filterKeys := strings.Split(dataSetFilter.FilterKeys, ",")
+
+ // Generate filters
+ filters, err := generateFilters(response, filterKeys, filterJson)
+ if err != nil {
+ log.Printf("Failed to generate filters: %v", err)
+ return nil, err
+ }
+
+ // Parse exclusion filters JSON if it's not empty
+ var exclusionFilters []utils.FilterGroup
+ if dataSetFilter.ExclusionFiltersJSON != "" {
+ err = json.Unmarshal([]byte(dataSetFilter.ExclusionFiltersJSON), &exclusionFilters)
+ if err != nil {
+ log.Printf("Failed to parse exclusion filters JSON: %v", err)
+ return nil, err
+ }
+ // log.Printf("Parsed Exclusion Filters: %+v", exclusionFilters)
+ }
+
+ // Convert filters from []FilterGroup to []utils.FilterGroup manually
+ var utilsFilters []utils.FilterGroup
+ for _, f := range filters {
+ utilsFilters = append(utilsFilters, convertToUtilsFilterGroup(f))
+ }
+
+ // Apply the filter removal logic only if exclusionFilters has values
+ if len(exclusionFilters) > 0 {
+ filteredResult := utils.RemoveExcludedFilters(utilsFilters, exclusionFilters)
+
+ // Convert back to []FilterGroup before returning
+ var finalFilters []FilterGroup
+ for _, f := range filteredResult {
+ finalFilters = append(finalFilters, convertToFilterGroup(f))
+ }
+
+ return finalFilters, nil
+ }
+
+ // If no exclusion filters, return the original filters
+ return filters, nil
+
+}
+
+// Convert FilterGroup to utils.FilterGroup
+func convertToUtilsFilterGroup(f FilterGroup) utils.FilterGroup {
+ return utils.FilterGroup{
+ FilterKey: f.FilterKey,
+ FilterData: f.FilterData,
+ FilterTextAndOrder: utils.FilterJsonData{
+ Order: f.FilterTextAndOrder.Order,
+ En: f.FilterTextAndOrder.En,
+ Ar: f.FilterTextAndOrder.Ar,
+ },
+ }
+}
+
+// Convert utils.FilterGroup to FilterGroup
+func convertToFilterGroup(f utils.FilterGroup) FilterGroup {
+ return FilterGroup{
+ FilterKey: f.FilterKey,
+ FilterData: f.FilterData,
+ FilterTextAndOrder: FilterJsonData{
+ Order: f.FilterTextAndOrder.Order,
+ En: f.FilterTextAndOrder.En,
+ Ar: f.FilterTextAndOrder.Ar,
+ },
+ }
+}
+
+// LanguageSource represents the source language data structure
+type LanguageSource struct {
+ Dataset string `json:"dataset"`
+ Key string `json:"key"`
+ Value string `json:"value"`
+ ValueEn string `json:"value_en"`
+ ValueAr string `json:"value_ar"`
+}
+
+func TranslateFilters(app *pocketbase.PocketBase, dataset string, filterGroups []FilterGroup, langKey string) ([]FilterGroup, error) {
+ // Fetch source data from the PocketBase collection
+ param := dbx.NewExp("dataset = {:dataset}", dbx.Params{"dataset": dataset})
+ records, err := app.Dao().FindRecordsByExpr("charts_variables", param)
+ if err != nil {
+ return nil, fmt.Errorf("failed to fetch source data: %w", err)
+ }
+
+ // Parse the source data into a slice of LanguageSource
+ var sourceData []LanguageSource
+ for _, record := range records {
+ source := LanguageSource{
+ Dataset: record.GetString("dataset"),
+ Key: record.GetString("key"),
+ Value: record.GetString("value"),
+ ValueEn: record.GetString("value_en"),
+ ValueAr: record.GetString("value_ar"),
+ }
+ sourceData = append(sourceData, source)
+ }
+
+ // Translate the filter data
+ for i, filter := range filterGroups {
+
+ // Create a map for quick lookup of translations
+ translationMap := make(map[string]string)
+ for _, source := range sourceData {
+ var value string
+ switch langKey {
+ case "value_en":
+ value = source.ValueEn
+ case "value_ar":
+ value = source.ValueAr
+ default:
+ continue
+ }
+ if source.Key == filter.FilterKey {
+ translationMap[source.Value] = value
+ }
+
+ }
+
+ if filter.FilterKey == "TIME_PERIOD" {
+ // Skip translation for TIME_PERIOD
+ continue
+ }
+ for j, v := range filter.FilterData {
+ // Type assertion for interface{} to string
+ value, ok := v.(string)
+ if !ok {
+ return nil, fmt.Errorf("unexpected type for filter data: %v", v)
+ }
+
+ // Translate the value if it exists in the map
+ if translatedValue, exists := translationMap[value]; exists {
+ filterGroups[i].FilterData[j] = translatedValue
+ }
+ }
+ }
+
+ return filterGroups, nil
+}
+
+// Generic function to filter JSON data dynamically based on key-value pairs
+func filterDynamicChartData(chartData []map[string]interface{}, keyToFilter, valueToExclude string) []map[string]interface{} {
+ var filteredData []map[string]interface{}
+
+ for _, item := range chartData {
+ obsKey, ok := item["ObsKey"].(map[string]interface{})
+ if !ok {
+ // Skip items without "ObsKey" or malformed data
+ continue
+ }
+
+ // Check if the key exists and matches the value to exclude
+ if obsKey[keyToFilter] == valueToExclude {
+ continue
+ }
+
+ // Add item to filtered data
+ filteredData = append(filteredData, item)
+ }
+
+ return filteredData
+}
+
+func generateToken() string {
+ bytes := make([]byte, 32)
+ _, err := rand.Read(bytes)
+ if err != nil {
+ log.Fatal(err)
+ }
+ return hex.EncodeToString(bytes)
+}
+
+var app *pocketbase.PocketBase
+
+func main() {
+
+ // load .env file
+ err := godotenv.Load()
+ if err != nil {
+ log.Println("No .env file found")
+ }
+
+ var baseUrl = os.Getenv("BASE_URL")
+ var liveBaseUrl = os.Getenv("LIVE_BASE_URL")
+
+ app = pocketbase.New()
+
+ app.OnBeforeServe().Add(func(e *core.ServeEvent) error {
+ // Serve privacy policy static page
+ e.Router.GET("/privacy/*", apis.StaticDirectoryHandler(os.DirFS("./pb_public/privacy"), false))
+
+ // API endpoint: returns JSON policy
+ e.Router.GET("/api/privacy", func(c echo.Context) error {
+ policy := map[string]string{
+ "title": "Privacy Policy",
+ "content": "We respect your privacy. Data is collected only for authentication and secure service delivery.",
+ }
+ return c.JSON(http.StatusOK, policy)
+ })
+
+ return nil
+ })
+
+ // Hook to send notifications when a new record is created
+ app.OnRecordAfterCreateRequest("notification").Add(func(e *core.RecordCreateEvent) error {
+ title_en := e.Record.GetString("title_en")
+ message_en := e.Record.GetString("message_en")
+ title_ar := e.Record.GetString("title_ar")
+ message_ar := e.Record.GetString("message_ar")
+ notificationID := e.Record.GetString("id") // Get the new notification ID
+
+ // Initialize Firebase
+ opt := option.WithCredentialsFile("firebase-adminsdk.json")
+ firebaseApp, err := firebase.NewApp(context.Background(), nil, opt)
+ if err != nil {
+ log.Fatalf("Error initializing Firebase: %v", err)
+ }
+
+ fcmClient, err := firebaseApp.Messaging(context.Background())
+ if err != nil {
+ log.Fatalf("Error getting FCM client: %v", err)
+ }
+
+ // Fetch users with valid device tokens
+ users, err := app.Dao().FindRecordsByExpr("users", nil) // Adjust collection name if different
+ if err != nil {
+ return err
+ }
+
+ for _, user := range users {
+ token := user.GetString("device_token")
+ language := user.GetString("language")
+ if token != "" {
+ // tokens = append(tokens, token)
+ var message *messaging.Message
+ if language == "en" {
+ message = &messaging.Message{
+ Token: token,
+ Notification: &messaging.Notification{
+ Title: title_en,
+ Body: message_en,
+ },
+ }
+ } else {
+ message = &messaging.Message{
+ Token: token,
+ Notification: &messaging.Notification{
+ Title: title_ar,
+ Body: message_ar,
+ },
+ }
+
+ }
+
+ response, err := fcmClient.Send(context.Background(), message)
+ if err != nil {
+
+ if err.Error() == "messaging/registration-token-not-registered" {
+ log.Println("⚠️ Device token is invalid. Remove it from the database.")
+ // Here you should remove the token from your database
+ } else {
+ log.Printf("Error sending message: %v", err)
+ }
+ } else {
+ fmt.Printf("✅ Successfully sent message: %s\n", response)
+
+ // Update the pushed_notification field
+ var pushedNotifications []string
+
+ // Get existing pushed_notification JSON field
+ pushedNotificationsJSON := user.GetString("pushed_notification")
+ if pushedNotificationsJSON != "" {
+ err := json.Unmarshal([]byte(pushedNotificationsJSON), &pushedNotifications)
+ if err != nil {
+ log.Printf("⚠️ Error parsing pushed_notification for user %s: %v", user.GetString("id"), err)
+ continue
+ }
+ }
+
+ // Append the new notification ID if not already present
+ alreadyExists := false
+ for _, existingID := range pushedNotifications {
+ if existingID == notificationID {
+ alreadyExists = true
+ break
+ }
+ }
+ if !alreadyExists {
+ pushedNotifications = append(pushedNotifications, notificationID)
+ }
+
+ // Convert back to JSON
+ updatedPushedNotifications, err := json.Marshal(pushedNotifications)
+ if err != nil {
+ log.Printf("⚠️ Error marshalling pushed_notification JSON: %v", err)
+ continue
+ }
+
+ // Update the user record in the database
+ user.Set("pushed_notification", string(updatedPushedNotifications))
+ if err := app.Dao().SaveRecord(user); err != nil {
+ log.Printf("❌ Error updating pushed_notification for user %s: %v", user.GetString("id"), err)
+ } else {
+ fmt.Printf("✅ Updated pushed_notification for user %s\n", user.GetString("id"))
+ }
+ }
+
+ }
+ }
+
+ return nil
+ })
+
+ app.OnBeforeServe().Add(func(e *core.ServeEvent) error {
+
+ e.Router.GET("/api/getImagePath", func(c echo.Context) error {
+
+ fileName := c.QueryParam("file")
+ if fileName == "" {
+ return c.JSON(http.StatusBadRequest, map[string]string{
+ "error": "missing file parameter",
+ })
+ }
+
+ // Static files folder
+ staticPath := "./pb_public"
+ fullPath := filepath.Join(staticPath, fileName)
+
+ // Check if file exists
+ if _, err := os.Stat(fullPath); os.IsNotExist(err) {
+ return c.JSON(http.StatusNotFound, map[string]string{
+ "error": "file not found",
+ })
+ }
+
+ // Serve the file directly (browser will show the image)
+ return c.File(fullPath)
+ })
+
+ // e.Router.Static("/static", "./pb_public")
+
+ e.Router.GET("/pw/auth/confirm-password-reset/:token", func(c echo.Context) error {
+ return c.File("pb_public/confirm_password_reset.html")
+ })
+
+ e.Router.GET("/api/auth/request-password-reset", func(c echo.Context) error {
+
+ apiKey := c.Request().Header.Get("APP_SIGNATURE")
+ if apiKey != os.Getenv("APP_SIGNATURE") {
+ return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
+ }
+
+ email := c.QueryParam("email")
+ if email == "" {
+ return c.JSON(http.StatusBadRequest, map[string]string{"error": "Email is required"})
+ }
+
+ // Find user by email
+ user, err := app.Dao().FindFirstRecordByData("users", "email", email)
+ if err != nil {
+ return c.JSON(http.StatusNotFound, map[string]string{"error": "User not found"})
+ }
+
+ //check the user type
+ isOAuthLogin := user.GetString("is_oauth_login")
+ if isOAuthLogin != "0" {
+ return c.JSON(http.StatusOK, map[string]string{"status": "failed", "message": "Password reset is not available for accounts signed in with Apple or Google."})
+ }
+
+ name := user.GetString("name")
+ // Generate token
+ token := generateToken()
+ expiration := time.Now().Add(30 * time.Minute).UTC()
+
+ // Store token in the database
+ user.Set("pw_reset_token", token)
+ user.Set("pw_reset_token_expiry", expiration)
+
+ if err := app.Dao().SaveRecord(user); err != nil {
+ return c.JSON(http.StatusInternalServerError, map[string]string{"error": "Failed to update user record"})
+ }
+
+ // Send email
+ subject := "Reset your FCSC password"
+ // resetURL := fmt.Sprintf("%s/api/auth/reset-password?token=%s", baseUrl, token)
+
+ resetURL := fmt.Sprintf("https://fcscapp.onelink.me/forgot-password/%s", email)
+
+ body := fmt.Sprintf(`
+
+
+
+
+
+ Registration Update – UAE Stats App
+
+
+
+
+
+
+
+
+
+ إعادة تعيين كلمة المرور - تطبيق إحصاءات الإمارات العربية المتحدة
+ Reset your FCSC password
+
+ |
+
+
+
+
+
+
+ Hello,
+ Click on the link below to reset your password.
+
+ Reset Password
+
+ If you didn't ask to reset your password, you can ignore this email.
+ |
+
+ مرحبًا،
+ يُرجى الضغط على الرابط أدناه لإعادة تعيين كلمة المرور الخاصة بك:
+ إعادة تعيين كلمة المرور
+
+ إذا لم تطلب إعادة تعيين كلمة المرور، يمكنك تجاهل هذا البريد الإلكتروني.
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+
+ تنبيه: هذه الرسالة الإلكترونية و أيٌ من مرفقاتها قد تحتوي على معلومات سرية وهامة موجهه للشخص/الأشخاص المعنيين وعليه يرجى من المتلقي في حال تلقي الرسالة الإلكترونية عن طريق الخطأ ولم يكن المعني بها، إخطار المرسل وحذفها من بريده الإلكتروني و كذلك إتلاف أي نسخ مطبوعة عنها حيث أنه يحظر عليه قراءة ونسخ ونشر أو توزيع أو استخدام هذه الرسالة إلكترونية و أيٌ من مرفقاتها بأي شكل من الأشكال
+ |
+
+
+
+ Disclaimer: The information contained in and transmitted with this e-mail message is PRIVILEGED AND/OR CONFIDENTIAL.If you are not the intended recipient, or have received the message by error, please notify the sender via E-Mail or over the telephone and delete this e-mail. You are not authorized to read, copy, disseminate, distribute or use this E-Mail or any of its attachments in any way.
+ |
+
+
+ |
+
+
+
+ `, resetURL, resetURL)
+
+ // Create the email message
+ message := &mailer.Message{
+ From: mail.Address{
+ Name: "FCSC",
+ Address: app.Settings().Meta.SenderAddress,
+ },
+ To: []mail.Address{
+ {
+ Name: name,
+ Address: email,
+ },
+ },
+ Subject: subject,
+ HTML: body,
+ }
+
+ // Send the email
+ err = app.NewMailClient().Send(message)
+ if err != nil {
+ log.Printf("Failed to send verification email to user: %v", err)
+ return err
+ }
+
+ return c.JSON(http.StatusOK, map[string]string{"status": "success", "message": "Reset link sent to your email"})
+ })
+
+ e.Router.GET("/api/auth/reset-password", func(c echo.Context) error {
+
+ apiKey := c.Request().Header.Get("APP_SIGNATURE")
+ if apiKey != os.Getenv("APP_SIGNATURE") {
+ return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
+ }
+
+ token := c.QueryParam("token")
+ if token == "" {
+ return c.JSON(http.StatusBadRequest, map[string]string{"error": "Token is required"})
+ }
+
+ // Find user with the token
+ user, err := app.Dao().FindFirstRecordByData("users", "pw_reset_token", token)
+ if err != nil {
+ return c.JSON(http.StatusUnauthorized, map[string]string{"error": "Invalid token"})
+ }
+
+ // Convert PocketBase `types.DateTime` to `time.Time`
+ expiryTime := user.GetDateTime("pw_reset_token_expiry").Time()
+ log.Printf("expiryTime : '%v'", expiryTime)
+ log.Printf("time.Now : '%v'", time.Now().UTC())
+ if expiryTime.Before(time.Now().UTC()) {
+ return c.File("pb_public/token_expired.html")
+ // return c.JSON(http.StatusUnauthorized, map[string]string{"error": "Token expired"})
+ }
+
+ // return c.JSON(http.StatusOK, map[string]string{"message": "Token is valid"})
+
+ // Serve the reset page
+ return c.File("pb_public/confirm_password_reset.html")
+ })
+
+ e.Router.GET("/api/login_success", func(c echo.Context) error {
+
+ apiKey := c.Request().Header.Get("APP_SIGNATURE")
+ if apiKey != os.Getenv("APP_SIGNATURE") {
+ return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
+ }
+
+ userID := c.QueryParam("id")
+ if userID == "" {
+ return c.JSON(http.StatusBadRequest, map[string]string{"error": "User ID is required"})
+ }
+
+ // Find user by ID
+ record, err := app.Dao().FindRecordById("users", userID)
+ if err != nil {
+ log.Printf("User not found: %v", err)
+ return c.JSON(http.StatusNotFound, map[string]string{"error": "User not found"})
+ }
+
+ // Get current login count and convert it properly
+ var loginCount int
+ if count, ok := record.Get("login_count").(float64); ok {
+ loginCount = int(count) // Convert float64 to int
+ } else {
+ loginCount = 0 // Default if not set
+ }
+
+ // Increment login count
+ loginCount++
+ record.Set("login_count", loginCount)
+
+ // Save the updated record
+ if err := app.Dao().SaveRecord(record); err != nil {
+ log.Printf("Failed to update login count: %v", err)
+ return c.JSON(http.StatusInternalServerError, map[string]string{"error": "Failed to update login count"})
+ }
+
+ log.Printf("User %s login count updated to %d", userID, loginCount)
+ return c.JSON(http.StatusOK, map[string]interface{}{
+ "message": "Success",
+ "login_count": loginCount,
+ })
+
+ })
+
+ e.Router.GET("/api/getNotification", func(c echo.Context) error {
+
+ apiKey := c.Request().Header.Get("APP_SIGNATURE")
+ if apiKey != os.Getenv("APP_SIGNATURE") {
+ return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
+ }
+
+ language := c.QueryParam("language")
+ if language == "" {
+ return c.JSON(http.StatusBadRequest, map[string]string{"error": "language is required"})
+ }
+
+ categoryColumn := "category_" + language
+ titleColumn := "title_" + language
+ messageColumn := "message_" + language
+
+ id := c.QueryParam("id")
+
+ if id != "" {
+ // Define a single notification struct, not a slice
+ var notification struct {
+ Id string `db:"id" json:"id"`
+ Category string `db:"category" json:"category"`
+ Title string `db:"title" json:"title"`
+ Message string `db:"message" json:"message"`
+ Created string `db:"created" json:"created"`
+ }
+
+ query := `SELECT id, created, ` + categoryColumn + ` AS category, ` + titleColumn + ` AS title, ` + messageColumn + ` AS message FROM notification WHERE id = {:id}`
+ err := app.DB().NewQuery(query).Bind(dbx.Params{"id": id}).One(¬ification)
+
+ if err != nil {
+ log.Printf("notification not found: %v", err)
+ return c.JSON(http.StatusNotFound, map[string]string{"error": "notification not found"})
+ }
+
+ return c.JSON(http.StatusOK, map[string]interface{}{
+ "message": "Success",
+ "data": notification,
+ })
+ }
+
+ // Fetch all notifications if no ID is provided
+ var notifications []struct {
+ Id string `db:"id" json:"id"`
+ Category string `db:"category" json:"category"`
+ Title string `db:"title" json:"title"`
+ Message string `db:"message" json:"message"`
+ Created string `db:"created" json:"created"`
+ }
+
+ query := `SELECT id, created, ` + categoryColumn + ` AS category, ` + titleColumn + ` AS title, ` + messageColumn + ` AS message FROM notification`
+ err := app.DB().NewQuery(query).All(¬ifications)
+
+ if err != nil {
+ log.Printf("notifications not found: %v", err)
+ return c.JSON(http.StatusNotFound, map[string]string{"error": "notifications not found"})
+ }
+
+ return c.JSON(http.StatusOK, map[string]interface{}{
+ "message": "Success",
+ "data": notifications,
+ })
+ })
+
+ e.Router.GET("/api/removeNotification", func(c echo.Context) error {
+
+ apiKey := c.Request().Header.Get("APP_SIGNATURE")
+ if apiKey != os.Getenv("APP_SIGNATURE") {
+ return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
+ }
+
+ userID := c.QueryParam("user_id")
+ notificationID := c.QueryParam("notification_id")
+
+ if userID == "" || notificationID == "" {
+ return c.JSON(http.StatusBadRequest, map[string]string{"error": "user_id and notification_id are required"})
+ }
+
+ // Fetch the user by ID
+ user, err := app.Dao().FindRecordById("users", userID)
+ if err != nil {
+ return c.JSON(http.StatusNotFound, map[string]string{"error": "user not found"})
+ }
+
+ var pushedNotifications []string
+
+ // Get existing pushed_notification JSON field
+ pushedNotificationsJSON := user.GetString("pushed_notification")
+ if pushedNotificationsJSON != "" {
+ err := json.Unmarshal([]byte(pushedNotificationsJSON), &pushedNotifications)
+ if err != nil {
+ log.Printf("⚠️ Error parsing pushed_notification for user %s: %v", userID, err)
+ return c.JSON(http.StatusInternalServerError, map[string]string{"error": "failed to parse pushed_notification"})
+ }
+ }
+
+ // Remove the notification ID if it exists
+ updatedNotifications := []string{}
+ for _, existingID := range pushedNotifications {
+ if existingID != notificationID {
+ updatedNotifications = append(updatedNotifications, existingID)
+ }
+ }
+
+ // Convert updated array back to JSON
+ updatedJSON, err := json.Marshal(updatedNotifications)
+ if err != nil {
+ return c.JSON(http.StatusInternalServerError, map[string]string{"error": "failed to update pushed_notification"})
+ }
+
+ // Update the user record with the new pushed_notification field
+ user.Set("pushed_notification", string(updatedJSON))
+ if err := app.Dao().SaveRecord(user); err != nil {
+ return c.JSON(http.StatusInternalServerError, map[string]string{"error": "failed to save updated notifications"})
+ }
+
+ return c.JSON(http.StatusOK, map[string]interface{}{
+ "message": "success",
+ "pushed_notification": updatedNotifications,
+ })
+ })
+
+ e.Router.GET("/api/pushNotification", func(c echo.Context) error {
+
+ apiKey := c.Request().Header.Get("APP_SIGNATURE")
+ if apiKey != os.Getenv("APP_SIGNATURE") {
+ return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
+ }
+
+ // type Request struct {
+ // DeviceToken string `json:"device_token"`
+ // }
+
+ // var requestData Request
+ // log.Printf("🔥 requestData: '%v'", requestData)
+ // // Validate required fields
+ // if requestData.DeviceToken == "" {
+ // return c.JSON(http.StatusBadRequest, map[string]string{"error": "DeviceToken is required"})
+ // }
+
+ // DeviceToken := requestData.DeviceToken
+
+ DeviceToken := c.QueryParam("device_token")
+
+ // Load Firebase credentials JSON file
+ opt := option.WithCredentialsFile("firebase-adminsdk.json")
+ app, err := firebase.NewApp(context.Background(), nil, opt)
+ if err != nil {
+ log.Printf("🔥 Error initializing Firebase App: '%v'", err)
+ }
+
+ client, err := app.Messaging(context.Background())
+ if err != nil {
+ log.Printf("Error getting Messaging client: %v", err)
+ }
+
+ message := &messaging.Message{
+ Token: DeviceToken,
+ Notification: &messaging.Notification{
+ Title: "Hello!",
+ Body: "This is a test push notification By Gowtham.",
+ },
+ }
+
+ response, err := client.Send(context.Background(), message)
+ if err != nil {
+
+ if err.Error() == "messaging/registration-token-not-registered" {
+ log.Println("⚠️ Device token is invalid. Remove it from the database.")
+ // Here you should remove the token from your database
+ } else {
+ log.Printf("Error sending message: %v", err)
+ }
+ } else {
+ fmt.Printf("✅ Successfully sent message: %s\n", response)
+ }
+
+ return c.JSON(http.StatusOK, map[string]string{"status": "success"})
+ })
+
+ e.Router.POST("/api/getDataSet", func(c echo.Context) error {
+
+ apiKey := c.Request().Header.Get("APP_SIGNATURE")
+ if apiKey != os.Getenv("APP_SIGNATURE") {
+ return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
+ }
+
+ type RequestData struct {
+ Dataset string `json:"dataset"`
+ KPI string `json:"kpi"`
+ Language string `json:"language"`
+ ColorMode string `json:"color_mode"`
+ FilterData []utils.Filter `json:"filter_data"`
+ }
+
+ var requestData RequestData
+
+ // Bind JSON request to struct
+ if err := c.Bind(&requestData); err != nil {
+ return c.JSON(http.StatusBadRequest, map[string]string{"error": "Invalid request format"})
+ }
+
+ // Validate required fields
+ if requestData.Dataset == "" {
+ return c.JSON(http.StatusBadRequest, map[string]string{"error": "dataset is required"})
+ }
+
+ dataset := requestData.Dataset
+ language := requestData.Language
+ langKey := "value_" + language
+ colorMode := requestData.ColorMode
+
+ // Fetch all matching records from charts table
+ param := dbx.NewExp("dataset = {:dataset}", dbx.Params{"dataset": dataset})
+ records, err := app.Dao().FindRecordsByExpr("charts", param)
+ if err != nil {
+ log.Printf("Failed to fetch records for dataset '%s': %v", dataset, err)
+ return c.JSON(http.StatusInternalServerError, map[string]string{"error": "Failed to fetch records"})
+ }
+ if len(records) == 0 {
+ return c.JSON(http.StatusNotFound, map[string]string{"error": "No records found for the given dataset"})
+ }
+
+ // Fetch all matching records from charts variables table
+ languageSource, err := app.Dao().FindRecordsByExpr("charts_variables", param)
+ if err != nil {
+ log.Printf("Failed to fetch language source: %v", err)
+ }
+ // Convert languageSource to []map[string]interface{}
+ languageSourceConverted := []map[string]interface{}{}
+ for _, record := range languageSource {
+ languageSourceConverted = append(languageSourceConverted, record.SchemaData())
+ }
+
+ //construct chart and card data based of configuration/calculation/default
+ var aggregatedResponse []map[string]interface{}
+ for _, record := range records {
+
+ // Extract the URL for each record
+ apiURL := record.GetString("url")
+ file_name := record.GetString("kpi_file_name")
+ if apiURL == "" {
+ log.Printf("No URL for record '%v'", record)
+ continue // Skip records with no URL
+ }
+
+ // Fetch and convert XML to JSON
+ saveToFile := record.GetBool("file_status")
+ chartId := record.GetString("id")
+ if !saveToFile { // Check if saveToFile is false
+ _, err := fetchAndConvertXMLToJSON(apiURL, "kpi_files", file_name, "charts", chartId)
+ if err != nil {
+ log.Printf("Failed to process URL '%s': %v", apiURL, err)
+ continue // Skip this record and proceed with others
+ }
+ }
+
+ // Read the JSON data from the file
+ chartData, err := readJSONFromFile("kpi_files", file_name)
+ if err != nil {
+ log.Printf("Failed to read JSON for KPI '%s': %v", file_name, err)
+ }
+
+ // unset key and value if value to be excluded
+ keyToFilter := record.GetString("unset_key")
+ valueToExclude := record.GetString("unset_value")
+ if keyToFilter == "" || valueToExclude == "" {
+ // fmt.Println("unset_key or unset_value is empty. Skipping processing.")
+ } else {
+ // Filter the data dynamically and update chartData
+ chartData = filterDynamicChartData(chartData, keyToFilter, valueToExclude)
+ }
+
+ //logo url generating
+ var logoURL string
+ cardLogo := record.GetString("card_logo")
+ if cardLogo == "" {
+ logoURL = ""
+ } else {
+ logoURL = fmt.Sprintf("%s/api/files/charts/%s/%s",
+ baseUrl,
+ record.GetString("id"),
+ cardLogo,
+ )
+ }
+
+ cResRaw := utils.TranslateChartData(chartData, languageSourceConverted, langKey)
+
+ //responce data structure
+ chartHeadingKey := "chart_heading_" + language
+ chartSubHeadingKey := "chart_sub_heading_" + language
+ tabHeadingKey := "tab_heading_" + language
+ // Correct conditional assignment for "response"
+ recordResult := map[string]interface{}{
+ "url": apiURL,
+ "dataset": record.GetString("dataset"),
+ "main_id": record.GetString("main_id"),
+ "sub_id": record.GetString("sub_id"),
+ "kpi": record.GetString("kpi"),
+ "is_chart": record.GetString("is_chart"),
+ "chart_type": record.GetString("chart_type"),
+ "group_by": record.GetString("group_by"),
+ "chart_heading": record.GetString(chartHeadingKey),
+ "chart_sub_heading": record.GetString(chartSubHeadingKey),
+ "tab_heading": record.GetString(tabHeadingKey),
+ "unset_value": record.Get("unset_value"),
+ "card_logo": logoURL,
+ "order_id": record.Get("order_id"),
+ "card_type_json": record.Get("card_type_json"),
+ "tab_order": record.GetString("tab_order"),
+ "chart_type_json": record.Get("chart_type_json"),
+ "card_full_length": record.Get("card_full_length"),
+ "chart_bar_color": record.Get("chart_bar_color"),
+ "chart_height": record.Get("chart_height"),
+ "chart_label_width": record.Get("chart_label_width"),
+ }
+
+ var cRes []utils.Observation
+ cResJSON, err := json.Marshal(cResRaw)
+ if err != nil {
+ fmt.Println("Error encoding chart data:", err)
+ }
+ err = json.Unmarshal(cResJSON, &cRes)
+ if err != nil {
+ fmt.Println("Error decoding chart data:", err)
+ }
+
+ if requestData.KPI == record.GetString("kpi") && len(requestData.FilterData) > 0 {
+
+ filteredData, err := utils.FilterByMultipleKeys(cRes, requestData.FilterData)
+ if err != nil {
+ log.Fatal(err)
+ }
+ if 0 < len(filteredData) {
+ cRes = filteredData
+ } else {
+ defaultYearsFilteredData, err := utils.DefaultYearFilter(cRes, record.GetString("default_latest_year_count"))
+ if err != nil {
+ fmt.Println("Error processing defaultYearsFilteredData:", err)
+ }
+ cRes = defaultYearsFilteredData
+
+ }
+
+ } else {
+ defaultYearsFilteredData, err := utils.DefaultYearFilter(cRes, record.GetString("default_latest_year_count"))
+ if err != nil {
+ fmt.Println("Error processing defaultYearsFilteredData:", err)
+ }
+ // fmt.Println("defaultYearsFilteredData:", defaultYearsFilteredData)
+ cRes = defaultYearsFilteredData
+ }
+
+ var cardResults []map[string]string
+ if record.GetString("is_chart") == "false" { // card data calculations
+
+ // Extract `card_type` JSON from `record.Get("card_type")`
+ requestData := record.Get("card_type_json")
+ requestJSON, err := json.Marshal(requestData) // Convert interface{} to JSON string
+ if err != nil {
+ fmt.Println("Error encoding request data:", err)
+ }
+
+ // Decode JSON into an array of `utils.Request`
+ var requests []utils.CardCalculationRequest
+ err = json.Unmarshal(requestJSON, &requests)
+ if err != nil {
+ fmt.Println("Error decoding request data:", err)
+ }
+
+ if record.GetString("custom_calculation") == "true" {
+
+ customCalculationReq := record.Get("chart_custom_calculation_json")
+
+ var chartCustomCalculationRequest utils.ChartCalculationRequest
+
+ jsonData, err := json.Marshal(customCalculationReq)
+ if err != nil {
+ log.Println("Error marshaling to JSON:", err)
+ }
+
+ err = json.Unmarshal(jsonData, &chartCustomCalculationRequest)
+ if err != nil {
+ log.Println("Error unmarshalling JSON:", err)
+ }
+ customResult, err := utils.CalculateGroupedSum(cRes, chartCustomCalculationRequest)
+ if err != nil {
+ fmt.Println("Error:", err)
+ }
+
+ cRes = customResult
+
+ }
+
+ // Process each request and store results
+ for _, req := range requests {
+ result, err := utils.CardCalculation(cRes, req)
+ if err != nil {
+ fmt.Println("Error processing data:", err)
+ continue // Skip this request and move to the next
+ }
+ cardResults = append(cardResults, result)
+ }
+
+ recordResult["response"] = cardResults
+
+ } else {
+
+ if record.GetString("custom_calculation") == "false" {
+ recordResult["response"] = cRes
+ } else {
+
+ // fmt.Println("cRes-------", cRes)
+
+ customCalculationReq := record.Get("chart_custom_calculation_json")
+
+ var chartCustomCalculationRequest utils.ChartCalculationRequest
+
+ jsonData, err := json.Marshal(customCalculationReq)
+ if err != nil {
+ log.Println("Error marshaling to JSON:", err)
+ }
+
+ err = json.Unmarshal(jsonData, &chartCustomCalculationRequest)
+ if err != nil {
+ log.Println("Error unmarshalling JSON:", err)
+ }
+ customResult, err := utils.CalculateGroupedSum(cRes, chartCustomCalculationRequest)
+ if err != nil {
+ fmt.Println("Error:", err)
+ }
+
+ recordResult["response"] = customResult
+
+ }
+
+ }
+
+ // Add the result to the aggregated response
+ aggregatedResponse = append(aggregatedResponse, recordResult)
+
+ }
+ //--------------------
+
+ // get all filter based on kpi
+ var dataSetKpis []struct {
+ Kpi string `db:"kpi" json:"kpi"`
+ }
+ err = app.DB().Select("kpi").From("charts").Where(dbx.HashExp{"dataset": dataset}).GroupBy("kpi").All(&dataSetKpis)
+ if err != nil {
+ log.Fatalf("Failed to get kpi groupby data: %v", err)
+ }
+
+ aggregatedFilterResponse := make(map[string]interface{})
+ for _, dataSetKpi := range dataSetKpis {
+
+ kpi := dataSetKpi.Kpi
+ filterData, err := fetchfilterJSON(kpi)
+
+ // Translate filter data using the desired dataset and language key
+ fRes, err := TranslateFilters(app, dataset, filterData, langKey)
+ if err != nil {
+ log.Fatalf("Error translating filters: %v", err)
+ }
+
+ aggregatedFilterResponse[kpi] = fRes
+
+ }
+ //--------------------
+
+ //mainTopic kpi heading and screen color
+ headingAndColor := struct {
+ DataSet string `db:"data_set" json:"data_set"`
+ MainTopic string `db:"main_topic" json:"main_topic"`
+ SubTopic string `db:"sub_topic" json:"sub_topic"`
+ DataSetTileHeading string `db:"data_set_tile_heading" json:"data_set_tile_heading"`
+ HeaderColor string `db:"header_color" json:"header_color"`
+ BodyColor string `db:"body_color" json:"body_color"`
+ BorderColor string `db:"border_color" json:"border_color"`
+ }{}
+
+ header_color := "header_color_" + colorMode
+ body_color := "body_color_" + colorMode
+ border_color := "border_color_" + colorMode
+ data_set_tile_heading := "data_set_tile_heading_" + language
+ main_topic := "main_topic_" + language
+ sub_topic := "sub_topic_" + language
+ query := ` SELECT id,data_set,` + data_set_tile_heading + ` AS data_set_tile_heading,` + main_topic + ` AS main_topic,` + sub_topic + ` AS sub_topic, ` + header_color + ` AS header_color,` + body_color + ` AS body_color, ` + border_color + ` AS border_color FROM uae_numbers_screen WHERE data_set = {:data_set} `
+ err = app.DB().NewQuery(query).Bind(dbx.Params{"data_set": dataset}).One(&headingAndColor)
+ if err != nil {
+ log.Printf("Failed to fetch data-set for sub topic %s: %v", dataset, err)
+ }
+ //---------------------
+
+ // Create the response structure
+ response := map[string]interface{}{
+ "new_filter_data": aggregatedFilterResponse,
+ "data": aggregatedResponse,
+ "screen_heading_and_color": headingAndColor,
+ "kpi": requestData.KPI,
+ "filter_data": requestData.FilterData,
+ }
+
+ if len(aggregatedResponse) == 0 {
+ return c.JSON(http.StatusInternalServerError, map[string]string{"error": "No data could be fetched from the provided URLs"})
+ }
+
+ return c.JSON(http.StatusOK, response)
+ })
+
+ e.Router.GET("/api/getHomePageData", func(c echo.Context) error {
+
+ apiKey := c.Request().Header.Get("APP_SIGNATURE")
+ if apiKey != os.Getenv("APP_SIGNATURE") {
+ return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
+ }
+
+ language := c.QueryParam("language")
+ colorMode := c.QueryParam("color_mode")
+
+ // Determine the column name dynamically
+ colorPatternColumn := "color_pattern_" + colorMode
+
+ // Define the struct for holding the query results
+ mainTopics := []struct {
+ MainTopicEn string `db:"main_topic_en" json:"main_topic_en"`
+ MainTopicAr string `db:"main_topic_ar" json:"main_topic_ar"`
+ MainTopicListOrder string `db:"main_topic_list_order" json:"main_topic_list_order"`
+ ColorPattern string `db:"color_pattern" json:"color_pattern"`
+ }{}
+
+ // Execute the query
+ query := fmt.Sprintf(`
+ SELECT
+ main_topic_en,
+ main_topic_ar,
+ main_topic_list_order,
+ %s AS color_pattern
+ FROM home_screen
+ GROUP BY main_topic_en, main_topic_ar, main_topic_list_order, %s
+ ORDER BY main_topic_list_order ASC
+ `, colorPatternColumn, colorPatternColumn)
+
+ err := app.DB().NewQuery(query).All(&mainTopics)
+
+ // err := app.DB().
+ // Select("main_topic_en", "main_topic_ar", "main_topic_list_order", "color_pattern").
+ // From("home_screen").
+ // GroupBy("main_topic_en", "main_topic_ar", "color_pattern").
+ // OrderBy("main_topic_list_order ASC").
+ // All(&mainTopics)
+
+ if err != nil {
+ log.Printf("Failed to fetch home_screen data: %v", err)
+ return c.JSON(http.StatusInternalServerError, map[string]string{"error": "Failed to fetch records"})
+ }
+
+ // If no records are found
+ if len(mainTopics) == 0 {
+ return c.JSON(http.StatusNotFound, map[string]string{"error": "No records found for home screen"})
+ }
+
+ // Final result structure
+ result := []map[string]interface{}{}
+
+ // Loop through main topics and fetch sub-topic data for each
+ for _, mainTopic := range mainTopics {
+
+ dataSets := []struct {
+ DataSet string `db:"data_set" json:"data_set"`
+ DataSetTileHeading string `db:"data_set_tile_heading" json:"data_set_tile_heading"`
+ ValueSource string `db:"value_source" json:"value_source"`
+ Value string `db:"value" json:"value"`
+ DataSetListOrder string `db:"data_set_list_order" json:"data_set_list_order"`
+ }{}
+
+ languageSpecificColumn := "data_set_tile_heading_" + language
+ query := ` SELECT data_set,` + languageSpecificColumn + ` AS data_set_tile_heading,value_source,value, data_set_list_order FROM home_screen WHERE main_topic_en = {:topic}`
+ err := app.DB().
+ NewQuery(query).
+ Bind(dbx.Params{
+ "topic": mainTopic.MainTopicEn,
+ }).
+ All(&dataSets)
+
+ if err != nil {
+ log.Printf("Error fetching data sets: %v", err)
+ continue
+ }
+
+ var MainTopic string
+ if language == "en" {
+ MainTopic = mainTopic.MainTopicEn
+ } else {
+ MainTopic = mainTopic.MainTopicAr
+ }
+
+ // Add the main topic and its sub-topics to the result
+ result = append(result, map[string]interface{}{
+ "main_topic": MainTopic,
+ "main_topic_list_order": mainTopic.MainTopicListOrder,
+ "color_pattern": mainTopic.ColorPattern,
+ "tile_data": dataSets,
+ })
+ }
+
+ // Send the combined result as JSON
+ return c.JSON(http.StatusOK, result)
+
+ })
+
+ e.Router.GET("/api/getUAENumbersData", func(c echo.Context) error {
+
+ apiKey := c.Request().Header.Get("APP_SIGNATURE")
+ if apiKey != os.Getenv("APP_SIGNATURE") {
+ return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
+ }
+
+ language := c.QueryParam("language")
+ colorMode := c.QueryParam("color_mode")
+
+ // Determine the column name dynamically
+ colorPatternColumn := "color_pattern_" + colorMode
+
+ // Define the struct for holding the query results
+ mainTopics := []struct {
+ MainTopicEn string `db:"main_topic_en" json:"main_topic_en"`
+ MainTopicAr string `db:"main_topic_ar" json:"main_topic_ar"`
+ MainTopicListOrder string `db:"main_topic_list_order" json:"main_topic_list_order"`
+ ColorPattern string `db:"color_pattern" json:"color_pattern"`
+ }{}
+
+ // Execute the query
+
+ // Execute the query
+ query := fmt.Sprintf(`
+ SELECT
+ main_topic_en,
+ main_topic_ar,
+ main_topic_list_order,
+ %s AS color_pattern
+ FROM uae_numbers_screen
+ GROUP BY main_topic_en, main_topic_ar, %s
+ ORDER BY main_topic_list_order ASC
+ `, colorPatternColumn, colorPatternColumn)
+
+ err := app.DB().NewQuery(query).All(&mainTopics)
+
+ // err := app.DB().
+ // Select("main_topic_en", "main_topic_ar", "main_topic_list_order", "color_pattern").
+ // From("uae_numbers_screen").
+ // GroupBy("main_topic_en", "main_topic_ar", "color_pattern").
+ // OrderBy("main_topic_list_order ASC").
+ // All(&mainTopics)
+
+ if err != nil {
+ log.Printf("Failed to fetch uae_numbers_screen data: %v", err)
+ return c.JSON(http.StatusInternalServerError, map[string]string{"error": "Failed to fetch records"})
+ }
+
+ // If no records are found
+ if len(mainTopics) == 0 {
+ return c.JSON(http.StatusNotFound, map[string]string{"error": "No records found for home screen"})
+ }
+
+ // Final result structure
+ result := []map[string]interface{}{}
+
+ // Loop through main topics and fetch sub-topic data for each
+ for _, mainTopic := range mainTopics {
+
+ subTopics := []struct {
+ SubTopicEn string `db:"sub_topic_en" json:"sub_topic_en"`
+ SubTopicAr string `db:"sub_topic_ar" json:"sub_topic_ar"`
+ SubTopicListOrder string `db:"sub_topic_list_order" json:"sub_topic_list_order"`
+ }{}
+
+ // Query to get sub-topics for the current main topic
+ err := app.DB().
+ Select("sub_topic_en", "sub_topic_ar", "sub_topic_list_order").
+ From("uae_numbers_screen").
+ Where(dbx.HashExp{"main_topic_en": mainTopic.MainTopicEn}).
+ GroupBy("sub_topic_en", "sub_topic_ar").
+ OrderBy("sub_topic_list_order ASC").
+ All(&subTopics)
+
+ if err != nil {
+ log.Printf("Failed to fetch sub-topics for main topic %s: %v", mainTopic.MainTopicEn, err)
+ continue
+ }
+
+ result2 := []map[string]interface{}{}
+ // Loop through sub Topics topics and fetch dataSet data for each
+ for _, subTopic := range subTopics {
+
+ dataSets := []struct {
+ DataSet string `db:"data_set" json:"data_set"`
+ DataSetTileHeading string `db:"data_set_tile_heading" json:"data_set_tile_heading"`
+ ValueSource string `db:"value_source" json:"value_source"`
+ Value string `db:"value" json:"value"`
+ DataSetListOrder string `db:"data_set_list_order" json:"data_set_list_order"`
+ }{}
+
+ languageSpecificColumn := "data_set_tile_heading_" + language
+ query := ` SELECT data_set,` + languageSpecificColumn + ` AS data_set_tile_heading,value_source,value, data_set_list_order FROM uae_numbers_screen WHERE sub_topic_en = {:topic}`
+ err := app.DB().
+ NewQuery(query).
+ Bind(dbx.Params{
+ "topic": subTopic.SubTopicEn,
+ }).
+ All(&dataSets)
+
+ // languageSpecificColumn := "data_set_tile_heading_" + language
+ // // Query to get data-set for the current sub topic
+ // err := app.DB().
+ // Select("data_set", languageSpecificColumn, "value_source", "value", "data_set_list_order").
+ // From("uae_numbers_screen").
+ // Where(dbx.HashExp{"sub_topic_en": subTopic.SubTopicEn}).
+ // OrderBy("data_set_list_order ASC").
+ // All(&dataSets)
+
+ if err != nil {
+ log.Printf("Failed to fetch data-set for sub topic %s: %v", subTopic.SubTopicEn, err)
+ continue
+ }
+
+ var SubTopic string
+ if language == "en" {
+ SubTopic = subTopic.SubTopicEn
+ } else {
+ SubTopic = subTopic.SubTopicAr
+ }
+
+ result2 = append(result2, map[string]interface{}{
+ "sub_topic": SubTopic,
+ "sub_topic_list_order": subTopic.SubTopicListOrder,
+ "tile_data": dataSets,
+ })
+ }
+
+ var MainTopic string
+ if language == "en" {
+ MainTopic = mainTopic.MainTopicEn
+ } else {
+ MainTopic = mainTopic.MainTopicAr
+ }
+
+ // Add the main topic and its sub-topics to the result
+ result = append(result, map[string]interface{}{
+ "main_topic": MainTopic,
+ "main_topic_list_order": mainTopic.MainTopicListOrder,
+ "color_pattern": mainTopic.ColorPattern,
+ "sub_topics": result2,
+ })
+ }
+
+ // Send the combined result as JSON
+ return c.JSON(http.StatusOK, result)
+
+ })
+
+ e.Router.GET("/api/getUserBookmark", func(c echo.Context) error {
+
+ apiKey := c.Request().Header.Get("APP_SIGNATURE")
+ if apiKey != os.Getenv("APP_SIGNATURE") {
+ return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
+ }
+
+ language := c.QueryParam("language")
+ user_id := c.QueryParam("user_id")
+ colorMode := c.QueryParam("color_mode")
+
+ // Define the struct for holding the query results
+ bookmarks := []struct {
+ Id string `db:"id" json:"id"`
+ UserId string `db:"user_id" json:"user_id"`
+ Dataset string `db:"dataset" json:"dataset"`
+ }{}
+
+ // Execute the query
+ err := app.DB().
+ Select("id", "user_id", "dataset").
+ From("bookmark").
+ Where(dbx.HashExp{"user_id": user_id}).
+ All(&bookmarks)
+ // return c.JSON(http.StatusOK, bookmarks)
+ if err != nil {
+ log.Printf("Failed to fetch bookmark data: %v", err)
+ return c.JSON(http.StatusInternalServerError, map[string]string{"error": "Failed to fetch records"})
+ }
+
+ // If no records are found
+ if len(bookmarks) == 0 {
+ return c.JSON(http.StatusNotFound, map[string]string{"error": "No records found for Bookmark"})
+ }
+
+ // Final result structure
+ result := []map[string]interface{}{}
+
+ // Loop through main topics and fetch sub-topic data for each
+ for _, bookmark := range bookmarks {
+ dataSets := struct {
+ DataSet string `db:"data_set" json:"data_set"`
+ MainTopic string `db:"main_topic" json:"main_topic"`
+ SubTopic string `db:"sub_topic" json:"sub_topic"`
+ DataSetTileHeading string `db:"data_set_tile_heading" json:"data_set_tile_heading"`
+ ValueSource string `db:"value_source" json:"value_source"`
+ Value string `db:"value" json:"value"`
+ ColorPattern string `db:"color_pattern" json:"color_pattern"`
+ }{}
+
+ data_set_tile_heading := "data_set_tile_heading_" + language
+ main_topic := "main_topic_" + language
+ sub_topic := "sub_topic_" + language
+ color_pattern := "color_pattern_" + colorMode
+ query := ` SELECT id,data_set,` + data_set_tile_heading + ` AS data_set_tile_heading,` + main_topic + ` AS main_topic,` + sub_topic + ` AS sub_topic,` + color_pattern + ` AS color_pattern,value_source,value FROM uae_numbers_screen WHERE data_set = {:bookmark} `
+ err := app.DB().
+ NewQuery(query).
+ Bind(dbx.Params{
+ "bookmark": bookmark.Dataset,
+ }).
+ One(&dataSets)
+
+ log.Printf("query %s: %v", bookmark.Dataset, query)
+ if err != nil {
+ log.Printf("Failed to fetch data-set for sub topic %s: %v", bookmark.Dataset, err)
+ continue
+ }
+
+ // Add the main topic and its sub-topics to the result
+ result = append(result, map[string]interface{}{
+ "id": bookmark.Id,
+ "data_set": dataSets.DataSet,
+ "data_set_tile_heading": dataSets.DataSetTileHeading,
+ "value_source": dataSets.ValueSource,
+ "value": dataSets.Value,
+ "main_topic": dataSets.MainTopic,
+ "sub_topic": dataSets.SubTopic,
+ "color_pattern": dataSets.ColorPattern,
+ })
+
+ }
+
+ // Send the combined result as JSON
+ return c.JSON(http.StatusOK, result)
+
+ })
+
+ type DownloadRequest struct {
+ Username string `json:"username"`
+ Password string `json:"password"`
+ Collection string `json:"collection"`
+ SyncWithLive bool `json:"syncWithLive"`
+ LiveUsername string `json:"liveUsername"`
+ LivePassword string `json:"livePassword"`
+ }
+
+ type AdminLoginResponse struct {
+ Token string `json:"token"`
+ Admin map[string]interface{} `json:"admin"`
+ }
+
+ type DownloadResponse struct {
+ Collection string `json:"collection"`
+ Records []map[string]interface{} `json:"records"`
+ }
+
+ e.Router.POST("/api/downloadWithLogin", func(c echo.Context) error {
+ reqBody := new(DownloadRequest)
+ if err := c.Bind(reqBody); err != nil {
+ return c.JSON(400, map[string]string{"error": "invalid request"})
+ }
+
+ if reqBody.Username == "" || reqBody.Password == "" || reqBody.Collection == "" {
+ return c.JSON(400, map[string]string{"error": "username, password, and collection are required"})
+ }
+
+ // 1️⃣ Login to PocketBase
+ loginPayload := map[string]string{
+ "identity": reqBody.Username,
+ "password": reqBody.Password,
+ }
+ data, _ := json.Marshal(loginPayload)
+
+ loginReq, _ := http.NewRequest("POST", fmt.Sprintf("%s/api/admins/auth-with-password", baseUrl), bytes.NewBuffer(data))
+ loginReq.Header.Set("Content-Type", "application/json")
+
+ loginResp, err := http.DefaultClient.Do(loginReq)
+ if err != nil {
+ return c.JSON(500, map[string]string{"error": "failed to connect to PB"})
+ }
+ defer loginResp.Body.Close()
+
+ loginBody, _ := ioutil.ReadAll(loginResp.Body)
+
+ if loginResp.StatusCode != 200 {
+ return c.JSON(401, map[string]string{"error": "invalid admin credentials", "details": string(loginBody)})
+ }
+
+ var loginRes AdminLoginResponse
+ if err := json.Unmarshal(loginBody, &loginRes); err != nil {
+ return c.JSON(500, map[string]string{"error": "failed to parse login response"})
+ }
+
+ // 2️⃣ Use token to fetch records
+ url := fmt.Sprintf("%s/api/collections/%s/records?perPage=500", baseUrl, reqBody.Collection)
+ fmt.Println("Fetching collection from URL:", url)
+
+ req, _ := http.NewRequest("GET", url, nil)
+ req.Header.Set("Authorization", loginRes.Token)
+ fmt.Println("Using token:", loginRes.Token)
+
+ resp, err := http.DefaultClient.Do(req)
+ if err != nil {
+ fmt.Println("Error fetching collection:", err)
+ return c.JSON(500, map[string]string{"error": "failed to fetch collection"})
+ }
+ defer resp.Body.Close()
+
+ body, _ := ioutil.ReadAll(resp.Body)
+ fmt.Println("HTTP Status Code:", resp.StatusCode)
+
+ // parse JSON
+ var parsed map[string]interface{}
+ if err := json.Unmarshal(body, &parsed); err != nil {
+ fmt.Println("JSON Unmarshal error:", err)
+ return c.JSON(500, map[string]string{"error": "invalid JSON from PocketBase"})
+ }
+
+ items, ok := parsed["items"].([]interface{})
+ if !ok {
+ return c.JSON(500, map[string]string{"error": "no items found"})
+ }
+
+ records := []map[string]interface{}{}
+ for _, i := range items {
+ rec := i.(map[string]interface{})
+ records = append(records, rec)
+ }
+
+ syncResult := map[string]interface{}{"synced": []string{}, "errors": []string{}}
+
+ // 3️⃣ If syncWithLive=true, sync to live PB
+ if reqBody.SyncWithLive {
+ if reqBody.LiveUsername == "" || reqBody.LivePassword == "" {
+ return c.JSON(400, map[string]string{"error": "live username and password required for sync"})
+ }
+
+ // Login to live
+ livePayload := map[string]string{
+ "identity": reqBody.LiveUsername,
+ "password": reqBody.LivePassword,
+ }
+ data, _ := json.Marshal(livePayload)
+ liveReq, _ := http.NewRequest("POST", fmt.Sprintf("%s/api/admins/auth-with-password", liveBaseUrl), bytes.NewBuffer(data))
+ liveReq.Header.Set("Content-Type", "application/json")
+ liveResp, err := http.DefaultClient.Do(liveReq)
+ fmt.Println("Live url:", liveBaseUrl)
+ fmt.Println("Live req:", liveReq)
+ if err != nil {
+ return c.JSON(500, map[string]string{"error": "failed to connect to Live PB"})
+ }
+ defer liveResp.Body.Close()
+
+ liveBody, _ := ioutil.ReadAll(liveResp.Body)
+ if liveResp.StatusCode != 200 {
+ return c.JSON(401, map[string]string{"error": "invalid live admin credentials", "details": string(liveBody)})
+ }
+
+ var liveLogin AdminLoginResponse
+ if err := json.Unmarshal(liveBody, &liveLogin); err != nil {
+ return c.JSON(500, map[string]string{"error": "failed to parse live login response"})
+ }
+
+ // Sync each record
+ for _, rec := range records {
+ id := rec["id"].(string)
+ data, _ := json.Marshal(rec)
+
+ // Try PATCH first
+ patchURL := fmt.Sprintf("%s/api/collections/%s/records/%s", liveBaseUrl, reqBody.Collection, id)
+ req, _ := http.NewRequest("PATCH", patchURL, bytes.NewBuffer(data))
+ req.Header.Set("Authorization", liveLogin.Token)
+ req.Header.Set("Content-Type", "application/json")
+
+ resp, err := http.DefaultClient.Do(req)
+ if err != nil {
+ syncResult["errors"] = append(syncResult["errors"].([]string), fmt.Sprintf("%s: %s", id, err.Error()))
+ continue
+ }
+ defer resp.Body.Close()
+
+ if resp.StatusCode == 404 {
+ // Create instead
+ postURL := fmt.Sprintf("%s/api/collections/%s/records", liveBaseUrl, reqBody.Collection)
+ req, _ := http.NewRequest("POST", postURL, bytes.NewBuffer(data))
+ req.Header.Set("Authorization", liveLogin.Token)
+ req.Header.Set("Content-Type", "application/json")
+
+ resp, err = http.DefaultClient.Do(req)
+ if err != nil {
+ syncResult["errors"] = append(syncResult["errors"].([]string), fmt.Sprintf("%s: %s", id, err.Error()))
+ continue
+ }
+ defer resp.Body.Close()
+
+ if resp.StatusCode >= 300 {
+ body, _ := ioutil.ReadAll(resp.Body)
+ syncResult["errors"] = append(syncResult["errors"].([]string), fmt.Sprintf("%s: create failed: %s", id, string(body)))
+ continue
+ }
+ }
+
+ syncResult["synced"] = append(syncResult["synced"].([]string), id)
+ }
+ }
+
+ // 4️⃣ Return dev records + optional sync result
+ return c.JSON(200, map[string]interface{}{
+ "collection": reqBody.Collection,
+ "records": records,
+ "sync": syncResult,
+ })
+ })
+
+ return nil
+ })
+
+ //send mail while status changed from app admin
+ app.OnRecordBeforeUpdateRequest().Add(func(e *core.RecordUpdateEvent) error {
+ if e.Collection.Name == "users" {
+ originalRecord, err := app.Dao().FindRecordById("users", e.Record.GetString("id"))
+ if err != nil {
+ return fmt.Errorf("failed to fetch original record: %v", err)
+ }
+
+ oldStatus := originalRecord.GetString("status")
+ newStatus := e.Record.GetString("status")
+
+ // Check if the status has changed
+ if oldStatus != newStatus {
+ err := sendStatusChangeEmail(app, e.Record, newStatus)
+ if err != nil {
+ return err
+ }
+ }
+ }
+ return nil
+ })
+
+ //Hook to send a verification link to register user
+ app.OnRecordAfterCreateRequest().Add(func(e *core.RecordCreateEvent) error {
+ if e.Record.Collection().Name == "users" {
+ // Retrieve user details
+ name := e.Record.GetString("uname")
+ email := e.Record.GetString("email")
+ userID := e.Record.Id // User ID
+
+ // imageRecord, err := app.Dao().FindFirstRecordByData("images", "file_name", "app_logo")
+ // if err != nil {
+ // log.Printf("Failed to fetch logo from images collection: %v", err)
+ // return nil
+ // }
+
+ // Construct the logo URL
+ // logoURL := fmt.Sprintf("%s/api/files/images/%s/%s",
+ // baseUrl,
+ // imageRecord.Id,
+ // imageRecord.GetString("file"),
+ // )
+
+ // Email subject
+ subject := "FCSC Verify Your Email to Complete Registration"
+
+ // Generate a verification URL (example: using user ID or token)
+ verificationURL := fmt.Sprintf("%s/verify-email?userId=%s", baseUrl, userID)
+
+ // Email body
+ body := fmt.Sprintf(`
+
+
+
+
+
+ Registration Update – UAE Stats App
+
+
+
+
+
+
+
+
+
+ تطبيق إحصاءات الإمارات العربية المتحدة - يرجى التحقق من عنوان بريدك الإلكتروني
+ Please Verify Your Email Address – UAE Stats App
+
+ |
+
+
+
+
+
+
+ Dear %s,
+ Thank you for registering. Please click the link below to verify your email address:
+
+ Verify Email
+
+ If you did not register for this account, please ignore this email.
+ |
+
+ عزيزي %s،
+ شكرًا لتسجيلك. يُرجى النقر على الرابط أدناه للتحقق من عنوان بريدك الإلكتروني:
+
+ تحقق من البريد الإلكتروني
+
+ إذا لم تكن قد قمت بتسجيل هذا الحساب، يُرجى تجاهل هذا البريد الإلكتروني.
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+
+ تنبيه: هذه الرسالة الإلكترونية و أيٌ من مرفقاتها قد تحتوي على معلومات سرية وهامة موجهه للشخص/الأشخاص المعنيين وعليه يرجى من المتلقي في حال تلقي الرسالة الإلكترونية عن طريق الخطأ ولم يكن المعني بها، إخطار المرسل وحذفها من بريده الإلكتروني و كذلك إتلاف أي نسخ مطبوعة عنها حيث أنه يحظر عليه قراءة ونسخ ونشر أو توزيع أو استخدام هذه الرسالة إلكترونية و أيٌ من مرفقاتها بأي شكل من الأشكال
+ |
+
+
+
+ Disclaimer: The information contained in and transmitted with this e-mail message is PRIVILEGED AND/OR CONFIDENTIAL.If you are not the intended recipient, or have received the message by error, please notify the sender via E-Mail or over the telephone and delete this e-mail. You are not authorized to read, copy, disseminate, distribute or use this E-Mail or any of its attachments in any way.
+ |
+
+
+ |
+
+
+
+
+ `, name, verificationURL, name, verificationURL)
+
+ // Create the email message
+ message := &mailer.Message{
+ From: mail.Address{
+ Name: "FCSC",
+ Address: app.Settings().Meta.SenderAddress,
+ },
+ To: []mail.Address{
+ {
+ Name: name,
+ Address: email,
+ },
+ },
+ Subject: subject,
+ HTML: body,
+ }
+
+ // Send the email
+ err := app.NewMailClient().Send(message)
+ if err != nil {
+ log.Printf("Failed to send verification email to user: %v", err)
+ return err
+ }
+
+ log.Println("Verification email sent successfully to the user.")
+ }
+ return nil
+ })
+
+ // Hook to send an email after a user is created
+ app.OnBeforeServe().Add(func(e *core.ServeEvent) error {
+
+ e.Router.GET("/api/custom/approve", func(c echo.Context) error {
+ userId := c.QueryParam("userId")
+ if userId == "" {
+ return c.JSON(400, map[string]interface{}{
+ "code": 400,
+ "message": "Missing userId query parameter.",
+ })
+ }
+
+ // Find the user record
+ record, err := app.Dao().FindRecordById("users", userId)
+ if err != nil {
+ return c.JSON(500, map[string]interface{}{
+ "code": 500,
+ "message": "Error finding user.",
+ })
+ }
+
+ // Check if the email is already verified
+ if record.GetBool("reviewed") {
+ return c.HTML(http.StatusOK, `
+
+
+
+
+
+
+
✖
+
Your Already Reviewed
+
You have already been reviewed. No further action is required.
+
+
+
+ `)
+ }
+
+ // Update the status
+ newStatus := "Approved"
+ record.Set("verified", true)
+ record.Set("status", newStatus)
+ record.Set("reviewed", true)
+ if err := app.Dao().SaveRecord(record); err != nil {
+ return c.JSON(500, map[string]interface{}{
+ "code": 500,
+ "message": "Failed to verify user.",
+ })
+ }
+
+ // Send the status change email
+ err = sendStatusChangeEmail(app, record, newStatus)
+ if err != nil {
+ return c.JSON(500, map[string]interface{}{
+ "code": 500,
+ "message": "Failed to send approval email.",
+ })
+ }
+
+ return c.HTML(http.StatusOK, `
+
+
+
+
+
+
+
✔
+
User Approved Successfully
+
The user has been approved, and the approval email has been sent.
+
+
+
+ `)
+ })
+
+ return nil
+ })
+
+ app.OnBeforeServe().Add(func(e *core.ServeEvent) error {
+
+ // Approve Endpoint
+ e.Router.GET("/api/custom/reject", func(c echo.Context) error {
+ userId := c.QueryParam("userId")
+ if userId == "" {
+ return c.JSON(400, map[string]interface{}{
+ "code": 400,
+ "message": "Missing userId query parameter.",
+ })
+ }
+
+ // Find the user record in PocketBase by userId
+ record, err := app.Dao().FindRecordById("users", userId)
+ if err != nil {
+ return c.JSON(500, map[string]interface{}{
+ "code": 500,
+ "message": "Error finding user.",
+ })
+ }
+
+ // Check if the email is already verified
+ if record.GetBool("reviewed") {
+ return c.HTML(http.StatusOK, `
+
+
+
+
+
+
+
✖
+
Your Already Reviewed
+
You have already been reviewed. No further action is required.
+
+
+
+ `)
+ }
+
+ // Check if the status is already "Denied" to avoid duplicate email
+ if record.GetString("status") == "Denied" {
+ return c.JSON(400, map[string]interface{}{
+ "code": 400,
+ "message": "User is already rejected.",
+ })
+ }
+
+ // Update the status
+ newStatus := "Denied"
+ record.Set("verified", false)
+ record.Set("status", newStatus)
+ record.Set("reviewed", true)
+ if err := app.Dao().SaveRecord(record); err != nil {
+ return c.JSON(500, map[string]interface{}{
+ "code": 500,
+ "message": "Failed to verify user.",
+ })
+ }
+
+ // Send the status change email
+ err = sendStatusChangeEmail(app, record, newStatus)
+ if err != nil {
+ return c.JSON(500, map[string]interface{}{
+ "code": 500,
+ "message": "Failed to send rejection email.",
+ })
+ }
+
+ // Render a success message as an HTML response
+ return c.HTML(http.StatusOK, `
+
+
+
+
+
+ User Rejected
+
+
+
+
+
❌
+
User Rejected
+
Rejection email sent successfully.
+
+
+
+ `)
+ })
+
+ return nil
+ })
+
+ // Serve static files from the provided public directory (if exists)
+ app.OnBeforeServe().Add(func(e *core.ServeEvent) error {
+ // e.Router.GET("/verify-email", verifyEmailHandler)
+
+ e.Router.GET("/verify-email", func(c echo.Context) error {
+ return verifyEmailHandler(c, baseUrl)
+ })
+ e.Router.GET("/*", apis.StaticDirectoryHandler(os.DirFS("./pb_public"), false))
+ return nil
+ })
+
+ //Feedback Mail Trigger
+ app.OnRecordAfterCreateRequest().Add(func(e *core.RecordCreateEvent) error {
+ if e.Record.Collection().Name == "feedback" {
+ // Retrieve feedback details
+ feedback := e.Record
+ userId := feedback.GetString("userId")
+ emojiRating := feedback.GetString("emoji_rating")
+ easeOfUse := feedback.GetString("ease_of_use")
+ quality := feedback.GetString("quality")
+ design := feedback.GetString("design")
+ redundancy := feedback.GetString("redundancy")
+ additionalFeedback := feedback.GetString("feedback")
+
+ if additionalFeedback == "" {
+ additionalFeedback = "No additional feedback provided."
+ }
+
+ // Fetch user details using userId
+ user, err := app.Dao().FindRecordById("users", userId)
+ if err != nil {
+ log.Printf("Error fetching user details: %v\n", err)
+ return err
+ }
+
+ userName := user.GetString("uname")
+ userEmail := user.GetString("email")
+
+ // Extract and format the creation time
+ createdTime := e.Record.Get("created").(types.DateTime) // Extract created time
+ feedbackDateTime := createdTime.Time().UTC() // Convert to time.Time in UTC
+
+ // Format the date and time
+ formattedDate := feedbackDateTime.Format("02-01-2006") // DD-MM-YYYY
+ // formattedDateTime := feedbackDateTime.Format("02.01.2006 15:04 UTC") // DD.MM.YYYY HH:mm UTC
+
+ // Admin details
+ adminName := "FCSC"
+
+ // Email subject
+ subject := "UAE Stats Feedback"
+
+ // imageRecord, err := app.Dao().FindFirstRecordByData("images", "file_name", "app_logo")
+ // if err != nil {
+ // log.Printf("Failed to fetch logo from images collection: %v", err)
+ // return nil
+ // }
+
+ // // Construct the logo URL
+ // logoURL := fmt.Sprintf("%s/api/files/images/%s/%s",
+ // baseUrl,
+ // imageRecord.Id,
+ // imageRecord.GetString("file"),
+ // )
+
+ // Email body in HTML format
+ body := fmt.Sprintf(`
+
+
+
+
+
+ Registration Update – UAE Stats App
+
+
+
+
+
+
+
+
+
+ ملاحظات حول التطبيق الهاتفي للإحصاءات الإماراتي UAE
+ UAE Stats Mobile Application Feedback
+
+ |
+
+
+
+
+
+
+ Hi Team,
+ We have received new feedback from %s. Below are the details:
+ Feedback Details:
+
+ - User Name: %s
+ - Email: %s
+ - Date: %s
+
+ Feedback:
+
+ 1. How was your experience with us today : %s
+ 2. How good did we do in this aspect?
+ * Ease of Use: %s
+ * Quality: %s
+ * Design: %s
+ * Redundancy: %s
+ 3. Tell us how we can improve
+ %s
+
+ |
+
+ مرحبا فريق العمل،
+ لقد تلقينا تعليقات جديدة من %s. فيما يلي التفاصيل:
+
+ تفاصيل الملاحظات:
+
+ - اسم المستخدم: %s
+ - البريد الإلكتروني: %s
+ - التاريخ : %s
+
+ تعليق :
+
+ 1. كيف كانت تجربتك معنا اليوم؟ : %s
+ 2. ما مدى نجاحنا في هذا الجانب؟
+ * سهولة الاستخدام: %s
+ * الجودة: %s
+ * التصميم: %s
+ * التكرار: %s
+ 3. أخبرنا كيف يمكننا تحسين خدماتنا.؟
+ %s
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+
+ تنبيه: هذه الرسالة الإلكترونية و أيٌ من مرفقاتها قد تحتوي على معلومات سرية وهامة موجهه للشخص/الأشخاص المعنيين وعليه يرجى من المتلقي في حال تلقي الرسالة الإلكترونية عن طريق الخطأ ولم يكن المعني بها، إخطار المرسل وحذفها من بريده الإلكتروني و كذلك إتلاف أي نسخ مطبوعة عنها حيث أنه يحظر عليه قراءة ونسخ ونشر أو توزيع أو استخدام هذه الرسالة إلكترونية و أيٌ من مرفقاتها بأي شكل من الأشكال
+ |
+
+
+
+ Disclaimer: The information contained in and transmitted with this e-mail message is PRIVILEGED AND/OR CONFIDENTIAL.If you are not the intended recipient, or have received the message by error, please notify the sender via E-Mail or over the telephone and delete this e-mail. You are not authorized to read, copy, disseminate, distribute or use this E-Mail or any of its attachments in any way.
+ |
+
+
+ |
+
+
+
+`, userName, userName, userEmail, formattedDate, emojiRating, easeOfUse, quality, design, redundancy, additionalFeedback, userName, userName, userEmail, formattedDate, emojiRating, easeOfUse, quality, design, redundancy, additionalFeedback)
+
+ // Define the target type (e.g., "smtp")
+ targetType := "feedback_receive_mail"
+
+ // Fetch the email configuration record where type matches targetType
+ emailConfig, err := app.Dao().FindFirstRecordByData("email_configuration", "type", targetType)
+ if err != nil {
+ log.Printf("Failed to fetch email configuration for type '%s': %v", targetType, err)
+ return fmt.Errorf("email configuration not found for type '%s'", targetType)
+ }
+
+ // Get the email address
+ feedbackEmail := emailConfig.GetString("email")
+ if feedbackEmail == "" {
+ log.Printf("No email address configured for type '%s'", targetType)
+ return fmt.Errorf("no email address configured for type '%s'", targetType)
+ }
+ // Create the email message
+ message := &mailer.Message{
+ From: mail.Address{
+ Name: "FCSC",
+ Address: app.Settings().Meta.SenderAddress,
+ },
+ To: []mail.Address{
+ {
+ Name: adminName,
+ Address: feedbackEmail,
+ },
+ },
+ Subject: subject,
+ HTML: body,
+ }
+
+ // Send the email
+ err = app.NewMailClient().Send(message)
+ if err != nil {
+ log.Printf("Failed to send feedback email to admin: %v", err)
+ return err
+ }
+
+ log.Println("Feedback email sent successfully to the admin.")
+ }
+ return nil
+ })
+
+ app.OnRecordAfterCreateRequest("otp_requests").Add(func(e *core.RecordCreateEvent) error {
+ // Ensure the record has an email field
+ email, ok := e.Record.Get("email").(string)
+ if !ok || email == "" {
+ log.Println("Invalid or missing email field.")
+ return nil // or handle this case appropriately
+ }
+
+ // Generate the OTP
+ otp, err := generateOTP()
+ if err != nil {
+ log.Printf("Failed to generate OTP: %v\n", err)
+ return err
+ }
+
+ // Calculate the expiration time (5 minutes from now)
+ expiresAt := time.Now().Add(5 * time.Minute)
+
+ // Create a mail.Address for the sender
+ sender := mail.Address{
+ Name: "FCSC",
+ Address: app.Settings().Meta.SenderAddress, // Ensure this is a valid email
+ }
+
+ // Create the email message
+ message := &mailer.Message{
+ From: sender,
+ To: []mail.Address{{Address: email}}, // Wrap the recipient email
+ Subject: "YOUR VERIFICATION CODE",
+ HTML: fmt.Sprintf(
+ `Thanks for verifying your %s account!
+ Your code is: %d
+ Sincerely,
Support team.
`,
+ email, otp,
+ ),
+ }
+
+ // Send the email
+ if err := app.NewMailClient().Send(message); err != nil {
+ log.Printf("Failed to send email: %v\n", err)
+ return err
+ }
+
+ // Update the record with the OTP
+ e.Record.Set("otp", fmt.Sprintf("%04d", otp))
+ e.Record.Set("expires_at", expiresAt) // Set the expiration time
+
+ if err := app.Dao().SaveRecord(e.Record); err != nil {
+ log.Printf("Failed to update record with OTP and expiration time: %v\n", err)
+ return err
+ }
+
+ log.Printf("OTP sent to %s expires at and saved successfully.\n", email)
+ return nil
+ })
+
+ // Start the PocketBase server
+ go func() {
+ if err := app.Start(); err != nil {
+ log.Fatal(err)
+ }
+ }()
+
+ // Start your custom HTTP server on port 8091
+ log.Println("Starting custom HTTP server on :8091")
+ if err := http.ListenAndServe(":8091", nil); err != nil {
+ log.Fatal("Failed to start server: ", err)
+ }
+}
+
+// generateOTP generates a random 4-digit OTP
+func generateOTP() (int, error) {
+ max := big.NewInt(10000) // 4-digit numbers range: 0000 to 9999
+ n, err := rand.Int(rand.Reader, max)
+ if err != nil {
+ return 0, err
+ }
+ return int(n.Int64()), nil
+}
+
+// Email verification handler
+func verifyEmailHandler(c echo.Context, baseUrl string) error {
+ log.Println("Starting verifyEmailHandler")
+
+ // Get the userId from the query parameter
+ userID := c.QueryParam("userId")
+
+ if userID == "" {
+ return c.JSON(http.StatusBadRequest, map[string]string{
+ "message": "User ID not provided",
+ })
+ }
+
+ // Check if app is properly initialized
+ if app == nil {
+ log.Fatal("PocketBase app is not initialized")
+ return c.JSON(http.StatusInternalServerError, map[string]string{
+ "message": "Internal server error",
+ })
+ }
+
+ // Find the user record in PocketBase by userId
+ record, err := app.Dao().FindRecordById("users", userID)
+ if err != nil {
+ log.Printf("Error finding user: %v", err)
+ return c.JSON(500, map[string]interface{}{
+ "code": 500,
+ "message": "Error finding user.",
+ })
+ }
+
+ // Check if the email is already verified
+ if record.GetBool("user_mail_verify") {
+ return c.HTML(http.StatusOK, `
+
+
+
+
+
+
+
✖
+
Email Already Verified
+
Your email has already been verified. No further action is required.
+
+
+
+ `)
+ }
+
+ // Set the verified status to true
+ record.Set("user_mail_verify", true)
+ // log.Printf("Failed to verify user: %v", err)
+ if err := app.Dao().SaveRecord(record); err != nil {
+ log.Printf("Failed to update email verification status: %v", err)
+ return c.JSON(http.StatusInternalServerError, map[string]string{
+ "error": "Failed to update email verification status",
+ })
+ }
+
+ response := c.HTML(http.StatusOK, `
+
+
+
+
+
+
+
✔
+
Your registration is pending for Admin Approval
+
Access will be granted once your account is approved.
+
+
+
+ `)
+
+ // Fetch user details for email notification
+ username := record.GetString("uname")
+ userEmail := record.GetString("email")
+
+ // Send admin email asynchronously
+ go func() {
+ err = sendAdminEmail(app, userID, username, userEmail, baseUrl)
+ if err != nil {
+ log.Printf("Failed to send admin email: %v", err)
+ }
+ }()
+
+ return response
+
+}
+
+func sendAdminEmail(app *pocketbase.PocketBase, userID, username, userEmail string, baseUrl string) error {
+
+ adminNameEn := "Admin"
+ adminNameAr := "المدير"
+ subject := "New User Registration Pending Review"
+
+ // Fetch the email configuration from PocketBase
+ emailConfig, err := app.Dao().FindFirstRecordByData("email_configuration", "type", "admin_receive_mail")
+ if err != nil {
+ log.Printf("Failed to fetch email configuration: %v", err)
+ return err
+ }
+ adminEmail := emailConfig.GetString("email")
+
+ // Construct email body
+ body := fmt.Sprintf(`
+
+
+
+
+
+ Registration Update – UAE Stats App
+
+
+
+
+
+
+
+
+
+ تسجيل مستخدم جديد - تطبيق إحصاءات الإمارات العربية المتحدة - قيد المراجعة
+
+ New User Registration - UAE Stats App - Pending Review
+
+ |
+
+
+
+
+
+
+ Dear %s,
+ A new user has registered on UAE Stats Mobile app and is awaiting your review.
+
+ Details
+ Name: %s
+ Email: %s
+
+ Please review the registration and take appropriate action
+
+
+ |
+
+ عزيزي %s،
+ تم تسجيل مستخدم جديد في تطبيق إحصاءات الإمارات
+ للهواتف المحمولة، وهو بانتظار مراجعتك.
+
+ التفاصيل
+ الاسم: %s
+ البريد الإلكتروني: %s
+
+ يرجى مراجعة التسجيل واتخاذ الإجراء المناسب
+ الموافقة أو الرفض.
+
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+
+ تنبيه: هذه الرسالة الإلكترونية و أيٌ من مرفقاتها قد تحتوي على معلومات سرية وهامة موجهه للشخص/الأشخاص المعنيين وعليه يرجى من المتلقي في حال تلقي الرسالة الإلكترونية عن طريق الخطأ ولم يكن المعني بها، إخطار المرسل وحذفها من بريده الإلكتروني و كذلك إتلاف أي نسخ مطبوعة عنها حيث أنه يحظر عليه قراءة ونسخ ونشر أو توزيع أو استخدام هذه الرسالة إلكترونية و أيٌ من مرفقاتها بأي شكل من الأشكال
+ |
+
+
+
+ Disclaimer: The information contained in and transmitted with this e-mail message is PRIVILEGED AND/OR CONFIDENTIAL.If you are not the intended recipient, or have received the message by error, please notify the sender via E-Mail or over the telephone and delete this e-mail. You are not authorized to read, copy, disseminate, distribute or use this E-Mail or any of its attachments in any way.
+ |
+
+
+ |
+
+
+
+
+ `,
+ adminNameEn, username, userEmail, userEmail, baseUrl, userID, baseUrl, baseUrl, userID, baseUrl,
+ adminNameAr, username, userEmail, userEmail, baseUrl, userID, baseUrl, baseUrl, userID, baseUrl)
+
+ // Send email
+ message := &mailer.Message{
+ From: mail.Address{
+ Name: "FCSC",
+ Address: app.Settings().Meta.SenderAddress,
+ },
+ To: []mail.Address{
+ {Name: adminNameEn, Address: adminEmail},
+ },
+ Subject: subject,
+ HTML: body,
+ }
+
+ if err := app.NewMailClient().Send(message); err != nil {
+ log.Printf("Failed to send admin email: %v", err)
+ return err
+ }
+
+ log.Println("Admin email sent successfully.")
+ return nil
+}
+
+func sendStatusChangeEmail(app *pocketbase.PocketBase, record *models.Record, newStatus string) error {
+ userEmail := record.GetString("email")
+ userName := record.GetString("uname")
+ log.Printf("userName: %s", userName)
+
+ if userEmail == "" {
+ return fmt.Errorf("user email is empty")
+ }
+
+ // imageRecord, err := app.Dao().FindFirstRecordByData("images", "file_name", "app_logo")
+ // if err != nil {
+ // log.Printf("Failed to fetch logo from images collection: %v", err)
+ // return nil
+ // }
+
+ // // Construct the logo URL
+ // logoURL := fmt.Sprintf("%s/api/files/images/%s/%s",
+ // baseUrl,
+ // imageRecord.Id,
+ // imageRecord.GetString("file"),
+ // )
+
+ var subject, body string
+
+ if newStatus == "Approved" {
+ subject = "Registration Approved – FCSC"
+ body = fmt.Sprintf(`
+
+
+
+
+
+ Registration Update – UAE Stats App
+
+
+
+
+
+
+
+
+
+
+
+ تمت الموافقة على التسجيل - إحصاءات الإمارات العربية المتحدة
+ Registration Approved – UAE Statistics App
+
+ |
+
+
+
+
+
+
+ Dear %s,
+ We are pleased to inform you that your registration with UAE Stats app has been approved. You can now log in using the credentials that you had created.
+
+ Please access your account using the following link: Login.
+
+ If you have any questions or believe this decision was made in error, please feel free to contact us for further clarification.
+ |
+
+ عزيزي %s،
+ يسرنا إبلاغك بأنه قد تمت الموافقة على تسجيلك في تطبيق إحصاءات الإمارات. يمكنك الآن تسجيل الدخول باستخدام بيانات الاعتماد التي أنشأتها.
+
+
+ يرجى الوصول إلى حسابك عبر الرابط التالي تسجيل الدخول.
+
+ إذا كانت لديك أي استفسارات أو كنت تعتقد أن هذا القرار خاطئ، فلا تتردد في التواصل معنا لمزيد من التوضيح.
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+
+ تنبيه: هذه الرسالة الإلكترونية و أيٌ من مرفقاتها قد تحتوي على معلومات سرية وهامة موجهه للشخص/الأشخاص المعنيين وعليه يرجى من المتلقي في حال تلقي الرسالة الإلكترونية عن طريق الخطأ ولم يكن المعني بها، إخطار المرسل وحذفها من بريده الإلكتروني و كذلك إتلاف أي نسخ مطبوعة عنها حيث أنه يحظر عليه قراءة ونسخ ونشر أو توزيع أو استخدام هذه الرسالة إلكترونية و أيٌ من مرفقاتها بأي شكل من الأشكال
+ |
+
+
+
+ Disclaimer: The information contained in and transmitted with this e-mail message is PRIVILEGED AND/OR CONFIDENTIAL.If you are not the intended recipient, or have received the message by error, please notify the sender via E-Mail or over the telephone and delete this e-mail. You are not authorized to read, copy, disseminate, distribute or use this E-Mail or any of its attachments in any way.
+ |
+
+
+ |
+
+
+
+
+ `, userName, userName)
+ } else if newStatus == "Denied" {
+ subject = "Registration Update – FCSC"
+ body = fmt.Sprintf(`
+
+
+
+
+
+ Registration Update – UAE Stats App
+
+
+
+
+
+
+
+
+
+ تحديث التسجيل – تطبيق إحصاءات الإمارات العربية المتحدة
+ Registration Update – UAE Stats App
+
+ |
+
+
+
+
+
+
+ Dear %s,
+ Thank you for registering with UAE Stats Mobile App. After careful review, we regret to inform you that your registration has not been approved at this time.
+
+ If you have any questions or believe this decision was made in error, please feel free to contact us for further clarification.
+
+ We appreciate your understanding and thank you for your interest.
+ |
+
+ عزيزي %s،
+ نشكرك على تسجيلك في تطبيق إحصاءات الإمارات للهواتف المحمولة. بعد مراجعة دقيقة، يؤسفنا إبلاغك بأنه لم تتم الموافقة على تسجيلك حتى الآن.
+
+ إذا كانت لديك أي أسئلة أو كنت تعتقد أن هذا القرار خاطئ، فلا تتردد في التواصل معنا لمزيد من التوضيح.
+
+ نقدّر تفهمك ونشكرك على اهتمامك.
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+
+ تنبيه: هذه الرسالة الإلكترونية و أيٌ من مرفقاتها قد تحتوي على معلومات سرية وهامة موجهه للشخص/الأشخاص المعنيين وعليه يرجى من المتلقي في حال تلقي الرسالة الإلكترونية عن طريق الخطأ ولم يكن المعني بها، إخطار المرسل وحذفها من بريده الإلكتروني و كذلك إتلاف أي نسخ مطبوعة عنها حيث أنه يحظر عليه قراءة ونسخ ونشر أو توزيع أو استخدام هذه الرسالة إلكترونية و أيٌ من مرفقاتها بأي شكل من الأشكال
+ |
+
+
+
+ Disclaimer: The information contained in and transmitted with this e-mail message is PRIVILEGED AND/OR CONFIDENTIAL.If you are not the intended recipient, or have received the message by error, please notify the sender via E-Mail or over the telephone and delete this e-mail. You are not authorized to read, copy, disseminate, distribute or use this E-Mail or any of its attachments in any way.
+ |
+
+
+ |
+
+
+
+
+ `, userName, userName)
+ } else {
+ // If the status is neither "Approved" nor "Denied", skip sending an email
+ return nil
+ }
+
+ // Create and send the email
+ message := &mailer.Message{
+ From: mail.Address{
+ Name: "FCSC",
+ Address: app.Settings().Meta.SenderAddress,
+ },
+ To: []mail.Address{
+ {
+ Name: userName,
+ Address: userEmail,
+ },
+ },
+ Subject: subject,
+ HTML: body,
+ }
+
+ err := app.NewMailClient().Send(message)
+ if err != nil {
+ return fmt.Errorf("failed to send email: %v", err)
+ }
+
+ log.Printf("Status change email sent successfully to: %s", userEmail)
+ return nil
+}
diff --git a/pb/utils/calculation.go b/pb/utils/calculation.go
new file mode 100755
index 0000000..b52680b
--- /dev/null
+++ b/pb/utils/calculation.go
@@ -0,0 +1,825 @@
+package utils
+
+import (
+ "encoding/json"
+ "errors"
+ "fmt"
+ "math"
+ "regexp"
+ "sort"
+ "strconv"
+ "strings"
+)
+
+// Observation struct with json.Number for flexible value handling
+type Observation struct {
+ ObsKey map[string]string `json:"ObsKey"`
+ ObsValue struct {
+ Value json.Number `json:"Value"`
+ } `json:"ObsValue"`
+}
+
+// ------------------------------------------------------------ card calculation---------------------------------------------------
+type GroupByAndSum struct {
+ GroupByAndSum string `json:"groupby_and_sum"`
+ GetTop int `json:"get_top"`
+ Conversion int `json:"conversion"`
+}
+type CountCalculation struct {
+ Key string `json:"key"`
+ GetCountOf string `json:"get_count_of"`
+}
+type CardCalculationRequest struct {
+ Formula string `json:"formula"`
+ RecordCount string `json:"record_count"`
+ RecodeIndex string `json:"record_index"`
+ RecordKey string `json:"record_key"`
+ AdditionalRecordKey string `json:"additional_record_key"`
+ NumberFormat string `json:"number_format"`
+ Conversion string `json:"conversion"`
+ GroupByAndSum GroupByAndSum `json:"groupby_and_sum"`
+ CountCalculation CountCalculation `json:"count_calculation"`
+}
+
+func CardCalculation(data []Observation, req CardCalculationRequest) (map[string]string, error) {
+ // Sort the data in descending order based on TimePeriod
+ sort.Slice(data, func(i, j int) bool {
+ return data[i].ObsKey["TIME_PERIOD"] > data[j].ObsKey["TIME_PERIOD"]
+ })
+
+ var selectedData []Observation
+ if req.RecodeIndex != "" {
+
+ if req.RecodeIndex == "last" {
+ index := len(data)
+ if index < 0 || index >= len(data) {
+ selectedData = []Observation{}
+ } else {
+ selectedData = []Observation{data[index]}
+ }
+
+ } else {
+ // Convert RecodeIndex to an integer
+ index, err := strconv.Atoi(req.RecodeIndex)
+ if err != nil || index < 0 || index >= len(data) {
+ selectedData = []Observation{}
+ } else {
+ selectedData = []Observation{data[index]}
+ }
+
+ }
+
+ } else {
+ // Determine the number of records to use
+
+ if req.RecordCount == "all" {
+ if len(data) > 0 {
+ selectedData = data
+ } else {
+ selectedData = []Observation{}
+ }
+ } else if req.RecordCount == "first_pair" {
+ if len(data) >= 2 {
+ selectedData = data[:2]
+ } else {
+ selectedData = []Observation{}
+ }
+ } else if req.RecordCount == "second_pair" {
+ if len(data) >= 3 {
+ selectedData = data[1:3]
+ } else {
+ selectedData = []Observation{}
+ }
+ } else {
+ n := len(data) // array leangth
+ var err error
+ n, err = strconv.Atoi(req.RecordCount)
+ if err != nil || n >= len(data) {
+ // return nil, errors.New("invalid record count");
+ selectedData = []Observation{}
+ } else {
+ selectedData = data[:n]
+ }
+
+ }
+
+ }
+
+ var result float64
+ switch req.Formula {
+ case "none":
+ result = none(selectedData)
+ case "total":
+ result = sum(selectedData)
+ case "average":
+ result = average(selectedData)
+ case "highest":
+ result = highest(selectedData)
+ case "lowest":
+ result = lowest(selectedData)
+ case "different":
+ result = difference(selectedData)
+ case "groupby_and_sum":
+ customCalculationReq := req.GroupByAndSum
+
+ var chartCustomCalculationRequest ChartCalculationRequest
+
+ jsonData, err := json.Marshal(customCalculationReq)
+ if err != nil {
+ fmt.Println("Error:", err)
+ }
+
+ err = json.Unmarshal(jsonData, &chartCustomCalculationRequest)
+ if err != nil {
+ fmt.Println("Error:", err)
+ }
+
+ selectedData, err = CalculateGroupedSum(selectedData, chartCustomCalculationRequest)
+ if err != nil {
+ fmt.Println("Error:", err)
+ }
+
+ if len(selectedData) > 0 {
+ value, err := selectedData[0].ObsValue.Value.Float64()
+ if err == nil {
+ result = value
+ } else {
+ fmt.Println("Error converting first observation value to float64:", err)
+ }
+ } else {
+ fmt.Println("No observations returned from CalculateGroupedSum")
+ }
+ case "count_calculation":
+ countCalculationReq := req.CountCalculation
+
+ var cardCountCalculationRequest CountCalculation
+
+ jsonData, err := json.Marshal(countCalculationReq)
+ if err != nil {
+ fmt.Println("Error:", err)
+ }
+
+ err = json.Unmarshal(jsonData, &cardCountCalculationRequest)
+ if err != nil {
+ fmt.Println("Error:", err)
+ }
+
+ selectedData, err = CalculateCount(selectedData, cardCountCalculationRequest)
+ if err != nil {
+ fmt.Println("Error:", err)
+ }
+
+ if len(selectedData) > 0 {
+ result = float64(len(selectedData))
+ selectedData = selectedData[:1]
+ } else {
+ fmt.Println("No observations returned from CalculateGroupedSum")
+ }
+
+ default:
+ return nil, errors.New("invalid formula")
+ }
+
+ convertedValue := applyConversion(result, req.Conversion, req.NumberFormat)
+
+ displayValue := extractRecordKeyValue(selectedData, req.RecordKey, req.AdditionalRecordKey, req.Formula, result)
+
+ color := ""
+ if req.Formula == "different" || req.Conversion == "%" {
+ // Remove the percentage sign if present
+ convertedValueStr := strings.TrimSuffix(convertedValue, "%")
+
+ // Convert to float
+ convertedValue, err := strconv.ParseFloat(convertedValueStr, 64)
+ if err != nil {
+ return nil, err // Handle error if conversion fails
+ }
+ if convertedValue > 0 {
+ color = "#11AF22"
+ } else if convertedValue < 0 {
+ color = "#D83731"
+ }
+ }
+
+ return map[string]string{
+ "value": convertedValue,
+ "display_value": displayValue,
+ "calculation": req.Formula,
+ "font_color": color,
+ }, nil
+}
+
+// Helper function to convert json.Number to float64 safely
+func getFloatValue(num json.Number) float64 {
+ val, err := num.Float64()
+ if err != nil {
+ fmt.Println("Error converting value:", err)
+ return 0
+ }
+ return val
+}
+
+func none(data []Observation) float64 {
+ total := 0.0
+ for _, obs := range data {
+ total += getFloatValue(obs.ObsValue.Value)
+ }
+ return total
+}
+
+func sum(data []Observation) float64 {
+ total := 0.0
+ for _, obs := range data {
+ total += getFloatValue(obs.ObsValue.Value)
+ }
+ return total
+}
+
+func average(data []Observation) float64 {
+ if len(data) == 0 {
+ return 0
+ }
+ return sum(data) / float64(len(data))
+}
+
+func highest(data []Observation) float64 {
+ if len(data) == 0 {
+ return 0
+ }
+
+ max := getFloatValue(data[0].ObsValue.Value)
+ for _, obs := range data[1:] {
+ val := getFloatValue(obs.ObsValue.Value)
+ if val > max {
+ max = val
+ }
+ }
+ return max
+
+}
+
+func lowest(data []Observation) float64 {
+ if len(data) == 0 {
+ return 0
+ }
+
+ min := getFloatValue(data[0].ObsValue.Value)
+ for _, obs := range data {
+ val := getFloatValue(obs.ObsValue.Value)
+ if val < min {
+ min = val
+ }
+ }
+ return min
+}
+
+func difference(data []Observation) float64 {
+ if len(data) < 2 {
+ return 0
+ }
+ latest := getFloatValue(data[0].ObsValue.Value)
+ previous := getFloatValue(data[1].ObsValue.Value)
+ if previous == 0 {
+ return 0
+ }
+ return ((latest - previous) / previous) * 100
+}
+
+// Function to add commas to a number string
+func addCommas(num string, suffix string) string {
+ n := len(num)
+ if n <= 3 {
+ return num + suffix // Attach suffix directly if no commas needed
+ }
+ var sb strings.Builder
+ start := n % 3
+ if start == 0 {
+ start = 3
+ }
+ sb.WriteString(num[:start])
+
+ for i := start; i < n; i += 3 {
+ sb.WriteString("," + num[i:i+3])
+ }
+ return sb.String() + suffix
+}
+
+func formatNumberWithCommas(value float64, suffix string) string {
+ // Convert the value to a string with 2 decimal places
+ formatted := fmt.Sprintf("%.2f", value)
+
+ // Split integer and decimal parts
+ parts := strings.Split(formatted, ".")
+ integerPart := parts[0]
+ decimalPart := parts[1]
+
+ // Add commas to the integer part
+ var result strings.Builder
+ n := len(integerPart)
+ for i, c := range integerPart {
+ if i > 0 && (n-i)%3 == 0 {
+ result.WriteRune(',')
+ }
+ result.WriteRune(c)
+ }
+
+ // Append decimal part if needed
+ if decimalPart != "00" {
+ return result.String() + "." + decimalPart + suffix
+ }
+ return result.String() + suffix
+}
+
+func applyConversion(value float64, conversion string, numberFormat string) string {
+ if numberFormat == "T" {
+ value *= 1000000000000
+ } else if numberFormat == "B" {
+ value *= 1000000000
+ } else if numberFormat == "M" {
+ value *= 1000000
+ } else if numberFormat == "K" {
+ value *= 1000
+ }
+
+ // Helper function to format numbers with a thousands separator only in the default case
+ formatNumber := func(v float64, suffix string) string {
+ if suffix == "" || suffix == "K" || suffix == "M" || suffix == "B" || suffix == "T" {
+ if v == float64(int(v)) { // No decimal part
+ return addCommas(strconv.Itoa(int(v)), suffix)
+ }
+ return formatNumberWithCommas(v, suffix)
+ }
+ if v == float64(int(v)) { // No decimal part
+ return fmt.Sprintf("%d%s", int(v), suffix)
+ }
+ return fmt.Sprintf("%.2f%s", v, suffix)
+ }
+
+ switch conversion {
+ case "T":
+ return formatNumber(value/1000000000000, "T")
+ case "B":
+ return formatNumber(value/1000000000, "B")
+ case "M":
+ return formatNumber(value/1000000, "M")
+ case "K":
+ return formatNumber(value/1000, "K")
+ case "%":
+ return formatNumber(value, "%")
+ default:
+ return formatNumber(value, conversion)
+ }
+}
+
+func extractRecordKeyValue(data []Observation, key string, additionalkey string, formula string, targetValue float64) string {
+ if len(data) == 0 {
+ return ""
+ }
+
+ switch formula {
+ case "highest", "lowest", "none", "groupby_and_sum":
+ for _, obs := range data {
+ value, err := obs.ObsValue.Value.Float64()
+ if err == nil && value == targetValue {
+ if val, exists := obs.ObsKey[key]; exists {
+
+ // Check if additionalkey exists in obs.ObsKey
+ if val2, exists2 := obs.ObsKey[additionalkey]; exists2 {
+
+ return val + " - " + val2
+ } else {
+ return val
+ }
+ }
+ }
+ }
+
+ case "total", "average", "different":
+ if val1, exists1 := data[0].ObsKey[key]; exists1 {
+ if val2, exists2 := data[len(data)-1].ObsKey[key]; exists2 {
+ if val1 == val2 {
+ return val1
+ } else {
+ if val1 > val2 {
+ return val2 + " - " + val1
+ } else {
+ return val1 + " - " + val2
+ }
+ }
+ }
+ return val1
+ }
+ case "count_calculation":
+ for _, obs := range data {
+
+ if val, exists := obs.ObsKey[key]; exists {
+
+ // Check if additionalkey exists in obs.ObsKey
+ if val2, exists2 := obs.ObsKey[additionalkey]; exists2 {
+
+ return val + " - " + val2
+ } else {
+ return val
+ }
+ }
+
+ }
+ }
+
+ return ""
+}
+
+// ------------------------------------------------------------ chart calculation---------------------------------------------------
+type ChartCalculationRequest struct {
+ GroupByAndSum string `json:"groupby_and_sum"`
+ AdditionalForGroupByAndSum string `json:"additional_for_groupby_and_sum"`
+ GetTop string `json:"get_top"`
+ SortBy string `json:"sort_by"`
+ SortAction string `json:"sort_action"`
+ Conversion string `json:"conversion"`
+}
+
+func CalculateGroupedSum(observations []Observation, request ChartCalculationRequest) ([]Observation, error) {
+ // Map to store the summed values
+ summedData := make(map[string]float64)
+
+ if request.GroupByAndSum == "none" {
+ // If "none", treat each observation separately
+
+ // Collect observations with their original keys
+ var valueList []Observation
+
+ for _, obs := range observations {
+ value, err := obs.ObsValue.Value.Float64()
+ if err != nil {
+ return nil, fmt.Errorf("invalid number format: %v", err)
+ }
+
+ // Preserve the original ObsKey
+ valueList = append(valueList, Observation{
+ ObsKey: obs.ObsKey, // Keep all keys
+ ObsValue: struct {
+ Value json.Number `json:"Value"`
+ }{
+ Value: json.Number(strconv.FormatFloat(convertValue(value, request.Conversion), 'f', 6, 64)),
+ },
+ })
+ }
+
+ // Sort by value in descending order or given key
+ sortByKey := request.SortBy
+ var nonDigit = regexp.MustCompile(`\D`)
+ if sortByKey != "" {
+ // Sort by given key
+ sort.Slice(valueList, func(i, j int) bool {
+ val1Str := valueList[i].ObsKey[sortByKey]
+ val2Str := valueList[j].ObsKey[sortByKey]
+
+ // remove non-digits
+ val1Digits := nonDigit.ReplaceAllString(val1Str, "")
+ val2Digits := nonDigit.ReplaceAllString(val2Str, "")
+
+ val1, _ := strconv.ParseInt(val1Digits, 10, 64)
+ val2, _ := strconv.ParseInt(val2Digits, 10, 64)
+
+ sortActionKey := request.SortAction
+ if sortActionKey == "DESC" {
+ return val1 > val2 // Descending order
+ }
+ return val1 < val2 // Ascending order
+
+ })
+ } else {
+ // Default sorting by ObsValue.Value
+ sort.Slice(valueList, func(i, j int) bool {
+ val1, _ := valueList[i].ObsValue.Value.Float64()
+ val2, _ := valueList[j].ObsValue.Value.Float64()
+ return val1 > val2 // Descending order
+ })
+ }
+
+ // Get the top N values
+ topN, err := strconv.Atoi(request.GetTop)
+ if err != nil || topN <= 0 || topN > len(valueList) {
+ topN = len(valueList) // If invalid input, return all
+ }
+
+ return valueList[:topN], nil
+
+ } else {
+ // Iterate through observations and sum values based on GroupBy key and Additional key
+ for _, obs := range observations {
+ groupKey, exists := obs.ObsKey[request.GroupByAndSum]
+ if !exists {
+ continue // Skip if the key does not exist in ObsKey
+ }
+
+ additionalKey := ""
+ if request.AdditionalForGroupByAndSum != "" {
+ additionalKey, _ = obs.ObsKey[request.AdditionalForGroupByAndSum]
+ }
+
+ combinedKey := groupKey
+ if additionalKey != "" {
+ combinedKey += "_" + additionalKey
+ }
+
+ value, err := obs.ObsValue.Value.Float64()
+ if err != nil {
+ return nil, fmt.Errorf("invalid number format: %v", err)
+ }
+
+ summedData[combinedKey] += value
+ }
+ }
+
+ // Convert map to slice of Observation
+ var result []Observation
+ for key, sum := range summedData {
+ keyParts := strings.Split(key, "_")
+ obsKey := map[string]string{
+ request.GroupByAndSum: keyParts[0],
+ }
+ if len(keyParts) > 1 {
+ obsKey[request.AdditionalForGroupByAndSum] = keyParts[1]
+ }
+
+ result = append(result, Observation{
+ ObsKey: obsKey,
+ ObsValue: struct {
+ Value json.Number `json:"Value"`
+ }{
+ Value: json.Number(strconv.FormatFloat(convertValue(sum, request.Conversion), 'f', 6, 64)),
+ },
+ })
+ }
+
+ // Sort by value in descending order or given key
+ sortByKey := request.SortBy
+ var nonDigit = regexp.MustCompile(`\D`)
+ if sortByKey != "" {
+ // Sort by given key
+ sort.Slice(result, func(i, j int) bool {
+ val1Str := result[i].ObsKey[sortByKey]
+ val2Str := result[j].ObsKey[sortByKey]
+
+ // remove non-digits
+ val1Digits := nonDigit.ReplaceAllString(val1Str, "")
+ val2Digits := nonDigit.ReplaceAllString(val2Str, "")
+
+ val1, _ := strconv.ParseInt(val1Digits, 10, 64)
+ val2, _ := strconv.ParseInt(val2Digits, 10, 64)
+
+ sortActionKey := request.SortAction
+ if sortActionKey == "DESC" {
+ return val1 > val2 // Descending order
+ }
+ return val1 < val2 // Ascending order
+ })
+ } else {
+ // Default sorting by ObsValue.Value
+ sort.Slice(result, func(i, j int) bool {
+ val1, _ := result[i].ObsValue.Value.Float64()
+ val2, _ := result[j].ObsValue.Value.Float64()
+ return val1 > val2 // Descending order
+ })
+ }
+ // Sort by summed values in descending order
+ // sort.Slice(result, func(i, j int) bool {
+ // val1, _ := result[i].ObsValue.Value.Float64()
+ // val2, _ := result[j].ObsValue.Value.Float64()
+ // return val1 > val2 // Sort descending
+ // })
+
+ // Get the top N values
+ topN, err := strconv.Atoi(request.GetTop)
+ if err != nil || topN <= 0 || topN > len(result) {
+ topN = len(result) // If invalid input, return all
+ }
+
+ return result[:topN], nil
+}
+
+// CalculateGroupedSum processes the observations based on the given request
+// func CalculateGroupedSum(observations []Observation, request ChartCalculationRequest) ([]Observation, error) {
+
+// // Map to store the summed values
+// summedData := make(map[string]float64)
+
+// if request.GroupByAndSum == "none" {
+// // If "none", treat each observation separately
+// for _, obs := range observations {
+// value, err := obs.ObsValue.Value.Float64()
+// if err != nil {
+// return nil, fmt.Errorf("invalid number format: %v", err)
+// }
+// // Use a unique key (e.g., index-based) to preserve order
+// summedData[strconv.Itoa(len(summedData))] = value
+// }
+// } else {
+// // Iterate through observations and sum values based on GroupBy key
+// for _, obs := range observations {
+// groupKey, exists := obs.ObsKey[request.GroupByAndSum]
+// if !exists {
+// continue // Skip if the key does not exist in ObsKey
+// }
+
+// value, err := obs.ObsValue.Value.Float64()
+// if err != nil {
+// return nil, fmt.Errorf("invalid number format: %v", err)
+// }
+
+// summedData[groupKey] += value
+// }
+
+// }
+
+// // Convert map to slice of Observation
+// var result []Observation
+// for key, sum := range summedData {
+// result = append(result, Observation{
+// ObsKey: map[string]string{
+// request.GroupByAndSum: key,
+// },
+// ObsValue: struct {
+// Value json.Number `json:"Value"`
+// }{
+// // Value: json.Number(fmt.Sprintf("%.0f", sum)),
+// Value: json.Number(strconv.FormatFloat(convertValue(sum, request.Conversion), 'f', 6, 64)),
+// },
+// })
+// }
+
+// // Sort by summed values in descending order
+// sort.Slice(result, func(i, j int) bool {
+// val1, _ := result[i].ObsValue.Value.Float64()
+// val2, _ := result[j].ObsValue.Value.Float64()
+// return val1 > val2 // Sort descending
+// })
+
+// // Get the top N values
+// topN, err := strconv.Atoi(request.GetTop)
+// if err != nil || topN <= 0 || topN > len(result) {
+// topN = len(result) // If invalid input, return all
+// }
+
+// return result[:topN], nil
+// }
+
+// Convert values based on conversion type
+func convertValue(value float64, conversion string) float64 {
+ switch conversion {
+ case "T": // Trillion
+ return round(value/1000000000000, 2)
+ case "B": // Billion
+ return round(value/1000000000, 2)
+ case "M": // Million
+ return round(value/1000000, 2)
+ case "K": // Thousand
+ return round(value/1000, 2)
+ default: // No conversion
+ return round(value, 2)
+ }
+}
+
+// Function to round a float to 2 decimal places
+func round(val float64, precision int) float64 {
+ p := math.Pow(10, float64(precision))
+ return math.Round(val*p) / p
+}
+
+//------------------------------------------------------------- default filter ---------------------------------------------------
+
+func DefaultYearFilter(data []Observation, latestYearCount string) ([]Observation, error) {
+ // Convert latestYearCount to integer
+ yearCount, err := strconv.Atoi(latestYearCount)
+ if err != nil {
+ return nil, err
+ }
+ if yearCount == 0 {
+ yearCount = 1
+ }
+
+ // Sort the data in descending order based on TIME_PERIOD
+ sort.Slice(data, func(i, j int) bool {
+ return data[i].ObsKey["TIME_PERIOD"] > data[j].ObsKey["TIME_PERIOD"]
+ })
+
+ // Collect unique years in sorted order
+ uniqueYears := make([]string, 0)
+ yearMap := make(map[string]bool)
+
+ for _, item := range data {
+ year := item.ObsKey["TIME_PERIOD"]
+ if !yearMap[year] {
+ yearMap[year] = true
+ uniqueYears = append(uniqueYears, year)
+ }
+ }
+
+ // Adjust year count if there are fewer available years
+ if len(uniqueYears) < yearCount {
+ yearCount = len(uniqueYears) // Set to available years
+ }
+
+ // Create a set for only the required latest years
+ latestYears := make(map[string]bool)
+ for i := 0; i < yearCount; i++ {
+ latestYears[uniqueYears[i]] = true
+ }
+
+ // Filter the data to keep only records from the selected latest N years
+ var filteredData []Observation
+ for _, item := range data {
+ if latestYears[item.ObsKey["TIME_PERIOD"]] {
+ filteredData = append(filteredData, item)
+ }
+ }
+
+ return filteredData, nil
+}
+
+type Filter struct {
+ FilterKey string `json:"filter_key"`
+ FilterData []string `json:"filter_data"`
+}
+
+func FilterByMultipleKeys(data []Observation, filters []Filter) ([]Observation, error) {
+ var filteredData []Observation
+
+ // Convert filter conditions into a map for quick lookup
+ filterMap := make(map[string]map[string]bool)
+ for _, filter := range filters {
+ if len(filter.FilterData) == 0 {
+ continue // Skip empty filter_data
+ }
+ if filterMap[filter.FilterKey] == nil {
+ filterMap[filter.FilterKey] = make(map[string]bool)
+ }
+ for _, value := range filter.FilterData {
+ filterMap[filter.FilterKey][value] = true
+ }
+ }
+ fmt.Println("filterMap :", filterMap)
+ // Iterate through data and apply the filters
+ for _, item := range data {
+ matches := true
+ for key, allowedValues := range filterMap {
+ if _, exists := item.ObsKey[key]; exists {
+ if !allowedValues[item.ObsKey[key]] { // If value not in allowed list
+ matches = false
+ break
+ }
+ } else {
+ matches = false // Key not present in data
+ break
+ }
+ }
+
+ if matches {
+ filteredData = append(filteredData, item)
+ }
+ }
+
+ return filteredData, nil
+}
+
+//-------------------------------------------------------------- Count Calculation -------------------------------------------------
+
+func CalculateCount(observations []Observation, request CountCalculation) ([]Observation, error) {
+
+ if request.GetCountOf == "highest" || request.GetCountOf == "lowest" {
+ var extremeValue int
+ var filteredObservations []Observation
+ first := true
+ isHighest := request.GetCountOf == "highest"
+
+ for _, obs := range observations {
+ if valStr, exists := obs.ObsKey[request.Key]; exists {
+ val, err := strconv.Atoi(valStr)
+ if err != nil {
+ continue // Skip if conversion fails
+ }
+
+ if first || (isHighest && val > extremeValue) || (!isHighest && val < extremeValue) {
+ extremeValue = val
+ first = false
+ }
+ }
+ }
+
+ // Filter observations that match the extreme value
+ for _, obs := range observations {
+ if valStr, exists := obs.ObsKey[request.Key]; exists {
+ val, err := strconv.Atoi(valStr)
+ if err == nil && val == extremeValue {
+ filteredObservations = append(filteredObservations, obs)
+ }
+ }
+ }
+
+ return filteredObservations, nil
+ }
+
+ return nil, fmt.Errorf("unsupported get_count_of value: %s", request.GetCountOf)
+}
diff --git a/pb/utils/exclude_filter_data.go b/pb/utils/exclude_filter_data.go
new file mode 100755
index 0000000..ae5de08
--- /dev/null
+++ b/pb/utils/exclude_filter_data.go
@@ -0,0 +1,65 @@
+package utils
+
+type FilterJsonData struct {
+ Order int `json:"order"`
+ En string `json:"en"`
+ Ar string `json:"ar"`
+}
+
+type FilterGroup struct {
+ FilterKey string `json:"filter_key"`
+ FilterData []interface{} `json:"filter_data"`
+ FilterTextAndOrder FilterJsonData `json:"filter_text_and_order"`
+}
+
+// RemoveExcludedFilters removes specified filter_data values from filters.
+func RemoveExcludedFilters(filters []FilterGroup, exclusions []FilterGroup) []FilterGroup {
+ // Create a map for quick lookup of exclusion filter data
+ exclusionMap := make(map[string]map[interface{}]bool)
+
+ // Populate the exclusion map
+ for _, excl := range exclusions {
+ if _, exists := exclusionMap[excl.FilterKey]; !exists {
+ exclusionMap[excl.FilterKey] = make(map[interface{}]bool)
+ }
+ for _, value := range excl.FilterData {
+ exclusionMap[excl.FilterKey][value] = true
+ }
+ }
+
+ // Debug: Print exclusionMap to verify exclusions
+ // log.Println("Exclusion Map: ", exclusionMap)
+
+ // Process the filters and remove excluded values
+ var filteredFilters []FilterGroup
+
+ for _, filter := range filters {
+ if excludedValues, found := exclusionMap[filter.FilterKey]; found {
+ // Debug: Print current filter data and exclusions
+ // log.Printf("Checking filter: %s with data: %v", filter.FilterKey, filter.FilterData)
+
+ // Remove excluded values
+ var newFilterData []interface{}
+ for _, value := range filter.FilterData {
+ // Debug: Check if value is excluded
+ if _, exists := excludedValues[value]; exists {
+ // log.Printf("Excluding value: %v", value) // Debug log for excluded value
+ } else {
+ newFilterData = append(newFilterData, value)
+ }
+ }
+ if len(newFilterData) > 0 {
+ filter.FilterData = newFilterData
+ filteredFilters = append(filteredFilters, filter)
+ }
+ } else {
+ // No exclusions, add filter as is
+ filteredFilters = append(filteredFilters, filter)
+ }
+ }
+
+ // Debug: Print final filtered result
+ // log.Println("Filtered Filters: ", filteredFilters)
+
+ return filteredFilters
+}
diff --git a/pb/utils/translate_chart_data.go b/pb/utils/translate_chart_data.go
new file mode 100755
index 0000000..dac68a3
--- /dev/null
+++ b/pb/utils/translate_chart_data.go
@@ -0,0 +1,48 @@
+package utils
+
+// TranslateChartData processes chart data with language source data to produce the result based on the language key.
+func TranslateChartData(chartData []map[string]interface{}, languageSource []map[string]interface{}, langKey string) []map[string]interface{} {
+ // Helper function to find translation
+ findTranslation := func(key string, value string) string {
+ for _, langEntry := range languageSource {
+ if langEntry["key"] == key && langEntry["value"] == value {
+ if translatedValue, ok := langEntry[langKey]; ok {
+ return translatedValue.(string)
+ }
+ }
+ }
+ return value // Return the original value if no translation is found
+ }
+
+ // Extract unique translation keys from languageSource
+ translationKeys := map[string]bool{}
+ for _, langEntry := range languageSource {
+ if key, ok := langEntry["key"].(string); ok {
+ translationKeys[key] = true
+ }
+ }
+
+ // Process each chart data entry
+ result := []map[string]interface{}{}
+ for _, entry := range chartData {
+ obsKey := entry["ObsKey"].(map[string]interface{})
+ translatedObsKey := map[string]interface{}{}
+
+ // Translate fields in ObsKey dynamically based on extracted translation keys
+ for key, value := range obsKey {
+ if translationKeys[key] {
+ translatedObsKey[key] = findTranslation(key, value.(string))
+ } else {
+ translatedObsKey[key] = value
+ }
+ }
+
+ // Append the translated entry to the result
+ result = append(result, map[string]interface{}{
+ "ObsKey": translatedObsKey,
+ "ObsValue": entry["ObsValue"],
+ })
+ }
+
+ return result
+}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000.zip b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000.zip
new file mode 100644
index 0000000..cae8450
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000.zip differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/data.db b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/data.db
new file mode 100644
index 0000000..ec34a94
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/data.db differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/data.db-shm b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/data.db-shm
new file mode 100644
index 0000000..fe9ac28
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/data.db-shm differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/data.db-wal b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/data.db-wal
new file mode 100644
index 0000000..e69de29
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/logs.db b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/logs.db
new file mode 100644
index 0000000..02d5b3e
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/logs.db differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/logs.db-shm b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/logs.db-shm
new file mode 100644
index 0000000..fe9ac28
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/logs.db-shm differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/logs.db-wal b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/logs.db-wal
new file mode 100644
index 0000000..e69de29
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/35g5fuzn1qgp9k7/hcl8trfumjev4b1/fcsclogo_YsVOcx6yB1.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/35g5fuzn1qgp9k7/hcl8trfumjev4b1/fcsclogo_YsVOcx6yB1.png
new file mode 100644
index 0000000..09fff64
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/35g5fuzn1qgp9k7/hcl8trfumjev4b1/fcsclogo_YsVOcx6yB1.png differ
diff --git a/pb_data/storage/lwlx5jbczvvqidy/zujyknhlfsqk18f/average_length_of_stay_T8SOlq9IiT.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/35g5fuzn1qgp9k7/hcl8trfumjev4b1/fcsclogo_YsVOcx6yB1.png.attrs
old mode 100755
new mode 100644
similarity index 53%
rename from pb_data/storage/lwlx5jbczvvqidy/zujyknhlfsqk18f/average_length_of_stay_T8SOlq9IiT.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/35g5fuzn1qgp9k7/hcl8trfumjev4b1/fcsclogo_YsVOcx6yB1.png.attrs
index 033e2c9..6e4782f
--- a/pb_data/storage/lwlx5jbczvvqidy/zujyknhlfsqk18f/average_length_of_stay_T8SOlq9IiT.png.attrs
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/35g5fuzn1qgp9k7/hcl8trfumjev4b1/fcsclogo_YsVOcx6yB1.png.attrs
@@ -1 +1 @@
-{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"averageLengthOfStay.png"},"md5":"/wPtLtddRDkeFZxAQTJM/g=="}
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"FCSCLogo.png"},"md5":"64vKaJS7ySlwJ01MBaM7jA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/35g5fuzn1qgp9k7/hcl8trfumjev4b1/thumbs_fcsclogo_YsVOcx6yB1.png/100x100_fcsclogo_YsVOcx6yB1.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/35g5fuzn1qgp9k7/hcl8trfumjev4b1/thumbs_fcsclogo_YsVOcx6yB1.png/100x100_fcsclogo_YsVOcx6yB1.png
new file mode 100644
index 0000000..3540349
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/35g5fuzn1qgp9k7/hcl8trfumjev4b1/thumbs_fcsclogo_YsVOcx6yB1.png/100x100_fcsclogo_YsVOcx6yB1.png differ
diff --git a/pb_data/storage/lwlx5jbczvvqidy/zujyknhlfsqk18f/thumbs_average_length_of_stay_T8SOlq9IiT.png/100x100_average_length_of_stay_T8SOlq9IiT.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/35g5fuzn1qgp9k7/hcl8trfumjev4b1/thumbs_fcsclogo_YsVOcx6yB1.png/100x100_fcsclogo_YsVOcx6yB1.png.attrs
old mode 100755
new mode 100644
similarity index 67%
rename from pb_data/storage/lwlx5jbczvvqidy/zujyknhlfsqk18f/thumbs_average_length_of_stay_T8SOlq9IiT.png/100x100_average_length_of_stay_T8SOlq9IiT.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/35g5fuzn1qgp9k7/hcl8trfumjev4b1/thumbs_fcsclogo_YsVOcx6yB1.png/100x100_fcsclogo_YsVOcx6yB1.png.attrs
index 2218571..79dc3ef
--- a/pb_data/storage/lwlx5jbczvvqidy/zujyknhlfsqk18f/thumbs_average_length_of_stay_T8SOlq9IiT.png/100x100_average_length_of_stay_T8SOlq9IiT.png.attrs
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/35g5fuzn1qgp9k7/hcl8trfumjev4b1/thumbs_fcsclogo_YsVOcx6yB1.png/100x100_fcsclogo_YsVOcx6yB1.png.attrs
@@ -1 +1 @@
-{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"wm5GWTiDEeBU/0WxUDPNLQ=="}
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"+vM8FbqC90cnR9oH7giBtg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/0bf5itz4px7443r/1000287684_GIE0TjrE8f.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/0bf5itz4px7443r/1000287684_GIE0TjrE8f.jpg
new file mode 100644
index 0000000..4e8841a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/0bf5itz4px7443r/1000287684_GIE0TjrE8f.jpg differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/0bf5itz4px7443r/1000287684_GIE0TjrE8f.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/0bf5itz4px7443r/1000287684_GIE0TjrE8f.jpg.attrs
new file mode 100644
index 0000000..d1210f6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/0bf5itz4px7443r/1000287684_GIE0TjrE8f.jpg.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/jpeg","user.metadata":{"original-filename":"1000287684.jpg"},"md5":"UA2VEKUvUpv91ELI1ayF2A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/0bf5itz4px7443r/thumbs_1000287684_GIE0TjrE8f.jpg/100x100_1000287684_GIE0TjrE8f.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/0bf5itz4px7443r/thumbs_1000287684_GIE0TjrE8f.jpg/100x100_1000287684_GIE0TjrE8f.jpg
new file mode 100644
index 0000000..95921c0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/0bf5itz4px7443r/thumbs_1000287684_GIE0TjrE8f.jpg/100x100_1000287684_GIE0TjrE8f.jpg differ
diff --git a/pb_data/storage/35g5fuzn1qgp9k7/64keeft2kp1d2s8/file_gN24gjKtpy.enc.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/0bf5itz4px7443r/thumbs_1000287684_GIE0TjrE8f.jpg/100x100_1000287684_GIE0TjrE8f.jpg.attrs
old mode 100755
new mode 100644
similarity index 56%
rename from pb_data/storage/35g5fuzn1qgp9k7/64keeft2kp1d2s8/file_gN24gjKtpy.enc.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/0bf5itz4px7443r/thumbs_1000287684_GIE0TjrE8f.jpg/100x100_1000287684_GIE0TjrE8f.jpg.attrs
index 10831b6..f782280
--- a/pb_data/storage/35g5fuzn1qgp9k7/64keeft2kp1d2s8/file_gN24gjKtpy.enc.attrs
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/0bf5itz4px7443r/thumbs_1000287684_GIE0TjrE8f.jpg/100x100_1000287684_GIE0TjrE8f.jpg.attrs
@@ -1 +1 @@
-{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/jpeg","user.metadata":{"original-filename":"file.enc"},"md5":"vBw+7shsc/yBqxUxLwI37Q=="}
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/jpeg","user.metadata":null,"md5":"YpRYnPvJR9Rlra27TIX/QQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9he2chu3u2ax961/image_picker_f6015_e16_a4_c4_491_d_8_cff_ce71669_af99_c_65295_00000_c0776_ed3_d83_7TgdZQydJ9.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9he2chu3u2ax961/image_picker_f6015_e16_a4_c4_491_d_8_cff_ce71669_af99_c_65295_00000_c0776_ed3_d83_7TgdZQydJ9.jpg
new file mode 100644
index 0000000..52e76ae
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9he2chu3u2ax961/image_picker_f6015_e16_a4_c4_491_d_8_cff_ce71669_af99_c_65295_00000_c0776_ed3_d83_7TgdZQydJ9.jpg differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9he2chu3u2ax961/image_picker_f6015_e16_a4_c4_491_d_8_cff_ce71669_af99_c_65295_00000_c0776_ed3_d83_7TgdZQydJ9.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9he2chu3u2ax961/image_picker_f6015_e16_a4_c4_491_d_8_cff_ce71669_af99_c_65295_00000_c0776_ed3_d83_7TgdZQydJ9.jpg.attrs
new file mode 100644
index 0000000..5f764c4
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9he2chu3u2ax961/image_picker_f6015_e16_a4_c4_491_d_8_cff_ce71669_af99_c_65295_00000_c0776_ed3_d83_7TgdZQydJ9.jpg.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/jpeg","user.metadata":{"original-filename":"image_picker_F6015E16-A4C4-491D-8CFF-CE71669AF99C-65295-00000C0776ED3D83.jpg"},"md5":"+Z1kSCcjj2mBOX3zIuyk4A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9he2chu3u2ax961/thumbs_image_picker_f6015_e16_a4_c4_491_d_8_cff_ce71669_af99_c_65295_00000_c0776_ed3_d83_7TgdZQydJ9.jpg/100x100_image_picker_f6015_e16_a4_c4_491_d_8_cff_ce71669_af99_c_65295_00000_c0776_ed3_d83_7TgdZQydJ9.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9he2chu3u2ax961/thumbs_image_picker_f6015_e16_a4_c4_491_d_8_cff_ce71669_af99_c_65295_00000_c0776_ed3_d83_7TgdZQydJ9.jpg/100x100_image_picker_f6015_e16_a4_c4_491_d_8_cff_ce71669_af99_c_65295_00000_c0776_ed3_d83_7TgdZQydJ9.jpg
new file mode 100644
index 0000000..c156179
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9he2chu3u2ax961/thumbs_image_picker_f6015_e16_a4_c4_491_d_8_cff_ce71669_af99_c_65295_00000_c0776_ed3_d83_7TgdZQydJ9.jpg/100x100_image_picker_f6015_e16_a4_c4_491_d_8_cff_ce71669_af99_c_65295_00000_c0776_ed3_d83_7TgdZQydJ9.jpg differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9he2chu3u2ax961/thumbs_image_picker_f6015_e16_a4_c4_491_d_8_cff_ce71669_af99_c_65295_00000_c0776_ed3_d83_7TgdZQydJ9.jpg/100x100_image_picker_f6015_e16_a4_c4_491_d_8_cff_ce71669_af99_c_65295_00000_c0776_ed3_d83_7TgdZQydJ9.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9he2chu3u2ax961/thumbs_image_picker_f6015_e16_a4_c4_491_d_8_cff_ce71669_af99_c_65295_00000_c0776_ed3_d83_7TgdZQydJ9.jpg/100x100_image_picker_f6015_e16_a4_c4_491_d_8_cff_ce71669_af99_c_65295_00000_c0776_ed3_d83_7TgdZQydJ9.jpg.attrs
new file mode 100644
index 0000000..bab428e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9he2chu3u2ax961/thumbs_image_picker_f6015_e16_a4_c4_491_d_8_cff_ce71669_af99_c_65295_00000_c0776_ed3_d83_7TgdZQydJ9.jpg/100x100_image_picker_f6015_e16_a4_c4_491_d_8_cff_ce71669_af99_c_65295_00000_c0776_ed3_d83_7TgdZQydJ9.jpg.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/jpeg","user.metadata":null,"md5":"G1aysWz6YE5JVQj40dEjOw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9j23fnzkm6yhjqr/ammar_F2rxMzUbCW.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9j23fnzkm6yhjqr/ammar_F2rxMzUbCW.jpg
new file mode 100644
index 0000000..44f2a74
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9j23fnzkm6yhjqr/ammar_F2rxMzUbCW.jpg differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9j23fnzkm6yhjqr/ammar_F2rxMzUbCW.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9j23fnzkm6yhjqr/ammar_F2rxMzUbCW.jpg.attrs
new file mode 100644
index 0000000..e6ab4b0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9j23fnzkm6yhjqr/ammar_F2rxMzUbCW.jpg.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/jpeg","user.metadata":{"original-filename":"Ammar.jpg"},"md5":"vPoShsb0FqX7ibTohKag8g=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9j23fnzkm6yhjqr/thumbs_ammar_F2rxMzUbCW.jpg/100x100_ammar_F2rxMzUbCW.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9j23fnzkm6yhjqr/thumbs_ammar_F2rxMzUbCW.jpg/100x100_ammar_F2rxMzUbCW.jpg
new file mode 100644
index 0000000..d69c7c6
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9j23fnzkm6yhjqr/thumbs_ammar_F2rxMzUbCW.jpg/100x100_ammar_F2rxMzUbCW.jpg differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9j23fnzkm6yhjqr/thumbs_ammar_F2rxMzUbCW.jpg/100x100_ammar_F2rxMzUbCW.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9j23fnzkm6yhjqr/thumbs_ammar_F2rxMzUbCW.jpg/100x100_ammar_F2rxMzUbCW.jpg.attrs
new file mode 100644
index 0000000..ebf54ff
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/9j23fnzkm6yhjqr/thumbs_ammar_F2rxMzUbCW.jpg/100x100_ammar_F2rxMzUbCW.jpg.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/jpeg","user.metadata":null,"md5":"mjcg7GRHcZqGTNEVkc9nEg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/ydfwjpdk9afx49m/1000122419_hQ7CZdAFzg.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/ydfwjpdk9afx49m/1000122419_hQ7CZdAFzg.jpg
new file mode 100644
index 0000000..8d6dd3e
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/ydfwjpdk9afx49m/1000122419_hQ7CZdAFzg.jpg differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/ydfwjpdk9afx49m/1000122419_hQ7CZdAFzg.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/ydfwjpdk9afx49m/1000122419_hQ7CZdAFzg.jpg.attrs
new file mode 100644
index 0000000..5dc55d3
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/ydfwjpdk9afx49m/1000122419_hQ7CZdAFzg.jpg.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/jpeg","user.metadata":{"original-filename":"1000122419.jpg"},"md5":"qXmhDbfI1nZmlpmZJfRrBw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/ydfwjpdk9afx49m/thumbs_1000122419_hQ7CZdAFzg.jpg/100x100_1000122419_hQ7CZdAFzg.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/ydfwjpdk9afx49m/thumbs_1000122419_hQ7CZdAFzg.jpg/100x100_1000122419_hQ7CZdAFzg.jpg
new file mode 100644
index 0000000..fc73af5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/ydfwjpdk9afx49m/thumbs_1000122419_hQ7CZdAFzg.jpg/100x100_1000122419_hQ7CZdAFzg.jpg differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/ydfwjpdk9afx49m/thumbs_1000122419_hQ7CZdAFzg.jpg/100x100_1000122419_hQ7CZdAFzg.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/ydfwjpdk9afx49m/thumbs_1000122419_hQ7CZdAFzg.jpg/100x100_1000122419_hQ7CZdAFzg.jpg.attrs
new file mode 100644
index 0000000..bb00740
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/_pb_users_auth_/ydfwjpdk9afx49m/thumbs_1000122419_hQ7CZdAFzg.jpg/100x100_1000122419_hQ7CZdAFzg.jpg.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/jpeg","user.metadata":null,"md5":"aKkMzCDVLRptiYrzRiV6Kw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/08uk8a7n2omayt0/kpi_icon_oil_export_ZcMNQFjKl3.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/08uk8a7n2omayt0/kpi_icon_oil_export_ZcMNQFjKl3.png
new file mode 100644
index 0000000..57076f3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/08uk8a7n2omayt0/kpi_icon_oil_export_ZcMNQFjKl3.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/08uk8a7n2omayt0/kpi_icon_oil_export_ZcMNQFjKl3.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/08uk8a7n2omayt0/kpi_icon_oil_export_ZcMNQFjKl3.png.attrs
new file mode 100644
index 0000000..1b80daf
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/08uk8a7n2omayt0/kpi_icon_oil_export_ZcMNQFjKl3.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OilExport.png"},"md5":"N0yA93/49HeIhAyNKrrPHA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/08uk8a7n2omayt0/thumbs_kpi_icon_oil_export_ZcMNQFjKl3.png/100x100_kpi_icon_oil_export_ZcMNQFjKl3.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/08uk8a7n2omayt0/thumbs_kpi_icon_oil_export_ZcMNQFjKl3.png/100x100_kpi_icon_oil_export_ZcMNQFjKl3.png
new file mode 100644
index 0000000..6bd2f64
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/08uk8a7n2omayt0/thumbs_kpi_icon_oil_export_ZcMNQFjKl3.png/100x100_kpi_icon_oil_export_ZcMNQFjKl3.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/08uk8a7n2omayt0/thumbs_kpi_icon_oil_export_ZcMNQFjKl3.png/100x100_kpi_icon_oil_export_ZcMNQFjKl3.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/08uk8a7n2omayt0/thumbs_kpi_icon_oil_export_ZcMNQFjKl3.png/100x100_kpi_icon_oil_export_ZcMNQFjKl3.png.attrs
new file mode 100644
index 0000000..366daa6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/08uk8a7n2omayt0/thumbs_kpi_icon_oil_export_ZcMNQFjKl3.png/100x100_kpi_icon_oil_export_ZcMNQFjKl3.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"QtQNpYi5me0OVZxMW9h2Zg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0a36ikf8xufiemq/female_NXVQ59mrgW.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0a36ikf8xufiemq/female_NXVQ59mrgW.png
new file mode 100644
index 0000000..e328a93
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0a36ikf8xufiemq/female_NXVQ59mrgW.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0a36ikf8xufiemq/female_NXVQ59mrgW.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0a36ikf8xufiemq/female_NXVQ59mrgW.png.attrs
new file mode 100644
index 0000000..3c217ec
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0a36ikf8xufiemq/female_NXVQ59mrgW.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"female.png"},"md5":"LHr3qNvXccxDzGNR1QwAiA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0a36ikf8xufiemq/thumbs_female_NXVQ59mrgW.png/100x100_female_NXVQ59mrgW.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0a36ikf8xufiemq/thumbs_female_NXVQ59mrgW.png/100x100_female_NXVQ59mrgW.png
new file mode 100644
index 0000000..4e9492f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0a36ikf8xufiemq/thumbs_female_NXVQ59mrgW.png/100x100_female_NXVQ59mrgW.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0a36ikf8xufiemq/thumbs_female_NXVQ59mrgW.png/100x100_female_NXVQ59mrgW.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0a36ikf8xufiemq/thumbs_female_NXVQ59mrgW.png/100x100_female_NXVQ59mrgW.png.attrs
new file mode 100644
index 0000000..72ab7b2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0a36ikf8xufiemq/thumbs_female_NXVQ59mrgW.png/100x100_female_NXVQ59mrgW.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"6qNv8XkjaWR5lPp91glyrw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/kpi_icon_gdp_hpd1POk2a4.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/kpi_icon_gdp_hpd1POk2a4.png
new file mode 100644
index 0000000..00a7246
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/kpi_icon_gdp_hpd1POk2a4.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/kpi_icon_gdp_hpd1POk2a4.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/kpi_icon_gdp_hpd1POk2a4.png.attrs
new file mode 100644
index 0000000..aeed7a6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/kpi_icon_gdp_hpd1POk2a4.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDP.png"},"md5":"GbjBCTBkQMjDA/ePurXQ4w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/thumbs_kpi_icon_gdp_hpd1POk2a4.png/100x100_kpi_icon_gdp_hpd1POk2a4.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/thumbs_kpi_icon_gdp_hpd1POk2a4.png/100x100_kpi_icon_gdp_hpd1POk2a4.png
new file mode 100644
index 0000000..1f4a9d5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/thumbs_kpi_icon_gdp_hpd1POk2a4.png/100x100_kpi_icon_gdp_hpd1POk2a4.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/thumbs_kpi_icon_gdp_hpd1POk2a4.png/100x100_kpi_icon_gdp_hpd1POk2a4.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/thumbs_kpi_icon_gdp_hpd1POk2a4.png/100x100_kpi_icon_gdp_hpd1POk2a4.png.attrs
new file mode 100644
index 0000000..1c118ca
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/thumbs_kpi_icon_gdp_hpd1POk2a4.png/100x100_kpi_icon_gdp_hpd1POk2a4.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"oR1IfXTRW05tuALKgeFtkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0p04zuoobjy2ks1/kpi_icon_gdp_5STiqgZegA.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0p04zuoobjy2ks1/kpi_icon_gdp_5STiqgZegA.png
new file mode 100644
index 0000000..00a7246
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0p04zuoobjy2ks1/kpi_icon_gdp_5STiqgZegA.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0p04zuoobjy2ks1/kpi_icon_gdp_5STiqgZegA.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0p04zuoobjy2ks1/kpi_icon_gdp_5STiqgZegA.png.attrs
new file mode 100644
index 0000000..aeed7a6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0p04zuoobjy2ks1/kpi_icon_gdp_5STiqgZegA.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDP.png"},"md5":"GbjBCTBkQMjDA/ePurXQ4w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0p04zuoobjy2ks1/thumbs_kpi_icon_gdp_5STiqgZegA.png/100x100_kpi_icon_gdp_5STiqgZegA.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0p04zuoobjy2ks1/thumbs_kpi_icon_gdp_5STiqgZegA.png/100x100_kpi_icon_gdp_5STiqgZegA.png
new file mode 100644
index 0000000..1f4a9d5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0p04zuoobjy2ks1/thumbs_kpi_icon_gdp_5STiqgZegA.png/100x100_kpi_icon_gdp_5STiqgZegA.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0p04zuoobjy2ks1/thumbs_kpi_icon_gdp_5STiqgZegA.png/100x100_kpi_icon_gdp_5STiqgZegA.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0p04zuoobjy2ks1/thumbs_kpi_icon_gdp_5STiqgZegA.png/100x100_kpi_icon_gdp_5STiqgZegA.png.attrs
new file mode 100644
index 0000000..1c118ca
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0p04zuoobjy2ks1/thumbs_kpi_icon_gdp_5STiqgZegA.png/100x100_kpi_icon_gdp_5STiqgZegA.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"oR1IfXTRW05tuALKgeFtkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/kpi_icon_natural_reserves_VVFBElcnvZ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/kpi_icon_natural_reserves_VVFBElcnvZ.png
new file mode 100644
index 0000000..c600cfa
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/kpi_icon_natural_reserves_VVFBElcnvZ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/kpi_icon_natural_reserves_VVFBElcnvZ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/kpi_icon_natural_reserves_VVFBElcnvZ.png.attrs
new file mode 100644
index 0000000..01764dd
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/kpi_icon_natural_reserves_VVFBElcnvZ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-NaturalReserves.png"},"md5":"EidU5zyMspc/3lI2BgLvkg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/thumbs_kpi_icon_natural_reserves_VVFBElcnvZ.png/100x100_kpi_icon_natural_reserves_VVFBElcnvZ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/thumbs_kpi_icon_natural_reserves_VVFBElcnvZ.png/100x100_kpi_icon_natural_reserves_VVFBElcnvZ.png
new file mode 100644
index 0000000..3e3d54c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/thumbs_kpi_icon_natural_reserves_VVFBElcnvZ.png/100x100_kpi_icon_natural_reserves_VVFBElcnvZ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/thumbs_kpi_icon_natural_reserves_VVFBElcnvZ.png/100x100_kpi_icon_natural_reserves_VVFBElcnvZ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/thumbs_kpi_icon_natural_reserves_VVFBElcnvZ.png/100x100_kpi_icon_natural_reserves_VVFBElcnvZ.png.attrs
new file mode 100644
index 0000000..9058a16
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/thumbs_kpi_icon_natural_reserves_VVFBElcnvZ.png/100x100_kpi_icon_natural_reserves_VVFBElcnvZ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"uiU2k7ZNxToo4t8GzxMZpg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/kpi_icon_crops_area_S0HWXobmaa.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/kpi_icon_crops_area_S0HWXobmaa.png
new file mode 100644
index 0000000..a3023be
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/kpi_icon_crops_area_S0HWXobmaa.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/kpi_icon_crops_area_S0HWXobmaa.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/kpi_icon_crops_area_S0HWXobmaa.png.attrs
new file mode 100644
index 0000000..4d9ca98
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/kpi_icon_crops_area_S0HWXobmaa.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-CropsArea.png"},"md5":"6BWT6i/rBlR1hej7AA6Gkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/thumbs_kpi_icon_crops_area_S0HWXobmaa.png/100x100_kpi_icon_crops_area_S0HWXobmaa.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/thumbs_kpi_icon_crops_area_S0HWXobmaa.png/100x100_kpi_icon_crops_area_S0HWXobmaa.png
new file mode 100644
index 0000000..250b3e0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/thumbs_kpi_icon_crops_area_S0HWXobmaa.png/100x100_kpi_icon_crops_area_S0HWXobmaa.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/thumbs_kpi_icon_crops_area_S0HWXobmaa.png/100x100_kpi_icon_crops_area_S0HWXobmaa.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/thumbs_kpi_icon_crops_area_S0HWXobmaa.png/100x100_kpi_icon_crops_area_S0HWXobmaa.png.attrs
new file mode 100644
index 0000000..ae931b0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/thumbs_kpi_icon_crops_area_S0HWXobmaa.png/100x100_kpi_icon_crops_area_S0HWXobmaa.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"srBd6fWEm86XwUV6j55geA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/149pet96vdg3bda/kpi_icon_occupancy_rate_wbL7QaVVLM.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/149pet96vdg3bda/kpi_icon_occupancy_rate_wbL7QaVVLM.png
new file mode 100644
index 0000000..4b5ae6b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/149pet96vdg3bda/kpi_icon_occupancy_rate_wbL7QaVVLM.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/149pet96vdg3bda/kpi_icon_occupancy_rate_wbL7QaVVLM.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/149pet96vdg3bda/kpi_icon_occupancy_rate_wbL7QaVVLM.png.attrs
new file mode 100644
index 0000000..b16288e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/149pet96vdg3bda/kpi_icon_occupancy_rate_wbL7QaVVLM.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OccupancyRate.png"},"md5":"Cs+jJNffYFWAhBqJwmKX0A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/149pet96vdg3bda/thumbs_kpi_icon_occupancy_rate_wbL7QaVVLM.png/100x100_kpi_icon_occupancy_rate_wbL7QaVVLM.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/149pet96vdg3bda/thumbs_kpi_icon_occupancy_rate_wbL7QaVVLM.png/100x100_kpi_icon_occupancy_rate_wbL7QaVVLM.png
new file mode 100644
index 0000000..1f6d56d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/149pet96vdg3bda/thumbs_kpi_icon_occupancy_rate_wbL7QaVVLM.png/100x100_kpi_icon_occupancy_rate_wbL7QaVVLM.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/149pet96vdg3bda/thumbs_kpi_icon_occupancy_rate_wbL7QaVVLM.png/100x100_kpi_icon_occupancy_rate_wbL7QaVVLM.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/149pet96vdg3bda/thumbs_kpi_icon_occupancy_rate_wbL7QaVVLM.png/100x100_kpi_icon_occupancy_rate_wbL7QaVVLM.png.attrs
new file mode 100644
index 0000000..5da8ec2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/149pet96vdg3bda/thumbs_kpi_icon_occupancy_rate_wbL7QaVVLM.png/100x100_kpi_icon_occupancy_rate_wbL7QaVVLM.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"U+jFTo4vOOwg1q6sg8TA+A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1gk6ftd7of347rg/kpi_icon_import_39bpuPgUO9.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1gk6ftd7of347rg/kpi_icon_import_39bpuPgUO9.png
new file mode 100644
index 0000000..72e1c18
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1gk6ftd7of347rg/kpi_icon_import_39bpuPgUO9.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1gk6ftd7of347rg/kpi_icon_import_39bpuPgUO9.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1gk6ftd7of347rg/kpi_icon_import_39bpuPgUO9.png.attrs
new file mode 100644
index 0000000..e7874d0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1gk6ftd7of347rg/kpi_icon_import_39bpuPgUO9.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Import.png"},"md5":"2BDdMENO2Qr0frmP5x6KWQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1gk6ftd7of347rg/thumbs_kpi_icon_import_39bpuPgUO9.png/100x100_kpi_icon_import_39bpuPgUO9.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1gk6ftd7of347rg/thumbs_kpi_icon_import_39bpuPgUO9.png/100x100_kpi_icon_import_39bpuPgUO9.png
new file mode 100644
index 0000000..be588a5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1gk6ftd7of347rg/thumbs_kpi_icon_import_39bpuPgUO9.png/100x100_kpi_icon_import_39bpuPgUO9.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1gk6ftd7of347rg/thumbs_kpi_icon_import_39bpuPgUO9.png/100x100_kpi_icon_import_39bpuPgUO9.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1gk6ftd7of347rg/thumbs_kpi_icon_import_39bpuPgUO9.png/100x100_kpi_icon_import_39bpuPgUO9.png.attrs
new file mode 100644
index 0000000..974e6f4
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1gk6ftd7of347rg/thumbs_kpi_icon_import_39bpuPgUO9.png/100x100_kpi_icon_import_39bpuPgUO9.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zgwJqK1psQOQsoWeaubwUg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1jrgwf97r4havh4/kpi_icon_arrival_x5YD5PP81A.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1jrgwf97r4havh4/kpi_icon_arrival_x5YD5PP81A.png
new file mode 100644
index 0000000..78af14d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1jrgwf97r4havh4/kpi_icon_arrival_x5YD5PP81A.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1jrgwf97r4havh4/kpi_icon_arrival_x5YD5PP81A.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1jrgwf97r4havh4/kpi_icon_arrival_x5YD5PP81A.png.attrs
new file mode 100644
index 0000000..bf42bae
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1jrgwf97r4havh4/kpi_icon_arrival_x5YD5PP81A.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Arrival.png"},"md5":"McfbcfxPW54tep7w0S7YIA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1jrgwf97r4havh4/thumbs_kpi_icon_arrival_x5YD5PP81A.png/100x100_kpi_icon_arrival_x5YD5PP81A.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1jrgwf97r4havh4/thumbs_kpi_icon_arrival_x5YD5PP81A.png/100x100_kpi_icon_arrival_x5YD5PP81A.png
new file mode 100644
index 0000000..f694642
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1jrgwf97r4havh4/thumbs_kpi_icon_arrival_x5YD5PP81A.png/100x100_kpi_icon_arrival_x5YD5PP81A.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1jrgwf97r4havh4/thumbs_kpi_icon_arrival_x5YD5PP81A.png/100x100_kpi_icon_arrival_x5YD5PP81A.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1jrgwf97r4havh4/thumbs_kpi_icon_arrival_x5YD5PP81A.png/100x100_kpi_icon_arrival_x5YD5PP81A.png.attrs
new file mode 100644
index 0000000..08eb2c5
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1jrgwf97r4havh4/thumbs_kpi_icon_arrival_x5YD5PP81A.png/100x100_kpi_icon_arrival_x5YD5PP81A.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zwEbsR6JRku8qJ19X0D3jw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/kpi_icon_health_centers_2_mcBWvFDK3Z.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/kpi_icon_health_centers_2_mcBWvFDK3Z.png
new file mode 100644
index 0000000..3e1a049
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/kpi_icon_health_centers_2_mcBWvFDK3Z.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/kpi_icon_health_centers_2_mcBWvFDK3Z.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/kpi_icon_health_centers_2_mcBWvFDK3Z.png.attrs
new file mode 100644
index 0000000..959c69c
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/kpi_icon_health_centers_2_mcBWvFDK3Z.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-HealthCenters (2).png"},"md5":"BSOP0npbkrCLnRX9kYzicg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/kpi_icon_health_centers_qARFNZlktb.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/kpi_icon_health_centers_qARFNZlktb.png
new file mode 100644
index 0000000..e26c0fb
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/kpi_icon_health_centers_qARFNZlktb.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/kpi_icon_health_centers_qARFNZlktb.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/kpi_icon_health_centers_qARFNZlktb.png.attrs
new file mode 100644
index 0000000..80efaa6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/kpi_icon_health_centers_qARFNZlktb.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-HealthCenters.png"},"md5":"QUPb24ZJ+yVFx/cBFROKSQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/thumbs_kpi_icon_health_centers_2_mcBWvFDK3Z.png/100x100_kpi_icon_health_centers_2_mcBWvFDK3Z.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/thumbs_kpi_icon_health_centers_2_mcBWvFDK3Z.png/100x100_kpi_icon_health_centers_2_mcBWvFDK3Z.png
new file mode 100644
index 0000000..06efc98
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/thumbs_kpi_icon_health_centers_2_mcBWvFDK3Z.png/100x100_kpi_icon_health_centers_2_mcBWvFDK3Z.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/thumbs_kpi_icon_health_centers_2_mcBWvFDK3Z.png/100x100_kpi_icon_health_centers_2_mcBWvFDK3Z.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/thumbs_kpi_icon_health_centers_2_mcBWvFDK3Z.png/100x100_kpi_icon_health_centers_2_mcBWvFDK3Z.png.attrs
new file mode 100644
index 0000000..9107cef
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/thumbs_kpi_icon_health_centers_2_mcBWvFDK3Z.png/100x100_kpi_icon_health_centers_2_mcBWvFDK3Z.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"y9NTfS1CkEsgZhHgNHEUMQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/thumbs_kpi_icon_health_centers_qARFNZlktb.png/100x100_kpi_icon_health_centers_qARFNZlktb.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/thumbs_kpi_icon_health_centers_qARFNZlktb.png/100x100_kpi_icon_health_centers_qARFNZlktb.png
new file mode 100644
index 0000000..d8a465e
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/thumbs_kpi_icon_health_centers_qARFNZlktb.png/100x100_kpi_icon_health_centers_qARFNZlktb.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/thumbs_kpi_icon_health_centers_qARFNZlktb.png/100x100_kpi_icon_health_centers_qARFNZlktb.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/thumbs_kpi_icon_health_centers_qARFNZlktb.png/100x100_kpi_icon_health_centers_qARFNZlktb.png.attrs
new file mode 100644
index 0000000..bab9988
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1v4uligg4a8ytyd/thumbs_kpi_icon_health_centers_qARFNZlktb.png/100x100_kpi_icon_health_centers_qARFNZlktb.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"lv9iL3SiCG7IKY80k3aevQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1y6562ehp34hmj0/female_9N5tMJVQuN.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1y6562ehp34hmj0/female_9N5tMJVQuN.png
new file mode 100644
index 0000000..e328a93
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1y6562ehp34hmj0/female_9N5tMJVQuN.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1y6562ehp34hmj0/female_9N5tMJVQuN.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1y6562ehp34hmj0/female_9N5tMJVQuN.png.attrs
new file mode 100644
index 0000000..3c217ec
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1y6562ehp34hmj0/female_9N5tMJVQuN.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"female.png"},"md5":"LHr3qNvXccxDzGNR1QwAiA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1y6562ehp34hmj0/thumbs_female_9N5tMJVQuN.png/100x100_female_9N5tMJVQuN.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1y6562ehp34hmj0/thumbs_female_9N5tMJVQuN.png/100x100_female_9N5tMJVQuN.png
new file mode 100644
index 0000000..4e9492f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1y6562ehp34hmj0/thumbs_female_9N5tMJVQuN.png/100x100_female_9N5tMJVQuN.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1y6562ehp34hmj0/thumbs_female_9N5tMJVQuN.png/100x100_female_9N5tMJVQuN.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1y6562ehp34hmj0/thumbs_female_9N5tMJVQuN.png/100x100_female_9N5tMJVQuN.png.attrs
new file mode 100644
index 0000000..72ab7b2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/1y6562ehp34hmj0/thumbs_female_9N5tMJVQuN.png/100x100_female_9N5tMJVQuN.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"6qNv8XkjaWR5lPp91glyrw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/24jw7za92eti19m/kpi_icon_re_export_rP4og8WMCl.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/24jw7za92eti19m/kpi_icon_re_export_rP4og8WMCl.png
new file mode 100644
index 0000000..2f2daf3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/24jw7za92eti19m/kpi_icon_re_export_rP4og8WMCl.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/24jw7za92eti19m/kpi_icon_re_export_rP4og8WMCl.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/24jw7za92eti19m/kpi_icon_re_export_rP4og8WMCl.png.attrs
new file mode 100644
index 0000000..efc1a5b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/24jw7za92eti19m/kpi_icon_re_export_rP4og8WMCl.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-ReExport.png"},"md5":"wuPAc6IENmbI4H4Y5iykQA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/24jw7za92eti19m/thumbs_kpi_icon_re_export_rP4og8WMCl.png/100x100_kpi_icon_re_export_rP4og8WMCl.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/24jw7za92eti19m/thumbs_kpi_icon_re_export_rP4og8WMCl.png/100x100_kpi_icon_re_export_rP4og8WMCl.png
new file mode 100644
index 0000000..6bf965d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/24jw7za92eti19m/thumbs_kpi_icon_re_export_rP4og8WMCl.png/100x100_kpi_icon_re_export_rP4og8WMCl.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/24jw7za92eti19m/thumbs_kpi_icon_re_export_rP4og8WMCl.png/100x100_kpi_icon_re_export_rP4og8WMCl.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/24jw7za92eti19m/thumbs_kpi_icon_re_export_rP4og8WMCl.png/100x100_kpi_icon_re_export_rP4og8WMCl.png.attrs
new file mode 100644
index 0000000..670db8f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/24jw7za92eti19m/thumbs_kpi_icon_re_export_rP4og8WMCl.png/100x100_kpi_icon_re_export_rP4og8WMCl.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"55tIdEz4EfKupJ7SzRKiNQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2dlvrlk2wawtivj/kpi_icon_gdp_EpSSWLU18K.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2dlvrlk2wawtivj/kpi_icon_gdp_EpSSWLU18K.png
new file mode 100644
index 0000000..00a7246
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2dlvrlk2wawtivj/kpi_icon_gdp_EpSSWLU18K.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2dlvrlk2wawtivj/kpi_icon_gdp_EpSSWLU18K.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2dlvrlk2wawtivj/kpi_icon_gdp_EpSSWLU18K.png.attrs
new file mode 100644
index 0000000..aeed7a6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2dlvrlk2wawtivj/kpi_icon_gdp_EpSSWLU18K.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDP.png"},"md5":"GbjBCTBkQMjDA/ePurXQ4w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2dlvrlk2wawtivj/thumbs_kpi_icon_gdp_EpSSWLU18K.png/100x100_kpi_icon_gdp_EpSSWLU18K.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2dlvrlk2wawtivj/thumbs_kpi_icon_gdp_EpSSWLU18K.png/100x100_kpi_icon_gdp_EpSSWLU18K.png
new file mode 100644
index 0000000..1f4a9d5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2dlvrlk2wawtivj/thumbs_kpi_icon_gdp_EpSSWLU18K.png/100x100_kpi_icon_gdp_EpSSWLU18K.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2dlvrlk2wawtivj/thumbs_kpi_icon_gdp_EpSSWLU18K.png/100x100_kpi_icon_gdp_EpSSWLU18K.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2dlvrlk2wawtivj/thumbs_kpi_icon_gdp_EpSSWLU18K.png/100x100_kpi_icon_gdp_EpSSWLU18K.png.attrs
new file mode 100644
index 0000000..1c118ca
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2dlvrlk2wawtivj/thumbs_kpi_icon_gdp_EpSSWLU18K.png/100x100_kpi_icon_gdp_EpSSWLU18K.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"oR1IfXTRW05tuALKgeFtkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/kpi_icon_occupancy_rate_LTU43Vz9Cf.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/kpi_icon_occupancy_rate_LTU43Vz9Cf.png
new file mode 100644
index 0000000..4b5ae6b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/kpi_icon_occupancy_rate_LTU43Vz9Cf.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/kpi_icon_occupancy_rate_LTU43Vz9Cf.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/kpi_icon_occupancy_rate_LTU43Vz9Cf.png.attrs
new file mode 100644
index 0000000..b16288e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/kpi_icon_occupancy_rate_LTU43Vz9Cf.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OccupancyRate.png"},"md5":"Cs+jJNffYFWAhBqJwmKX0A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/thumbs_kpi_icon_occupancy_rate_LTU43Vz9Cf.png/100x100_kpi_icon_occupancy_rate_LTU43Vz9Cf.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/thumbs_kpi_icon_occupancy_rate_LTU43Vz9Cf.png/100x100_kpi_icon_occupancy_rate_LTU43Vz9Cf.png
new file mode 100644
index 0000000..1f6d56d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/thumbs_kpi_icon_occupancy_rate_LTU43Vz9Cf.png/100x100_kpi_icon_occupancy_rate_LTU43Vz9Cf.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/thumbs_kpi_icon_occupancy_rate_LTU43Vz9Cf.png/100x100_kpi_icon_occupancy_rate_LTU43Vz9Cf.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/thumbs_kpi_icon_occupancy_rate_LTU43Vz9Cf.png/100x100_kpi_icon_occupancy_rate_LTU43Vz9Cf.png.attrs
new file mode 100644
index 0000000..5da8ec2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/thumbs_kpi_icon_occupancy_rate_LTU43Vz9Cf.png/100x100_kpi_icon_occupancy_rate_LTU43Vz9Cf.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"U+jFTo4vOOwg1q6sg8TA+A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/kpi_icon_natural_reserves_blYNwKCEN3.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/kpi_icon_natural_reserves_blYNwKCEN3.png
new file mode 100644
index 0000000..c600cfa
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/kpi_icon_natural_reserves_blYNwKCEN3.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/kpi_icon_natural_reserves_blYNwKCEN3.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/kpi_icon_natural_reserves_blYNwKCEN3.png.attrs
new file mode 100644
index 0000000..01764dd
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/kpi_icon_natural_reserves_blYNwKCEN3.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-NaturalReserves.png"},"md5":"EidU5zyMspc/3lI2BgLvkg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/thumbs_kpi_icon_natural_reserves_blYNwKCEN3.png/100x100_kpi_icon_natural_reserves_blYNwKCEN3.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/thumbs_kpi_icon_natural_reserves_blYNwKCEN3.png/100x100_kpi_icon_natural_reserves_blYNwKCEN3.png
new file mode 100644
index 0000000..3e3d54c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/thumbs_kpi_icon_natural_reserves_blYNwKCEN3.png/100x100_kpi_icon_natural_reserves_blYNwKCEN3.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/thumbs_kpi_icon_natural_reserves_blYNwKCEN3.png/100x100_kpi_icon_natural_reserves_blYNwKCEN3.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/thumbs_kpi_icon_natural_reserves_blYNwKCEN3.png/100x100_kpi_icon_natural_reserves_blYNwKCEN3.png.attrs
new file mode 100644
index 0000000..9058a16
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/thumbs_kpi_icon_natural_reserves_blYNwKCEN3.png/100x100_kpi_icon_natural_reserves_blYNwKCEN3.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"uiU2k7ZNxToo4t8GzxMZpg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2tdv7moq74dz00w/kpi_icon_gdp_lXhzvI5CUk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2tdv7moq74dz00w/kpi_icon_gdp_lXhzvI5CUk.png
new file mode 100644
index 0000000..00a7246
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2tdv7moq74dz00w/kpi_icon_gdp_lXhzvI5CUk.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2tdv7moq74dz00w/kpi_icon_gdp_lXhzvI5CUk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2tdv7moq74dz00w/kpi_icon_gdp_lXhzvI5CUk.png.attrs
new file mode 100644
index 0000000..aeed7a6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2tdv7moq74dz00w/kpi_icon_gdp_lXhzvI5CUk.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDP.png"},"md5":"GbjBCTBkQMjDA/ePurXQ4w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2tdv7moq74dz00w/thumbs_kpi_icon_gdp_lXhzvI5CUk.png/100x100_kpi_icon_gdp_lXhzvI5CUk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2tdv7moq74dz00w/thumbs_kpi_icon_gdp_lXhzvI5CUk.png/100x100_kpi_icon_gdp_lXhzvI5CUk.png
new file mode 100644
index 0000000..1f4a9d5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2tdv7moq74dz00w/thumbs_kpi_icon_gdp_lXhzvI5CUk.png/100x100_kpi_icon_gdp_lXhzvI5CUk.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2tdv7moq74dz00w/thumbs_kpi_icon_gdp_lXhzvI5CUk.png/100x100_kpi_icon_gdp_lXhzvI5CUk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2tdv7moq74dz00w/thumbs_kpi_icon_gdp_lXhzvI5CUk.png/100x100_kpi_icon_gdp_lXhzvI5CUk.png.attrs
new file mode 100644
index 0000000..1c118ca
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/2tdv7moq74dz00w/thumbs_kpi_icon_gdp_lXhzvI5CUk.png/100x100_kpi_icon_gdp_lXhzvI5CUk.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"oR1IfXTRW05tuALKgeFtkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/kpi_icon_livestock_cattles_mKAdalLbu9.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/kpi_icon_livestock_cattles_mKAdalLbu9.png
new file mode 100644
index 0000000..3d534eb
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/kpi_icon_livestock_cattles_mKAdalLbu9.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/kpi_icon_livestock_cattles_mKAdalLbu9.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/kpi_icon_livestock_cattles_mKAdalLbu9.png.attrs
new file mode 100644
index 0000000..c1dd8d8
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/kpi_icon_livestock_cattles_mKAdalLbu9.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LivestockCattles.png"},"md5":"DUjKL1yZT8pt3ybZuqCXqA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/thumbs_kpi_icon_livestock_cattles_mKAdalLbu9.png/100x100_kpi_icon_livestock_cattles_mKAdalLbu9.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/thumbs_kpi_icon_livestock_cattles_mKAdalLbu9.png/100x100_kpi_icon_livestock_cattles_mKAdalLbu9.png
new file mode 100644
index 0000000..6485752
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/thumbs_kpi_icon_livestock_cattles_mKAdalLbu9.png/100x100_kpi_icon_livestock_cattles_mKAdalLbu9.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/thumbs_kpi_icon_livestock_cattles_mKAdalLbu9.png/100x100_kpi_icon_livestock_cattles_mKAdalLbu9.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/thumbs_kpi_icon_livestock_cattles_mKAdalLbu9.png/100x100_kpi_icon_livestock_cattles_mKAdalLbu9.png.attrs
new file mode 100644
index 0000000..2ff4e7d
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/thumbs_kpi_icon_livestock_cattles_mKAdalLbu9.png/100x100_kpi_icon_livestock_cattles_mKAdalLbu9.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"Bd8Ei+2GWlcr7qQbIw2nBA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/kpi_icon_water_production_pFn1kZz5hs.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/kpi_icon_water_production_pFn1kZz5hs.png
new file mode 100644
index 0000000..fb98188
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/kpi_icon_water_production_pFn1kZz5hs.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/kpi_icon_water_production_pFn1kZz5hs.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/kpi_icon_water_production_pFn1kZz5hs.png.attrs
new file mode 100644
index 0000000..aab7b61
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/kpi_icon_water_production_pFn1kZz5hs.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-WaterProduction.png"},"md5":"JQKlwTvuva3eX3OWCoC4SQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/thumbs_kpi_icon_water_production_pFn1kZz5hs.png/100x100_kpi_icon_water_production_pFn1kZz5hs.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/thumbs_kpi_icon_water_production_pFn1kZz5hs.png/100x100_kpi_icon_water_production_pFn1kZz5hs.png
new file mode 100644
index 0000000..7df954d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/thumbs_kpi_icon_water_production_pFn1kZz5hs.png/100x100_kpi_icon_water_production_pFn1kZz5hs.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/thumbs_kpi_icon_water_production_pFn1kZz5hs.png/100x100_kpi_icon_water_production_pFn1kZz5hs.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/thumbs_kpi_icon_water_production_pFn1kZz5hs.png/100x100_kpi_icon_water_production_pFn1kZz5hs.png.attrs
new file mode 100644
index 0000000..f2f22df
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/thumbs_kpi_icon_water_production_pFn1kZz5hs.png/100x100_kpi_icon_water_production_pFn1kZz5hs.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"p4keTgIQ5xOAU8VuKT5dcw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/38yc7sjb22uyqe9/kpi_icon_gdpgrowth_WI9fJuySjU.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/38yc7sjb22uyqe9/kpi_icon_gdpgrowth_WI9fJuySjU.png
new file mode 100644
index 0000000..f5f673a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/38yc7sjb22uyqe9/kpi_icon_gdpgrowth_WI9fJuySjU.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/38yc7sjb22uyqe9/kpi_icon_gdpgrowth_WI9fJuySjU.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/38yc7sjb22uyqe9/kpi_icon_gdpgrowth_WI9fJuySjU.png.attrs
new file mode 100644
index 0000000..30324ed
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/38yc7sjb22uyqe9/kpi_icon_gdpgrowth_WI9fJuySjU.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDPGrowth.png"},"md5":"HqqwH2pjnCJ5qZ2nSzmtUw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/38yc7sjb22uyqe9/thumbs_kpi_icon_gdpgrowth_WI9fJuySjU.png/100x100_kpi_icon_gdpgrowth_WI9fJuySjU.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/38yc7sjb22uyqe9/thumbs_kpi_icon_gdpgrowth_WI9fJuySjU.png/100x100_kpi_icon_gdpgrowth_WI9fJuySjU.png
new file mode 100644
index 0000000..40ddf4f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/38yc7sjb22uyqe9/thumbs_kpi_icon_gdpgrowth_WI9fJuySjU.png/100x100_kpi_icon_gdpgrowth_WI9fJuySjU.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/38yc7sjb22uyqe9/thumbs_kpi_icon_gdpgrowth_WI9fJuySjU.png/100x100_kpi_icon_gdpgrowth_WI9fJuySjU.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/38yc7sjb22uyqe9/thumbs_kpi_icon_gdpgrowth_WI9fJuySjU.png/100x100_kpi_icon_gdpgrowth_WI9fJuySjU.png.attrs
new file mode 100644
index 0000000..edf40cf
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/38yc7sjb22uyqe9/thumbs_kpi_icon_gdpgrowth_WI9fJuySjU.png/100x100_kpi_icon_gdpgrowth_WI9fJuySjU.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zrI7ItL8NvCC4HA5egimuA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/kpi_icon_gdpgrowth_WlcFeSLEFA.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/kpi_icon_gdpgrowth_WlcFeSLEFA.png
new file mode 100644
index 0000000..c75ed94
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/kpi_icon_gdpgrowth_WlcFeSLEFA.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/kpi_icon_gdpgrowth_WlcFeSLEFA.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/kpi_icon_gdpgrowth_WlcFeSLEFA.png.attrs
new file mode 100644
index 0000000..443371c
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/kpi_icon_gdpgrowth_WlcFeSLEFA.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDPGrowth.png"},"md5":"BuY+kJCvNDC0gNpwoK0ylw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/thumbs_kpi_icon_gdpgrowth_WlcFeSLEFA.png/100x100_kpi_icon_gdpgrowth_WlcFeSLEFA.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/thumbs_kpi_icon_gdpgrowth_WlcFeSLEFA.png/100x100_kpi_icon_gdpgrowth_WlcFeSLEFA.png
new file mode 100644
index 0000000..9ea8435
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/thumbs_kpi_icon_gdpgrowth_WlcFeSLEFA.png/100x100_kpi_icon_gdpgrowth_WlcFeSLEFA.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/thumbs_kpi_icon_gdpgrowth_WlcFeSLEFA.png/100x100_kpi_icon_gdpgrowth_WlcFeSLEFA.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/thumbs_kpi_icon_gdpgrowth_WlcFeSLEFA.png/100x100_kpi_icon_gdpgrowth_WlcFeSLEFA.png.attrs
new file mode 100644
index 0000000..0242c8e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/thumbs_kpi_icon_gdpgrowth_WlcFeSLEFA.png/100x100_kpi_icon_gdpgrowth_WlcFeSLEFA.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"9lWaRuZKLGuibexTLg+KTw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/kpi_icon_population_KIbfx2W9XG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/kpi_icon_population_KIbfx2W9XG.png
new file mode 100644
index 0000000..987103d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/kpi_icon_population_KIbfx2W9XG.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/kpi_icon_population_KIbfx2W9XG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/kpi_icon_population_KIbfx2W9XG.png.attrs
new file mode 100644
index 0000000..773f328
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/kpi_icon_population_KIbfx2W9XG.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Population.png"},"md5":"dTlgAbi4TM0Z8qrqMYa8Uw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/kpi_icon_population_tiZ1F9Am6S.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/kpi_icon_population_tiZ1F9Am6S.png
new file mode 100644
index 0000000..e2f8fd2
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/kpi_icon_population_tiZ1F9Am6S.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/kpi_icon_population_tiZ1F9Am6S.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/kpi_icon_population_tiZ1F9Am6S.png.attrs
new file mode 100644
index 0000000..6d31b46
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/kpi_icon_population_tiZ1F9Am6S.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Population.png"},"md5":"BPQklAKzE1awhyRzVAam6A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/thumbs_kpi_icon_population_KIbfx2W9XG.png/100x100_kpi_icon_population_KIbfx2W9XG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/thumbs_kpi_icon_population_KIbfx2W9XG.png/100x100_kpi_icon_population_KIbfx2W9XG.png
new file mode 100644
index 0000000..b1e5956
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/thumbs_kpi_icon_population_KIbfx2W9XG.png/100x100_kpi_icon_population_KIbfx2W9XG.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/thumbs_kpi_icon_population_KIbfx2W9XG.png/100x100_kpi_icon_population_KIbfx2W9XG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/thumbs_kpi_icon_population_KIbfx2W9XG.png/100x100_kpi_icon_population_KIbfx2W9XG.png.attrs
new file mode 100644
index 0000000..03deb63
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/thumbs_kpi_icon_population_KIbfx2W9XG.png/100x100_kpi_icon_population_KIbfx2W9XG.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"OY9/0GOkbXWJXjYfnIuhSw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/thumbs_kpi_icon_population_tiZ1F9Am6S.png/100x100_kpi_icon_population_tiZ1F9Am6S.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/thumbs_kpi_icon_population_tiZ1F9Am6S.png/100x100_kpi_icon_population_tiZ1F9Am6S.png
new file mode 100644
index 0000000..d552412
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/thumbs_kpi_icon_population_tiZ1F9Am6S.png/100x100_kpi_icon_population_tiZ1F9Am6S.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/thumbs_kpi_icon_population_tiZ1F9Am6S.png/100x100_kpi_icon_population_tiZ1F9Am6S.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/thumbs_kpi_icon_population_tiZ1F9Am6S.png/100x100_kpi_icon_population_tiZ1F9Am6S.png.attrs
new file mode 100644
index 0000000..f63bc77
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/thumbs_kpi_icon_population_tiZ1F9Am6S.png/100x100_kpi_icon_population_tiZ1F9Am6S.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"r8v3ja0ZOKOy5aQ9I7h7CQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/kpi_icon_livestock_sheep_06tyVHq3Dd.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/kpi_icon_livestock_sheep_06tyVHq3Dd.png
new file mode 100644
index 0000000..bcf7875
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/kpi_icon_livestock_sheep_06tyVHq3Dd.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/kpi_icon_livestock_sheep_06tyVHq3Dd.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/kpi_icon_livestock_sheep_06tyVHq3Dd.png.attrs
new file mode 100644
index 0000000..af774bc
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/kpi_icon_livestock_sheep_06tyVHq3Dd.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LivestockSheep.png"},"md5":"uvgfHXYusytaxXWP86/PMQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/thumbs_kpi_icon_livestock_sheep_06tyVHq3Dd.png/100x100_kpi_icon_livestock_sheep_06tyVHq3Dd.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/thumbs_kpi_icon_livestock_sheep_06tyVHq3Dd.png/100x100_kpi_icon_livestock_sheep_06tyVHq3Dd.png
new file mode 100644
index 0000000..6f08b4a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/thumbs_kpi_icon_livestock_sheep_06tyVHq3Dd.png/100x100_kpi_icon_livestock_sheep_06tyVHq3Dd.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/thumbs_kpi_icon_livestock_sheep_06tyVHq3Dd.png/100x100_kpi_icon_livestock_sheep_06tyVHq3Dd.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/thumbs_kpi_icon_livestock_sheep_06tyVHq3Dd.png/100x100_kpi_icon_livestock_sheep_06tyVHq3Dd.png.attrs
new file mode 100644
index 0000000..fa9eaee
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/thumbs_kpi_icon_livestock_sheep_06tyVHq3Dd.png/100x100_kpi_icon_livestock_sheep_06tyVHq3Dd.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"07ogwztZgxRY87I+T3YS6w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/45ogj8zl6tohimt/kpi_icon_he_student_male_1_1my9JzDuHe.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/45ogj8zl6tohimt/kpi_icon_he_student_male_1_1my9JzDuHe.png
new file mode 100644
index 0000000..cb796f0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/45ogj8zl6tohimt/kpi_icon_he_student_male_1_1my9JzDuHe.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/45ogj8zl6tohimt/kpi_icon_he_student_male_1_1my9JzDuHe.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/45ogj8zl6tohimt/kpi_icon_he_student_male_1_1my9JzDuHe.png.attrs
new file mode 100644
index 0000000..633e082
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/45ogj8zl6tohimt/kpi_icon_he_student_male_1_1my9JzDuHe.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-HE-StudentMale (1).png"},"md5":"pouA0KQgZQ9BUuf8M1u5bQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/45ogj8zl6tohimt/thumbs_kpi_icon_he_student_male_1_1my9JzDuHe.png/100x100_kpi_icon_he_student_male_1_1my9JzDuHe.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/45ogj8zl6tohimt/thumbs_kpi_icon_he_student_male_1_1my9JzDuHe.png/100x100_kpi_icon_he_student_male_1_1my9JzDuHe.png
new file mode 100644
index 0000000..302ec42
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/45ogj8zl6tohimt/thumbs_kpi_icon_he_student_male_1_1my9JzDuHe.png/100x100_kpi_icon_he_student_male_1_1my9JzDuHe.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/45ogj8zl6tohimt/thumbs_kpi_icon_he_student_male_1_1my9JzDuHe.png/100x100_kpi_icon_he_student_male_1_1my9JzDuHe.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/45ogj8zl6tohimt/thumbs_kpi_icon_he_student_male_1_1my9JzDuHe.png/100x100_kpi_icon_he_student_male_1_1my9JzDuHe.png.attrs
new file mode 100644
index 0000000..305b256
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/45ogj8zl6tohimt/thumbs_kpi_icon_he_student_male_1_1my9JzDuHe.png/100x100_kpi_icon_he_student_male_1_1my9JzDuHe.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"rFxtmIkJbYu4qgl9RFO/Qg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/kpi_icon_higher_education_1_QP3FpsenJG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/kpi_icon_higher_education_1_QP3FpsenJG.png
new file mode 100644
index 0000000..41d594c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/kpi_icon_higher_education_1_QP3FpsenJG.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/kpi_icon_higher_education_1_QP3FpsenJG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/kpi_icon_higher_education_1_QP3FpsenJG.png.attrs
new file mode 100644
index 0000000..353c643
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/kpi_icon_higher_education_1_QP3FpsenJG.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-HigherEducation (1).png"},"md5":"XUPZwnzbv1RNXf8d30881w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/kpi_icon_higher_education_vOnb2X1UEh.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/kpi_icon_higher_education_vOnb2X1UEh.png
new file mode 100644
index 0000000..ae9ee5d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/kpi_icon_higher_education_vOnb2X1UEh.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/kpi_icon_higher_education_vOnb2X1UEh.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/kpi_icon_higher_education_vOnb2X1UEh.png.attrs
new file mode 100644
index 0000000..e57680a
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/kpi_icon_higher_education_vOnb2X1UEh.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-HigherEducation.png"},"md5":"Y6aSamylpilRb2J432IlCw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/thumbs_kpi_icon_higher_education_1_QP3FpsenJG.png/100x100_kpi_icon_higher_education_1_QP3FpsenJG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/thumbs_kpi_icon_higher_education_1_QP3FpsenJG.png/100x100_kpi_icon_higher_education_1_QP3FpsenJG.png
new file mode 100644
index 0000000..4a2bbae
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/thumbs_kpi_icon_higher_education_1_QP3FpsenJG.png/100x100_kpi_icon_higher_education_1_QP3FpsenJG.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/thumbs_kpi_icon_higher_education_1_QP3FpsenJG.png/100x100_kpi_icon_higher_education_1_QP3FpsenJG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/thumbs_kpi_icon_higher_education_1_QP3FpsenJG.png/100x100_kpi_icon_higher_education_1_QP3FpsenJG.png.attrs
new file mode 100644
index 0000000..3b1c819
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/thumbs_kpi_icon_higher_education_1_QP3FpsenJG.png/100x100_kpi_icon_higher_education_1_QP3FpsenJG.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"MlYbekj6JSb3UHXtQ/vdLQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/thumbs_kpi_icon_higher_education_vOnb2X1UEh.png/100x100_kpi_icon_higher_education_vOnb2X1UEh.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/thumbs_kpi_icon_higher_education_vOnb2X1UEh.png/100x100_kpi_icon_higher_education_vOnb2X1UEh.png
new file mode 100644
index 0000000..dbae4bf
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/thumbs_kpi_icon_higher_education_vOnb2X1UEh.png/100x100_kpi_icon_higher_education_vOnb2X1UEh.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/thumbs_kpi_icon_higher_education_vOnb2X1UEh.png/100x100_kpi_icon_higher_education_vOnb2X1UEh.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/thumbs_kpi_icon_higher_education_vOnb2X1UEh.png/100x100_kpi_icon_higher_education_vOnb2X1UEh.png.attrs
new file mode 100644
index 0000000..0eaf5d8
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4epsb8882r8pqec/thumbs_kpi_icon_higher_education_vOnb2X1UEh.png/100x100_kpi_icon_higher_education_vOnb2X1UEh.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"tlHFCW9cJXf7GZV5RHEJcQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/kpi_icon_re_export_a4k1TirhUZ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/kpi_icon_re_export_a4k1TirhUZ.png
new file mode 100644
index 0000000..2f2daf3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/kpi_icon_re_export_a4k1TirhUZ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/kpi_icon_re_export_a4k1TirhUZ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/kpi_icon_re_export_a4k1TirhUZ.png.attrs
new file mode 100644
index 0000000..efc1a5b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/kpi_icon_re_export_a4k1TirhUZ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-ReExport.png"},"md5":"wuPAc6IENmbI4H4Y5iykQA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/thumbs_kpi_icon_re_export_a4k1TirhUZ.png/100x100_kpi_icon_re_export_a4k1TirhUZ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/thumbs_kpi_icon_re_export_a4k1TirhUZ.png/100x100_kpi_icon_re_export_a4k1TirhUZ.png
new file mode 100644
index 0000000..6bf965d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/thumbs_kpi_icon_re_export_a4k1TirhUZ.png/100x100_kpi_icon_re_export_a4k1TirhUZ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/thumbs_kpi_icon_re_export_a4k1TirhUZ.png/100x100_kpi_icon_re_export_a4k1TirhUZ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/thumbs_kpi_icon_re_export_a4k1TirhUZ.png/100x100_kpi_icon_re_export_a4k1TirhUZ.png.attrs
new file mode 100644
index 0000000..670db8f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/thumbs_kpi_icon_re_export_a4k1TirhUZ.png/100x100_kpi_icon_re_export_a4k1TirhUZ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"55tIdEz4EfKupJ7SzRKiNQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/kpi_icon_natural_reserves_OLwJhmD4E3.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/kpi_icon_natural_reserves_OLwJhmD4E3.png
new file mode 100644
index 0000000..c600cfa
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/kpi_icon_natural_reserves_OLwJhmD4E3.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/kpi_icon_natural_reserves_OLwJhmD4E3.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/kpi_icon_natural_reserves_OLwJhmD4E3.png.attrs
new file mode 100644
index 0000000..01764dd
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/kpi_icon_natural_reserves_OLwJhmD4E3.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-NaturalReserves.png"},"md5":"EidU5zyMspc/3lI2BgLvkg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/thumbs_kpi_icon_natural_reserves_OLwJhmD4E3.png/100x100_kpi_icon_natural_reserves_OLwJhmD4E3.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/thumbs_kpi_icon_natural_reserves_OLwJhmD4E3.png/100x100_kpi_icon_natural_reserves_OLwJhmD4E3.png
new file mode 100644
index 0000000..3e3d54c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/thumbs_kpi_icon_natural_reserves_OLwJhmD4E3.png/100x100_kpi_icon_natural_reserves_OLwJhmD4E3.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/thumbs_kpi_icon_natural_reserves_OLwJhmD4E3.png/100x100_kpi_icon_natural_reserves_OLwJhmD4E3.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/thumbs_kpi_icon_natural_reserves_OLwJhmD4E3.png/100x100_kpi_icon_natural_reserves_OLwJhmD4E3.png.attrs
new file mode 100644
index 0000000..9058a16
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/thumbs_kpi_icon_natural_reserves_OLwJhmD4E3.png/100x100_kpi_icon_natural_reserves_OLwJhmD4E3.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"uiU2k7ZNxToo4t8GzxMZpg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/kpi_icon_private_hospitals_1_WqV9SvaYbi.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/kpi_icon_private_hospitals_1_WqV9SvaYbi.png
new file mode 100644
index 0000000..fcf1f1c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/kpi_icon_private_hospitals_1_WqV9SvaYbi.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/kpi_icon_private_hospitals_1_WqV9SvaYbi.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/kpi_icon_private_hospitals_1_WqV9SvaYbi.png.attrs
new file mode 100644
index 0000000..0940bab
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/kpi_icon_private_hospitals_1_WqV9SvaYbi.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-PrivateHospitals (1).png"},"md5":"sQFLtOnN2ZTNWD+eayslZA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/kpi_icon_private_hospitals_ghvvZIKEPC.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/kpi_icon_private_hospitals_ghvvZIKEPC.png
new file mode 100644
index 0000000..5b3162e
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/kpi_icon_private_hospitals_ghvvZIKEPC.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/kpi_icon_private_hospitals_ghvvZIKEPC.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/kpi_icon_private_hospitals_ghvvZIKEPC.png.attrs
new file mode 100644
index 0000000..8814acc
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/kpi_icon_private_hospitals_ghvvZIKEPC.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-PrivateHospitals.png"},"md5":"5SjWoQfeOkCaWj01FDR9cw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/thumbs_kpi_icon_private_hospitals_1_WqV9SvaYbi.png/100x100_kpi_icon_private_hospitals_1_WqV9SvaYbi.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/thumbs_kpi_icon_private_hospitals_1_WqV9SvaYbi.png/100x100_kpi_icon_private_hospitals_1_WqV9SvaYbi.png
new file mode 100644
index 0000000..298e2b8
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/thumbs_kpi_icon_private_hospitals_1_WqV9SvaYbi.png/100x100_kpi_icon_private_hospitals_1_WqV9SvaYbi.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/thumbs_kpi_icon_private_hospitals_1_WqV9SvaYbi.png/100x100_kpi_icon_private_hospitals_1_WqV9SvaYbi.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/thumbs_kpi_icon_private_hospitals_1_WqV9SvaYbi.png/100x100_kpi_icon_private_hospitals_1_WqV9SvaYbi.png.attrs
new file mode 100644
index 0000000..8f8c4db
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/thumbs_kpi_icon_private_hospitals_1_WqV9SvaYbi.png/100x100_kpi_icon_private_hospitals_1_WqV9SvaYbi.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"wm5ujjr/mLR4+vCCmX2dDg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/thumbs_kpi_icon_private_hospitals_ghvvZIKEPC.png/100x100_kpi_icon_private_hospitals_ghvvZIKEPC.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/thumbs_kpi_icon_private_hospitals_ghvvZIKEPC.png/100x100_kpi_icon_private_hospitals_ghvvZIKEPC.png
new file mode 100644
index 0000000..da9a31e
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/thumbs_kpi_icon_private_hospitals_ghvvZIKEPC.png/100x100_kpi_icon_private_hospitals_ghvvZIKEPC.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/thumbs_kpi_icon_private_hospitals_ghvvZIKEPC.png/100x100_kpi_icon_private_hospitals_ghvvZIKEPC.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/thumbs_kpi_icon_private_hospitals_ghvvZIKEPC.png/100x100_kpi_icon_private_hospitals_ghvvZIKEPC.png.attrs
new file mode 100644
index 0000000..8dc00a7
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5ue7d61xov3u2vq/thumbs_kpi_icon_private_hospitals_ghvvZIKEPC.png/100x100_kpi_icon_private_hospitals_ghvvZIKEPC.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"bHwgt47x/pvelaidEC8jUQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/kpi_icon_departure_yI4Zc08kYI.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/kpi_icon_departure_yI4Zc08kYI.png
new file mode 100644
index 0000000..f5b467d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/kpi_icon_departure_yI4Zc08kYI.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/kpi_icon_departure_yI4Zc08kYI.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/kpi_icon_departure_yI4Zc08kYI.png.attrs
new file mode 100644
index 0000000..5848959
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/kpi_icon_departure_yI4Zc08kYI.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Departure.png"},"md5":"Fwm8+SZY3VcWKnRG1sVlcw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/thumbs_kpi_icon_departure_yI4Zc08kYI.png/100x100_kpi_icon_departure_yI4Zc08kYI.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/thumbs_kpi_icon_departure_yI4Zc08kYI.png/100x100_kpi_icon_departure_yI4Zc08kYI.png
new file mode 100644
index 0000000..c882846
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/thumbs_kpi_icon_departure_yI4Zc08kYI.png/100x100_kpi_icon_departure_yI4Zc08kYI.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/thumbs_kpi_icon_departure_yI4Zc08kYI.png/100x100_kpi_icon_departure_yI4Zc08kYI.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/thumbs_kpi_icon_departure_yI4Zc08kYI.png/100x100_kpi_icon_departure_yI4Zc08kYI.png.attrs
new file mode 100644
index 0000000..463d1b6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/thumbs_kpi_icon_departure_yI4Zc08kYI.png/100x100_kpi_icon_departure_yI4Zc08kYI.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"MSr9GD5SvLTIqi21V/Nzow=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/kpi_icon_livestock_camels_SVR7pjcfqP.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/kpi_icon_livestock_camels_SVR7pjcfqP.png
new file mode 100644
index 0000000..83e63c3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/kpi_icon_livestock_camels_SVR7pjcfqP.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/kpi_icon_livestock_camels_SVR7pjcfqP.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/kpi_icon_livestock_camels_SVR7pjcfqP.png.attrs
new file mode 100644
index 0000000..e86e2b2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/kpi_icon_livestock_camels_SVR7pjcfqP.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LivestockCamels.png"},"md5":"ZsXt5FAGlKkn7OqD2ACfPQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/thumbs_kpi_icon_livestock_camels_SVR7pjcfqP.png/100x100_kpi_icon_livestock_camels_SVR7pjcfqP.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/thumbs_kpi_icon_livestock_camels_SVR7pjcfqP.png/100x100_kpi_icon_livestock_camels_SVR7pjcfqP.png
new file mode 100644
index 0000000..be17b14
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/thumbs_kpi_icon_livestock_camels_SVR7pjcfqP.png/100x100_kpi_icon_livestock_camels_SVR7pjcfqP.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/thumbs_kpi_icon_livestock_camels_SVR7pjcfqP.png/100x100_kpi_icon_livestock_camels_SVR7pjcfqP.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/thumbs_kpi_icon_livestock_camels_SVR7pjcfqP.png/100x100_kpi_icon_livestock_camels_SVR7pjcfqP.png.attrs
new file mode 100644
index 0000000..f6bc315
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/thumbs_kpi_icon_livestock_camels_SVR7pjcfqP.png/100x100_kpi_icon_livestock_camels_SVR7pjcfqP.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"d+BsCUhtU7PtTiNIG3YEzg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/68tm7nce335p8te/kpi_icon_gdp_xhh2Ph36r8.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/68tm7nce335p8te/kpi_icon_gdp_xhh2Ph36r8.png
new file mode 100644
index 0000000..00a7246
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/68tm7nce335p8te/kpi_icon_gdp_xhh2Ph36r8.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/68tm7nce335p8te/kpi_icon_gdp_xhh2Ph36r8.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/68tm7nce335p8te/kpi_icon_gdp_xhh2Ph36r8.png.attrs
new file mode 100644
index 0000000..aeed7a6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/68tm7nce335p8te/kpi_icon_gdp_xhh2Ph36r8.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDP.png"},"md5":"GbjBCTBkQMjDA/ePurXQ4w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/68tm7nce335p8te/thumbs_kpi_icon_gdp_xhh2Ph36r8.png/100x100_kpi_icon_gdp_xhh2Ph36r8.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/68tm7nce335p8te/thumbs_kpi_icon_gdp_xhh2Ph36r8.png/100x100_kpi_icon_gdp_xhh2Ph36r8.png
new file mode 100644
index 0000000..1f4a9d5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/68tm7nce335p8te/thumbs_kpi_icon_gdp_xhh2Ph36r8.png/100x100_kpi_icon_gdp_xhh2Ph36r8.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/68tm7nce335p8te/thumbs_kpi_icon_gdp_xhh2Ph36r8.png/100x100_kpi_icon_gdp_xhh2Ph36r8.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/68tm7nce335p8te/thumbs_kpi_icon_gdp_xhh2Ph36r8.png/100x100_kpi_icon_gdp_xhh2Ph36r8.png.attrs
new file mode 100644
index 0000000..1c118ca
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/68tm7nce335p8te/thumbs_kpi_icon_gdp_xhh2Ph36r8.png/100x100_kpi_icon_gdp_xhh2Ph36r8.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"oR1IfXTRW05tuALKgeFtkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/kpi_icon_marriage_Gz63xIyNcf.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/kpi_icon_marriage_Gz63xIyNcf.png
new file mode 100644
index 0000000..23ef047
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/kpi_icon_marriage_Gz63xIyNcf.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/kpi_icon_marriage_Gz63xIyNcf.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/kpi_icon_marriage_Gz63xIyNcf.png.attrs
new file mode 100644
index 0000000..23f3ba4
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/kpi_icon_marriage_Gz63xIyNcf.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Marriage.png"},"md5":"WcuuNyBpPkLP79pRToQqxw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/kpi_icon_marriage_oNHP7akneh.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/kpi_icon_marriage_oNHP7akneh.png
new file mode 100644
index 0000000..4511a5b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/kpi_icon_marriage_oNHP7akneh.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/kpi_icon_marriage_oNHP7akneh.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/kpi_icon_marriage_oNHP7akneh.png.attrs
new file mode 100644
index 0000000..3fe0133
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/kpi_icon_marriage_oNHP7akneh.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Marriage.png"},"md5":"nnvEuAAjYWfWwtDM1r+v8A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/thumbs_kpi_icon_marriage_Gz63xIyNcf.png/100x100_kpi_icon_marriage_Gz63xIyNcf.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/thumbs_kpi_icon_marriage_Gz63xIyNcf.png/100x100_kpi_icon_marriage_Gz63xIyNcf.png
new file mode 100644
index 0000000..3d8f904
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/thumbs_kpi_icon_marriage_Gz63xIyNcf.png/100x100_kpi_icon_marriage_Gz63xIyNcf.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/thumbs_kpi_icon_marriage_Gz63xIyNcf.png/100x100_kpi_icon_marriage_Gz63xIyNcf.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/thumbs_kpi_icon_marriage_Gz63xIyNcf.png/100x100_kpi_icon_marriage_Gz63xIyNcf.png.attrs
new file mode 100644
index 0000000..d9d76f9
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/thumbs_kpi_icon_marriage_Gz63xIyNcf.png/100x100_kpi_icon_marriage_Gz63xIyNcf.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"JKPiSHibvOosxzL9Yvx4GQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/thumbs_kpi_icon_marriage_oNHP7akneh.png/100x100_kpi_icon_marriage_oNHP7akneh.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/thumbs_kpi_icon_marriage_oNHP7akneh.png/100x100_kpi_icon_marriage_oNHP7akneh.png
new file mode 100644
index 0000000..e550118
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/thumbs_kpi_icon_marriage_oNHP7akneh.png/100x100_kpi_icon_marriage_oNHP7akneh.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/thumbs_kpi_icon_marriage_oNHP7akneh.png/100x100_kpi_icon_marriage_oNHP7akneh.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/thumbs_kpi_icon_marriage_oNHP7akneh.png/100x100_kpi_icon_marriage_oNHP7akneh.png.attrs
new file mode 100644
index 0000000..ee75da3
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/thumbs_kpi_icon_marriage_oNHP7akneh.png/100x100_kpi_icon_marriage_oNHP7akneh.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"fZ2oprnP/J8tebqAYEHPGw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/kpi_icon_gov_centers_4AoNmKsZip.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/kpi_icon_gov_centers_4AoNmKsZip.png
new file mode 100644
index 0000000..73d8e39
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/kpi_icon_gov_centers_4AoNmKsZip.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/kpi_icon_gov_centers_4AoNmKsZip.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/kpi_icon_gov_centers_4AoNmKsZip.png.attrs
new file mode 100644
index 0000000..bda5f00
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/kpi_icon_gov_centers_4AoNmKsZip.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GovCenters.png"},"md5":"oI/Pws3Lr9JikiKltlQItg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/kpi_icon_gov_centers_OxhJKVCrXb.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/kpi_icon_gov_centers_OxhJKVCrXb.png
new file mode 100644
index 0000000..90d768e
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/kpi_icon_gov_centers_OxhJKVCrXb.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/kpi_icon_gov_centers_OxhJKVCrXb.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/kpi_icon_gov_centers_OxhJKVCrXb.png.attrs
new file mode 100644
index 0000000..58eafcd
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/kpi_icon_gov_centers_OxhJKVCrXb.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GovCenters.png"},"md5":"+otxpA2z8F/exzFdk/glew=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/thumbs_kpi_icon_gov_centers_4AoNmKsZip.png/100x100_kpi_icon_gov_centers_4AoNmKsZip.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/thumbs_kpi_icon_gov_centers_4AoNmKsZip.png/100x100_kpi_icon_gov_centers_4AoNmKsZip.png
new file mode 100644
index 0000000..a47dcc7
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/thumbs_kpi_icon_gov_centers_4AoNmKsZip.png/100x100_kpi_icon_gov_centers_4AoNmKsZip.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/thumbs_kpi_icon_gov_centers_4AoNmKsZip.png/100x100_kpi_icon_gov_centers_4AoNmKsZip.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/thumbs_kpi_icon_gov_centers_4AoNmKsZip.png/100x100_kpi_icon_gov_centers_4AoNmKsZip.png.attrs
new file mode 100644
index 0000000..888cfdb
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/thumbs_kpi_icon_gov_centers_4AoNmKsZip.png/100x100_kpi_icon_gov_centers_4AoNmKsZip.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"6Uk6rxjWRiCWyxUtTK4f1Q=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/thumbs_kpi_icon_gov_centers_OxhJKVCrXb.png/100x100_kpi_icon_gov_centers_OxhJKVCrXb.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/thumbs_kpi_icon_gov_centers_OxhJKVCrXb.png/100x100_kpi_icon_gov_centers_OxhJKVCrXb.png
new file mode 100644
index 0000000..80d5ef3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/thumbs_kpi_icon_gov_centers_OxhJKVCrXb.png/100x100_kpi_icon_gov_centers_OxhJKVCrXb.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/thumbs_kpi_icon_gov_centers_OxhJKVCrXb.png/100x100_kpi_icon_gov_centers_OxhJKVCrXb.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/thumbs_kpi_icon_gov_centers_OxhJKVCrXb.png/100x100_kpi_icon_gov_centers_OxhJKVCrXb.png.attrs
new file mode 100644
index 0000000..483174a
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/thumbs_kpi_icon_gov_centers_OxhJKVCrXb.png/100x100_kpi_icon_gov_centers_OxhJKVCrXb.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"1XanNMPQCA19qiamtoH0FA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7uxfuieojfu8x1j/kpi_icon_gdpgrowth_JencyU4HEg.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7uxfuieojfu8x1j/kpi_icon_gdpgrowth_JencyU4HEg.png
new file mode 100644
index 0000000..f5f673a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7uxfuieojfu8x1j/kpi_icon_gdpgrowth_JencyU4HEg.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7uxfuieojfu8x1j/kpi_icon_gdpgrowth_JencyU4HEg.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7uxfuieojfu8x1j/kpi_icon_gdpgrowth_JencyU4HEg.png.attrs
new file mode 100644
index 0000000..30324ed
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7uxfuieojfu8x1j/kpi_icon_gdpgrowth_JencyU4HEg.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDPGrowth.png"},"md5":"HqqwH2pjnCJ5qZ2nSzmtUw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7uxfuieojfu8x1j/thumbs_kpi_icon_gdpgrowth_JencyU4HEg.png/100x100_kpi_icon_gdpgrowth_JencyU4HEg.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7uxfuieojfu8x1j/thumbs_kpi_icon_gdpgrowth_JencyU4HEg.png/100x100_kpi_icon_gdpgrowth_JencyU4HEg.png
new file mode 100644
index 0000000..40ddf4f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7uxfuieojfu8x1j/thumbs_kpi_icon_gdpgrowth_JencyU4HEg.png/100x100_kpi_icon_gdpgrowth_JencyU4HEg.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7uxfuieojfu8x1j/thumbs_kpi_icon_gdpgrowth_JencyU4HEg.png/100x100_kpi_icon_gdpgrowth_JencyU4HEg.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7uxfuieojfu8x1j/thumbs_kpi_icon_gdpgrowth_JencyU4HEg.png/100x100_kpi_icon_gdpgrowth_JencyU4HEg.png.attrs
new file mode 100644
index 0000000..edf40cf
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/7uxfuieojfu8x1j/thumbs_kpi_icon_gdpgrowth_JencyU4HEg.png/100x100_kpi_icon_gdpgrowth_JencyU4HEg.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zrI7ItL8NvCC4HA5egimuA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/80lb9i8y15i707i/kpi_icon_export_qRIwM4mRkm.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/80lb9i8y15i707i/kpi_icon_export_qRIwM4mRkm.png
new file mode 100644
index 0000000..212871f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/80lb9i8y15i707i/kpi_icon_export_qRIwM4mRkm.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/80lb9i8y15i707i/kpi_icon_export_qRIwM4mRkm.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/80lb9i8y15i707i/kpi_icon_export_qRIwM4mRkm.png.attrs
new file mode 100644
index 0000000..8f5ba5d
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/80lb9i8y15i707i/kpi_icon_export_qRIwM4mRkm.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Export.png"},"md5":"IPaPiLbUhghzbNypSqwzog=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/80lb9i8y15i707i/thumbs_kpi_icon_export_qRIwM4mRkm.png/100x100_kpi_icon_export_qRIwM4mRkm.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/80lb9i8y15i707i/thumbs_kpi_icon_export_qRIwM4mRkm.png/100x100_kpi_icon_export_qRIwM4mRkm.png
new file mode 100644
index 0000000..58f0a77
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/80lb9i8y15i707i/thumbs_kpi_icon_export_qRIwM4mRkm.png/100x100_kpi_icon_export_qRIwM4mRkm.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/80lb9i8y15i707i/thumbs_kpi_icon_export_qRIwM4mRkm.png/100x100_kpi_icon_export_qRIwM4mRkm.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/80lb9i8y15i707i/thumbs_kpi_icon_export_qRIwM4mRkm.png/100x100_kpi_icon_export_qRIwM4mRkm.png.attrs
new file mode 100644
index 0000000..29b2c96
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/80lb9i8y15i707i/thumbs_kpi_icon_export_qRIwM4mRkm.png/100x100_kpi_icon_export_qRIwM4mRkm.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"gRzHgaCqcAj686AvLdedFA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8471xhg4l2izbzw/kpi_icon_occupancy_rate_TRtC21w8p2.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8471xhg4l2izbzw/kpi_icon_occupancy_rate_TRtC21w8p2.png
new file mode 100644
index 0000000..4b5ae6b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8471xhg4l2izbzw/kpi_icon_occupancy_rate_TRtC21w8p2.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8471xhg4l2izbzw/kpi_icon_occupancy_rate_TRtC21w8p2.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8471xhg4l2izbzw/kpi_icon_occupancy_rate_TRtC21w8p2.png.attrs
new file mode 100644
index 0000000..b16288e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8471xhg4l2izbzw/kpi_icon_occupancy_rate_TRtC21w8p2.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OccupancyRate.png"},"md5":"Cs+jJNffYFWAhBqJwmKX0A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8471xhg4l2izbzw/thumbs_kpi_icon_occupancy_rate_TRtC21w8p2.png/100x100_kpi_icon_occupancy_rate_TRtC21w8p2.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8471xhg4l2izbzw/thumbs_kpi_icon_occupancy_rate_TRtC21w8p2.png/100x100_kpi_icon_occupancy_rate_TRtC21w8p2.png
new file mode 100644
index 0000000..1f6d56d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8471xhg4l2izbzw/thumbs_kpi_icon_occupancy_rate_TRtC21w8p2.png/100x100_kpi_icon_occupancy_rate_TRtC21w8p2.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8471xhg4l2izbzw/thumbs_kpi_icon_occupancy_rate_TRtC21w8p2.png/100x100_kpi_icon_occupancy_rate_TRtC21w8p2.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8471xhg4l2izbzw/thumbs_kpi_icon_occupancy_rate_TRtC21w8p2.png/100x100_kpi_icon_occupancy_rate_TRtC21w8p2.png.attrs
new file mode 100644
index 0000000..5da8ec2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8471xhg4l2izbzw/thumbs_kpi_icon_occupancy_rate_TRtC21w8p2.png/100x100_kpi_icon_occupancy_rate_TRtC21w8p2.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"U+jFTo4vOOwg1q6sg8TA+A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/kpi_icon_occupancy_rate_F4NkscO21E.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/kpi_icon_occupancy_rate_F4NkscO21E.png
new file mode 100644
index 0000000..4b5ae6b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/kpi_icon_occupancy_rate_F4NkscO21E.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/kpi_icon_occupancy_rate_F4NkscO21E.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/kpi_icon_occupancy_rate_F4NkscO21E.png.attrs
new file mode 100644
index 0000000..b16288e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/kpi_icon_occupancy_rate_F4NkscO21E.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OccupancyRate.png"},"md5":"Cs+jJNffYFWAhBqJwmKX0A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/thumbs_kpi_icon_occupancy_rate_F4NkscO21E.png/100x100_kpi_icon_occupancy_rate_F4NkscO21E.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/thumbs_kpi_icon_occupancy_rate_F4NkscO21E.png/100x100_kpi_icon_occupancy_rate_F4NkscO21E.png
new file mode 100644
index 0000000..1f6d56d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/thumbs_kpi_icon_occupancy_rate_F4NkscO21E.png/100x100_kpi_icon_occupancy_rate_F4NkscO21E.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/thumbs_kpi_icon_occupancy_rate_F4NkscO21E.png/100x100_kpi_icon_occupancy_rate_F4NkscO21E.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/thumbs_kpi_icon_occupancy_rate_F4NkscO21E.png/100x100_kpi_icon_occupancy_rate_F4NkscO21E.png.attrs
new file mode 100644
index 0000000..5da8ec2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/thumbs_kpi_icon_occupancy_rate_F4NkscO21E.png/100x100_kpi_icon_occupancy_rate_F4NkscO21E.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"U+jFTo4vOOwg1q6sg8TA+A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/kpi_icon_natural_reserves_xdXQrR1eGy.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/kpi_icon_natural_reserves_xdXQrR1eGy.png
new file mode 100644
index 0000000..c600cfa
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/kpi_icon_natural_reserves_xdXQrR1eGy.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/kpi_icon_natural_reserves_xdXQrR1eGy.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/kpi_icon_natural_reserves_xdXQrR1eGy.png.attrs
new file mode 100644
index 0000000..01764dd
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/kpi_icon_natural_reserves_xdXQrR1eGy.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-NaturalReserves.png"},"md5":"EidU5zyMspc/3lI2BgLvkg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/thumbs_kpi_icon_natural_reserves_xdXQrR1eGy.png/100x100_kpi_icon_natural_reserves_xdXQrR1eGy.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/thumbs_kpi_icon_natural_reserves_xdXQrR1eGy.png/100x100_kpi_icon_natural_reserves_xdXQrR1eGy.png
new file mode 100644
index 0000000..3e3d54c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/thumbs_kpi_icon_natural_reserves_xdXQrR1eGy.png/100x100_kpi_icon_natural_reserves_xdXQrR1eGy.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/thumbs_kpi_icon_natural_reserves_xdXQrR1eGy.png/100x100_kpi_icon_natural_reserves_xdXQrR1eGy.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/thumbs_kpi_icon_natural_reserves_xdXQrR1eGy.png/100x100_kpi_icon_natural_reserves_xdXQrR1eGy.png.attrs
new file mode 100644
index 0000000..9058a16
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/thumbs_kpi_icon_natural_reserves_xdXQrR1eGy.png/100x100_kpi_icon_natural_reserves_xdXQrR1eGy.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"uiU2k7ZNxToo4t8GzxMZpg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/icon_students_mgGxpex0PQ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/icon_students_mgGxpex0PQ.png
new file mode 100644
index 0000000..c9ebc82
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/icon_students_mgGxpex0PQ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/icon_students_mgGxpex0PQ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/icon_students_mgGxpex0PQ.png.attrs
new file mode 100644
index 0000000..b1f5d69
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/icon_students_mgGxpex0PQ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"icon-students.png"},"md5":"Vi/d25yMJlhOPbhaagkeBg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/kpi_icon_students_AXjZ8cCtgg.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/kpi_icon_students_AXjZ8cCtgg.png
new file mode 100644
index 0000000..c0e0fef
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/kpi_icon_students_AXjZ8cCtgg.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/kpi_icon_students_AXjZ8cCtgg.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/kpi_icon_students_AXjZ8cCtgg.png.attrs
new file mode 100644
index 0000000..5ba493f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/kpi_icon_students_AXjZ8cCtgg.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-students.png"},"md5":"tFHswV4dhr6Nma4J3j206w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/thumbs_icon_students_mgGxpex0PQ.png/100x100_icon_students_mgGxpex0PQ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/thumbs_icon_students_mgGxpex0PQ.png/100x100_icon_students_mgGxpex0PQ.png
new file mode 100644
index 0000000..dbc0bc5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/thumbs_icon_students_mgGxpex0PQ.png/100x100_icon_students_mgGxpex0PQ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/thumbs_icon_students_mgGxpex0PQ.png/100x100_icon_students_mgGxpex0PQ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/thumbs_icon_students_mgGxpex0PQ.png/100x100_icon_students_mgGxpex0PQ.png.attrs
new file mode 100644
index 0000000..639e575
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/thumbs_icon_students_mgGxpex0PQ.png/100x100_icon_students_mgGxpex0PQ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"cJG38pPy+vKV5xtmkOq07A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/thumbs_kpi_icon_students_AXjZ8cCtgg.png/100x100_kpi_icon_students_AXjZ8cCtgg.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/thumbs_kpi_icon_students_AXjZ8cCtgg.png/100x100_kpi_icon_students_AXjZ8cCtgg.png
new file mode 100644
index 0000000..10fe190
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/thumbs_kpi_icon_students_AXjZ8cCtgg.png/100x100_kpi_icon_students_AXjZ8cCtgg.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/thumbs_kpi_icon_students_AXjZ8cCtgg.png/100x100_kpi_icon_students_AXjZ8cCtgg.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/thumbs_kpi_icon_students_AXjZ8cCtgg.png/100x100_kpi_icon_students_AXjZ8cCtgg.png.attrs
new file mode 100644
index 0000000..0901071
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/94sngusufwurz1z/thumbs_kpi_icon_students_AXjZ8cCtgg.png/100x100_kpi_icon_students_AXjZ8cCtgg.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"wLgj6xpzUhcpwqZnkPUbKg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/kpi_icon_crops_area_2w7huF3V7T.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/kpi_icon_crops_area_2w7huF3V7T.png
new file mode 100644
index 0000000..a3023be
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/kpi_icon_crops_area_2w7huF3V7T.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/kpi_icon_crops_area_2w7huF3V7T.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/kpi_icon_crops_area_2w7huF3V7T.png.attrs
new file mode 100644
index 0000000..4d9ca98
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/kpi_icon_crops_area_2w7huF3V7T.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-CropsArea.png"},"md5":"6BWT6i/rBlR1hej7AA6Gkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/thumbs_kpi_icon_crops_area_2w7huF3V7T.png/100x100_kpi_icon_crops_area_2w7huF3V7T.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/thumbs_kpi_icon_crops_area_2w7huF3V7T.png/100x100_kpi_icon_crops_area_2w7huF3V7T.png
new file mode 100644
index 0000000..250b3e0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/thumbs_kpi_icon_crops_area_2w7huF3V7T.png/100x100_kpi_icon_crops_area_2w7huF3V7T.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/thumbs_kpi_icon_crops_area_2w7huF3V7T.png/100x100_kpi_icon_crops_area_2w7huF3V7T.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/thumbs_kpi_icon_crops_area_2w7huF3V7T.png/100x100_kpi_icon_crops_area_2w7huF3V7T.png.attrs
new file mode 100644
index 0000000..ae931b0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/thumbs_kpi_icon_crops_area_2w7huF3V7T.png/100x100_kpi_icon_crops_area_2w7huF3V7T.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"srBd6fWEm86XwUV6j55geA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/kpi_icon_consumption_av2Ed08z1f.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/kpi_icon_consumption_av2Ed08z1f.png
new file mode 100644
index 0000000..f41e6b0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/kpi_icon_consumption_av2Ed08z1f.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/kpi_icon_consumption_av2Ed08z1f.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/kpi_icon_consumption_av2Ed08z1f.png.attrs
new file mode 100644
index 0000000..6a24739
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/kpi_icon_consumption_av2Ed08z1f.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Consumption.png"},"md5":"f1NUArqFL42VWuleVDQ+vQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/thumbs_kpi_icon_consumption_av2Ed08z1f.png/100x100_kpi_icon_consumption_av2Ed08z1f.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/thumbs_kpi_icon_consumption_av2Ed08z1f.png/100x100_kpi_icon_consumption_av2Ed08z1f.png
new file mode 100644
index 0000000..e5d6b86
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/thumbs_kpi_icon_consumption_av2Ed08z1f.png/100x100_kpi_icon_consumption_av2Ed08z1f.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/thumbs_kpi_icon_consumption_av2Ed08z1f.png/100x100_kpi_icon_consumption_av2Ed08z1f.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/thumbs_kpi_icon_consumption_av2Ed08z1f.png/100x100_kpi_icon_consumption_av2Ed08z1f.png.attrs
new file mode 100644
index 0000000..8f1222c
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/thumbs_kpi_icon_consumption_av2Ed08z1f.png/100x100_kpi_icon_consumption_av2Ed08z1f.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"PMmkMsIDsFA+XGvZjuhYhA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aqba83oqyue6url/kpi_icon_gdpgrowth_0BPQEvt8kZ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aqba83oqyue6url/kpi_icon_gdpgrowth_0BPQEvt8kZ.png
new file mode 100644
index 0000000..f5f673a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aqba83oqyue6url/kpi_icon_gdpgrowth_0BPQEvt8kZ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aqba83oqyue6url/kpi_icon_gdpgrowth_0BPQEvt8kZ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aqba83oqyue6url/kpi_icon_gdpgrowth_0BPQEvt8kZ.png.attrs
new file mode 100644
index 0000000..30324ed
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aqba83oqyue6url/kpi_icon_gdpgrowth_0BPQEvt8kZ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDPGrowth.png"},"md5":"HqqwH2pjnCJ5qZ2nSzmtUw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aqba83oqyue6url/thumbs_kpi_icon_gdpgrowth_0BPQEvt8kZ.png/100x100_kpi_icon_gdpgrowth_0BPQEvt8kZ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aqba83oqyue6url/thumbs_kpi_icon_gdpgrowth_0BPQEvt8kZ.png/100x100_kpi_icon_gdpgrowth_0BPQEvt8kZ.png
new file mode 100644
index 0000000..40ddf4f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aqba83oqyue6url/thumbs_kpi_icon_gdpgrowth_0BPQEvt8kZ.png/100x100_kpi_icon_gdpgrowth_0BPQEvt8kZ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aqba83oqyue6url/thumbs_kpi_icon_gdpgrowth_0BPQEvt8kZ.png/100x100_kpi_icon_gdpgrowth_0BPQEvt8kZ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aqba83oqyue6url/thumbs_kpi_icon_gdpgrowth_0BPQEvt8kZ.png/100x100_kpi_icon_gdpgrowth_0BPQEvt8kZ.png.attrs
new file mode 100644
index 0000000..edf40cf
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/aqba83oqyue6url/thumbs_kpi_icon_gdpgrowth_0BPQEvt8kZ.png/100x100_kpi_icon_gdpgrowth_0BPQEvt8kZ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zrI7ItL8NvCC4HA5egimuA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b5weh40cfu840bs/kpi_icon_import_6RUZMd5jaA.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b5weh40cfu840bs/kpi_icon_import_6RUZMd5jaA.png
new file mode 100644
index 0000000..72e1c18
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b5weh40cfu840bs/kpi_icon_import_6RUZMd5jaA.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b5weh40cfu840bs/kpi_icon_import_6RUZMd5jaA.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b5weh40cfu840bs/kpi_icon_import_6RUZMd5jaA.png.attrs
new file mode 100644
index 0000000..e7874d0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b5weh40cfu840bs/kpi_icon_import_6RUZMd5jaA.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Import.png"},"md5":"2BDdMENO2Qr0frmP5x6KWQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b5weh40cfu840bs/thumbs_kpi_icon_import_6RUZMd5jaA.png/100x100_kpi_icon_import_6RUZMd5jaA.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b5weh40cfu840bs/thumbs_kpi_icon_import_6RUZMd5jaA.png/100x100_kpi_icon_import_6RUZMd5jaA.png
new file mode 100644
index 0000000..be588a5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b5weh40cfu840bs/thumbs_kpi_icon_import_6RUZMd5jaA.png/100x100_kpi_icon_import_6RUZMd5jaA.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b5weh40cfu840bs/thumbs_kpi_icon_import_6RUZMd5jaA.png/100x100_kpi_icon_import_6RUZMd5jaA.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b5weh40cfu840bs/thumbs_kpi_icon_import_6RUZMd5jaA.png/100x100_kpi_icon_import_6RUZMd5jaA.png.attrs
new file mode 100644
index 0000000..974e6f4
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b5weh40cfu840bs/thumbs_kpi_icon_import_6RUZMd5jaA.png/100x100_kpi_icon_import_6RUZMd5jaA.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zgwJqK1psQOQsoWeaubwUg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/kpi_icon_natural_reserves_7Yq866BRPv.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/kpi_icon_natural_reserves_7Yq866BRPv.png
new file mode 100644
index 0000000..c600cfa
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/kpi_icon_natural_reserves_7Yq866BRPv.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/kpi_icon_natural_reserves_7Yq866BRPv.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/kpi_icon_natural_reserves_7Yq866BRPv.png.attrs
new file mode 100644
index 0000000..01764dd
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/kpi_icon_natural_reserves_7Yq866BRPv.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-NaturalReserves.png"},"md5":"EidU5zyMspc/3lI2BgLvkg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/thumbs_kpi_icon_natural_reserves_7Yq866BRPv.png/100x100_kpi_icon_natural_reserves_7Yq866BRPv.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/thumbs_kpi_icon_natural_reserves_7Yq866BRPv.png/100x100_kpi_icon_natural_reserves_7Yq866BRPv.png
new file mode 100644
index 0000000..3e3d54c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/thumbs_kpi_icon_natural_reserves_7Yq866BRPv.png/100x100_kpi_icon_natural_reserves_7Yq866BRPv.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/thumbs_kpi_icon_natural_reserves_7Yq866BRPv.png/100x100_kpi_icon_natural_reserves_7Yq866BRPv.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/thumbs_kpi_icon_natural_reserves_7Yq866BRPv.png/100x100_kpi_icon_natural_reserves_7Yq866BRPv.png.attrs
new file mode 100644
index 0000000..9058a16
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/thumbs_kpi_icon_natural_reserves_7Yq866BRPv.png/100x100_kpi_icon_natural_reserves_7Yq866BRPv.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"uiU2k7ZNxToo4t8GzxMZpg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bat6bob7qff1bym/kpi_icon_occupancy_rate_SswkazfYOY.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bat6bob7qff1bym/kpi_icon_occupancy_rate_SswkazfYOY.png
new file mode 100644
index 0000000..4b5ae6b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bat6bob7qff1bym/kpi_icon_occupancy_rate_SswkazfYOY.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bat6bob7qff1bym/kpi_icon_occupancy_rate_SswkazfYOY.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bat6bob7qff1bym/kpi_icon_occupancy_rate_SswkazfYOY.png.attrs
new file mode 100644
index 0000000..b16288e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bat6bob7qff1bym/kpi_icon_occupancy_rate_SswkazfYOY.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OccupancyRate.png"},"md5":"Cs+jJNffYFWAhBqJwmKX0A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bat6bob7qff1bym/thumbs_kpi_icon_occupancy_rate_SswkazfYOY.png/100x100_kpi_icon_occupancy_rate_SswkazfYOY.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bat6bob7qff1bym/thumbs_kpi_icon_occupancy_rate_SswkazfYOY.png/100x100_kpi_icon_occupancy_rate_SswkazfYOY.png
new file mode 100644
index 0000000..1f6d56d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bat6bob7qff1bym/thumbs_kpi_icon_occupancy_rate_SswkazfYOY.png/100x100_kpi_icon_occupancy_rate_SswkazfYOY.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bat6bob7qff1bym/thumbs_kpi_icon_occupancy_rate_SswkazfYOY.png/100x100_kpi_icon_occupancy_rate_SswkazfYOY.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bat6bob7qff1bym/thumbs_kpi_icon_occupancy_rate_SswkazfYOY.png/100x100_kpi_icon_occupancy_rate_SswkazfYOY.png.attrs
new file mode 100644
index 0000000..5da8ec2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bat6bob7qff1bym/thumbs_kpi_icon_occupancy_rate_SswkazfYOY.png/100x100_kpi_icon_occupancy_rate_SswkazfYOY.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"U+jFTo4vOOwg1q6sg8TA+A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bb9slpbexf6mppd/kpi_icon_value_added_Ma9ChmOPZ6.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bb9slpbexf6mppd/kpi_icon_value_added_Ma9ChmOPZ6.png
new file mode 100644
index 0000000..9761a09
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bb9slpbexf6mppd/kpi_icon_value_added_Ma9ChmOPZ6.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bb9slpbexf6mppd/kpi_icon_value_added_Ma9ChmOPZ6.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bb9slpbexf6mppd/kpi_icon_value_added_Ma9ChmOPZ6.png.attrs
new file mode 100644
index 0000000..5b9b65f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bb9slpbexf6mppd/kpi_icon_value_added_Ma9ChmOPZ6.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-ValueAdded.png"},"md5":"ODLB/T7aI6UKdqsOsETFPA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bb9slpbexf6mppd/thumbs_kpi_icon_value_added_Ma9ChmOPZ6.png/100x100_kpi_icon_value_added_Ma9ChmOPZ6.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bb9slpbexf6mppd/thumbs_kpi_icon_value_added_Ma9ChmOPZ6.png/100x100_kpi_icon_value_added_Ma9ChmOPZ6.png
new file mode 100644
index 0000000..3686884
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bb9slpbexf6mppd/thumbs_kpi_icon_value_added_Ma9ChmOPZ6.png/100x100_kpi_icon_value_added_Ma9ChmOPZ6.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bb9slpbexf6mppd/thumbs_kpi_icon_value_added_Ma9ChmOPZ6.png/100x100_kpi_icon_value_added_Ma9ChmOPZ6.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bb9slpbexf6mppd/thumbs_kpi_icon_value_added_Ma9ChmOPZ6.png/100x100_kpi_icon_value_added_Ma9ChmOPZ6.png.attrs
new file mode 100644
index 0000000..0c3ba02
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bb9slpbexf6mppd/thumbs_kpi_icon_value_added_Ma9ChmOPZ6.png/100x100_kpi_icon_value_added_Ma9ChmOPZ6.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"wNOZfj/MY06Twl57Udm1tw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bq1s157agqqd1zn/kpi_icon_gdpgrowth_SiTClD2DMI.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bq1s157agqqd1zn/kpi_icon_gdpgrowth_SiTClD2DMI.png
new file mode 100644
index 0000000..c75ed94
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bq1s157agqqd1zn/kpi_icon_gdpgrowth_SiTClD2DMI.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bq1s157agqqd1zn/kpi_icon_gdpgrowth_SiTClD2DMI.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bq1s157agqqd1zn/kpi_icon_gdpgrowth_SiTClD2DMI.png.attrs
new file mode 100644
index 0000000..443371c
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bq1s157agqqd1zn/kpi_icon_gdpgrowth_SiTClD2DMI.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDPGrowth.png"},"md5":"BuY+kJCvNDC0gNpwoK0ylw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bq1s157agqqd1zn/thumbs_kpi_icon_gdpgrowth_SiTClD2DMI.png/100x100_kpi_icon_gdpgrowth_SiTClD2DMI.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bq1s157agqqd1zn/thumbs_kpi_icon_gdpgrowth_SiTClD2DMI.png/100x100_kpi_icon_gdpgrowth_SiTClD2DMI.png
new file mode 100644
index 0000000..9ea8435
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bq1s157agqqd1zn/thumbs_kpi_icon_gdpgrowth_SiTClD2DMI.png/100x100_kpi_icon_gdpgrowth_SiTClD2DMI.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bq1s157agqqd1zn/thumbs_kpi_icon_gdpgrowth_SiTClD2DMI.png/100x100_kpi_icon_gdpgrowth_SiTClD2DMI.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bq1s157agqqd1zn/thumbs_kpi_icon_gdpgrowth_SiTClD2DMI.png/100x100_kpi_icon_gdpgrowth_SiTClD2DMI.png.attrs
new file mode 100644
index 0000000..0242c8e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/bq1s157agqqd1zn/thumbs_kpi_icon_gdpgrowth_SiTClD2DMI.png/100x100_kpi_icon_gdpgrowth_SiTClD2DMI.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"9lWaRuZKLGuibexTLg+KTw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/kpi_icon_livestock_sheep_I9OfSl2vKc.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/kpi_icon_livestock_sheep_I9OfSl2vKc.png
new file mode 100644
index 0000000..bcf7875
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/kpi_icon_livestock_sheep_I9OfSl2vKc.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/kpi_icon_livestock_sheep_I9OfSl2vKc.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/kpi_icon_livestock_sheep_I9OfSl2vKc.png.attrs
new file mode 100644
index 0000000..af774bc
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/kpi_icon_livestock_sheep_I9OfSl2vKc.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LivestockSheep.png"},"md5":"uvgfHXYusytaxXWP86/PMQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/thumbs_kpi_icon_livestock_sheep_I9OfSl2vKc.png/100x100_kpi_icon_livestock_sheep_I9OfSl2vKc.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/thumbs_kpi_icon_livestock_sheep_I9OfSl2vKc.png/100x100_kpi_icon_livestock_sheep_I9OfSl2vKc.png
new file mode 100644
index 0000000..6f08b4a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/thumbs_kpi_icon_livestock_sheep_I9OfSl2vKc.png/100x100_kpi_icon_livestock_sheep_I9OfSl2vKc.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/thumbs_kpi_icon_livestock_sheep_I9OfSl2vKc.png/100x100_kpi_icon_livestock_sheep_I9OfSl2vKc.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/thumbs_kpi_icon_livestock_sheep_I9OfSl2vKc.png/100x100_kpi_icon_livestock_sheep_I9OfSl2vKc.png.attrs
new file mode 100644
index 0000000..fa9eaee
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/thumbs_kpi_icon_livestock_sheep_I9OfSl2vKc.png/100x100_kpi_icon_livestock_sheep_I9OfSl2vKc.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"07ogwztZgxRY87I+T3YS6w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/kpi_icon_gdp_wnPdHkZMp5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/kpi_icon_gdp_wnPdHkZMp5.png
new file mode 100644
index 0000000..00a7246
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/kpi_icon_gdp_wnPdHkZMp5.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/kpi_icon_gdp_wnPdHkZMp5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/kpi_icon_gdp_wnPdHkZMp5.png.attrs
new file mode 100644
index 0000000..aeed7a6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/kpi_icon_gdp_wnPdHkZMp5.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDP.png"},"md5":"GbjBCTBkQMjDA/ePurXQ4w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/thumbs_kpi_icon_gdp_wnPdHkZMp5.png/100x100_kpi_icon_gdp_wnPdHkZMp5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/thumbs_kpi_icon_gdp_wnPdHkZMp5.png/100x100_kpi_icon_gdp_wnPdHkZMp5.png
new file mode 100644
index 0000000..1f4a9d5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/thumbs_kpi_icon_gdp_wnPdHkZMp5.png/100x100_kpi_icon_gdp_wnPdHkZMp5.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/thumbs_kpi_icon_gdp_wnPdHkZMp5.png/100x100_kpi_icon_gdp_wnPdHkZMp5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/thumbs_kpi_icon_gdp_wnPdHkZMp5.png/100x100_kpi_icon_gdp_wnPdHkZMp5.png.attrs
new file mode 100644
index 0000000..1c118ca
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/thumbs_kpi_icon_gdp_wnPdHkZMp5.png/100x100_kpi_icon_gdp_wnPdHkZMp5.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"oR1IfXTRW05tuALKgeFtkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cot6oud4o90pug8/kpi_icon_oil_export_RhCkznDUvN.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cot6oud4o90pug8/kpi_icon_oil_export_RhCkznDUvN.png
new file mode 100644
index 0000000..57076f3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cot6oud4o90pug8/kpi_icon_oil_export_RhCkznDUvN.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cot6oud4o90pug8/kpi_icon_oil_export_RhCkznDUvN.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cot6oud4o90pug8/kpi_icon_oil_export_RhCkznDUvN.png.attrs
new file mode 100644
index 0000000..1b80daf
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cot6oud4o90pug8/kpi_icon_oil_export_RhCkznDUvN.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OilExport.png"},"md5":"N0yA93/49HeIhAyNKrrPHA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cot6oud4o90pug8/thumbs_kpi_icon_oil_export_RhCkznDUvN.png/100x100_kpi_icon_oil_export_RhCkznDUvN.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cot6oud4o90pug8/thumbs_kpi_icon_oil_export_RhCkznDUvN.png/100x100_kpi_icon_oil_export_RhCkznDUvN.png
new file mode 100644
index 0000000..6bd2f64
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cot6oud4o90pug8/thumbs_kpi_icon_oil_export_RhCkznDUvN.png/100x100_kpi_icon_oil_export_RhCkznDUvN.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cot6oud4o90pug8/thumbs_kpi_icon_oil_export_RhCkznDUvN.png/100x100_kpi_icon_oil_export_RhCkznDUvN.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cot6oud4o90pug8/thumbs_kpi_icon_oil_export_RhCkznDUvN.png/100x100_kpi_icon_oil_export_RhCkznDUvN.png.attrs
new file mode 100644
index 0000000..366daa6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cot6oud4o90pug8/thumbs_kpi_icon_oil_export_RhCkznDUvN.png/100x100_kpi_icon_oil_export_RhCkznDUvN.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"QtQNpYi5me0OVZxMW9h2Zg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/male_gAfDXWDBm5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/male_gAfDXWDBm5.png
new file mode 100644
index 0000000..3302645
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/male_gAfDXWDBm5.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/male_gAfDXWDBm5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/male_gAfDXWDBm5.png.attrs
new file mode 100644
index 0000000..8bfde7b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/male_gAfDXWDBm5.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"male.png"},"md5":"gq2puo4WHB/p8O/dYe6AZA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/thumbs_male_gAfDXWDBm5.png/100x100_male_gAfDXWDBm5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/thumbs_male_gAfDXWDBm5.png/100x100_male_gAfDXWDBm5.png
new file mode 100644
index 0000000..6807646
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/thumbs_male_gAfDXWDBm5.png/100x100_male_gAfDXWDBm5.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/thumbs_male_gAfDXWDBm5.png/100x100_male_gAfDXWDBm5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/thumbs_male_gAfDXWDBm5.png/100x100_male_gAfDXWDBm5.png.attrs
new file mode 100644
index 0000000..178e495
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/thumbs_male_gAfDXWDBm5.png/100x100_male_gAfDXWDBm5.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"Ua07BI7xJGVJ7eVStoTK3g=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/kpi_icon_bed_private_2VIbzju1PG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/kpi_icon_bed_private_2VIbzju1PG.png
new file mode 100644
index 0000000..8240e4c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/kpi_icon_bed_private_2VIbzju1PG.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/kpi_icon_bed_private_2VIbzju1PG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/kpi_icon_bed_private_2VIbzju1PG.png.attrs
new file mode 100644
index 0000000..49d2939
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/kpi_icon_bed_private_2VIbzju1PG.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-BedPrivate.png"},"md5":"9xCfrv5RZVEmdTPcku8LSA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/kpi_icon_bed_private_UqWDwhuvzV.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/kpi_icon_bed_private_UqWDwhuvzV.png
new file mode 100644
index 0000000..77f9a23
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/kpi_icon_bed_private_UqWDwhuvzV.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/kpi_icon_bed_private_UqWDwhuvzV.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/kpi_icon_bed_private_UqWDwhuvzV.png.attrs
new file mode 100644
index 0000000..9e33e36
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/kpi_icon_bed_private_UqWDwhuvzV.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-BedPrivate.png"},"md5":"dn3yPZ7kJcS4keAy2DNwnA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/thumbs_kpi_icon_bed_private_2VIbzju1PG.png/100x100_kpi_icon_bed_private_2VIbzju1PG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/thumbs_kpi_icon_bed_private_2VIbzju1PG.png/100x100_kpi_icon_bed_private_2VIbzju1PG.png
new file mode 100644
index 0000000..28ebde0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/thumbs_kpi_icon_bed_private_2VIbzju1PG.png/100x100_kpi_icon_bed_private_2VIbzju1PG.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/thumbs_kpi_icon_bed_private_2VIbzju1PG.png/100x100_kpi_icon_bed_private_2VIbzju1PG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/thumbs_kpi_icon_bed_private_2VIbzju1PG.png/100x100_kpi_icon_bed_private_2VIbzju1PG.png.attrs
new file mode 100644
index 0000000..1d02c6f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/thumbs_kpi_icon_bed_private_2VIbzju1PG.png/100x100_kpi_icon_bed_private_2VIbzju1PG.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"GMetWw6/PY6iyrOc64H5YA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/thumbs_kpi_icon_bed_private_UqWDwhuvzV.png/100x100_kpi_icon_bed_private_UqWDwhuvzV.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/thumbs_kpi_icon_bed_private_UqWDwhuvzV.png/100x100_kpi_icon_bed_private_UqWDwhuvzV.png
new file mode 100644
index 0000000..75467ad
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/thumbs_kpi_icon_bed_private_UqWDwhuvzV.png/100x100_kpi_icon_bed_private_UqWDwhuvzV.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/thumbs_kpi_icon_bed_private_UqWDwhuvzV.png/100x100_kpi_icon_bed_private_UqWDwhuvzV.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/thumbs_kpi_icon_bed_private_UqWDwhuvzV.png/100x100_kpi_icon_bed_private_UqWDwhuvzV.png.attrs
new file mode 100644
index 0000000..61a78ef
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/cx0odwshl9gsu1a/thumbs_kpi_icon_bed_private_UqWDwhuvzV.png/100x100_kpi_icon_bed_private_UqWDwhuvzV.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"4+JA2k4qJ8X44ldYT5xyrA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2gh7n4ki449vga/kpi_icon_import_kTQxgtQnHo.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2gh7n4ki449vga/kpi_icon_import_kTQxgtQnHo.png
new file mode 100644
index 0000000..72e1c18
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2gh7n4ki449vga/kpi_icon_import_kTQxgtQnHo.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2gh7n4ki449vga/kpi_icon_import_kTQxgtQnHo.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2gh7n4ki449vga/kpi_icon_import_kTQxgtQnHo.png.attrs
new file mode 100644
index 0000000..e7874d0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2gh7n4ki449vga/kpi_icon_import_kTQxgtQnHo.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Import.png"},"md5":"2BDdMENO2Qr0frmP5x6KWQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2gh7n4ki449vga/thumbs_kpi_icon_import_kTQxgtQnHo.png/100x100_kpi_icon_import_kTQxgtQnHo.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2gh7n4ki449vga/thumbs_kpi_icon_import_kTQxgtQnHo.png/100x100_kpi_icon_import_kTQxgtQnHo.png
new file mode 100644
index 0000000..be588a5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2gh7n4ki449vga/thumbs_kpi_icon_import_kTQxgtQnHo.png/100x100_kpi_icon_import_kTQxgtQnHo.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2gh7n4ki449vga/thumbs_kpi_icon_import_kTQxgtQnHo.png/100x100_kpi_icon_import_kTQxgtQnHo.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2gh7n4ki449vga/thumbs_kpi_icon_import_kTQxgtQnHo.png/100x100_kpi_icon_import_kTQxgtQnHo.png.attrs
new file mode 100644
index 0000000..974e6f4
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2gh7n4ki449vga/thumbs_kpi_icon_import_kTQxgtQnHo.png/100x100_kpi_icon_import_kTQxgtQnHo.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zgwJqK1psQOQsoWeaubwUg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/kpi_icon_livestock_camels_xg6OFI0hpX.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/kpi_icon_livestock_camels_xg6OFI0hpX.png
new file mode 100644
index 0000000..83e63c3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/kpi_icon_livestock_camels_xg6OFI0hpX.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/kpi_icon_livestock_camels_xg6OFI0hpX.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/kpi_icon_livestock_camels_xg6OFI0hpX.png.attrs
new file mode 100644
index 0000000..e86e2b2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/kpi_icon_livestock_camels_xg6OFI0hpX.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LivestockCamels.png"},"md5":"ZsXt5FAGlKkn7OqD2ACfPQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/thumbs_kpi_icon_livestock_camels_xg6OFI0hpX.png/100x100_kpi_icon_livestock_camels_xg6OFI0hpX.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/thumbs_kpi_icon_livestock_camels_xg6OFI0hpX.png/100x100_kpi_icon_livestock_camels_xg6OFI0hpX.png
new file mode 100644
index 0000000..be17b14
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/thumbs_kpi_icon_livestock_camels_xg6OFI0hpX.png/100x100_kpi_icon_livestock_camels_xg6OFI0hpX.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/thumbs_kpi_icon_livestock_camels_xg6OFI0hpX.png/100x100_kpi_icon_livestock_camels_xg6OFI0hpX.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/thumbs_kpi_icon_livestock_camels_xg6OFI0hpX.png/100x100_kpi_icon_livestock_camels_xg6OFI0hpX.png.attrs
new file mode 100644
index 0000000..f6bc315
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/thumbs_kpi_icon_livestock_camels_xg6OFI0hpX.png/100x100_kpi_icon_livestock_camels_xg6OFI0hpX.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"d+BsCUhtU7PtTiNIG3YEzg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/kpi_icon_livestock_cattles_mv8PbIDPT0.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/kpi_icon_livestock_cattles_mv8PbIDPT0.png
new file mode 100644
index 0000000..3d534eb
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/kpi_icon_livestock_cattles_mv8PbIDPT0.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/kpi_icon_livestock_cattles_mv8PbIDPT0.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/kpi_icon_livestock_cattles_mv8PbIDPT0.png.attrs
new file mode 100644
index 0000000..c1dd8d8
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/kpi_icon_livestock_cattles_mv8PbIDPT0.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LivestockCattles.png"},"md5":"DUjKL1yZT8pt3ybZuqCXqA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/thumbs_kpi_icon_livestock_cattles_mv8PbIDPT0.png/100x100_kpi_icon_livestock_cattles_mv8PbIDPT0.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/thumbs_kpi_icon_livestock_cattles_mv8PbIDPT0.png/100x100_kpi_icon_livestock_cattles_mv8PbIDPT0.png
new file mode 100644
index 0000000..6485752
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/thumbs_kpi_icon_livestock_cattles_mv8PbIDPT0.png/100x100_kpi_icon_livestock_cattles_mv8PbIDPT0.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/thumbs_kpi_icon_livestock_cattles_mv8PbIDPT0.png/100x100_kpi_icon_livestock_cattles_mv8PbIDPT0.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/thumbs_kpi_icon_livestock_cattles_mv8PbIDPT0.png/100x100_kpi_icon_livestock_cattles_mv8PbIDPT0.png.attrs
new file mode 100644
index 0000000..2ff4e7d
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/thumbs_kpi_icon_livestock_cattles_mv8PbIDPT0.png/100x100_kpi_icon_livestock_cattles_mv8PbIDPT0.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"Bd8Ei+2GWlcr7qQbIw2nBA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/e7fofeg715iw98m/kpi_icon_trade_value_Js6Egbylik.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/e7fofeg715iw98m/kpi_icon_trade_value_Js6Egbylik.png
new file mode 100644
index 0000000..28031f6
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/e7fofeg715iw98m/kpi_icon_trade_value_Js6Egbylik.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/e7fofeg715iw98m/kpi_icon_trade_value_Js6Egbylik.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/e7fofeg715iw98m/kpi_icon_trade_value_Js6Egbylik.png.attrs
new file mode 100644
index 0000000..c333cc4
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/e7fofeg715iw98m/kpi_icon_trade_value_Js6Egbylik.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-TradeValue.png"},"md5":"hIn1bZ53330VO9khqs8Z4w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/e7fofeg715iw98m/thumbs_kpi_icon_trade_value_Js6Egbylik.png/100x100_kpi_icon_trade_value_Js6Egbylik.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/e7fofeg715iw98m/thumbs_kpi_icon_trade_value_Js6Egbylik.png/100x100_kpi_icon_trade_value_Js6Egbylik.png
new file mode 100644
index 0000000..8f4db69
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/e7fofeg715iw98m/thumbs_kpi_icon_trade_value_Js6Egbylik.png/100x100_kpi_icon_trade_value_Js6Egbylik.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/e7fofeg715iw98m/thumbs_kpi_icon_trade_value_Js6Egbylik.png/100x100_kpi_icon_trade_value_Js6Egbylik.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/e7fofeg715iw98m/thumbs_kpi_icon_trade_value_Js6Egbylik.png/100x100_kpi_icon_trade_value_Js6Egbylik.png.attrs
new file mode 100644
index 0000000..d6185a8
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/e7fofeg715iw98m/thumbs_kpi_icon_trade_value_Js6Egbylik.png/100x100_kpi_icon_trade_value_Js6Egbylik.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"SItSYiwb1hbFexDTz1D5gg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/kpi_icon_elecricity_ft926C2b66.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/kpi_icon_elecricity_ft926C2b66.png
new file mode 100644
index 0000000..92a75b0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/kpi_icon_elecricity_ft926C2b66.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/kpi_icon_elecricity_ft926C2b66.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/kpi_icon_elecricity_ft926C2b66.png.attrs
new file mode 100644
index 0000000..5d76e71
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/kpi_icon_elecricity_ft926C2b66.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Elecricity.png"},"md5":"g5SZ60AHnEGY0Rvlbnjfjw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/thumbs_kpi_icon_elecricity_ft926C2b66.png/100x100_kpi_icon_elecricity_ft926C2b66.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/thumbs_kpi_icon_elecricity_ft926C2b66.png/100x100_kpi_icon_elecricity_ft926C2b66.png
new file mode 100644
index 0000000..d037f12
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/thumbs_kpi_icon_elecricity_ft926C2b66.png/100x100_kpi_icon_elecricity_ft926C2b66.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/thumbs_kpi_icon_elecricity_ft926C2b66.png/100x100_kpi_icon_elecricity_ft926C2b66.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/thumbs_kpi_icon_elecricity_ft926C2b66.png/100x100_kpi_icon_elecricity_ft926C2b66.png.attrs
new file mode 100644
index 0000000..0bfc718
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/thumbs_kpi_icon_elecricity_ft926C2b66.png/100x100_kpi_icon_elecricity_ft926C2b66.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"w0Nm4f4pCYaIpDpuEhQVHg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/flxzwej41cv4jw1/kpi_icon_gdp_zILvwGXIFx.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/flxzwej41cv4jw1/kpi_icon_gdp_zILvwGXIFx.png
new file mode 100644
index 0000000..00a7246
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/flxzwej41cv4jw1/kpi_icon_gdp_zILvwGXIFx.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/flxzwej41cv4jw1/kpi_icon_gdp_zILvwGXIFx.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/flxzwej41cv4jw1/kpi_icon_gdp_zILvwGXIFx.png.attrs
new file mode 100644
index 0000000..aeed7a6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/flxzwej41cv4jw1/kpi_icon_gdp_zILvwGXIFx.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDP.png"},"md5":"GbjBCTBkQMjDA/ePurXQ4w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/flxzwej41cv4jw1/thumbs_kpi_icon_gdp_zILvwGXIFx.png/100x100_kpi_icon_gdp_zILvwGXIFx.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/flxzwej41cv4jw1/thumbs_kpi_icon_gdp_zILvwGXIFx.png/100x100_kpi_icon_gdp_zILvwGXIFx.png
new file mode 100644
index 0000000..1f4a9d5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/flxzwej41cv4jw1/thumbs_kpi_icon_gdp_zILvwGXIFx.png/100x100_kpi_icon_gdp_zILvwGXIFx.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/flxzwej41cv4jw1/thumbs_kpi_icon_gdp_zILvwGXIFx.png/100x100_kpi_icon_gdp_zILvwGXIFx.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/flxzwej41cv4jw1/thumbs_kpi_icon_gdp_zILvwGXIFx.png/100x100_kpi_icon_gdp_zILvwGXIFx.png.attrs
new file mode 100644
index 0000000..1c118ca
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/flxzwej41cv4jw1/thumbs_kpi_icon_gdp_zILvwGXIFx.png/100x100_kpi_icon_gdp_zILvwGXIFx.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"oR1IfXTRW05tuALKgeFtkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/kpi_icon_livestock_goats_YrTaYqtwwd.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/kpi_icon_livestock_goats_YrTaYqtwwd.png
new file mode 100644
index 0000000..d4efb9e
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/kpi_icon_livestock_goats_YrTaYqtwwd.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/kpi_icon_livestock_goats_YrTaYqtwwd.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/kpi_icon_livestock_goats_YrTaYqtwwd.png.attrs
new file mode 100644
index 0000000..ab34776
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/kpi_icon_livestock_goats_YrTaYqtwwd.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LivestockGoats.png"},"md5":"zVK8ySPjR3YA1nXAV1VHvw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/thumbs_kpi_icon_livestock_goats_YrTaYqtwwd.png/100x100_kpi_icon_livestock_goats_YrTaYqtwwd.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/thumbs_kpi_icon_livestock_goats_YrTaYqtwwd.png/100x100_kpi_icon_livestock_goats_YrTaYqtwwd.png
new file mode 100644
index 0000000..d07c9b0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/thumbs_kpi_icon_livestock_goats_YrTaYqtwwd.png/100x100_kpi_icon_livestock_goats_YrTaYqtwwd.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/thumbs_kpi_icon_livestock_goats_YrTaYqtwwd.png/100x100_kpi_icon_livestock_goats_YrTaYqtwwd.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/thumbs_kpi_icon_livestock_goats_YrTaYqtwwd.png/100x100_kpi_icon_livestock_goats_YrTaYqtwwd.png.attrs
new file mode 100644
index 0000000..50ad5b6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/thumbs_kpi_icon_livestock_goats_YrTaYqtwwd.png/100x100_kpi_icon_livestock_goats_YrTaYqtwwd.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"JemDzB+TNQLWrDLe1lxu6g=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/kpi_icon_labor_force_4QZdphorxj.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/kpi_icon_labor_force_4QZdphorxj.png
new file mode 100644
index 0000000..283e064
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/kpi_icon_labor_force_4QZdphorxj.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/kpi_icon_labor_force_4QZdphorxj.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/kpi_icon_labor_force_4QZdphorxj.png.attrs
new file mode 100644
index 0000000..44c019b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/kpi_icon_labor_force_4QZdphorxj.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LaborForce.png"},"md5":"zOhby4VZ5jRoL1W0+9MYaw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/kpi_icon_labor_force_uKKCGatanK.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/kpi_icon_labor_force_uKKCGatanK.png
new file mode 100644
index 0000000..ee4a8e0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/kpi_icon_labor_force_uKKCGatanK.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/kpi_icon_labor_force_uKKCGatanK.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/kpi_icon_labor_force_uKKCGatanK.png.attrs
new file mode 100644
index 0000000..08bb83e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/kpi_icon_labor_force_uKKCGatanK.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LaborForce.png"},"md5":"EgSZx2XltAC7A2ZG7IvlfA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/thumbs_kpi_icon_labor_force_4QZdphorxj.png/100x100_kpi_icon_labor_force_4QZdphorxj.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/thumbs_kpi_icon_labor_force_4QZdphorxj.png/100x100_kpi_icon_labor_force_4QZdphorxj.png
new file mode 100644
index 0000000..2d3854d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/thumbs_kpi_icon_labor_force_4QZdphorxj.png/100x100_kpi_icon_labor_force_4QZdphorxj.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/thumbs_kpi_icon_labor_force_4QZdphorxj.png/100x100_kpi_icon_labor_force_4QZdphorxj.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/thumbs_kpi_icon_labor_force_4QZdphorxj.png/100x100_kpi_icon_labor_force_4QZdphorxj.png.attrs
new file mode 100644
index 0000000..89b03c8
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/thumbs_kpi_icon_labor_force_4QZdphorxj.png/100x100_kpi_icon_labor_force_4QZdphorxj.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"ft97NHJeY64GPOFwCY9FKg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/thumbs_kpi_icon_labor_force_uKKCGatanK.png/100x100_kpi_icon_labor_force_uKKCGatanK.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/thumbs_kpi_icon_labor_force_uKKCGatanK.png/100x100_kpi_icon_labor_force_uKKCGatanK.png
new file mode 100644
index 0000000..7d9a723
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/thumbs_kpi_icon_labor_force_uKKCGatanK.png/100x100_kpi_icon_labor_force_uKKCGatanK.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/thumbs_kpi_icon_labor_force_uKKCGatanK.png/100x100_kpi_icon_labor_force_uKKCGatanK.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/thumbs_kpi_icon_labor_force_uKKCGatanK.png/100x100_kpi_icon_labor_force_uKKCGatanK.png.attrs
new file mode 100644
index 0000000..eb810e9
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/thumbs_kpi_icon_labor_force_uKKCGatanK.png/100x100_kpi_icon_labor_force_uKKCGatanK.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"LS77yczWzlVE2C6JWnPVGQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gukfkg1515lxhr7/kpi_icon_occupancy_rate_qlRTbLov7n.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gukfkg1515lxhr7/kpi_icon_occupancy_rate_qlRTbLov7n.png
new file mode 100644
index 0000000..4b5ae6b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gukfkg1515lxhr7/kpi_icon_occupancy_rate_qlRTbLov7n.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gukfkg1515lxhr7/kpi_icon_occupancy_rate_qlRTbLov7n.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gukfkg1515lxhr7/kpi_icon_occupancy_rate_qlRTbLov7n.png.attrs
new file mode 100644
index 0000000..b16288e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gukfkg1515lxhr7/kpi_icon_occupancy_rate_qlRTbLov7n.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OccupancyRate.png"},"md5":"Cs+jJNffYFWAhBqJwmKX0A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gukfkg1515lxhr7/thumbs_kpi_icon_occupancy_rate_qlRTbLov7n.png/100x100_kpi_icon_occupancy_rate_qlRTbLov7n.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gukfkg1515lxhr7/thumbs_kpi_icon_occupancy_rate_qlRTbLov7n.png/100x100_kpi_icon_occupancy_rate_qlRTbLov7n.png
new file mode 100644
index 0000000..1f6d56d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gukfkg1515lxhr7/thumbs_kpi_icon_occupancy_rate_qlRTbLov7n.png/100x100_kpi_icon_occupancy_rate_qlRTbLov7n.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gukfkg1515lxhr7/thumbs_kpi_icon_occupancy_rate_qlRTbLov7n.png/100x100_kpi_icon_occupancy_rate_qlRTbLov7n.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gukfkg1515lxhr7/thumbs_kpi_icon_occupancy_rate_qlRTbLov7n.png/100x100_kpi_icon_occupancy_rate_qlRTbLov7n.png.attrs
new file mode 100644
index 0000000..5da8ec2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/gukfkg1515lxhr7/thumbs_kpi_icon_occupancy_rate_qlRTbLov7n.png/100x100_kpi_icon_occupancy_rate_qlRTbLov7n.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"U+jFTo4vOOwg1q6sg8TA+A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/kpi_icon_gov_centers_1fNLSzuM1I.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/kpi_icon_gov_centers_1fNLSzuM1I.png
new file mode 100644
index 0000000..90d768e
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/kpi_icon_gov_centers_1fNLSzuM1I.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/kpi_icon_gov_centers_1fNLSzuM1I.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/kpi_icon_gov_centers_1fNLSzuM1I.png.attrs
new file mode 100644
index 0000000..58eafcd
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/kpi_icon_gov_centers_1fNLSzuM1I.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GovCenters.png"},"md5":"+otxpA2z8F/exzFdk/glew=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/kpi_icon_gov_centers_MLzK3nuhXD.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/kpi_icon_gov_centers_MLzK3nuhXD.png
new file mode 100644
index 0000000..73d8e39
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/kpi_icon_gov_centers_MLzK3nuhXD.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/kpi_icon_gov_centers_MLzK3nuhXD.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/kpi_icon_gov_centers_MLzK3nuhXD.png.attrs
new file mode 100644
index 0000000..bda5f00
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/kpi_icon_gov_centers_MLzK3nuhXD.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GovCenters.png"},"md5":"oI/Pws3Lr9JikiKltlQItg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/thumbs_kpi_icon_gov_centers_1fNLSzuM1I.png/100x100_kpi_icon_gov_centers_1fNLSzuM1I.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/thumbs_kpi_icon_gov_centers_1fNLSzuM1I.png/100x100_kpi_icon_gov_centers_1fNLSzuM1I.png
new file mode 100644
index 0000000..80d5ef3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/thumbs_kpi_icon_gov_centers_1fNLSzuM1I.png/100x100_kpi_icon_gov_centers_1fNLSzuM1I.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/thumbs_kpi_icon_gov_centers_1fNLSzuM1I.png/100x100_kpi_icon_gov_centers_1fNLSzuM1I.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/thumbs_kpi_icon_gov_centers_1fNLSzuM1I.png/100x100_kpi_icon_gov_centers_1fNLSzuM1I.png.attrs
new file mode 100644
index 0000000..483174a
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/thumbs_kpi_icon_gov_centers_1fNLSzuM1I.png/100x100_kpi_icon_gov_centers_1fNLSzuM1I.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"1XanNMPQCA19qiamtoH0FA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/thumbs_kpi_icon_gov_centers_MLzK3nuhXD.png/100x100_kpi_icon_gov_centers_MLzK3nuhXD.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/thumbs_kpi_icon_gov_centers_MLzK3nuhXD.png/100x100_kpi_icon_gov_centers_MLzK3nuhXD.png
new file mode 100644
index 0000000..a47dcc7
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/thumbs_kpi_icon_gov_centers_MLzK3nuhXD.png/100x100_kpi_icon_gov_centers_MLzK3nuhXD.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/thumbs_kpi_icon_gov_centers_MLzK3nuhXD.png/100x100_kpi_icon_gov_centers_MLzK3nuhXD.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/thumbs_kpi_icon_gov_centers_MLzK3nuhXD.png/100x100_kpi_icon_gov_centers_MLzK3nuhXD.png.attrs
new file mode 100644
index 0000000..888cfdb
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/h18rsp3wepi7tml/thumbs_kpi_icon_gov_centers_MLzK3nuhXD.png/100x100_kpi_icon_gov_centers_MLzK3nuhXD.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"6Uk6rxjWRiCWyxUtTK4f1Q=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/kpi_icon_elecricity_6Hlh7798fT.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/kpi_icon_elecricity_6Hlh7798fT.png
new file mode 100644
index 0000000..92a75b0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/kpi_icon_elecricity_6Hlh7798fT.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/kpi_icon_elecricity_6Hlh7798fT.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/kpi_icon_elecricity_6Hlh7798fT.png.attrs
new file mode 100644
index 0000000..5d76e71
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/kpi_icon_elecricity_6Hlh7798fT.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Elecricity.png"},"md5":"g5SZ60AHnEGY0Rvlbnjfjw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/thumbs_kpi_icon_elecricity_6Hlh7798fT.png/100x100_kpi_icon_elecricity_6Hlh7798fT.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/thumbs_kpi_icon_elecricity_6Hlh7798fT.png/100x100_kpi_icon_elecricity_6Hlh7798fT.png
new file mode 100644
index 0000000..d037f12
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/thumbs_kpi_icon_elecricity_6Hlh7798fT.png/100x100_kpi_icon_elecricity_6Hlh7798fT.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/thumbs_kpi_icon_elecricity_6Hlh7798fT.png/100x100_kpi_icon_elecricity_6Hlh7798fT.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/thumbs_kpi_icon_elecricity_6Hlh7798fT.png/100x100_kpi_icon_elecricity_6Hlh7798fT.png.attrs
new file mode 100644
index 0000000..0bfc718
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/thumbs_kpi_icon_elecricity_6Hlh7798fT.png/100x100_kpi_icon_elecricity_6Hlh7798fT.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"w0Nm4f4pCYaIpDpuEhQVHg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/kpi_icon_consumption_WVKrWyTqtm.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/kpi_icon_consumption_WVKrWyTqtm.png
new file mode 100644
index 0000000..f41e6b0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/kpi_icon_consumption_WVKrWyTqtm.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/kpi_icon_consumption_WVKrWyTqtm.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/kpi_icon_consumption_WVKrWyTqtm.png.attrs
new file mode 100644
index 0000000..6a24739
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/kpi_icon_consumption_WVKrWyTqtm.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Consumption.png"},"md5":"f1NUArqFL42VWuleVDQ+vQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/thumbs_kpi_icon_consumption_WVKrWyTqtm.png/100x100_kpi_icon_consumption_WVKrWyTqtm.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/thumbs_kpi_icon_consumption_WVKrWyTqtm.png/100x100_kpi_icon_consumption_WVKrWyTqtm.png
new file mode 100644
index 0000000..e5d6b86
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/thumbs_kpi_icon_consumption_WVKrWyTqtm.png/100x100_kpi_icon_consumption_WVKrWyTqtm.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/thumbs_kpi_icon_consumption_WVKrWyTqtm.png/100x100_kpi_icon_consumption_WVKrWyTqtm.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/thumbs_kpi_icon_consumption_WVKrWyTqtm.png/100x100_kpi_icon_consumption_WVKrWyTqtm.png.attrs
new file mode 100644
index 0000000..8f1222c
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/thumbs_kpi_icon_consumption_WVKrWyTqtm.png/100x100_kpi_icon_consumption_WVKrWyTqtm.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"PMmkMsIDsFA+XGvZjuhYhA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/kpi_icon_desalinated_water_production_QoYGRatrLO.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/kpi_icon_desalinated_water_production_QoYGRatrLO.png
new file mode 100644
index 0000000..cfdd4b8
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/kpi_icon_desalinated_water_production_QoYGRatrLO.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/kpi_icon_desalinated_water_production_QoYGRatrLO.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/kpi_icon_desalinated_water_production_QoYGRatrLO.png.attrs
new file mode 100644
index 0000000..7f9fa56
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/kpi_icon_desalinated_water_production_QoYGRatrLO.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-DesalinatedWaterProduction.png"},"md5":"9Zkzl3VNS+Nu5WYSA1G9uQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/thumbs_kpi_icon_desalinated_water_production_QoYGRatrLO.png/100x100_kpi_icon_desalinated_water_production_QoYGRatrLO.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/thumbs_kpi_icon_desalinated_water_production_QoYGRatrLO.png/100x100_kpi_icon_desalinated_water_production_QoYGRatrLO.png
new file mode 100644
index 0000000..6687129
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/thumbs_kpi_icon_desalinated_water_production_QoYGRatrLO.png/100x100_kpi_icon_desalinated_water_production_QoYGRatrLO.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/thumbs_kpi_icon_desalinated_water_production_QoYGRatrLO.png/100x100_kpi_icon_desalinated_water_production_QoYGRatrLO.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/thumbs_kpi_icon_desalinated_water_production_QoYGRatrLO.png/100x100_kpi_icon_desalinated_water_production_QoYGRatrLO.png.attrs
new file mode 100644
index 0000000..62b86f8
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/thumbs_kpi_icon_desalinated_water_production_QoYGRatrLO.png/100x100_kpi_icon_desalinated_water_production_QoYGRatrLO.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"RcEepz9a0TM+N1pGrctv9Q=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i47nzsfv835pqfk/female_DKjm0NYrvv.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i47nzsfv835pqfk/female_DKjm0NYrvv.png
new file mode 100644
index 0000000..e328a93
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i47nzsfv835pqfk/female_DKjm0NYrvv.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i47nzsfv835pqfk/female_DKjm0NYrvv.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i47nzsfv835pqfk/female_DKjm0NYrvv.png.attrs
new file mode 100644
index 0000000..3c217ec
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i47nzsfv835pqfk/female_DKjm0NYrvv.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"female.png"},"md5":"LHr3qNvXccxDzGNR1QwAiA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i47nzsfv835pqfk/thumbs_female_DKjm0NYrvv.png/100x100_female_DKjm0NYrvv.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i47nzsfv835pqfk/thumbs_female_DKjm0NYrvv.png/100x100_female_DKjm0NYrvv.png
new file mode 100644
index 0000000..4e9492f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i47nzsfv835pqfk/thumbs_female_DKjm0NYrvv.png/100x100_female_DKjm0NYrvv.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i47nzsfv835pqfk/thumbs_female_DKjm0NYrvv.png/100x100_female_DKjm0NYrvv.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i47nzsfv835pqfk/thumbs_female_DKjm0NYrvv.png/100x100_female_DKjm0NYrvv.png.attrs
new file mode 100644
index 0000000..72ab7b2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i47nzsfv835pqfk/thumbs_female_DKjm0NYrvv.png/100x100_female_DKjm0NYrvv.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"6qNv8XkjaWR5lPp91glyrw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/kpi_icon_consumption_0CEOZKF3dC.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/kpi_icon_consumption_0CEOZKF3dC.png
new file mode 100644
index 0000000..f41e6b0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/kpi_icon_consumption_0CEOZKF3dC.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/kpi_icon_consumption_0CEOZKF3dC.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/kpi_icon_consumption_0CEOZKF3dC.png.attrs
new file mode 100644
index 0000000..6a24739
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/kpi_icon_consumption_0CEOZKF3dC.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Consumption.png"},"md5":"f1NUArqFL42VWuleVDQ+vQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/thumbs_kpi_icon_consumption_0CEOZKF3dC.png/100x100_kpi_icon_consumption_0CEOZKF3dC.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/thumbs_kpi_icon_consumption_0CEOZKF3dC.png/100x100_kpi_icon_consumption_0CEOZKF3dC.png
new file mode 100644
index 0000000..e5d6b86
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/thumbs_kpi_icon_consumption_0CEOZKF3dC.png/100x100_kpi_icon_consumption_0CEOZKF3dC.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/thumbs_kpi_icon_consumption_0CEOZKF3dC.png/100x100_kpi_icon_consumption_0CEOZKF3dC.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/thumbs_kpi_icon_consumption_0CEOZKF3dC.png/100x100_kpi_icon_consumption_0CEOZKF3dC.png.attrs
new file mode 100644
index 0000000..8f1222c
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/thumbs_kpi_icon_consumption_0CEOZKF3dC.png/100x100_kpi_icon_consumption_0CEOZKF3dC.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"PMmkMsIDsFA+XGvZjuhYhA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/iepf18zruo9er2c/kpi_icon_import_IwQcEGj4mk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/iepf18zruo9er2c/kpi_icon_import_IwQcEGj4mk.png
new file mode 100644
index 0000000..72e1c18
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/iepf18zruo9er2c/kpi_icon_import_IwQcEGj4mk.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/iepf18zruo9er2c/kpi_icon_import_IwQcEGj4mk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/iepf18zruo9er2c/kpi_icon_import_IwQcEGj4mk.png.attrs
new file mode 100644
index 0000000..e7874d0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/iepf18zruo9er2c/kpi_icon_import_IwQcEGj4mk.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Import.png"},"md5":"2BDdMENO2Qr0frmP5x6KWQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/iepf18zruo9er2c/thumbs_kpi_icon_import_IwQcEGj4mk.png/100x100_kpi_icon_import_IwQcEGj4mk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/iepf18zruo9er2c/thumbs_kpi_icon_import_IwQcEGj4mk.png/100x100_kpi_icon_import_IwQcEGj4mk.png
new file mode 100644
index 0000000..be588a5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/iepf18zruo9er2c/thumbs_kpi_icon_import_IwQcEGj4mk.png/100x100_kpi_icon_import_IwQcEGj4mk.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/iepf18zruo9er2c/thumbs_kpi_icon_import_IwQcEGj4mk.png/100x100_kpi_icon_import_IwQcEGj4mk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/iepf18zruo9er2c/thumbs_kpi_icon_import_IwQcEGj4mk.png/100x100_kpi_icon_import_IwQcEGj4mk.png.attrs
new file mode 100644
index 0000000..974e6f4
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/iepf18zruo9er2c/thumbs_kpi_icon_import_IwQcEGj4mk.png/100x100_kpi_icon_import_IwQcEGj4mk.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zgwJqK1psQOQsoWeaubwUg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/jfq56s1xpqvslxf/kpi_icon_re_export_JeoKGOvw0E.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/jfq56s1xpqvslxf/kpi_icon_re_export_JeoKGOvw0E.png
new file mode 100644
index 0000000..2f2daf3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/jfq56s1xpqvslxf/kpi_icon_re_export_JeoKGOvw0E.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/jfq56s1xpqvslxf/kpi_icon_re_export_JeoKGOvw0E.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/jfq56s1xpqvslxf/kpi_icon_re_export_JeoKGOvw0E.png.attrs
new file mode 100644
index 0000000..efc1a5b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/jfq56s1xpqvslxf/kpi_icon_re_export_JeoKGOvw0E.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-ReExport.png"},"md5":"wuPAc6IENmbI4H4Y5iykQA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/jfq56s1xpqvslxf/thumbs_kpi_icon_re_export_JeoKGOvw0E.png/100x100_kpi_icon_re_export_JeoKGOvw0E.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/jfq56s1xpqvslxf/thumbs_kpi_icon_re_export_JeoKGOvw0E.png/100x100_kpi_icon_re_export_JeoKGOvw0E.png
new file mode 100644
index 0000000..6bf965d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/jfq56s1xpqvslxf/thumbs_kpi_icon_re_export_JeoKGOvw0E.png/100x100_kpi_icon_re_export_JeoKGOvw0E.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/jfq56s1xpqvslxf/thumbs_kpi_icon_re_export_JeoKGOvw0E.png/100x100_kpi_icon_re_export_JeoKGOvw0E.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/jfq56s1xpqvslxf/thumbs_kpi_icon_re_export_JeoKGOvw0E.png/100x100_kpi_icon_re_export_JeoKGOvw0E.png.attrs
new file mode 100644
index 0000000..670db8f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/jfq56s1xpqvslxf/thumbs_kpi_icon_re_export_JeoKGOvw0E.png/100x100_kpi_icon_re_export_JeoKGOvw0E.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"55tIdEz4EfKupJ7SzRKiNQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l0jryloa3y9z5jb/kpi_icon_export_whczwyLM3I.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l0jryloa3y9z5jb/kpi_icon_export_whczwyLM3I.png
new file mode 100644
index 0000000..212871f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l0jryloa3y9z5jb/kpi_icon_export_whczwyLM3I.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l0jryloa3y9z5jb/kpi_icon_export_whczwyLM3I.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l0jryloa3y9z5jb/kpi_icon_export_whczwyLM3I.png.attrs
new file mode 100644
index 0000000..8f5ba5d
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l0jryloa3y9z5jb/kpi_icon_export_whczwyLM3I.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Export.png"},"md5":"IPaPiLbUhghzbNypSqwzog=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l0jryloa3y9z5jb/thumbs_kpi_icon_export_whczwyLM3I.png/100x100_kpi_icon_export_whczwyLM3I.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l0jryloa3y9z5jb/thumbs_kpi_icon_export_whczwyLM3I.png/100x100_kpi_icon_export_whczwyLM3I.png
new file mode 100644
index 0000000..58f0a77
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l0jryloa3y9z5jb/thumbs_kpi_icon_export_whczwyLM3I.png/100x100_kpi_icon_export_whczwyLM3I.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l0jryloa3y9z5jb/thumbs_kpi_icon_export_whczwyLM3I.png/100x100_kpi_icon_export_whczwyLM3I.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l0jryloa3y9z5jb/thumbs_kpi_icon_export_whczwyLM3I.png/100x100_kpi_icon_export_whczwyLM3I.png.attrs
new file mode 100644
index 0000000..29b2c96
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l0jryloa3y9z5jb/thumbs_kpi_icon_export_whczwyLM3I.png/100x100_kpi_icon_export_whczwyLM3I.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"gRzHgaCqcAj686AvLdedFA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/kpi_icon_livestock_goats_DILd2HKnU5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/kpi_icon_livestock_goats_DILd2HKnU5.png
new file mode 100644
index 0000000..d4efb9e
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/kpi_icon_livestock_goats_DILd2HKnU5.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/kpi_icon_livestock_goats_DILd2HKnU5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/kpi_icon_livestock_goats_DILd2HKnU5.png.attrs
new file mode 100644
index 0000000..ab34776
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/kpi_icon_livestock_goats_DILd2HKnU5.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LivestockGoats.png"},"md5":"zVK8ySPjR3YA1nXAV1VHvw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/thumbs_kpi_icon_livestock_goats_DILd2HKnU5.png/100x100_kpi_icon_livestock_goats_DILd2HKnU5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/thumbs_kpi_icon_livestock_goats_DILd2HKnU5.png/100x100_kpi_icon_livestock_goats_DILd2HKnU5.png
new file mode 100644
index 0000000..d07c9b0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/thumbs_kpi_icon_livestock_goats_DILd2HKnU5.png/100x100_kpi_icon_livestock_goats_DILd2HKnU5.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/thumbs_kpi_icon_livestock_goats_DILd2HKnU5.png/100x100_kpi_icon_livestock_goats_DILd2HKnU5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/thumbs_kpi_icon_livestock_goats_DILd2HKnU5.png/100x100_kpi_icon_livestock_goats_DILd2HKnU5.png.attrs
new file mode 100644
index 0000000..50ad5b6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/thumbs_kpi_icon_livestock_goats_DILd2HKnU5.png/100x100_kpi_icon_livestock_goats_DILd2HKnU5.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"JemDzB+TNQLWrDLe1lxu6g=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/kpi_icon_divorce_2rS2fEN5Pk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/kpi_icon_divorce_2rS2fEN5Pk.png
new file mode 100644
index 0000000..0c18983
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/kpi_icon_divorce_2rS2fEN5Pk.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/kpi_icon_divorce_2rS2fEN5Pk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/kpi_icon_divorce_2rS2fEN5Pk.png.attrs
new file mode 100644
index 0000000..9ebddb0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/kpi_icon_divorce_2rS2fEN5Pk.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Divorce.png"},"md5":"R75apNv2eSwUNjOGSZOXEA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/kpi_icon_divorce_JxmymDDjUo.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/kpi_icon_divorce_JxmymDDjUo.png
new file mode 100644
index 0000000..fcc71dc
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/kpi_icon_divorce_JxmymDDjUo.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/kpi_icon_divorce_JxmymDDjUo.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/kpi_icon_divorce_JxmymDDjUo.png.attrs
new file mode 100644
index 0000000..a26de2e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/kpi_icon_divorce_JxmymDDjUo.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Divorce.png"},"md5":"RgWvIC19aOqKJ7uOAyRyKw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/thumbs_kpi_icon_divorce_2rS2fEN5Pk.png/100x100_kpi_icon_divorce_2rS2fEN5Pk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/thumbs_kpi_icon_divorce_2rS2fEN5Pk.png/100x100_kpi_icon_divorce_2rS2fEN5Pk.png
new file mode 100644
index 0000000..e727f3b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/thumbs_kpi_icon_divorce_2rS2fEN5Pk.png/100x100_kpi_icon_divorce_2rS2fEN5Pk.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/thumbs_kpi_icon_divorce_2rS2fEN5Pk.png/100x100_kpi_icon_divorce_2rS2fEN5Pk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/thumbs_kpi_icon_divorce_2rS2fEN5Pk.png/100x100_kpi_icon_divorce_2rS2fEN5Pk.png.attrs
new file mode 100644
index 0000000..ac7b299
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/thumbs_kpi_icon_divorce_2rS2fEN5Pk.png/100x100_kpi_icon_divorce_2rS2fEN5Pk.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"1KWZl2RxG0Q5KtzgtdwnoQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/thumbs_kpi_icon_divorce_JxmymDDjUo.png/100x100_kpi_icon_divorce_JxmymDDjUo.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/thumbs_kpi_icon_divorce_JxmymDDjUo.png/100x100_kpi_icon_divorce_JxmymDDjUo.png
new file mode 100644
index 0000000..dc0bc6e
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/thumbs_kpi_icon_divorce_JxmymDDjUo.png/100x100_kpi_icon_divorce_JxmymDDjUo.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/thumbs_kpi_icon_divorce_JxmymDDjUo.png/100x100_kpi_icon_divorce_JxmymDDjUo.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/thumbs_kpi_icon_divorce_JxmymDDjUo.png/100x100_kpi_icon_divorce_JxmymDDjUo.png.attrs
new file mode 100644
index 0000000..8f559dc
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/l8kq2npe53p7xbe/thumbs_kpi_icon_divorce_JxmymDDjUo.png/100x100_kpi_icon_divorce_JxmymDDjUo.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"IiFSrkNvGoy7wSGmvCYUYw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lowdb4cktjyq85h/kpi_icon_gdpgrowth_MiYs0hrQDY.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lowdb4cktjyq85h/kpi_icon_gdpgrowth_MiYs0hrQDY.png
new file mode 100644
index 0000000..f5f673a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lowdb4cktjyq85h/kpi_icon_gdpgrowth_MiYs0hrQDY.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lowdb4cktjyq85h/kpi_icon_gdpgrowth_MiYs0hrQDY.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lowdb4cktjyq85h/kpi_icon_gdpgrowth_MiYs0hrQDY.png.attrs
new file mode 100644
index 0000000..30324ed
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lowdb4cktjyq85h/kpi_icon_gdpgrowth_MiYs0hrQDY.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDPGrowth.png"},"md5":"HqqwH2pjnCJ5qZ2nSzmtUw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lowdb4cktjyq85h/thumbs_kpi_icon_gdpgrowth_MiYs0hrQDY.png/100x100_kpi_icon_gdpgrowth_MiYs0hrQDY.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lowdb4cktjyq85h/thumbs_kpi_icon_gdpgrowth_MiYs0hrQDY.png/100x100_kpi_icon_gdpgrowth_MiYs0hrQDY.png
new file mode 100644
index 0000000..40ddf4f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lowdb4cktjyq85h/thumbs_kpi_icon_gdpgrowth_MiYs0hrQDY.png/100x100_kpi_icon_gdpgrowth_MiYs0hrQDY.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lowdb4cktjyq85h/thumbs_kpi_icon_gdpgrowth_MiYs0hrQDY.png/100x100_kpi_icon_gdpgrowth_MiYs0hrQDY.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lowdb4cktjyq85h/thumbs_kpi_icon_gdpgrowth_MiYs0hrQDY.png/100x100_kpi_icon_gdpgrowth_MiYs0hrQDY.png.attrs
new file mode 100644
index 0000000..edf40cf
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lowdb4cktjyq85h/thumbs_kpi_icon_gdpgrowth_MiYs0hrQDY.png/100x100_kpi_icon_gdpgrowth_MiYs0hrQDY.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zrI7ItL8NvCC4HA5egimuA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lv4udgsv8j2zvqj/male_8PlrIADq6a.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lv4udgsv8j2zvqj/male_8PlrIADq6a.png
new file mode 100644
index 0000000..3302645
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lv4udgsv8j2zvqj/male_8PlrIADq6a.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lv4udgsv8j2zvqj/male_8PlrIADq6a.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lv4udgsv8j2zvqj/male_8PlrIADq6a.png.attrs
new file mode 100644
index 0000000..8bfde7b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lv4udgsv8j2zvqj/male_8PlrIADq6a.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"male.png"},"md5":"gq2puo4WHB/p8O/dYe6AZA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lv4udgsv8j2zvqj/thumbs_male_8PlrIADq6a.png/100x100_male_8PlrIADq6a.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lv4udgsv8j2zvqj/thumbs_male_8PlrIADq6a.png/100x100_male_8PlrIADq6a.png
new file mode 100644
index 0000000..6807646
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lv4udgsv8j2zvqj/thumbs_male_8PlrIADq6a.png/100x100_male_8PlrIADq6a.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lv4udgsv8j2zvqj/thumbs_male_8PlrIADq6a.png/100x100_male_8PlrIADq6a.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lv4udgsv8j2zvqj/thumbs_male_8PlrIADq6a.png/100x100_male_8PlrIADq6a.png.attrs
new file mode 100644
index 0000000..178e495
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lv4udgsv8j2zvqj/thumbs_male_8PlrIADq6a.png/100x100_male_8PlrIADq6a.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"Ua07BI7xJGVJ7eVStoTK3g=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/kpi_icon_natural_reserves_6tygltuiYA.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/kpi_icon_natural_reserves_6tygltuiYA.png
new file mode 100644
index 0000000..c600cfa
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/kpi_icon_natural_reserves_6tygltuiYA.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/kpi_icon_natural_reserves_6tygltuiYA.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/kpi_icon_natural_reserves_6tygltuiYA.png.attrs
new file mode 100644
index 0000000..01764dd
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/kpi_icon_natural_reserves_6tygltuiYA.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-NaturalReserves.png"},"md5":"EidU5zyMspc/3lI2BgLvkg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/thumbs_kpi_icon_natural_reserves_6tygltuiYA.png/100x100_kpi_icon_natural_reserves_6tygltuiYA.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/thumbs_kpi_icon_natural_reserves_6tygltuiYA.png/100x100_kpi_icon_natural_reserves_6tygltuiYA.png
new file mode 100644
index 0000000..3e3d54c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/thumbs_kpi_icon_natural_reserves_6tygltuiYA.png/100x100_kpi_icon_natural_reserves_6tygltuiYA.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/thumbs_kpi_icon_natural_reserves_6tygltuiYA.png/100x100_kpi_icon_natural_reserves_6tygltuiYA.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/thumbs_kpi_icon_natural_reserves_6tygltuiYA.png/100x100_kpi_icon_natural_reserves_6tygltuiYA.png.attrs
new file mode 100644
index 0000000..9058a16
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/thumbs_kpi_icon_natural_reserves_6tygltuiYA.png/100x100_kpi_icon_natural_reserves_6tygltuiYA.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"uiU2k7ZNxToo4t8GzxMZpg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/kpi_icon_natural_reserves_K581aj9fRZ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/kpi_icon_natural_reserves_K581aj9fRZ.png
new file mode 100644
index 0000000..c600cfa
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/kpi_icon_natural_reserves_K581aj9fRZ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/kpi_icon_natural_reserves_K581aj9fRZ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/kpi_icon_natural_reserves_K581aj9fRZ.png.attrs
new file mode 100644
index 0000000..01764dd
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/kpi_icon_natural_reserves_K581aj9fRZ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-NaturalReserves.png"},"md5":"EidU5zyMspc/3lI2BgLvkg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/thumbs_kpi_icon_natural_reserves_K581aj9fRZ.png/100x100_kpi_icon_natural_reserves_K581aj9fRZ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/thumbs_kpi_icon_natural_reserves_K581aj9fRZ.png/100x100_kpi_icon_natural_reserves_K581aj9fRZ.png
new file mode 100644
index 0000000..3e3d54c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/thumbs_kpi_icon_natural_reserves_K581aj9fRZ.png/100x100_kpi_icon_natural_reserves_K581aj9fRZ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/thumbs_kpi_icon_natural_reserves_K581aj9fRZ.png/100x100_kpi_icon_natural_reserves_K581aj9fRZ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/thumbs_kpi_icon_natural_reserves_K581aj9fRZ.png/100x100_kpi_icon_natural_reserves_K581aj9fRZ.png.attrs
new file mode 100644
index 0000000..9058a16
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/thumbs_kpi_icon_natural_reserves_K581aj9fRZ.png/100x100_kpi_icon_natural_reserves_K581aj9fRZ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"uiU2k7ZNxToo4t8GzxMZpg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/kpi_icon_consumption_m0gagho7Lr.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/kpi_icon_consumption_m0gagho7Lr.png
new file mode 100644
index 0000000..f41e6b0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/kpi_icon_consumption_m0gagho7Lr.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/kpi_icon_consumption_m0gagho7Lr.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/kpi_icon_consumption_m0gagho7Lr.png.attrs
new file mode 100644
index 0000000..6a24739
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/kpi_icon_consumption_m0gagho7Lr.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Consumption.png"},"md5":"f1NUArqFL42VWuleVDQ+vQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/thumbs_kpi_icon_consumption_m0gagho7Lr.png/100x100_kpi_icon_consumption_m0gagho7Lr.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/thumbs_kpi_icon_consumption_m0gagho7Lr.png/100x100_kpi_icon_consumption_m0gagho7Lr.png
new file mode 100644
index 0000000..e5d6b86
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/thumbs_kpi_icon_consumption_m0gagho7Lr.png/100x100_kpi_icon_consumption_m0gagho7Lr.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/thumbs_kpi_icon_consumption_m0gagho7Lr.png/100x100_kpi_icon_consumption_m0gagho7Lr.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/thumbs_kpi_icon_consumption_m0gagho7Lr.png/100x100_kpi_icon_consumption_m0gagho7Lr.png.attrs
new file mode 100644
index 0000000..8f1222c
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/thumbs_kpi_icon_consumption_m0gagho7Lr.png/100x100_kpi_icon_consumption_m0gagho7Lr.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"PMmkMsIDsFA+XGvZjuhYhA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/kpi_icon_natural_reserves_pqa2eLvIZi.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/kpi_icon_natural_reserves_pqa2eLvIZi.png
new file mode 100644
index 0000000..c600cfa
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/kpi_icon_natural_reserves_pqa2eLvIZi.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/kpi_icon_natural_reserves_pqa2eLvIZi.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/kpi_icon_natural_reserves_pqa2eLvIZi.png.attrs
new file mode 100644
index 0000000..01764dd
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/kpi_icon_natural_reserves_pqa2eLvIZi.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-NaturalReserves.png"},"md5":"EidU5zyMspc/3lI2BgLvkg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/thumbs_kpi_icon_natural_reserves_pqa2eLvIZi.png/100x100_kpi_icon_natural_reserves_pqa2eLvIZi.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/thumbs_kpi_icon_natural_reserves_pqa2eLvIZi.png/100x100_kpi_icon_natural_reserves_pqa2eLvIZi.png
new file mode 100644
index 0000000..3e3d54c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/thumbs_kpi_icon_natural_reserves_pqa2eLvIZi.png/100x100_kpi_icon_natural_reserves_pqa2eLvIZi.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/thumbs_kpi_icon_natural_reserves_pqa2eLvIZi.png/100x100_kpi_icon_natural_reserves_pqa2eLvIZi.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/thumbs_kpi_icon_natural_reserves_pqa2eLvIZi.png/100x100_kpi_icon_natural_reserves_pqa2eLvIZi.png.attrs
new file mode 100644
index 0000000..9058a16
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/thumbs_kpi_icon_natural_reserves_pqa2eLvIZi.png/100x100_kpi_icon_natural_reserves_pqa2eLvIZi.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"uiU2k7ZNxToo4t8GzxMZpg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/kpi_icon_crops_area_bXIgZDVLdU.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/kpi_icon_crops_area_bXIgZDVLdU.png
new file mode 100644
index 0000000..a3023be
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/kpi_icon_crops_area_bXIgZDVLdU.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/kpi_icon_crops_area_bXIgZDVLdU.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/kpi_icon_crops_area_bXIgZDVLdU.png.attrs
new file mode 100644
index 0000000..4d9ca98
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/kpi_icon_crops_area_bXIgZDVLdU.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-CropsArea.png"},"md5":"6BWT6i/rBlR1hej7AA6Gkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/thumbs_kpi_icon_crops_area_bXIgZDVLdU.png/100x100_kpi_icon_crops_area_bXIgZDVLdU.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/thumbs_kpi_icon_crops_area_bXIgZDVLdU.png/100x100_kpi_icon_crops_area_bXIgZDVLdU.png
new file mode 100644
index 0000000..250b3e0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/thumbs_kpi_icon_crops_area_bXIgZDVLdU.png/100x100_kpi_icon_crops_area_bXIgZDVLdU.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/thumbs_kpi_icon_crops_area_bXIgZDVLdU.png/100x100_kpi_icon_crops_area_bXIgZDVLdU.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/thumbs_kpi_icon_crops_area_bXIgZDVLdU.png/100x100_kpi_icon_crops_area_bXIgZDVLdU.png.attrs
new file mode 100644
index 0000000..ae931b0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/thumbs_kpi_icon_crops_area_bXIgZDVLdU.png/100x100_kpi_icon_crops_area_bXIgZDVLdU.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"srBd6fWEm86XwUV6j55geA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/kpi_icon_natural_reserves_GWWGTer8wA.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/kpi_icon_natural_reserves_GWWGTer8wA.png
new file mode 100644
index 0000000..c600cfa
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/kpi_icon_natural_reserves_GWWGTer8wA.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/kpi_icon_natural_reserves_GWWGTer8wA.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/kpi_icon_natural_reserves_GWWGTer8wA.png.attrs
new file mode 100644
index 0000000..01764dd
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/kpi_icon_natural_reserves_GWWGTer8wA.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-NaturalReserves.png"},"md5":"EidU5zyMspc/3lI2BgLvkg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/thumbs_kpi_icon_natural_reserves_GWWGTer8wA.png/100x100_kpi_icon_natural_reserves_GWWGTer8wA.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/thumbs_kpi_icon_natural_reserves_GWWGTer8wA.png/100x100_kpi_icon_natural_reserves_GWWGTer8wA.png
new file mode 100644
index 0000000..3e3d54c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/thumbs_kpi_icon_natural_reserves_GWWGTer8wA.png/100x100_kpi_icon_natural_reserves_GWWGTer8wA.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/thumbs_kpi_icon_natural_reserves_GWWGTer8wA.png/100x100_kpi_icon_natural_reserves_GWWGTer8wA.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/thumbs_kpi_icon_natural_reserves_GWWGTer8wA.png/100x100_kpi_icon_natural_reserves_GWWGTer8wA.png.attrs
new file mode 100644
index 0000000..9058a16
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/thumbs_kpi_icon_natural_reserves_GWWGTer8wA.png/100x100_kpi_icon_natural_reserves_GWWGTer8wA.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"uiU2k7ZNxToo4t8GzxMZpg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/kpi_icon_livestock_cattles_qtXs2VuLBG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/kpi_icon_livestock_cattles_qtXs2VuLBG.png
new file mode 100644
index 0000000..3d534eb
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/kpi_icon_livestock_cattles_qtXs2VuLBG.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/kpi_icon_livestock_cattles_qtXs2VuLBG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/kpi_icon_livestock_cattles_qtXs2VuLBG.png.attrs
new file mode 100644
index 0000000..c1dd8d8
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/kpi_icon_livestock_cattles_qtXs2VuLBG.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LivestockCattles.png"},"md5":"DUjKL1yZT8pt3ybZuqCXqA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/thumbs_kpi_icon_livestock_cattles_qtXs2VuLBG.png/100x100_kpi_icon_livestock_cattles_qtXs2VuLBG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/thumbs_kpi_icon_livestock_cattles_qtXs2VuLBG.png/100x100_kpi_icon_livestock_cattles_qtXs2VuLBG.png
new file mode 100644
index 0000000..6485752
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/thumbs_kpi_icon_livestock_cattles_qtXs2VuLBG.png/100x100_kpi_icon_livestock_cattles_qtXs2VuLBG.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/thumbs_kpi_icon_livestock_cattles_qtXs2VuLBG.png/100x100_kpi_icon_livestock_cattles_qtXs2VuLBG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/thumbs_kpi_icon_livestock_cattles_qtXs2VuLBG.png/100x100_kpi_icon_livestock_cattles_qtXs2VuLBG.png.attrs
new file mode 100644
index 0000000..2ff4e7d
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/thumbs_kpi_icon_livestock_cattles_qtXs2VuLBG.png/100x100_kpi_icon_livestock_cattles_qtXs2VuLBG.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"Bd8Ei+2GWlcr7qQbIw2nBA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/muw5w1i14cpm7om/kpi_icon_re_export_bqVzWlDxCX.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/muw5w1i14cpm7om/kpi_icon_re_export_bqVzWlDxCX.png
new file mode 100644
index 0000000..2f2daf3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/muw5w1i14cpm7om/kpi_icon_re_export_bqVzWlDxCX.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/muw5w1i14cpm7om/kpi_icon_re_export_bqVzWlDxCX.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/muw5w1i14cpm7om/kpi_icon_re_export_bqVzWlDxCX.png.attrs
new file mode 100644
index 0000000..efc1a5b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/muw5w1i14cpm7om/kpi_icon_re_export_bqVzWlDxCX.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-ReExport.png"},"md5":"wuPAc6IENmbI4H4Y5iykQA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/muw5w1i14cpm7om/thumbs_kpi_icon_re_export_bqVzWlDxCX.png/100x100_kpi_icon_re_export_bqVzWlDxCX.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/muw5w1i14cpm7om/thumbs_kpi_icon_re_export_bqVzWlDxCX.png/100x100_kpi_icon_re_export_bqVzWlDxCX.png
new file mode 100644
index 0000000..6bf965d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/muw5w1i14cpm7om/thumbs_kpi_icon_re_export_bqVzWlDxCX.png/100x100_kpi_icon_re_export_bqVzWlDxCX.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/muw5w1i14cpm7om/thumbs_kpi_icon_re_export_bqVzWlDxCX.png/100x100_kpi_icon_re_export_bqVzWlDxCX.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/muw5w1i14cpm7om/thumbs_kpi_icon_re_export_bqVzWlDxCX.png/100x100_kpi_icon_re_export_bqVzWlDxCX.png.attrs
new file mode 100644
index 0000000..670db8f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/muw5w1i14cpm7om/thumbs_kpi_icon_re_export_bqVzWlDxCX.png/100x100_kpi_icon_re_export_bqVzWlDxCX.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"55tIdEz4EfKupJ7SzRKiNQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv6ahk1ofgeazvq/kpi_icon_population_CA3gxHWhax.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv6ahk1ofgeazvq/kpi_icon_population_CA3gxHWhax.png
new file mode 100644
index 0000000..e2f8fd2
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv6ahk1ofgeazvq/kpi_icon_population_CA3gxHWhax.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv6ahk1ofgeazvq/kpi_icon_population_CA3gxHWhax.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv6ahk1ofgeazvq/kpi_icon_population_CA3gxHWhax.png.attrs
new file mode 100644
index 0000000..ed44252
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv6ahk1ofgeazvq/kpi_icon_population_CA3gxHWhax.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"kpi_icon_population.png"},"md5":"BPQklAKzE1awhyRzVAam6A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv6ahk1ofgeazvq/thumbs_kpi_icon_population_CA3gxHWhax.png/100x100_kpi_icon_population_CA3gxHWhax.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv6ahk1ofgeazvq/thumbs_kpi_icon_population_CA3gxHWhax.png/100x100_kpi_icon_population_CA3gxHWhax.png
new file mode 100644
index 0000000..d552412
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv6ahk1ofgeazvq/thumbs_kpi_icon_population_CA3gxHWhax.png/100x100_kpi_icon_population_CA3gxHWhax.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv6ahk1ofgeazvq/thumbs_kpi_icon_population_CA3gxHWhax.png/100x100_kpi_icon_population_CA3gxHWhax.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv6ahk1ofgeazvq/thumbs_kpi_icon_population_CA3gxHWhax.png/100x100_kpi_icon_population_CA3gxHWhax.png.attrs
new file mode 100644
index 0000000..f63bc77
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv6ahk1ofgeazvq/thumbs_kpi_icon_population_CA3gxHWhax.png/100x100_kpi_icon_population_CA3gxHWhax.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"r8v3ja0ZOKOy5aQ9I7h7CQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/kpi_icon_natural_reserves_Ju8AEP98g4.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/kpi_icon_natural_reserves_Ju8AEP98g4.png
new file mode 100644
index 0000000..c600cfa
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/kpi_icon_natural_reserves_Ju8AEP98g4.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/kpi_icon_natural_reserves_Ju8AEP98g4.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/kpi_icon_natural_reserves_Ju8AEP98g4.png.attrs
new file mode 100644
index 0000000..01764dd
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/kpi_icon_natural_reserves_Ju8AEP98g4.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-NaturalReserves.png"},"md5":"EidU5zyMspc/3lI2BgLvkg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/thumbs_kpi_icon_natural_reserves_Ju8AEP98g4.png/100x100_kpi_icon_natural_reserves_Ju8AEP98g4.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/thumbs_kpi_icon_natural_reserves_Ju8AEP98g4.png/100x100_kpi_icon_natural_reserves_Ju8AEP98g4.png
new file mode 100644
index 0000000..3e3d54c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/thumbs_kpi_icon_natural_reserves_Ju8AEP98g4.png/100x100_kpi_icon_natural_reserves_Ju8AEP98g4.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/thumbs_kpi_icon_natural_reserves_Ju8AEP98g4.png/100x100_kpi_icon_natural_reserves_Ju8AEP98g4.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/thumbs_kpi_icon_natural_reserves_Ju8AEP98g4.png/100x100_kpi_icon_natural_reserves_Ju8AEP98g4.png.attrs
new file mode 100644
index 0000000..9058a16
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/thumbs_kpi_icon_natural_reserves_Ju8AEP98g4.png/100x100_kpi_icon_natural_reserves_Ju8AEP98g4.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"uiU2k7ZNxToo4t8GzxMZpg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n37b92fml50ezxm/kpi_icon_value_added_Pebtpn1Mwr.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n37b92fml50ezxm/kpi_icon_value_added_Pebtpn1Mwr.png
new file mode 100644
index 0000000..9761a09
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n37b92fml50ezxm/kpi_icon_value_added_Pebtpn1Mwr.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n37b92fml50ezxm/kpi_icon_value_added_Pebtpn1Mwr.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n37b92fml50ezxm/kpi_icon_value_added_Pebtpn1Mwr.png.attrs
new file mode 100644
index 0000000..5b9b65f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n37b92fml50ezxm/kpi_icon_value_added_Pebtpn1Mwr.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-ValueAdded.png"},"md5":"ODLB/T7aI6UKdqsOsETFPA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n37b92fml50ezxm/thumbs_kpi_icon_value_added_Pebtpn1Mwr.png/100x100_kpi_icon_value_added_Pebtpn1Mwr.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n37b92fml50ezxm/thumbs_kpi_icon_value_added_Pebtpn1Mwr.png/100x100_kpi_icon_value_added_Pebtpn1Mwr.png
new file mode 100644
index 0000000..3686884
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n37b92fml50ezxm/thumbs_kpi_icon_value_added_Pebtpn1Mwr.png/100x100_kpi_icon_value_added_Pebtpn1Mwr.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n37b92fml50ezxm/thumbs_kpi_icon_value_added_Pebtpn1Mwr.png/100x100_kpi_icon_value_added_Pebtpn1Mwr.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n37b92fml50ezxm/thumbs_kpi_icon_value_added_Pebtpn1Mwr.png/100x100_kpi_icon_value_added_Pebtpn1Mwr.png.attrs
new file mode 100644
index 0000000..0c3ba02
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n37b92fml50ezxm/thumbs_kpi_icon_value_added_Pebtpn1Mwr.png/100x100_kpi_icon_value_added_Pebtpn1Mwr.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"wNOZfj/MY06Twl57Udm1tw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/kpi_icon_aircraft_movement_uOWOiKIaDZ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/kpi_icon_aircraft_movement_uOWOiKIaDZ.png
new file mode 100644
index 0000000..41dcf9b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/kpi_icon_aircraft_movement_uOWOiKIaDZ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/kpi_icon_aircraft_movement_uOWOiKIaDZ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/kpi_icon_aircraft_movement_uOWOiKIaDZ.png.attrs
new file mode 100644
index 0000000..0b6b3aa
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/kpi_icon_aircraft_movement_uOWOiKIaDZ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-AircraftMovement.png"},"md5":"oxc2jPLYObQV+uamwc28HQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/thumbs_kpi_icon_aircraft_movement_uOWOiKIaDZ.png/100x100_kpi_icon_aircraft_movement_uOWOiKIaDZ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/thumbs_kpi_icon_aircraft_movement_uOWOiKIaDZ.png/100x100_kpi_icon_aircraft_movement_uOWOiKIaDZ.png
new file mode 100644
index 0000000..8966d44
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/thumbs_kpi_icon_aircraft_movement_uOWOiKIaDZ.png/100x100_kpi_icon_aircraft_movement_uOWOiKIaDZ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/thumbs_kpi_icon_aircraft_movement_uOWOiKIaDZ.png/100x100_kpi_icon_aircraft_movement_uOWOiKIaDZ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/thumbs_kpi_icon_aircraft_movement_uOWOiKIaDZ.png/100x100_kpi_icon_aircraft_movement_uOWOiKIaDZ.png.attrs
new file mode 100644
index 0000000..a36998c
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/thumbs_kpi_icon_aircraft_movement_uOWOiKIaDZ.png/100x100_kpi_icon_aircraft_movement_uOWOiKIaDZ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"z8aXJVHuOPFjdbIhL/TvAA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/naf2vydg57onufc/kpi_icon_natural_reserves_MFs0OOp8Jc.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/naf2vydg57onufc/kpi_icon_natural_reserves_MFs0OOp8Jc.png
new file mode 100644
index 0000000..c600cfa
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/naf2vydg57onufc/kpi_icon_natural_reserves_MFs0OOp8Jc.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/naf2vydg57onufc/kpi_icon_natural_reserves_MFs0OOp8Jc.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/naf2vydg57onufc/kpi_icon_natural_reserves_MFs0OOp8Jc.png.attrs
new file mode 100644
index 0000000..01764dd
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/naf2vydg57onufc/kpi_icon_natural_reserves_MFs0OOp8Jc.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-NaturalReserves.png"},"md5":"EidU5zyMspc/3lI2BgLvkg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/naf2vydg57onufc/thumbs_kpi_icon_natural_reserves_MFs0OOp8Jc.png/100x100_kpi_icon_natural_reserves_MFs0OOp8Jc.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/naf2vydg57onufc/thumbs_kpi_icon_natural_reserves_MFs0OOp8Jc.png/100x100_kpi_icon_natural_reserves_MFs0OOp8Jc.png
new file mode 100644
index 0000000..3e3d54c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/naf2vydg57onufc/thumbs_kpi_icon_natural_reserves_MFs0OOp8Jc.png/100x100_kpi_icon_natural_reserves_MFs0OOp8Jc.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/naf2vydg57onufc/thumbs_kpi_icon_natural_reserves_MFs0OOp8Jc.png/100x100_kpi_icon_natural_reserves_MFs0OOp8Jc.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/naf2vydg57onufc/thumbs_kpi_icon_natural_reserves_MFs0OOp8Jc.png/100x100_kpi_icon_natural_reserves_MFs0OOp8Jc.png.attrs
new file mode 100644
index 0000000..9058a16
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/naf2vydg57onufc/thumbs_kpi_icon_natural_reserves_MFs0OOp8Jc.png/100x100_kpi_icon_natural_reserves_MFs0OOp8Jc.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"uiU2k7ZNxToo4t8GzxMZpg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/najrq60z581ol7l/kpi_icon_desalinated_water_production_rirCwTmvEX.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/najrq60z581ol7l/kpi_icon_desalinated_water_production_rirCwTmvEX.png
new file mode 100644
index 0000000..cfdd4b8
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/najrq60z581ol7l/kpi_icon_desalinated_water_production_rirCwTmvEX.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/najrq60z581ol7l/kpi_icon_desalinated_water_production_rirCwTmvEX.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/najrq60z581ol7l/kpi_icon_desalinated_water_production_rirCwTmvEX.png.attrs
new file mode 100644
index 0000000..7f9fa56
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/najrq60z581ol7l/kpi_icon_desalinated_water_production_rirCwTmvEX.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-DesalinatedWaterProduction.png"},"md5":"9Zkzl3VNS+Nu5WYSA1G9uQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/najrq60z581ol7l/thumbs_kpi_icon_desalinated_water_production_rirCwTmvEX.png/100x100_kpi_icon_desalinated_water_production_rirCwTmvEX.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/najrq60z581ol7l/thumbs_kpi_icon_desalinated_water_production_rirCwTmvEX.png/100x100_kpi_icon_desalinated_water_production_rirCwTmvEX.png
new file mode 100644
index 0000000..6687129
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/najrq60z581ol7l/thumbs_kpi_icon_desalinated_water_production_rirCwTmvEX.png/100x100_kpi_icon_desalinated_water_production_rirCwTmvEX.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/najrq60z581ol7l/thumbs_kpi_icon_desalinated_water_production_rirCwTmvEX.png/100x100_kpi_icon_desalinated_water_production_rirCwTmvEX.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/najrq60z581ol7l/thumbs_kpi_icon_desalinated_water_production_rirCwTmvEX.png/100x100_kpi_icon_desalinated_water_production_rirCwTmvEX.png.attrs
new file mode 100644
index 0000000..62b86f8
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/najrq60z581ol7l/thumbs_kpi_icon_desalinated_water_production_rirCwTmvEX.png/100x100_kpi_icon_desalinated_water_production_rirCwTmvEX.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"RcEepz9a0TM+N1pGrctv9Q=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/kpi_icon_consumption_nsJTZECMqF.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/kpi_icon_consumption_nsJTZECMqF.png
new file mode 100644
index 0000000..f41e6b0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/kpi_icon_consumption_nsJTZECMqF.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/kpi_icon_consumption_nsJTZECMqF.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/kpi_icon_consumption_nsJTZECMqF.png.attrs
new file mode 100644
index 0000000..6a24739
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/kpi_icon_consumption_nsJTZECMqF.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Consumption.png"},"md5":"f1NUArqFL42VWuleVDQ+vQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/thumbs_kpi_icon_consumption_nsJTZECMqF.png/100x100_kpi_icon_consumption_nsJTZECMqF.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/thumbs_kpi_icon_consumption_nsJTZECMqF.png/100x100_kpi_icon_consumption_nsJTZECMqF.png
new file mode 100644
index 0000000..e5d6b86
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/thumbs_kpi_icon_consumption_nsJTZECMqF.png/100x100_kpi_icon_consumption_nsJTZECMqF.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/thumbs_kpi_icon_consumption_nsJTZECMqF.png/100x100_kpi_icon_consumption_nsJTZECMqF.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/thumbs_kpi_icon_consumption_nsJTZECMqF.png/100x100_kpi_icon_consumption_nsJTZECMqF.png.attrs
new file mode 100644
index 0000000..8f1222c
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/thumbs_kpi_icon_consumption_nsJTZECMqF.png/100x100_kpi_icon_consumption_nsJTZECMqF.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"PMmkMsIDsFA+XGvZjuhYhA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/kpi_icon_value_added_BY4k5ioxxq.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/kpi_icon_value_added_BY4k5ioxxq.png
new file mode 100644
index 0000000..9761a09
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/kpi_icon_value_added_BY4k5ioxxq.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/kpi_icon_value_added_BY4k5ioxxq.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/kpi_icon_value_added_BY4k5ioxxq.png.attrs
new file mode 100644
index 0000000..5b9b65f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/kpi_icon_value_added_BY4k5ioxxq.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-ValueAdded.png"},"md5":"ODLB/T7aI6UKdqsOsETFPA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/thumbs_kpi_icon_value_added_BY4k5ioxxq.png/100x100_kpi_icon_value_added_BY4k5ioxxq.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/thumbs_kpi_icon_value_added_BY4k5ioxxq.png/100x100_kpi_icon_value_added_BY4k5ioxxq.png
new file mode 100644
index 0000000..3686884
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/thumbs_kpi_icon_value_added_BY4k5ioxxq.png/100x100_kpi_icon_value_added_BY4k5ioxxq.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/thumbs_kpi_icon_value_added_BY4k5ioxxq.png/100x100_kpi_icon_value_added_BY4k5ioxxq.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/thumbs_kpi_icon_value_added_BY4k5ioxxq.png/100x100_kpi_icon_value_added_BY4k5ioxxq.png.attrs
new file mode 100644
index 0000000..0c3ba02
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/thumbs_kpi_icon_value_added_BY4k5ioxxq.png/100x100_kpi_icon_value_added_BY4k5ioxxq.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"wNOZfj/MY06Twl57Udm1tw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/kpi_icon_livestock_goats_rGblw8CUfW.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/kpi_icon_livestock_goats_rGblw8CUfW.png
new file mode 100644
index 0000000..d4efb9e
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/kpi_icon_livestock_goats_rGblw8CUfW.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/kpi_icon_livestock_goats_rGblw8CUfW.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/kpi_icon_livestock_goats_rGblw8CUfW.png.attrs
new file mode 100644
index 0000000..ab34776
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/kpi_icon_livestock_goats_rGblw8CUfW.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LivestockGoats.png"},"md5":"zVK8ySPjR3YA1nXAV1VHvw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/thumbs_kpi_icon_livestock_goats_rGblw8CUfW.png/100x100_kpi_icon_livestock_goats_rGblw8CUfW.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/thumbs_kpi_icon_livestock_goats_rGblw8CUfW.png/100x100_kpi_icon_livestock_goats_rGblw8CUfW.png
new file mode 100644
index 0000000..d07c9b0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/thumbs_kpi_icon_livestock_goats_rGblw8CUfW.png/100x100_kpi_icon_livestock_goats_rGblw8CUfW.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/thumbs_kpi_icon_livestock_goats_rGblw8CUfW.png/100x100_kpi_icon_livestock_goats_rGblw8CUfW.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/thumbs_kpi_icon_livestock_goats_rGblw8CUfW.png/100x100_kpi_icon_livestock_goats_rGblw8CUfW.png.attrs
new file mode 100644
index 0000000..50ad5b6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/thumbs_kpi_icon_livestock_goats_rGblw8CUfW.png/100x100_kpi_icon_livestock_goats_rGblw8CUfW.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"JemDzB+TNQLWrDLe1lxu6g=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/kpi_icon_labor_force_bwlj0nrvk2.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/kpi_icon_labor_force_bwlj0nrvk2.png
new file mode 100644
index 0000000..ee4a8e0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/kpi_icon_labor_force_bwlj0nrvk2.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/kpi_icon_labor_force_bwlj0nrvk2.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/kpi_icon_labor_force_bwlj0nrvk2.png.attrs
new file mode 100644
index 0000000..08bb83e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/kpi_icon_labor_force_bwlj0nrvk2.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LaborForce.png"},"md5":"EgSZx2XltAC7A2ZG7IvlfA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/kpi_icon_labor_force_peOK9qkFlx.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/kpi_icon_labor_force_peOK9qkFlx.png
new file mode 100644
index 0000000..283e064
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/kpi_icon_labor_force_peOK9qkFlx.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/kpi_icon_labor_force_peOK9qkFlx.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/kpi_icon_labor_force_peOK9qkFlx.png.attrs
new file mode 100644
index 0000000..44c019b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/kpi_icon_labor_force_peOK9qkFlx.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LaborForce.png"},"md5":"zOhby4VZ5jRoL1W0+9MYaw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/thumbs_kpi_icon_labor_force_bwlj0nrvk2.png/100x100_kpi_icon_labor_force_bwlj0nrvk2.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/thumbs_kpi_icon_labor_force_bwlj0nrvk2.png/100x100_kpi_icon_labor_force_bwlj0nrvk2.png
new file mode 100644
index 0000000..7d9a723
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/thumbs_kpi_icon_labor_force_bwlj0nrvk2.png/100x100_kpi_icon_labor_force_bwlj0nrvk2.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/thumbs_kpi_icon_labor_force_bwlj0nrvk2.png/100x100_kpi_icon_labor_force_bwlj0nrvk2.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/thumbs_kpi_icon_labor_force_bwlj0nrvk2.png/100x100_kpi_icon_labor_force_bwlj0nrvk2.png.attrs
new file mode 100644
index 0000000..eb810e9
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/thumbs_kpi_icon_labor_force_bwlj0nrvk2.png/100x100_kpi_icon_labor_force_bwlj0nrvk2.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"LS77yczWzlVE2C6JWnPVGQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/thumbs_kpi_icon_labor_force_peOK9qkFlx.png/100x100_kpi_icon_labor_force_peOK9qkFlx.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/thumbs_kpi_icon_labor_force_peOK9qkFlx.png/100x100_kpi_icon_labor_force_peOK9qkFlx.png
new file mode 100644
index 0000000..2d3854d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/thumbs_kpi_icon_labor_force_peOK9qkFlx.png/100x100_kpi_icon_labor_force_peOK9qkFlx.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/thumbs_kpi_icon_labor_force_peOK9qkFlx.png/100x100_kpi_icon_labor_force_peOK9qkFlx.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/thumbs_kpi_icon_labor_force_peOK9qkFlx.png/100x100_kpi_icon_labor_force_peOK9qkFlx.png.attrs
new file mode 100644
index 0000000..89b03c8
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o0c56h2b23ee2n3/thumbs_kpi_icon_labor_force_peOK9qkFlx.png/100x100_kpi_icon_labor_force_peOK9qkFlx.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"ft97NHJeY64GPOFwCY9FKg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/kpi_icon_re_export_SWDVYMgk0i.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/kpi_icon_re_export_SWDVYMgk0i.png
new file mode 100644
index 0000000..2f2daf3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/kpi_icon_re_export_SWDVYMgk0i.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/kpi_icon_re_export_SWDVYMgk0i.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/kpi_icon_re_export_SWDVYMgk0i.png.attrs
new file mode 100644
index 0000000..efc1a5b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/kpi_icon_re_export_SWDVYMgk0i.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-ReExport.png"},"md5":"wuPAc6IENmbI4H4Y5iykQA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/thumbs_kpi_icon_re_export_SWDVYMgk0i.png/100x100_kpi_icon_re_export_SWDVYMgk0i.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/thumbs_kpi_icon_re_export_SWDVYMgk0i.png/100x100_kpi_icon_re_export_SWDVYMgk0i.png
new file mode 100644
index 0000000..6bf965d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/thumbs_kpi_icon_re_export_SWDVYMgk0i.png/100x100_kpi_icon_re_export_SWDVYMgk0i.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/thumbs_kpi_icon_re_export_SWDVYMgk0i.png/100x100_kpi_icon_re_export_SWDVYMgk0i.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/thumbs_kpi_icon_re_export_SWDVYMgk0i.png/100x100_kpi_icon_re_export_SWDVYMgk0i.png.attrs
new file mode 100644
index 0000000..670db8f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/thumbs_kpi_icon_re_export_SWDVYMgk0i.png/100x100_kpi_icon_re_export_SWDVYMgk0i.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"55tIdEz4EfKupJ7SzRKiNQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/kpi_icon_crops_area_RTtvkCCSp6.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/kpi_icon_crops_area_RTtvkCCSp6.png
new file mode 100644
index 0000000..a3023be
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/kpi_icon_crops_area_RTtvkCCSp6.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/kpi_icon_crops_area_RTtvkCCSp6.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/kpi_icon_crops_area_RTtvkCCSp6.png.attrs
new file mode 100644
index 0000000..4d9ca98
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/kpi_icon_crops_area_RTtvkCCSp6.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-CropsArea.png"},"md5":"6BWT6i/rBlR1hej7AA6Gkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/thumbs_kpi_icon_crops_area_RTtvkCCSp6.png/100x100_kpi_icon_crops_area_RTtvkCCSp6.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/thumbs_kpi_icon_crops_area_RTtvkCCSp6.png/100x100_kpi_icon_crops_area_RTtvkCCSp6.png
new file mode 100644
index 0000000..250b3e0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/thumbs_kpi_icon_crops_area_RTtvkCCSp6.png/100x100_kpi_icon_crops_area_RTtvkCCSp6.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/thumbs_kpi_icon_crops_area_RTtvkCCSp6.png/100x100_kpi_icon_crops_area_RTtvkCCSp6.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/thumbs_kpi_icon_crops_area_RTtvkCCSp6.png/100x100_kpi_icon_crops_area_RTtvkCCSp6.png.attrs
new file mode 100644
index 0000000..ae931b0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/thumbs_kpi_icon_crops_area_RTtvkCCSp6.png/100x100_kpi_icon_crops_area_RTtvkCCSp6.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"srBd6fWEm86XwUV6j55geA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oa0rk7ggqsicms0/kpi_icon_oil_export_jTiMxbNYmn.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oa0rk7ggqsicms0/kpi_icon_oil_export_jTiMxbNYmn.png
new file mode 100644
index 0000000..57076f3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oa0rk7ggqsicms0/kpi_icon_oil_export_jTiMxbNYmn.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oa0rk7ggqsicms0/kpi_icon_oil_export_jTiMxbNYmn.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oa0rk7ggqsicms0/kpi_icon_oil_export_jTiMxbNYmn.png.attrs
new file mode 100644
index 0000000..1b80daf
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oa0rk7ggqsicms0/kpi_icon_oil_export_jTiMxbNYmn.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OilExport.png"},"md5":"N0yA93/49HeIhAyNKrrPHA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oa0rk7ggqsicms0/thumbs_kpi_icon_oil_export_jTiMxbNYmn.png/100x100_kpi_icon_oil_export_jTiMxbNYmn.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oa0rk7ggqsicms0/thumbs_kpi_icon_oil_export_jTiMxbNYmn.png/100x100_kpi_icon_oil_export_jTiMxbNYmn.png
new file mode 100644
index 0000000..6bd2f64
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oa0rk7ggqsicms0/thumbs_kpi_icon_oil_export_jTiMxbNYmn.png/100x100_kpi_icon_oil_export_jTiMxbNYmn.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oa0rk7ggqsicms0/thumbs_kpi_icon_oil_export_jTiMxbNYmn.png/100x100_kpi_icon_oil_export_jTiMxbNYmn.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oa0rk7ggqsicms0/thumbs_kpi_icon_oil_export_jTiMxbNYmn.png/100x100_kpi_icon_oil_export_jTiMxbNYmn.png.attrs
new file mode 100644
index 0000000..366daa6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oa0rk7ggqsicms0/thumbs_kpi_icon_oil_export_jTiMxbNYmn.png/100x100_kpi_icon_oil_export_jTiMxbNYmn.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"QtQNpYi5me0OVZxMW9h2Zg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oo11o4birkrv2l4/female_W8l9IMe4IY.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oo11o4birkrv2l4/female_W8l9IMe4IY.png
new file mode 100644
index 0000000..e328a93
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oo11o4birkrv2l4/female_W8l9IMe4IY.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oo11o4birkrv2l4/female_W8l9IMe4IY.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oo11o4birkrv2l4/female_W8l9IMe4IY.png.attrs
new file mode 100644
index 0000000..3c217ec
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oo11o4birkrv2l4/female_W8l9IMe4IY.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"female.png"},"md5":"LHr3qNvXccxDzGNR1QwAiA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oo11o4birkrv2l4/thumbs_female_W8l9IMe4IY.png/100x100_female_W8l9IMe4IY.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oo11o4birkrv2l4/thumbs_female_W8l9IMe4IY.png/100x100_female_W8l9IMe4IY.png
new file mode 100644
index 0000000..4e9492f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oo11o4birkrv2l4/thumbs_female_W8l9IMe4IY.png/100x100_female_W8l9IMe4IY.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oo11o4birkrv2l4/thumbs_female_W8l9IMe4IY.png/100x100_female_W8l9IMe4IY.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oo11o4birkrv2l4/thumbs_female_W8l9IMe4IY.png/100x100_female_W8l9IMe4IY.png.attrs
new file mode 100644
index 0000000..72ab7b2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/oo11o4birkrv2l4/thumbs_female_W8l9IMe4IY.png/100x100_female_W8l9IMe4IY.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"6qNv8XkjaWR5lPp91glyrw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/kpi_icon_natural_reserves_WxNSs1avQa.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/kpi_icon_natural_reserves_WxNSs1avQa.png
new file mode 100644
index 0000000..c600cfa
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/kpi_icon_natural_reserves_WxNSs1avQa.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/kpi_icon_natural_reserves_WxNSs1avQa.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/kpi_icon_natural_reserves_WxNSs1avQa.png.attrs
new file mode 100644
index 0000000..01764dd
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/kpi_icon_natural_reserves_WxNSs1avQa.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-NaturalReserves.png"},"md5":"EidU5zyMspc/3lI2BgLvkg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/thumbs_kpi_icon_natural_reserves_WxNSs1avQa.png/100x100_kpi_icon_natural_reserves_WxNSs1avQa.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/thumbs_kpi_icon_natural_reserves_WxNSs1avQa.png/100x100_kpi_icon_natural_reserves_WxNSs1avQa.png
new file mode 100644
index 0000000..3e3d54c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/thumbs_kpi_icon_natural_reserves_WxNSs1avQa.png/100x100_kpi_icon_natural_reserves_WxNSs1avQa.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/thumbs_kpi_icon_natural_reserves_WxNSs1avQa.png/100x100_kpi_icon_natural_reserves_WxNSs1avQa.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/thumbs_kpi_icon_natural_reserves_WxNSs1avQa.png/100x100_kpi_icon_natural_reserves_WxNSs1avQa.png.attrs
new file mode 100644
index 0000000..9058a16
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/thumbs_kpi_icon_natural_reserves_WxNSs1avQa.png/100x100_kpi_icon_natural_reserves_WxNSs1avQa.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"uiU2k7ZNxToo4t8GzxMZpg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/kpi_icon_teachers_5QKkkMg3sM.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/kpi_icon_teachers_5QKkkMg3sM.png
new file mode 100644
index 0000000..27ba5c3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/kpi_icon_teachers_5QKkkMg3sM.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/kpi_icon_teachers_5QKkkMg3sM.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/kpi_icon_teachers_5QKkkMg3sM.png.attrs
new file mode 100644
index 0000000..d3f6c31
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/kpi_icon_teachers_5QKkkMg3sM.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Teachers.png"},"md5":"RApXayNhxjEwI8a6P5VEhQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/kpi_icon_teachers_mH1fEvYOTb.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/kpi_icon_teachers_mH1fEvYOTb.png
new file mode 100644
index 0000000..efba3c8
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/kpi_icon_teachers_mH1fEvYOTb.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/kpi_icon_teachers_mH1fEvYOTb.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/kpi_icon_teachers_mH1fEvYOTb.png.attrs
new file mode 100644
index 0000000..a991aa1
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/kpi_icon_teachers_mH1fEvYOTb.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Teachers.png"},"md5":"wSkcR/WX7aRYxtWCJ/pWWg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/thumbs_kpi_icon_teachers_5QKkkMg3sM.png/100x100_kpi_icon_teachers_5QKkkMg3sM.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/thumbs_kpi_icon_teachers_5QKkkMg3sM.png/100x100_kpi_icon_teachers_5QKkkMg3sM.png
new file mode 100644
index 0000000..95a4b30
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/thumbs_kpi_icon_teachers_5QKkkMg3sM.png/100x100_kpi_icon_teachers_5QKkkMg3sM.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/thumbs_kpi_icon_teachers_5QKkkMg3sM.png/100x100_kpi_icon_teachers_5QKkkMg3sM.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/thumbs_kpi_icon_teachers_5QKkkMg3sM.png/100x100_kpi_icon_teachers_5QKkkMg3sM.png.attrs
new file mode 100644
index 0000000..eba4680
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/thumbs_kpi_icon_teachers_5QKkkMg3sM.png/100x100_kpi_icon_teachers_5QKkkMg3sM.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"8QQcsm63l5sAtE/diNv6lg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/thumbs_kpi_icon_teachers_mH1fEvYOTb.png/100x100_kpi_icon_teachers_mH1fEvYOTb.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/thumbs_kpi_icon_teachers_mH1fEvYOTb.png/100x100_kpi_icon_teachers_mH1fEvYOTb.png
new file mode 100644
index 0000000..490d58d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/thumbs_kpi_icon_teachers_mH1fEvYOTb.png/100x100_kpi_icon_teachers_mH1fEvYOTb.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/thumbs_kpi_icon_teachers_mH1fEvYOTb.png/100x100_kpi_icon_teachers_mH1fEvYOTb.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/thumbs_kpi_icon_teachers_mH1fEvYOTb.png/100x100_kpi_icon_teachers_mH1fEvYOTb.png.attrs
new file mode 100644
index 0000000..e3af9f7
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pcszfiepzkivcee/thumbs_kpi_icon_teachers_mH1fEvYOTb.png/100x100_kpi_icon_teachers_mH1fEvYOTb.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"H7TF5gPbk1HznK0vDnnJVQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/kpi_icon_livestock_goats_bq9kXeO9uS.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/kpi_icon_livestock_goats_bq9kXeO9uS.png
new file mode 100644
index 0000000..d4efb9e
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/kpi_icon_livestock_goats_bq9kXeO9uS.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/kpi_icon_livestock_goats_bq9kXeO9uS.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/kpi_icon_livestock_goats_bq9kXeO9uS.png.attrs
new file mode 100644
index 0000000..ab34776
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/kpi_icon_livestock_goats_bq9kXeO9uS.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LivestockGoats.png"},"md5":"zVK8ySPjR3YA1nXAV1VHvw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/thumbs_kpi_icon_livestock_goats_bq9kXeO9uS.png/100x100_kpi_icon_livestock_goats_bq9kXeO9uS.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/thumbs_kpi_icon_livestock_goats_bq9kXeO9uS.png/100x100_kpi_icon_livestock_goats_bq9kXeO9uS.png
new file mode 100644
index 0000000..d07c9b0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/thumbs_kpi_icon_livestock_goats_bq9kXeO9uS.png/100x100_kpi_icon_livestock_goats_bq9kXeO9uS.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/thumbs_kpi_icon_livestock_goats_bq9kXeO9uS.png/100x100_kpi_icon_livestock_goats_bq9kXeO9uS.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/thumbs_kpi_icon_livestock_goats_bq9kXeO9uS.png/100x100_kpi_icon_livestock_goats_bq9kXeO9uS.png.attrs
new file mode 100644
index 0000000..50ad5b6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/thumbs_kpi_icon_livestock_goats_bq9kXeO9uS.png/100x100_kpi_icon_livestock_goats_bq9kXeO9uS.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"JemDzB+TNQLWrDLe1lxu6g=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/kpi_icon_health_beds_b8VlJ056zS.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/kpi_icon_health_beds_b8VlJ056zS.png
new file mode 100644
index 0000000..831fdaa
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/kpi_icon_health_beds_b8VlJ056zS.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/kpi_icon_health_beds_b8VlJ056zS.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/kpi_icon_health_beds_b8VlJ056zS.png.attrs
new file mode 100644
index 0000000..898b118
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/kpi_icon_health_beds_b8VlJ056zS.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-HealthBeds.png"},"md5":"BZjROyWbZA9+SGEkW21FiA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/kpi_icon_health_beds_rre0lJiWWO.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/kpi_icon_health_beds_rre0lJiWWO.png
new file mode 100644
index 0000000..cb23c61
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/kpi_icon_health_beds_rre0lJiWWO.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/kpi_icon_health_beds_rre0lJiWWO.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/kpi_icon_health_beds_rre0lJiWWO.png.attrs
new file mode 100644
index 0000000..e35a60e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/kpi_icon_health_beds_rre0lJiWWO.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-HealthBeds.png"},"md5":"COfbvLbRb0sPXqb8YbcDuA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/thumbs_kpi_icon_health_beds_b8VlJ056zS.png/100x100_kpi_icon_health_beds_b8VlJ056zS.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/thumbs_kpi_icon_health_beds_b8VlJ056zS.png/100x100_kpi_icon_health_beds_b8VlJ056zS.png
new file mode 100644
index 0000000..369458c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/thumbs_kpi_icon_health_beds_b8VlJ056zS.png/100x100_kpi_icon_health_beds_b8VlJ056zS.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/thumbs_kpi_icon_health_beds_b8VlJ056zS.png/100x100_kpi_icon_health_beds_b8VlJ056zS.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/thumbs_kpi_icon_health_beds_b8VlJ056zS.png/100x100_kpi_icon_health_beds_b8VlJ056zS.png.attrs
new file mode 100644
index 0000000..239a8b2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/thumbs_kpi_icon_health_beds_b8VlJ056zS.png/100x100_kpi_icon_health_beds_b8VlJ056zS.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"DMgxouLhjnP22rE0AEk0gQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/thumbs_kpi_icon_health_beds_rre0lJiWWO.png/100x100_kpi_icon_health_beds_rre0lJiWWO.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/thumbs_kpi_icon_health_beds_rre0lJiWWO.png/100x100_kpi_icon_health_beds_rre0lJiWWO.png
new file mode 100644
index 0000000..b739a7c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/thumbs_kpi_icon_health_beds_rre0lJiWWO.png/100x100_kpi_icon_health_beds_rre0lJiWWO.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/thumbs_kpi_icon_health_beds_rre0lJiWWO.png/100x100_kpi_icon_health_beds_rre0lJiWWO.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/thumbs_kpi_icon_health_beds_rre0lJiWWO.png/100x100_kpi_icon_health_beds_rre0lJiWWO.png.attrs
new file mode 100644
index 0000000..56140f2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/q3rjbu4kxrr639a/thumbs_kpi_icon_health_beds_rre0lJiWWO.png/100x100_kpi_icon_health_beds_rre0lJiWWO.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"Uj6ias9IbNYcE4EAo0EG2w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/kpi_icon_livestock_cattles_nZkj7XHTmq.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/kpi_icon_livestock_cattles_nZkj7XHTmq.png
new file mode 100644
index 0000000..3d534eb
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/kpi_icon_livestock_cattles_nZkj7XHTmq.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/kpi_icon_livestock_cattles_nZkj7XHTmq.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/kpi_icon_livestock_cattles_nZkj7XHTmq.png.attrs
new file mode 100644
index 0000000..c1dd8d8
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/kpi_icon_livestock_cattles_nZkj7XHTmq.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LivestockCattles.png"},"md5":"DUjKL1yZT8pt3ybZuqCXqA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/thumbs_kpi_icon_livestock_cattles_nZkj7XHTmq.png/100x100_kpi_icon_livestock_cattles_nZkj7XHTmq.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/thumbs_kpi_icon_livestock_cattles_nZkj7XHTmq.png/100x100_kpi_icon_livestock_cattles_nZkj7XHTmq.png
new file mode 100644
index 0000000..6485752
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/thumbs_kpi_icon_livestock_cattles_nZkj7XHTmq.png/100x100_kpi_icon_livestock_cattles_nZkj7XHTmq.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/thumbs_kpi_icon_livestock_cattles_nZkj7XHTmq.png/100x100_kpi_icon_livestock_cattles_nZkj7XHTmq.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/thumbs_kpi_icon_livestock_cattles_nZkj7XHTmq.png/100x100_kpi_icon_livestock_cattles_nZkj7XHTmq.png.attrs
new file mode 100644
index 0000000..2ff4e7d
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/thumbs_kpi_icon_livestock_cattles_nZkj7XHTmq.png/100x100_kpi_icon_livestock_cattles_nZkj7XHTmq.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"Bd8Ei+2GWlcr7qQbIw2nBA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qh19r7tr32lds0g/male_mQ23aQa3lQ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qh19r7tr32lds0g/male_mQ23aQa3lQ.png
new file mode 100644
index 0000000..3302645
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qh19r7tr32lds0g/male_mQ23aQa3lQ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qh19r7tr32lds0g/male_mQ23aQa3lQ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qh19r7tr32lds0g/male_mQ23aQa3lQ.png.attrs
new file mode 100644
index 0000000..8bfde7b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qh19r7tr32lds0g/male_mQ23aQa3lQ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"male.png"},"md5":"gq2puo4WHB/p8O/dYe6AZA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qh19r7tr32lds0g/thumbs_male_mQ23aQa3lQ.png/100x100_male_mQ23aQa3lQ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qh19r7tr32lds0g/thumbs_male_mQ23aQa3lQ.png/100x100_male_mQ23aQa3lQ.png
new file mode 100644
index 0000000..6807646
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qh19r7tr32lds0g/thumbs_male_mQ23aQa3lQ.png/100x100_male_mQ23aQa3lQ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qh19r7tr32lds0g/thumbs_male_mQ23aQa3lQ.png/100x100_male_mQ23aQa3lQ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qh19r7tr32lds0g/thumbs_male_mQ23aQa3lQ.png/100x100_male_mQ23aQa3lQ.png.attrs
new file mode 100644
index 0000000..178e495
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qh19r7tr32lds0g/thumbs_male_mQ23aQa3lQ.png/100x100_male_mQ23aQa3lQ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"Ua07BI7xJGVJ7eVStoTK3g=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/kpi_icon_desalinated_water_production_iFraDfb0KO.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/kpi_icon_desalinated_water_production_iFraDfb0KO.png
new file mode 100644
index 0000000..cfdd4b8
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/kpi_icon_desalinated_water_production_iFraDfb0KO.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/kpi_icon_desalinated_water_production_iFraDfb0KO.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/kpi_icon_desalinated_water_production_iFraDfb0KO.png.attrs
new file mode 100644
index 0000000..7f9fa56
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/kpi_icon_desalinated_water_production_iFraDfb0KO.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-DesalinatedWaterProduction.png"},"md5":"9Zkzl3VNS+Nu5WYSA1G9uQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/thumbs_kpi_icon_desalinated_water_production_iFraDfb0KO.png/100x100_kpi_icon_desalinated_water_production_iFraDfb0KO.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/thumbs_kpi_icon_desalinated_water_production_iFraDfb0KO.png/100x100_kpi_icon_desalinated_water_production_iFraDfb0KO.png
new file mode 100644
index 0000000..6687129
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/thumbs_kpi_icon_desalinated_water_production_iFraDfb0KO.png/100x100_kpi_icon_desalinated_water_production_iFraDfb0KO.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/thumbs_kpi_icon_desalinated_water_production_iFraDfb0KO.png/100x100_kpi_icon_desalinated_water_production_iFraDfb0KO.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/thumbs_kpi_icon_desalinated_water_production_iFraDfb0KO.png/100x100_kpi_icon_desalinated_water_production_iFraDfb0KO.png.attrs
new file mode 100644
index 0000000..62b86f8
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/thumbs_kpi_icon_desalinated_water_production_iFraDfb0KO.png/100x100_kpi_icon_desalinated_water_production_iFraDfb0KO.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"RcEepz9a0TM+N1pGrctv9Q=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qw1sifd88w70jlb/kpi_icon_oil_export_gC55JbLOx2.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qw1sifd88w70jlb/kpi_icon_oil_export_gC55JbLOx2.png
new file mode 100644
index 0000000..57076f3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qw1sifd88w70jlb/kpi_icon_oil_export_gC55JbLOx2.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qw1sifd88w70jlb/kpi_icon_oil_export_gC55JbLOx2.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qw1sifd88w70jlb/kpi_icon_oil_export_gC55JbLOx2.png.attrs
new file mode 100644
index 0000000..1b80daf
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qw1sifd88w70jlb/kpi_icon_oil_export_gC55JbLOx2.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OilExport.png"},"md5":"N0yA93/49HeIhAyNKrrPHA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qw1sifd88w70jlb/thumbs_kpi_icon_oil_export_gC55JbLOx2.png/100x100_kpi_icon_oil_export_gC55JbLOx2.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qw1sifd88w70jlb/thumbs_kpi_icon_oil_export_gC55JbLOx2.png/100x100_kpi_icon_oil_export_gC55JbLOx2.png
new file mode 100644
index 0000000..6bd2f64
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qw1sifd88w70jlb/thumbs_kpi_icon_oil_export_gC55JbLOx2.png/100x100_kpi_icon_oil_export_gC55JbLOx2.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qw1sifd88w70jlb/thumbs_kpi_icon_oil_export_gC55JbLOx2.png/100x100_kpi_icon_oil_export_gC55JbLOx2.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qw1sifd88w70jlb/thumbs_kpi_icon_oil_export_gC55JbLOx2.png/100x100_kpi_icon_oil_export_gC55JbLOx2.png.attrs
new file mode 100644
index 0000000..366daa6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qw1sifd88w70jlb/thumbs_kpi_icon_oil_export_gC55JbLOx2.png/100x100_kpi_icon_oil_export_gC55JbLOx2.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"QtQNpYi5me0OVZxMW9h2Zg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/kpi_icon_gdpgrowth_VRpl2exFme.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/kpi_icon_gdpgrowth_VRpl2exFme.png
new file mode 100644
index 0000000..f5f673a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/kpi_icon_gdpgrowth_VRpl2exFme.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/kpi_icon_gdpgrowth_VRpl2exFme.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/kpi_icon_gdpgrowth_VRpl2exFme.png.attrs
new file mode 100644
index 0000000..30324ed
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/kpi_icon_gdpgrowth_VRpl2exFme.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDPGrowth.png"},"md5":"HqqwH2pjnCJ5qZ2nSzmtUw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/thumbs_kpi_icon_gdpgrowth_VRpl2exFme.png/100x100_kpi_icon_gdpgrowth_VRpl2exFme.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/thumbs_kpi_icon_gdpgrowth_VRpl2exFme.png/100x100_kpi_icon_gdpgrowth_VRpl2exFme.png
new file mode 100644
index 0000000..40ddf4f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/thumbs_kpi_icon_gdpgrowth_VRpl2exFme.png/100x100_kpi_icon_gdpgrowth_VRpl2exFme.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/thumbs_kpi_icon_gdpgrowth_VRpl2exFme.png/100x100_kpi_icon_gdpgrowth_VRpl2exFme.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/thumbs_kpi_icon_gdpgrowth_VRpl2exFme.png/100x100_kpi_icon_gdpgrowth_VRpl2exFme.png.attrs
new file mode 100644
index 0000000..edf40cf
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/thumbs_kpi_icon_gdpgrowth_VRpl2exFme.png/100x100_kpi_icon_gdpgrowth_VRpl2exFme.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zrI7ItL8NvCC4HA5egimuA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/kpi_icon_livestock_camels_YKgDwQSTSi.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/kpi_icon_livestock_camels_YKgDwQSTSi.png
new file mode 100644
index 0000000..83e63c3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/kpi_icon_livestock_camels_YKgDwQSTSi.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/kpi_icon_livestock_camels_YKgDwQSTSi.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/kpi_icon_livestock_camels_YKgDwQSTSi.png.attrs
new file mode 100644
index 0000000..e86e2b2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/kpi_icon_livestock_camels_YKgDwQSTSi.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LivestockCamels.png"},"md5":"ZsXt5FAGlKkn7OqD2ACfPQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/thumbs_kpi_icon_livestock_camels_YKgDwQSTSi.png/100x100_kpi_icon_livestock_camels_YKgDwQSTSi.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/thumbs_kpi_icon_livestock_camels_YKgDwQSTSi.png/100x100_kpi_icon_livestock_camels_YKgDwQSTSi.png
new file mode 100644
index 0000000..be17b14
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/thumbs_kpi_icon_livestock_camels_YKgDwQSTSi.png/100x100_kpi_icon_livestock_camels_YKgDwQSTSi.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/thumbs_kpi_icon_livestock_camels_YKgDwQSTSi.png/100x100_kpi_icon_livestock_camels_YKgDwQSTSi.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/thumbs_kpi_icon_livestock_camels_YKgDwQSTSi.png/100x100_kpi_icon_livestock_camels_YKgDwQSTSi.png.attrs
new file mode 100644
index 0000000..f6bc315
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/thumbs_kpi_icon_livestock_camels_YKgDwQSTSi.png/100x100_kpi_icon_livestock_camels_YKgDwQSTSi.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"d+BsCUhtU7PtTiNIG3YEzg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/kpi_icon_consumption_v8gbm7SsTK.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/kpi_icon_consumption_v8gbm7SsTK.png
new file mode 100644
index 0000000..f41e6b0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/kpi_icon_consumption_v8gbm7SsTK.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/kpi_icon_consumption_v8gbm7SsTK.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/kpi_icon_consumption_v8gbm7SsTK.png.attrs
new file mode 100644
index 0000000..6a24739
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/kpi_icon_consumption_v8gbm7SsTK.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Consumption.png"},"md5":"f1NUArqFL42VWuleVDQ+vQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/thumbs_kpi_icon_consumption_v8gbm7SsTK.png/100x100_kpi_icon_consumption_v8gbm7SsTK.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/thumbs_kpi_icon_consumption_v8gbm7SsTK.png/100x100_kpi_icon_consumption_v8gbm7SsTK.png
new file mode 100644
index 0000000..e5d6b86
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/thumbs_kpi_icon_consumption_v8gbm7SsTK.png/100x100_kpi_icon_consumption_v8gbm7SsTK.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/thumbs_kpi_icon_consumption_v8gbm7SsTK.png/100x100_kpi_icon_consumption_v8gbm7SsTK.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/thumbs_kpi_icon_consumption_v8gbm7SsTK.png/100x100_kpi_icon_consumption_v8gbm7SsTK.png.attrs
new file mode 100644
index 0000000..8f1222c
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/thumbs_kpi_icon_consumption_v8gbm7SsTK.png/100x100_kpi_icon_consumption_v8gbm7SsTK.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"PMmkMsIDsFA+XGvZjuhYhA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/kpi_icon_crops_area_3mQOmCQIi2.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/kpi_icon_crops_area_3mQOmCQIi2.png
new file mode 100644
index 0000000..a3023be
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/kpi_icon_crops_area_3mQOmCQIi2.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/kpi_icon_crops_area_3mQOmCQIi2.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/kpi_icon_crops_area_3mQOmCQIi2.png.attrs
new file mode 100644
index 0000000..4d9ca98
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/kpi_icon_crops_area_3mQOmCQIi2.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-CropsArea.png"},"md5":"6BWT6i/rBlR1hej7AA6Gkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/thumbs_kpi_icon_crops_area_3mQOmCQIi2.png/100x100_kpi_icon_crops_area_3mQOmCQIi2.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/thumbs_kpi_icon_crops_area_3mQOmCQIi2.png/100x100_kpi_icon_crops_area_3mQOmCQIi2.png
new file mode 100644
index 0000000..250b3e0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/thumbs_kpi_icon_crops_area_3mQOmCQIi2.png/100x100_kpi_icon_crops_area_3mQOmCQIi2.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/thumbs_kpi_icon_crops_area_3mQOmCQIi2.png/100x100_kpi_icon_crops_area_3mQOmCQIi2.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/thumbs_kpi_icon_crops_area_3mQOmCQIi2.png/100x100_kpi_icon_crops_area_3mQOmCQIi2.png.attrs
new file mode 100644
index 0000000..ae931b0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/thumbs_kpi_icon_crops_area_3mQOmCQIi2.png/100x100_kpi_icon_crops_area_3mQOmCQIi2.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"srBd6fWEm86XwUV6j55geA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/kpi_icon_consumption_PpN16LMLxm.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/kpi_icon_consumption_PpN16LMLxm.png
new file mode 100644
index 0000000..f41e6b0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/kpi_icon_consumption_PpN16LMLxm.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/kpi_icon_consumption_PpN16LMLxm.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/kpi_icon_consumption_PpN16LMLxm.png.attrs
new file mode 100644
index 0000000..6a24739
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/kpi_icon_consumption_PpN16LMLxm.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Consumption.png"},"md5":"f1NUArqFL42VWuleVDQ+vQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/thumbs_kpi_icon_consumption_PpN16LMLxm.png/100x100_kpi_icon_consumption_PpN16LMLxm.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/thumbs_kpi_icon_consumption_PpN16LMLxm.png/100x100_kpi_icon_consumption_PpN16LMLxm.png
new file mode 100644
index 0000000..e5d6b86
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/thumbs_kpi_icon_consumption_PpN16LMLxm.png/100x100_kpi_icon_consumption_PpN16LMLxm.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/thumbs_kpi_icon_consumption_PpN16LMLxm.png/100x100_kpi_icon_consumption_PpN16LMLxm.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/thumbs_kpi_icon_consumption_PpN16LMLxm.png/100x100_kpi_icon_consumption_PpN16LMLxm.png.attrs
new file mode 100644
index 0000000..8f1222c
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/thumbs_kpi_icon_consumption_PpN16LMLxm.png/100x100_kpi_icon_consumption_PpN16LMLxm.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"PMmkMsIDsFA+XGvZjuhYhA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/s9a3g648hk6yqru/male_rAz6Z0f08h.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/s9a3g648hk6yqru/male_rAz6Z0f08h.png
new file mode 100644
index 0000000..3302645
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/s9a3g648hk6yqru/male_rAz6Z0f08h.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/s9a3g648hk6yqru/male_rAz6Z0f08h.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/s9a3g648hk6yqru/male_rAz6Z0f08h.png.attrs
new file mode 100644
index 0000000..8bfde7b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/s9a3g648hk6yqru/male_rAz6Z0f08h.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"male.png"},"md5":"gq2puo4WHB/p8O/dYe6AZA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/s9a3g648hk6yqru/thumbs_male_rAz6Z0f08h.png/100x100_male_rAz6Z0f08h.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/s9a3g648hk6yqru/thumbs_male_rAz6Z0f08h.png/100x100_male_rAz6Z0f08h.png
new file mode 100644
index 0000000..6807646
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/s9a3g648hk6yqru/thumbs_male_rAz6Z0f08h.png/100x100_male_rAz6Z0f08h.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/s9a3g648hk6yqru/thumbs_male_rAz6Z0f08h.png/100x100_male_rAz6Z0f08h.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/s9a3g648hk6yqru/thumbs_male_rAz6Z0f08h.png/100x100_male_rAz6Z0f08h.png.attrs
new file mode 100644
index 0000000..178e495
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/s9a3g648hk6yqru/thumbs_male_rAz6Z0f08h.png/100x100_male_rAz6Z0f08h.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"Ua07BI7xJGVJ7eVStoTK3g=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/kpi_icon_hospitals_BRXBLidTcf.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/kpi_icon_hospitals_BRXBLidTcf.png
new file mode 100644
index 0000000..63d1e5e
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/kpi_icon_hospitals_BRXBLidTcf.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/kpi_icon_hospitals_BRXBLidTcf.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/kpi_icon_hospitals_BRXBLidTcf.png.attrs
new file mode 100644
index 0000000..e469304
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/kpi_icon_hospitals_BRXBLidTcf.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Hospitals.png"},"md5":"q0SbK4j0+3qVPgF3ou4XQQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/kpi_icon_hospitals_dD3FauYB1l.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/kpi_icon_hospitals_dD3FauYB1l.png
new file mode 100644
index 0000000..3a5804c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/kpi_icon_hospitals_dD3FauYB1l.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/kpi_icon_hospitals_dD3FauYB1l.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/kpi_icon_hospitals_dD3FauYB1l.png.attrs
new file mode 100644
index 0000000..15654dc
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/kpi_icon_hospitals_dD3FauYB1l.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Hospitals.png"},"md5":"3i2EpU0/9rhb7NU2fxd8uw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/thumbs_kpi_icon_hospitals_BRXBLidTcf.png/100x100_kpi_icon_hospitals_BRXBLidTcf.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/thumbs_kpi_icon_hospitals_BRXBLidTcf.png/100x100_kpi_icon_hospitals_BRXBLidTcf.png
new file mode 100644
index 0000000..6828dd9
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/thumbs_kpi_icon_hospitals_BRXBLidTcf.png/100x100_kpi_icon_hospitals_BRXBLidTcf.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/thumbs_kpi_icon_hospitals_BRXBLidTcf.png/100x100_kpi_icon_hospitals_BRXBLidTcf.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/thumbs_kpi_icon_hospitals_BRXBLidTcf.png/100x100_kpi_icon_hospitals_BRXBLidTcf.png.attrs
new file mode 100644
index 0000000..b879667
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/thumbs_kpi_icon_hospitals_BRXBLidTcf.png/100x100_kpi_icon_hospitals_BRXBLidTcf.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"vPoDi9z4v+axbNp7GZqdlg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/thumbs_kpi_icon_hospitals_dD3FauYB1l.png/100x100_kpi_icon_hospitals_dD3FauYB1l.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/thumbs_kpi_icon_hospitals_dD3FauYB1l.png/100x100_kpi_icon_hospitals_dD3FauYB1l.png
new file mode 100644
index 0000000..3f3cbdc
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/thumbs_kpi_icon_hospitals_dD3FauYB1l.png/100x100_kpi_icon_hospitals_dD3FauYB1l.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/thumbs_kpi_icon_hospitals_dD3FauYB1l.png/100x100_kpi_icon_hospitals_dD3FauYB1l.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/thumbs_kpi_icon_hospitals_dD3FauYB1l.png/100x100_kpi_icon_hospitals_dD3FauYB1l.png.attrs
new file mode 100644
index 0000000..4c0b16c
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/seop21qs6f53q72/thumbs_kpi_icon_hospitals_dD3FauYB1l.png/100x100_kpi_icon_hospitals_dD3FauYB1l.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"N1oeIzqCbx0rsNo1PlpG/w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ss630rxt6oo4mno/male_NpYGUUpqWL.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ss630rxt6oo4mno/male_NpYGUUpqWL.png
new file mode 100644
index 0000000..3302645
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ss630rxt6oo4mno/male_NpYGUUpqWL.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ss630rxt6oo4mno/male_NpYGUUpqWL.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ss630rxt6oo4mno/male_NpYGUUpqWL.png.attrs
new file mode 100644
index 0000000..8bfde7b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ss630rxt6oo4mno/male_NpYGUUpqWL.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"male.png"},"md5":"gq2puo4WHB/p8O/dYe6AZA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ss630rxt6oo4mno/thumbs_male_NpYGUUpqWL.png/100x100_male_NpYGUUpqWL.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ss630rxt6oo4mno/thumbs_male_NpYGUUpqWL.png/100x100_male_NpYGUUpqWL.png
new file mode 100644
index 0000000..6807646
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ss630rxt6oo4mno/thumbs_male_NpYGUUpqWL.png/100x100_male_NpYGUUpqWL.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ss630rxt6oo4mno/thumbs_male_NpYGUUpqWL.png/100x100_male_NpYGUUpqWL.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ss630rxt6oo4mno/thumbs_male_NpYGUUpqWL.png/100x100_male_NpYGUUpqWL.png.attrs
new file mode 100644
index 0000000..178e495
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ss630rxt6oo4mno/thumbs_male_NpYGUUpqWL.png/100x100_male_NpYGUUpqWL.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"Ua07BI7xJGVJ7eVStoTK3g=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/kpi_icon_gdp_w6tmJ8zfvG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/kpi_icon_gdp_w6tmJ8zfvG.png
new file mode 100644
index 0000000..00a7246
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/kpi_icon_gdp_w6tmJ8zfvG.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/kpi_icon_gdp_w6tmJ8zfvG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/kpi_icon_gdp_w6tmJ8zfvG.png.attrs
new file mode 100644
index 0000000..aeed7a6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/kpi_icon_gdp_w6tmJ8zfvG.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDP.png"},"md5":"GbjBCTBkQMjDA/ePurXQ4w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/thumbs_kpi_icon_gdp_w6tmJ8zfvG.png/100x100_kpi_icon_gdp_w6tmJ8zfvG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/thumbs_kpi_icon_gdp_w6tmJ8zfvG.png/100x100_kpi_icon_gdp_w6tmJ8zfvG.png
new file mode 100644
index 0000000..1f4a9d5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/thumbs_kpi_icon_gdp_w6tmJ8zfvG.png/100x100_kpi_icon_gdp_w6tmJ8zfvG.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/thumbs_kpi_icon_gdp_w6tmJ8zfvG.png/100x100_kpi_icon_gdp_w6tmJ8zfvG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/thumbs_kpi_icon_gdp_w6tmJ8zfvG.png/100x100_kpi_icon_gdp_w6tmJ8zfvG.png.attrs
new file mode 100644
index 0000000..1c118ca
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/thumbs_kpi_icon_gdp_w6tmJ8zfvG.png/100x100_kpi_icon_gdp_w6tmJ8zfvG.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"oR1IfXTRW05tuALKgeFtkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t0elca0sm9z7xkf/kpi_icon_he_student_female_JWpePy9LR1.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t0elca0sm9z7xkf/kpi_icon_he_student_female_JWpePy9LR1.png
new file mode 100644
index 0000000..b8424f5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t0elca0sm9z7xkf/kpi_icon_he_student_female_JWpePy9LR1.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t0elca0sm9z7xkf/kpi_icon_he_student_female_JWpePy9LR1.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t0elca0sm9z7xkf/kpi_icon_he_student_female_JWpePy9LR1.png.attrs
new file mode 100644
index 0000000..9bd8c82
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t0elca0sm9z7xkf/kpi_icon_he_student_female_JWpePy9LR1.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-HE-StudentFemale.png"},"md5":"ytsqBSoQ2v7iRq7VMVQ03g=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t0elca0sm9z7xkf/thumbs_kpi_icon_he_student_female_JWpePy9LR1.png/100x100_kpi_icon_he_student_female_JWpePy9LR1.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t0elca0sm9z7xkf/thumbs_kpi_icon_he_student_female_JWpePy9LR1.png/100x100_kpi_icon_he_student_female_JWpePy9LR1.png
new file mode 100644
index 0000000..57ce02a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t0elca0sm9z7xkf/thumbs_kpi_icon_he_student_female_JWpePy9LR1.png/100x100_kpi_icon_he_student_female_JWpePy9LR1.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t0elca0sm9z7xkf/thumbs_kpi_icon_he_student_female_JWpePy9LR1.png/100x100_kpi_icon_he_student_female_JWpePy9LR1.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t0elca0sm9z7xkf/thumbs_kpi_icon_he_student_female_JWpePy9LR1.png/100x100_kpi_icon_he_student_female_JWpePy9LR1.png.attrs
new file mode 100644
index 0000000..f166f85
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t0elca0sm9z7xkf/thumbs_kpi_icon_he_student_female_JWpePy9LR1.png/100x100_kpi_icon_he_student_female_JWpePy9LR1.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"CQa944XaylCnujDzVGYrqA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/kpi_icon_water_production_6GFYoMmLCx.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/kpi_icon_water_production_6GFYoMmLCx.png
new file mode 100644
index 0000000..fb98188
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/kpi_icon_water_production_6GFYoMmLCx.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/kpi_icon_water_production_6GFYoMmLCx.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/kpi_icon_water_production_6GFYoMmLCx.png.attrs
new file mode 100644
index 0000000..aab7b61
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/kpi_icon_water_production_6GFYoMmLCx.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-WaterProduction.png"},"md5":"JQKlwTvuva3eX3OWCoC4SQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/thumbs_kpi_icon_water_production_6GFYoMmLCx.png/100x100_kpi_icon_water_production_6GFYoMmLCx.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/thumbs_kpi_icon_water_production_6GFYoMmLCx.png/100x100_kpi_icon_water_production_6GFYoMmLCx.png
new file mode 100644
index 0000000..7df954d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/thumbs_kpi_icon_water_production_6GFYoMmLCx.png/100x100_kpi_icon_water_production_6GFYoMmLCx.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/thumbs_kpi_icon_water_production_6GFYoMmLCx.png/100x100_kpi_icon_water_production_6GFYoMmLCx.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/thumbs_kpi_icon_water_production_6GFYoMmLCx.png/100x100_kpi_icon_water_production_6GFYoMmLCx.png.attrs
new file mode 100644
index 0000000..f2f22df
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/thumbs_kpi_icon_water_production_6GFYoMmLCx.png/100x100_kpi_icon_water_production_6GFYoMmLCx.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"p4keTgIQ5xOAU8VuKT5dcw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/kpi_icon_crops_area_kjLGyCZ8gS.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/kpi_icon_crops_area_kjLGyCZ8gS.png
new file mode 100644
index 0000000..a3023be
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/kpi_icon_crops_area_kjLGyCZ8gS.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/kpi_icon_crops_area_kjLGyCZ8gS.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/kpi_icon_crops_area_kjLGyCZ8gS.png.attrs
new file mode 100644
index 0000000..4d9ca98
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/kpi_icon_crops_area_kjLGyCZ8gS.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-CropsArea.png"},"md5":"6BWT6i/rBlR1hej7AA6Gkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/thumbs_kpi_icon_crops_area_kjLGyCZ8gS.png/100x100_kpi_icon_crops_area_kjLGyCZ8gS.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/thumbs_kpi_icon_crops_area_kjLGyCZ8gS.png/100x100_kpi_icon_crops_area_kjLGyCZ8gS.png
new file mode 100644
index 0000000..250b3e0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/thumbs_kpi_icon_crops_area_kjLGyCZ8gS.png/100x100_kpi_icon_crops_area_kjLGyCZ8gS.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/thumbs_kpi_icon_crops_area_kjLGyCZ8gS.png/100x100_kpi_icon_crops_area_kjLGyCZ8gS.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/thumbs_kpi_icon_crops_area_kjLGyCZ8gS.png/100x100_kpi_icon_crops_area_kjLGyCZ8gS.png.attrs
new file mode 100644
index 0000000..ae931b0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/thumbs_kpi_icon_crops_area_kjLGyCZ8gS.png/100x100_kpi_icon_crops_area_kjLGyCZ8gS.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"srBd6fWEm86XwUV6j55geA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/kpi_icon_total_land_area_hOkTVRE0WP.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/kpi_icon_total_land_area_hOkTVRE0WP.png
new file mode 100644
index 0000000..10330db
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/kpi_icon_total_land_area_hOkTVRE0WP.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/kpi_icon_total_land_area_hOkTVRE0WP.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/kpi_icon_total_land_area_hOkTVRE0WP.png.attrs
new file mode 100644
index 0000000..e1f70d0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/kpi_icon_total_land_area_hOkTVRE0WP.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-TotalLandArea.png"},"md5":"R2bwiuq4AIFDivMcvLo4Lg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/thumbs_kpi_icon_total_land_area_hOkTVRE0WP.png/100x100_kpi_icon_total_land_area_hOkTVRE0WP.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/thumbs_kpi_icon_total_land_area_hOkTVRE0WP.png/100x100_kpi_icon_total_land_area_hOkTVRE0WP.png
new file mode 100644
index 0000000..a664a2d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/thumbs_kpi_icon_total_land_area_hOkTVRE0WP.png/100x100_kpi_icon_total_land_area_hOkTVRE0WP.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/thumbs_kpi_icon_total_land_area_hOkTVRE0WP.png/100x100_kpi_icon_total_land_area_hOkTVRE0WP.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/thumbs_kpi_icon_total_land_area_hOkTVRE0WP.png/100x100_kpi_icon_total_land_area_hOkTVRE0WP.png.attrs
new file mode 100644
index 0000000..b814d2e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/thumbs_kpi_icon_total_land_area_hOkTVRE0WP.png/100x100_kpi_icon_total_land_area_hOkTVRE0WP.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"mccsVPwG7Fogdc5/VZLFKg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tlmo1wf04k6cl81/kpi_icon_female_teachers_1DieLPh2pk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tlmo1wf04k6cl81/kpi_icon_female_teachers_1DieLPh2pk.png
new file mode 100644
index 0000000..1edf5ac
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tlmo1wf04k6cl81/kpi_icon_female_teachers_1DieLPh2pk.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tlmo1wf04k6cl81/kpi_icon_female_teachers_1DieLPh2pk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tlmo1wf04k6cl81/kpi_icon_female_teachers_1DieLPh2pk.png.attrs
new file mode 100644
index 0000000..b6d4638
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tlmo1wf04k6cl81/kpi_icon_female_teachers_1DieLPh2pk.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-FemaleTeachers.png"},"md5":"9eu9Miaf//Tk6Fv4CYeopg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tlmo1wf04k6cl81/thumbs_kpi_icon_female_teachers_1DieLPh2pk.png/100x100_kpi_icon_female_teachers_1DieLPh2pk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tlmo1wf04k6cl81/thumbs_kpi_icon_female_teachers_1DieLPh2pk.png/100x100_kpi_icon_female_teachers_1DieLPh2pk.png
new file mode 100644
index 0000000..5f137d5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tlmo1wf04k6cl81/thumbs_kpi_icon_female_teachers_1DieLPh2pk.png/100x100_kpi_icon_female_teachers_1DieLPh2pk.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tlmo1wf04k6cl81/thumbs_kpi_icon_female_teachers_1DieLPh2pk.png/100x100_kpi_icon_female_teachers_1DieLPh2pk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tlmo1wf04k6cl81/thumbs_kpi_icon_female_teachers_1DieLPh2pk.png/100x100_kpi_icon_female_teachers_1DieLPh2pk.png.attrs
new file mode 100644
index 0000000..e26feb9
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tlmo1wf04k6cl81/thumbs_kpi_icon_female_teachers_1DieLPh2pk.png/100x100_kpi_icon_female_teachers_1DieLPh2pk.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"BuIehhKIVKJWUNlHJlHrQg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/kpi_icon_total_land_area_YWO7xP22ip.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/kpi_icon_total_land_area_YWO7xP22ip.png
new file mode 100644
index 0000000..10330db
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/kpi_icon_total_land_area_YWO7xP22ip.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/kpi_icon_total_land_area_YWO7xP22ip.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/kpi_icon_total_land_area_YWO7xP22ip.png.attrs
new file mode 100644
index 0000000..e1f70d0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/kpi_icon_total_land_area_YWO7xP22ip.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-TotalLandArea.png"},"md5":"R2bwiuq4AIFDivMcvLo4Lg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/thumbs_kpi_icon_total_land_area_YWO7xP22ip.png/100x100_kpi_icon_total_land_area_YWO7xP22ip.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/thumbs_kpi_icon_total_land_area_YWO7xP22ip.png/100x100_kpi_icon_total_land_area_YWO7xP22ip.png
new file mode 100644
index 0000000..a664a2d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/thumbs_kpi_icon_total_land_area_YWO7xP22ip.png/100x100_kpi_icon_total_land_area_YWO7xP22ip.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/thumbs_kpi_icon_total_land_area_YWO7xP22ip.png/100x100_kpi_icon_total_land_area_YWO7xP22ip.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/thumbs_kpi_icon_total_land_area_YWO7xP22ip.png/100x100_kpi_icon_total_land_area_YWO7xP22ip.png.attrs
new file mode 100644
index 0000000..b814d2e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/thumbs_kpi_icon_total_land_area_YWO7xP22ip.png/100x100_kpi_icon_total_land_area_YWO7xP22ip.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"mccsVPwG7Fogdc5/VZLFKg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/kpi_icon_crops_area_gDYvTYQrXt.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/kpi_icon_crops_area_gDYvTYQrXt.png
new file mode 100644
index 0000000..a3023be
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/kpi_icon_crops_area_gDYvTYQrXt.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/kpi_icon_crops_area_gDYvTYQrXt.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/kpi_icon_crops_area_gDYvTYQrXt.png.attrs
new file mode 100644
index 0000000..4d9ca98
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/kpi_icon_crops_area_gDYvTYQrXt.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-CropsArea.png"},"md5":"6BWT6i/rBlR1hej7AA6Gkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/thumbs_kpi_icon_crops_area_gDYvTYQrXt.png/100x100_kpi_icon_crops_area_gDYvTYQrXt.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/thumbs_kpi_icon_crops_area_gDYvTYQrXt.png/100x100_kpi_icon_crops_area_gDYvTYQrXt.png
new file mode 100644
index 0000000..250b3e0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/thumbs_kpi_icon_crops_area_gDYvTYQrXt.png/100x100_kpi_icon_crops_area_gDYvTYQrXt.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/thumbs_kpi_icon_crops_area_gDYvTYQrXt.png/100x100_kpi_icon_crops_area_gDYvTYQrXt.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/thumbs_kpi_icon_crops_area_gDYvTYQrXt.png/100x100_kpi_icon_crops_area_gDYvTYQrXt.png.attrs
new file mode 100644
index 0000000..ae931b0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/thumbs_kpi_icon_crops_area_gDYvTYQrXt.png/100x100_kpi_icon_crops_area_gDYvTYQrXt.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"srBd6fWEm86XwUV6j55geA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/kpi_icon_bed_government_5r9TbMI1Li.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/kpi_icon_bed_government_5r9TbMI1Li.png
new file mode 100644
index 0000000..d7d2812
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/kpi_icon_bed_government_5r9TbMI1Li.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/kpi_icon_bed_government_5r9TbMI1Li.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/kpi_icon_bed_government_5r9TbMI1Li.png.attrs
new file mode 100644
index 0000000..257a010
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/kpi_icon_bed_government_5r9TbMI1Li.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-BedGovernment.png"},"md5":"5IdrmvKz7hPQaQb789UgWA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/kpi_icon_bed_government_klgvZtB6iF.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/kpi_icon_bed_government_klgvZtB6iF.png
new file mode 100644
index 0000000..308bfaa
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/kpi_icon_bed_government_klgvZtB6iF.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/kpi_icon_bed_government_klgvZtB6iF.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/kpi_icon_bed_government_klgvZtB6iF.png.attrs
new file mode 100644
index 0000000..f762774
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/kpi_icon_bed_government_klgvZtB6iF.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-BedGovernment.png"},"md5":"SlxF8TiAd+YfJeTKMfo/BQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/thumbs_kpi_icon_bed_government_5r9TbMI1Li.png/100x100_kpi_icon_bed_government_5r9TbMI1Li.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/thumbs_kpi_icon_bed_government_5r9TbMI1Li.png/100x100_kpi_icon_bed_government_5r9TbMI1Li.png
new file mode 100644
index 0000000..ccd2016
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/thumbs_kpi_icon_bed_government_5r9TbMI1Li.png/100x100_kpi_icon_bed_government_5r9TbMI1Li.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/thumbs_kpi_icon_bed_government_5r9TbMI1Li.png/100x100_kpi_icon_bed_government_5r9TbMI1Li.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/thumbs_kpi_icon_bed_government_5r9TbMI1Li.png/100x100_kpi_icon_bed_government_5r9TbMI1Li.png.attrs
new file mode 100644
index 0000000..cd24594
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/thumbs_kpi_icon_bed_government_5r9TbMI1Li.png/100x100_kpi_icon_bed_government_5r9TbMI1Li.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"ZPZASpXmh/aMmrSGPTtA+g=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/thumbs_kpi_icon_bed_government_klgvZtB6iF.png/100x100_kpi_icon_bed_government_klgvZtB6iF.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/thumbs_kpi_icon_bed_government_klgvZtB6iF.png/100x100_kpi_icon_bed_government_klgvZtB6iF.png
new file mode 100644
index 0000000..5ef8829
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/thumbs_kpi_icon_bed_government_klgvZtB6iF.png/100x100_kpi_icon_bed_government_klgvZtB6iF.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/thumbs_kpi_icon_bed_government_klgvZtB6iF.png/100x100_kpi_icon_bed_government_klgvZtB6iF.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/thumbs_kpi_icon_bed_government_klgvZtB6iF.png/100x100_kpi_icon_bed_government_klgvZtB6iF.png.attrs
new file mode 100644
index 0000000..ccaf492
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tqwawrc2uptmjok/thumbs_kpi_icon_bed_government_klgvZtB6iF.png/100x100_kpi_icon_bed_government_klgvZtB6iF.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"CF/8K+DrKvjbXSn27Pmz1Q=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tuvjfknqspbinxy/kpi_icon_gdpgrowth_fg7PxU98Jn.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tuvjfknqspbinxy/kpi_icon_gdpgrowth_fg7PxU98Jn.png
new file mode 100644
index 0000000..f5f673a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tuvjfknqspbinxy/kpi_icon_gdpgrowth_fg7PxU98Jn.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tuvjfknqspbinxy/kpi_icon_gdpgrowth_fg7PxU98Jn.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tuvjfknqspbinxy/kpi_icon_gdpgrowth_fg7PxU98Jn.png.attrs
new file mode 100644
index 0000000..30324ed
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tuvjfknqspbinxy/kpi_icon_gdpgrowth_fg7PxU98Jn.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDPGrowth.png"},"md5":"HqqwH2pjnCJ5qZ2nSzmtUw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tuvjfknqspbinxy/thumbs_kpi_icon_gdpgrowth_fg7PxU98Jn.png/100x100_kpi_icon_gdpgrowth_fg7PxU98Jn.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tuvjfknqspbinxy/thumbs_kpi_icon_gdpgrowth_fg7PxU98Jn.png/100x100_kpi_icon_gdpgrowth_fg7PxU98Jn.png
new file mode 100644
index 0000000..40ddf4f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tuvjfknqspbinxy/thumbs_kpi_icon_gdpgrowth_fg7PxU98Jn.png/100x100_kpi_icon_gdpgrowth_fg7PxU98Jn.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tuvjfknqspbinxy/thumbs_kpi_icon_gdpgrowth_fg7PxU98Jn.png/100x100_kpi_icon_gdpgrowth_fg7PxU98Jn.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tuvjfknqspbinxy/thumbs_kpi_icon_gdpgrowth_fg7PxU98Jn.png/100x100_kpi_icon_gdpgrowth_fg7PxU98Jn.png.attrs
new file mode 100644
index 0000000..edf40cf
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tuvjfknqspbinxy/thumbs_kpi_icon_gdpgrowth_fg7PxU98Jn.png/100x100_kpi_icon_gdpgrowth_fg7PxU98Jn.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zrI7ItL8NvCC4HA5egimuA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tynnuqkf6td5cah/kpi_icon_export_T9Cvgf6apF.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tynnuqkf6td5cah/kpi_icon_export_T9Cvgf6apF.png
new file mode 100644
index 0000000..212871f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tynnuqkf6td5cah/kpi_icon_export_T9Cvgf6apF.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tynnuqkf6td5cah/kpi_icon_export_T9Cvgf6apF.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tynnuqkf6td5cah/kpi_icon_export_T9Cvgf6apF.png.attrs
new file mode 100644
index 0000000..8f5ba5d
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tynnuqkf6td5cah/kpi_icon_export_T9Cvgf6apF.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Export.png"},"md5":"IPaPiLbUhghzbNypSqwzog=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tynnuqkf6td5cah/thumbs_kpi_icon_export_T9Cvgf6apF.png/100x100_kpi_icon_export_T9Cvgf6apF.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tynnuqkf6td5cah/thumbs_kpi_icon_export_T9Cvgf6apF.png/100x100_kpi_icon_export_T9Cvgf6apF.png
new file mode 100644
index 0000000..58f0a77
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tynnuqkf6td5cah/thumbs_kpi_icon_export_T9Cvgf6apF.png/100x100_kpi_icon_export_T9Cvgf6apF.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tynnuqkf6td5cah/thumbs_kpi_icon_export_T9Cvgf6apF.png/100x100_kpi_icon_export_T9Cvgf6apF.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tynnuqkf6td5cah/thumbs_kpi_icon_export_T9Cvgf6apF.png/100x100_kpi_icon_export_T9Cvgf6apF.png.attrs
new file mode 100644
index 0000000..29b2c96
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/tynnuqkf6td5cah/thumbs_kpi_icon_export_T9Cvgf6apF.png/100x100_kpi_icon_export_T9Cvgf6apF.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"gRzHgaCqcAj686AvLdedFA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/kpi_icon_livestock_camels_iOvxY1YDfN.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/kpi_icon_livestock_camels_iOvxY1YDfN.png
new file mode 100644
index 0000000..83e63c3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/kpi_icon_livestock_camels_iOvxY1YDfN.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/kpi_icon_livestock_camels_iOvxY1YDfN.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/kpi_icon_livestock_camels_iOvxY1YDfN.png.attrs
new file mode 100644
index 0000000..e86e2b2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/kpi_icon_livestock_camels_iOvxY1YDfN.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LivestockCamels.png"},"md5":"ZsXt5FAGlKkn7OqD2ACfPQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/thumbs_kpi_icon_livestock_camels_iOvxY1YDfN.png/100x100_kpi_icon_livestock_camels_iOvxY1YDfN.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/thumbs_kpi_icon_livestock_camels_iOvxY1YDfN.png/100x100_kpi_icon_livestock_camels_iOvxY1YDfN.png
new file mode 100644
index 0000000..be17b14
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/thumbs_kpi_icon_livestock_camels_iOvxY1YDfN.png/100x100_kpi_icon_livestock_camels_iOvxY1YDfN.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/thumbs_kpi_icon_livestock_camels_iOvxY1YDfN.png/100x100_kpi_icon_livestock_camels_iOvxY1YDfN.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/thumbs_kpi_icon_livestock_camels_iOvxY1YDfN.png/100x100_kpi_icon_livestock_camels_iOvxY1YDfN.png.attrs
new file mode 100644
index 0000000..f6bc315
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/thumbs_kpi_icon_livestock_camels_iOvxY1YDfN.png/100x100_kpi_icon_livestock_camels_iOvxY1YDfN.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"d+BsCUhtU7PtTiNIG3YEzg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/kpi_icon_re_export_2xL2WLr0JF.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/kpi_icon_re_export_2xL2WLr0JF.png
new file mode 100644
index 0000000..2f2daf3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/kpi_icon_re_export_2xL2WLr0JF.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/kpi_icon_re_export_2xL2WLr0JF.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/kpi_icon_re_export_2xL2WLr0JF.png.attrs
new file mode 100644
index 0000000..efc1a5b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/kpi_icon_re_export_2xL2WLr0JF.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-ReExport.png"},"md5":"wuPAc6IENmbI4H4Y5iykQA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/thumbs_kpi_icon_re_export_2xL2WLr0JF.png/100x100_kpi_icon_re_export_2xL2WLr0JF.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/thumbs_kpi_icon_re_export_2xL2WLr0JF.png/100x100_kpi_icon_re_export_2xL2WLr0JF.png
new file mode 100644
index 0000000..6bf965d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/thumbs_kpi_icon_re_export_2xL2WLr0JF.png/100x100_kpi_icon_re_export_2xL2WLr0JF.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/thumbs_kpi_icon_re_export_2xL2WLr0JF.png/100x100_kpi_icon_re_export_2xL2WLr0JF.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/thumbs_kpi_icon_re_export_2xL2WLr0JF.png/100x100_kpi_icon_re_export_2xL2WLr0JF.png.attrs
new file mode 100644
index 0000000..670db8f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/thumbs_kpi_icon_re_export_2xL2WLr0JF.png/100x100_kpi_icon_re_export_2xL2WLr0JF.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"55tIdEz4EfKupJ7SzRKiNQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/kpi_icon_health_centers_1_ukjBtfQbSS.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/kpi_icon_health_centers_1_ukjBtfQbSS.png
new file mode 100644
index 0000000..3e1a049
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/kpi_icon_health_centers_1_ukjBtfQbSS.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/kpi_icon_health_centers_1_ukjBtfQbSS.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/kpi_icon_health_centers_1_ukjBtfQbSS.png.attrs
new file mode 100644
index 0000000..5b4c699
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/kpi_icon_health_centers_1_ukjBtfQbSS.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-HealthCenters (1).png"},"md5":"BSOP0npbkrCLnRX9kYzicg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/kpi_icon_health_centers_PpEElVl7WC.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/kpi_icon_health_centers_PpEElVl7WC.png
new file mode 100644
index 0000000..e26c0fb
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/kpi_icon_health_centers_PpEElVl7WC.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/kpi_icon_health_centers_PpEElVl7WC.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/kpi_icon_health_centers_PpEElVl7WC.png.attrs
new file mode 100644
index 0000000..80efaa6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/kpi_icon_health_centers_PpEElVl7WC.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-HealthCenters.png"},"md5":"QUPb24ZJ+yVFx/cBFROKSQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/thumbs_kpi_icon_health_centers_1_ukjBtfQbSS.png/100x100_kpi_icon_health_centers_1_ukjBtfQbSS.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/thumbs_kpi_icon_health_centers_1_ukjBtfQbSS.png/100x100_kpi_icon_health_centers_1_ukjBtfQbSS.png
new file mode 100644
index 0000000..06efc98
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/thumbs_kpi_icon_health_centers_1_ukjBtfQbSS.png/100x100_kpi_icon_health_centers_1_ukjBtfQbSS.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/thumbs_kpi_icon_health_centers_1_ukjBtfQbSS.png/100x100_kpi_icon_health_centers_1_ukjBtfQbSS.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/thumbs_kpi_icon_health_centers_1_ukjBtfQbSS.png/100x100_kpi_icon_health_centers_1_ukjBtfQbSS.png.attrs
new file mode 100644
index 0000000..9107cef
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/thumbs_kpi_icon_health_centers_1_ukjBtfQbSS.png/100x100_kpi_icon_health_centers_1_ukjBtfQbSS.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"y9NTfS1CkEsgZhHgNHEUMQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/thumbs_kpi_icon_health_centers_PpEElVl7WC.png/100x100_kpi_icon_health_centers_PpEElVl7WC.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/thumbs_kpi_icon_health_centers_PpEElVl7WC.png/100x100_kpi_icon_health_centers_PpEElVl7WC.png
new file mode 100644
index 0000000..d8a465e
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/thumbs_kpi_icon_health_centers_PpEElVl7WC.png/100x100_kpi_icon_health_centers_PpEElVl7WC.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/thumbs_kpi_icon_health_centers_PpEElVl7WC.png/100x100_kpi_icon_health_centers_PpEElVl7WC.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/thumbs_kpi_icon_health_centers_PpEElVl7WC.png/100x100_kpi_icon_health_centers_PpEElVl7WC.png.attrs
new file mode 100644
index 0000000..bab9988
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/uiukpge5yygtrgk/thumbs_kpi_icon_health_centers_PpEElVl7WC.png/100x100_kpi_icon_health_centers_PpEElVl7WC.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"lv9iL3SiCG7IKY80k3aevQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/kpi_icon_private_centers_C4KZvRUAtX.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/kpi_icon_private_centers_C4KZvRUAtX.png
new file mode 100644
index 0000000..e659566
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/kpi_icon_private_centers_C4KZvRUAtX.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/kpi_icon_private_centers_C4KZvRUAtX.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/kpi_icon_private_centers_C4KZvRUAtX.png.attrs
new file mode 100644
index 0000000..993acb3
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/kpi_icon_private_centers_C4KZvRUAtX.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-PrivateCenters.png"},"md5":"4mI3w0YymYOeh7ARgP027g=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/kpi_icon_private_centers_ViUY23xJae.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/kpi_icon_private_centers_ViUY23xJae.png
new file mode 100644
index 0000000..a03df0c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/kpi_icon_private_centers_ViUY23xJae.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/kpi_icon_private_centers_ViUY23xJae.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/kpi_icon_private_centers_ViUY23xJae.png.attrs
new file mode 100644
index 0000000..78d114e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/kpi_icon_private_centers_ViUY23xJae.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-PrivateCenters.png"},"md5":"LUgC6r2lEoJse4oQLX3Mkg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/thumbs_kpi_icon_private_centers_C4KZvRUAtX.png/100x100_kpi_icon_private_centers_C4KZvRUAtX.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/thumbs_kpi_icon_private_centers_C4KZvRUAtX.png/100x100_kpi_icon_private_centers_C4KZvRUAtX.png
new file mode 100644
index 0000000..60d05bf
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/thumbs_kpi_icon_private_centers_C4KZvRUAtX.png/100x100_kpi_icon_private_centers_C4KZvRUAtX.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/thumbs_kpi_icon_private_centers_C4KZvRUAtX.png/100x100_kpi_icon_private_centers_C4KZvRUAtX.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/thumbs_kpi_icon_private_centers_C4KZvRUAtX.png/100x100_kpi_icon_private_centers_C4KZvRUAtX.png.attrs
new file mode 100644
index 0000000..80316c3
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/thumbs_kpi_icon_private_centers_C4KZvRUAtX.png/100x100_kpi_icon_private_centers_C4KZvRUAtX.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"IAJ4OSrqNQZlLBr/jtNocA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/thumbs_kpi_icon_private_centers_ViUY23xJae.png/100x100_kpi_icon_private_centers_ViUY23xJae.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/thumbs_kpi_icon_private_centers_ViUY23xJae.png/100x100_kpi_icon_private_centers_ViUY23xJae.png
new file mode 100644
index 0000000..8b75751
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/thumbs_kpi_icon_private_centers_ViUY23xJae.png/100x100_kpi_icon_private_centers_ViUY23xJae.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/thumbs_kpi_icon_private_centers_ViUY23xJae.png/100x100_kpi_icon_private_centers_ViUY23xJae.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/thumbs_kpi_icon_private_centers_ViUY23xJae.png/100x100_kpi_icon_private_centers_ViUY23xJae.png.attrs
new file mode 100644
index 0000000..b3ffa0b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/urr4z84rpbtclfm/thumbs_kpi_icon_private_centers_ViUY23xJae.png/100x100_kpi_icon_private_centers_ViUY23xJae.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"azrHU6swT3mN0xn1A7jLfw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/kpi_icon_marriage_D9bufwhcl5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/kpi_icon_marriage_D9bufwhcl5.png
new file mode 100644
index 0000000..4511a5b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/kpi_icon_marriage_D9bufwhcl5.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/kpi_icon_marriage_D9bufwhcl5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/kpi_icon_marriage_D9bufwhcl5.png.attrs
new file mode 100644
index 0000000..3fe0133
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/kpi_icon_marriage_D9bufwhcl5.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Marriage.png"},"md5":"nnvEuAAjYWfWwtDM1r+v8A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/kpi_icon_marriage_wlhYFDix0W.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/kpi_icon_marriage_wlhYFDix0W.png
new file mode 100644
index 0000000..23ef047
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/kpi_icon_marriage_wlhYFDix0W.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/kpi_icon_marriage_wlhYFDix0W.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/kpi_icon_marriage_wlhYFDix0W.png.attrs
new file mode 100644
index 0000000..23f3ba4
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/kpi_icon_marriage_wlhYFDix0W.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Marriage.png"},"md5":"WcuuNyBpPkLP79pRToQqxw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/thumbs_kpi_icon_marriage_D9bufwhcl5.png/100x100_kpi_icon_marriage_D9bufwhcl5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/thumbs_kpi_icon_marriage_D9bufwhcl5.png/100x100_kpi_icon_marriage_D9bufwhcl5.png
new file mode 100644
index 0000000..e550118
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/thumbs_kpi_icon_marriage_D9bufwhcl5.png/100x100_kpi_icon_marriage_D9bufwhcl5.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/thumbs_kpi_icon_marriage_D9bufwhcl5.png/100x100_kpi_icon_marriage_D9bufwhcl5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/thumbs_kpi_icon_marriage_D9bufwhcl5.png/100x100_kpi_icon_marriage_D9bufwhcl5.png.attrs
new file mode 100644
index 0000000..ee75da3
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/thumbs_kpi_icon_marriage_D9bufwhcl5.png/100x100_kpi_icon_marriage_D9bufwhcl5.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"fZ2oprnP/J8tebqAYEHPGw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/thumbs_kpi_icon_marriage_wlhYFDix0W.png/100x100_kpi_icon_marriage_wlhYFDix0W.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/thumbs_kpi_icon_marriage_wlhYFDix0W.png/100x100_kpi_icon_marriage_wlhYFDix0W.png
new file mode 100644
index 0000000..3d8f904
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/thumbs_kpi_icon_marriage_wlhYFDix0W.png/100x100_kpi_icon_marriage_wlhYFDix0W.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/thumbs_kpi_icon_marriage_wlhYFDix0W.png/100x100_kpi_icon_marriage_wlhYFDix0W.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/thumbs_kpi_icon_marriage_wlhYFDix0W.png/100x100_kpi_icon_marriage_wlhYFDix0W.png.attrs
new file mode 100644
index 0000000..d9d76f9
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/v4y3is53f4b4n79/thumbs_kpi_icon_marriage_wlhYFDix0W.png/100x100_kpi_icon_marriage_wlhYFDix0W.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"JKPiSHibvOosxzL9Yvx4GQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/kpi_icon_gov_hospitals_jwFjcOhsJc.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/kpi_icon_gov_hospitals_jwFjcOhsJc.png
new file mode 100644
index 0000000..7deaaa9
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/kpi_icon_gov_hospitals_jwFjcOhsJc.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/kpi_icon_gov_hospitals_jwFjcOhsJc.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/kpi_icon_gov_hospitals_jwFjcOhsJc.png.attrs
new file mode 100644
index 0000000..cdca4c9
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/kpi_icon_gov_hospitals_jwFjcOhsJc.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GovHospitals.png"},"md5":"Q/NNqG1+rWz+7/5B3ysbmw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/kpi_icon_publich_hospotals_l35QHTf0y5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/kpi_icon_publich_hospotals_l35QHTf0y5.png
new file mode 100644
index 0000000..bafdf65
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/kpi_icon_publich_hospotals_l35QHTf0y5.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/kpi_icon_publich_hospotals_l35QHTf0y5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/kpi_icon_publich_hospotals_l35QHTf0y5.png.attrs
new file mode 100644
index 0000000..ab0d657
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/kpi_icon_publich_hospotals_l35QHTf0y5.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-PublichHospotals.png"},"md5":"O72iEX0YLaa2iT2mo9vsJQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/thumbs_kpi_icon_gov_hospitals_jwFjcOhsJc.png/100x100_kpi_icon_gov_hospitals_jwFjcOhsJc.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/thumbs_kpi_icon_gov_hospitals_jwFjcOhsJc.png/100x100_kpi_icon_gov_hospitals_jwFjcOhsJc.png
new file mode 100644
index 0000000..1380aac
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/thumbs_kpi_icon_gov_hospitals_jwFjcOhsJc.png/100x100_kpi_icon_gov_hospitals_jwFjcOhsJc.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/thumbs_kpi_icon_gov_hospitals_jwFjcOhsJc.png/100x100_kpi_icon_gov_hospitals_jwFjcOhsJc.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/thumbs_kpi_icon_gov_hospitals_jwFjcOhsJc.png/100x100_kpi_icon_gov_hospitals_jwFjcOhsJc.png.attrs
new file mode 100644
index 0000000..5470389
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/thumbs_kpi_icon_gov_hospitals_jwFjcOhsJc.png/100x100_kpi_icon_gov_hospitals_jwFjcOhsJc.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"Kef6r9deyNfFLbIgjQG8Lw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/thumbs_kpi_icon_publich_hospotals_l35QHTf0y5.png/100x100_kpi_icon_publich_hospotals_l35QHTf0y5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/thumbs_kpi_icon_publich_hospotals_l35QHTf0y5.png/100x100_kpi_icon_publich_hospotals_l35QHTf0y5.png
new file mode 100644
index 0000000..25e8c8a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/thumbs_kpi_icon_publich_hospotals_l35QHTf0y5.png/100x100_kpi_icon_publich_hospotals_l35QHTf0y5.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/thumbs_kpi_icon_publich_hospotals_l35QHTf0y5.png/100x100_kpi_icon_publich_hospotals_l35QHTf0y5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/thumbs_kpi_icon_publich_hospotals_l35QHTf0y5.png/100x100_kpi_icon_publich_hospotals_l35QHTf0y5.png.attrs
new file mode 100644
index 0000000..49193c4
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/thumbs_kpi_icon_publich_hospotals_l35QHTf0y5.png/100x100_kpi_icon_publich_hospotals_l35QHTf0y5.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"X45kI34FCrx14RyBSzTl6A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/kpi_icon_natural_reserves_02Y0jZA0Rk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/kpi_icon_natural_reserves_02Y0jZA0Rk.png
new file mode 100644
index 0000000..c600cfa
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/kpi_icon_natural_reserves_02Y0jZA0Rk.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/kpi_icon_natural_reserves_02Y0jZA0Rk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/kpi_icon_natural_reserves_02Y0jZA0Rk.png.attrs
new file mode 100644
index 0000000..01764dd
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/kpi_icon_natural_reserves_02Y0jZA0Rk.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-NaturalReserves.png"},"md5":"EidU5zyMspc/3lI2BgLvkg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/thumbs_kpi_icon_natural_reserves_02Y0jZA0Rk.png/100x100_kpi_icon_natural_reserves_02Y0jZA0Rk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/thumbs_kpi_icon_natural_reserves_02Y0jZA0Rk.png/100x100_kpi_icon_natural_reserves_02Y0jZA0Rk.png
new file mode 100644
index 0000000..3e3d54c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/thumbs_kpi_icon_natural_reserves_02Y0jZA0Rk.png/100x100_kpi_icon_natural_reserves_02Y0jZA0Rk.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/thumbs_kpi_icon_natural_reserves_02Y0jZA0Rk.png/100x100_kpi_icon_natural_reserves_02Y0jZA0Rk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/thumbs_kpi_icon_natural_reserves_02Y0jZA0Rk.png/100x100_kpi_icon_natural_reserves_02Y0jZA0Rk.png.attrs
new file mode 100644
index 0000000..9058a16
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/thumbs_kpi_icon_natural_reserves_02Y0jZA0Rk.png/100x100_kpi_icon_natural_reserves_02Y0jZA0Rk.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"uiU2k7ZNxToo4t8GzxMZpg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vv2he1av1nqw8ri/kpi_icon_occupancy_rate_DZGUn2HMkj.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vv2he1av1nqw8ri/kpi_icon_occupancy_rate_DZGUn2HMkj.png
new file mode 100644
index 0000000..4b5ae6b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vv2he1av1nqw8ri/kpi_icon_occupancy_rate_DZGUn2HMkj.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vv2he1av1nqw8ri/kpi_icon_occupancy_rate_DZGUn2HMkj.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vv2he1av1nqw8ri/kpi_icon_occupancy_rate_DZGUn2HMkj.png.attrs
new file mode 100644
index 0000000..b16288e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vv2he1av1nqw8ri/kpi_icon_occupancy_rate_DZGUn2HMkj.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OccupancyRate.png"},"md5":"Cs+jJNffYFWAhBqJwmKX0A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vv2he1av1nqw8ri/thumbs_kpi_icon_occupancy_rate_DZGUn2HMkj.png/100x100_kpi_icon_occupancy_rate_DZGUn2HMkj.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vv2he1av1nqw8ri/thumbs_kpi_icon_occupancy_rate_DZGUn2HMkj.png/100x100_kpi_icon_occupancy_rate_DZGUn2HMkj.png
new file mode 100644
index 0000000..1f6d56d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vv2he1av1nqw8ri/thumbs_kpi_icon_occupancy_rate_DZGUn2HMkj.png/100x100_kpi_icon_occupancy_rate_DZGUn2HMkj.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vv2he1av1nqw8ri/thumbs_kpi_icon_occupancy_rate_DZGUn2HMkj.png/100x100_kpi_icon_occupancy_rate_DZGUn2HMkj.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vv2he1av1nqw8ri/thumbs_kpi_icon_occupancy_rate_DZGUn2HMkj.png/100x100_kpi_icon_occupancy_rate_DZGUn2HMkj.png.attrs
new file mode 100644
index 0000000..5da8ec2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/vv2he1av1nqw8ri/thumbs_kpi_icon_occupancy_rate_DZGUn2HMkj.png/100x100_kpi_icon_occupancy_rate_DZGUn2HMkj.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"U+jFTo4vOOwg1q6sg8TA+A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/kpi_icon_total_land_area_wtljMtDwsQ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/kpi_icon_total_land_area_wtljMtDwsQ.png
new file mode 100644
index 0000000..10330db
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/kpi_icon_total_land_area_wtljMtDwsQ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/kpi_icon_total_land_area_wtljMtDwsQ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/kpi_icon_total_land_area_wtljMtDwsQ.png.attrs
new file mode 100644
index 0000000..e1f70d0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/kpi_icon_total_land_area_wtljMtDwsQ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-TotalLandArea.png"},"md5":"R2bwiuq4AIFDivMcvLo4Lg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/thumbs_kpi_icon_total_land_area_wtljMtDwsQ.png/100x100_kpi_icon_total_land_area_wtljMtDwsQ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/thumbs_kpi_icon_total_land_area_wtljMtDwsQ.png/100x100_kpi_icon_total_land_area_wtljMtDwsQ.png
new file mode 100644
index 0000000..a664a2d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/thumbs_kpi_icon_total_land_area_wtljMtDwsQ.png/100x100_kpi_icon_total_land_area_wtljMtDwsQ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/thumbs_kpi_icon_total_land_area_wtljMtDwsQ.png/100x100_kpi_icon_total_land_area_wtljMtDwsQ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/thumbs_kpi_icon_total_land_area_wtljMtDwsQ.png/100x100_kpi_icon_total_land_area_wtljMtDwsQ.png.attrs
new file mode 100644
index 0000000..b814d2e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/thumbs_kpi_icon_total_land_area_wtljMtDwsQ.png/100x100_kpi_icon_total_land_area_wtljMtDwsQ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"mccsVPwG7Fogdc5/VZLFKg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wf5pilm7obqfbti/female_zwUA1j9u2p.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wf5pilm7obqfbti/female_zwUA1j9u2p.png
new file mode 100644
index 0000000..e328a93
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wf5pilm7obqfbti/female_zwUA1j9u2p.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wf5pilm7obqfbti/female_zwUA1j9u2p.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wf5pilm7obqfbti/female_zwUA1j9u2p.png.attrs
new file mode 100644
index 0000000..3c217ec
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wf5pilm7obqfbti/female_zwUA1j9u2p.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"female.png"},"md5":"LHr3qNvXccxDzGNR1QwAiA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wf5pilm7obqfbti/thumbs_female_zwUA1j9u2p.png/100x100_female_zwUA1j9u2p.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wf5pilm7obqfbti/thumbs_female_zwUA1j9u2p.png/100x100_female_zwUA1j9u2p.png
new file mode 100644
index 0000000..4e9492f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wf5pilm7obqfbti/thumbs_female_zwUA1j9u2p.png/100x100_female_zwUA1j9u2p.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wf5pilm7obqfbti/thumbs_female_zwUA1j9u2p.png/100x100_female_zwUA1j9u2p.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wf5pilm7obqfbti/thumbs_female_zwUA1j9u2p.png/100x100_female_zwUA1j9u2p.png.attrs
new file mode 100644
index 0000000..72ab7b2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wf5pilm7obqfbti/thumbs_female_zwUA1j9u2p.png/100x100_female_zwUA1j9u2p.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"6qNv8XkjaWR5lPp91glyrw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/kpi_icon_natural_reserves_pSMx8j7LuK.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/kpi_icon_natural_reserves_pSMx8j7LuK.png
new file mode 100644
index 0000000..c600cfa
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/kpi_icon_natural_reserves_pSMx8j7LuK.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/kpi_icon_natural_reserves_pSMx8j7LuK.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/kpi_icon_natural_reserves_pSMx8j7LuK.png.attrs
new file mode 100644
index 0000000..01764dd
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/kpi_icon_natural_reserves_pSMx8j7LuK.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-NaturalReserves.png"},"md5":"EidU5zyMspc/3lI2BgLvkg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/thumbs_kpi_icon_natural_reserves_pSMx8j7LuK.png/100x100_kpi_icon_natural_reserves_pSMx8j7LuK.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/thumbs_kpi_icon_natural_reserves_pSMx8j7LuK.png/100x100_kpi_icon_natural_reserves_pSMx8j7LuK.png
new file mode 100644
index 0000000..3e3d54c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/thumbs_kpi_icon_natural_reserves_pSMx8j7LuK.png/100x100_kpi_icon_natural_reserves_pSMx8j7LuK.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/thumbs_kpi_icon_natural_reserves_pSMx8j7LuK.png/100x100_kpi_icon_natural_reserves_pSMx8j7LuK.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/thumbs_kpi_icon_natural_reserves_pSMx8j7LuK.png/100x100_kpi_icon_natural_reserves_pSMx8j7LuK.png.attrs
new file mode 100644
index 0000000..9058a16
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/thumbs_kpi_icon_natural_reserves_pSMx8j7LuK.png/100x100_kpi_icon_natural_reserves_pSMx8j7LuK.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"uiU2k7ZNxToo4t8GzxMZpg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/kpi_icon_livestock_sheep_o5sSDly7H6.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/kpi_icon_livestock_sheep_o5sSDly7H6.png
new file mode 100644
index 0000000..bcf7875
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/kpi_icon_livestock_sheep_o5sSDly7H6.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/kpi_icon_livestock_sheep_o5sSDly7H6.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/kpi_icon_livestock_sheep_o5sSDly7H6.png.attrs
new file mode 100644
index 0000000..af774bc
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/kpi_icon_livestock_sheep_o5sSDly7H6.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LivestockSheep.png"},"md5":"uvgfHXYusytaxXWP86/PMQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/thumbs_kpi_icon_livestock_sheep_o5sSDly7H6.png/100x100_kpi_icon_livestock_sheep_o5sSDly7H6.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/thumbs_kpi_icon_livestock_sheep_o5sSDly7H6.png/100x100_kpi_icon_livestock_sheep_o5sSDly7H6.png
new file mode 100644
index 0000000..6f08b4a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/thumbs_kpi_icon_livestock_sheep_o5sSDly7H6.png/100x100_kpi_icon_livestock_sheep_o5sSDly7H6.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/thumbs_kpi_icon_livestock_sheep_o5sSDly7H6.png/100x100_kpi_icon_livestock_sheep_o5sSDly7H6.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/thumbs_kpi_icon_livestock_sheep_o5sSDly7H6.png/100x100_kpi_icon_livestock_sheep_o5sSDly7H6.png.attrs
new file mode 100644
index 0000000..fa9eaee
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/thumbs_kpi_icon_livestock_sheep_o5sSDly7H6.png/100x100_kpi_icon_livestock_sheep_o5sSDly7H6.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"07ogwztZgxRY87I+T3YS6w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/x5wbpus72ffoaje/kpi_icon_male_teachers_1_LqcbbCB1db.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/x5wbpus72ffoaje/kpi_icon_male_teachers_1_LqcbbCB1db.png
new file mode 100644
index 0000000..7320871
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/x5wbpus72ffoaje/kpi_icon_male_teachers_1_LqcbbCB1db.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/x5wbpus72ffoaje/kpi_icon_male_teachers_1_LqcbbCB1db.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/x5wbpus72ffoaje/kpi_icon_male_teachers_1_LqcbbCB1db.png.attrs
new file mode 100644
index 0000000..8fb97ed
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/x5wbpus72ffoaje/kpi_icon_male_teachers_1_LqcbbCB1db.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-MaleTeachers (1).png"},"md5":"8WB73clJYETSqZZMgxYSaQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/x5wbpus72ffoaje/thumbs_kpi_icon_male_teachers_1_LqcbbCB1db.png/100x100_kpi_icon_male_teachers_1_LqcbbCB1db.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/x5wbpus72ffoaje/thumbs_kpi_icon_male_teachers_1_LqcbbCB1db.png/100x100_kpi_icon_male_teachers_1_LqcbbCB1db.png
new file mode 100644
index 0000000..658d7b3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/x5wbpus72ffoaje/thumbs_kpi_icon_male_teachers_1_LqcbbCB1db.png/100x100_kpi_icon_male_teachers_1_LqcbbCB1db.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/x5wbpus72ffoaje/thumbs_kpi_icon_male_teachers_1_LqcbbCB1db.png/100x100_kpi_icon_male_teachers_1_LqcbbCB1db.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/x5wbpus72ffoaje/thumbs_kpi_icon_male_teachers_1_LqcbbCB1db.png/100x100_kpi_icon_male_teachers_1_LqcbbCB1db.png.attrs
new file mode 100644
index 0000000..334242a
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/x5wbpus72ffoaje/thumbs_kpi_icon_male_teachers_1_LqcbbCB1db.png/100x100_kpi_icon_male_teachers_1_LqcbbCB1db.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"qEgIwndOcbJYzCQnltZqHA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/kpi_icon_occupancy_rate_FUIC3JNYsS.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/kpi_icon_occupancy_rate_FUIC3JNYsS.png
new file mode 100644
index 0000000..4b5ae6b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/kpi_icon_occupancy_rate_FUIC3JNYsS.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/kpi_icon_occupancy_rate_FUIC3JNYsS.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/kpi_icon_occupancy_rate_FUIC3JNYsS.png.attrs
new file mode 100644
index 0000000..b16288e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/kpi_icon_occupancy_rate_FUIC3JNYsS.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OccupancyRate.png"},"md5":"Cs+jJNffYFWAhBqJwmKX0A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/thumbs_kpi_icon_occupancy_rate_FUIC3JNYsS.png/100x100_kpi_icon_occupancy_rate_FUIC3JNYsS.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/thumbs_kpi_icon_occupancy_rate_FUIC3JNYsS.png/100x100_kpi_icon_occupancy_rate_FUIC3JNYsS.png
new file mode 100644
index 0000000..1f6d56d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/thumbs_kpi_icon_occupancy_rate_FUIC3JNYsS.png/100x100_kpi_icon_occupancy_rate_FUIC3JNYsS.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/thumbs_kpi_icon_occupancy_rate_FUIC3JNYsS.png/100x100_kpi_icon_occupancy_rate_FUIC3JNYsS.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/thumbs_kpi_icon_occupancy_rate_FUIC3JNYsS.png/100x100_kpi_icon_occupancy_rate_FUIC3JNYsS.png.attrs
new file mode 100644
index 0000000..5da8ec2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/thumbs_kpi_icon_occupancy_rate_FUIC3JNYsS.png/100x100_kpi_icon_occupancy_rate_FUIC3JNYsS.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"U+jFTo4vOOwg1q6sg8TA+A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/kpi_icon_export_VVWjL8yXuh.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/kpi_icon_export_VVWjL8yXuh.png
new file mode 100644
index 0000000..212871f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/kpi_icon_export_VVWjL8yXuh.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/kpi_icon_export_VVWjL8yXuh.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/kpi_icon_export_VVWjL8yXuh.png.attrs
new file mode 100644
index 0000000..8f5ba5d
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/kpi_icon_export_VVWjL8yXuh.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Export.png"},"md5":"IPaPiLbUhghzbNypSqwzog=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/thumbs_kpi_icon_export_VVWjL8yXuh.png/100x100_kpi_icon_export_VVWjL8yXuh.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/thumbs_kpi_icon_export_VVWjL8yXuh.png/100x100_kpi_icon_export_VVWjL8yXuh.png
new file mode 100644
index 0000000..58f0a77
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/thumbs_kpi_icon_export_VVWjL8yXuh.png/100x100_kpi_icon_export_VVWjL8yXuh.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/thumbs_kpi_icon_export_VVWjL8yXuh.png/100x100_kpi_icon_export_VVWjL8yXuh.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/thumbs_kpi_icon_export_VVWjL8yXuh.png/100x100_kpi_icon_export_VVWjL8yXuh.png.attrs
new file mode 100644
index 0000000..29b2c96
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/thumbs_kpi_icon_export_VVWjL8yXuh.png/100x100_kpi_icon_export_VVWjL8yXuh.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"gRzHgaCqcAj686AvLdedFA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/kpi_icon_livestock_sheep_fw8GCGHiq6.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/kpi_icon_livestock_sheep_fw8GCGHiq6.png
new file mode 100644
index 0000000..bcf7875
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/kpi_icon_livestock_sheep_fw8GCGHiq6.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/kpi_icon_livestock_sheep_fw8GCGHiq6.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/kpi_icon_livestock_sheep_fw8GCGHiq6.png.attrs
new file mode 100644
index 0000000..af774bc
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/kpi_icon_livestock_sheep_fw8GCGHiq6.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LivestockSheep.png"},"md5":"uvgfHXYusytaxXWP86/PMQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/thumbs_kpi_icon_livestock_sheep_fw8GCGHiq6.png/100x100_kpi_icon_livestock_sheep_fw8GCGHiq6.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/thumbs_kpi_icon_livestock_sheep_fw8GCGHiq6.png/100x100_kpi_icon_livestock_sheep_fw8GCGHiq6.png
new file mode 100644
index 0000000..6f08b4a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/thumbs_kpi_icon_livestock_sheep_fw8GCGHiq6.png/100x100_kpi_icon_livestock_sheep_fw8GCGHiq6.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/thumbs_kpi_icon_livestock_sheep_fw8GCGHiq6.png/100x100_kpi_icon_livestock_sheep_fw8GCGHiq6.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/thumbs_kpi_icon_livestock_sheep_fw8GCGHiq6.png/100x100_kpi_icon_livestock_sheep_fw8GCGHiq6.png.attrs
new file mode 100644
index 0000000..fa9eaee
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/thumbs_kpi_icon_livestock_sheep_fw8GCGHiq6.png/100x100_kpi_icon_livestock_sheep_fw8GCGHiq6.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"07ogwztZgxRY87I+T3YS6w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/kpi_icon_consumption_Yf6E0xpbBA.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/kpi_icon_consumption_Yf6E0xpbBA.png
new file mode 100644
index 0000000..f41e6b0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/kpi_icon_consumption_Yf6E0xpbBA.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/kpi_icon_consumption_Yf6E0xpbBA.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/kpi_icon_consumption_Yf6E0xpbBA.png.attrs
new file mode 100644
index 0000000..6a24739
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/kpi_icon_consumption_Yf6E0xpbBA.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Consumption.png"},"md5":"f1NUArqFL42VWuleVDQ+vQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/thumbs_kpi_icon_consumption_Yf6E0xpbBA.png/100x100_kpi_icon_consumption_Yf6E0xpbBA.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/thumbs_kpi_icon_consumption_Yf6E0xpbBA.png/100x100_kpi_icon_consumption_Yf6E0xpbBA.png
new file mode 100644
index 0000000..e5d6b86
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/thumbs_kpi_icon_consumption_Yf6E0xpbBA.png/100x100_kpi_icon_consumption_Yf6E0xpbBA.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/thumbs_kpi_icon_consumption_Yf6E0xpbBA.png/100x100_kpi_icon_consumption_Yf6E0xpbBA.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/thumbs_kpi_icon_consumption_Yf6E0xpbBA.png/100x100_kpi_icon_consumption_Yf6E0xpbBA.png.attrs
new file mode 100644
index 0000000..8f1222c
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/thumbs_kpi_icon_consumption_Yf6E0xpbBA.png/100x100_kpi_icon_consumption_Yf6E0xpbBA.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"PMmkMsIDsFA+XGvZjuhYhA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/kpi_icon_consumption_AbjaJaBEXX.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/kpi_icon_consumption_AbjaJaBEXX.png
new file mode 100644
index 0000000..f41e6b0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/kpi_icon_consumption_AbjaJaBEXX.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/kpi_icon_consumption_AbjaJaBEXX.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/kpi_icon_consumption_AbjaJaBEXX.png.attrs
new file mode 100644
index 0000000..6a24739
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/kpi_icon_consumption_AbjaJaBEXX.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Consumption.png"},"md5":"f1NUArqFL42VWuleVDQ+vQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/thumbs_kpi_icon_consumption_AbjaJaBEXX.png/100x100_kpi_icon_consumption_AbjaJaBEXX.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/thumbs_kpi_icon_consumption_AbjaJaBEXX.png/100x100_kpi_icon_consumption_AbjaJaBEXX.png
new file mode 100644
index 0000000..e5d6b86
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/thumbs_kpi_icon_consumption_AbjaJaBEXX.png/100x100_kpi_icon_consumption_AbjaJaBEXX.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/thumbs_kpi_icon_consumption_AbjaJaBEXX.png/100x100_kpi_icon_consumption_AbjaJaBEXX.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/thumbs_kpi_icon_consumption_AbjaJaBEXX.png/100x100_kpi_icon_consumption_AbjaJaBEXX.png.attrs
new file mode 100644
index 0000000..8f1222c
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/thumbs_kpi_icon_consumption_AbjaJaBEXX.png/100x100_kpi_icon_consumption_AbjaJaBEXX.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"PMmkMsIDsFA+XGvZjuhYhA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/kpi_icon_divorce_L9QCMAmNkr.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/kpi_icon_divorce_L9QCMAmNkr.png
new file mode 100644
index 0000000..fcc71dc
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/kpi_icon_divorce_L9QCMAmNkr.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/kpi_icon_divorce_L9QCMAmNkr.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/kpi_icon_divorce_L9QCMAmNkr.png.attrs
new file mode 100644
index 0000000..a26de2e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/kpi_icon_divorce_L9QCMAmNkr.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Divorce.png"},"md5":"RgWvIC19aOqKJ7uOAyRyKw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/kpi_icon_divorce_fryxlBxzGV.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/kpi_icon_divorce_fryxlBxzGV.png
new file mode 100644
index 0000000..0c18983
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/kpi_icon_divorce_fryxlBxzGV.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/kpi_icon_divorce_fryxlBxzGV.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/kpi_icon_divorce_fryxlBxzGV.png.attrs
new file mode 100644
index 0000000..9ebddb0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/kpi_icon_divorce_fryxlBxzGV.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Divorce.png"},"md5":"R75apNv2eSwUNjOGSZOXEA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/thumbs_kpi_icon_divorce_L9QCMAmNkr.png/100x100_kpi_icon_divorce_L9QCMAmNkr.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/thumbs_kpi_icon_divorce_L9QCMAmNkr.png/100x100_kpi_icon_divorce_L9QCMAmNkr.png
new file mode 100644
index 0000000..dc0bc6e
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/thumbs_kpi_icon_divorce_L9QCMAmNkr.png/100x100_kpi_icon_divorce_L9QCMAmNkr.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/thumbs_kpi_icon_divorce_L9QCMAmNkr.png/100x100_kpi_icon_divorce_L9QCMAmNkr.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/thumbs_kpi_icon_divorce_L9QCMAmNkr.png/100x100_kpi_icon_divorce_L9QCMAmNkr.png.attrs
new file mode 100644
index 0000000..8f559dc
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/thumbs_kpi_icon_divorce_L9QCMAmNkr.png/100x100_kpi_icon_divorce_L9QCMAmNkr.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"IiFSrkNvGoy7wSGmvCYUYw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/thumbs_kpi_icon_divorce_fryxlBxzGV.png/100x100_kpi_icon_divorce_fryxlBxzGV.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/thumbs_kpi_icon_divorce_fryxlBxzGV.png/100x100_kpi_icon_divorce_fryxlBxzGV.png
new file mode 100644
index 0000000..e727f3b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/thumbs_kpi_icon_divorce_fryxlBxzGV.png/100x100_kpi_icon_divorce_fryxlBxzGV.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/thumbs_kpi_icon_divorce_fryxlBxzGV.png/100x100_kpi_icon_divorce_fryxlBxzGV.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/thumbs_kpi_icon_divorce_fryxlBxzGV.png/100x100_kpi_icon_divorce_fryxlBxzGV.png.attrs
new file mode 100644
index 0000000..ac7b299
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yxv0ja5ul715duk/thumbs_kpi_icon_divorce_fryxlBxzGV.png/100x100_kpi_icon_divorce_fryxlBxzGV.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"1KWZl2RxG0Q5KtzgtdwnoQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/kpi_icon_crops_area_F8MLVYNGeX.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/kpi_icon_crops_area_F8MLVYNGeX.png
new file mode 100644
index 0000000..a3023be
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/kpi_icon_crops_area_F8MLVYNGeX.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/kpi_icon_crops_area_F8MLVYNGeX.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/kpi_icon_crops_area_F8MLVYNGeX.png.attrs
new file mode 100644
index 0000000..4d9ca98
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/kpi_icon_crops_area_F8MLVYNGeX.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-CropsArea.png"},"md5":"6BWT6i/rBlR1hej7AA6Gkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/thumbs_kpi_icon_crops_area_F8MLVYNGeX.png/100x100_kpi_icon_crops_area_F8MLVYNGeX.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/thumbs_kpi_icon_crops_area_F8MLVYNGeX.png/100x100_kpi_icon_crops_area_F8MLVYNGeX.png
new file mode 100644
index 0000000..250b3e0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/thumbs_kpi_icon_crops_area_F8MLVYNGeX.png/100x100_kpi_icon_crops_area_F8MLVYNGeX.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/thumbs_kpi_icon_crops_area_F8MLVYNGeX.png/100x100_kpi_icon_crops_area_F8MLVYNGeX.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/thumbs_kpi_icon_crops_area_F8MLVYNGeX.png/100x100_kpi_icon_crops_area_F8MLVYNGeX.png.attrs
new file mode 100644
index 0000000..ae931b0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/thumbs_kpi_icon_crops_area_F8MLVYNGeX.png/100x100_kpi_icon_crops_area_F8MLVYNGeX.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"srBd6fWEm86XwUV6j55geA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/kpi_icon_natural_reserves_uRWS2K5v4P.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/kpi_icon_natural_reserves_uRWS2K5v4P.png
new file mode 100644
index 0000000..c600cfa
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/kpi_icon_natural_reserves_uRWS2K5v4P.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/kpi_icon_natural_reserves_uRWS2K5v4P.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/kpi_icon_natural_reserves_uRWS2K5v4P.png.attrs
new file mode 100644
index 0000000..01764dd
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/kpi_icon_natural_reserves_uRWS2K5v4P.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-NaturalReserves.png"},"md5":"EidU5zyMspc/3lI2BgLvkg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/thumbs_kpi_icon_natural_reserves_uRWS2K5v4P.png/100x100_kpi_icon_natural_reserves_uRWS2K5v4P.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/thumbs_kpi_icon_natural_reserves_uRWS2K5v4P.png/100x100_kpi_icon_natural_reserves_uRWS2K5v4P.png
new file mode 100644
index 0000000..3e3d54c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/thumbs_kpi_icon_natural_reserves_uRWS2K5v4P.png/100x100_kpi_icon_natural_reserves_uRWS2K5v4P.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/thumbs_kpi_icon_natural_reserves_uRWS2K5v4P.png/100x100_kpi_icon_natural_reserves_uRWS2K5v4P.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/thumbs_kpi_icon_natural_reserves_uRWS2K5v4P.png/100x100_kpi_icon_natural_reserves_uRWS2K5v4P.png.attrs
new file mode 100644
index 0000000..9058a16
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/thumbs_kpi_icon_natural_reserves_uRWS2K5v4P.png/100x100_kpi_icon_natural_reserves_uRWS2K5v4P.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"uiU2k7ZNxToo4t8GzxMZpg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/kpi_icon_crops_area_T8B2X6wEZJ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/kpi_icon_crops_area_T8B2X6wEZJ.png
new file mode 100644
index 0000000..a3023be
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/kpi_icon_crops_area_T8B2X6wEZJ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/kpi_icon_crops_area_T8B2X6wEZJ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/kpi_icon_crops_area_T8B2X6wEZJ.png.attrs
new file mode 100644
index 0000000..4d9ca98
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/kpi_icon_crops_area_T8B2X6wEZJ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-CropsArea.png"},"md5":"6BWT6i/rBlR1hej7AA6Gkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/thumbs_kpi_icon_crops_area_T8B2X6wEZJ.png/100x100_kpi_icon_crops_area_T8B2X6wEZJ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/thumbs_kpi_icon_crops_area_T8B2X6wEZJ.png/100x100_kpi_icon_crops_area_T8B2X6wEZJ.png
new file mode 100644
index 0000000..250b3e0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/thumbs_kpi_icon_crops_area_T8B2X6wEZJ.png/100x100_kpi_icon_crops_area_T8B2X6wEZJ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/thumbs_kpi_icon_crops_area_T8B2X6wEZJ.png/100x100_kpi_icon_crops_area_T8B2X6wEZJ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/thumbs_kpi_icon_crops_area_T8B2X6wEZJ.png/100x100_kpi_icon_crops_area_T8B2X6wEZJ.png.attrs
new file mode 100644
index 0000000..ae931b0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/thumbs_kpi_icon_crops_area_T8B2X6wEZJ.png/100x100_kpi_icon_crops_area_T8B2X6wEZJ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"srBd6fWEm86XwUV6j55geA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/kpi_icon_private_centers_bCNQ74yMjc.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/kpi_icon_private_centers_bCNQ74yMjc.png
new file mode 100644
index 0000000..e659566
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/kpi_icon_private_centers_bCNQ74yMjc.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/kpi_icon_private_centers_bCNQ74yMjc.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/kpi_icon_private_centers_bCNQ74yMjc.png.attrs
new file mode 100644
index 0000000..993acb3
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/kpi_icon_private_centers_bCNQ74yMjc.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-PrivateCenters.png"},"md5":"4mI3w0YymYOeh7ARgP027g=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/kpi_icon_private_centers_urEe84g6Jm.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/kpi_icon_private_centers_urEe84g6Jm.png
new file mode 100644
index 0000000..a03df0c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/kpi_icon_private_centers_urEe84g6Jm.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/kpi_icon_private_centers_urEe84g6Jm.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/kpi_icon_private_centers_urEe84g6Jm.png.attrs
new file mode 100644
index 0000000..78d114e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/kpi_icon_private_centers_urEe84g6Jm.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-PrivateCenters.png"},"md5":"LUgC6r2lEoJse4oQLX3Mkg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/thumbs_kpi_icon_private_centers_bCNQ74yMjc.png/100x100_kpi_icon_private_centers_bCNQ74yMjc.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/thumbs_kpi_icon_private_centers_bCNQ74yMjc.png/100x100_kpi_icon_private_centers_bCNQ74yMjc.png
new file mode 100644
index 0000000..60d05bf
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/thumbs_kpi_icon_private_centers_bCNQ74yMjc.png/100x100_kpi_icon_private_centers_bCNQ74yMjc.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/thumbs_kpi_icon_private_centers_bCNQ74yMjc.png/100x100_kpi_icon_private_centers_bCNQ74yMjc.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/thumbs_kpi_icon_private_centers_bCNQ74yMjc.png/100x100_kpi_icon_private_centers_bCNQ74yMjc.png.attrs
new file mode 100644
index 0000000..80316c3
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/thumbs_kpi_icon_private_centers_bCNQ74yMjc.png/100x100_kpi_icon_private_centers_bCNQ74yMjc.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"IAJ4OSrqNQZlLBr/jtNocA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/thumbs_kpi_icon_private_centers_urEe84g6Jm.png/100x100_kpi_icon_private_centers_urEe84g6Jm.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/thumbs_kpi_icon_private_centers_urEe84g6Jm.png/100x100_kpi_icon_private_centers_urEe84g6Jm.png
new file mode 100644
index 0000000..8b75751
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/thumbs_kpi_icon_private_centers_urEe84g6Jm.png/100x100_kpi_icon_private_centers_urEe84g6Jm.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/thumbs_kpi_icon_private_centers_urEe84g6Jm.png/100x100_kpi_icon_private_centers_urEe84g6Jm.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/thumbs_kpi_icon_private_centers_urEe84g6Jm.png/100x100_kpi_icon_private_centers_urEe84g6Jm.png.attrs
new file mode 100644
index 0000000..b3ffa0b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/thumbs_kpi_icon_private_centers_urEe84g6Jm.png/100x100_kpi_icon_private_centers_urEe84g6Jm.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"azrHU6swT3mN0xn1A7jLfw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/35g5fuzn1qgp9k7/hcl8trfumjev4b1/fcsclogo_YsVOcx6yB1.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/35g5fuzn1qgp9k7/hcl8trfumjev4b1/fcsclogo_YsVOcx6yB1.png
new file mode 100644
index 0000000..09fff64
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/35g5fuzn1qgp9k7/hcl8trfumjev4b1/fcsclogo_YsVOcx6yB1.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/35g5fuzn1qgp9k7/hcl8trfumjev4b1/fcsclogo_YsVOcx6yB1.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/35g5fuzn1qgp9k7/hcl8trfumjev4b1/fcsclogo_YsVOcx6yB1.png.attrs
new file mode 100644
index 0000000..6e4782f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/35g5fuzn1qgp9k7/hcl8trfumjev4b1/fcsclogo_YsVOcx6yB1.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"FCSCLogo.png"},"md5":"64vKaJS7ySlwJ01MBaM7jA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/35g5fuzn1qgp9k7/hcl8trfumjev4b1/thumbs_fcsclogo_YsVOcx6yB1.png/100x100_fcsclogo_YsVOcx6yB1.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/35g5fuzn1qgp9k7/hcl8trfumjev4b1/thumbs_fcsclogo_YsVOcx6yB1.png/100x100_fcsclogo_YsVOcx6yB1.png
new file mode 100644
index 0000000..3540349
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/35g5fuzn1qgp9k7/hcl8trfumjev4b1/thumbs_fcsclogo_YsVOcx6yB1.png/100x100_fcsclogo_YsVOcx6yB1.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/35g5fuzn1qgp9k7/hcl8trfumjev4b1/thumbs_fcsclogo_YsVOcx6yB1.png/100x100_fcsclogo_YsVOcx6yB1.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/35g5fuzn1qgp9k7/hcl8trfumjev4b1/thumbs_fcsclogo_YsVOcx6yB1.png/100x100_fcsclogo_YsVOcx6yB1.png.attrs
new file mode 100644
index 0000000..79dc3ef
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/35g5fuzn1qgp9k7/hcl8trfumjev4b1/thumbs_fcsclogo_YsVOcx6yB1.png/100x100_fcsclogo_YsVOcx6yB1.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"+vM8FbqC90cnR9oH7giBtg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/0bf5itz4px7443r/1000287684_GIE0TjrE8f.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/0bf5itz4px7443r/1000287684_GIE0TjrE8f.jpg
new file mode 100644
index 0000000..4e8841a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/0bf5itz4px7443r/1000287684_GIE0TjrE8f.jpg differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/0bf5itz4px7443r/1000287684_GIE0TjrE8f.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/0bf5itz4px7443r/1000287684_GIE0TjrE8f.jpg.attrs
new file mode 100644
index 0000000..d1210f6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/0bf5itz4px7443r/1000287684_GIE0TjrE8f.jpg.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/jpeg","user.metadata":{"original-filename":"1000287684.jpg"},"md5":"UA2VEKUvUpv91ELI1ayF2A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/0bf5itz4px7443r/thumbs_1000287684_GIE0TjrE8f.jpg/100x100_1000287684_GIE0TjrE8f.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/0bf5itz4px7443r/thumbs_1000287684_GIE0TjrE8f.jpg/100x100_1000287684_GIE0TjrE8f.jpg
new file mode 100644
index 0000000..95921c0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/0bf5itz4px7443r/thumbs_1000287684_GIE0TjrE8f.jpg/100x100_1000287684_GIE0TjrE8f.jpg differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/0bf5itz4px7443r/thumbs_1000287684_GIE0TjrE8f.jpg/100x100_1000287684_GIE0TjrE8f.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/0bf5itz4px7443r/thumbs_1000287684_GIE0TjrE8f.jpg/100x100_1000287684_GIE0TjrE8f.jpg.attrs
new file mode 100644
index 0000000..f782280
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/0bf5itz4px7443r/thumbs_1000287684_GIE0TjrE8f.jpg/100x100_1000287684_GIE0TjrE8f.jpg.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/jpeg","user.metadata":null,"md5":"YpRYnPvJR9Rlra27TIX/QQ=="}
diff --git a/pb_data/storage/_pb_users_auth_/7tkyvb8f7q6lzit/1000008363_ZsfvN5xzq0.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/7tkyvb8f7q6lzit/1000008363_ZsfvN5xzq0.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/7tkyvb8f7q6lzit/1000008363_ZsfvN5xzq0.jpg
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/7tkyvb8f7q6lzit/1000008363_ZsfvN5xzq0.jpg
diff --git a/pb_data/storage/_pb_users_auth_/7tkyvb8f7q6lzit/1000008363_ZsfvN5xzq0.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/7tkyvb8f7q6lzit/1000008363_ZsfvN5xzq0.jpg.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/7tkyvb8f7q6lzit/1000008363_ZsfvN5xzq0.jpg.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/7tkyvb8f7q6lzit/1000008363_ZsfvN5xzq0.jpg.attrs
diff --git a/pb_data/storage/_pb_users_auth_/7tkyvb8f7q6lzit/thumbs_1000008363_ZsfvN5xzq0.jpg/100x100_1000008363_ZsfvN5xzq0.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/7tkyvb8f7q6lzit/thumbs_1000008363_ZsfvN5xzq0.jpg/100x100_1000008363_ZsfvN5xzq0.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/7tkyvb8f7q6lzit/thumbs_1000008363_ZsfvN5xzq0.jpg/100x100_1000008363_ZsfvN5xzq0.jpg
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/7tkyvb8f7q6lzit/thumbs_1000008363_ZsfvN5xzq0.jpg/100x100_1000008363_ZsfvN5xzq0.jpg
diff --git a/pb_data/storage/_pb_users_auth_/7tkyvb8f7q6lzit/thumbs_1000008363_ZsfvN5xzq0.jpg/100x100_1000008363_ZsfvN5xzq0.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/7tkyvb8f7q6lzit/thumbs_1000008363_ZsfvN5xzq0.jpg/100x100_1000008363_ZsfvN5xzq0.jpg.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/7tkyvb8f7q6lzit/thumbs_1000008363_ZsfvN5xzq0.jpg/100x100_1000008363_ZsfvN5xzq0.jpg.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/7tkyvb8f7q6lzit/thumbs_1000008363_ZsfvN5xzq0.jpg/100x100_1000008363_ZsfvN5xzq0.jpg.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/9j23fnzkm6yhjqr/ammar_F2rxMzUbCW.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/9j23fnzkm6yhjqr/ammar_F2rxMzUbCW.jpg
new file mode 100644
index 0000000..44f2a74
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/9j23fnzkm6yhjqr/ammar_F2rxMzUbCW.jpg differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/9j23fnzkm6yhjqr/ammar_F2rxMzUbCW.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/9j23fnzkm6yhjqr/ammar_F2rxMzUbCW.jpg.attrs
new file mode 100644
index 0000000..e6ab4b0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/9j23fnzkm6yhjqr/ammar_F2rxMzUbCW.jpg.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/jpeg","user.metadata":{"original-filename":"Ammar.jpg"},"md5":"vPoShsb0FqX7ibTohKag8g=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/9j23fnzkm6yhjqr/thumbs_ammar_F2rxMzUbCW.jpg/100x100_ammar_F2rxMzUbCW.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/9j23fnzkm6yhjqr/thumbs_ammar_F2rxMzUbCW.jpg/100x100_ammar_F2rxMzUbCW.jpg
new file mode 100644
index 0000000..d69c7c6
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/9j23fnzkm6yhjqr/thumbs_ammar_F2rxMzUbCW.jpg/100x100_ammar_F2rxMzUbCW.jpg differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/9j23fnzkm6yhjqr/thumbs_ammar_F2rxMzUbCW.jpg/100x100_ammar_F2rxMzUbCW.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/9j23fnzkm6yhjqr/thumbs_ammar_F2rxMzUbCW.jpg/100x100_ammar_F2rxMzUbCW.jpg.attrs
new file mode 100644
index 0000000..ebf54ff
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/9j23fnzkm6yhjqr/thumbs_ammar_F2rxMzUbCW.jpg/100x100_ammar_F2rxMzUbCW.jpg.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/jpeg","user.metadata":null,"md5":"mjcg7GRHcZqGTNEVkc9nEg=="}
diff --git a/pb_data/storage/_pb_users_auth_/fl8qs2a0243czk9/screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/fl8qs2a0243czk9/screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/fl8qs2a0243czk9/screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/fl8qs2a0243czk9/screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg
diff --git a/pb_data/storage/_pb_users_auth_/fl8qs2a0243czk9/screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/fl8qs2a0243czk9/screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/fl8qs2a0243czk9/screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/fl8qs2a0243czk9/screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg.attrs
diff --git a/pb_data/storage/_pb_users_auth_/fl8qs2a0243czk9/thumbs_screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg/100x100_screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/fl8qs2a0243czk9/thumbs_screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg/100x100_screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/fl8qs2a0243czk9/thumbs_screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg/100x100_screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/fl8qs2a0243czk9/thumbs_screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg/100x100_screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg
diff --git a/pb_data/storage/_pb_users_auth_/fl8qs2a0243czk9/thumbs_screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg/100x100_screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/fl8qs2a0243czk9/thumbs_screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg/100x100_screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/fl8qs2a0243czk9/thumbs_screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg/100x100_screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/fl8qs2a0243czk9/thumbs_screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg/100x100_screenshot_2025_02_21_19_27_32_211_ae_gov_fcsc_FSfqc8PEUJ.frontend.jpg.attrs
diff --git a/pb_data/storage/_pb_users_auth_/jv8fg74vef676os/1000118728_zuTNrAY6w4.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/jv8fg74vef676os/1000118728_zuTNrAY6w4.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/jv8fg74vef676os/1000118728_zuTNrAY6w4.jpg
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/jv8fg74vef676os/1000118728_zuTNrAY6w4.jpg
diff --git a/pb_data/storage/_pb_users_auth_/jv8fg74vef676os/1000118728_zuTNrAY6w4.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/jv8fg74vef676os/1000118728_zuTNrAY6w4.jpg.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/jv8fg74vef676os/1000118728_zuTNrAY6w4.jpg.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/jv8fg74vef676os/1000118728_zuTNrAY6w4.jpg.attrs
diff --git a/pb_data/storage/_pb_users_auth_/jv8fg74vef676os/thumbs_1000118728_zuTNrAY6w4.jpg/100x100_1000118728_zuTNrAY6w4.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/jv8fg74vef676os/thumbs_1000118728_zuTNrAY6w4.jpg/100x100_1000118728_zuTNrAY6w4.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/jv8fg74vef676os/thumbs_1000118728_zuTNrAY6w4.jpg/100x100_1000118728_zuTNrAY6w4.jpg
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/jv8fg74vef676os/thumbs_1000118728_zuTNrAY6w4.jpg/100x100_1000118728_zuTNrAY6w4.jpg
diff --git a/pb_data/storage/_pb_users_auth_/jv8fg74vef676os/thumbs_1000118728_zuTNrAY6w4.jpg/100x100_1000118728_zuTNrAY6w4.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/jv8fg74vef676os/thumbs_1000118728_zuTNrAY6w4.jpg/100x100_1000118728_zuTNrAY6w4.jpg.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/jv8fg74vef676os/thumbs_1000118728_zuTNrAY6w4.jpg/100x100_1000118728_zuTNrAY6w4.jpg.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/jv8fg74vef676os/thumbs_1000118728_zuTNrAY6w4.jpg/100x100_1000118728_zuTNrAY6w4.jpg.attrs
diff --git a/pb_data/storage/_pb_users_auth_/k016rk1pozvfyxo/1000160267_B4zNTOP4Lc.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/k016rk1pozvfyxo/1000160267_B4zNTOP4Lc.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/k016rk1pozvfyxo/1000160267_B4zNTOP4Lc.jpg
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/k016rk1pozvfyxo/1000160267_B4zNTOP4Lc.jpg
diff --git a/pb_data/storage/_pb_users_auth_/k016rk1pozvfyxo/1000160267_B4zNTOP4Lc.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/k016rk1pozvfyxo/1000160267_B4zNTOP4Lc.jpg.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/k016rk1pozvfyxo/1000160267_B4zNTOP4Lc.jpg.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/k016rk1pozvfyxo/1000160267_B4zNTOP4Lc.jpg.attrs
diff --git a/pb_data/storage/_pb_users_auth_/k016rk1pozvfyxo/thumbs_1000160267_B4zNTOP4Lc.jpg/100x100_1000160267_B4zNTOP4Lc.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/k016rk1pozvfyxo/thumbs_1000160267_B4zNTOP4Lc.jpg/100x100_1000160267_B4zNTOP4Lc.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/k016rk1pozvfyxo/thumbs_1000160267_B4zNTOP4Lc.jpg/100x100_1000160267_B4zNTOP4Lc.jpg
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/k016rk1pozvfyxo/thumbs_1000160267_B4zNTOP4Lc.jpg/100x100_1000160267_B4zNTOP4Lc.jpg
diff --git a/pb_data/storage/_pb_users_auth_/k016rk1pozvfyxo/thumbs_1000160267_B4zNTOP4Lc.jpg/100x100_1000160267_B4zNTOP4Lc.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/k016rk1pozvfyxo/thumbs_1000160267_B4zNTOP4Lc.jpg/100x100_1000160267_B4zNTOP4Lc.jpg.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/k016rk1pozvfyxo/thumbs_1000160267_B4zNTOP4Lc.jpg/100x100_1000160267_B4zNTOP4Lc.jpg.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/k016rk1pozvfyxo/thumbs_1000160267_B4zNTOP4Lc.jpg/100x100_1000160267_B4zNTOP4Lc.jpg.attrs
diff --git a/pb_data/storage/_pb_users_auth_/kco1h5ioz0bqxbh/1000117042_HIZfTmWBOO.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/kco1h5ioz0bqxbh/1000117042_HIZfTmWBOO.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/kco1h5ioz0bqxbh/1000117042_HIZfTmWBOO.jpg
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/kco1h5ioz0bqxbh/1000117042_HIZfTmWBOO.jpg
diff --git a/pb_data/storage/_pb_users_auth_/kco1h5ioz0bqxbh/1000117042_HIZfTmWBOO.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/kco1h5ioz0bqxbh/1000117042_HIZfTmWBOO.jpg.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/kco1h5ioz0bqxbh/1000117042_HIZfTmWBOO.jpg.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/kco1h5ioz0bqxbh/1000117042_HIZfTmWBOO.jpg.attrs
diff --git a/pb_data/storage/_pb_users_auth_/kco1h5ioz0bqxbh/thumbs_1000117042_HIZfTmWBOO.jpg/100x100_1000117042_HIZfTmWBOO.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/kco1h5ioz0bqxbh/thumbs_1000117042_HIZfTmWBOO.jpg/100x100_1000117042_HIZfTmWBOO.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/kco1h5ioz0bqxbh/thumbs_1000117042_HIZfTmWBOO.jpg/100x100_1000117042_HIZfTmWBOO.jpg
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/kco1h5ioz0bqxbh/thumbs_1000117042_HIZfTmWBOO.jpg/100x100_1000117042_HIZfTmWBOO.jpg
diff --git a/pb_data/storage/_pb_users_auth_/kco1h5ioz0bqxbh/thumbs_1000117042_HIZfTmWBOO.jpg/100x100_1000117042_HIZfTmWBOO.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/kco1h5ioz0bqxbh/thumbs_1000117042_HIZfTmWBOO.jpg/100x100_1000117042_HIZfTmWBOO.jpg.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/kco1h5ioz0bqxbh/thumbs_1000117042_HIZfTmWBOO.jpg/100x100_1000117042_HIZfTmWBOO.jpg.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/kco1h5ioz0bqxbh/thumbs_1000117042_HIZfTmWBOO.jpg/100x100_1000117042_HIZfTmWBOO.jpg.attrs
diff --git a/pb_data/storage/_pb_users_auth_/p94qnvb9iogplrq/1000114543_GkYWrV2pHc.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/p94qnvb9iogplrq/1000114543_GkYWrV2pHc.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/p94qnvb9iogplrq/1000114543_GkYWrV2pHc.jpg
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/p94qnvb9iogplrq/1000114543_GkYWrV2pHc.jpg
diff --git a/pb_data/storage/_pb_users_auth_/p94qnvb9iogplrq/1000114543_GkYWrV2pHc.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/p94qnvb9iogplrq/1000114543_GkYWrV2pHc.jpg.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/p94qnvb9iogplrq/1000114543_GkYWrV2pHc.jpg.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/p94qnvb9iogplrq/1000114543_GkYWrV2pHc.jpg.attrs
diff --git a/pb_data/storage/_pb_users_auth_/p94qnvb9iogplrq/thumbs_1000114543_GkYWrV2pHc.jpg/100x100_1000114543_GkYWrV2pHc.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/p94qnvb9iogplrq/thumbs_1000114543_GkYWrV2pHc.jpg/100x100_1000114543_GkYWrV2pHc.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/p94qnvb9iogplrq/thumbs_1000114543_GkYWrV2pHc.jpg/100x100_1000114543_GkYWrV2pHc.jpg
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/p94qnvb9iogplrq/thumbs_1000114543_GkYWrV2pHc.jpg/100x100_1000114543_GkYWrV2pHc.jpg
diff --git a/pb_data/storage/_pb_users_auth_/p94qnvb9iogplrq/thumbs_1000114543_GkYWrV2pHc.jpg/100x100_1000114543_GkYWrV2pHc.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/p94qnvb9iogplrq/thumbs_1000114543_GkYWrV2pHc.jpg/100x100_1000114543_GkYWrV2pHc.jpg.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/p94qnvb9iogplrq/thumbs_1000114543_GkYWrV2pHc.jpg/100x100_1000114543_GkYWrV2pHc.jpg.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/p94qnvb9iogplrq/thumbs_1000114543_GkYWrV2pHc.jpg/100x100_1000114543_GkYWrV2pHc.jpg.attrs
diff --git a/pb_data/storage/_pb_users_auth_/t9px86rqyat1urd/images_23_QKJWyZqTKg.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/t9px86rqyat1urd/images_23_QKJWyZqTKg.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/t9px86rqyat1urd/images_23_QKJWyZqTKg.jpg
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/t9px86rqyat1urd/images_23_QKJWyZqTKg.jpg
diff --git a/pb_data/storage/_pb_users_auth_/t9px86rqyat1urd/images_23_QKJWyZqTKg.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/t9px86rqyat1urd/images_23_QKJWyZqTKg.jpg.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/t9px86rqyat1urd/images_23_QKJWyZqTKg.jpg.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/t9px86rqyat1urd/images_23_QKJWyZqTKg.jpg.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/t9px86rqyat1urd/sample_640_426_8tMwVAlaVp.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/t9px86rqyat1urd/sample_640_426_8tMwVAlaVp.jpg
new file mode 100644
index 0000000..ff2d4eb
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/t9px86rqyat1urd/sample_640_426_8tMwVAlaVp.jpg differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/t9px86rqyat1urd/sample_640_426_8tMwVAlaVp.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/t9px86rqyat1urd/sample_640_426_8tMwVAlaVp.jpg.attrs
new file mode 100644
index 0000000..62b57e8
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/t9px86rqyat1urd/sample_640_426_8tMwVAlaVp.jpg.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/jpeg","user.metadata":{"original-filename":"sample_640×426.jpg"},"md5":"0wTMD5WGDCeZsKTpG0Z/aA=="}
diff --git a/pb_data/storage/_pb_users_auth_/t9px86rqyat1urd/thumbs_images_23_QKJWyZqTKg.jpg/100x100_images_23_QKJWyZqTKg.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/t9px86rqyat1urd/thumbs_images_23_QKJWyZqTKg.jpg/100x100_images_23_QKJWyZqTKg.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/t9px86rqyat1urd/thumbs_images_23_QKJWyZqTKg.jpg/100x100_images_23_QKJWyZqTKg.jpg
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/t9px86rqyat1urd/thumbs_images_23_QKJWyZqTKg.jpg/100x100_images_23_QKJWyZqTKg.jpg
diff --git a/pb_data/storage/_pb_users_auth_/t9px86rqyat1urd/thumbs_images_23_QKJWyZqTKg.jpg/100x100_images_23_QKJWyZqTKg.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/t9px86rqyat1urd/thumbs_images_23_QKJWyZqTKg.jpg/100x100_images_23_QKJWyZqTKg.jpg.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/_pb_users_auth_/t9px86rqyat1urd/thumbs_images_23_QKJWyZqTKg.jpg/100x100_images_23_QKJWyZqTKg.jpg.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/t9px86rqyat1urd/thumbs_images_23_QKJWyZqTKg.jpg/100x100_images_23_QKJWyZqTKg.jpg.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/ydfwjpdk9afx49m/1000122419_hQ7CZdAFzg.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/ydfwjpdk9afx49m/1000122419_hQ7CZdAFzg.jpg
new file mode 100644
index 0000000..8d6dd3e
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/ydfwjpdk9afx49m/1000122419_hQ7CZdAFzg.jpg differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/ydfwjpdk9afx49m/1000122419_hQ7CZdAFzg.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/ydfwjpdk9afx49m/1000122419_hQ7CZdAFzg.jpg.attrs
new file mode 100644
index 0000000..5dc55d3
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/ydfwjpdk9afx49m/1000122419_hQ7CZdAFzg.jpg.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/jpeg","user.metadata":{"original-filename":"1000122419.jpg"},"md5":"qXmhDbfI1nZmlpmZJfRrBw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/ydfwjpdk9afx49m/thumbs_1000122419_hQ7CZdAFzg.jpg/100x100_1000122419_hQ7CZdAFzg.jpg b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/ydfwjpdk9afx49m/thumbs_1000122419_hQ7CZdAFzg.jpg/100x100_1000122419_hQ7CZdAFzg.jpg
new file mode 100644
index 0000000..fc73af5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/ydfwjpdk9afx49m/thumbs_1000122419_hQ7CZdAFzg.jpg/100x100_1000122419_hQ7CZdAFzg.jpg differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/ydfwjpdk9afx49m/thumbs_1000122419_hQ7CZdAFzg.jpg/100x100_1000122419_hQ7CZdAFzg.jpg.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/ydfwjpdk9afx49m/thumbs_1000122419_hQ7CZdAFzg.jpg/100x100_1000122419_hQ7CZdAFzg.jpg.attrs
new file mode 100644
index 0000000..bb00740
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/_pb_users_auth_/ydfwjpdk9afx49m/thumbs_1000122419_hQ7CZdAFzg.jpg/100x100_1000122419_hQ7CZdAFzg.jpg.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/jpeg","user.metadata":null,"md5":"aKkMzCDVLRptiYrzRiV6Kw=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/08uk8a7n2omayt0/group_175_2_ksxY4TqUVw.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/08uk8a7n2omayt0/group_175_2_ksxY4TqUVw.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/08uk8a7n2omayt0/group_175_2_ksxY4TqUVw.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/08uk8a7n2omayt0/group_175_2_ksxY4TqUVw.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/08uk8a7n2omayt0/group_175_2_ksxY4TqUVw.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/08uk8a7n2omayt0/group_175_2_ksxY4TqUVw.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/08uk8a7n2omayt0/group_175_2_ksxY4TqUVw.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/08uk8a7n2omayt0/group_175_2_ksxY4TqUVw.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0a36ikf8xufiemq/female_NXVQ59mrgW.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0a36ikf8xufiemq/female_NXVQ59mrgW.png
new file mode 100644
index 0000000..e328a93
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0a36ikf8xufiemq/female_NXVQ59mrgW.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0a36ikf8xufiemq/female_NXVQ59mrgW.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0a36ikf8xufiemq/female_NXVQ59mrgW.png.attrs
new file mode 100644
index 0000000..3c217ec
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0a36ikf8xufiemq/female_NXVQ59mrgW.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"female.png"},"md5":"LHr3qNvXccxDzGNR1QwAiA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0a36ikf8xufiemq/thumbs_female_NXVQ59mrgW.png/100x100_female_NXVQ59mrgW.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0a36ikf8xufiemq/thumbs_female_NXVQ59mrgW.png/100x100_female_NXVQ59mrgW.png
new file mode 100644
index 0000000..4e9492f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0a36ikf8xufiemq/thumbs_female_NXVQ59mrgW.png/100x100_female_NXVQ59mrgW.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0a36ikf8xufiemq/thumbs_female_NXVQ59mrgW.png/100x100_female_NXVQ59mrgW.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0a36ikf8xufiemq/thumbs_female_NXVQ59mrgW.png/100x100_female_NXVQ59mrgW.png.attrs
new file mode 100644
index 0000000..72ab7b2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0a36ikf8xufiemq/thumbs_female_NXVQ59mrgW.png/100x100_female_NXVQ59mrgW.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"6qNv8XkjaWR5lPp91glyrw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/kpi_icon_gdp_hpd1POk2a4.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/kpi_icon_gdp_hpd1POk2a4.png
new file mode 100644
index 0000000..00a7246
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/kpi_icon_gdp_hpd1POk2a4.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/kpi_icon_gdp_hpd1POk2a4.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/kpi_icon_gdp_hpd1POk2a4.png.attrs
new file mode 100644
index 0000000..aeed7a6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/kpi_icon_gdp_hpd1POk2a4.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDP.png"},"md5":"GbjBCTBkQMjDA/ePurXQ4w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/thumbs_kpi_icon_gdp_hpd1POk2a4.png/100x100_kpi_icon_gdp_hpd1POk2a4.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/thumbs_kpi_icon_gdp_hpd1POk2a4.png/100x100_kpi_icon_gdp_hpd1POk2a4.png
new file mode 100644
index 0000000..1f4a9d5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/thumbs_kpi_icon_gdp_hpd1POk2a4.png/100x100_kpi_icon_gdp_hpd1POk2a4.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/thumbs_kpi_icon_gdp_hpd1POk2a4.png/100x100_kpi_icon_gdp_hpd1POk2a4.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/thumbs_kpi_icon_gdp_hpd1POk2a4.png/100x100_kpi_icon_gdp_hpd1POk2a4.png.attrs
new file mode 100644
index 0000000..1c118ca
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0h5hq3f48xrt1e8/thumbs_kpi_icon_gdp_hpd1POk2a4.png/100x100_kpi_icon_gdp_hpd1POk2a4.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"oR1IfXTRW05tuALKgeFtkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0p04zuoobjy2ks1/kpi_icon_gdp_5STiqgZegA.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0p04zuoobjy2ks1/kpi_icon_gdp_5STiqgZegA.png
new file mode 100644
index 0000000..00a7246
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0p04zuoobjy2ks1/kpi_icon_gdp_5STiqgZegA.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0p04zuoobjy2ks1/kpi_icon_gdp_5STiqgZegA.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0p04zuoobjy2ks1/kpi_icon_gdp_5STiqgZegA.png.attrs
new file mode 100644
index 0000000..aeed7a6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0p04zuoobjy2ks1/kpi_icon_gdp_5STiqgZegA.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDP.png"},"md5":"GbjBCTBkQMjDA/ePurXQ4w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0p04zuoobjy2ks1/thumbs_kpi_icon_gdp_5STiqgZegA.png/100x100_kpi_icon_gdp_5STiqgZegA.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0p04zuoobjy2ks1/thumbs_kpi_icon_gdp_5STiqgZegA.png/100x100_kpi_icon_gdp_5STiqgZegA.png
new file mode 100644
index 0000000..1f4a9d5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0p04zuoobjy2ks1/thumbs_kpi_icon_gdp_5STiqgZegA.png/100x100_kpi_icon_gdp_5STiqgZegA.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0p04zuoobjy2ks1/thumbs_kpi_icon_gdp_5STiqgZegA.png/100x100_kpi_icon_gdp_5STiqgZegA.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0p04zuoobjy2ks1/thumbs_kpi_icon_gdp_5STiqgZegA.png/100x100_kpi_icon_gdp_5STiqgZegA.png.attrs
new file mode 100644
index 0000000..1c118ca
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0p04zuoobjy2ks1/thumbs_kpi_icon_gdp_5STiqgZegA.png/100x100_kpi_icon_gdp_5STiqgZegA.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"oR1IfXTRW05tuALKgeFtkw=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/thumbs_total_area_PCcNWKHWAv.png/100x100_total_area_PCcNWKHWAv.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0t02dtbzw9nh0un/thumbs_total_area_PCcNWKHWAv.png/100x100_total_area_PCcNWKHWAv.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/thumbs_total_area_PCcNWKHWAv.png/100x100_total_area_PCcNWKHWAv.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0t02dtbzw9nh0un/thumbs_total_area_PCcNWKHWAv.png/100x100_total_area_PCcNWKHWAv.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/thumbs_total_area_PCcNWKHWAv.png/100x100_total_area_PCcNWKHWAv.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0t02dtbzw9nh0un/thumbs_total_area_PCcNWKHWAv.png/100x100_total_area_PCcNWKHWAv.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/thumbs_total_area_PCcNWKHWAv.png/100x100_total_area_PCcNWKHWAv.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0t02dtbzw9nh0un/thumbs_total_area_PCcNWKHWAv.png/100x100_total_area_PCcNWKHWAv.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/total_area_PCcNWKHWAv.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0t02dtbzw9nh0un/total_area_PCcNWKHWAv.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/total_area_PCcNWKHWAv.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0t02dtbzw9nh0un/total_area_PCcNWKHWAv.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/total_area_PCcNWKHWAv.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0t02dtbzw9nh0un/total_area_PCcNWKHWAv.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/0t02dtbzw9nh0un/total_area_PCcNWKHWAv.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0t02dtbzw9nh0un/total_area_PCcNWKHWAv.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/crops_EfaCyZZQor.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0zh7rznegriyts9/crops_EfaCyZZQor.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/crops_EfaCyZZQor.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0zh7rznegriyts9/crops_EfaCyZZQor.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/crops_EfaCyZZQor.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0zh7rznegriyts9/crops_EfaCyZZQor.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/crops_EfaCyZZQor.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0zh7rznegriyts9/crops_EfaCyZZQor.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/thumbs_crops_EfaCyZZQor.png/100x100_crops_EfaCyZZQor.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0zh7rznegriyts9/thumbs_crops_EfaCyZZQor.png/100x100_crops_EfaCyZZQor.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/thumbs_crops_EfaCyZZQor.png/100x100_crops_EfaCyZZQor.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0zh7rznegriyts9/thumbs_crops_EfaCyZZQor.png/100x100_crops_EfaCyZZQor.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/thumbs_crops_EfaCyZZQor.png/100x100_crops_EfaCyZZQor.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0zh7rznegriyts9/thumbs_crops_EfaCyZZQor.png/100x100_crops_EfaCyZZQor.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/0zh7rznegriyts9/thumbs_crops_EfaCyZZQor.png/100x100_crops_EfaCyZZQor.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/0zh7rznegriyts9/thumbs_crops_EfaCyZZQor.png/100x100_crops_EfaCyZZQor.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/149pet96vdg3bda/kpi_icon_occupancy_rate_wbL7QaVVLM.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/149pet96vdg3bda/kpi_icon_occupancy_rate_wbL7QaVVLM.png
new file mode 100644
index 0000000..4b5ae6b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/149pet96vdg3bda/kpi_icon_occupancy_rate_wbL7QaVVLM.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/149pet96vdg3bda/kpi_icon_occupancy_rate_wbL7QaVVLM.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/149pet96vdg3bda/kpi_icon_occupancy_rate_wbL7QaVVLM.png.attrs
new file mode 100644
index 0000000..b16288e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/149pet96vdg3bda/kpi_icon_occupancy_rate_wbL7QaVVLM.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OccupancyRate.png"},"md5":"Cs+jJNffYFWAhBqJwmKX0A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/149pet96vdg3bda/thumbs_kpi_icon_occupancy_rate_wbL7QaVVLM.png/100x100_kpi_icon_occupancy_rate_wbL7QaVVLM.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/149pet96vdg3bda/thumbs_kpi_icon_occupancy_rate_wbL7QaVVLM.png/100x100_kpi_icon_occupancy_rate_wbL7QaVVLM.png
new file mode 100644
index 0000000..1f6d56d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/149pet96vdg3bda/thumbs_kpi_icon_occupancy_rate_wbL7QaVVLM.png/100x100_kpi_icon_occupancy_rate_wbL7QaVVLM.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/149pet96vdg3bda/thumbs_kpi_icon_occupancy_rate_wbL7QaVVLM.png/100x100_kpi_icon_occupancy_rate_wbL7QaVVLM.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/149pet96vdg3bda/thumbs_kpi_icon_occupancy_rate_wbL7QaVVLM.png/100x100_kpi_icon_occupancy_rate_wbL7QaVVLM.png.attrs
new file mode 100644
index 0000000..5da8ec2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/149pet96vdg3bda/thumbs_kpi_icon_occupancy_rate_wbL7QaVVLM.png/100x100_kpi_icon_occupancy_rate_wbL7QaVVLM.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"U+jFTo4vOOwg1q6sg8TA+A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1gk6ftd7of347rg/kpi_icon_import_39bpuPgUO9.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1gk6ftd7of347rg/kpi_icon_import_39bpuPgUO9.png
new file mode 100644
index 0000000..72e1c18
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1gk6ftd7of347rg/kpi_icon_import_39bpuPgUO9.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1gk6ftd7of347rg/kpi_icon_import_39bpuPgUO9.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1gk6ftd7of347rg/kpi_icon_import_39bpuPgUO9.png.attrs
new file mode 100644
index 0000000..e7874d0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1gk6ftd7of347rg/kpi_icon_import_39bpuPgUO9.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Import.png"},"md5":"2BDdMENO2Qr0frmP5x6KWQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1gk6ftd7of347rg/thumbs_kpi_icon_import_39bpuPgUO9.png/100x100_kpi_icon_import_39bpuPgUO9.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1gk6ftd7of347rg/thumbs_kpi_icon_import_39bpuPgUO9.png/100x100_kpi_icon_import_39bpuPgUO9.png
new file mode 100644
index 0000000..be588a5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1gk6ftd7of347rg/thumbs_kpi_icon_import_39bpuPgUO9.png/100x100_kpi_icon_import_39bpuPgUO9.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1gk6ftd7of347rg/thumbs_kpi_icon_import_39bpuPgUO9.png/100x100_kpi_icon_import_39bpuPgUO9.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1gk6ftd7of347rg/thumbs_kpi_icon_import_39bpuPgUO9.png/100x100_kpi_icon_import_39bpuPgUO9.png.attrs
new file mode 100644
index 0000000..974e6f4
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1gk6ftd7of347rg/thumbs_kpi_icon_import_39bpuPgUO9.png/100x100_kpi_icon_import_39bpuPgUO9.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zgwJqK1psQOQsoWeaubwUg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1jrgwf97r4havh4/kpi_icon_arrival_x5YD5PP81A.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1jrgwf97r4havh4/kpi_icon_arrival_x5YD5PP81A.png
new file mode 100644
index 0000000..78af14d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1jrgwf97r4havh4/kpi_icon_arrival_x5YD5PP81A.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1jrgwf97r4havh4/kpi_icon_arrival_x5YD5PP81A.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1jrgwf97r4havh4/kpi_icon_arrival_x5YD5PP81A.png.attrs
new file mode 100644
index 0000000..bf42bae
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1jrgwf97r4havh4/kpi_icon_arrival_x5YD5PP81A.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Arrival.png"},"md5":"McfbcfxPW54tep7w0S7YIA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1jrgwf97r4havh4/thumbs_kpi_icon_arrival_x5YD5PP81A.png/100x100_kpi_icon_arrival_x5YD5PP81A.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1jrgwf97r4havh4/thumbs_kpi_icon_arrival_x5YD5PP81A.png/100x100_kpi_icon_arrival_x5YD5PP81A.png
new file mode 100644
index 0000000..f694642
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1jrgwf97r4havh4/thumbs_kpi_icon_arrival_x5YD5PP81A.png/100x100_kpi_icon_arrival_x5YD5PP81A.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1jrgwf97r4havh4/thumbs_kpi_icon_arrival_x5YD5PP81A.png/100x100_kpi_icon_arrival_x5YD5PP81A.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1jrgwf97r4havh4/thumbs_kpi_icon_arrival_x5YD5PP81A.png/100x100_kpi_icon_arrival_x5YD5PP81A.png.attrs
new file mode 100644
index 0000000..08eb2c5
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1jrgwf97r4havh4/thumbs_kpi_icon_arrival_x5YD5PP81A.png/100x100_kpi_icon_arrival_x5YD5PP81A.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zwEbsR6JRku8qJ19X0D3jw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1v4uligg4a8ytyd/kpi_icon_health_centers_2_mcBWvFDK3Z.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1v4uligg4a8ytyd/kpi_icon_health_centers_2_mcBWvFDK3Z.png
new file mode 100644
index 0000000..3e1a049
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1v4uligg4a8ytyd/kpi_icon_health_centers_2_mcBWvFDK3Z.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1v4uligg4a8ytyd/kpi_icon_health_centers_2_mcBWvFDK3Z.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1v4uligg4a8ytyd/kpi_icon_health_centers_2_mcBWvFDK3Z.png.attrs
new file mode 100644
index 0000000..959c69c
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1v4uligg4a8ytyd/kpi_icon_health_centers_2_mcBWvFDK3Z.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-HealthCenters (2).png"},"md5":"BSOP0npbkrCLnRX9kYzicg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1v4uligg4a8ytyd/thumbs_kpi_icon_health_centers_2_mcBWvFDK3Z.png/100x100_kpi_icon_health_centers_2_mcBWvFDK3Z.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1v4uligg4a8ytyd/thumbs_kpi_icon_health_centers_2_mcBWvFDK3Z.png/100x100_kpi_icon_health_centers_2_mcBWvFDK3Z.png
new file mode 100644
index 0000000..06efc98
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1v4uligg4a8ytyd/thumbs_kpi_icon_health_centers_2_mcBWvFDK3Z.png/100x100_kpi_icon_health_centers_2_mcBWvFDK3Z.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1v4uligg4a8ytyd/thumbs_kpi_icon_health_centers_2_mcBWvFDK3Z.png/100x100_kpi_icon_health_centers_2_mcBWvFDK3Z.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1v4uligg4a8ytyd/thumbs_kpi_icon_health_centers_2_mcBWvFDK3Z.png/100x100_kpi_icon_health_centers_2_mcBWvFDK3Z.png.attrs
new file mode 100644
index 0000000..9107cef
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1v4uligg4a8ytyd/thumbs_kpi_icon_health_centers_2_mcBWvFDK3Z.png/100x100_kpi_icon_health_centers_2_mcBWvFDK3Z.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"y9NTfS1CkEsgZhHgNHEUMQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1y6562ehp34hmj0/female_9N5tMJVQuN.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1y6562ehp34hmj0/female_9N5tMJVQuN.png
new file mode 100644
index 0000000..e328a93
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1y6562ehp34hmj0/female_9N5tMJVQuN.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1y6562ehp34hmj0/female_9N5tMJVQuN.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1y6562ehp34hmj0/female_9N5tMJVQuN.png.attrs
new file mode 100644
index 0000000..3c217ec
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1y6562ehp34hmj0/female_9N5tMJVQuN.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"female.png"},"md5":"LHr3qNvXccxDzGNR1QwAiA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1y6562ehp34hmj0/thumbs_female_9N5tMJVQuN.png/100x100_female_9N5tMJVQuN.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1y6562ehp34hmj0/thumbs_female_9N5tMJVQuN.png/100x100_female_9N5tMJVQuN.png
new file mode 100644
index 0000000..4e9492f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1y6562ehp34hmj0/thumbs_female_9N5tMJVQuN.png/100x100_female_9N5tMJVQuN.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1y6562ehp34hmj0/thumbs_female_9N5tMJVQuN.png/100x100_female_9N5tMJVQuN.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1y6562ehp34hmj0/thumbs_female_9N5tMJVQuN.png/100x100_female_9N5tMJVQuN.png.attrs
new file mode 100644
index 0000000..72ab7b2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/1y6562ehp34hmj0/thumbs_female_9N5tMJVQuN.png/100x100_female_9N5tMJVQuN.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"6qNv8XkjaWR5lPp91glyrw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/24jw7za92eti19m/kpi_icon_re_export_rP4og8WMCl.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/24jw7za92eti19m/kpi_icon_re_export_rP4og8WMCl.png
new file mode 100644
index 0000000..2f2daf3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/24jw7za92eti19m/kpi_icon_re_export_rP4og8WMCl.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/24jw7za92eti19m/kpi_icon_re_export_rP4og8WMCl.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/24jw7za92eti19m/kpi_icon_re_export_rP4og8WMCl.png.attrs
new file mode 100644
index 0000000..efc1a5b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/24jw7za92eti19m/kpi_icon_re_export_rP4og8WMCl.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-ReExport.png"},"md5":"wuPAc6IENmbI4H4Y5iykQA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/24jw7za92eti19m/thumbs_kpi_icon_re_export_rP4og8WMCl.png/100x100_kpi_icon_re_export_rP4og8WMCl.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/24jw7za92eti19m/thumbs_kpi_icon_re_export_rP4og8WMCl.png/100x100_kpi_icon_re_export_rP4og8WMCl.png
new file mode 100644
index 0000000..6bf965d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/24jw7za92eti19m/thumbs_kpi_icon_re_export_rP4og8WMCl.png/100x100_kpi_icon_re_export_rP4og8WMCl.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/24jw7za92eti19m/thumbs_kpi_icon_re_export_rP4og8WMCl.png/100x100_kpi_icon_re_export_rP4og8WMCl.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/24jw7za92eti19m/thumbs_kpi_icon_re_export_rP4og8WMCl.png/100x100_kpi_icon_re_export_rP4og8WMCl.png.attrs
new file mode 100644
index 0000000..670db8f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/24jw7za92eti19m/thumbs_kpi_icon_re_export_rP4og8WMCl.png/100x100_kpi_icon_re_export_rP4og8WMCl.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"55tIdEz4EfKupJ7SzRKiNQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2dlvrlk2wawtivj/kpi_icon_gdp_EpSSWLU18K.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2dlvrlk2wawtivj/kpi_icon_gdp_EpSSWLU18K.png
new file mode 100644
index 0000000..00a7246
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2dlvrlk2wawtivj/kpi_icon_gdp_EpSSWLU18K.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2dlvrlk2wawtivj/kpi_icon_gdp_EpSSWLU18K.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2dlvrlk2wawtivj/kpi_icon_gdp_EpSSWLU18K.png.attrs
new file mode 100644
index 0000000..aeed7a6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2dlvrlk2wawtivj/kpi_icon_gdp_EpSSWLU18K.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDP.png"},"md5":"GbjBCTBkQMjDA/ePurXQ4w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2dlvrlk2wawtivj/thumbs_kpi_icon_gdp_EpSSWLU18K.png/100x100_kpi_icon_gdp_EpSSWLU18K.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2dlvrlk2wawtivj/thumbs_kpi_icon_gdp_EpSSWLU18K.png/100x100_kpi_icon_gdp_EpSSWLU18K.png
new file mode 100644
index 0000000..1f4a9d5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2dlvrlk2wawtivj/thumbs_kpi_icon_gdp_EpSSWLU18K.png/100x100_kpi_icon_gdp_EpSSWLU18K.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2dlvrlk2wawtivj/thumbs_kpi_icon_gdp_EpSSWLU18K.png/100x100_kpi_icon_gdp_EpSSWLU18K.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2dlvrlk2wawtivj/thumbs_kpi_icon_gdp_EpSSWLU18K.png/100x100_kpi_icon_gdp_EpSSWLU18K.png.attrs
new file mode 100644
index 0000000..1c118ca
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2dlvrlk2wawtivj/thumbs_kpi_icon_gdp_EpSSWLU18K.png/100x100_kpi_icon_gdp_EpSSWLU18K.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"oR1IfXTRW05tuALKgeFtkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/kpi_icon_occupancy_rate_LTU43Vz9Cf.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/kpi_icon_occupancy_rate_LTU43Vz9Cf.png
new file mode 100644
index 0000000..4b5ae6b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/kpi_icon_occupancy_rate_LTU43Vz9Cf.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/kpi_icon_occupancy_rate_LTU43Vz9Cf.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/kpi_icon_occupancy_rate_LTU43Vz9Cf.png.attrs
new file mode 100644
index 0000000..b16288e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/kpi_icon_occupancy_rate_LTU43Vz9Cf.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OccupancyRate.png"},"md5":"Cs+jJNffYFWAhBqJwmKX0A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/thumbs_kpi_icon_occupancy_rate_LTU43Vz9Cf.png/100x100_kpi_icon_occupancy_rate_LTU43Vz9Cf.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/thumbs_kpi_icon_occupancy_rate_LTU43Vz9Cf.png/100x100_kpi_icon_occupancy_rate_LTU43Vz9Cf.png
new file mode 100644
index 0000000..1f6d56d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/thumbs_kpi_icon_occupancy_rate_LTU43Vz9Cf.png/100x100_kpi_icon_occupancy_rate_LTU43Vz9Cf.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/thumbs_kpi_icon_occupancy_rate_LTU43Vz9Cf.png/100x100_kpi_icon_occupancy_rate_LTU43Vz9Cf.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/thumbs_kpi_icon_occupancy_rate_LTU43Vz9Cf.png/100x100_kpi_icon_occupancy_rate_LTU43Vz9Cf.png.attrs
new file mode 100644
index 0000000..5da8ec2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2gon8ezcp3xwa0h/thumbs_kpi_icon_occupancy_rate_LTU43Vz9Cf.png/100x100_kpi_icon_occupancy_rate_LTU43Vz9Cf.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"U+jFTo4vOOwg1q6sg8TA+A=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/environment_Lle5wUMGLN.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2nmyrwtwygjajaj/environment_Lle5wUMGLN.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/environment_Lle5wUMGLN.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2nmyrwtwygjajaj/environment_Lle5wUMGLN.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/environment_Lle5wUMGLN.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2nmyrwtwygjajaj/environment_Lle5wUMGLN.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/environment_Lle5wUMGLN.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2nmyrwtwygjajaj/environment_Lle5wUMGLN.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/thumbs_environment_Lle5wUMGLN.png/100x100_environment_Lle5wUMGLN.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2nmyrwtwygjajaj/thumbs_environment_Lle5wUMGLN.png/100x100_environment_Lle5wUMGLN.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/thumbs_environment_Lle5wUMGLN.png/100x100_environment_Lle5wUMGLN.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2nmyrwtwygjajaj/thumbs_environment_Lle5wUMGLN.png/100x100_environment_Lle5wUMGLN.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/thumbs_environment_Lle5wUMGLN.png/100x100_environment_Lle5wUMGLN.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2nmyrwtwygjajaj/thumbs_environment_Lle5wUMGLN.png/100x100_environment_Lle5wUMGLN.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/2nmyrwtwygjajaj/thumbs_environment_Lle5wUMGLN.png/100x100_environment_Lle5wUMGLN.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2nmyrwtwygjajaj/thumbs_environment_Lle5wUMGLN.png/100x100_environment_Lle5wUMGLN.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2tdv7moq74dz00w/kpi_icon_gdp_lXhzvI5CUk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2tdv7moq74dz00w/kpi_icon_gdp_lXhzvI5CUk.png
new file mode 100644
index 0000000..00a7246
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2tdv7moq74dz00w/kpi_icon_gdp_lXhzvI5CUk.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2tdv7moq74dz00w/kpi_icon_gdp_lXhzvI5CUk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2tdv7moq74dz00w/kpi_icon_gdp_lXhzvI5CUk.png.attrs
new file mode 100644
index 0000000..aeed7a6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2tdv7moq74dz00w/kpi_icon_gdp_lXhzvI5CUk.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDP.png"},"md5":"GbjBCTBkQMjDA/ePurXQ4w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2tdv7moq74dz00w/thumbs_kpi_icon_gdp_lXhzvI5CUk.png/100x100_kpi_icon_gdp_lXhzvI5CUk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2tdv7moq74dz00w/thumbs_kpi_icon_gdp_lXhzvI5CUk.png/100x100_kpi_icon_gdp_lXhzvI5CUk.png
new file mode 100644
index 0000000..1f4a9d5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2tdv7moq74dz00w/thumbs_kpi_icon_gdp_lXhzvI5CUk.png/100x100_kpi_icon_gdp_lXhzvI5CUk.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2tdv7moq74dz00w/thumbs_kpi_icon_gdp_lXhzvI5CUk.png/100x100_kpi_icon_gdp_lXhzvI5CUk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2tdv7moq74dz00w/thumbs_kpi_icon_gdp_lXhzvI5CUk.png/100x100_kpi_icon_gdp_lXhzvI5CUk.png.attrs
new file mode 100644
index 0000000..1c118ca
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/2tdv7moq74dz00w/thumbs_kpi_icon_gdp_lXhzvI5CUk.png/100x100_kpi_icon_gdp_lXhzvI5CUk.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"oR1IfXTRW05tuALKgeFtkw=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/bull_EAwuMYc05x.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/31yoxchyhqmxobg/bull_EAwuMYc05x.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/bull_EAwuMYc05x.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/31yoxchyhqmxobg/bull_EAwuMYc05x.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/bull_EAwuMYc05x.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/31yoxchyhqmxobg/bull_EAwuMYc05x.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/bull_EAwuMYc05x.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/31yoxchyhqmxobg/bull_EAwuMYc05x.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/thumbs_bull_EAwuMYc05x.png/100x100_bull_EAwuMYc05x.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/31yoxchyhqmxobg/thumbs_bull_EAwuMYc05x.png/100x100_bull_EAwuMYc05x.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/thumbs_bull_EAwuMYc05x.png/100x100_bull_EAwuMYc05x.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/31yoxchyhqmxobg/thumbs_bull_EAwuMYc05x.png/100x100_bull_EAwuMYc05x.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/thumbs_bull_EAwuMYc05x.png/100x100_bull_EAwuMYc05x.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/31yoxchyhqmxobg/thumbs_bull_EAwuMYc05x.png/100x100_bull_EAwuMYc05x.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/31yoxchyhqmxobg/thumbs_bull_EAwuMYc05x.png/100x100_bull_EAwuMYc05x.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/31yoxchyhqmxobg/thumbs_bull_EAwuMYc05x.png/100x100_bull_EAwuMYc05x.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/drops_Bmz9mquDWb.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/37260j3iuxvsw35/drops_Bmz9mquDWb.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/drops_Bmz9mquDWb.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/37260j3iuxvsw35/drops_Bmz9mquDWb.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/drops_Bmz9mquDWb.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/37260j3iuxvsw35/drops_Bmz9mquDWb.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/drops_Bmz9mquDWb.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/37260j3iuxvsw35/drops_Bmz9mquDWb.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/thumbs_drops_Bmz9mquDWb.png/100x100_drops_Bmz9mquDWb.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/37260j3iuxvsw35/thumbs_drops_Bmz9mquDWb.png/100x100_drops_Bmz9mquDWb.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/thumbs_drops_Bmz9mquDWb.png/100x100_drops_Bmz9mquDWb.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/37260j3iuxvsw35/thumbs_drops_Bmz9mquDWb.png/100x100_drops_Bmz9mquDWb.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/thumbs_drops_Bmz9mquDWb.png/100x100_drops_Bmz9mquDWb.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/37260j3iuxvsw35/thumbs_drops_Bmz9mquDWb.png/100x100_drops_Bmz9mquDWb.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/37260j3iuxvsw35/thumbs_drops_Bmz9mquDWb.png/100x100_drops_Bmz9mquDWb.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/37260j3iuxvsw35/thumbs_drops_Bmz9mquDWb.png/100x100_drops_Bmz9mquDWb.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/38yc7sjb22uyqe9/kpi_icon_gdpgrowth_WI9fJuySjU.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/38yc7sjb22uyqe9/kpi_icon_gdpgrowth_WI9fJuySjU.png
new file mode 100644
index 0000000..f5f673a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/38yc7sjb22uyqe9/kpi_icon_gdpgrowth_WI9fJuySjU.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/38yc7sjb22uyqe9/kpi_icon_gdpgrowth_WI9fJuySjU.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/38yc7sjb22uyqe9/kpi_icon_gdpgrowth_WI9fJuySjU.png.attrs
new file mode 100644
index 0000000..30324ed
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/38yc7sjb22uyqe9/kpi_icon_gdpgrowth_WI9fJuySjU.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDPGrowth.png"},"md5":"HqqwH2pjnCJ5qZ2nSzmtUw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/38yc7sjb22uyqe9/thumbs_kpi_icon_gdpgrowth_WI9fJuySjU.png/100x100_kpi_icon_gdpgrowth_WI9fJuySjU.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/38yc7sjb22uyqe9/thumbs_kpi_icon_gdpgrowth_WI9fJuySjU.png/100x100_kpi_icon_gdpgrowth_WI9fJuySjU.png
new file mode 100644
index 0000000..40ddf4f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/38yc7sjb22uyqe9/thumbs_kpi_icon_gdpgrowth_WI9fJuySjU.png/100x100_kpi_icon_gdpgrowth_WI9fJuySjU.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/38yc7sjb22uyqe9/thumbs_kpi_icon_gdpgrowth_WI9fJuySjU.png/100x100_kpi_icon_gdpgrowth_WI9fJuySjU.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/38yc7sjb22uyqe9/thumbs_kpi_icon_gdpgrowth_WI9fJuySjU.png/100x100_kpi_icon_gdpgrowth_WI9fJuySjU.png.attrs
new file mode 100644
index 0000000..edf40cf
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/38yc7sjb22uyqe9/thumbs_kpi_icon_gdpgrowth_WI9fJuySjU.png/100x100_kpi_icon_gdpgrowth_WI9fJuySjU.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zrI7ItL8NvCC4HA5egimuA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/kpi_icon_gdpgrowth_WlcFeSLEFA.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/kpi_icon_gdpgrowth_WlcFeSLEFA.png
new file mode 100644
index 0000000..c75ed94
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/kpi_icon_gdpgrowth_WlcFeSLEFA.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/kpi_icon_gdpgrowth_WlcFeSLEFA.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/kpi_icon_gdpgrowth_WlcFeSLEFA.png.attrs
new file mode 100644
index 0000000..443371c
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/kpi_icon_gdpgrowth_WlcFeSLEFA.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDPGrowth.png"},"md5":"BuY+kJCvNDC0gNpwoK0ylw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/thumbs_kpi_icon_gdpgrowth_WlcFeSLEFA.png/100x100_kpi_icon_gdpgrowth_WlcFeSLEFA.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/thumbs_kpi_icon_gdpgrowth_WlcFeSLEFA.png/100x100_kpi_icon_gdpgrowth_WlcFeSLEFA.png
new file mode 100644
index 0000000..9ea8435
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/thumbs_kpi_icon_gdpgrowth_WlcFeSLEFA.png/100x100_kpi_icon_gdpgrowth_WlcFeSLEFA.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/thumbs_kpi_icon_gdpgrowth_WlcFeSLEFA.png/100x100_kpi_icon_gdpgrowth_WlcFeSLEFA.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/thumbs_kpi_icon_gdpgrowth_WlcFeSLEFA.png/100x100_kpi_icon_gdpgrowth_WlcFeSLEFA.png.attrs
new file mode 100644
index 0000000..0242c8e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3aazfkpl0kpf4qb/thumbs_kpi_icon_gdpgrowth_WlcFeSLEFA.png/100x100_kpi_icon_gdpgrowth_WlcFeSLEFA.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"9lWaRuZKLGuibexTLg+KTw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/kpi_icon_population_KIbfx2W9XG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/kpi_icon_population_KIbfx2W9XG.png
new file mode 100644
index 0000000..987103d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/kpi_icon_population_KIbfx2W9XG.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/kpi_icon_population_KIbfx2W9XG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/kpi_icon_population_KIbfx2W9XG.png.attrs
new file mode 100644
index 0000000..773f328
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/kpi_icon_population_KIbfx2W9XG.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Population.png"},"md5":"dTlgAbi4TM0Z8qrqMYa8Uw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/thumbs_kpi_icon_population_KIbfx2W9XG.png/100x100_kpi_icon_population_KIbfx2W9XG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/thumbs_kpi_icon_population_KIbfx2W9XG.png/100x100_kpi_icon_population_KIbfx2W9XG.png
new file mode 100644
index 0000000..b1e5956
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/thumbs_kpi_icon_population_KIbfx2W9XG.png/100x100_kpi_icon_population_KIbfx2W9XG.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/thumbs_kpi_icon_population_KIbfx2W9XG.png/100x100_kpi_icon_population_KIbfx2W9XG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/thumbs_kpi_icon_population_KIbfx2W9XG.png/100x100_kpi_icon_population_KIbfx2W9XG.png.attrs
new file mode 100644
index 0000000..03deb63
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3qbk5q1o91a7mxr/thumbs_kpi_icon_population_KIbfx2W9XG.png/100x100_kpi_icon_population_KIbfx2W9XG.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"OY9/0GOkbXWJXjYfnIuhSw=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/sheep_gbRZEszPPh.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3x1uropxzobv52v/sheep_gbRZEszPPh.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/sheep_gbRZEszPPh.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3x1uropxzobv52v/sheep_gbRZEszPPh.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/sheep_gbRZEszPPh.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3x1uropxzobv52v/sheep_gbRZEszPPh.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/sheep_gbRZEszPPh.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3x1uropxzobv52v/sheep_gbRZEszPPh.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/thumbs_sheep_gbRZEszPPh.png/100x100_sheep_gbRZEszPPh.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3x1uropxzobv52v/thumbs_sheep_gbRZEszPPh.png/100x100_sheep_gbRZEszPPh.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/thumbs_sheep_gbRZEszPPh.png/100x100_sheep_gbRZEszPPh.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3x1uropxzobv52v/thumbs_sheep_gbRZEszPPh.png/100x100_sheep_gbRZEszPPh.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/thumbs_sheep_gbRZEszPPh.png/100x100_sheep_gbRZEszPPh.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3x1uropxzobv52v/thumbs_sheep_gbRZEszPPh.png/100x100_sheep_gbRZEszPPh.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/3x1uropxzobv52v/thumbs_sheep_gbRZEszPPh.png/100x100_sheep_gbRZEszPPh.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/3x1uropxzobv52v/thumbs_sheep_gbRZEszPPh.png/100x100_sheep_gbRZEszPPh.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/45ogj8zl6tohimt/kpi_icon_he_student_male_1_1my9JzDuHe.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/45ogj8zl6tohimt/kpi_icon_he_student_male_1_1my9JzDuHe.png
new file mode 100644
index 0000000..cb796f0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/45ogj8zl6tohimt/kpi_icon_he_student_male_1_1my9JzDuHe.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/45ogj8zl6tohimt/kpi_icon_he_student_male_1_1my9JzDuHe.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/45ogj8zl6tohimt/kpi_icon_he_student_male_1_1my9JzDuHe.png.attrs
new file mode 100644
index 0000000..633e082
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/45ogj8zl6tohimt/kpi_icon_he_student_male_1_1my9JzDuHe.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-HE-StudentMale (1).png"},"md5":"pouA0KQgZQ9BUuf8M1u5bQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/45ogj8zl6tohimt/thumbs_kpi_icon_he_student_male_1_1my9JzDuHe.png/100x100_kpi_icon_he_student_male_1_1my9JzDuHe.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/45ogj8zl6tohimt/thumbs_kpi_icon_he_student_male_1_1my9JzDuHe.png/100x100_kpi_icon_he_student_male_1_1my9JzDuHe.png
new file mode 100644
index 0000000..302ec42
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/45ogj8zl6tohimt/thumbs_kpi_icon_he_student_male_1_1my9JzDuHe.png/100x100_kpi_icon_he_student_male_1_1my9JzDuHe.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/45ogj8zl6tohimt/thumbs_kpi_icon_he_student_male_1_1my9JzDuHe.png/100x100_kpi_icon_he_student_male_1_1my9JzDuHe.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/45ogj8zl6tohimt/thumbs_kpi_icon_he_student_male_1_1my9JzDuHe.png/100x100_kpi_icon_he_student_male_1_1my9JzDuHe.png.attrs
new file mode 100644
index 0000000..305b256
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/45ogj8zl6tohimt/thumbs_kpi_icon_he_student_male_1_1my9JzDuHe.png/100x100_kpi_icon_he_student_male_1_1my9JzDuHe.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"rFxtmIkJbYu4qgl9RFO/Qg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4epsb8882r8pqec/kpi_icon_higher_education_1_QP3FpsenJG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4epsb8882r8pqec/kpi_icon_higher_education_1_QP3FpsenJG.png
new file mode 100644
index 0000000..41d594c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4epsb8882r8pqec/kpi_icon_higher_education_1_QP3FpsenJG.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4epsb8882r8pqec/kpi_icon_higher_education_1_QP3FpsenJG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4epsb8882r8pqec/kpi_icon_higher_education_1_QP3FpsenJG.png.attrs
new file mode 100644
index 0000000..353c643
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4epsb8882r8pqec/kpi_icon_higher_education_1_QP3FpsenJG.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-HigherEducation (1).png"},"md5":"XUPZwnzbv1RNXf8d30881w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4epsb8882r8pqec/thumbs_kpi_icon_higher_education_1_QP3FpsenJG.png/100x100_kpi_icon_higher_education_1_QP3FpsenJG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4epsb8882r8pqec/thumbs_kpi_icon_higher_education_1_QP3FpsenJG.png/100x100_kpi_icon_higher_education_1_QP3FpsenJG.png
new file mode 100644
index 0000000..4a2bbae
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4epsb8882r8pqec/thumbs_kpi_icon_higher_education_1_QP3FpsenJG.png/100x100_kpi_icon_higher_education_1_QP3FpsenJG.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4epsb8882r8pqec/thumbs_kpi_icon_higher_education_1_QP3FpsenJG.png/100x100_kpi_icon_higher_education_1_QP3FpsenJG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4epsb8882r8pqec/thumbs_kpi_icon_higher_education_1_QP3FpsenJG.png/100x100_kpi_icon_higher_education_1_QP3FpsenJG.png.attrs
new file mode 100644
index 0000000..3b1c819
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4epsb8882r8pqec/thumbs_kpi_icon_higher_education_1_QP3FpsenJG.png/100x100_kpi_icon_higher_education_1_QP3FpsenJG.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"MlYbekj6JSb3UHXtQ/vdLQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/kpi_icon_re_export_a4k1TirhUZ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/kpi_icon_re_export_a4k1TirhUZ.png
new file mode 100644
index 0000000..2f2daf3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/kpi_icon_re_export_a4k1TirhUZ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/kpi_icon_re_export_a4k1TirhUZ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/kpi_icon_re_export_a4k1TirhUZ.png.attrs
new file mode 100644
index 0000000..efc1a5b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/kpi_icon_re_export_a4k1TirhUZ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-ReExport.png"},"md5":"wuPAc6IENmbI4H4Y5iykQA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/thumbs_kpi_icon_re_export_a4k1TirhUZ.png/100x100_kpi_icon_re_export_a4k1TirhUZ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/thumbs_kpi_icon_re_export_a4k1TirhUZ.png/100x100_kpi_icon_re_export_a4k1TirhUZ.png
new file mode 100644
index 0000000..6bf965d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/thumbs_kpi_icon_re_export_a4k1TirhUZ.png/100x100_kpi_icon_re_export_a4k1TirhUZ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/thumbs_kpi_icon_re_export_a4k1TirhUZ.png/100x100_kpi_icon_re_export_a4k1TirhUZ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/thumbs_kpi_icon_re_export_a4k1TirhUZ.png/100x100_kpi_icon_re_export_a4k1TirhUZ.png.attrs
new file mode 100644
index 0000000..670db8f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/4gl1tgtmnq5wtek/thumbs_kpi_icon_re_export_a4k1TirhUZ.png/100x100_kpi_icon_re_export_a4k1TirhUZ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"55tIdEz4EfKupJ7SzRKiNQ=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/thumbs_total_area_9Mv5Wxms3I.png/100x100_total_area_9Mv5Wxms3I.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5kdzhwvz3tr635l/thumbs_total_area_9Mv5Wxms3I.png/100x100_total_area_9Mv5Wxms3I.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/thumbs_total_area_9Mv5Wxms3I.png/100x100_total_area_9Mv5Wxms3I.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5kdzhwvz3tr635l/thumbs_total_area_9Mv5Wxms3I.png/100x100_total_area_9Mv5Wxms3I.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/thumbs_total_area_9Mv5Wxms3I.png/100x100_total_area_9Mv5Wxms3I.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5kdzhwvz3tr635l/thumbs_total_area_9Mv5Wxms3I.png/100x100_total_area_9Mv5Wxms3I.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/thumbs_total_area_9Mv5Wxms3I.png/100x100_total_area_9Mv5Wxms3I.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5kdzhwvz3tr635l/thumbs_total_area_9Mv5Wxms3I.png/100x100_total_area_9Mv5Wxms3I.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/total_area_9Mv5Wxms3I.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5kdzhwvz3tr635l/total_area_9Mv5Wxms3I.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/total_area_9Mv5Wxms3I.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5kdzhwvz3tr635l/total_area_9Mv5Wxms3I.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/total_area_9Mv5Wxms3I.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5kdzhwvz3tr635l/total_area_9Mv5Wxms3I.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/5kdzhwvz3tr635l/total_area_9Mv5Wxms3I.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5kdzhwvz3tr635l/total_area_9Mv5Wxms3I.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5ue7d61xov3u2vq/kpi_icon_private_hospitals_1_WqV9SvaYbi.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5ue7d61xov3u2vq/kpi_icon_private_hospitals_1_WqV9SvaYbi.png
new file mode 100644
index 0000000..fcf1f1c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5ue7d61xov3u2vq/kpi_icon_private_hospitals_1_WqV9SvaYbi.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5ue7d61xov3u2vq/kpi_icon_private_hospitals_1_WqV9SvaYbi.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5ue7d61xov3u2vq/kpi_icon_private_hospitals_1_WqV9SvaYbi.png.attrs
new file mode 100644
index 0000000..0940bab
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5ue7d61xov3u2vq/kpi_icon_private_hospitals_1_WqV9SvaYbi.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-PrivateHospitals (1).png"},"md5":"sQFLtOnN2ZTNWD+eayslZA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5ue7d61xov3u2vq/thumbs_kpi_icon_private_hospitals_1_WqV9SvaYbi.png/100x100_kpi_icon_private_hospitals_1_WqV9SvaYbi.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5ue7d61xov3u2vq/thumbs_kpi_icon_private_hospitals_1_WqV9SvaYbi.png/100x100_kpi_icon_private_hospitals_1_WqV9SvaYbi.png
new file mode 100644
index 0000000..298e2b8
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5ue7d61xov3u2vq/thumbs_kpi_icon_private_hospitals_1_WqV9SvaYbi.png/100x100_kpi_icon_private_hospitals_1_WqV9SvaYbi.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5ue7d61xov3u2vq/thumbs_kpi_icon_private_hospitals_1_WqV9SvaYbi.png/100x100_kpi_icon_private_hospitals_1_WqV9SvaYbi.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5ue7d61xov3u2vq/thumbs_kpi_icon_private_hospitals_1_WqV9SvaYbi.png/100x100_kpi_icon_private_hospitals_1_WqV9SvaYbi.png.attrs
new file mode 100644
index 0000000..8f8c4db
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5ue7d61xov3u2vq/thumbs_kpi_icon_private_hospitals_1_WqV9SvaYbi.png/100x100_kpi_icon_private_hospitals_1_WqV9SvaYbi.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"wm5ujjr/mLR4+vCCmX2dDg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/kpi_icon_departure_yI4Zc08kYI.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/kpi_icon_departure_yI4Zc08kYI.png
new file mode 100644
index 0000000..f5b467d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/kpi_icon_departure_yI4Zc08kYI.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/kpi_icon_departure_yI4Zc08kYI.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/kpi_icon_departure_yI4Zc08kYI.png.attrs
new file mode 100644
index 0000000..5848959
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/kpi_icon_departure_yI4Zc08kYI.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Departure.png"},"md5":"Fwm8+SZY3VcWKnRG1sVlcw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/thumbs_kpi_icon_departure_yI4Zc08kYI.png/100x100_kpi_icon_departure_yI4Zc08kYI.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/thumbs_kpi_icon_departure_yI4Zc08kYI.png/100x100_kpi_icon_departure_yI4Zc08kYI.png
new file mode 100644
index 0000000..c882846
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/thumbs_kpi_icon_departure_yI4Zc08kYI.png/100x100_kpi_icon_departure_yI4Zc08kYI.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/thumbs_kpi_icon_departure_yI4Zc08kYI.png/100x100_kpi_icon_departure_yI4Zc08kYI.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/thumbs_kpi_icon_departure_yI4Zc08kYI.png/100x100_kpi_icon_departure_yI4Zc08kYI.png.attrs
new file mode 100644
index 0000000..463d1b6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/5x8k2kdz2t0yb6w/thumbs_kpi_icon_departure_yI4Zc08kYI.png/100x100_kpi_icon_departure_yI4Zc08kYI.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"MSr9GD5SvLTIqi21V/Nzow=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/camel_n0vgkEtY97.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/605dy41iozsk9y7/camel_n0vgkEtY97.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/camel_n0vgkEtY97.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/605dy41iozsk9y7/camel_n0vgkEtY97.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/camel_n0vgkEtY97.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/605dy41iozsk9y7/camel_n0vgkEtY97.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/camel_n0vgkEtY97.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/605dy41iozsk9y7/camel_n0vgkEtY97.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/thumbs_camel_n0vgkEtY97.png/100x100_camel_n0vgkEtY97.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/605dy41iozsk9y7/thumbs_camel_n0vgkEtY97.png/100x100_camel_n0vgkEtY97.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/thumbs_camel_n0vgkEtY97.png/100x100_camel_n0vgkEtY97.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/605dy41iozsk9y7/thumbs_camel_n0vgkEtY97.png/100x100_camel_n0vgkEtY97.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/thumbs_camel_n0vgkEtY97.png/100x100_camel_n0vgkEtY97.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/605dy41iozsk9y7/thumbs_camel_n0vgkEtY97.png/100x100_camel_n0vgkEtY97.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/605dy41iozsk9y7/thumbs_camel_n0vgkEtY97.png/100x100_camel_n0vgkEtY97.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/605dy41iozsk9y7/thumbs_camel_n0vgkEtY97.png/100x100_camel_n0vgkEtY97.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/68tm7nce335p8te/kpi_icon_gdp_xhh2Ph36r8.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/68tm7nce335p8te/kpi_icon_gdp_xhh2Ph36r8.png
new file mode 100644
index 0000000..00a7246
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/68tm7nce335p8te/kpi_icon_gdp_xhh2Ph36r8.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/68tm7nce335p8te/kpi_icon_gdp_xhh2Ph36r8.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/68tm7nce335p8te/kpi_icon_gdp_xhh2Ph36r8.png.attrs
new file mode 100644
index 0000000..aeed7a6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/68tm7nce335p8te/kpi_icon_gdp_xhh2Ph36r8.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDP.png"},"md5":"GbjBCTBkQMjDA/ePurXQ4w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/68tm7nce335p8te/thumbs_kpi_icon_gdp_xhh2Ph36r8.png/100x100_kpi_icon_gdp_xhh2Ph36r8.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/68tm7nce335p8te/thumbs_kpi_icon_gdp_xhh2Ph36r8.png/100x100_kpi_icon_gdp_xhh2Ph36r8.png
new file mode 100644
index 0000000..1f4a9d5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/68tm7nce335p8te/thumbs_kpi_icon_gdp_xhh2Ph36r8.png/100x100_kpi_icon_gdp_xhh2Ph36r8.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/68tm7nce335p8te/thumbs_kpi_icon_gdp_xhh2Ph36r8.png/100x100_kpi_icon_gdp_xhh2Ph36r8.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/68tm7nce335p8te/thumbs_kpi_icon_gdp_xhh2Ph36r8.png/100x100_kpi_icon_gdp_xhh2Ph36r8.png.attrs
new file mode 100644
index 0000000..1c118ca
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/68tm7nce335p8te/thumbs_kpi_icon_gdp_xhh2Ph36r8.png/100x100_kpi_icon_gdp_xhh2Ph36r8.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"oR1IfXTRW05tuALKgeFtkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/kpi_icon_marriage_oNHP7akneh.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/kpi_icon_marriage_oNHP7akneh.png
new file mode 100644
index 0000000..4511a5b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/kpi_icon_marriage_oNHP7akneh.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/kpi_icon_marriage_oNHP7akneh.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/kpi_icon_marriage_oNHP7akneh.png.attrs
new file mode 100644
index 0000000..3fe0133
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/kpi_icon_marriage_oNHP7akneh.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Marriage.png"},"md5":"nnvEuAAjYWfWwtDM1r+v8A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/thumbs_kpi_icon_marriage_oNHP7akneh.png/100x100_kpi_icon_marriage_oNHP7akneh.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/thumbs_kpi_icon_marriage_oNHP7akneh.png/100x100_kpi_icon_marriage_oNHP7akneh.png
new file mode 100644
index 0000000..e550118
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/thumbs_kpi_icon_marriage_oNHP7akneh.png/100x100_kpi_icon_marriage_oNHP7akneh.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/thumbs_kpi_icon_marriage_oNHP7akneh.png/100x100_kpi_icon_marriage_oNHP7akneh.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/thumbs_kpi_icon_marriage_oNHP7akneh.png/100x100_kpi_icon_marriage_oNHP7akneh.png.attrs
new file mode 100644
index 0000000..ee75da3
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/72wlhdjsz6r7uw1/thumbs_kpi_icon_marriage_oNHP7akneh.png/100x100_kpi_icon_marriage_oNHP7akneh.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"fZ2oprnP/J8tebqAYEHPGw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/kpi_icon_gov_centers_OxhJKVCrXb.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/kpi_icon_gov_centers_OxhJKVCrXb.png
new file mode 100644
index 0000000..90d768e
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/kpi_icon_gov_centers_OxhJKVCrXb.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/kpi_icon_gov_centers_OxhJKVCrXb.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/kpi_icon_gov_centers_OxhJKVCrXb.png.attrs
new file mode 100644
index 0000000..58eafcd
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/kpi_icon_gov_centers_OxhJKVCrXb.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GovCenters.png"},"md5":"+otxpA2z8F/exzFdk/glew=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/thumbs_kpi_icon_gov_centers_OxhJKVCrXb.png/100x100_kpi_icon_gov_centers_OxhJKVCrXb.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/thumbs_kpi_icon_gov_centers_OxhJKVCrXb.png/100x100_kpi_icon_gov_centers_OxhJKVCrXb.png
new file mode 100644
index 0000000..80d5ef3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/thumbs_kpi_icon_gov_centers_OxhJKVCrXb.png/100x100_kpi_icon_gov_centers_OxhJKVCrXb.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/thumbs_kpi_icon_gov_centers_OxhJKVCrXb.png/100x100_kpi_icon_gov_centers_OxhJKVCrXb.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/thumbs_kpi_icon_gov_centers_OxhJKVCrXb.png/100x100_kpi_icon_gov_centers_OxhJKVCrXb.png.attrs
new file mode 100644
index 0000000..483174a
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7qhyoxwg6i7v38q/thumbs_kpi_icon_gov_centers_OxhJKVCrXb.png/100x100_kpi_icon_gov_centers_OxhJKVCrXb.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"1XanNMPQCA19qiamtoH0FA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7uxfuieojfu8x1j/kpi_icon_gdpgrowth_JencyU4HEg.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7uxfuieojfu8x1j/kpi_icon_gdpgrowth_JencyU4HEg.png
new file mode 100644
index 0000000..f5f673a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7uxfuieojfu8x1j/kpi_icon_gdpgrowth_JencyU4HEg.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7uxfuieojfu8x1j/kpi_icon_gdpgrowth_JencyU4HEg.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7uxfuieojfu8x1j/kpi_icon_gdpgrowth_JencyU4HEg.png.attrs
new file mode 100644
index 0000000..30324ed
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7uxfuieojfu8x1j/kpi_icon_gdpgrowth_JencyU4HEg.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDPGrowth.png"},"md5":"HqqwH2pjnCJ5qZ2nSzmtUw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7uxfuieojfu8x1j/thumbs_kpi_icon_gdpgrowth_JencyU4HEg.png/100x100_kpi_icon_gdpgrowth_JencyU4HEg.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7uxfuieojfu8x1j/thumbs_kpi_icon_gdpgrowth_JencyU4HEg.png/100x100_kpi_icon_gdpgrowth_JencyU4HEg.png
new file mode 100644
index 0000000..40ddf4f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7uxfuieojfu8x1j/thumbs_kpi_icon_gdpgrowth_JencyU4HEg.png/100x100_kpi_icon_gdpgrowth_JencyU4HEg.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7uxfuieojfu8x1j/thumbs_kpi_icon_gdpgrowth_JencyU4HEg.png/100x100_kpi_icon_gdpgrowth_JencyU4HEg.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7uxfuieojfu8x1j/thumbs_kpi_icon_gdpgrowth_JencyU4HEg.png/100x100_kpi_icon_gdpgrowth_JencyU4HEg.png.attrs
new file mode 100644
index 0000000..edf40cf
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/7uxfuieojfu8x1j/thumbs_kpi_icon_gdpgrowth_JencyU4HEg.png/100x100_kpi_icon_gdpgrowth_JencyU4HEg.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zrI7ItL8NvCC4HA5egimuA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/80lb9i8y15i707i/kpi_icon_export_qRIwM4mRkm.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/80lb9i8y15i707i/kpi_icon_export_qRIwM4mRkm.png
new file mode 100644
index 0000000..212871f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/80lb9i8y15i707i/kpi_icon_export_qRIwM4mRkm.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/80lb9i8y15i707i/kpi_icon_export_qRIwM4mRkm.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/80lb9i8y15i707i/kpi_icon_export_qRIwM4mRkm.png.attrs
new file mode 100644
index 0000000..8f5ba5d
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/80lb9i8y15i707i/kpi_icon_export_qRIwM4mRkm.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Export.png"},"md5":"IPaPiLbUhghzbNypSqwzog=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/80lb9i8y15i707i/thumbs_kpi_icon_export_qRIwM4mRkm.png/100x100_kpi_icon_export_qRIwM4mRkm.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/80lb9i8y15i707i/thumbs_kpi_icon_export_qRIwM4mRkm.png/100x100_kpi_icon_export_qRIwM4mRkm.png
new file mode 100644
index 0000000..58f0a77
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/80lb9i8y15i707i/thumbs_kpi_icon_export_qRIwM4mRkm.png/100x100_kpi_icon_export_qRIwM4mRkm.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/80lb9i8y15i707i/thumbs_kpi_icon_export_qRIwM4mRkm.png/100x100_kpi_icon_export_qRIwM4mRkm.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/80lb9i8y15i707i/thumbs_kpi_icon_export_qRIwM4mRkm.png/100x100_kpi_icon_export_qRIwM4mRkm.png.attrs
new file mode 100644
index 0000000..29b2c96
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/80lb9i8y15i707i/thumbs_kpi_icon_export_qRIwM4mRkm.png/100x100_kpi_icon_export_qRIwM4mRkm.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"gRzHgaCqcAj686AvLdedFA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8471xhg4l2izbzw/kpi_icon_occupancy_rate_TRtC21w8p2.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8471xhg4l2izbzw/kpi_icon_occupancy_rate_TRtC21w8p2.png
new file mode 100644
index 0000000..4b5ae6b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8471xhg4l2izbzw/kpi_icon_occupancy_rate_TRtC21w8p2.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8471xhg4l2izbzw/kpi_icon_occupancy_rate_TRtC21w8p2.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8471xhg4l2izbzw/kpi_icon_occupancy_rate_TRtC21w8p2.png.attrs
new file mode 100644
index 0000000..b16288e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8471xhg4l2izbzw/kpi_icon_occupancy_rate_TRtC21w8p2.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OccupancyRate.png"},"md5":"Cs+jJNffYFWAhBqJwmKX0A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8471xhg4l2izbzw/thumbs_kpi_icon_occupancy_rate_TRtC21w8p2.png/100x100_kpi_icon_occupancy_rate_TRtC21w8p2.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8471xhg4l2izbzw/thumbs_kpi_icon_occupancy_rate_TRtC21w8p2.png/100x100_kpi_icon_occupancy_rate_TRtC21w8p2.png
new file mode 100644
index 0000000..1f6d56d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8471xhg4l2izbzw/thumbs_kpi_icon_occupancy_rate_TRtC21w8p2.png/100x100_kpi_icon_occupancy_rate_TRtC21w8p2.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8471xhg4l2izbzw/thumbs_kpi_icon_occupancy_rate_TRtC21w8p2.png/100x100_kpi_icon_occupancy_rate_TRtC21w8p2.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8471xhg4l2izbzw/thumbs_kpi_icon_occupancy_rate_TRtC21w8p2.png/100x100_kpi_icon_occupancy_rate_TRtC21w8p2.png.attrs
new file mode 100644
index 0000000..5da8ec2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8471xhg4l2izbzw/thumbs_kpi_icon_occupancy_rate_TRtC21w8p2.png/100x100_kpi_icon_occupancy_rate_TRtC21w8p2.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"U+jFTo4vOOwg1q6sg8TA+A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/kpi_icon_occupancy_rate_F4NkscO21E.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/kpi_icon_occupancy_rate_F4NkscO21E.png
new file mode 100644
index 0000000..4b5ae6b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/kpi_icon_occupancy_rate_F4NkscO21E.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/kpi_icon_occupancy_rate_F4NkscO21E.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/kpi_icon_occupancy_rate_F4NkscO21E.png.attrs
new file mode 100644
index 0000000..b16288e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/kpi_icon_occupancy_rate_F4NkscO21E.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OccupancyRate.png"},"md5":"Cs+jJNffYFWAhBqJwmKX0A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/thumbs_kpi_icon_occupancy_rate_F4NkscO21E.png/100x100_kpi_icon_occupancy_rate_F4NkscO21E.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/thumbs_kpi_icon_occupancy_rate_F4NkscO21E.png/100x100_kpi_icon_occupancy_rate_F4NkscO21E.png
new file mode 100644
index 0000000..1f6d56d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/thumbs_kpi_icon_occupancy_rate_F4NkscO21E.png/100x100_kpi_icon_occupancy_rate_F4NkscO21E.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/thumbs_kpi_icon_occupancy_rate_F4NkscO21E.png/100x100_kpi_icon_occupancy_rate_F4NkscO21E.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/thumbs_kpi_icon_occupancy_rate_F4NkscO21E.png/100x100_kpi_icon_occupancy_rate_F4NkscO21E.png.attrs
new file mode 100644
index 0000000..5da8ec2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8jl7rsaqf3e2dz9/thumbs_kpi_icon_occupancy_rate_F4NkscO21E.png/100x100_kpi_icon_occupancy_rate_F4NkscO21E.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"U+jFTo4vOOwg1q6sg8TA+A=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/thumbs_total_area_UwbKAASJOo.png/100x100_total_area_UwbKAASJOo.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/thumbs_total_area_UwbKAASJOo.png/100x100_total_area_UwbKAASJOo.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/thumbs_total_area_UwbKAASJOo.png/100x100_total_area_UwbKAASJOo.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/thumbs_total_area_UwbKAASJOo.png/100x100_total_area_UwbKAASJOo.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/thumbs_total_area_UwbKAASJOo.png/100x100_total_area_UwbKAASJOo.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/thumbs_total_area_UwbKAASJOo.png/100x100_total_area_UwbKAASJOo.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/thumbs_total_area_UwbKAASJOo.png/100x100_total_area_UwbKAASJOo.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/thumbs_total_area_UwbKAASJOo.png/100x100_total_area_UwbKAASJOo.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/total_area_UwbKAASJOo.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/total_area_UwbKAASJOo.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/total_area_UwbKAASJOo.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/total_area_UwbKAASJOo.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/total_area_UwbKAASJOo.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/total_area_UwbKAASJOo.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/total_area_UwbKAASJOo.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/8ni5wxt3uekx1m5/total_area_UwbKAASJOo.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/94sngusufwurz1z/icon_students_mgGxpex0PQ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/94sngusufwurz1z/icon_students_mgGxpex0PQ.png
new file mode 100644
index 0000000..c9ebc82
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/94sngusufwurz1z/icon_students_mgGxpex0PQ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/94sngusufwurz1z/icon_students_mgGxpex0PQ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/94sngusufwurz1z/icon_students_mgGxpex0PQ.png.attrs
new file mode 100644
index 0000000..b1f5d69
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/94sngusufwurz1z/icon_students_mgGxpex0PQ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"icon-students.png"},"md5":"Vi/d25yMJlhOPbhaagkeBg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/94sngusufwurz1z/thumbs_icon_students_mgGxpex0PQ.png/100x100_icon_students_mgGxpex0PQ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/94sngusufwurz1z/thumbs_icon_students_mgGxpex0PQ.png/100x100_icon_students_mgGxpex0PQ.png
new file mode 100644
index 0000000..dbc0bc5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/94sngusufwurz1z/thumbs_icon_students_mgGxpex0PQ.png/100x100_icon_students_mgGxpex0PQ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/94sngusufwurz1z/thumbs_icon_students_mgGxpex0PQ.png/100x100_icon_students_mgGxpex0PQ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/94sngusufwurz1z/thumbs_icon_students_mgGxpex0PQ.png/100x100_icon_students_mgGxpex0PQ.png.attrs
new file mode 100644
index 0000000..639e575
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/94sngusufwurz1z/thumbs_icon_students_mgGxpex0PQ.png/100x100_icon_students_mgGxpex0PQ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"cJG38pPy+vKV5xtmkOq07A=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/crops_pPhSNlW3dj.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/98zc6gppkeaftkr/crops_pPhSNlW3dj.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/crops_pPhSNlW3dj.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/98zc6gppkeaftkr/crops_pPhSNlW3dj.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/crops_pPhSNlW3dj.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/98zc6gppkeaftkr/crops_pPhSNlW3dj.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/crops_pPhSNlW3dj.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/98zc6gppkeaftkr/crops_pPhSNlW3dj.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/thumbs_crops_pPhSNlW3dj.png/100x100_crops_pPhSNlW3dj.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/98zc6gppkeaftkr/thumbs_crops_pPhSNlW3dj.png/100x100_crops_pPhSNlW3dj.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/thumbs_crops_pPhSNlW3dj.png/100x100_crops_pPhSNlW3dj.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/98zc6gppkeaftkr/thumbs_crops_pPhSNlW3dj.png/100x100_crops_pPhSNlW3dj.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/thumbs_crops_pPhSNlW3dj.png/100x100_crops_pPhSNlW3dj.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/98zc6gppkeaftkr/thumbs_crops_pPhSNlW3dj.png/100x100_crops_pPhSNlW3dj.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/98zc6gppkeaftkr/thumbs_crops_pPhSNlW3dj.png/100x100_crops_pPhSNlW3dj.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/98zc6gppkeaftkr/thumbs_crops_pPhSNlW3dj.png/100x100_crops_pPhSNlW3dj.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/consumption_UIy1Zma4na.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aam0hyue7qadse9/consumption_UIy1Zma4na.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/consumption_UIy1Zma4na.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aam0hyue7qadse9/consumption_UIy1Zma4na.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/consumption_UIy1Zma4na.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aam0hyue7qadse9/consumption_UIy1Zma4na.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/consumption_UIy1Zma4na.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aam0hyue7qadse9/consumption_UIy1Zma4na.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/thumbs_consumption_UIy1Zma4na.png/100x100_consumption_UIy1Zma4na.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aam0hyue7qadse9/thumbs_consumption_UIy1Zma4na.png/100x100_consumption_UIy1Zma4na.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/thumbs_consumption_UIy1Zma4na.png/100x100_consumption_UIy1Zma4na.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aam0hyue7qadse9/thumbs_consumption_UIy1Zma4na.png/100x100_consumption_UIy1Zma4na.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/thumbs_consumption_UIy1Zma4na.png/100x100_consumption_UIy1Zma4na.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aam0hyue7qadse9/thumbs_consumption_UIy1Zma4na.png/100x100_consumption_UIy1Zma4na.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/aam0hyue7qadse9/thumbs_consumption_UIy1Zma4na.png/100x100_consumption_UIy1Zma4na.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aam0hyue7qadse9/thumbs_consumption_UIy1Zma4na.png/100x100_consumption_UIy1Zma4na.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aqba83oqyue6url/kpi_icon_gdpgrowth_0BPQEvt8kZ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aqba83oqyue6url/kpi_icon_gdpgrowth_0BPQEvt8kZ.png
new file mode 100644
index 0000000..f5f673a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aqba83oqyue6url/kpi_icon_gdpgrowth_0BPQEvt8kZ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aqba83oqyue6url/kpi_icon_gdpgrowth_0BPQEvt8kZ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aqba83oqyue6url/kpi_icon_gdpgrowth_0BPQEvt8kZ.png.attrs
new file mode 100644
index 0000000..30324ed
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aqba83oqyue6url/kpi_icon_gdpgrowth_0BPQEvt8kZ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDPGrowth.png"},"md5":"HqqwH2pjnCJ5qZ2nSzmtUw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aqba83oqyue6url/thumbs_kpi_icon_gdpgrowth_0BPQEvt8kZ.png/100x100_kpi_icon_gdpgrowth_0BPQEvt8kZ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aqba83oqyue6url/thumbs_kpi_icon_gdpgrowth_0BPQEvt8kZ.png/100x100_kpi_icon_gdpgrowth_0BPQEvt8kZ.png
new file mode 100644
index 0000000..40ddf4f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aqba83oqyue6url/thumbs_kpi_icon_gdpgrowth_0BPQEvt8kZ.png/100x100_kpi_icon_gdpgrowth_0BPQEvt8kZ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aqba83oqyue6url/thumbs_kpi_icon_gdpgrowth_0BPQEvt8kZ.png/100x100_kpi_icon_gdpgrowth_0BPQEvt8kZ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aqba83oqyue6url/thumbs_kpi_icon_gdpgrowth_0BPQEvt8kZ.png/100x100_kpi_icon_gdpgrowth_0BPQEvt8kZ.png.attrs
new file mode 100644
index 0000000..edf40cf
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/aqba83oqyue6url/thumbs_kpi_icon_gdpgrowth_0BPQEvt8kZ.png/100x100_kpi_icon_gdpgrowth_0BPQEvt8kZ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zrI7ItL8NvCC4HA5egimuA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b5weh40cfu840bs/kpi_icon_import_6RUZMd5jaA.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b5weh40cfu840bs/kpi_icon_import_6RUZMd5jaA.png
new file mode 100644
index 0000000..72e1c18
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b5weh40cfu840bs/kpi_icon_import_6RUZMd5jaA.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b5weh40cfu840bs/kpi_icon_import_6RUZMd5jaA.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b5weh40cfu840bs/kpi_icon_import_6RUZMd5jaA.png.attrs
new file mode 100644
index 0000000..e7874d0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b5weh40cfu840bs/kpi_icon_import_6RUZMd5jaA.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Import.png"},"md5":"2BDdMENO2Qr0frmP5x6KWQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b5weh40cfu840bs/thumbs_kpi_icon_import_6RUZMd5jaA.png/100x100_kpi_icon_import_6RUZMd5jaA.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b5weh40cfu840bs/thumbs_kpi_icon_import_6RUZMd5jaA.png/100x100_kpi_icon_import_6RUZMd5jaA.png
new file mode 100644
index 0000000..be588a5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b5weh40cfu840bs/thumbs_kpi_icon_import_6RUZMd5jaA.png/100x100_kpi_icon_import_6RUZMd5jaA.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b5weh40cfu840bs/thumbs_kpi_icon_import_6RUZMd5jaA.png/100x100_kpi_icon_import_6RUZMd5jaA.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b5weh40cfu840bs/thumbs_kpi_icon_import_6RUZMd5jaA.png/100x100_kpi_icon_import_6RUZMd5jaA.png.attrs
new file mode 100644
index 0000000..974e6f4
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b5weh40cfu840bs/thumbs_kpi_icon_import_6RUZMd5jaA.png/100x100_kpi_icon_import_6RUZMd5jaA.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zgwJqK1psQOQsoWeaubwUg=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/thumbs_total_area_fdORlcapgx.png/100x100_total_area_fdORlcapgx.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b8n24r00hshx9jd/thumbs_total_area_fdORlcapgx.png/100x100_total_area_fdORlcapgx.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/thumbs_total_area_fdORlcapgx.png/100x100_total_area_fdORlcapgx.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b8n24r00hshx9jd/thumbs_total_area_fdORlcapgx.png/100x100_total_area_fdORlcapgx.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/thumbs_total_area_fdORlcapgx.png/100x100_total_area_fdORlcapgx.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b8n24r00hshx9jd/thumbs_total_area_fdORlcapgx.png/100x100_total_area_fdORlcapgx.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/thumbs_total_area_fdORlcapgx.png/100x100_total_area_fdORlcapgx.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b8n24r00hshx9jd/thumbs_total_area_fdORlcapgx.png/100x100_total_area_fdORlcapgx.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/total_area_fdORlcapgx.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b8n24r00hshx9jd/total_area_fdORlcapgx.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/total_area_fdORlcapgx.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b8n24r00hshx9jd/total_area_fdORlcapgx.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/total_area_fdORlcapgx.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b8n24r00hshx9jd/total_area_fdORlcapgx.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/b8n24r00hshx9jd/total_area_fdORlcapgx.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/b8n24r00hshx9jd/total_area_fdORlcapgx.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bat6bob7qff1bym/kpi_icon_occupancy_rate_SswkazfYOY.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bat6bob7qff1bym/kpi_icon_occupancy_rate_SswkazfYOY.png
new file mode 100644
index 0000000..4b5ae6b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bat6bob7qff1bym/kpi_icon_occupancy_rate_SswkazfYOY.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bat6bob7qff1bym/kpi_icon_occupancy_rate_SswkazfYOY.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bat6bob7qff1bym/kpi_icon_occupancy_rate_SswkazfYOY.png.attrs
new file mode 100644
index 0000000..b16288e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bat6bob7qff1bym/kpi_icon_occupancy_rate_SswkazfYOY.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OccupancyRate.png"},"md5":"Cs+jJNffYFWAhBqJwmKX0A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bat6bob7qff1bym/thumbs_kpi_icon_occupancy_rate_SswkazfYOY.png/100x100_kpi_icon_occupancy_rate_SswkazfYOY.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bat6bob7qff1bym/thumbs_kpi_icon_occupancy_rate_SswkazfYOY.png/100x100_kpi_icon_occupancy_rate_SswkazfYOY.png
new file mode 100644
index 0000000..1f6d56d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bat6bob7qff1bym/thumbs_kpi_icon_occupancy_rate_SswkazfYOY.png/100x100_kpi_icon_occupancy_rate_SswkazfYOY.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bat6bob7qff1bym/thumbs_kpi_icon_occupancy_rate_SswkazfYOY.png/100x100_kpi_icon_occupancy_rate_SswkazfYOY.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bat6bob7qff1bym/thumbs_kpi_icon_occupancy_rate_SswkazfYOY.png/100x100_kpi_icon_occupancy_rate_SswkazfYOY.png.attrs
new file mode 100644
index 0000000..5da8ec2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bat6bob7qff1bym/thumbs_kpi_icon_occupancy_rate_SswkazfYOY.png/100x100_kpi_icon_occupancy_rate_SswkazfYOY.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"U+jFTo4vOOwg1q6sg8TA+A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bb9slpbexf6mppd/kpi_icon_value_added_Ma9ChmOPZ6.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bb9slpbexf6mppd/kpi_icon_value_added_Ma9ChmOPZ6.png
new file mode 100644
index 0000000..9761a09
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bb9slpbexf6mppd/kpi_icon_value_added_Ma9ChmOPZ6.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bb9slpbexf6mppd/kpi_icon_value_added_Ma9ChmOPZ6.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bb9slpbexf6mppd/kpi_icon_value_added_Ma9ChmOPZ6.png.attrs
new file mode 100644
index 0000000..5b9b65f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bb9slpbexf6mppd/kpi_icon_value_added_Ma9ChmOPZ6.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-ValueAdded.png"},"md5":"ODLB/T7aI6UKdqsOsETFPA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bb9slpbexf6mppd/thumbs_kpi_icon_value_added_Ma9ChmOPZ6.png/100x100_kpi_icon_value_added_Ma9ChmOPZ6.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bb9slpbexf6mppd/thumbs_kpi_icon_value_added_Ma9ChmOPZ6.png/100x100_kpi_icon_value_added_Ma9ChmOPZ6.png
new file mode 100644
index 0000000..3686884
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bb9slpbexf6mppd/thumbs_kpi_icon_value_added_Ma9ChmOPZ6.png/100x100_kpi_icon_value_added_Ma9ChmOPZ6.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bb9slpbexf6mppd/thumbs_kpi_icon_value_added_Ma9ChmOPZ6.png/100x100_kpi_icon_value_added_Ma9ChmOPZ6.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bb9slpbexf6mppd/thumbs_kpi_icon_value_added_Ma9ChmOPZ6.png/100x100_kpi_icon_value_added_Ma9ChmOPZ6.png.attrs
new file mode 100644
index 0000000..0c3ba02
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bb9slpbexf6mppd/thumbs_kpi_icon_value_added_Ma9ChmOPZ6.png/100x100_kpi_icon_value_added_Ma9ChmOPZ6.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"wNOZfj/MY06Twl57Udm1tw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bq1s157agqqd1zn/kpi_icon_gdpgrowth_SiTClD2DMI.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bq1s157agqqd1zn/kpi_icon_gdpgrowth_SiTClD2DMI.png
new file mode 100644
index 0000000..c75ed94
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bq1s157agqqd1zn/kpi_icon_gdpgrowth_SiTClD2DMI.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bq1s157agqqd1zn/kpi_icon_gdpgrowth_SiTClD2DMI.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bq1s157agqqd1zn/kpi_icon_gdpgrowth_SiTClD2DMI.png.attrs
new file mode 100644
index 0000000..443371c
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bq1s157agqqd1zn/kpi_icon_gdpgrowth_SiTClD2DMI.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDPGrowth.png"},"md5":"BuY+kJCvNDC0gNpwoK0ylw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bq1s157agqqd1zn/thumbs_kpi_icon_gdpgrowth_SiTClD2DMI.png/100x100_kpi_icon_gdpgrowth_SiTClD2DMI.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bq1s157agqqd1zn/thumbs_kpi_icon_gdpgrowth_SiTClD2DMI.png/100x100_kpi_icon_gdpgrowth_SiTClD2DMI.png
new file mode 100644
index 0000000..9ea8435
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bq1s157agqqd1zn/thumbs_kpi_icon_gdpgrowth_SiTClD2DMI.png/100x100_kpi_icon_gdpgrowth_SiTClD2DMI.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bq1s157agqqd1zn/thumbs_kpi_icon_gdpgrowth_SiTClD2DMI.png/100x100_kpi_icon_gdpgrowth_SiTClD2DMI.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bq1s157agqqd1zn/thumbs_kpi_icon_gdpgrowth_SiTClD2DMI.png/100x100_kpi_icon_gdpgrowth_SiTClD2DMI.png.attrs
new file mode 100644
index 0000000..0242c8e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/bq1s157agqqd1zn/thumbs_kpi_icon_gdpgrowth_SiTClD2DMI.png/100x100_kpi_icon_gdpgrowth_SiTClD2DMI.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"9lWaRuZKLGuibexTLg+KTw=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/sheep_DKfNigwF4L.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/btw2vq3b5l5shkj/sheep_DKfNigwF4L.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/sheep_DKfNigwF4L.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/btw2vq3b5l5shkj/sheep_DKfNigwF4L.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/sheep_DKfNigwF4L.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/btw2vq3b5l5shkj/sheep_DKfNigwF4L.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/sheep_DKfNigwF4L.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/btw2vq3b5l5shkj/sheep_DKfNigwF4L.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/thumbs_sheep_DKfNigwF4L.png/100x100_sheep_DKfNigwF4L.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/btw2vq3b5l5shkj/thumbs_sheep_DKfNigwF4L.png/100x100_sheep_DKfNigwF4L.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/thumbs_sheep_DKfNigwF4L.png/100x100_sheep_DKfNigwF4L.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/btw2vq3b5l5shkj/thumbs_sheep_DKfNigwF4L.png/100x100_sheep_DKfNigwF4L.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/thumbs_sheep_DKfNigwF4L.png/100x100_sheep_DKfNigwF4L.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/btw2vq3b5l5shkj/thumbs_sheep_DKfNigwF4L.png/100x100_sheep_DKfNigwF4L.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/btw2vq3b5l5shkj/thumbs_sheep_DKfNigwF4L.png/100x100_sheep_DKfNigwF4L.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/btw2vq3b5l5shkj/thumbs_sheep_DKfNigwF4L.png/100x100_sheep_DKfNigwF4L.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/kpi_icon_gdp_wnPdHkZMp5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/kpi_icon_gdp_wnPdHkZMp5.png
new file mode 100644
index 0000000..00a7246
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/kpi_icon_gdp_wnPdHkZMp5.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/kpi_icon_gdp_wnPdHkZMp5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/kpi_icon_gdp_wnPdHkZMp5.png.attrs
new file mode 100644
index 0000000..aeed7a6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/kpi_icon_gdp_wnPdHkZMp5.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDP.png"},"md5":"GbjBCTBkQMjDA/ePurXQ4w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/thumbs_kpi_icon_gdp_wnPdHkZMp5.png/100x100_kpi_icon_gdp_wnPdHkZMp5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/thumbs_kpi_icon_gdp_wnPdHkZMp5.png/100x100_kpi_icon_gdp_wnPdHkZMp5.png
new file mode 100644
index 0000000..1f4a9d5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/thumbs_kpi_icon_gdp_wnPdHkZMp5.png/100x100_kpi_icon_gdp_wnPdHkZMp5.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/thumbs_kpi_icon_gdp_wnPdHkZMp5.png/100x100_kpi_icon_gdp_wnPdHkZMp5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/thumbs_kpi_icon_gdp_wnPdHkZMp5.png/100x100_kpi_icon_gdp_wnPdHkZMp5.png.attrs
new file mode 100644
index 0000000..1c118ca
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ch7u8zjxpbbqh5a/thumbs_kpi_icon_gdp_wnPdHkZMp5.png/100x100_kpi_icon_gdp_wnPdHkZMp5.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"oR1IfXTRW05tuALKgeFtkw=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/cot6oud4o90pug8/group_175_2_pUP2yI9DXg.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cot6oud4o90pug8/group_175_2_pUP2yI9DXg.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/cot6oud4o90pug8/group_175_2_pUP2yI9DXg.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cot6oud4o90pug8/group_175_2_pUP2yI9DXg.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/cot6oud4o90pug8/group_175_2_pUP2yI9DXg.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cot6oud4o90pug8/group_175_2_pUP2yI9DXg.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/cot6oud4o90pug8/group_175_2_pUP2yI9DXg.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cot6oud4o90pug8/group_175_2_pUP2yI9DXg.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/male_gAfDXWDBm5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/male_gAfDXWDBm5.png
new file mode 100644
index 0000000..3302645
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/male_gAfDXWDBm5.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/male_gAfDXWDBm5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/male_gAfDXWDBm5.png.attrs
new file mode 100644
index 0000000..8bfde7b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/male_gAfDXWDBm5.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"male.png"},"md5":"gq2puo4WHB/p8O/dYe6AZA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/thumbs_male_gAfDXWDBm5.png/100x100_male_gAfDXWDBm5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/thumbs_male_gAfDXWDBm5.png/100x100_male_gAfDXWDBm5.png
new file mode 100644
index 0000000..6807646
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/thumbs_male_gAfDXWDBm5.png/100x100_male_gAfDXWDBm5.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/thumbs_male_gAfDXWDBm5.png/100x100_male_gAfDXWDBm5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/thumbs_male_gAfDXWDBm5.png/100x100_male_gAfDXWDBm5.png.attrs
new file mode 100644
index 0000000..178e495
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cuin1hjvq2pvbqz/thumbs_male_gAfDXWDBm5.png/100x100_male_gAfDXWDBm5.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"Ua07BI7xJGVJ7eVStoTK3g=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cx0odwshl9gsu1a/kpi_icon_bed_private_2VIbzju1PG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cx0odwshl9gsu1a/kpi_icon_bed_private_2VIbzju1PG.png
new file mode 100644
index 0000000..8240e4c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cx0odwshl9gsu1a/kpi_icon_bed_private_2VIbzju1PG.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cx0odwshl9gsu1a/kpi_icon_bed_private_2VIbzju1PG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cx0odwshl9gsu1a/kpi_icon_bed_private_2VIbzju1PG.png.attrs
new file mode 100644
index 0000000..49d2939
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cx0odwshl9gsu1a/kpi_icon_bed_private_2VIbzju1PG.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-BedPrivate.png"},"md5":"9xCfrv5RZVEmdTPcku8LSA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cx0odwshl9gsu1a/thumbs_kpi_icon_bed_private_2VIbzju1PG.png/100x100_kpi_icon_bed_private_2VIbzju1PG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cx0odwshl9gsu1a/thumbs_kpi_icon_bed_private_2VIbzju1PG.png/100x100_kpi_icon_bed_private_2VIbzju1PG.png
new file mode 100644
index 0000000..28ebde0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cx0odwshl9gsu1a/thumbs_kpi_icon_bed_private_2VIbzju1PG.png/100x100_kpi_icon_bed_private_2VIbzju1PG.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cx0odwshl9gsu1a/thumbs_kpi_icon_bed_private_2VIbzju1PG.png/100x100_kpi_icon_bed_private_2VIbzju1PG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cx0odwshl9gsu1a/thumbs_kpi_icon_bed_private_2VIbzju1PG.png/100x100_kpi_icon_bed_private_2VIbzju1PG.png.attrs
new file mode 100644
index 0000000..1d02c6f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/cx0odwshl9gsu1a/thumbs_kpi_icon_bed_private_2VIbzju1PG.png/100x100_kpi_icon_bed_private_2VIbzju1PG.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"GMetWw6/PY6iyrOc64H5YA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2gh7n4ki449vga/kpi_icon_import_kTQxgtQnHo.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2gh7n4ki449vga/kpi_icon_import_kTQxgtQnHo.png
new file mode 100644
index 0000000..72e1c18
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2gh7n4ki449vga/kpi_icon_import_kTQxgtQnHo.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2gh7n4ki449vga/kpi_icon_import_kTQxgtQnHo.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2gh7n4ki449vga/kpi_icon_import_kTQxgtQnHo.png.attrs
new file mode 100644
index 0000000..e7874d0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2gh7n4ki449vga/kpi_icon_import_kTQxgtQnHo.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Import.png"},"md5":"2BDdMENO2Qr0frmP5x6KWQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2gh7n4ki449vga/thumbs_kpi_icon_import_kTQxgtQnHo.png/100x100_kpi_icon_import_kTQxgtQnHo.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2gh7n4ki449vga/thumbs_kpi_icon_import_kTQxgtQnHo.png/100x100_kpi_icon_import_kTQxgtQnHo.png
new file mode 100644
index 0000000..be588a5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2gh7n4ki449vga/thumbs_kpi_icon_import_kTQxgtQnHo.png/100x100_kpi_icon_import_kTQxgtQnHo.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2gh7n4ki449vga/thumbs_kpi_icon_import_kTQxgtQnHo.png/100x100_kpi_icon_import_kTQxgtQnHo.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2gh7n4ki449vga/thumbs_kpi_icon_import_kTQxgtQnHo.png/100x100_kpi_icon_import_kTQxgtQnHo.png.attrs
new file mode 100644
index 0000000..974e6f4
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2gh7n4ki449vga/thumbs_kpi_icon_import_kTQxgtQnHo.png/100x100_kpi_icon_import_kTQxgtQnHo.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zgwJqK1psQOQsoWeaubwUg=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/camel_bVRjP1EJwy.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2mxuh2glav14jl/camel_bVRjP1EJwy.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/camel_bVRjP1EJwy.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2mxuh2glav14jl/camel_bVRjP1EJwy.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/camel_bVRjP1EJwy.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2mxuh2glav14jl/camel_bVRjP1EJwy.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/camel_bVRjP1EJwy.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2mxuh2glav14jl/camel_bVRjP1EJwy.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/thumbs_camel_bVRjP1EJwy.png/100x100_camel_bVRjP1EJwy.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2mxuh2glav14jl/thumbs_camel_bVRjP1EJwy.png/100x100_camel_bVRjP1EJwy.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/thumbs_camel_bVRjP1EJwy.png/100x100_camel_bVRjP1EJwy.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2mxuh2glav14jl/thumbs_camel_bVRjP1EJwy.png/100x100_camel_bVRjP1EJwy.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/thumbs_camel_bVRjP1EJwy.png/100x100_camel_bVRjP1EJwy.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2mxuh2glav14jl/thumbs_camel_bVRjP1EJwy.png/100x100_camel_bVRjP1EJwy.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/d2mxuh2glav14jl/thumbs_camel_bVRjP1EJwy.png/100x100_camel_bVRjP1EJwy.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d2mxuh2glav14jl/thumbs_camel_bVRjP1EJwy.png/100x100_camel_bVRjP1EJwy.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/bull_hGrPoKPgbB.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d96kvnpwyuki9ky/bull_hGrPoKPgbB.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/bull_hGrPoKPgbB.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d96kvnpwyuki9ky/bull_hGrPoKPgbB.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/bull_hGrPoKPgbB.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d96kvnpwyuki9ky/bull_hGrPoKPgbB.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/bull_hGrPoKPgbB.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d96kvnpwyuki9ky/bull_hGrPoKPgbB.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/thumbs_bull_hGrPoKPgbB.png/100x100_bull_hGrPoKPgbB.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d96kvnpwyuki9ky/thumbs_bull_hGrPoKPgbB.png/100x100_bull_hGrPoKPgbB.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/thumbs_bull_hGrPoKPgbB.png/100x100_bull_hGrPoKPgbB.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d96kvnpwyuki9ky/thumbs_bull_hGrPoKPgbB.png/100x100_bull_hGrPoKPgbB.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/thumbs_bull_hGrPoKPgbB.png/100x100_bull_hGrPoKPgbB.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d96kvnpwyuki9ky/thumbs_bull_hGrPoKPgbB.png/100x100_bull_hGrPoKPgbB.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/d96kvnpwyuki9ky/thumbs_bull_hGrPoKPgbB.png/100x100_bull_hGrPoKPgbB.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/d96kvnpwyuki9ky/thumbs_bull_hGrPoKPgbB.png/100x100_bull_hGrPoKPgbB.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/e7fofeg715iw98m/kpi_icon_trade_value_Js6Egbylik.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/e7fofeg715iw98m/kpi_icon_trade_value_Js6Egbylik.png
new file mode 100644
index 0000000..28031f6
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/e7fofeg715iw98m/kpi_icon_trade_value_Js6Egbylik.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/e7fofeg715iw98m/kpi_icon_trade_value_Js6Egbylik.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/e7fofeg715iw98m/kpi_icon_trade_value_Js6Egbylik.png.attrs
new file mode 100644
index 0000000..c333cc4
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/e7fofeg715iw98m/kpi_icon_trade_value_Js6Egbylik.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-TradeValue.png"},"md5":"hIn1bZ53330VO9khqs8Z4w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/e7fofeg715iw98m/thumbs_kpi_icon_trade_value_Js6Egbylik.png/100x100_kpi_icon_trade_value_Js6Egbylik.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/e7fofeg715iw98m/thumbs_kpi_icon_trade_value_Js6Egbylik.png/100x100_kpi_icon_trade_value_Js6Egbylik.png
new file mode 100644
index 0000000..8f4db69
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/e7fofeg715iw98m/thumbs_kpi_icon_trade_value_Js6Egbylik.png/100x100_kpi_icon_trade_value_Js6Egbylik.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/e7fofeg715iw98m/thumbs_kpi_icon_trade_value_Js6Egbylik.png/100x100_kpi_icon_trade_value_Js6Egbylik.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/e7fofeg715iw98m/thumbs_kpi_icon_trade_value_Js6Egbylik.png/100x100_kpi_icon_trade_value_Js6Egbylik.png.attrs
new file mode 100644
index 0000000..d6185a8
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/e7fofeg715iw98m/thumbs_kpi_icon_trade_value_Js6Egbylik.png/100x100_kpi_icon_trade_value_Js6Egbylik.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"SItSYiwb1hbFexDTz1D5gg=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/energy_g1hHPVBT4Z.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/faokkiphyf3wkkr/energy_g1hHPVBT4Z.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/energy_g1hHPVBT4Z.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/faokkiphyf3wkkr/energy_g1hHPVBT4Z.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/energy_g1hHPVBT4Z.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/faokkiphyf3wkkr/energy_g1hHPVBT4Z.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/energy_g1hHPVBT4Z.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/faokkiphyf3wkkr/energy_g1hHPVBT4Z.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/thumbs_energy_g1hHPVBT4Z.png/100x100_energy_g1hHPVBT4Z.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/faokkiphyf3wkkr/thumbs_energy_g1hHPVBT4Z.png/100x100_energy_g1hHPVBT4Z.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/thumbs_energy_g1hHPVBT4Z.png/100x100_energy_g1hHPVBT4Z.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/faokkiphyf3wkkr/thumbs_energy_g1hHPVBT4Z.png/100x100_energy_g1hHPVBT4Z.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/thumbs_energy_g1hHPVBT4Z.png/100x100_energy_g1hHPVBT4Z.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/faokkiphyf3wkkr/thumbs_energy_g1hHPVBT4Z.png/100x100_energy_g1hHPVBT4Z.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/faokkiphyf3wkkr/thumbs_energy_g1hHPVBT4Z.png/100x100_energy_g1hHPVBT4Z.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/faokkiphyf3wkkr/thumbs_energy_g1hHPVBT4Z.png/100x100_energy_g1hHPVBT4Z.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/flxzwej41cv4jw1/kpi_icon_gdp_zILvwGXIFx.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/flxzwej41cv4jw1/kpi_icon_gdp_zILvwGXIFx.png
new file mode 100644
index 0000000..00a7246
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/flxzwej41cv4jw1/kpi_icon_gdp_zILvwGXIFx.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/flxzwej41cv4jw1/kpi_icon_gdp_zILvwGXIFx.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/flxzwej41cv4jw1/kpi_icon_gdp_zILvwGXIFx.png.attrs
new file mode 100644
index 0000000..aeed7a6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/flxzwej41cv4jw1/kpi_icon_gdp_zILvwGXIFx.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDP.png"},"md5":"GbjBCTBkQMjDA/ePurXQ4w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/flxzwej41cv4jw1/thumbs_kpi_icon_gdp_zILvwGXIFx.png/100x100_kpi_icon_gdp_zILvwGXIFx.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/flxzwej41cv4jw1/thumbs_kpi_icon_gdp_zILvwGXIFx.png/100x100_kpi_icon_gdp_zILvwGXIFx.png
new file mode 100644
index 0000000..1f4a9d5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/flxzwej41cv4jw1/thumbs_kpi_icon_gdp_zILvwGXIFx.png/100x100_kpi_icon_gdp_zILvwGXIFx.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/flxzwej41cv4jw1/thumbs_kpi_icon_gdp_zILvwGXIFx.png/100x100_kpi_icon_gdp_zILvwGXIFx.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/flxzwej41cv4jw1/thumbs_kpi_icon_gdp_zILvwGXIFx.png/100x100_kpi_icon_gdp_zILvwGXIFx.png.attrs
new file mode 100644
index 0000000..1c118ca
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/flxzwej41cv4jw1/thumbs_kpi_icon_gdp_zILvwGXIFx.png/100x100_kpi_icon_gdp_zILvwGXIFx.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"oR1IfXTRW05tuALKgeFtkw=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/goat_ZGl2IqsUkX.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/g47kh3w8yiukwow/goat_ZGl2IqsUkX.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/goat_ZGl2IqsUkX.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/g47kh3w8yiukwow/goat_ZGl2IqsUkX.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/goat_ZGl2IqsUkX.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/g47kh3w8yiukwow/goat_ZGl2IqsUkX.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/goat_ZGl2IqsUkX.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/g47kh3w8yiukwow/goat_ZGl2IqsUkX.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/thumbs_goat_ZGl2IqsUkX.png/100x100_goat_ZGl2IqsUkX.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/g47kh3w8yiukwow/thumbs_goat_ZGl2IqsUkX.png/100x100_goat_ZGl2IqsUkX.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/thumbs_goat_ZGl2IqsUkX.png/100x100_goat_ZGl2IqsUkX.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/g47kh3w8yiukwow/thumbs_goat_ZGl2IqsUkX.png/100x100_goat_ZGl2IqsUkX.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/thumbs_goat_ZGl2IqsUkX.png/100x100_goat_ZGl2IqsUkX.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/g47kh3w8yiukwow/thumbs_goat_ZGl2IqsUkX.png/100x100_goat_ZGl2IqsUkX.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/g47kh3w8yiukwow/thumbs_goat_ZGl2IqsUkX.png/100x100_goat_ZGl2IqsUkX.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/g47kh3w8yiukwow/thumbs_goat_ZGl2IqsUkX.png/100x100_goat_ZGl2IqsUkX.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/kpi_icon_labor_force_uKKCGatanK.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/kpi_icon_labor_force_uKKCGatanK.png
new file mode 100644
index 0000000..ee4a8e0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/kpi_icon_labor_force_uKKCGatanK.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/kpi_icon_labor_force_uKKCGatanK.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/kpi_icon_labor_force_uKKCGatanK.png.attrs
new file mode 100644
index 0000000..08bb83e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/kpi_icon_labor_force_uKKCGatanK.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LaborForce.png"},"md5":"EgSZx2XltAC7A2ZG7IvlfA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/thumbs_kpi_icon_labor_force_uKKCGatanK.png/100x100_kpi_icon_labor_force_uKKCGatanK.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/thumbs_kpi_icon_labor_force_uKKCGatanK.png/100x100_kpi_icon_labor_force_uKKCGatanK.png
new file mode 100644
index 0000000..7d9a723
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/thumbs_kpi_icon_labor_force_uKKCGatanK.png/100x100_kpi_icon_labor_force_uKKCGatanK.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/thumbs_kpi_icon_labor_force_uKKCGatanK.png/100x100_kpi_icon_labor_force_uKKCGatanK.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/thumbs_kpi_icon_labor_force_uKKCGatanK.png/100x100_kpi_icon_labor_force_uKKCGatanK.png.attrs
new file mode 100644
index 0000000..eb810e9
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gq4lqwmrkc7qd93/thumbs_kpi_icon_labor_force_uKKCGatanK.png/100x100_kpi_icon_labor_force_uKKCGatanK.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"LS77yczWzlVE2C6JWnPVGQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gukfkg1515lxhr7/kpi_icon_occupancy_rate_qlRTbLov7n.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gukfkg1515lxhr7/kpi_icon_occupancy_rate_qlRTbLov7n.png
new file mode 100644
index 0000000..4b5ae6b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gukfkg1515lxhr7/kpi_icon_occupancy_rate_qlRTbLov7n.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gukfkg1515lxhr7/kpi_icon_occupancy_rate_qlRTbLov7n.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gukfkg1515lxhr7/kpi_icon_occupancy_rate_qlRTbLov7n.png.attrs
new file mode 100644
index 0000000..b16288e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gukfkg1515lxhr7/kpi_icon_occupancy_rate_qlRTbLov7n.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OccupancyRate.png"},"md5":"Cs+jJNffYFWAhBqJwmKX0A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gukfkg1515lxhr7/thumbs_kpi_icon_occupancy_rate_qlRTbLov7n.png/100x100_kpi_icon_occupancy_rate_qlRTbLov7n.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gukfkg1515lxhr7/thumbs_kpi_icon_occupancy_rate_qlRTbLov7n.png/100x100_kpi_icon_occupancy_rate_qlRTbLov7n.png
new file mode 100644
index 0000000..1f6d56d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gukfkg1515lxhr7/thumbs_kpi_icon_occupancy_rate_qlRTbLov7n.png/100x100_kpi_icon_occupancy_rate_qlRTbLov7n.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gukfkg1515lxhr7/thumbs_kpi_icon_occupancy_rate_qlRTbLov7n.png/100x100_kpi_icon_occupancy_rate_qlRTbLov7n.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gukfkg1515lxhr7/thumbs_kpi_icon_occupancy_rate_qlRTbLov7n.png/100x100_kpi_icon_occupancy_rate_qlRTbLov7n.png.attrs
new file mode 100644
index 0000000..5da8ec2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/gukfkg1515lxhr7/thumbs_kpi_icon_occupancy_rate_qlRTbLov7n.png/100x100_kpi_icon_occupancy_rate_qlRTbLov7n.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"U+jFTo4vOOwg1q6sg8TA+A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/h18rsp3wepi7tml/kpi_icon_gov_centers_1fNLSzuM1I.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/h18rsp3wepi7tml/kpi_icon_gov_centers_1fNLSzuM1I.png
new file mode 100644
index 0000000..90d768e
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/h18rsp3wepi7tml/kpi_icon_gov_centers_1fNLSzuM1I.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/h18rsp3wepi7tml/kpi_icon_gov_centers_1fNLSzuM1I.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/h18rsp3wepi7tml/kpi_icon_gov_centers_1fNLSzuM1I.png.attrs
new file mode 100644
index 0000000..58eafcd
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/h18rsp3wepi7tml/kpi_icon_gov_centers_1fNLSzuM1I.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GovCenters.png"},"md5":"+otxpA2z8F/exzFdk/glew=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/h18rsp3wepi7tml/thumbs_kpi_icon_gov_centers_1fNLSzuM1I.png/100x100_kpi_icon_gov_centers_1fNLSzuM1I.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/h18rsp3wepi7tml/thumbs_kpi_icon_gov_centers_1fNLSzuM1I.png/100x100_kpi_icon_gov_centers_1fNLSzuM1I.png
new file mode 100644
index 0000000..80d5ef3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/h18rsp3wepi7tml/thumbs_kpi_icon_gov_centers_1fNLSzuM1I.png/100x100_kpi_icon_gov_centers_1fNLSzuM1I.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/h18rsp3wepi7tml/thumbs_kpi_icon_gov_centers_1fNLSzuM1I.png/100x100_kpi_icon_gov_centers_1fNLSzuM1I.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/h18rsp3wepi7tml/thumbs_kpi_icon_gov_centers_1fNLSzuM1I.png/100x100_kpi_icon_gov_centers_1fNLSzuM1I.png.attrs
new file mode 100644
index 0000000..483174a
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/h18rsp3wepi7tml/thumbs_kpi_icon_gov_centers_1fNLSzuM1I.png/100x100_kpi_icon_gov_centers_1fNLSzuM1I.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"1XanNMPQCA19qiamtoH0FA=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/energy_hvh3Hfy8V6.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hqjk2045p3arj7u/energy_hvh3Hfy8V6.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/energy_hvh3Hfy8V6.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hqjk2045p3arj7u/energy_hvh3Hfy8V6.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/energy_hvh3Hfy8V6.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hqjk2045p3arj7u/energy_hvh3Hfy8V6.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/energy_hvh3Hfy8V6.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hqjk2045p3arj7u/energy_hvh3Hfy8V6.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/thumbs_energy_hvh3Hfy8V6.png/100x100_energy_hvh3Hfy8V6.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hqjk2045p3arj7u/thumbs_energy_hvh3Hfy8V6.png/100x100_energy_hvh3Hfy8V6.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/thumbs_energy_hvh3Hfy8V6.png/100x100_energy_hvh3Hfy8V6.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hqjk2045p3arj7u/thumbs_energy_hvh3Hfy8V6.png/100x100_energy_hvh3Hfy8V6.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/thumbs_energy_hvh3Hfy8V6.png/100x100_energy_hvh3Hfy8V6.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hqjk2045p3arj7u/thumbs_energy_hvh3Hfy8V6.png/100x100_energy_hvh3Hfy8V6.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/hqjk2045p3arj7u/thumbs_energy_hvh3Hfy8V6.png/100x100_energy_hvh3Hfy8V6.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hqjk2045p3arj7u/thumbs_energy_hvh3Hfy8V6.png/100x100_energy_hvh3Hfy8V6.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/consumption_uUPkJimaK2.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hx8ehw9my2isbcc/consumption_uUPkJimaK2.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/consumption_uUPkJimaK2.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hx8ehw9my2isbcc/consumption_uUPkJimaK2.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/consumption_uUPkJimaK2.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hx8ehw9my2isbcc/consumption_uUPkJimaK2.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/consumption_uUPkJimaK2.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hx8ehw9my2isbcc/consumption_uUPkJimaK2.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/thumbs_consumption_uUPkJimaK2.png/100x100_consumption_uUPkJimaK2.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hx8ehw9my2isbcc/thumbs_consumption_uUPkJimaK2.png/100x100_consumption_uUPkJimaK2.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/thumbs_consumption_uUPkJimaK2.png/100x100_consumption_uUPkJimaK2.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hx8ehw9my2isbcc/thumbs_consumption_uUPkJimaK2.png/100x100_consumption_uUPkJimaK2.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/thumbs_consumption_uUPkJimaK2.png/100x100_consumption_uUPkJimaK2.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hx8ehw9my2isbcc/thumbs_consumption_uUPkJimaK2.png/100x100_consumption_uUPkJimaK2.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/hx8ehw9my2isbcc/thumbs_consumption_uUPkJimaK2.png/100x100_consumption_uUPkJimaK2.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hx8ehw9my2isbcc/thumbs_consumption_uUPkJimaK2.png/100x100_consumption_uUPkJimaK2.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/desalinated_water_production_eMSaXp5Oxm.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/desalinated_water_production_eMSaXp5Oxm.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/desalinated_water_production_eMSaXp5Oxm.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/desalinated_water_production_eMSaXp5Oxm.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/desalinated_water_production_eMSaXp5Oxm.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/desalinated_water_production_eMSaXp5Oxm.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/desalinated_water_production_eMSaXp5Oxm.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/desalinated_water_production_eMSaXp5Oxm.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/thumbs_desalinated_water_production_eMSaXp5Oxm.png/100x100_desalinated_water_production_eMSaXp5Oxm.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/thumbs_desalinated_water_production_eMSaXp5Oxm.png/100x100_desalinated_water_production_eMSaXp5Oxm.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/thumbs_desalinated_water_production_eMSaXp5Oxm.png/100x100_desalinated_water_production_eMSaXp5Oxm.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/thumbs_desalinated_water_production_eMSaXp5Oxm.png/100x100_desalinated_water_production_eMSaXp5Oxm.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/thumbs_desalinated_water_production_eMSaXp5Oxm.png/100x100_desalinated_water_production_eMSaXp5Oxm.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/thumbs_desalinated_water_production_eMSaXp5Oxm.png/100x100_desalinated_water_production_eMSaXp5Oxm.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/thumbs_desalinated_water_production_eMSaXp5Oxm.png/100x100_desalinated_water_production_eMSaXp5Oxm.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/hz0z6mprf9iv0qg/thumbs_desalinated_water_production_eMSaXp5Oxm.png/100x100_desalinated_water_production_eMSaXp5Oxm.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i47nzsfv835pqfk/female_DKjm0NYrvv.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i47nzsfv835pqfk/female_DKjm0NYrvv.png
new file mode 100644
index 0000000..e328a93
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i47nzsfv835pqfk/female_DKjm0NYrvv.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i47nzsfv835pqfk/female_DKjm0NYrvv.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i47nzsfv835pqfk/female_DKjm0NYrvv.png.attrs
new file mode 100644
index 0000000..3c217ec
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i47nzsfv835pqfk/female_DKjm0NYrvv.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"female.png"},"md5":"LHr3qNvXccxDzGNR1QwAiA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i47nzsfv835pqfk/thumbs_female_DKjm0NYrvv.png/100x100_female_DKjm0NYrvv.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i47nzsfv835pqfk/thumbs_female_DKjm0NYrvv.png/100x100_female_DKjm0NYrvv.png
new file mode 100644
index 0000000..4e9492f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i47nzsfv835pqfk/thumbs_female_DKjm0NYrvv.png/100x100_female_DKjm0NYrvv.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i47nzsfv835pqfk/thumbs_female_DKjm0NYrvv.png/100x100_female_DKjm0NYrvv.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i47nzsfv835pqfk/thumbs_female_DKjm0NYrvv.png/100x100_female_DKjm0NYrvv.png.attrs
new file mode 100644
index 0000000..72ab7b2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i47nzsfv835pqfk/thumbs_female_DKjm0NYrvv.png/100x100_female_DKjm0NYrvv.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"6qNv8XkjaWR5lPp91glyrw=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/consumption_TUai58TpIK.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i9aivjm7pgnvonk/consumption_TUai58TpIK.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/consumption_TUai58TpIK.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i9aivjm7pgnvonk/consumption_TUai58TpIK.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/consumption_TUai58TpIK.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i9aivjm7pgnvonk/consumption_TUai58TpIK.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/consumption_TUai58TpIK.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i9aivjm7pgnvonk/consumption_TUai58TpIK.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/thumbs_consumption_TUai58TpIK.png/100x100_consumption_TUai58TpIK.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i9aivjm7pgnvonk/thumbs_consumption_TUai58TpIK.png/100x100_consumption_TUai58TpIK.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/thumbs_consumption_TUai58TpIK.png/100x100_consumption_TUai58TpIK.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i9aivjm7pgnvonk/thumbs_consumption_TUai58TpIK.png/100x100_consumption_TUai58TpIK.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/thumbs_consumption_TUai58TpIK.png/100x100_consumption_TUai58TpIK.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i9aivjm7pgnvonk/thumbs_consumption_TUai58TpIK.png/100x100_consumption_TUai58TpIK.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/i9aivjm7pgnvonk/thumbs_consumption_TUai58TpIK.png/100x100_consumption_TUai58TpIK.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/i9aivjm7pgnvonk/thumbs_consumption_TUai58TpIK.png/100x100_consumption_TUai58TpIK.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/iepf18zruo9er2c/kpi_icon_import_IwQcEGj4mk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/iepf18zruo9er2c/kpi_icon_import_IwQcEGj4mk.png
new file mode 100644
index 0000000..72e1c18
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/iepf18zruo9er2c/kpi_icon_import_IwQcEGj4mk.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/iepf18zruo9er2c/kpi_icon_import_IwQcEGj4mk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/iepf18zruo9er2c/kpi_icon_import_IwQcEGj4mk.png.attrs
new file mode 100644
index 0000000..e7874d0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/iepf18zruo9er2c/kpi_icon_import_IwQcEGj4mk.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Import.png"},"md5":"2BDdMENO2Qr0frmP5x6KWQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/iepf18zruo9er2c/thumbs_kpi_icon_import_IwQcEGj4mk.png/100x100_kpi_icon_import_IwQcEGj4mk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/iepf18zruo9er2c/thumbs_kpi_icon_import_IwQcEGj4mk.png/100x100_kpi_icon_import_IwQcEGj4mk.png
new file mode 100644
index 0000000..be588a5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/iepf18zruo9er2c/thumbs_kpi_icon_import_IwQcEGj4mk.png/100x100_kpi_icon_import_IwQcEGj4mk.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/iepf18zruo9er2c/thumbs_kpi_icon_import_IwQcEGj4mk.png/100x100_kpi_icon_import_IwQcEGj4mk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/iepf18zruo9er2c/thumbs_kpi_icon_import_IwQcEGj4mk.png/100x100_kpi_icon_import_IwQcEGj4mk.png.attrs
new file mode 100644
index 0000000..974e6f4
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/iepf18zruo9er2c/thumbs_kpi_icon_import_IwQcEGj4mk.png/100x100_kpi_icon_import_IwQcEGj4mk.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zgwJqK1psQOQsoWeaubwUg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/jfq56s1xpqvslxf/kpi_icon_re_export_JeoKGOvw0E.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/jfq56s1xpqvslxf/kpi_icon_re_export_JeoKGOvw0E.png
new file mode 100644
index 0000000..2f2daf3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/jfq56s1xpqvslxf/kpi_icon_re_export_JeoKGOvw0E.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/jfq56s1xpqvslxf/kpi_icon_re_export_JeoKGOvw0E.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/jfq56s1xpqvslxf/kpi_icon_re_export_JeoKGOvw0E.png.attrs
new file mode 100644
index 0000000..efc1a5b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/jfq56s1xpqvslxf/kpi_icon_re_export_JeoKGOvw0E.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-ReExport.png"},"md5":"wuPAc6IENmbI4H4Y5iykQA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/jfq56s1xpqvslxf/thumbs_kpi_icon_re_export_JeoKGOvw0E.png/100x100_kpi_icon_re_export_JeoKGOvw0E.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/jfq56s1xpqvslxf/thumbs_kpi_icon_re_export_JeoKGOvw0E.png/100x100_kpi_icon_re_export_JeoKGOvw0E.png
new file mode 100644
index 0000000..6bf965d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/jfq56s1xpqvslxf/thumbs_kpi_icon_re_export_JeoKGOvw0E.png/100x100_kpi_icon_re_export_JeoKGOvw0E.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/jfq56s1xpqvslxf/thumbs_kpi_icon_re_export_JeoKGOvw0E.png/100x100_kpi_icon_re_export_JeoKGOvw0E.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/jfq56s1xpqvslxf/thumbs_kpi_icon_re_export_JeoKGOvw0E.png/100x100_kpi_icon_re_export_JeoKGOvw0E.png.attrs
new file mode 100644
index 0000000..670db8f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/jfq56s1xpqvslxf/thumbs_kpi_icon_re_export_JeoKGOvw0E.png/100x100_kpi_icon_re_export_JeoKGOvw0E.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"55tIdEz4EfKupJ7SzRKiNQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l0jryloa3y9z5jb/kpi_icon_export_whczwyLM3I.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l0jryloa3y9z5jb/kpi_icon_export_whczwyLM3I.png
new file mode 100644
index 0000000..212871f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l0jryloa3y9z5jb/kpi_icon_export_whczwyLM3I.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l0jryloa3y9z5jb/kpi_icon_export_whczwyLM3I.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l0jryloa3y9z5jb/kpi_icon_export_whczwyLM3I.png.attrs
new file mode 100644
index 0000000..8f5ba5d
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l0jryloa3y9z5jb/kpi_icon_export_whczwyLM3I.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Export.png"},"md5":"IPaPiLbUhghzbNypSqwzog=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l0jryloa3y9z5jb/thumbs_kpi_icon_export_whczwyLM3I.png/100x100_kpi_icon_export_whczwyLM3I.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l0jryloa3y9z5jb/thumbs_kpi_icon_export_whczwyLM3I.png/100x100_kpi_icon_export_whczwyLM3I.png
new file mode 100644
index 0000000..58f0a77
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l0jryloa3y9z5jb/thumbs_kpi_icon_export_whczwyLM3I.png/100x100_kpi_icon_export_whczwyLM3I.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l0jryloa3y9z5jb/thumbs_kpi_icon_export_whczwyLM3I.png/100x100_kpi_icon_export_whczwyLM3I.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l0jryloa3y9z5jb/thumbs_kpi_icon_export_whczwyLM3I.png/100x100_kpi_icon_export_whczwyLM3I.png.attrs
new file mode 100644
index 0000000..29b2c96
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l0jryloa3y9z5jb/thumbs_kpi_icon_export_whczwyLM3I.png/100x100_kpi_icon_export_whczwyLM3I.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"gRzHgaCqcAj686AvLdedFA=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/goat_OlgYYYEynr.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l89guqv1b8ykt5a/goat_OlgYYYEynr.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/goat_OlgYYYEynr.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l89guqv1b8ykt5a/goat_OlgYYYEynr.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/goat_OlgYYYEynr.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l89guqv1b8ykt5a/goat_OlgYYYEynr.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/goat_OlgYYYEynr.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l89guqv1b8ykt5a/goat_OlgYYYEynr.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/thumbs_goat_OlgYYYEynr.png/100x100_goat_OlgYYYEynr.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l89guqv1b8ykt5a/thumbs_goat_OlgYYYEynr.png/100x100_goat_OlgYYYEynr.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/thumbs_goat_OlgYYYEynr.png/100x100_goat_OlgYYYEynr.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l89guqv1b8ykt5a/thumbs_goat_OlgYYYEynr.png/100x100_goat_OlgYYYEynr.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/thumbs_goat_OlgYYYEynr.png/100x100_goat_OlgYYYEynr.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l89guqv1b8ykt5a/thumbs_goat_OlgYYYEynr.png/100x100_goat_OlgYYYEynr.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/l89guqv1b8ykt5a/thumbs_goat_OlgYYYEynr.png/100x100_goat_OlgYYYEynr.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l89guqv1b8ykt5a/thumbs_goat_OlgYYYEynr.png/100x100_goat_OlgYYYEynr.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l8kq2npe53p7xbe/kpi_icon_divorce_2rS2fEN5Pk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l8kq2npe53p7xbe/kpi_icon_divorce_2rS2fEN5Pk.png
new file mode 100644
index 0000000..0c18983
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l8kq2npe53p7xbe/kpi_icon_divorce_2rS2fEN5Pk.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l8kq2npe53p7xbe/kpi_icon_divorce_2rS2fEN5Pk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l8kq2npe53p7xbe/kpi_icon_divorce_2rS2fEN5Pk.png.attrs
new file mode 100644
index 0000000..9ebddb0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l8kq2npe53p7xbe/kpi_icon_divorce_2rS2fEN5Pk.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Divorce.png"},"md5":"R75apNv2eSwUNjOGSZOXEA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l8kq2npe53p7xbe/thumbs_kpi_icon_divorce_2rS2fEN5Pk.png/100x100_kpi_icon_divorce_2rS2fEN5Pk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l8kq2npe53p7xbe/thumbs_kpi_icon_divorce_2rS2fEN5Pk.png/100x100_kpi_icon_divorce_2rS2fEN5Pk.png
new file mode 100644
index 0000000..e727f3b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l8kq2npe53p7xbe/thumbs_kpi_icon_divorce_2rS2fEN5Pk.png/100x100_kpi_icon_divorce_2rS2fEN5Pk.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l8kq2npe53p7xbe/thumbs_kpi_icon_divorce_2rS2fEN5Pk.png/100x100_kpi_icon_divorce_2rS2fEN5Pk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l8kq2npe53p7xbe/thumbs_kpi_icon_divorce_2rS2fEN5Pk.png/100x100_kpi_icon_divorce_2rS2fEN5Pk.png.attrs
new file mode 100644
index 0000000..ac7b299
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/l8kq2npe53p7xbe/thumbs_kpi_icon_divorce_2rS2fEN5Pk.png/100x100_kpi_icon_divorce_2rS2fEN5Pk.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"1KWZl2RxG0Q5KtzgtdwnoQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lowdb4cktjyq85h/kpi_icon_gdpgrowth_MiYs0hrQDY.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lowdb4cktjyq85h/kpi_icon_gdpgrowth_MiYs0hrQDY.png
new file mode 100644
index 0000000..f5f673a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lowdb4cktjyq85h/kpi_icon_gdpgrowth_MiYs0hrQDY.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lowdb4cktjyq85h/kpi_icon_gdpgrowth_MiYs0hrQDY.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lowdb4cktjyq85h/kpi_icon_gdpgrowth_MiYs0hrQDY.png.attrs
new file mode 100644
index 0000000..30324ed
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lowdb4cktjyq85h/kpi_icon_gdpgrowth_MiYs0hrQDY.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDPGrowth.png"},"md5":"HqqwH2pjnCJ5qZ2nSzmtUw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lowdb4cktjyq85h/thumbs_kpi_icon_gdpgrowth_MiYs0hrQDY.png/100x100_kpi_icon_gdpgrowth_MiYs0hrQDY.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lowdb4cktjyq85h/thumbs_kpi_icon_gdpgrowth_MiYs0hrQDY.png/100x100_kpi_icon_gdpgrowth_MiYs0hrQDY.png
new file mode 100644
index 0000000..40ddf4f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lowdb4cktjyq85h/thumbs_kpi_icon_gdpgrowth_MiYs0hrQDY.png/100x100_kpi_icon_gdpgrowth_MiYs0hrQDY.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lowdb4cktjyq85h/thumbs_kpi_icon_gdpgrowth_MiYs0hrQDY.png/100x100_kpi_icon_gdpgrowth_MiYs0hrQDY.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lowdb4cktjyq85h/thumbs_kpi_icon_gdpgrowth_MiYs0hrQDY.png/100x100_kpi_icon_gdpgrowth_MiYs0hrQDY.png.attrs
new file mode 100644
index 0000000..edf40cf
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lowdb4cktjyq85h/thumbs_kpi_icon_gdpgrowth_MiYs0hrQDY.png/100x100_kpi_icon_gdpgrowth_MiYs0hrQDY.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zrI7ItL8NvCC4HA5egimuA=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/thumbs_total_area_U2Syp3qAAn.png/100x100_total_area_U2Syp3qAAn.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lxtb726zjb5q0ap/thumbs_total_area_U2Syp3qAAn.png/100x100_total_area_U2Syp3qAAn.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/thumbs_total_area_U2Syp3qAAn.png/100x100_total_area_U2Syp3qAAn.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lxtb726zjb5q0ap/thumbs_total_area_U2Syp3qAAn.png/100x100_total_area_U2Syp3qAAn.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/thumbs_total_area_U2Syp3qAAn.png/100x100_total_area_U2Syp3qAAn.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lxtb726zjb5q0ap/thumbs_total_area_U2Syp3qAAn.png/100x100_total_area_U2Syp3qAAn.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/thumbs_total_area_U2Syp3qAAn.png/100x100_total_area_U2Syp3qAAn.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lxtb726zjb5q0ap/thumbs_total_area_U2Syp3qAAn.png/100x100_total_area_U2Syp3qAAn.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/total_area_U2Syp3qAAn.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lxtb726zjb5q0ap/total_area_U2Syp3qAAn.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/total_area_U2Syp3qAAn.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lxtb726zjb5q0ap/total_area_U2Syp3qAAn.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/total_area_U2Syp3qAAn.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lxtb726zjb5q0ap/total_area_U2Syp3qAAn.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/lxtb726zjb5q0ap/total_area_U2Syp3qAAn.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/lxtb726zjb5q0ap/total_area_U2Syp3qAAn.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/thumbs_total_area_7e8aJuYmqO.png/100x100_total_area_7e8aJuYmqO.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/m25enqqajc23zzr/thumbs_total_area_7e8aJuYmqO.png/100x100_total_area_7e8aJuYmqO.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/thumbs_total_area_7e8aJuYmqO.png/100x100_total_area_7e8aJuYmqO.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/m25enqqajc23zzr/thumbs_total_area_7e8aJuYmqO.png/100x100_total_area_7e8aJuYmqO.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/thumbs_total_area_7e8aJuYmqO.png/100x100_total_area_7e8aJuYmqO.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/m25enqqajc23zzr/thumbs_total_area_7e8aJuYmqO.png/100x100_total_area_7e8aJuYmqO.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/thumbs_total_area_7e8aJuYmqO.png/100x100_total_area_7e8aJuYmqO.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/m25enqqajc23zzr/thumbs_total_area_7e8aJuYmqO.png/100x100_total_area_7e8aJuYmqO.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/total_area_7e8aJuYmqO.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/m25enqqajc23zzr/total_area_7e8aJuYmqO.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/total_area_7e8aJuYmqO.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/m25enqqajc23zzr/total_area_7e8aJuYmqO.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/total_area_7e8aJuYmqO.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/m25enqqajc23zzr/total_area_7e8aJuYmqO.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/m25enqqajc23zzr/total_area_7e8aJuYmqO.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/m25enqqajc23zzr/total_area_7e8aJuYmqO.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/consumption_F1sOkiGwrv.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/consumption_F1sOkiGwrv.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/consumption_F1sOkiGwrv.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/consumption_F1sOkiGwrv.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/consumption_F1sOkiGwrv.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/consumption_F1sOkiGwrv.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/consumption_F1sOkiGwrv.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/consumption_F1sOkiGwrv.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/thumbs_consumption_F1sOkiGwrv.png/100x100_consumption_F1sOkiGwrv.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/thumbs_consumption_F1sOkiGwrv.png/100x100_consumption_F1sOkiGwrv.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/thumbs_consumption_F1sOkiGwrv.png/100x100_consumption_F1sOkiGwrv.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/thumbs_consumption_F1sOkiGwrv.png/100x100_consumption_F1sOkiGwrv.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/thumbs_consumption_F1sOkiGwrv.png/100x100_consumption_F1sOkiGwrv.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/thumbs_consumption_F1sOkiGwrv.png/100x100_consumption_F1sOkiGwrv.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/thumbs_consumption_F1sOkiGwrv.png/100x100_consumption_F1sOkiGwrv.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/m5i3i5ilyeqoee7/thumbs_consumption_F1sOkiGwrv.png/100x100_consumption_F1sOkiGwrv.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/thumbs_total_area_RoOKDINtrb.png/100x100_total_area_RoOKDINtrb.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/thumbs_total_area_RoOKDINtrb.png/100x100_total_area_RoOKDINtrb.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/thumbs_total_area_RoOKDINtrb.png/100x100_total_area_RoOKDINtrb.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/thumbs_total_area_RoOKDINtrb.png/100x100_total_area_RoOKDINtrb.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/thumbs_total_area_RoOKDINtrb.png/100x100_total_area_RoOKDINtrb.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/thumbs_total_area_RoOKDINtrb.png/100x100_total_area_RoOKDINtrb.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/thumbs_total_area_RoOKDINtrb.png/100x100_total_area_RoOKDINtrb.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/thumbs_total_area_RoOKDINtrb.png/100x100_total_area_RoOKDINtrb.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/total_area_RoOKDINtrb.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/total_area_RoOKDINtrb.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/total_area_RoOKDINtrb.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/total_area_RoOKDINtrb.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/total_area_RoOKDINtrb.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/total_area_RoOKDINtrb.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/total_area_RoOKDINtrb.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ma7y0s2wq81b3cn/total_area_RoOKDINtrb.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/crops_0OKqB1Jp8T.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mf11009icc8uqxt/crops_0OKqB1Jp8T.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/crops_0OKqB1Jp8T.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mf11009icc8uqxt/crops_0OKqB1Jp8T.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/crops_0OKqB1Jp8T.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mf11009icc8uqxt/crops_0OKqB1Jp8T.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/crops_0OKqB1Jp8T.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mf11009icc8uqxt/crops_0OKqB1Jp8T.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/thumbs_crops_0OKqB1Jp8T.png/100x100_crops_0OKqB1Jp8T.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mf11009icc8uqxt/thumbs_crops_0OKqB1Jp8T.png/100x100_crops_0OKqB1Jp8T.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/thumbs_crops_0OKqB1Jp8T.png/100x100_crops_0OKqB1Jp8T.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mf11009icc8uqxt/thumbs_crops_0OKqB1Jp8T.png/100x100_crops_0OKqB1Jp8T.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/thumbs_crops_0OKqB1Jp8T.png/100x100_crops_0OKqB1Jp8T.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mf11009icc8uqxt/thumbs_crops_0OKqB1Jp8T.png/100x100_crops_0OKqB1Jp8T.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/mf11009icc8uqxt/thumbs_crops_0OKqB1Jp8T.png/100x100_crops_0OKqB1Jp8T.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mf11009icc8uqxt/thumbs_crops_0OKqB1Jp8T.png/100x100_crops_0OKqB1Jp8T.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/thumbs_total_area_q8SBaQuPjk.png/100x100_total_area_q8SBaQuPjk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/thumbs_total_area_q8SBaQuPjk.png/100x100_total_area_q8SBaQuPjk.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/thumbs_total_area_q8SBaQuPjk.png/100x100_total_area_q8SBaQuPjk.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/thumbs_total_area_q8SBaQuPjk.png/100x100_total_area_q8SBaQuPjk.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/thumbs_total_area_q8SBaQuPjk.png/100x100_total_area_q8SBaQuPjk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/thumbs_total_area_q8SBaQuPjk.png/100x100_total_area_q8SBaQuPjk.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/thumbs_total_area_q8SBaQuPjk.png/100x100_total_area_q8SBaQuPjk.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/thumbs_total_area_q8SBaQuPjk.png/100x100_total_area_q8SBaQuPjk.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/total_area_q8SBaQuPjk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/total_area_q8SBaQuPjk.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/total_area_q8SBaQuPjk.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/total_area_q8SBaQuPjk.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/total_area_q8SBaQuPjk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/total_area_q8SBaQuPjk.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/total_area_q8SBaQuPjk.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mlpga5cf9dz8mn0/total_area_q8SBaQuPjk.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/bull_GZ3yztOmLi.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mrupbzu9cm14qcr/bull_GZ3yztOmLi.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/bull_GZ3yztOmLi.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mrupbzu9cm14qcr/bull_GZ3yztOmLi.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/bull_GZ3yztOmLi.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mrupbzu9cm14qcr/bull_GZ3yztOmLi.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/bull_GZ3yztOmLi.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mrupbzu9cm14qcr/bull_GZ3yztOmLi.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/thumbs_bull_GZ3yztOmLi.png/100x100_bull_GZ3yztOmLi.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mrupbzu9cm14qcr/thumbs_bull_GZ3yztOmLi.png/100x100_bull_GZ3yztOmLi.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/thumbs_bull_GZ3yztOmLi.png/100x100_bull_GZ3yztOmLi.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mrupbzu9cm14qcr/thumbs_bull_GZ3yztOmLi.png/100x100_bull_GZ3yztOmLi.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/thumbs_bull_GZ3yztOmLi.png/100x100_bull_GZ3yztOmLi.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mrupbzu9cm14qcr/thumbs_bull_GZ3yztOmLi.png/100x100_bull_GZ3yztOmLi.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/mrupbzu9cm14qcr/thumbs_bull_GZ3yztOmLi.png/100x100_bull_GZ3yztOmLi.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mrupbzu9cm14qcr/thumbs_bull_GZ3yztOmLi.png/100x100_bull_GZ3yztOmLi.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/muw5w1i14cpm7om/kpi_icon_re_export_bqVzWlDxCX.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/muw5w1i14cpm7om/kpi_icon_re_export_bqVzWlDxCX.png
new file mode 100644
index 0000000..2f2daf3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/muw5w1i14cpm7om/kpi_icon_re_export_bqVzWlDxCX.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/muw5w1i14cpm7om/kpi_icon_re_export_bqVzWlDxCX.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/muw5w1i14cpm7om/kpi_icon_re_export_bqVzWlDxCX.png.attrs
new file mode 100644
index 0000000..efc1a5b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/muw5w1i14cpm7om/kpi_icon_re_export_bqVzWlDxCX.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-ReExport.png"},"md5":"wuPAc6IENmbI4H4Y5iykQA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/muw5w1i14cpm7om/thumbs_kpi_icon_re_export_bqVzWlDxCX.png/100x100_kpi_icon_re_export_bqVzWlDxCX.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/muw5w1i14cpm7om/thumbs_kpi_icon_re_export_bqVzWlDxCX.png/100x100_kpi_icon_re_export_bqVzWlDxCX.png
new file mode 100644
index 0000000..6bf965d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/muw5w1i14cpm7om/thumbs_kpi_icon_re_export_bqVzWlDxCX.png/100x100_kpi_icon_re_export_bqVzWlDxCX.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/muw5w1i14cpm7om/thumbs_kpi_icon_re_export_bqVzWlDxCX.png/100x100_kpi_icon_re_export_bqVzWlDxCX.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/muw5w1i14cpm7om/thumbs_kpi_icon_re_export_bqVzWlDxCX.png/100x100_kpi_icon_re_export_bqVzWlDxCX.png.attrs
new file mode 100644
index 0000000..670db8f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/muw5w1i14cpm7om/thumbs_kpi_icon_re_export_bqVzWlDxCX.png/100x100_kpi_icon_re_export_bqVzWlDxCX.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"55tIdEz4EfKupJ7SzRKiNQ=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/environment_kMiY6H6pJI.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/environment_kMiY6H6pJI.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/environment_kMiY6H6pJI.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/environment_kMiY6H6pJI.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/environment_kMiY6H6pJI.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/environment_kMiY6H6pJI.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/environment_kMiY6H6pJI.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/environment_kMiY6H6pJI.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/thumbs_environment_kMiY6H6pJI.png/100x100_environment_kMiY6H6pJI.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/thumbs_environment_kMiY6H6pJI.png/100x100_environment_kMiY6H6pJI.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/thumbs_environment_kMiY6H6pJI.png/100x100_environment_kMiY6H6pJI.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/thumbs_environment_kMiY6H6pJI.png/100x100_environment_kMiY6H6pJI.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/thumbs_environment_kMiY6H6pJI.png/100x100_environment_kMiY6H6pJI.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/thumbs_environment_kMiY6H6pJI.png/100x100_environment_kMiY6H6pJI.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/thumbs_environment_kMiY6H6pJI.png/100x100_environment_kMiY6H6pJI.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/mv9yjc5h07sjb6w/thumbs_environment_kMiY6H6pJI.png/100x100_environment_kMiY6H6pJI.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n37b92fml50ezxm/kpi_icon_value_added_Pebtpn1Mwr.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n37b92fml50ezxm/kpi_icon_value_added_Pebtpn1Mwr.png
new file mode 100644
index 0000000..9761a09
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n37b92fml50ezxm/kpi_icon_value_added_Pebtpn1Mwr.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n37b92fml50ezxm/kpi_icon_value_added_Pebtpn1Mwr.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n37b92fml50ezxm/kpi_icon_value_added_Pebtpn1Mwr.png.attrs
new file mode 100644
index 0000000..5b9b65f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n37b92fml50ezxm/kpi_icon_value_added_Pebtpn1Mwr.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-ValueAdded.png"},"md5":"ODLB/T7aI6UKdqsOsETFPA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n37b92fml50ezxm/thumbs_kpi_icon_value_added_Pebtpn1Mwr.png/100x100_kpi_icon_value_added_Pebtpn1Mwr.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n37b92fml50ezxm/thumbs_kpi_icon_value_added_Pebtpn1Mwr.png/100x100_kpi_icon_value_added_Pebtpn1Mwr.png
new file mode 100644
index 0000000..3686884
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n37b92fml50ezxm/thumbs_kpi_icon_value_added_Pebtpn1Mwr.png/100x100_kpi_icon_value_added_Pebtpn1Mwr.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n37b92fml50ezxm/thumbs_kpi_icon_value_added_Pebtpn1Mwr.png/100x100_kpi_icon_value_added_Pebtpn1Mwr.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n37b92fml50ezxm/thumbs_kpi_icon_value_added_Pebtpn1Mwr.png/100x100_kpi_icon_value_added_Pebtpn1Mwr.png.attrs
new file mode 100644
index 0000000..0c3ba02
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n37b92fml50ezxm/thumbs_kpi_icon_value_added_Pebtpn1Mwr.png/100x100_kpi_icon_value_added_Pebtpn1Mwr.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"wNOZfj/MY06Twl57Udm1tw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/kpi_icon_aircraft_movement_uOWOiKIaDZ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/kpi_icon_aircraft_movement_uOWOiKIaDZ.png
new file mode 100644
index 0000000..41dcf9b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/kpi_icon_aircraft_movement_uOWOiKIaDZ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/kpi_icon_aircraft_movement_uOWOiKIaDZ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/kpi_icon_aircraft_movement_uOWOiKIaDZ.png.attrs
new file mode 100644
index 0000000..0b6b3aa
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/kpi_icon_aircraft_movement_uOWOiKIaDZ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-AircraftMovement.png"},"md5":"oxc2jPLYObQV+uamwc28HQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/thumbs_kpi_icon_aircraft_movement_uOWOiKIaDZ.png/100x100_kpi_icon_aircraft_movement_uOWOiKIaDZ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/thumbs_kpi_icon_aircraft_movement_uOWOiKIaDZ.png/100x100_kpi_icon_aircraft_movement_uOWOiKIaDZ.png
new file mode 100644
index 0000000..8966d44
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/thumbs_kpi_icon_aircraft_movement_uOWOiKIaDZ.png/100x100_kpi_icon_aircraft_movement_uOWOiKIaDZ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/thumbs_kpi_icon_aircraft_movement_uOWOiKIaDZ.png/100x100_kpi_icon_aircraft_movement_uOWOiKIaDZ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/thumbs_kpi_icon_aircraft_movement_uOWOiKIaDZ.png/100x100_kpi_icon_aircraft_movement_uOWOiKIaDZ.png.attrs
new file mode 100644
index 0000000..a36998c
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/n6hyf0t9s4bsc47/thumbs_kpi_icon_aircraft_movement_uOWOiKIaDZ.png/100x100_kpi_icon_aircraft_movement_uOWOiKIaDZ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"z8aXJVHuOPFjdbIhL/TvAA=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/naf2vydg57onufc/environment_zjJdGQhVMT.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/naf2vydg57onufc/environment_zjJdGQhVMT.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/naf2vydg57onufc/environment_zjJdGQhVMT.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/naf2vydg57onufc/environment_zjJdGQhVMT.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/naf2vydg57onufc/environment_zjJdGQhVMT.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/naf2vydg57onufc/environment_zjJdGQhVMT.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/naf2vydg57onufc/environment_zjJdGQhVMT.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/naf2vydg57onufc/environment_zjJdGQhVMT.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/naf2vydg57onufc/thumbs_environment_zjJdGQhVMT.png/100x100_environment_zjJdGQhVMT.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/naf2vydg57onufc/thumbs_environment_zjJdGQhVMT.png/100x100_environment_zjJdGQhVMT.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/naf2vydg57onufc/thumbs_environment_zjJdGQhVMT.png/100x100_environment_zjJdGQhVMT.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/naf2vydg57onufc/thumbs_environment_zjJdGQhVMT.png/100x100_environment_zjJdGQhVMT.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/naf2vydg57onufc/thumbs_environment_zjJdGQhVMT.png/100x100_environment_zjJdGQhVMT.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/naf2vydg57onufc/thumbs_environment_zjJdGQhVMT.png/100x100_environment_zjJdGQhVMT.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/naf2vydg57onufc/thumbs_environment_zjJdGQhVMT.png/100x100_environment_zjJdGQhVMT.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/naf2vydg57onufc/thumbs_environment_zjJdGQhVMT.png/100x100_environment_zjJdGQhVMT.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/najrq60z581ol7l/desalinated_water_production_k0LEj9CGl1.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/najrq60z581ol7l/desalinated_water_production_k0LEj9CGl1.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/najrq60z581ol7l/desalinated_water_production_k0LEj9CGl1.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/najrq60z581ol7l/desalinated_water_production_k0LEj9CGl1.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/najrq60z581ol7l/desalinated_water_production_k0LEj9CGl1.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/najrq60z581ol7l/desalinated_water_production_k0LEj9CGl1.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/najrq60z581ol7l/desalinated_water_production_k0LEj9CGl1.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/najrq60z581ol7l/desalinated_water_production_k0LEj9CGl1.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/najrq60z581ol7l/thumbs_desalinated_water_production_k0LEj9CGl1.png/100x100_desalinated_water_production_k0LEj9CGl1.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/najrq60z581ol7l/thumbs_desalinated_water_production_k0LEj9CGl1.png/100x100_desalinated_water_production_k0LEj9CGl1.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/najrq60z581ol7l/thumbs_desalinated_water_production_k0LEj9CGl1.png/100x100_desalinated_water_production_k0LEj9CGl1.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/najrq60z581ol7l/thumbs_desalinated_water_production_k0LEj9CGl1.png/100x100_desalinated_water_production_k0LEj9CGl1.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/najrq60z581ol7l/thumbs_desalinated_water_production_k0LEj9CGl1.png/100x100_desalinated_water_production_k0LEj9CGl1.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/najrq60z581ol7l/thumbs_desalinated_water_production_k0LEj9CGl1.png/100x100_desalinated_water_production_k0LEj9CGl1.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/najrq60z581ol7l/thumbs_desalinated_water_production_k0LEj9CGl1.png/100x100_desalinated_water_production_k0LEj9CGl1.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/najrq60z581ol7l/thumbs_desalinated_water_production_k0LEj9CGl1.png/100x100_desalinated_water_production_k0LEj9CGl1.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/consumption_growth_eq7AbWFSKi.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nm3exas40ceg8x8/consumption_growth_eq7AbWFSKi.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/consumption_growth_eq7AbWFSKi.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nm3exas40ceg8x8/consumption_growth_eq7AbWFSKi.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/consumption_growth_eq7AbWFSKi.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nm3exas40ceg8x8/consumption_growth_eq7AbWFSKi.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/consumption_growth_eq7AbWFSKi.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nm3exas40ceg8x8/consumption_growth_eq7AbWFSKi.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/thumbs_consumption_growth_eq7AbWFSKi.png/100x100_consumption_growth_eq7AbWFSKi.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nm3exas40ceg8x8/thumbs_consumption_growth_eq7AbWFSKi.png/100x100_consumption_growth_eq7AbWFSKi.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/thumbs_consumption_growth_eq7AbWFSKi.png/100x100_consumption_growth_eq7AbWFSKi.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nm3exas40ceg8x8/thumbs_consumption_growth_eq7AbWFSKi.png/100x100_consumption_growth_eq7AbWFSKi.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/thumbs_consumption_growth_eq7AbWFSKi.png/100x100_consumption_growth_eq7AbWFSKi.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nm3exas40ceg8x8/thumbs_consumption_growth_eq7AbWFSKi.png/100x100_consumption_growth_eq7AbWFSKi.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/nm3exas40ceg8x8/thumbs_consumption_growth_eq7AbWFSKi.png/100x100_consumption_growth_eq7AbWFSKi.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nm3exas40ceg8x8/thumbs_consumption_growth_eq7AbWFSKi.png/100x100_consumption_growth_eq7AbWFSKi.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/kpi_icon_value_added_BY4k5ioxxq.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/kpi_icon_value_added_BY4k5ioxxq.png
new file mode 100644
index 0000000..9761a09
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/kpi_icon_value_added_BY4k5ioxxq.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/kpi_icon_value_added_BY4k5ioxxq.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/kpi_icon_value_added_BY4k5ioxxq.png.attrs
new file mode 100644
index 0000000..5b9b65f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/kpi_icon_value_added_BY4k5ioxxq.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-ValueAdded.png"},"md5":"ODLB/T7aI6UKdqsOsETFPA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/thumbs_kpi_icon_value_added_BY4k5ioxxq.png/100x100_kpi_icon_value_added_BY4k5ioxxq.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/thumbs_kpi_icon_value_added_BY4k5ioxxq.png/100x100_kpi_icon_value_added_BY4k5ioxxq.png
new file mode 100644
index 0000000..3686884
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/thumbs_kpi_icon_value_added_BY4k5ioxxq.png/100x100_kpi_icon_value_added_BY4k5ioxxq.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/thumbs_kpi_icon_value_added_BY4k5ioxxq.png/100x100_kpi_icon_value_added_BY4k5ioxxq.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/thumbs_kpi_icon_value_added_BY4k5ioxxq.png/100x100_kpi_icon_value_added_BY4k5ioxxq.png.attrs
new file mode 100644
index 0000000..0c3ba02
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nmdgpffhz7kvgbw/thumbs_kpi_icon_value_added_BY4k5ioxxq.png/100x100_kpi_icon_value_added_BY4k5ioxxq.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"wNOZfj/MY06Twl57Udm1tw=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/goat_UB1LaBiXBr.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nxxguwzf1yq0o69/goat_UB1LaBiXBr.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/goat_UB1LaBiXBr.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nxxguwzf1yq0o69/goat_UB1LaBiXBr.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/goat_UB1LaBiXBr.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nxxguwzf1yq0o69/goat_UB1LaBiXBr.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/goat_UB1LaBiXBr.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nxxguwzf1yq0o69/goat_UB1LaBiXBr.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/thumbs_goat_UB1LaBiXBr.png/100x100_goat_UB1LaBiXBr.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nxxguwzf1yq0o69/thumbs_goat_UB1LaBiXBr.png/100x100_goat_UB1LaBiXBr.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/thumbs_goat_UB1LaBiXBr.png/100x100_goat_UB1LaBiXBr.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nxxguwzf1yq0o69/thumbs_goat_UB1LaBiXBr.png/100x100_goat_UB1LaBiXBr.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/thumbs_goat_UB1LaBiXBr.png/100x100_goat_UB1LaBiXBr.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nxxguwzf1yq0o69/thumbs_goat_UB1LaBiXBr.png/100x100_goat_UB1LaBiXBr.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/nxxguwzf1yq0o69/thumbs_goat_UB1LaBiXBr.png/100x100_goat_UB1LaBiXBr.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/nxxguwzf1yq0o69/thumbs_goat_UB1LaBiXBr.png/100x100_goat_UB1LaBiXBr.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o0c56h2b23ee2n3/kpi_icon_labor_force_bwlj0nrvk2.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o0c56h2b23ee2n3/kpi_icon_labor_force_bwlj0nrvk2.png
new file mode 100644
index 0000000..ee4a8e0
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o0c56h2b23ee2n3/kpi_icon_labor_force_bwlj0nrvk2.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o0c56h2b23ee2n3/kpi_icon_labor_force_bwlj0nrvk2.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o0c56h2b23ee2n3/kpi_icon_labor_force_bwlj0nrvk2.png.attrs
new file mode 100644
index 0000000..08bb83e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o0c56h2b23ee2n3/kpi_icon_labor_force_bwlj0nrvk2.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-LaborForce.png"},"md5":"EgSZx2XltAC7A2ZG7IvlfA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o0c56h2b23ee2n3/thumbs_kpi_icon_labor_force_bwlj0nrvk2.png/100x100_kpi_icon_labor_force_bwlj0nrvk2.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o0c56h2b23ee2n3/thumbs_kpi_icon_labor_force_bwlj0nrvk2.png/100x100_kpi_icon_labor_force_bwlj0nrvk2.png
new file mode 100644
index 0000000..7d9a723
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o0c56h2b23ee2n3/thumbs_kpi_icon_labor_force_bwlj0nrvk2.png/100x100_kpi_icon_labor_force_bwlj0nrvk2.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o0c56h2b23ee2n3/thumbs_kpi_icon_labor_force_bwlj0nrvk2.png/100x100_kpi_icon_labor_force_bwlj0nrvk2.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o0c56h2b23ee2n3/thumbs_kpi_icon_labor_force_bwlj0nrvk2.png/100x100_kpi_icon_labor_force_bwlj0nrvk2.png.attrs
new file mode 100644
index 0000000..eb810e9
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o0c56h2b23ee2n3/thumbs_kpi_icon_labor_force_bwlj0nrvk2.png/100x100_kpi_icon_labor_force_bwlj0nrvk2.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"LS77yczWzlVE2C6JWnPVGQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/kpi_icon_re_export_SWDVYMgk0i.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/kpi_icon_re_export_SWDVYMgk0i.png
new file mode 100644
index 0000000..2f2daf3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/kpi_icon_re_export_SWDVYMgk0i.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/kpi_icon_re_export_SWDVYMgk0i.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/kpi_icon_re_export_SWDVYMgk0i.png.attrs
new file mode 100644
index 0000000..efc1a5b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/kpi_icon_re_export_SWDVYMgk0i.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-ReExport.png"},"md5":"wuPAc6IENmbI4H4Y5iykQA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/thumbs_kpi_icon_re_export_SWDVYMgk0i.png/100x100_kpi_icon_re_export_SWDVYMgk0i.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/thumbs_kpi_icon_re_export_SWDVYMgk0i.png/100x100_kpi_icon_re_export_SWDVYMgk0i.png
new file mode 100644
index 0000000..6bf965d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/thumbs_kpi_icon_re_export_SWDVYMgk0i.png/100x100_kpi_icon_re_export_SWDVYMgk0i.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/thumbs_kpi_icon_re_export_SWDVYMgk0i.png/100x100_kpi_icon_re_export_SWDVYMgk0i.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/thumbs_kpi_icon_re_export_SWDVYMgk0i.png/100x100_kpi_icon_re_export_SWDVYMgk0i.png.attrs
new file mode 100644
index 0000000..670db8f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o2gcnjgvivd9wo8/thumbs_kpi_icon_re_export_SWDVYMgk0i.png/100x100_kpi_icon_re_export_SWDVYMgk0i.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"55tIdEz4EfKupJ7SzRKiNQ=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/crops_DCoPsGT1Sz.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o3f5aynkwu4j06l/crops_DCoPsGT1Sz.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/crops_DCoPsGT1Sz.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o3f5aynkwu4j06l/crops_DCoPsGT1Sz.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/crops_DCoPsGT1Sz.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o3f5aynkwu4j06l/crops_DCoPsGT1Sz.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/crops_DCoPsGT1Sz.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o3f5aynkwu4j06l/crops_DCoPsGT1Sz.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/thumbs_crops_DCoPsGT1Sz.png/100x100_crops_DCoPsGT1Sz.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o3f5aynkwu4j06l/thumbs_crops_DCoPsGT1Sz.png/100x100_crops_DCoPsGT1Sz.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/thumbs_crops_DCoPsGT1Sz.png/100x100_crops_DCoPsGT1Sz.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o3f5aynkwu4j06l/thumbs_crops_DCoPsGT1Sz.png/100x100_crops_DCoPsGT1Sz.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/thumbs_crops_DCoPsGT1Sz.png/100x100_crops_DCoPsGT1Sz.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o3f5aynkwu4j06l/thumbs_crops_DCoPsGT1Sz.png/100x100_crops_DCoPsGT1Sz.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/o3f5aynkwu4j06l/thumbs_crops_DCoPsGT1Sz.png/100x100_crops_DCoPsGT1Sz.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/o3f5aynkwu4j06l/thumbs_crops_DCoPsGT1Sz.png/100x100_crops_DCoPsGT1Sz.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/oa0rk7ggqsicms0/group_175_2_6mgIHkisVr.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/oa0rk7ggqsicms0/group_175_2_6mgIHkisVr.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/oa0rk7ggqsicms0/group_175_2_6mgIHkisVr.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/oa0rk7ggqsicms0/group_175_2_6mgIHkisVr.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/oa0rk7ggqsicms0/group_175_2_6mgIHkisVr.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/oa0rk7ggqsicms0/group_175_2_6mgIHkisVr.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/oa0rk7ggqsicms0/group_175_2_6mgIHkisVr.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/oa0rk7ggqsicms0/group_175_2_6mgIHkisVr.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/thumbs_total_area_Lujn2eXnm5.png/100x100_total_area_Lujn2eXnm5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/owcjwxp173rm2jo/thumbs_total_area_Lujn2eXnm5.png/100x100_total_area_Lujn2eXnm5.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/thumbs_total_area_Lujn2eXnm5.png/100x100_total_area_Lujn2eXnm5.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/owcjwxp173rm2jo/thumbs_total_area_Lujn2eXnm5.png/100x100_total_area_Lujn2eXnm5.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/thumbs_total_area_Lujn2eXnm5.png/100x100_total_area_Lujn2eXnm5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/owcjwxp173rm2jo/thumbs_total_area_Lujn2eXnm5.png/100x100_total_area_Lujn2eXnm5.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/thumbs_total_area_Lujn2eXnm5.png/100x100_total_area_Lujn2eXnm5.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/owcjwxp173rm2jo/thumbs_total_area_Lujn2eXnm5.png/100x100_total_area_Lujn2eXnm5.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/total_area_Lujn2eXnm5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/owcjwxp173rm2jo/total_area_Lujn2eXnm5.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/total_area_Lujn2eXnm5.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/owcjwxp173rm2jo/total_area_Lujn2eXnm5.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/total_area_Lujn2eXnm5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/owcjwxp173rm2jo/total_area_Lujn2eXnm5.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/owcjwxp173rm2jo/total_area_Lujn2eXnm5.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/owcjwxp173rm2jo/total_area_Lujn2eXnm5.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pcszfiepzkivcee/kpi_icon_teachers_mH1fEvYOTb.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pcszfiepzkivcee/kpi_icon_teachers_mH1fEvYOTb.png
new file mode 100644
index 0000000..efba3c8
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pcszfiepzkivcee/kpi_icon_teachers_mH1fEvYOTb.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pcszfiepzkivcee/kpi_icon_teachers_mH1fEvYOTb.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pcszfiepzkivcee/kpi_icon_teachers_mH1fEvYOTb.png.attrs
new file mode 100644
index 0000000..a991aa1
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pcszfiepzkivcee/kpi_icon_teachers_mH1fEvYOTb.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Teachers.png"},"md5":"wSkcR/WX7aRYxtWCJ/pWWg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pcszfiepzkivcee/thumbs_kpi_icon_teachers_mH1fEvYOTb.png/100x100_kpi_icon_teachers_mH1fEvYOTb.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pcszfiepzkivcee/thumbs_kpi_icon_teachers_mH1fEvYOTb.png/100x100_kpi_icon_teachers_mH1fEvYOTb.png
new file mode 100644
index 0000000..490d58d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pcszfiepzkivcee/thumbs_kpi_icon_teachers_mH1fEvYOTb.png/100x100_kpi_icon_teachers_mH1fEvYOTb.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pcszfiepzkivcee/thumbs_kpi_icon_teachers_mH1fEvYOTb.png/100x100_kpi_icon_teachers_mH1fEvYOTb.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pcszfiepzkivcee/thumbs_kpi_icon_teachers_mH1fEvYOTb.png/100x100_kpi_icon_teachers_mH1fEvYOTb.png.attrs
new file mode 100644
index 0000000..e3af9f7
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pcszfiepzkivcee/thumbs_kpi_icon_teachers_mH1fEvYOTb.png/100x100_kpi_icon_teachers_mH1fEvYOTb.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"H7TF5gPbk1HznK0vDnnJVQ=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/goat_EYdecLXUrS.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pjycpk2ipbtr9md/goat_EYdecLXUrS.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/goat_EYdecLXUrS.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pjycpk2ipbtr9md/goat_EYdecLXUrS.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/goat_EYdecLXUrS.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pjycpk2ipbtr9md/goat_EYdecLXUrS.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/goat_EYdecLXUrS.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pjycpk2ipbtr9md/goat_EYdecLXUrS.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/thumbs_goat_EYdecLXUrS.png/100x100_goat_EYdecLXUrS.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pjycpk2ipbtr9md/thumbs_goat_EYdecLXUrS.png/100x100_goat_EYdecLXUrS.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/thumbs_goat_EYdecLXUrS.png/100x100_goat_EYdecLXUrS.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pjycpk2ipbtr9md/thumbs_goat_EYdecLXUrS.png/100x100_goat_EYdecLXUrS.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/thumbs_goat_EYdecLXUrS.png/100x100_goat_EYdecLXUrS.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pjycpk2ipbtr9md/thumbs_goat_EYdecLXUrS.png/100x100_goat_EYdecLXUrS.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/pjycpk2ipbtr9md/thumbs_goat_EYdecLXUrS.png/100x100_goat_EYdecLXUrS.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/pjycpk2ipbtr9md/thumbs_goat_EYdecLXUrS.png/100x100_goat_EYdecLXUrS.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/q3rjbu4kxrr639a/kpi_icon_health_beds_rre0lJiWWO.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/q3rjbu4kxrr639a/kpi_icon_health_beds_rre0lJiWWO.png
new file mode 100644
index 0000000..cb23c61
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/q3rjbu4kxrr639a/kpi_icon_health_beds_rre0lJiWWO.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/q3rjbu4kxrr639a/kpi_icon_health_beds_rre0lJiWWO.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/q3rjbu4kxrr639a/kpi_icon_health_beds_rre0lJiWWO.png.attrs
new file mode 100644
index 0000000..e35a60e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/q3rjbu4kxrr639a/kpi_icon_health_beds_rre0lJiWWO.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-HealthBeds.png"},"md5":"COfbvLbRb0sPXqb8YbcDuA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/q3rjbu4kxrr639a/thumbs_kpi_icon_health_beds_rre0lJiWWO.png/100x100_kpi_icon_health_beds_rre0lJiWWO.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/q3rjbu4kxrr639a/thumbs_kpi_icon_health_beds_rre0lJiWWO.png/100x100_kpi_icon_health_beds_rre0lJiWWO.png
new file mode 100644
index 0000000..b739a7c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/q3rjbu4kxrr639a/thumbs_kpi_icon_health_beds_rre0lJiWWO.png/100x100_kpi_icon_health_beds_rre0lJiWWO.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/q3rjbu4kxrr639a/thumbs_kpi_icon_health_beds_rre0lJiWWO.png/100x100_kpi_icon_health_beds_rre0lJiWWO.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/q3rjbu4kxrr639a/thumbs_kpi_icon_health_beds_rre0lJiWWO.png/100x100_kpi_icon_health_beds_rre0lJiWWO.png.attrs
new file mode 100644
index 0000000..56140f2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/q3rjbu4kxrr639a/thumbs_kpi_icon_health_beds_rre0lJiWWO.png/100x100_kpi_icon_health_beds_rre0lJiWWO.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"Uj6ias9IbNYcE4EAo0EG2w=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/bull_rwEmndswMH.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qbjxu0glrj884jk/bull_rwEmndswMH.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/bull_rwEmndswMH.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qbjxu0glrj884jk/bull_rwEmndswMH.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/bull_rwEmndswMH.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qbjxu0glrj884jk/bull_rwEmndswMH.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/bull_rwEmndswMH.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qbjxu0glrj884jk/bull_rwEmndswMH.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/thumbs_bull_rwEmndswMH.png/100x100_bull_rwEmndswMH.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qbjxu0glrj884jk/thumbs_bull_rwEmndswMH.png/100x100_bull_rwEmndswMH.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/thumbs_bull_rwEmndswMH.png/100x100_bull_rwEmndswMH.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qbjxu0glrj884jk/thumbs_bull_rwEmndswMH.png/100x100_bull_rwEmndswMH.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/thumbs_bull_rwEmndswMH.png/100x100_bull_rwEmndswMH.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qbjxu0glrj884jk/thumbs_bull_rwEmndswMH.png/100x100_bull_rwEmndswMH.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/qbjxu0glrj884jk/thumbs_bull_rwEmndswMH.png/100x100_bull_rwEmndswMH.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qbjxu0glrj884jk/thumbs_bull_rwEmndswMH.png/100x100_bull_rwEmndswMH.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qh19r7tr32lds0g/male_mQ23aQa3lQ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qh19r7tr32lds0g/male_mQ23aQa3lQ.png
new file mode 100644
index 0000000..3302645
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qh19r7tr32lds0g/male_mQ23aQa3lQ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qh19r7tr32lds0g/male_mQ23aQa3lQ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qh19r7tr32lds0g/male_mQ23aQa3lQ.png.attrs
new file mode 100644
index 0000000..8bfde7b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qh19r7tr32lds0g/male_mQ23aQa3lQ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"male.png"},"md5":"gq2puo4WHB/p8O/dYe6AZA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qh19r7tr32lds0g/thumbs_male_mQ23aQa3lQ.png/100x100_male_mQ23aQa3lQ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qh19r7tr32lds0g/thumbs_male_mQ23aQa3lQ.png/100x100_male_mQ23aQa3lQ.png
new file mode 100644
index 0000000..6807646
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qh19r7tr32lds0g/thumbs_male_mQ23aQa3lQ.png/100x100_male_mQ23aQa3lQ.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qh19r7tr32lds0g/thumbs_male_mQ23aQa3lQ.png/100x100_male_mQ23aQa3lQ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qh19r7tr32lds0g/thumbs_male_mQ23aQa3lQ.png/100x100_male_mQ23aQa3lQ.png.attrs
new file mode 100644
index 0000000..178e495
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qh19r7tr32lds0g/thumbs_male_mQ23aQa3lQ.png/100x100_male_mQ23aQa3lQ.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"Ua07BI7xJGVJ7eVStoTK3g=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/desalinated_water_production_meVBftpsPK.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qm7n1norghfqez4/desalinated_water_production_meVBftpsPK.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/desalinated_water_production_meVBftpsPK.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qm7n1norghfqez4/desalinated_water_production_meVBftpsPK.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/desalinated_water_production_meVBftpsPK.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qm7n1norghfqez4/desalinated_water_production_meVBftpsPK.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/desalinated_water_production_meVBftpsPK.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qm7n1norghfqez4/desalinated_water_production_meVBftpsPK.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/thumbs_desalinated_water_production_meVBftpsPK.png/100x100_desalinated_water_production_meVBftpsPK.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qm7n1norghfqez4/thumbs_desalinated_water_production_meVBftpsPK.png/100x100_desalinated_water_production_meVBftpsPK.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/thumbs_desalinated_water_production_meVBftpsPK.png/100x100_desalinated_water_production_meVBftpsPK.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qm7n1norghfqez4/thumbs_desalinated_water_production_meVBftpsPK.png/100x100_desalinated_water_production_meVBftpsPK.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/thumbs_desalinated_water_production_meVBftpsPK.png/100x100_desalinated_water_production_meVBftpsPK.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qm7n1norghfqez4/thumbs_desalinated_water_production_meVBftpsPK.png/100x100_desalinated_water_production_meVBftpsPK.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/qm7n1norghfqez4/thumbs_desalinated_water_production_meVBftpsPK.png/100x100_desalinated_water_production_meVBftpsPK.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qm7n1norghfqez4/thumbs_desalinated_water_production_meVBftpsPK.png/100x100_desalinated_water_production_meVBftpsPK.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/qw1sifd88w70jlb/group_175_2_th78zTSddP.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qw1sifd88w70jlb/group_175_2_th78zTSddP.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/qw1sifd88w70jlb/group_175_2_th78zTSddP.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qw1sifd88w70jlb/group_175_2_th78zTSddP.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/qw1sifd88w70jlb/group_175_2_th78zTSddP.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qw1sifd88w70jlb/group_175_2_th78zTSddP.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/qw1sifd88w70jlb/group_175_2_th78zTSddP.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qw1sifd88w70jlb/group_175_2_th78zTSddP.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/kpi_icon_gdpgrowth_VRpl2exFme.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/kpi_icon_gdpgrowth_VRpl2exFme.png
new file mode 100644
index 0000000..f5f673a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/kpi_icon_gdpgrowth_VRpl2exFme.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/kpi_icon_gdpgrowth_VRpl2exFme.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/kpi_icon_gdpgrowth_VRpl2exFme.png.attrs
new file mode 100644
index 0000000..30324ed
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/kpi_icon_gdpgrowth_VRpl2exFme.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDPGrowth.png"},"md5":"HqqwH2pjnCJ5qZ2nSzmtUw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/thumbs_kpi_icon_gdpgrowth_VRpl2exFme.png/100x100_kpi_icon_gdpgrowth_VRpl2exFme.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/thumbs_kpi_icon_gdpgrowth_VRpl2exFme.png/100x100_kpi_icon_gdpgrowth_VRpl2exFme.png
new file mode 100644
index 0000000..40ddf4f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/thumbs_kpi_icon_gdpgrowth_VRpl2exFme.png/100x100_kpi_icon_gdpgrowth_VRpl2exFme.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/thumbs_kpi_icon_gdpgrowth_VRpl2exFme.png/100x100_kpi_icon_gdpgrowth_VRpl2exFme.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/thumbs_kpi_icon_gdpgrowth_VRpl2exFme.png/100x100_kpi_icon_gdpgrowth_VRpl2exFme.png.attrs
new file mode 100644
index 0000000..edf40cf
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qwb9fdkk6nunfdy/thumbs_kpi_icon_gdpgrowth_VRpl2exFme.png/100x100_kpi_icon_gdpgrowth_VRpl2exFme.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zrI7ItL8NvCC4HA5egimuA=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/camel_gXrIAgyvbQ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/camel_gXrIAgyvbQ.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/camel_gXrIAgyvbQ.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/camel_gXrIAgyvbQ.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/camel_gXrIAgyvbQ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/camel_gXrIAgyvbQ.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/camel_gXrIAgyvbQ.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/camel_gXrIAgyvbQ.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/thumbs_camel_gXrIAgyvbQ.png/100x100_camel_gXrIAgyvbQ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/thumbs_camel_gXrIAgyvbQ.png/100x100_camel_gXrIAgyvbQ.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/thumbs_camel_gXrIAgyvbQ.png/100x100_camel_gXrIAgyvbQ.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/thumbs_camel_gXrIAgyvbQ.png/100x100_camel_gXrIAgyvbQ.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/thumbs_camel_gXrIAgyvbQ.png/100x100_camel_gXrIAgyvbQ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/thumbs_camel_gXrIAgyvbQ.png/100x100_camel_gXrIAgyvbQ.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/thumbs_camel_gXrIAgyvbQ.png/100x100_camel_gXrIAgyvbQ.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/qx6kwvkr3h0fskj/thumbs_camel_gXrIAgyvbQ.png/100x100_camel_gXrIAgyvbQ.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/consumption_cD0gvWK2EY.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rdtltu4n06894hf/consumption_cD0gvWK2EY.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/consumption_cD0gvWK2EY.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rdtltu4n06894hf/consumption_cD0gvWK2EY.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/consumption_cD0gvWK2EY.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rdtltu4n06894hf/consumption_cD0gvWK2EY.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/consumption_cD0gvWK2EY.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rdtltu4n06894hf/consumption_cD0gvWK2EY.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/thumbs_consumption_cD0gvWK2EY.png/100x100_consumption_cD0gvWK2EY.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rdtltu4n06894hf/thumbs_consumption_cD0gvWK2EY.png/100x100_consumption_cD0gvWK2EY.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/thumbs_consumption_cD0gvWK2EY.png/100x100_consumption_cD0gvWK2EY.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rdtltu4n06894hf/thumbs_consumption_cD0gvWK2EY.png/100x100_consumption_cD0gvWK2EY.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/thumbs_consumption_cD0gvWK2EY.png/100x100_consumption_cD0gvWK2EY.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rdtltu4n06894hf/thumbs_consumption_cD0gvWK2EY.png/100x100_consumption_cD0gvWK2EY.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/rdtltu4n06894hf/thumbs_consumption_cD0gvWK2EY.png/100x100_consumption_cD0gvWK2EY.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rdtltu4n06894hf/thumbs_consumption_cD0gvWK2EY.png/100x100_consumption_cD0gvWK2EY.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/crops_z1v2GX1V90.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rmetgz4jluu8rpk/crops_z1v2GX1V90.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/crops_z1v2GX1V90.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rmetgz4jluu8rpk/crops_z1v2GX1V90.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/crops_z1v2GX1V90.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rmetgz4jluu8rpk/crops_z1v2GX1V90.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/crops_z1v2GX1V90.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rmetgz4jluu8rpk/crops_z1v2GX1V90.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/thumbs_crops_z1v2GX1V90.png/100x100_crops_z1v2GX1V90.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rmetgz4jluu8rpk/thumbs_crops_z1v2GX1V90.png/100x100_crops_z1v2GX1V90.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/thumbs_crops_z1v2GX1V90.png/100x100_crops_z1v2GX1V90.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rmetgz4jluu8rpk/thumbs_crops_z1v2GX1V90.png/100x100_crops_z1v2GX1V90.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/thumbs_crops_z1v2GX1V90.png/100x100_crops_z1v2GX1V90.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rmetgz4jluu8rpk/thumbs_crops_z1v2GX1V90.png/100x100_crops_z1v2GX1V90.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/rmetgz4jluu8rpk/thumbs_crops_z1v2GX1V90.png/100x100_crops_z1v2GX1V90.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rmetgz4jluu8rpk/thumbs_crops_z1v2GX1V90.png/100x100_crops_z1v2GX1V90.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/consumption_kO6xjqizVL.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rtonb4l094g4v7p/consumption_kO6xjqizVL.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/consumption_kO6xjqizVL.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rtonb4l094g4v7p/consumption_kO6xjqizVL.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/consumption_kO6xjqizVL.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rtonb4l094g4v7p/consumption_kO6xjqizVL.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/consumption_kO6xjqizVL.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rtonb4l094g4v7p/consumption_kO6xjqizVL.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/thumbs_consumption_kO6xjqizVL.png/100x100_consumption_kO6xjqizVL.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rtonb4l094g4v7p/thumbs_consumption_kO6xjqizVL.png/100x100_consumption_kO6xjqizVL.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/thumbs_consumption_kO6xjqizVL.png/100x100_consumption_kO6xjqizVL.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rtonb4l094g4v7p/thumbs_consumption_kO6xjqizVL.png/100x100_consumption_kO6xjqizVL.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/thumbs_consumption_kO6xjqizVL.png/100x100_consumption_kO6xjqizVL.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rtonb4l094g4v7p/thumbs_consumption_kO6xjqizVL.png/100x100_consumption_kO6xjqizVL.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/rtonb4l094g4v7p/thumbs_consumption_kO6xjqizVL.png/100x100_consumption_kO6xjqizVL.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/rtonb4l094g4v7p/thumbs_consumption_kO6xjqizVL.png/100x100_consumption_kO6xjqizVL.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/s9a3g648hk6yqru/male_rAz6Z0f08h.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/s9a3g648hk6yqru/male_rAz6Z0f08h.png
new file mode 100644
index 0000000..3302645
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/s9a3g648hk6yqru/male_rAz6Z0f08h.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/s9a3g648hk6yqru/male_rAz6Z0f08h.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/s9a3g648hk6yqru/male_rAz6Z0f08h.png.attrs
new file mode 100644
index 0000000..8bfde7b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/s9a3g648hk6yqru/male_rAz6Z0f08h.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"male.png"},"md5":"gq2puo4WHB/p8O/dYe6AZA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/s9a3g648hk6yqru/thumbs_male_rAz6Z0f08h.png/100x100_male_rAz6Z0f08h.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/s9a3g648hk6yqru/thumbs_male_rAz6Z0f08h.png/100x100_male_rAz6Z0f08h.png
new file mode 100644
index 0000000..6807646
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/s9a3g648hk6yqru/thumbs_male_rAz6Z0f08h.png/100x100_male_rAz6Z0f08h.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/s9a3g648hk6yqru/thumbs_male_rAz6Z0f08h.png/100x100_male_rAz6Z0f08h.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/s9a3g648hk6yqru/thumbs_male_rAz6Z0f08h.png/100x100_male_rAz6Z0f08h.png.attrs
new file mode 100644
index 0000000..178e495
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/s9a3g648hk6yqru/thumbs_male_rAz6Z0f08h.png/100x100_male_rAz6Z0f08h.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"Ua07BI7xJGVJ7eVStoTK3g=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/seop21qs6f53q72/kpi_icon_hospitals_dD3FauYB1l.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/seop21qs6f53q72/kpi_icon_hospitals_dD3FauYB1l.png
new file mode 100644
index 0000000..3a5804c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/seop21qs6f53q72/kpi_icon_hospitals_dD3FauYB1l.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/seop21qs6f53q72/kpi_icon_hospitals_dD3FauYB1l.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/seop21qs6f53q72/kpi_icon_hospitals_dD3FauYB1l.png.attrs
new file mode 100644
index 0000000..15654dc
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/seop21qs6f53q72/kpi_icon_hospitals_dD3FauYB1l.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Hospitals.png"},"md5":"3i2EpU0/9rhb7NU2fxd8uw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/seop21qs6f53q72/thumbs_kpi_icon_hospitals_dD3FauYB1l.png/100x100_kpi_icon_hospitals_dD3FauYB1l.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/seop21qs6f53q72/thumbs_kpi_icon_hospitals_dD3FauYB1l.png/100x100_kpi_icon_hospitals_dD3FauYB1l.png
new file mode 100644
index 0000000..3f3cbdc
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/seop21qs6f53q72/thumbs_kpi_icon_hospitals_dD3FauYB1l.png/100x100_kpi_icon_hospitals_dD3FauYB1l.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/seop21qs6f53q72/thumbs_kpi_icon_hospitals_dD3FauYB1l.png/100x100_kpi_icon_hospitals_dD3FauYB1l.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/seop21qs6f53q72/thumbs_kpi_icon_hospitals_dD3FauYB1l.png/100x100_kpi_icon_hospitals_dD3FauYB1l.png.attrs
new file mode 100644
index 0000000..4c0b16c
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/seop21qs6f53q72/thumbs_kpi_icon_hospitals_dD3FauYB1l.png/100x100_kpi_icon_hospitals_dD3FauYB1l.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"N1oeIzqCbx0rsNo1PlpG/w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ss630rxt6oo4mno/male_NpYGUUpqWL.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ss630rxt6oo4mno/male_NpYGUUpqWL.png
new file mode 100644
index 0000000..3302645
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ss630rxt6oo4mno/male_NpYGUUpqWL.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ss630rxt6oo4mno/male_NpYGUUpqWL.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ss630rxt6oo4mno/male_NpYGUUpqWL.png.attrs
new file mode 100644
index 0000000..8bfde7b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ss630rxt6oo4mno/male_NpYGUUpqWL.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"male.png"},"md5":"gq2puo4WHB/p8O/dYe6AZA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ss630rxt6oo4mno/thumbs_male_NpYGUUpqWL.png/100x100_male_NpYGUUpqWL.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ss630rxt6oo4mno/thumbs_male_NpYGUUpqWL.png/100x100_male_NpYGUUpqWL.png
new file mode 100644
index 0000000..6807646
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ss630rxt6oo4mno/thumbs_male_NpYGUUpqWL.png/100x100_male_NpYGUUpqWL.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ss630rxt6oo4mno/thumbs_male_NpYGUUpqWL.png/100x100_male_NpYGUUpqWL.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ss630rxt6oo4mno/thumbs_male_NpYGUUpqWL.png/100x100_male_NpYGUUpqWL.png.attrs
new file mode 100644
index 0000000..178e495
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ss630rxt6oo4mno/thumbs_male_NpYGUUpqWL.png/100x100_male_NpYGUUpqWL.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"Ua07BI7xJGVJ7eVStoTK3g=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/kpi_icon_gdp_w6tmJ8zfvG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/kpi_icon_gdp_w6tmJ8zfvG.png
new file mode 100644
index 0000000..00a7246
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/kpi_icon_gdp_w6tmJ8zfvG.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/kpi_icon_gdp_w6tmJ8zfvG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/kpi_icon_gdp_w6tmJ8zfvG.png.attrs
new file mode 100644
index 0000000..aeed7a6
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/kpi_icon_gdp_w6tmJ8zfvG.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDP.png"},"md5":"GbjBCTBkQMjDA/ePurXQ4w=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/thumbs_kpi_icon_gdp_w6tmJ8zfvG.png/100x100_kpi_icon_gdp_w6tmJ8zfvG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/thumbs_kpi_icon_gdp_w6tmJ8zfvG.png/100x100_kpi_icon_gdp_w6tmJ8zfvG.png
new file mode 100644
index 0000000..1f4a9d5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/thumbs_kpi_icon_gdp_w6tmJ8zfvG.png/100x100_kpi_icon_gdp_w6tmJ8zfvG.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/thumbs_kpi_icon_gdp_w6tmJ8zfvG.png/100x100_kpi_icon_gdp_w6tmJ8zfvG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/thumbs_kpi_icon_gdp_w6tmJ8zfvG.png/100x100_kpi_icon_gdp_w6tmJ8zfvG.png.attrs
new file mode 100644
index 0000000..1c118ca
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ssn5mvjbvccc4ju/thumbs_kpi_icon_gdp_w6tmJ8zfvG.png/100x100_kpi_icon_gdp_w6tmJ8zfvG.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"oR1IfXTRW05tuALKgeFtkw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t0elca0sm9z7xkf/kpi_icon_he_student_female_JWpePy9LR1.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t0elca0sm9z7xkf/kpi_icon_he_student_female_JWpePy9LR1.png
new file mode 100644
index 0000000..b8424f5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t0elca0sm9z7xkf/kpi_icon_he_student_female_JWpePy9LR1.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t0elca0sm9z7xkf/kpi_icon_he_student_female_JWpePy9LR1.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t0elca0sm9z7xkf/kpi_icon_he_student_female_JWpePy9LR1.png.attrs
new file mode 100644
index 0000000..9bd8c82
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t0elca0sm9z7xkf/kpi_icon_he_student_female_JWpePy9LR1.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-HE-StudentFemale.png"},"md5":"ytsqBSoQ2v7iRq7VMVQ03g=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t0elca0sm9z7xkf/thumbs_kpi_icon_he_student_female_JWpePy9LR1.png/100x100_kpi_icon_he_student_female_JWpePy9LR1.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t0elca0sm9z7xkf/thumbs_kpi_icon_he_student_female_JWpePy9LR1.png/100x100_kpi_icon_he_student_female_JWpePy9LR1.png
new file mode 100644
index 0000000..57ce02a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t0elca0sm9z7xkf/thumbs_kpi_icon_he_student_female_JWpePy9LR1.png/100x100_kpi_icon_he_student_female_JWpePy9LR1.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t0elca0sm9z7xkf/thumbs_kpi_icon_he_student_female_JWpePy9LR1.png/100x100_kpi_icon_he_student_female_JWpePy9LR1.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t0elca0sm9z7xkf/thumbs_kpi_icon_he_student_female_JWpePy9LR1.png/100x100_kpi_icon_he_student_female_JWpePy9LR1.png.attrs
new file mode 100644
index 0000000..f166f85
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t0elca0sm9z7xkf/thumbs_kpi_icon_he_student_female_JWpePy9LR1.png/100x100_kpi_icon_he_student_female_JWpePy9LR1.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"CQa944XaylCnujDzVGYrqA=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/drops_bXu3ZiuqLc.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t2cjdoonzh66dms/drops_bXu3ZiuqLc.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/drops_bXu3ZiuqLc.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t2cjdoonzh66dms/drops_bXu3ZiuqLc.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/drops_bXu3ZiuqLc.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t2cjdoonzh66dms/drops_bXu3ZiuqLc.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/drops_bXu3ZiuqLc.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t2cjdoonzh66dms/drops_bXu3ZiuqLc.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/thumbs_drops_bXu3ZiuqLc.png/100x100_drops_bXu3ZiuqLc.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t2cjdoonzh66dms/thumbs_drops_bXu3ZiuqLc.png/100x100_drops_bXu3ZiuqLc.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/thumbs_drops_bXu3ZiuqLc.png/100x100_drops_bXu3ZiuqLc.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t2cjdoonzh66dms/thumbs_drops_bXu3ZiuqLc.png/100x100_drops_bXu3ZiuqLc.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/thumbs_drops_bXu3ZiuqLc.png/100x100_drops_bXu3ZiuqLc.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t2cjdoonzh66dms/thumbs_drops_bXu3ZiuqLc.png/100x100_drops_bXu3ZiuqLc.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/t2cjdoonzh66dms/thumbs_drops_bXu3ZiuqLc.png/100x100_drops_bXu3ZiuqLc.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/t2cjdoonzh66dms/thumbs_drops_bXu3ZiuqLc.png/100x100_drops_bXu3ZiuqLc.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/crops_1Z8SWak4Ix.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tfd1j1hbco58zxt/crops_1Z8SWak4Ix.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/crops_1Z8SWak4Ix.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tfd1j1hbco58zxt/crops_1Z8SWak4Ix.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/crops_1Z8SWak4Ix.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tfd1j1hbco58zxt/crops_1Z8SWak4Ix.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/crops_1Z8SWak4Ix.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tfd1j1hbco58zxt/crops_1Z8SWak4Ix.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/thumbs_crops_1Z8SWak4Ix.png/100x100_crops_1Z8SWak4Ix.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tfd1j1hbco58zxt/thumbs_crops_1Z8SWak4Ix.png/100x100_crops_1Z8SWak4Ix.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/thumbs_crops_1Z8SWak4Ix.png/100x100_crops_1Z8SWak4Ix.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tfd1j1hbco58zxt/thumbs_crops_1Z8SWak4Ix.png/100x100_crops_1Z8SWak4Ix.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/thumbs_crops_1Z8SWak4Ix.png/100x100_crops_1Z8SWak4Ix.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tfd1j1hbco58zxt/thumbs_crops_1Z8SWak4Ix.png/100x100_crops_1Z8SWak4Ix.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/tfd1j1hbco58zxt/thumbs_crops_1Z8SWak4Ix.png/100x100_crops_1Z8SWak4Ix.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tfd1j1hbco58zxt/thumbs_crops_1Z8SWak4Ix.png/100x100_crops_1Z8SWak4Ix.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/thumbs_total_area_ykFTkqp2or.png/100x100_total_area_ykFTkqp2or.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/thumbs_total_area_ykFTkqp2or.png/100x100_total_area_ykFTkqp2or.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/thumbs_total_area_ykFTkqp2or.png/100x100_total_area_ykFTkqp2or.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/thumbs_total_area_ykFTkqp2or.png/100x100_total_area_ykFTkqp2or.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/thumbs_total_area_ykFTkqp2or.png/100x100_total_area_ykFTkqp2or.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/thumbs_total_area_ykFTkqp2or.png/100x100_total_area_ykFTkqp2or.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/thumbs_total_area_ykFTkqp2or.png/100x100_total_area_ykFTkqp2or.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/thumbs_total_area_ykFTkqp2or.png/100x100_total_area_ykFTkqp2or.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/total_area_ykFTkqp2or.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/total_area_ykFTkqp2or.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/total_area_ykFTkqp2or.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/total_area_ykFTkqp2or.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/total_area_ykFTkqp2or.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/total_area_ykFTkqp2or.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/total_area_ykFTkqp2or.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tj0rwq2jd8wi0au/total_area_ykFTkqp2or.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tlmo1wf04k6cl81/kpi_icon_female_teachers_1DieLPh2pk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tlmo1wf04k6cl81/kpi_icon_female_teachers_1DieLPh2pk.png
new file mode 100644
index 0000000..1edf5ac
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tlmo1wf04k6cl81/kpi_icon_female_teachers_1DieLPh2pk.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tlmo1wf04k6cl81/kpi_icon_female_teachers_1DieLPh2pk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tlmo1wf04k6cl81/kpi_icon_female_teachers_1DieLPh2pk.png.attrs
new file mode 100644
index 0000000..b6d4638
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tlmo1wf04k6cl81/kpi_icon_female_teachers_1DieLPh2pk.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-FemaleTeachers.png"},"md5":"9eu9Miaf//Tk6Fv4CYeopg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tlmo1wf04k6cl81/thumbs_kpi_icon_female_teachers_1DieLPh2pk.png/100x100_kpi_icon_female_teachers_1DieLPh2pk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tlmo1wf04k6cl81/thumbs_kpi_icon_female_teachers_1DieLPh2pk.png/100x100_kpi_icon_female_teachers_1DieLPh2pk.png
new file mode 100644
index 0000000..5f137d5
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tlmo1wf04k6cl81/thumbs_kpi_icon_female_teachers_1DieLPh2pk.png/100x100_kpi_icon_female_teachers_1DieLPh2pk.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tlmo1wf04k6cl81/thumbs_kpi_icon_female_teachers_1DieLPh2pk.png/100x100_kpi_icon_female_teachers_1DieLPh2pk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tlmo1wf04k6cl81/thumbs_kpi_icon_female_teachers_1DieLPh2pk.png/100x100_kpi_icon_female_teachers_1DieLPh2pk.png.attrs
new file mode 100644
index 0000000..e26feb9
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tlmo1wf04k6cl81/thumbs_kpi_icon_female_teachers_1DieLPh2pk.png/100x100_kpi_icon_female_teachers_1DieLPh2pk.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"BuIehhKIVKJWUNlHJlHrQg=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/thumbs_total_area_AsN5t14mAQ.png/100x100_total_area_AsN5t14mAQ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tmnn2qyx094kz9u/thumbs_total_area_AsN5t14mAQ.png/100x100_total_area_AsN5t14mAQ.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/thumbs_total_area_AsN5t14mAQ.png/100x100_total_area_AsN5t14mAQ.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tmnn2qyx094kz9u/thumbs_total_area_AsN5t14mAQ.png/100x100_total_area_AsN5t14mAQ.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/thumbs_total_area_AsN5t14mAQ.png/100x100_total_area_AsN5t14mAQ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tmnn2qyx094kz9u/thumbs_total_area_AsN5t14mAQ.png/100x100_total_area_AsN5t14mAQ.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/thumbs_total_area_AsN5t14mAQ.png/100x100_total_area_AsN5t14mAQ.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tmnn2qyx094kz9u/thumbs_total_area_AsN5t14mAQ.png/100x100_total_area_AsN5t14mAQ.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/total_area_AsN5t14mAQ.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tmnn2qyx094kz9u/total_area_AsN5t14mAQ.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/total_area_AsN5t14mAQ.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tmnn2qyx094kz9u/total_area_AsN5t14mAQ.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/total_area_AsN5t14mAQ.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tmnn2qyx094kz9u/total_area_AsN5t14mAQ.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/tmnn2qyx094kz9u/total_area_AsN5t14mAQ.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tmnn2qyx094kz9u/total_area_AsN5t14mAQ.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/crops_b0Zg9VUstB.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tnl5un43njcaxm5/crops_b0Zg9VUstB.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/crops_b0Zg9VUstB.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tnl5un43njcaxm5/crops_b0Zg9VUstB.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/crops_b0Zg9VUstB.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tnl5un43njcaxm5/crops_b0Zg9VUstB.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/crops_b0Zg9VUstB.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tnl5un43njcaxm5/crops_b0Zg9VUstB.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/thumbs_crops_b0Zg9VUstB.png/100x100_crops_b0Zg9VUstB.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tnl5un43njcaxm5/thumbs_crops_b0Zg9VUstB.png/100x100_crops_b0Zg9VUstB.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/thumbs_crops_b0Zg9VUstB.png/100x100_crops_b0Zg9VUstB.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tnl5un43njcaxm5/thumbs_crops_b0Zg9VUstB.png/100x100_crops_b0Zg9VUstB.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/thumbs_crops_b0Zg9VUstB.png/100x100_crops_b0Zg9VUstB.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tnl5un43njcaxm5/thumbs_crops_b0Zg9VUstB.png/100x100_crops_b0Zg9VUstB.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/tnl5un43njcaxm5/thumbs_crops_b0Zg9VUstB.png/100x100_crops_b0Zg9VUstB.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tnl5un43njcaxm5/thumbs_crops_b0Zg9VUstB.png/100x100_crops_b0Zg9VUstB.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tqwawrc2uptmjok/kpi_icon_bed_government_klgvZtB6iF.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tqwawrc2uptmjok/kpi_icon_bed_government_klgvZtB6iF.png
new file mode 100644
index 0000000..308bfaa
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tqwawrc2uptmjok/kpi_icon_bed_government_klgvZtB6iF.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tqwawrc2uptmjok/kpi_icon_bed_government_klgvZtB6iF.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tqwawrc2uptmjok/kpi_icon_bed_government_klgvZtB6iF.png.attrs
new file mode 100644
index 0000000..f762774
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tqwawrc2uptmjok/kpi_icon_bed_government_klgvZtB6iF.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-BedGovernment.png"},"md5":"SlxF8TiAd+YfJeTKMfo/BQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tqwawrc2uptmjok/thumbs_kpi_icon_bed_government_klgvZtB6iF.png/100x100_kpi_icon_bed_government_klgvZtB6iF.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tqwawrc2uptmjok/thumbs_kpi_icon_bed_government_klgvZtB6iF.png/100x100_kpi_icon_bed_government_klgvZtB6iF.png
new file mode 100644
index 0000000..5ef8829
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tqwawrc2uptmjok/thumbs_kpi_icon_bed_government_klgvZtB6iF.png/100x100_kpi_icon_bed_government_klgvZtB6iF.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tqwawrc2uptmjok/thumbs_kpi_icon_bed_government_klgvZtB6iF.png/100x100_kpi_icon_bed_government_klgvZtB6iF.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tqwawrc2uptmjok/thumbs_kpi_icon_bed_government_klgvZtB6iF.png/100x100_kpi_icon_bed_government_klgvZtB6iF.png.attrs
new file mode 100644
index 0000000..ccaf492
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tqwawrc2uptmjok/thumbs_kpi_icon_bed_government_klgvZtB6iF.png/100x100_kpi_icon_bed_government_klgvZtB6iF.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"CF/8K+DrKvjbXSn27Pmz1Q=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tuvjfknqspbinxy/kpi_icon_gdpgrowth_fg7PxU98Jn.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tuvjfknqspbinxy/kpi_icon_gdpgrowth_fg7PxU98Jn.png
new file mode 100644
index 0000000..f5f673a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tuvjfknqspbinxy/kpi_icon_gdpgrowth_fg7PxU98Jn.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tuvjfknqspbinxy/kpi_icon_gdpgrowth_fg7PxU98Jn.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tuvjfknqspbinxy/kpi_icon_gdpgrowth_fg7PxU98Jn.png.attrs
new file mode 100644
index 0000000..30324ed
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tuvjfknqspbinxy/kpi_icon_gdpgrowth_fg7PxU98Jn.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-GDPGrowth.png"},"md5":"HqqwH2pjnCJ5qZ2nSzmtUw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tuvjfknqspbinxy/thumbs_kpi_icon_gdpgrowth_fg7PxU98Jn.png/100x100_kpi_icon_gdpgrowth_fg7PxU98Jn.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tuvjfknqspbinxy/thumbs_kpi_icon_gdpgrowth_fg7PxU98Jn.png/100x100_kpi_icon_gdpgrowth_fg7PxU98Jn.png
new file mode 100644
index 0000000..40ddf4f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tuvjfknqspbinxy/thumbs_kpi_icon_gdpgrowth_fg7PxU98Jn.png/100x100_kpi_icon_gdpgrowth_fg7PxU98Jn.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tuvjfknqspbinxy/thumbs_kpi_icon_gdpgrowth_fg7PxU98Jn.png/100x100_kpi_icon_gdpgrowth_fg7PxU98Jn.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tuvjfknqspbinxy/thumbs_kpi_icon_gdpgrowth_fg7PxU98Jn.png/100x100_kpi_icon_gdpgrowth_fg7PxU98Jn.png.attrs
new file mode 100644
index 0000000..edf40cf
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tuvjfknqspbinxy/thumbs_kpi_icon_gdpgrowth_fg7PxU98Jn.png/100x100_kpi_icon_gdpgrowth_fg7PxU98Jn.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"zrI7ItL8NvCC4HA5egimuA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tynnuqkf6td5cah/kpi_icon_export_T9Cvgf6apF.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tynnuqkf6td5cah/kpi_icon_export_T9Cvgf6apF.png
new file mode 100644
index 0000000..212871f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tynnuqkf6td5cah/kpi_icon_export_T9Cvgf6apF.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tynnuqkf6td5cah/kpi_icon_export_T9Cvgf6apF.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tynnuqkf6td5cah/kpi_icon_export_T9Cvgf6apF.png.attrs
new file mode 100644
index 0000000..8f5ba5d
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tynnuqkf6td5cah/kpi_icon_export_T9Cvgf6apF.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Export.png"},"md5":"IPaPiLbUhghzbNypSqwzog=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tynnuqkf6td5cah/thumbs_kpi_icon_export_T9Cvgf6apF.png/100x100_kpi_icon_export_T9Cvgf6apF.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tynnuqkf6td5cah/thumbs_kpi_icon_export_T9Cvgf6apF.png/100x100_kpi_icon_export_T9Cvgf6apF.png
new file mode 100644
index 0000000..58f0a77
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tynnuqkf6td5cah/thumbs_kpi_icon_export_T9Cvgf6apF.png/100x100_kpi_icon_export_T9Cvgf6apF.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tynnuqkf6td5cah/thumbs_kpi_icon_export_T9Cvgf6apF.png/100x100_kpi_icon_export_T9Cvgf6apF.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tynnuqkf6td5cah/thumbs_kpi_icon_export_T9Cvgf6apF.png/100x100_kpi_icon_export_T9Cvgf6apF.png.attrs
new file mode 100644
index 0000000..29b2c96
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/tynnuqkf6td5cah/thumbs_kpi_icon_export_T9Cvgf6apF.png/100x100_kpi_icon_export_T9Cvgf6apF.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"gRzHgaCqcAj686AvLdedFA=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/camel_ZIok0of4Ql.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u6sa8hhub2rse9a/camel_ZIok0of4Ql.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/camel_ZIok0of4Ql.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u6sa8hhub2rse9a/camel_ZIok0of4Ql.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/camel_ZIok0of4Ql.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u6sa8hhub2rse9a/camel_ZIok0of4Ql.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/camel_ZIok0of4Ql.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u6sa8hhub2rse9a/camel_ZIok0of4Ql.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/thumbs_camel_ZIok0of4Ql.png/100x100_camel_ZIok0of4Ql.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u6sa8hhub2rse9a/thumbs_camel_ZIok0of4Ql.png/100x100_camel_ZIok0of4Ql.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/thumbs_camel_ZIok0of4Ql.png/100x100_camel_ZIok0of4Ql.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u6sa8hhub2rse9a/thumbs_camel_ZIok0of4Ql.png/100x100_camel_ZIok0of4Ql.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/thumbs_camel_ZIok0of4Ql.png/100x100_camel_ZIok0of4Ql.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u6sa8hhub2rse9a/thumbs_camel_ZIok0of4Ql.png/100x100_camel_ZIok0of4Ql.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/u6sa8hhub2rse9a/thumbs_camel_ZIok0of4Ql.png/100x100_camel_ZIok0of4Ql.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u6sa8hhub2rse9a/thumbs_camel_ZIok0of4Ql.png/100x100_camel_ZIok0of4Ql.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/kpi_icon_re_export_2xL2WLr0JF.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/kpi_icon_re_export_2xL2WLr0JF.png
new file mode 100644
index 0000000..2f2daf3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/kpi_icon_re_export_2xL2WLr0JF.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/kpi_icon_re_export_2xL2WLr0JF.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/kpi_icon_re_export_2xL2WLr0JF.png.attrs
new file mode 100644
index 0000000..efc1a5b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/kpi_icon_re_export_2xL2WLr0JF.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-ReExport.png"},"md5":"wuPAc6IENmbI4H4Y5iykQA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/thumbs_kpi_icon_re_export_2xL2WLr0JF.png/100x100_kpi_icon_re_export_2xL2WLr0JF.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/thumbs_kpi_icon_re_export_2xL2WLr0JF.png/100x100_kpi_icon_re_export_2xL2WLr0JF.png
new file mode 100644
index 0000000..6bf965d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/thumbs_kpi_icon_re_export_2xL2WLr0JF.png/100x100_kpi_icon_re_export_2xL2WLr0JF.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/thumbs_kpi_icon_re_export_2xL2WLr0JF.png/100x100_kpi_icon_re_export_2xL2WLr0JF.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/thumbs_kpi_icon_re_export_2xL2WLr0JF.png/100x100_kpi_icon_re_export_2xL2WLr0JF.png.attrs
new file mode 100644
index 0000000..670db8f
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/u9qzcra2jzlr7mk/thumbs_kpi_icon_re_export_2xL2WLr0JF.png/100x100_kpi_icon_re_export_2xL2WLr0JF.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"55tIdEz4EfKupJ7SzRKiNQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/uiukpge5yygtrgk/kpi_icon_health_centers_1_ukjBtfQbSS.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/uiukpge5yygtrgk/kpi_icon_health_centers_1_ukjBtfQbSS.png
new file mode 100644
index 0000000..3e1a049
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/uiukpge5yygtrgk/kpi_icon_health_centers_1_ukjBtfQbSS.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/uiukpge5yygtrgk/kpi_icon_health_centers_1_ukjBtfQbSS.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/uiukpge5yygtrgk/kpi_icon_health_centers_1_ukjBtfQbSS.png.attrs
new file mode 100644
index 0000000..5b4c699
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/uiukpge5yygtrgk/kpi_icon_health_centers_1_ukjBtfQbSS.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-HealthCenters (1).png"},"md5":"BSOP0npbkrCLnRX9kYzicg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/uiukpge5yygtrgk/thumbs_kpi_icon_health_centers_1_ukjBtfQbSS.png/100x100_kpi_icon_health_centers_1_ukjBtfQbSS.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/uiukpge5yygtrgk/thumbs_kpi_icon_health_centers_1_ukjBtfQbSS.png/100x100_kpi_icon_health_centers_1_ukjBtfQbSS.png
new file mode 100644
index 0000000..06efc98
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/uiukpge5yygtrgk/thumbs_kpi_icon_health_centers_1_ukjBtfQbSS.png/100x100_kpi_icon_health_centers_1_ukjBtfQbSS.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/uiukpge5yygtrgk/thumbs_kpi_icon_health_centers_1_ukjBtfQbSS.png/100x100_kpi_icon_health_centers_1_ukjBtfQbSS.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/uiukpge5yygtrgk/thumbs_kpi_icon_health_centers_1_ukjBtfQbSS.png/100x100_kpi_icon_health_centers_1_ukjBtfQbSS.png.attrs
new file mode 100644
index 0000000..9107cef
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/uiukpge5yygtrgk/thumbs_kpi_icon_health_centers_1_ukjBtfQbSS.png/100x100_kpi_icon_health_centers_1_ukjBtfQbSS.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"y9NTfS1CkEsgZhHgNHEUMQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/urr4z84rpbtclfm/kpi_icon_private_centers_ViUY23xJae.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/urr4z84rpbtclfm/kpi_icon_private_centers_ViUY23xJae.png
new file mode 100644
index 0000000..a03df0c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/urr4z84rpbtclfm/kpi_icon_private_centers_ViUY23xJae.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/urr4z84rpbtclfm/kpi_icon_private_centers_ViUY23xJae.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/urr4z84rpbtclfm/kpi_icon_private_centers_ViUY23xJae.png.attrs
new file mode 100644
index 0000000..78d114e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/urr4z84rpbtclfm/kpi_icon_private_centers_ViUY23xJae.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-PrivateCenters.png"},"md5":"LUgC6r2lEoJse4oQLX3Mkg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/urr4z84rpbtclfm/thumbs_kpi_icon_private_centers_ViUY23xJae.png/100x100_kpi_icon_private_centers_ViUY23xJae.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/urr4z84rpbtclfm/thumbs_kpi_icon_private_centers_ViUY23xJae.png/100x100_kpi_icon_private_centers_ViUY23xJae.png
new file mode 100644
index 0000000..8b75751
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/urr4z84rpbtclfm/thumbs_kpi_icon_private_centers_ViUY23xJae.png/100x100_kpi_icon_private_centers_ViUY23xJae.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/urr4z84rpbtclfm/thumbs_kpi_icon_private_centers_ViUY23xJae.png/100x100_kpi_icon_private_centers_ViUY23xJae.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/urr4z84rpbtclfm/thumbs_kpi_icon_private_centers_ViUY23xJae.png/100x100_kpi_icon_private_centers_ViUY23xJae.png.attrs
new file mode 100644
index 0000000..b3ffa0b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/urr4z84rpbtclfm/thumbs_kpi_icon_private_centers_ViUY23xJae.png/100x100_kpi_icon_private_centers_ViUY23xJae.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"azrHU6swT3mN0xn1A7jLfw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/v4y3is53f4b4n79/kpi_icon_marriage_D9bufwhcl5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/v4y3is53f4b4n79/kpi_icon_marriage_D9bufwhcl5.png
new file mode 100644
index 0000000..4511a5b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/v4y3is53f4b4n79/kpi_icon_marriage_D9bufwhcl5.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/v4y3is53f4b4n79/kpi_icon_marriage_D9bufwhcl5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/v4y3is53f4b4n79/kpi_icon_marriage_D9bufwhcl5.png.attrs
new file mode 100644
index 0000000..3fe0133
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/v4y3is53f4b4n79/kpi_icon_marriage_D9bufwhcl5.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Marriage.png"},"md5":"nnvEuAAjYWfWwtDM1r+v8A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/v4y3is53f4b4n79/thumbs_kpi_icon_marriage_D9bufwhcl5.png/100x100_kpi_icon_marriage_D9bufwhcl5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/v4y3is53f4b4n79/thumbs_kpi_icon_marriage_D9bufwhcl5.png/100x100_kpi_icon_marriage_D9bufwhcl5.png
new file mode 100644
index 0000000..e550118
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/v4y3is53f4b4n79/thumbs_kpi_icon_marriage_D9bufwhcl5.png/100x100_kpi_icon_marriage_D9bufwhcl5.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/v4y3is53f4b4n79/thumbs_kpi_icon_marriage_D9bufwhcl5.png/100x100_kpi_icon_marriage_D9bufwhcl5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/v4y3is53f4b4n79/thumbs_kpi_icon_marriage_D9bufwhcl5.png/100x100_kpi_icon_marriage_D9bufwhcl5.png.attrs
new file mode 100644
index 0000000..ee75da3
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/v4y3is53f4b4n79/thumbs_kpi_icon_marriage_D9bufwhcl5.png/100x100_kpi_icon_marriage_D9bufwhcl5.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"fZ2oprnP/J8tebqAYEHPGw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/kpi_icon_publich_hospotals_l35QHTf0y5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/kpi_icon_publich_hospotals_l35QHTf0y5.png
new file mode 100644
index 0000000..bafdf65
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/kpi_icon_publich_hospotals_l35QHTf0y5.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/kpi_icon_publich_hospotals_l35QHTf0y5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/kpi_icon_publich_hospotals_l35QHTf0y5.png.attrs
new file mode 100644
index 0000000..ab0d657
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/kpi_icon_publich_hospotals_l35QHTf0y5.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-PublichHospotals.png"},"md5":"O72iEX0YLaa2iT2mo9vsJQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/thumbs_kpi_icon_publich_hospotals_l35QHTf0y5.png/100x100_kpi_icon_publich_hospotals_l35QHTf0y5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/thumbs_kpi_icon_publich_hospotals_l35QHTf0y5.png/100x100_kpi_icon_publich_hospotals_l35QHTf0y5.png
new file mode 100644
index 0000000..25e8c8a
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/thumbs_kpi_icon_publich_hospotals_l35QHTf0y5.png/100x100_kpi_icon_publich_hospotals_l35QHTf0y5.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/thumbs_kpi_icon_publich_hospotals_l35QHTf0y5.png/100x100_kpi_icon_publich_hospotals_l35QHTf0y5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/thumbs_kpi_icon_publich_hospotals_l35QHTf0y5.png/100x100_kpi_icon_publich_hospotals_l35QHTf0y5.png.attrs
new file mode 100644
index 0000000..49193c4
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vgfdsblnoiv8x7v/thumbs_kpi_icon_publich_hospotals_l35QHTf0y5.png/100x100_kpi_icon_publich_hospotals_l35QHTf0y5.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"X45kI34FCrx14RyBSzTl6A=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/thumbs_total_area_bksPB7BkMw.png/100x100_total_area_bksPB7BkMw.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vircq49nge9g9fa/thumbs_total_area_bksPB7BkMw.png/100x100_total_area_bksPB7BkMw.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/thumbs_total_area_bksPB7BkMw.png/100x100_total_area_bksPB7BkMw.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vircq49nge9g9fa/thumbs_total_area_bksPB7BkMw.png/100x100_total_area_bksPB7BkMw.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/thumbs_total_area_bksPB7BkMw.png/100x100_total_area_bksPB7BkMw.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vircq49nge9g9fa/thumbs_total_area_bksPB7BkMw.png/100x100_total_area_bksPB7BkMw.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/thumbs_total_area_bksPB7BkMw.png/100x100_total_area_bksPB7BkMw.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vircq49nge9g9fa/thumbs_total_area_bksPB7BkMw.png/100x100_total_area_bksPB7BkMw.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/total_area_bksPB7BkMw.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vircq49nge9g9fa/total_area_bksPB7BkMw.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/total_area_bksPB7BkMw.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vircq49nge9g9fa/total_area_bksPB7BkMw.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/total_area_bksPB7BkMw.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vircq49nge9g9fa/total_area_bksPB7BkMw.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/vircq49nge9g9fa/total_area_bksPB7BkMw.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vircq49nge9g9fa/total_area_bksPB7BkMw.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vv2he1av1nqw8ri/kpi_icon_occupancy_rate_DZGUn2HMkj.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vv2he1av1nqw8ri/kpi_icon_occupancy_rate_DZGUn2HMkj.png
new file mode 100644
index 0000000..4b5ae6b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vv2he1av1nqw8ri/kpi_icon_occupancy_rate_DZGUn2HMkj.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vv2he1av1nqw8ri/kpi_icon_occupancy_rate_DZGUn2HMkj.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vv2he1av1nqw8ri/kpi_icon_occupancy_rate_DZGUn2HMkj.png.attrs
new file mode 100644
index 0000000..b16288e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vv2he1av1nqw8ri/kpi_icon_occupancy_rate_DZGUn2HMkj.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OccupancyRate.png"},"md5":"Cs+jJNffYFWAhBqJwmKX0A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vv2he1av1nqw8ri/thumbs_kpi_icon_occupancy_rate_DZGUn2HMkj.png/100x100_kpi_icon_occupancy_rate_DZGUn2HMkj.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vv2he1av1nqw8ri/thumbs_kpi_icon_occupancy_rate_DZGUn2HMkj.png/100x100_kpi_icon_occupancy_rate_DZGUn2HMkj.png
new file mode 100644
index 0000000..1f6d56d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vv2he1av1nqw8ri/thumbs_kpi_icon_occupancy_rate_DZGUn2HMkj.png/100x100_kpi_icon_occupancy_rate_DZGUn2HMkj.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vv2he1av1nqw8ri/thumbs_kpi_icon_occupancy_rate_DZGUn2HMkj.png/100x100_kpi_icon_occupancy_rate_DZGUn2HMkj.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vv2he1av1nqw8ri/thumbs_kpi_icon_occupancy_rate_DZGUn2HMkj.png/100x100_kpi_icon_occupancy_rate_DZGUn2HMkj.png.attrs
new file mode 100644
index 0000000..5da8ec2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/vv2he1av1nqw8ri/thumbs_kpi_icon_occupancy_rate_DZGUn2HMkj.png/100x100_kpi_icon_occupancy_rate_DZGUn2HMkj.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"U+jFTo4vOOwg1q6sg8TA+A=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/thumbs_total_area_eDzGakKVFG.png/100x100_total_area_eDzGakKVFG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/w82j3y5j659j3y8/thumbs_total_area_eDzGakKVFG.png/100x100_total_area_eDzGakKVFG.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/thumbs_total_area_eDzGakKVFG.png/100x100_total_area_eDzGakKVFG.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/w82j3y5j659j3y8/thumbs_total_area_eDzGakKVFG.png/100x100_total_area_eDzGakKVFG.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/thumbs_total_area_eDzGakKVFG.png/100x100_total_area_eDzGakKVFG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/w82j3y5j659j3y8/thumbs_total_area_eDzGakKVFG.png/100x100_total_area_eDzGakKVFG.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/thumbs_total_area_eDzGakKVFG.png/100x100_total_area_eDzGakKVFG.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/w82j3y5j659j3y8/thumbs_total_area_eDzGakKVFG.png/100x100_total_area_eDzGakKVFG.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/total_area_eDzGakKVFG.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/w82j3y5j659j3y8/total_area_eDzGakKVFG.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/total_area_eDzGakKVFG.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/w82j3y5j659j3y8/total_area_eDzGakKVFG.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/total_area_eDzGakKVFG.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/w82j3y5j659j3y8/total_area_eDzGakKVFG.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/w82j3y5j659j3y8/total_area_eDzGakKVFG.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/w82j3y5j659j3y8/total_area_eDzGakKVFG.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wf5pilm7obqfbti/female_zwUA1j9u2p.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wf5pilm7obqfbti/female_zwUA1j9u2p.png
new file mode 100644
index 0000000..e328a93
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wf5pilm7obqfbti/female_zwUA1j9u2p.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wf5pilm7obqfbti/female_zwUA1j9u2p.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wf5pilm7obqfbti/female_zwUA1j9u2p.png.attrs
new file mode 100644
index 0000000..3c217ec
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wf5pilm7obqfbti/female_zwUA1j9u2p.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"female.png"},"md5":"LHr3qNvXccxDzGNR1QwAiA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wf5pilm7obqfbti/thumbs_female_zwUA1j9u2p.png/100x100_female_zwUA1j9u2p.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wf5pilm7obqfbti/thumbs_female_zwUA1j9u2p.png/100x100_female_zwUA1j9u2p.png
new file mode 100644
index 0000000..4e9492f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wf5pilm7obqfbti/thumbs_female_zwUA1j9u2p.png/100x100_female_zwUA1j9u2p.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wf5pilm7obqfbti/thumbs_female_zwUA1j9u2p.png/100x100_female_zwUA1j9u2p.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wf5pilm7obqfbti/thumbs_female_zwUA1j9u2p.png/100x100_female_zwUA1j9u2p.png.attrs
new file mode 100644
index 0000000..72ab7b2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wf5pilm7obqfbti/thumbs_female_zwUA1j9u2p.png/100x100_female_zwUA1j9u2p.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"6qNv8XkjaWR5lPp91glyrw=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/thumbs_total_area_zwQBKteWRw.png/100x100_total_area_zwQBKteWRw.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wv1t30ahr87c15f/thumbs_total_area_zwQBKteWRw.png/100x100_total_area_zwQBKteWRw.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/thumbs_total_area_zwQBKteWRw.png/100x100_total_area_zwQBKteWRw.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wv1t30ahr87c15f/thumbs_total_area_zwQBKteWRw.png/100x100_total_area_zwQBKteWRw.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/thumbs_total_area_zwQBKteWRw.png/100x100_total_area_zwQBKteWRw.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wv1t30ahr87c15f/thumbs_total_area_zwQBKteWRw.png/100x100_total_area_zwQBKteWRw.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/thumbs_total_area_zwQBKteWRw.png/100x100_total_area_zwQBKteWRw.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wv1t30ahr87c15f/thumbs_total_area_zwQBKteWRw.png/100x100_total_area_zwQBKteWRw.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/total_area_zwQBKteWRw.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wv1t30ahr87c15f/total_area_zwQBKteWRw.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/total_area_zwQBKteWRw.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wv1t30ahr87c15f/total_area_zwQBKteWRw.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/total_area_zwQBKteWRw.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wv1t30ahr87c15f/total_area_zwQBKteWRw.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/wv1t30ahr87c15f/total_area_zwQBKteWRw.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wv1t30ahr87c15f/total_area_zwQBKteWRw.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/sheep_MVuSHtnndT.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wv21g4n107j0jul/sheep_MVuSHtnndT.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/sheep_MVuSHtnndT.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wv21g4n107j0jul/sheep_MVuSHtnndT.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/sheep_MVuSHtnndT.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wv21g4n107j0jul/sheep_MVuSHtnndT.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/sheep_MVuSHtnndT.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wv21g4n107j0jul/sheep_MVuSHtnndT.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/thumbs_sheep_MVuSHtnndT.png/100x100_sheep_MVuSHtnndT.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wv21g4n107j0jul/thumbs_sheep_MVuSHtnndT.png/100x100_sheep_MVuSHtnndT.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/thumbs_sheep_MVuSHtnndT.png/100x100_sheep_MVuSHtnndT.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wv21g4n107j0jul/thumbs_sheep_MVuSHtnndT.png/100x100_sheep_MVuSHtnndT.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/thumbs_sheep_MVuSHtnndT.png/100x100_sheep_MVuSHtnndT.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wv21g4n107j0jul/thumbs_sheep_MVuSHtnndT.png/100x100_sheep_MVuSHtnndT.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/wv21g4n107j0jul/thumbs_sheep_MVuSHtnndT.png/100x100_sheep_MVuSHtnndT.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/wv21g4n107j0jul/thumbs_sheep_MVuSHtnndT.png/100x100_sheep_MVuSHtnndT.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/x5wbpus72ffoaje/kpi_icon_male_teachers_1_LqcbbCB1db.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/x5wbpus72ffoaje/kpi_icon_male_teachers_1_LqcbbCB1db.png
new file mode 100644
index 0000000..7320871
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/x5wbpus72ffoaje/kpi_icon_male_teachers_1_LqcbbCB1db.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/x5wbpus72ffoaje/kpi_icon_male_teachers_1_LqcbbCB1db.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/x5wbpus72ffoaje/kpi_icon_male_teachers_1_LqcbbCB1db.png.attrs
new file mode 100644
index 0000000..8fb97ed
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/x5wbpus72ffoaje/kpi_icon_male_teachers_1_LqcbbCB1db.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-MaleTeachers (1).png"},"md5":"8WB73clJYETSqZZMgxYSaQ=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/x5wbpus72ffoaje/thumbs_kpi_icon_male_teachers_1_LqcbbCB1db.png/100x100_kpi_icon_male_teachers_1_LqcbbCB1db.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/x5wbpus72ffoaje/thumbs_kpi_icon_male_teachers_1_LqcbbCB1db.png/100x100_kpi_icon_male_teachers_1_LqcbbCB1db.png
new file mode 100644
index 0000000..658d7b3
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/x5wbpus72ffoaje/thumbs_kpi_icon_male_teachers_1_LqcbbCB1db.png/100x100_kpi_icon_male_teachers_1_LqcbbCB1db.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/x5wbpus72ffoaje/thumbs_kpi_icon_male_teachers_1_LqcbbCB1db.png/100x100_kpi_icon_male_teachers_1_LqcbbCB1db.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/x5wbpus72ffoaje/thumbs_kpi_icon_male_teachers_1_LqcbbCB1db.png/100x100_kpi_icon_male_teachers_1_LqcbbCB1db.png.attrs
new file mode 100644
index 0000000..334242a
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/x5wbpus72ffoaje/thumbs_kpi_icon_male_teachers_1_LqcbbCB1db.png/100x100_kpi_icon_male_teachers_1_LqcbbCB1db.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"qEgIwndOcbJYzCQnltZqHA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/kpi_icon_occupancy_rate_FUIC3JNYsS.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/kpi_icon_occupancy_rate_FUIC3JNYsS.png
new file mode 100644
index 0000000..4b5ae6b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/kpi_icon_occupancy_rate_FUIC3JNYsS.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/kpi_icon_occupancy_rate_FUIC3JNYsS.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/kpi_icon_occupancy_rate_FUIC3JNYsS.png.attrs
new file mode 100644
index 0000000..b16288e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/kpi_icon_occupancy_rate_FUIC3JNYsS.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-OccupancyRate.png"},"md5":"Cs+jJNffYFWAhBqJwmKX0A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/thumbs_kpi_icon_occupancy_rate_FUIC3JNYsS.png/100x100_kpi_icon_occupancy_rate_FUIC3JNYsS.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/thumbs_kpi_icon_occupancy_rate_FUIC3JNYsS.png/100x100_kpi_icon_occupancy_rate_FUIC3JNYsS.png
new file mode 100644
index 0000000..1f6d56d
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/thumbs_kpi_icon_occupancy_rate_FUIC3JNYsS.png/100x100_kpi_icon_occupancy_rate_FUIC3JNYsS.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/thumbs_kpi_icon_occupancy_rate_FUIC3JNYsS.png/100x100_kpi_icon_occupancy_rate_FUIC3JNYsS.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/thumbs_kpi_icon_occupancy_rate_FUIC3JNYsS.png/100x100_kpi_icon_occupancy_rate_FUIC3JNYsS.png.attrs
new file mode 100644
index 0000000..5da8ec2
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/xc5bvo7vfjj8yn9/thumbs_kpi_icon_occupancy_rate_FUIC3JNYsS.png/100x100_kpi_icon_occupancy_rate_FUIC3JNYsS.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"U+jFTo4vOOwg1q6sg8TA+A=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/kpi_icon_export_VVWjL8yXuh.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/kpi_icon_export_VVWjL8yXuh.png
new file mode 100644
index 0000000..212871f
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/kpi_icon_export_VVWjL8yXuh.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/kpi_icon_export_VVWjL8yXuh.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/kpi_icon_export_VVWjL8yXuh.png.attrs
new file mode 100644
index 0000000..8f5ba5d
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/kpi_icon_export_VVWjL8yXuh.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Export.png"},"md5":"IPaPiLbUhghzbNypSqwzog=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/thumbs_kpi_icon_export_VVWjL8yXuh.png/100x100_kpi_icon_export_VVWjL8yXuh.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/thumbs_kpi_icon_export_VVWjL8yXuh.png/100x100_kpi_icon_export_VVWjL8yXuh.png
new file mode 100644
index 0000000..58f0a77
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/thumbs_kpi_icon_export_VVWjL8yXuh.png/100x100_kpi_icon_export_VVWjL8yXuh.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/thumbs_kpi_icon_export_VVWjL8yXuh.png/100x100_kpi_icon_export_VVWjL8yXuh.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/thumbs_kpi_icon_export_VVWjL8yXuh.png/100x100_kpi_icon_export_VVWjL8yXuh.png.attrs
new file mode 100644
index 0000000..29b2c96
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yc7e1wa79ef6gqw/thumbs_kpi_icon_export_VVWjL8yXuh.png/100x100_kpi_icon_export_VVWjL8yXuh.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"gRzHgaCqcAj686AvLdedFA=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/sheep_1P73ukA9Se.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ygtoo531n4eb3i1/sheep_1P73ukA9Se.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/sheep_1P73ukA9Se.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ygtoo531n4eb3i1/sheep_1P73ukA9Se.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/sheep_1P73ukA9Se.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ygtoo531n4eb3i1/sheep_1P73ukA9Se.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/sheep_1P73ukA9Se.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ygtoo531n4eb3i1/sheep_1P73ukA9Se.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/thumbs_sheep_1P73ukA9Se.png/100x100_sheep_1P73ukA9Se.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ygtoo531n4eb3i1/thumbs_sheep_1P73ukA9Se.png/100x100_sheep_1P73ukA9Se.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/thumbs_sheep_1P73ukA9Se.png/100x100_sheep_1P73ukA9Se.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ygtoo531n4eb3i1/thumbs_sheep_1P73ukA9Se.png/100x100_sheep_1P73ukA9Se.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/thumbs_sheep_1P73ukA9Se.png/100x100_sheep_1P73ukA9Se.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ygtoo531n4eb3i1/thumbs_sheep_1P73ukA9Se.png/100x100_sheep_1P73ukA9Se.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/ygtoo531n4eb3i1/thumbs_sheep_1P73ukA9Se.png/100x100_sheep_1P73ukA9Se.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ygtoo531n4eb3i1/thumbs_sheep_1P73ukA9Se.png/100x100_sheep_1P73ukA9Se.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/consumption_growth_PPRGC2sIse.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yorbh06abfxbgp0/consumption_growth_PPRGC2sIse.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/consumption_growth_PPRGC2sIse.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yorbh06abfxbgp0/consumption_growth_PPRGC2sIse.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/consumption_growth_PPRGC2sIse.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yorbh06abfxbgp0/consumption_growth_PPRGC2sIse.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/consumption_growth_PPRGC2sIse.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yorbh06abfxbgp0/consumption_growth_PPRGC2sIse.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/thumbs_consumption_growth_PPRGC2sIse.png/100x100_consumption_growth_PPRGC2sIse.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yorbh06abfxbgp0/thumbs_consumption_growth_PPRGC2sIse.png/100x100_consumption_growth_PPRGC2sIse.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/thumbs_consumption_growth_PPRGC2sIse.png/100x100_consumption_growth_PPRGC2sIse.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yorbh06abfxbgp0/thumbs_consumption_growth_PPRGC2sIse.png/100x100_consumption_growth_PPRGC2sIse.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/thumbs_consumption_growth_PPRGC2sIse.png/100x100_consumption_growth_PPRGC2sIse.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yorbh06abfxbgp0/thumbs_consumption_growth_PPRGC2sIse.png/100x100_consumption_growth_PPRGC2sIse.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/yorbh06abfxbgp0/thumbs_consumption_growth_PPRGC2sIse.png/100x100_consumption_growth_PPRGC2sIse.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yorbh06abfxbgp0/thumbs_consumption_growth_PPRGC2sIse.png/100x100_consumption_growth_PPRGC2sIse.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/consumption_growth_UqIRXDF5cq.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ype1fj029pqybu4/consumption_growth_UqIRXDF5cq.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/consumption_growth_UqIRXDF5cq.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ype1fj029pqybu4/consumption_growth_UqIRXDF5cq.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/consumption_growth_UqIRXDF5cq.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ype1fj029pqybu4/consumption_growth_UqIRXDF5cq.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/consumption_growth_UqIRXDF5cq.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ype1fj029pqybu4/consumption_growth_UqIRXDF5cq.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/thumbs_consumption_growth_UqIRXDF5cq.png/100x100_consumption_growth_UqIRXDF5cq.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ype1fj029pqybu4/thumbs_consumption_growth_UqIRXDF5cq.png/100x100_consumption_growth_UqIRXDF5cq.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/thumbs_consumption_growth_UqIRXDF5cq.png/100x100_consumption_growth_UqIRXDF5cq.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ype1fj029pqybu4/thumbs_consumption_growth_UqIRXDF5cq.png/100x100_consumption_growth_UqIRXDF5cq.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/thumbs_consumption_growth_UqIRXDF5cq.png/100x100_consumption_growth_UqIRXDF5cq.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ype1fj029pqybu4/thumbs_consumption_growth_UqIRXDF5cq.png/100x100_consumption_growth_UqIRXDF5cq.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/ype1fj029pqybu4/thumbs_consumption_growth_UqIRXDF5cq.png/100x100_consumption_growth_UqIRXDF5cq.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ype1fj029pqybu4/thumbs_consumption_growth_UqIRXDF5cq.png/100x100_consumption_growth_UqIRXDF5cq.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yxv0ja5ul715duk/kpi_icon_divorce_fryxlBxzGV.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yxv0ja5ul715duk/kpi_icon_divorce_fryxlBxzGV.png
new file mode 100644
index 0000000..0c18983
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yxv0ja5ul715duk/kpi_icon_divorce_fryxlBxzGV.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yxv0ja5ul715duk/kpi_icon_divorce_fryxlBxzGV.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yxv0ja5ul715duk/kpi_icon_divorce_fryxlBxzGV.png.attrs
new file mode 100644
index 0000000..9ebddb0
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yxv0ja5ul715duk/kpi_icon_divorce_fryxlBxzGV.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-Divorce.png"},"md5":"R75apNv2eSwUNjOGSZOXEA=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yxv0ja5ul715duk/thumbs_kpi_icon_divorce_fryxlBxzGV.png/100x100_kpi_icon_divorce_fryxlBxzGV.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yxv0ja5ul715duk/thumbs_kpi_icon_divorce_fryxlBxzGV.png/100x100_kpi_icon_divorce_fryxlBxzGV.png
new file mode 100644
index 0000000..e727f3b
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yxv0ja5ul715duk/thumbs_kpi_icon_divorce_fryxlBxzGV.png/100x100_kpi_icon_divorce_fryxlBxzGV.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yxv0ja5ul715duk/thumbs_kpi_icon_divorce_fryxlBxzGV.png/100x100_kpi_icon_divorce_fryxlBxzGV.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yxv0ja5ul715duk/thumbs_kpi_icon_divorce_fryxlBxzGV.png/100x100_kpi_icon_divorce_fryxlBxzGV.png.attrs
new file mode 100644
index 0000000..ac7b299
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yxv0ja5ul715duk/thumbs_kpi_icon_divorce_fryxlBxzGV.png/100x100_kpi_icon_divorce_fryxlBxzGV.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"1KWZl2RxG0Q5KtzgtdwnoQ=="}
diff --git a/pb_data/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/crops_jiMvPH1KHk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/crops_jiMvPH1KHk.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/crops_jiMvPH1KHk.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/crops_jiMvPH1KHk.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/crops_jiMvPH1KHk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/crops_jiMvPH1KHk.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/crops_jiMvPH1KHk.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/crops_jiMvPH1KHk.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/thumbs_crops_jiMvPH1KHk.png/100x100_crops_jiMvPH1KHk.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/thumbs_crops_jiMvPH1KHk.png/100x100_crops_jiMvPH1KHk.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/thumbs_crops_jiMvPH1KHk.png/100x100_crops_jiMvPH1KHk.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/thumbs_crops_jiMvPH1KHk.png/100x100_crops_jiMvPH1KHk.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/thumbs_crops_jiMvPH1KHk.png/100x100_crops_jiMvPH1KHk.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/thumbs_crops_jiMvPH1KHk.png/100x100_crops_jiMvPH1KHk.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/thumbs_crops_jiMvPH1KHk.png/100x100_crops_jiMvPH1KHk.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/yzy1xkquc5kfvqi/thumbs_crops_jiMvPH1KHk.png/100x100_crops_jiMvPH1KHk.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/thumbs_total_area_l2D65GRdLP.png/100x100_total_area_l2D65GRdLP.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/znq6dj9y920dlkp/thumbs_total_area_l2D65GRdLP.png/100x100_total_area_l2D65GRdLP.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/thumbs_total_area_l2D65GRdLP.png/100x100_total_area_l2D65GRdLP.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/znq6dj9y920dlkp/thumbs_total_area_l2D65GRdLP.png/100x100_total_area_l2D65GRdLP.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/thumbs_total_area_l2D65GRdLP.png/100x100_total_area_l2D65GRdLP.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/znq6dj9y920dlkp/thumbs_total_area_l2D65GRdLP.png/100x100_total_area_l2D65GRdLP.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/thumbs_total_area_l2D65GRdLP.png/100x100_total_area_l2D65GRdLP.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/znq6dj9y920dlkp/thumbs_total_area_l2D65GRdLP.png/100x100_total_area_l2D65GRdLP.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/total_area_l2D65GRdLP.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/znq6dj9y920dlkp/total_area_l2D65GRdLP.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/total_area_l2D65GRdLP.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/znq6dj9y920dlkp/total_area_l2D65GRdLP.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/total_area_l2D65GRdLP.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/znq6dj9y920dlkp/total_area_l2D65GRdLP.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/znq6dj9y920dlkp/total_area_l2D65GRdLP.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/znq6dj9y920dlkp/total_area_l2D65GRdLP.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/crops_mH1IrdVVH5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ztfsfoq7noumexr/crops_mH1IrdVVH5.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/crops_mH1IrdVVH5.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ztfsfoq7noumexr/crops_mH1IrdVVH5.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/crops_mH1IrdVVH5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ztfsfoq7noumexr/crops_mH1IrdVVH5.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/crops_mH1IrdVVH5.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ztfsfoq7noumexr/crops_mH1IrdVVH5.png.attrs
diff --git a/pb_data/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/thumbs_crops_mH1IrdVVH5.png/100x100_crops_mH1IrdVVH5.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ztfsfoq7noumexr/thumbs_crops_mH1IrdVVH5.png/100x100_crops_mH1IrdVVH5.png
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/thumbs_crops_mH1IrdVVH5.png/100x100_crops_mH1IrdVVH5.png
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ztfsfoq7noumexr/thumbs_crops_mH1IrdVVH5.png/100x100_crops_mH1IrdVVH5.png
diff --git a/pb_data/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/thumbs_crops_mH1IrdVVH5.png/100x100_crops_mH1IrdVVH5.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ztfsfoq7noumexr/thumbs_crops_mH1IrdVVH5.png/100x100_crops_mH1IrdVVH5.png.attrs
old mode 100755
new mode 100644
similarity index 100%
rename from pb_data/storage/lwlx5jbczvvqidy/ztfsfoq7noumexr/thumbs_crops_mH1IrdVVH5.png/100x100_crops_mH1IrdVVH5.png.attrs
rename to pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/ztfsfoq7noumexr/thumbs_crops_mH1IrdVVH5.png/100x100_crops_mH1IrdVVH5.png.attrs
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/kpi_icon_private_centers_urEe84g6Jm.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/kpi_icon_private_centers_urEe84g6Jm.png
new file mode 100644
index 0000000..a03df0c
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/kpi_icon_private_centers_urEe84g6Jm.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/kpi_icon_private_centers_urEe84g6Jm.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/kpi_icon_private_centers_urEe84g6Jm.png.attrs
new file mode 100644
index 0000000..78d114e
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/kpi_icon_private_centers_urEe84g6Jm.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"KPI-icon-PrivateCenters.png"},"md5":"LUgC6r2lEoJse4oQLX3Mkg=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/thumbs_kpi_icon_private_centers_urEe84g6Jm.png/100x100_kpi_icon_private_centers_urEe84g6Jm.png b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/thumbs_kpi_icon_private_centers_urEe84g6Jm.png/100x100_kpi_icon_private_centers_urEe84g6Jm.png
new file mode 100644
index 0000000..8b75751
Binary files /dev/null and b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/thumbs_kpi_icon_private_centers_urEe84g6Jm.png/100x100_kpi_icon_private_centers_urEe84g6Jm.png differ
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/thumbs_kpi_icon_private_centers_urEe84g6Jm.png/100x100_kpi_icon_private_centers_urEe84g6Jm.png.attrs b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/thumbs_kpi_icon_private_centers_urEe84g6Jm.png/100x100_kpi_icon_private_centers_urEe84g6Jm.png.attrs
new file mode 100644
index 0000000..b3ffa0b
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/storage1/lwlx5jbczvvqidy/zzqwp98e9ur1lhq/thumbs_kpi_icon_private_centers_urEe84g6Jm.png/100x100_kpi_icon_private_centers_urEe84g6Jm.png.attrs
@@ -0,0 +1 @@
+{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"azrHU6swT3mN0xn1A7jLfw=="}
diff --git a/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/types.d.ts b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/types.d.ts
new file mode 100644
index 0000000..0ee8fd7
--- /dev/null
+++ b/pb_data/backups/auto_pb_backup_fcsc_ss_20251001000000/types.d.ts
@@ -0,0 +1,20717 @@
+// 1730628021
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+// -------------------------------------------------------------------
+// cronBinds
+// -------------------------------------------------------------------
+
+/**
+ * CronAdd registers a new cron job.
+ *
+ * If a cron job with the specified name already exist, it will be
+ * replaced with the new one.
+ *
+ * Example:
+ *
+ * ```js
+ * // prints "Hello world!" on every 30 minutes
+ * cronAdd("hello", "*\/30 * * * *", () => {
+ * console.log("Hello world!")
+ * })
+ * ```
+ *
+ * _Note that this method is available only in pb_hooks context._
+ *
+ * @group PocketBase
+ */
+declare function cronAdd(
+ jobId: string,
+ cronExpr: string,
+ handler: () => void,
+): void;
+
+/**
+ * CronRemove removes a single registered cron job by its name.
+ *
+ * Example:
+ *
+ * ```js
+ * cronRemove("hello")
+ * ```
+ *
+ * _Note that this method is available only in pb_hooks context._
+ *
+ * @group PocketBase
+ */
+declare function cronRemove(jobId: string): void;
+
+// -------------------------------------------------------------------
+// routerBinds
+// -------------------------------------------------------------------
+
+/**
+ * RouterAdd registers a new route definition.
+ *
+ * Example:
+ *
+ * ```js
+ * routerAdd("GET", "/hello", (c) => {
+ * return c.json(200, {"message": "Hello!"})
+ * }, $apis.requireAdminOrRecordAuth())
+ * ```
+ *
+ * _Note that this method is available only in pb_hooks context._
+ *
+ * @group PocketBase
+ */
+declare function routerAdd(
+ method: string,
+ path: string,
+ handler: echo.HandlerFunc,
+ ...middlewares: Array,
+): void;
+
+/**
+ * RouterUse registers one or more global middlewares that are executed
+ * along the handler middlewares after a matching route is found.
+ *
+ * Example:
+ *
+ * ```js
+ * routerUse((next) => {
+ * return (c) => {
+ * console.log(c.path())
+ * return next(c)
+ * }
+ * })
+ * ```
+ *
+ * _Note that this method is available only in pb_hooks context._
+ *
+ * @group PocketBase
+ */
+declare function routerUse(...middlewares: Array): void;
+
+/**
+ * RouterPre registers one or more global middlewares that are executed
+ * BEFORE the router processes the request. It is usually used for making
+ * changes to the request properties, for example, adding or removing
+ * a trailing slash or adding segments to a path so it matches a route.
+ *
+ * NB! Since the router will not have processed the request yet,
+ * middlewares registered at this level won't have access to any path
+ * related APIs from echo.Context.
+ *
+ * Example:
+ *
+ * ```js
+ * routerPre((next) => {
+ * return (c) => {
+ * console.log(c.request().url)
+ * return next(c)
+ * }
+ * })
+ * ```
+ *
+ * _Note that this method is available only in pb_hooks context._
+ *
+ * @group PocketBase
+ */
+declare function routerPre(...middlewares: Array): void;
+
+// -------------------------------------------------------------------
+// baseBinds
+// -------------------------------------------------------------------
+
+/**
+ * Global helper variable that contains the absolute path to the app pb_hooks directory.
+ *
+ * @group PocketBase
+ */
+declare var __hooks: string
+
+// Utility type to exclude the on* hook methods from a type
+// (hooks are separately generated as global methods).
+//
+// See https://www.typescriptlang.org/docs/handbook/2/mapped-types.html#key-remapping-via-as
+type excludeHooks = {
+ [Property in keyof Type as Exclude]: Type[Property]
+};
+
+// CoreApp without the on* hook methods
+type CoreApp = excludeHooks
+
+// PocketBase without the on* hook methods
+type PocketBase = excludeHooks
+
+/**
+ * `$app` is the current running PocketBase instance that is globally
+ * available in each .pb.js file.
+ *
+ * _Note that this variable is available only in pb_hooks context._
+ *
+ * @namespace
+ * @group PocketBase
+ */
+declare var $app: PocketBase
+
+/**
+ * `$template` is a global helper to load and cache HTML templates on the fly.
+ *
+ * The templates uses the standard Go [html/template](https://pkg.go.dev/html/template)
+ * and [text/template](https://pkg.go.dev/text/template) package syntax.
+ *
+ * Example:
+ *
+ * ```js
+ * const html = $template.loadFiles(
+ * "views/layout.html",
+ * "views/content.html",
+ * ).render({"name": "John"})
+ * ```
+ *
+ * _Note that this method is available only in pb_hooks context._
+ *
+ * @namespace
+ * @group PocketBase
+ */
+declare var $template: template.Registry
+
+/**
+ * This method is superseded by toString.
+ *
+ * @deprecated
+ * @group PocketBase
+ */
+declare function readerToString(reader: any, maxBytes?: number): string;
+
+/**
+ * toString stringifies the specified value.
+ *
+ * Support optional second maxBytes argument to limit the max read bytes
+ * when the value is a io.Reader (default to 32MB).
+ *
+ * Types that don't have explicit string representation are json serialized.
+ *
+ * Example:
+ *
+ * ```js
+ * // io.Reader
+ * const ex1 = toString(e.request.body)
+ *
+ * // slice of bytes ("hello")
+ * const ex2 = toString([104 101 108 108 111])
+ * ```
+ *
+ * @group PocketBase
+ */
+declare function toString(val: any, maxBytes?: number): string;
+
+/**
+ * sleep pauses the current goroutine for at least the specified user duration (in ms).
+ * A zero or negative duration returns immediately.
+ *
+ * Example:
+ *
+ * ```js
+ * sleep(250) // sleeps for 250ms
+ * ```
+ *
+ * @group PocketBase
+ */
+declare function sleep(milliseconds: number): void;
+
+/**
+ * arrayOf creates a placeholder array of the specified models.
+ * Usually used to populate DB result into an array of models.
+ *
+ * Example:
+ *
+ * ```js
+ * const records = arrayOf(new Record)
+ *
+ * $app.dao().recordQuery("articles").limit(10).all(records)
+ * ```
+ *
+ * @group PocketBase
+ */
+declare function arrayOf(model: T): Array;
+
+/**
+ * DynamicModel creates a new dynamic model with fields from the provided data shape.
+ *
+ * Example:
+ *
+ * ```js
+ * const model = new DynamicModel({
+ * name: ""
+ * age: 0,
+ * active: false,
+ * roles: [],
+ * meta: {}
+ * })
+ * ```
+ *
+ * @group PocketBase
+ */
+declare class DynamicModel {
+ constructor(shape?: { [key:string]: any })
+}
+
+/**
+ * Record model class.
+ *
+ * ```js
+ * const collection = $app.dao().findCollectionByNameOrId("article")
+ *
+ * const record = new Record(collection, {
+ * title: "Lorem ipsum"
+ * })
+ *
+ * // or set field values after the initialization
+ * record.set("description", "...")
+ * ```
+ *
+ * @group PocketBase
+ */
+declare const Record: {
+ new(collection?: models.Collection, data?: { [key:string]: any }): models.Record
+
+ // note: declare as "newable" const due to conflict with the Record TS utility type
+}
+
+interface Collection extends models.Collection{} // merge
+/**
+ * Collection model class.
+ *
+ * ```js
+ * const collection = new Collection({
+ * name: "article",
+ * type: "base",
+ * listRule: "@request.auth.id != '' || status = 'public'",
+ * viewRule: "@request.auth.id != '' || status = 'public'",
+ * deleteRule: "@request.auth.id != ''",
+ * schema: [
+ * {
+ * name: "title",
+ * type: "text",
+ * required: true,
+ * options: { min: 6, max: 100 },
+ * },
+ * {
+ * name: "description",
+ * type: "text",
+ * },
+ * ]
+ * })
+ * ```
+ *
+ * @group PocketBase
+ */
+declare class Collection implements models.Collection {
+ constructor(data?: Partial)
+}
+
+interface Admin extends models.Admin{} // merge
+/**
+ * Admin model class.
+ *
+ * ```js
+ * const admin = new Admin()
+ * admin.email = "test@example.com"
+ * admin.setPassword(1234567890)
+ * ```
+ *
+ * @group PocketBase
+ */
+declare class Admin implements models.Admin {
+ constructor(data?: Partial)
+}
+
+interface Schema extends schema.Schema{} // merge
+/**
+ * Schema model class, usually used to define the Collection.schema field.
+ *
+ * @group PocketBase
+ */
+declare class Schema implements schema.Schema {
+ constructor(data?: Partial)
+}
+
+interface SchemaField extends schema.SchemaField{} // merge
+/**
+ * SchemaField model class, usually used as part of the Schema model.
+ *
+ * @group PocketBase
+ */
+declare class SchemaField implements schema.SchemaField {
+ constructor(data?: Partial)
+}
+
+interface MailerMessage extends mailer.Message{} // merge
+/**
+ * MailerMessage defines a single email message.
+ *
+ * ```js
+ * const message = new MailerMessage({
+ * from: {
+ * address: $app.settings().meta.senderAddress,
+ * name: $app.settings().meta.senderName,
+ * },
+ * to: [{address: "test@example.com"}],
+ * subject: "YOUR_SUBJECT...",
+ * html: "YOUR_HTML_BODY...",
+ * })
+ *
+ * $app.newMailClient().send(message)
+ * ```
+ *
+ * @group PocketBase
+ */
+declare class MailerMessage implements mailer.Message {
+ constructor(message?: Partial)
+}
+
+interface Command extends cobra.Command{} // merge
+/**
+ * Command defines a single console command.
+ *
+ * Example:
+ *
+ * ```js
+ * const command = new Command({
+ * use: "hello",
+ * run: (cmd, args) => { console.log("Hello world!") },
+ * })
+ *
+ * $app.rootCmd.addCommand(command);
+ * ```
+ *
+ * @group PocketBase
+ */
+declare class Command implements cobra.Command {
+ constructor(cmd?: Partial)
+}
+
+interface RequestInfo extends models.RequestInfo{} // merge
+/**
+ * RequestInfo defines a single models.RequestInfo instance, usually used
+ * as part of various filter checks.
+ *
+ * Example:
+ *
+ * ```js
+ * const authRecord = $app.dao().findAuthRecordByEmail("users", "test@example.com")
+ *
+ * const info = new RequestInfo({
+ * authRecord: authRecord,
+ * data: {"name": 123},
+ * headers: {"x-token": "..."},
+ * })
+ *
+ * const record = $app.dao().findFirstRecordByData("articles", "slug", "hello")
+ *
+ * const canAccess = $app.dao().canAccessRecord(record, info, "@request.auth.id != '' && @request.data.name = 123")
+ * ```
+ *
+ * @group PocketBase
+ */
+declare class RequestInfo implements models.RequestInfo {
+ constructor(date?: Partial)
+}
+
+interface DateTime extends types.DateTime{} // merge
+/**
+ * DateTime defines a single DateTime type instance.
+ *
+ * Example:
+ *
+ * ```js
+ * const dt0 = new DateTime() // now
+ *
+ * const dt1 = new DateTime('2023-07-01 00:00:00.000Z')
+ * ```
+ *
+ * @group PocketBase
+ */
+declare class DateTime implements types.DateTime {
+ constructor(date?: string)
+}
+
+interface ValidationError extends ozzo_validation.Error{} // merge
+/**
+ * ValidationError defines a single formatted data validation error,
+ * usually used as part of an error response.
+ *
+ * ```js
+ * new ValidationError("invalid_title", "Title is not valid")
+ * ```
+ *
+ * @group PocketBase
+ */
+declare class ValidationError implements ozzo_validation.Error {
+ constructor(code?: string, message?: string)
+}
+
+interface Dao extends daos.Dao{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class Dao implements daos.Dao {
+ constructor(concurrentDB?: dbx.Builder, nonconcurrentDB?: dbx.Builder)
+}
+
+interface Cookie extends http.Cookie{} // merge
+/**
+ * A Cookie represents an HTTP cookie as sent in the Set-Cookie header of an
+ * HTTP response.
+ *
+ * Example:
+ *
+ * ```js
+ * routerAdd("POST", "/example", (c) => {
+ * c.setCookie(new Cookie({
+ * name: "example_name",
+ * value: "example_value",
+ * path: "/",
+ * domain: "example.com",
+ * maxAge: 10,
+ * secure: true,
+ * httpOnly: true,
+ * sameSite: 3,
+ * }))
+ *
+ * return c.redirect(200, "/");
+ * })
+ * ```
+ *
+ * @group PocketBase
+ */
+declare class Cookie implements http.Cookie {
+ constructor(options?: Partial)
+}
+
+interface SubscriptionMessage extends subscriptions.Message{} // merge
+/**
+ * SubscriptionMessage defines a realtime subscription payload.
+ *
+ * Example:
+ *
+ * ```js
+ * onRealtimeConnectRequest((e) => {
+ * e.client.send(new SubscriptionMessage({
+ * name: "example",
+ * data: '{"greeting": "Hello world"}'
+ * }))
+ * })
+ * ```
+ *
+ * @group PocketBase
+ */
+declare class SubscriptionMessage implements subscriptions.Message {
+ constructor(options?: Partial)
+}
+
+// -------------------------------------------------------------------
+// dbxBinds
+// -------------------------------------------------------------------
+
+/**
+ * `$dbx` defines common utility for working with the DB abstraction.
+ * For examples and guides please check the [Database guide](https://pocketbase.io/docs/js-database).
+ *
+ * @group PocketBase
+ */
+declare namespace $dbx {
+ /**
+ * {@inheritDoc dbx.HashExp}
+ */
+ export function hashExp(pairs: { [key:string]: any }): dbx.Expression
+
+ let _in: dbx._in
+ export { _in as in }
+
+ export let exp: dbx.newExp
+ export let not: dbx.not
+ export let and: dbx.and
+ export let or: dbx.or
+ export let notIn: dbx.notIn
+ export let like: dbx.like
+ export let orLike: dbx.orLike
+ export let notLike: dbx.notLike
+ export let orNotLike: dbx.orNotLike
+ export let exists: dbx.exists
+ export let notExists: dbx.notExists
+ export let between: dbx.between
+ export let notBetween: dbx.notBetween
+}
+
+// -------------------------------------------------------------------
+// tokensBinds
+// -------------------------------------------------------------------
+
+/**
+ * `$tokens` defines high level helpers to generate
+ * various admins and auth records tokens (auth, forgotten password, etc.).
+ *
+ * For more control over the generated token, you can check `$security`.
+ *
+ * @group PocketBase
+ */
+declare namespace $tokens {
+ let adminAuthToken: tokens.newAdminAuthToken
+ let adminResetPasswordToken: tokens.newAdminResetPasswordToken
+ let adminFileToken: tokens.newAdminFileToken
+ let recordAuthToken: tokens.newRecordAuthToken
+ let recordVerifyToken: tokens.newRecordVerifyToken
+ let recordResetPasswordToken: tokens.newRecordResetPasswordToken
+ let recordChangeEmailToken: tokens.newRecordChangeEmailToken
+ let recordFileToken: tokens.newRecordFileToken
+}
+
+// -------------------------------------------------------------------
+// mailsBinds
+// -------------------------------------------------------------------
+
+/**
+ * `$mails` defines helpers to send common
+ * admins and auth records emails like verification, password reset, etc.
+ *
+ * @group PocketBase
+ */
+declare namespace $mails {
+ let sendAdminPasswordReset: mails.sendAdminPasswordReset
+ let sendRecordPasswordReset: mails.sendRecordPasswordReset
+ let sendRecordVerification: mails.sendRecordVerification
+ let sendRecordChangeEmail: mails.sendRecordChangeEmail
+}
+
+// -------------------------------------------------------------------
+// securityBinds
+// -------------------------------------------------------------------
+
+/**
+ * `$security` defines low level helpers for creating
+ * and parsing JWTs, random string generation, AES encryption, etc.
+ *
+ * @group PocketBase
+ */
+declare namespace $security {
+ let randomString: security.randomString
+ let randomStringWithAlphabet: security.randomStringWithAlphabet
+ let pseudorandomString: security.pseudorandomString
+ let pseudorandomStringWithAlphabet: security.pseudorandomStringWithAlphabet
+ let encrypt: security.encrypt
+ let decrypt: security.decrypt
+ let hs256: security.hs256
+ let hs512: security.hs512
+ let equal: security.equal
+ let md5: security.md5
+ let sha256: security.sha256
+ let sha512: security.sha512
+ let createJWT: security.newJWT
+
+ /**
+ * {@inheritDoc security.parseUnverifiedJWT}
+ */
+ export function parseUnverifiedJWT(token: string): _TygojaDict
+
+ /**
+ * {@inheritDoc security.parseJWT}
+ */
+ export function parseJWT(token: string, verificationKey: string): _TygojaDict
+}
+
+// -------------------------------------------------------------------
+// filesystemBinds
+// -------------------------------------------------------------------
+
+/**
+ * `$filesystem` defines common helpers for working
+ * with the PocketBase filesystem abstraction.
+ *
+ * @group PocketBase
+ */
+declare namespace $filesystem {
+ let fileFromPath: filesystem.newFileFromPath
+ let fileFromBytes: filesystem.newFileFromBytes
+ let fileFromMultipart: filesystem.newFileFromMultipart
+
+ /**
+ * fileFromUrl creates a new File from the provided url by
+ * downloading the resource and creating a BytesReader.
+ *
+ * Example:
+ *
+ * ```js
+ * // with default max timeout of 120sec
+ * const file1 = $filesystem.fileFromUrl("https://...")
+ *
+ * // with custom timeout of 15sec
+ * const file2 = $filesystem.fileFromUrl("https://...", 15)
+ * ```
+ */
+ export function fileFromUrl(url: string, secTimeout?: number): filesystem.File
+}
+
+// -------------------------------------------------------------------
+// filepathBinds
+// -------------------------------------------------------------------
+
+/**
+ * `$filepath` defines common helpers for manipulating filename
+ * paths in a way compatible with the target operating system-defined file paths.
+ *
+ * @group PocketBase
+ */
+declare namespace $filepath {
+ export let base: filepath.base
+ export let clean: filepath.clean
+ export let dir: filepath.dir
+ export let ext: filepath.ext
+ export let fromSlash: filepath.fromSlash
+ export let glob: filepath.glob
+ export let isAbs: filepath.isAbs
+ export let join: filepath.join
+ export let match: filepath.match
+ export let rel: filepath.rel
+ export let split: filepath.split
+ export let splitList: filepath.splitList
+ export let toSlash: filepath.toSlash
+ export let walk: filepath.walk
+ export let walkDir: filepath.walkDir
+}
+
+// -------------------------------------------------------------------
+// osBinds
+// -------------------------------------------------------------------
+
+/**
+ * `$os` defines common helpers for working with the OS level primitives
+ * (eg. deleting directories, executing shell commands, etc.).
+ *
+ * @group PocketBase
+ */
+declare namespace $os {
+ /**
+ * Legacy alias for $os.cmd().
+ */
+ export let exec: exec.command
+
+ /**
+ * Prepares an external OS command.
+ *
+ * Example:
+ *
+ * ```js
+ * // prepare the command to execute
+ * const cmd = $os.cmd('ls', '-sl')
+ *
+ * // execute the command and return its standard output as string
+ * const output = toString(cmd.output());
+ * ```
+ */
+ export let cmd: exec.command
+
+ export let args: os.args
+ export let exit: os.exit
+ export let getenv: os.getenv
+ export let dirFS: os.dirFS
+ export let readFile: os.readFile
+ export let writeFile: os.writeFile
+ export let readDir: os.readDir
+ export let tempDir: os.tempDir
+ export let truncate: os.truncate
+ export let getwd: os.getwd
+ export let mkdir: os.mkdir
+ export let mkdirAll: os.mkdirAll
+ export let rename: os.rename
+ export let remove: os.remove
+ export let removeAll: os.removeAll
+}
+
+// -------------------------------------------------------------------
+// formsBinds
+// -------------------------------------------------------------------
+
+interface AdminLoginForm extends forms.AdminLogin{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class AdminLoginForm implements forms.AdminLogin {
+ constructor(app: CoreApp)
+}
+
+interface AdminPasswordResetConfirmForm extends forms.AdminPasswordResetConfirm{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class AdminPasswordResetConfirmForm implements forms.AdminPasswordResetConfirm {
+ constructor(app: CoreApp)
+}
+
+interface AdminPasswordResetRequestForm extends forms.AdminPasswordResetRequest{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class AdminPasswordResetRequestForm implements forms.AdminPasswordResetRequest {
+ constructor(app: CoreApp)
+}
+
+interface AdminUpsertForm extends forms.AdminUpsert{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class AdminUpsertForm implements forms.AdminUpsert {
+ constructor(app: CoreApp, admin: models.Admin)
+}
+
+interface AppleClientSecretCreateForm extends forms.AppleClientSecretCreate{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class AppleClientSecretCreateForm implements forms.AppleClientSecretCreate {
+ constructor(app: CoreApp)
+}
+
+interface CollectionUpsertForm extends forms.CollectionUpsert{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class CollectionUpsertForm implements forms.CollectionUpsert {
+ constructor(app: CoreApp, collection: models.Collection)
+}
+
+interface CollectionsImportForm extends forms.CollectionsImport{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class CollectionsImportForm implements forms.CollectionsImport {
+ constructor(app: CoreApp)
+}
+
+interface RealtimeSubscribeForm extends forms.RealtimeSubscribe{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class RealtimeSubscribeForm implements forms.RealtimeSubscribe {}
+
+interface RecordEmailChangeConfirmForm extends forms.RecordEmailChangeConfirm{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class RecordEmailChangeConfirmForm implements forms.RecordEmailChangeConfirm {
+ constructor(app: CoreApp, collection: models.Collection)
+}
+
+interface RecordEmailChangeRequestForm extends forms.RecordEmailChangeRequest{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class RecordEmailChangeRequestForm implements forms.RecordEmailChangeRequest {
+ constructor(app: CoreApp, record: models.Record)
+}
+
+interface RecordOAuth2LoginForm extends forms.RecordOAuth2Login{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class RecordOAuth2LoginForm implements forms.RecordOAuth2Login {
+ constructor(app: CoreApp, collection: models.Collection, optAuthRecord?: models.Record)
+}
+
+interface RecordPasswordLoginForm extends forms.RecordPasswordLogin{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class RecordPasswordLoginForm implements forms.RecordPasswordLogin {
+ constructor(app: CoreApp, collection: models.Collection)
+}
+
+interface RecordPasswordResetConfirmForm extends forms.RecordPasswordResetConfirm{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class RecordPasswordResetConfirmForm implements forms.RecordPasswordResetConfirm {
+ constructor(app: CoreApp, collection: models.Collection)
+}
+
+interface RecordPasswordResetRequestForm extends forms.RecordPasswordResetRequest{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class RecordPasswordResetRequestForm implements forms.RecordPasswordResetRequest {
+ constructor(app: CoreApp, collection: models.Collection)
+}
+
+interface RecordUpsertForm extends forms.RecordUpsert{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class RecordUpsertForm implements forms.RecordUpsert {
+ constructor(app: CoreApp, record: models.Record)
+}
+
+interface RecordVerificationConfirmForm extends forms.RecordVerificationConfirm{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class RecordVerificationConfirmForm implements forms.RecordVerificationConfirm {
+ constructor(app: CoreApp, collection: models.Collection)
+}
+
+interface RecordVerificationRequestForm extends forms.RecordVerificationRequest{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class RecordVerificationRequestForm implements forms.RecordVerificationRequest {
+ constructor(app: CoreApp, collection: models.Collection)
+}
+
+interface SettingsUpsertForm extends forms.SettingsUpsert{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class SettingsUpsertForm implements forms.SettingsUpsert {
+ constructor(app: CoreApp)
+}
+
+interface TestEmailSendForm extends forms.TestEmailSend{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class TestEmailSendForm implements forms.TestEmailSend {
+ constructor(app: CoreApp)
+}
+
+interface TestS3FilesystemForm extends forms.TestS3Filesystem{} // merge
+/**
+ * @inheritDoc
+ * @group PocketBase
+ */
+declare class TestS3FilesystemForm implements forms.TestS3Filesystem {
+ constructor(app: CoreApp)
+}
+
+// -------------------------------------------------------------------
+// apisBinds
+// -------------------------------------------------------------------
+
+interface ApiError extends apis.ApiError{} // merge
+/**
+ * @inheritDoc
+ *
+ * @group PocketBase
+ */
+declare class ApiError implements apis.ApiError {
+ constructor(status?: number, message?: string, data?: any)
+}
+
+interface NotFoundError extends apis.ApiError{} // merge
+/**
+ * NotFounderor returns 404 ApiError.
+ *
+ * @group PocketBase
+ */
+declare class NotFoundError implements apis.ApiError {
+ constructor(message?: string, data?: any)
+}
+
+interface BadRequestError extends apis.ApiError{} // merge
+/**
+ * BadRequestError returns 400 ApiError.
+ *
+ * @group PocketBase
+ */
+declare class BadRequestError implements apis.ApiError {
+ constructor(message?: string, data?: any)
+}
+
+interface ForbiddenError extends apis.ApiError{} // merge
+/**
+ * ForbiddenError returns 403 ApiError.
+ *
+ * @group PocketBase
+ */
+declare class ForbiddenError implements apis.ApiError {
+ constructor(message?: string, data?: any)
+}
+
+interface UnauthorizedError extends apis.ApiError{} // merge
+/**
+ * UnauthorizedError returns 401 ApiError.
+ *
+ * @group PocketBase
+ */
+declare class UnauthorizedError implements apis.ApiError {
+ constructor(message?: string, data?: any)
+}
+
+/**
+ * `$apis` defines commonly used PocketBase api helpers and middlewares.
+ *
+ * @group PocketBase
+ */
+declare namespace $apis {
+ /**
+ * Route handler to serve static directory content (html, js, css, etc.).
+ *
+ * If a file resource is missing and indexFallback is set, the request
+ * will be forwarded to the base index.html (useful for SPA).
+ */
+ export function staticDirectoryHandler(dir: string, indexFallback: boolean): echo.HandlerFunc
+
+ let requireGuestOnly: apis.requireGuestOnly
+ let requireRecordAuth: apis.requireRecordAuth
+ let requireAdminAuth: apis.requireAdminAuth
+ let requireAdminAuthOnlyIfAny: apis.requireAdminAuthOnlyIfAny
+ let requireAdminOrRecordAuth: apis.requireAdminOrRecordAuth
+ let requireAdminOrOwnerAuth: apis.requireAdminOrOwnerAuth
+ let activityLogger: apis.activityLogger
+ let requestInfo: apis.requestInfo
+ let recordAuthResponse: apis.recordAuthResponse
+ let gzip: middleware.gzip
+ let bodyLimit: middleware.bodyLimit
+ let enrichRecord: apis.enrichRecord
+ let enrichRecords: apis.enrichRecords
+}
+
+// -------------------------------------------------------------------
+// httpClientBinds
+// -------------------------------------------------------------------
+
+// extra FormData overload to prevent TS warnings when used with non File/Blob value.
+interface FormData {
+ append(key:string, value:any): void
+ set(key:string, value:any): void
+}
+
+/**
+ * `$http` defines common methods for working with HTTP requests.
+ *
+ * @group PocketBase
+ */
+declare namespace $http {
+ /**
+ * Sends a single HTTP request.
+ *
+ * Example:
+ *
+ * ```js
+ * const res = $http.send({
+ * url: "https://example.com",
+ * body: JSON.stringify({"title": "test"})
+ * method: "post",
+ * })
+ *
+ * console.log(res.statusCode) // the response HTTP status code
+ * console.log(res.headers) // the response headers (eg. res.headers['X-Custom'][0])
+ * console.log(res.cookies) // the response cookies (eg. res.cookies.sessionId.value)
+ * console.log(res.raw) // the response body as plain text
+ * console.log(res.json) // the response body as parsed json array or map
+ * ```
+ */
+ function send(config: {
+ url: string,
+ body?: string|FormData,
+ method?: string, // default to "GET"
+ headers?: { [key:string]: string },
+ timeout?: number, // default to 120
+
+ // deprecated, please use body instead
+ data?: { [key:string]: any },
+ }): {
+ statusCode: number,
+ headers: { [key:string]: Array },
+ cookies: { [key:string]: http.Cookie },
+ raw: string,
+ json: any,
+ };
+}
+
+// -------------------------------------------------------------------
+// migrate only
+// -------------------------------------------------------------------
+
+/**
+ * Migrate defines a single migration upgrade/downgrade action.
+ *
+ * _Note that this method is available only in pb_migrations context._
+ *
+ * @group PocketBase
+ */
+declare function migrate(
+ up: (db: dbx.Builder) => void,
+ down?: (db: dbx.Builder) => void
+): void;
+/** @group PocketBase */declare function onAdminAfterAuthRefreshRequest(handler: (e: core.AdminAuthRefreshEvent) => void): void
+/** @group PocketBase */declare function onAdminAfterAuthWithPasswordRequest(handler: (e: core.AdminAuthWithPasswordEvent) => void): void
+/** @group PocketBase */declare function onAdminAfterConfirmPasswordResetRequest(handler: (e: core.AdminConfirmPasswordResetEvent) => void): void
+/** @group PocketBase */declare function onAdminAfterCreateRequest(handler: (e: core.AdminCreateEvent) => void): void
+/** @group PocketBase */declare function onAdminAfterDeleteRequest(handler: (e: core.AdminDeleteEvent) => void): void
+/** @group PocketBase */declare function onAdminAfterRequestPasswordResetRequest(handler: (e: core.AdminRequestPasswordResetEvent) => void): void
+/** @group PocketBase */declare function onAdminAfterUpdateRequest(handler: (e: core.AdminUpdateEvent) => void): void
+/** @group PocketBase */declare function onAdminAuthRequest(handler: (e: core.AdminAuthEvent) => void): void
+/** @group PocketBase */declare function onAdminBeforeAuthRefreshRequest(handler: (e: core.AdminAuthRefreshEvent) => void): void
+/** @group PocketBase */declare function onAdminBeforeAuthWithPasswordRequest(handler: (e: core.AdminAuthWithPasswordEvent) => void): void
+/** @group PocketBase */declare function onAdminBeforeConfirmPasswordResetRequest(handler: (e: core.AdminConfirmPasswordResetEvent) => void): void
+/** @group PocketBase */declare function onAdminBeforeCreateRequest(handler: (e: core.AdminCreateEvent) => void): void
+/** @group PocketBase */declare function onAdminBeforeDeleteRequest(handler: (e: core.AdminDeleteEvent) => void): void
+/** @group PocketBase */declare function onAdminBeforeRequestPasswordResetRequest(handler: (e: core.AdminRequestPasswordResetEvent) => void): void
+/** @group PocketBase */declare function onAdminBeforeUpdateRequest(handler: (e: core.AdminUpdateEvent) => void): void
+/** @group PocketBase */declare function onAdminViewRequest(handler: (e: core.AdminViewEvent) => void): void
+/** @group PocketBase */declare function onAdminsListRequest(handler: (e: core.AdminsListEvent) => void): void
+/** @group PocketBase */declare function onAfterApiError(handler: (e: core.ApiErrorEvent) => void): void
+/** @group PocketBase */declare function onAfterBootstrap(handler: (e: core.BootstrapEvent) => void): void
+/** @group PocketBase */declare function onBeforeApiError(handler: (e: core.ApiErrorEvent) => void): void
+/** @group PocketBase */declare function onBeforeBootstrap(handler: (e: core.BootstrapEvent) => void): void
+/** @group PocketBase */declare function onCollectionAfterCreateRequest(handler: (e: core.CollectionCreateEvent) => void): void
+/** @group PocketBase */declare function onCollectionAfterDeleteRequest(handler: (e: core.CollectionDeleteEvent) => void): void
+/** @group PocketBase */declare function onCollectionAfterUpdateRequest(handler: (e: core.CollectionUpdateEvent) => void): void
+/** @group PocketBase */declare function onCollectionBeforeCreateRequest(handler: (e: core.CollectionCreateEvent) => void): void
+/** @group PocketBase */declare function onCollectionBeforeDeleteRequest(handler: (e: core.CollectionDeleteEvent) => void): void
+/** @group PocketBase */declare function onCollectionBeforeUpdateRequest(handler: (e: core.CollectionUpdateEvent) => void): void
+/** @group PocketBase */declare function onCollectionViewRequest(handler: (e: core.CollectionViewEvent) => void): void
+/** @group PocketBase */declare function onCollectionsAfterImportRequest(handler: (e: core.CollectionsImportEvent) => void): void
+/** @group PocketBase */declare function onCollectionsBeforeImportRequest(handler: (e: core.CollectionsImportEvent) => void): void
+/** @group PocketBase */declare function onCollectionsListRequest(handler: (e: core.CollectionsListEvent) => void): void
+/** @group PocketBase */declare function onFileAfterTokenRequest(handler: (e: core.FileTokenEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onFileBeforeTokenRequest(handler: (e: core.FileTokenEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onFileDownloadRequest(handler: (e: core.FileDownloadEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onMailerAfterAdminResetPasswordSend(handler: (e: core.MailerAdminEvent) => void): void
+/** @group PocketBase */declare function onMailerAfterRecordChangeEmailSend(handler: (e: core.MailerRecordEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onMailerAfterRecordResetPasswordSend(handler: (e: core.MailerRecordEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onMailerAfterRecordVerificationSend(handler: (e: core.MailerRecordEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onMailerBeforeAdminResetPasswordSend(handler: (e: core.MailerAdminEvent) => void): void
+/** @group PocketBase */declare function onMailerBeforeRecordChangeEmailSend(handler: (e: core.MailerRecordEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onMailerBeforeRecordResetPasswordSend(handler: (e: core.MailerRecordEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onMailerBeforeRecordVerificationSend(handler: (e: core.MailerRecordEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onModelAfterCreate(handler: (e: core.ModelEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onModelAfterDelete(handler: (e: core.ModelEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onModelAfterUpdate(handler: (e: core.ModelEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onModelBeforeCreate(handler: (e: core.ModelEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onModelBeforeDelete(handler: (e: core.ModelEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onModelBeforeUpdate(handler: (e: core.ModelEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRealtimeAfterMessageSend(handler: (e: core.RealtimeMessageEvent) => void): void
+/** @group PocketBase */declare function onRealtimeAfterSubscribeRequest(handler: (e: core.RealtimeSubscribeEvent) => void): void
+/** @group PocketBase */declare function onRealtimeBeforeMessageSend(handler: (e: core.RealtimeMessageEvent) => void): void
+/** @group PocketBase */declare function onRealtimeBeforeSubscribeRequest(handler: (e: core.RealtimeSubscribeEvent) => void): void
+/** @group PocketBase */declare function onRealtimeConnectRequest(handler: (e: core.RealtimeConnectEvent) => void): void
+/** @group PocketBase */declare function onRealtimeDisconnectRequest(handler: (e: core.RealtimeDisconnectEvent) => void): void
+/** @group PocketBase */declare function onRecordAfterAuthRefreshRequest(handler: (e: core.RecordAuthRefreshEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordAfterAuthWithOAuth2Request(handler: (e: core.RecordAuthWithOAuth2Event) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordAfterAuthWithPasswordRequest(handler: (e: core.RecordAuthWithPasswordEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordAfterConfirmEmailChangeRequest(handler: (e: core.RecordConfirmEmailChangeEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordAfterConfirmPasswordResetRequest(handler: (e: core.RecordConfirmPasswordResetEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordAfterConfirmVerificationRequest(handler: (e: core.RecordConfirmVerificationEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordAfterCreateRequest(handler: (e: core.RecordCreateEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordAfterDeleteRequest(handler: (e: core.RecordDeleteEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordAfterRequestEmailChangeRequest(handler: (e: core.RecordRequestEmailChangeEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordAfterRequestPasswordResetRequest(handler: (e: core.RecordRequestPasswordResetEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordAfterRequestVerificationRequest(handler: (e: core.RecordRequestVerificationEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordAfterUnlinkExternalAuthRequest(handler: (e: core.RecordUnlinkExternalAuthEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordAfterUpdateRequest(handler: (e: core.RecordUpdateEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordAuthRequest(handler: (e: core.RecordAuthEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordBeforeAuthRefreshRequest(handler: (e: core.RecordAuthRefreshEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordBeforeAuthWithOAuth2Request(handler: (e: core.RecordAuthWithOAuth2Event) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordBeforeAuthWithPasswordRequest(handler: (e: core.RecordAuthWithPasswordEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordBeforeConfirmEmailChangeRequest(handler: (e: core.RecordConfirmEmailChangeEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordBeforeConfirmPasswordResetRequest(handler: (e: core.RecordConfirmPasswordResetEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordBeforeConfirmVerificationRequest(handler: (e: core.RecordConfirmVerificationEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordBeforeCreateRequest(handler: (e: core.RecordCreateEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordBeforeDeleteRequest(handler: (e: core.RecordDeleteEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordBeforeRequestEmailChangeRequest(handler: (e: core.RecordRequestEmailChangeEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordBeforeRequestPasswordResetRequest(handler: (e: core.RecordRequestPasswordResetEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordBeforeRequestVerificationRequest(handler: (e: core.RecordRequestVerificationEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordBeforeUnlinkExternalAuthRequest(handler: (e: core.RecordUnlinkExternalAuthEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordBeforeUpdateRequest(handler: (e: core.RecordUpdateEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordListExternalAuthsRequest(handler: (e: core.RecordListExternalAuthsEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordViewRequest(handler: (e: core.RecordViewEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onRecordsListRequest(handler: (e: core.RecordsListEvent) => void, ...tags: string[]): void
+/** @group PocketBase */declare function onSettingsAfterUpdateRequest(handler: (e: core.SettingsUpdateEvent) => void): void
+/** @group PocketBase */declare function onSettingsBeforeUpdateRequest(handler: (e: core.SettingsUpdateEvent) => void): void
+/** @group PocketBase */declare function onSettingsListRequest(handler: (e: core.SettingsListEvent) => void): void
+/** @group PocketBase */declare function onTerminate(handler: (e: core.TerminateEvent) => void): void
+type _TygojaDict = { [key:string | number | symbol]: any; }
+type _TygojaAny = any
+
+/**
+ * Package os provides a platform-independent interface to operating system
+ * functionality. The design is Unix-like, although the error handling is
+ * Go-like; failing calls return values of type error rather than error numbers.
+ * Often, more information is available within the error. For example,
+ * if a call that takes a file name fails, such as [Open] or [Stat], the error
+ * will include the failing file name when printed and will be of type
+ * [*PathError], which may be unpacked for more information.
+ *
+ * The os interface is intended to be uniform across all operating systems.
+ * Features not generally available appear in the system-specific package syscall.
+ *
+ * Here is a simple example, opening a file and reading some of it.
+ *
+ * ```
+ * file, err := os.Open("file.go") // For read access.
+ * if err != nil {
+ * log.Fatal(err)
+ * }
+ * ```
+ *
+ * If the open fails, the error string will be self-explanatory, like
+ *
+ * ```
+ * open file.go: no such file or directory
+ * ```
+ *
+ * The file's data can then be read into a slice of bytes. Read and
+ * Write take their byte counts from the length of the argument slice.
+ *
+ * ```
+ * data := make([]byte, 100)
+ * count, err := file.Read(data)
+ * if err != nil {
+ * log.Fatal(err)
+ * }
+ * fmt.Printf("read %d bytes: %q\n", count, data[:count])
+ * ```
+ *
+ * # Concurrency
+ *
+ * The methods of [File] correspond to file system operations. All are
+ * safe for concurrent use. The maximum number of concurrent
+ * operations on a File may be limited by the OS or the system. The
+ * number should be high, but exceeding it may degrade performance or
+ * cause other issues.
+ */
+namespace os {
+ interface readdirMode extends Number{}
+ interface File {
+ /**
+ * Readdir reads the contents of the directory associated with file and
+ * returns a slice of up to n [FileInfo] values, as would be returned
+ * by [Lstat], in directory order. Subsequent calls on the same file will yield
+ * further FileInfos.
+ *
+ * If n > 0, Readdir returns at most n FileInfo structures. In this case, if
+ * Readdir returns an empty slice, it will return a non-nil error
+ * explaining why. At the end of a directory, the error is [io.EOF].
+ *
+ * If n <= 0, Readdir returns all the FileInfo from the directory in
+ * a single slice. In this case, if Readdir succeeds (reads all
+ * the way to the end of the directory), it returns the slice and a
+ * nil error. If it encounters an error before the end of the
+ * directory, Readdir returns the FileInfo read until that point
+ * and a non-nil error.
+ *
+ * Most clients are better served by the more efficient ReadDir method.
+ */
+ readdir(n: number): Array
+ }
+ interface File {
+ /**
+ * Readdirnames reads the contents of the directory associated with file
+ * and returns a slice of up to n names of files in the directory,
+ * in directory order. Subsequent calls on the same file will yield
+ * further names.
+ *
+ * If n > 0, Readdirnames returns at most n names. In this case, if
+ * Readdirnames returns an empty slice, it will return a non-nil error
+ * explaining why. At the end of a directory, the error is [io.EOF].
+ *
+ * If n <= 0, Readdirnames returns all the names from the directory in
+ * a single slice. In this case, if Readdirnames succeeds (reads all
+ * the way to the end of the directory), it returns the slice and a
+ * nil error. If it encounters an error before the end of the
+ * directory, Readdirnames returns the names read until that point and
+ * a non-nil error.
+ */
+ readdirnames(n: number): Array
+ }
+ /**
+ * A DirEntry is an entry read from a directory
+ * (using the [ReadDir] function or a [File.ReadDir] method).
+ */
+ interface DirEntry extends fs.DirEntry{}
+ interface File {
+ /**
+ * ReadDir reads the contents of the directory associated with the file f
+ * and returns a slice of [DirEntry] values in directory order.
+ * Subsequent calls on the same file will yield later DirEntry records in the directory.
+ *
+ * If n > 0, ReadDir returns at most n DirEntry records.
+ * In this case, if ReadDir returns an empty slice, it will return an error explaining why.
+ * At the end of a directory, the error is [io.EOF].
+ *
+ * If n <= 0, ReadDir returns all the DirEntry records remaining in the directory.
+ * When it succeeds, it returns a nil error (not io.EOF).
+ */
+ readDir(n: number): Array
+ }
+ interface readDir {
+ /**
+ * ReadDir reads the named directory,
+ * returning all its directory entries sorted by filename.
+ * If an error occurs reading the directory,
+ * ReadDir returns the entries it was able to read before the error,
+ * along with the error.
+ */
+ (name: string): Array
+ }
+ interface copyFS {
+ /**
+ * CopyFS copies the file system fsys into the directory dir,
+ * creating dir if necessary.
+ *
+ * Files are created with mode 0o666 plus any execute permissions
+ * from the source, and directories are created with mode 0o777
+ * (before umask).
+ *
+ * CopyFS will not overwrite existing files. If a file name in fsys
+ * already exists in the destination, CopyFS will return an error
+ * such that errors.Is(err, fs.ErrExist) will be true.
+ *
+ * Symbolic links in fsys are not supported. A *PathError with Err set
+ * to ErrInvalid is returned when copying from a symbolic link.
+ *
+ * Symbolic links in dir are followed.
+ *
+ * Copying stops at and returns the first error encountered.
+ */
+ (dir: string, fsys: fs.FS): void
+ }
+ /**
+ * Auxiliary information if the File describes a directory
+ */
+ interface dirInfo {
+ }
+ interface expand {
+ /**
+ * Expand replaces ${var} or $var in the string based on the mapping function.
+ * For example, [os.ExpandEnv](s) is equivalent to [os.Expand](s, [os.Getenv]).
+ */
+ (s: string, mapping: (_arg0: string) => string): string
+ }
+ interface expandEnv {
+ /**
+ * ExpandEnv replaces ${var} or $var in the string according to the values
+ * of the current environment variables. References to undefined
+ * variables are replaced by the empty string.
+ */
+ (s: string): string
+ }
+ interface getenv {
+ /**
+ * Getenv retrieves the value of the environment variable named by the key.
+ * It returns the value, which will be empty if the variable is not present.
+ * To distinguish between an empty value and an unset value, use [LookupEnv].
+ */
+ (key: string): string
+ }
+ interface lookupEnv {
+ /**
+ * LookupEnv retrieves the value of the environment variable named
+ * by the key. If the variable is present in the environment the
+ * value (which may be empty) is returned and the boolean is true.
+ * Otherwise the returned value will be empty and the boolean will
+ * be false.
+ */
+ (key: string): [string, boolean]
+ }
+ interface setenv {
+ /**
+ * Setenv sets the value of the environment variable named by the key.
+ * It returns an error, if any.
+ */
+ (key: string, value: string): void
+ }
+ interface unsetenv {
+ /**
+ * Unsetenv unsets a single environment variable.
+ */
+ (key: string): void
+ }
+ interface clearenv {
+ /**
+ * Clearenv deletes all environment variables.
+ */
+ (): void
+ }
+ interface environ {
+ /**
+ * Environ returns a copy of strings representing the environment,
+ * in the form "key=value".
+ */
+ (): Array
+ }
+ interface timeout {
+ [key:string]: any;
+ timeout(): boolean
+ }
+ /**
+ * PathError records an error and the operation and file path that caused it.
+ */
+ interface PathError extends fs.PathError{}
+ /**
+ * SyscallError records an error from a specific system call.
+ */
+ interface SyscallError {
+ syscall: string
+ err: Error
+ }
+ interface SyscallError {
+ error(): string
+ }
+ interface SyscallError {
+ unwrap(): void
+ }
+ interface SyscallError {
+ /**
+ * Timeout reports whether this error represents a timeout.
+ */
+ timeout(): boolean
+ }
+ interface newSyscallError {
+ /**
+ * NewSyscallError returns, as an error, a new [SyscallError]
+ * with the given system call name and error details.
+ * As a convenience, if err is nil, NewSyscallError returns nil.
+ */
+ (syscall: string, err: Error): void
+ }
+ interface isExist {
+ /**
+ * IsExist returns a boolean indicating whether its argument is known to report
+ * that a file or directory already exists. It is satisfied by [ErrExist] as
+ * well as some syscall errors.
+ *
+ * This function predates [errors.Is]. It only supports errors returned by
+ * the os package. New code should use errors.Is(err, fs.ErrExist).
+ */
+ (err: Error): boolean
+ }
+ interface isNotExist {
+ /**
+ * IsNotExist returns a boolean indicating whether its argument is known to
+ * report that a file or directory does not exist. It is satisfied by
+ * [ErrNotExist] as well as some syscall errors.
+ *
+ * This function predates [errors.Is]. It only supports errors returned by
+ * the os package. New code should use errors.Is(err, fs.ErrNotExist).
+ */
+ (err: Error): boolean
+ }
+ interface isPermission {
+ /**
+ * IsPermission returns a boolean indicating whether its argument is known to
+ * report that permission is denied. It is satisfied by [ErrPermission] as well
+ * as some syscall errors.
+ *
+ * This function predates [errors.Is]. It only supports errors returned by
+ * the os package. New code should use errors.Is(err, fs.ErrPermission).
+ */
+ (err: Error): boolean
+ }
+ interface isTimeout {
+ /**
+ * IsTimeout returns a boolean indicating whether its argument is known
+ * to report that a timeout occurred.
+ *
+ * This function predates [errors.Is], and the notion of whether an
+ * error indicates a timeout can be ambiguous. For example, the Unix
+ * error EWOULDBLOCK sometimes indicates a timeout and sometimes does not.
+ * New code should use errors.Is with a value appropriate to the call
+ * returning the error, such as [os.ErrDeadlineExceeded].
+ */
+ (err: Error): boolean
+ }
+ interface syscallErrorType extends syscall.Errno{}
+ interface processMode extends Number{}
+ interface processStatus extends Number{}
+ /**
+ * Process stores the information about a process created by [StartProcess].
+ */
+ interface Process {
+ pid: number
+ }
+ /**
+ * ProcAttr holds the attributes that will be applied to a new process
+ * started by StartProcess.
+ */
+ interface ProcAttr {
+ /**
+ * If Dir is non-empty, the child changes into the directory before
+ * creating the process.
+ */
+ dir: string
+ /**
+ * If Env is non-nil, it gives the environment variables for the
+ * new process in the form returned by Environ.
+ * If it is nil, the result of Environ will be used.
+ */
+ env: Array
+ /**
+ * Files specifies the open files inherited by the new process. The
+ * first three entries correspond to standard input, standard output, and
+ * standard error. An implementation may support additional entries,
+ * depending on the underlying operating system. A nil entry corresponds
+ * to that file being closed when the process starts.
+ * On Unix systems, StartProcess will change these File values
+ * to blocking mode, which means that SetDeadline will stop working
+ * and calling Close will not interrupt a Read or Write.
+ */
+ files: Array<(File | undefined)>
+ /**
+ * Operating system-specific process creation attributes.
+ * Note that setting this field means that your program
+ * may not execute properly or even compile on some
+ * operating systems.
+ */
+ sys?: syscall.SysProcAttr
+ }
+ /**
+ * A Signal represents an operating system signal.
+ * The usual underlying implementation is operating system-dependent:
+ * on Unix it is syscall.Signal.
+ */
+ interface Signal {
+ [key:string]: any;
+ string(): string
+ signal(): void // to distinguish from other Stringers
+ }
+ interface getpid {
+ /**
+ * Getpid returns the process id of the caller.
+ */
+ (): number
+ }
+ interface getppid {
+ /**
+ * Getppid returns the process id of the caller's parent.
+ */
+ (): number
+ }
+ interface findProcess {
+ /**
+ * FindProcess looks for a running process by its pid.
+ *
+ * The [Process] it returns can be used to obtain information
+ * about the underlying operating system process.
+ *
+ * On Unix systems, FindProcess always succeeds and returns a Process
+ * for the given pid, regardless of whether the process exists. To test whether
+ * the process actually exists, see whether p.Signal(syscall.Signal(0)) reports
+ * an error.
+ */
+ (pid: number): (Process)
+ }
+ interface startProcess {
+ /**
+ * StartProcess starts a new process with the program, arguments and attributes
+ * specified by name, argv and attr. The argv slice will become [os.Args] in the
+ * new process, so it normally starts with the program name.
+ *
+ * If the calling goroutine has locked the operating system thread
+ * with [runtime.LockOSThread] and modified any inheritable OS-level
+ * thread state (for example, Linux or Plan 9 name spaces), the new
+ * process will inherit the caller's thread state.
+ *
+ * StartProcess is a low-level interface. The [os/exec] package provides
+ * higher-level interfaces.
+ *
+ * If there is an error, it will be of type [*PathError].
+ */
+ (name: string, argv: Array, attr: ProcAttr): (Process)
+ }
+ interface Process {
+ /**
+ * Release releases any resources associated with the [Process] p,
+ * rendering it unusable in the future.
+ * Release only needs to be called if [Process.Wait] is not.
+ */
+ release(): void
+ }
+ interface Process {
+ /**
+ * Kill causes the [Process] to exit immediately. Kill does not wait until
+ * the Process has actually exited. This only kills the Process itself,
+ * not any other processes it may have started.
+ */
+ kill(): void
+ }
+ interface Process {
+ /**
+ * Wait waits for the [Process] to exit, and then returns a
+ * ProcessState describing its status and an error, if any.
+ * Wait releases any resources associated with the Process.
+ * On most operating systems, the Process must be a child
+ * of the current process or an error will be returned.
+ */
+ wait(): (ProcessState)
+ }
+ interface Process {
+ /**
+ * Signal sends a signal to the [Process].
+ * Sending [Interrupt] on Windows is not implemented.
+ */
+ signal(sig: Signal): void
+ }
+ interface ProcessState {
+ /**
+ * UserTime returns the user CPU time of the exited process and its children.
+ */
+ userTime(): time.Duration
+ }
+ interface ProcessState {
+ /**
+ * SystemTime returns the system CPU time of the exited process and its children.
+ */
+ systemTime(): time.Duration
+ }
+ interface ProcessState {
+ /**
+ * Exited reports whether the program has exited.
+ * On Unix systems this reports true if the program exited due to calling exit,
+ * but false if the program terminated due to a signal.
+ */
+ exited(): boolean
+ }
+ interface ProcessState {
+ /**
+ * Success reports whether the program exited successfully,
+ * such as with exit status 0 on Unix.
+ */
+ success(): boolean
+ }
+ interface ProcessState {
+ /**
+ * Sys returns system-dependent exit information about
+ * the process. Convert it to the appropriate underlying
+ * type, such as [syscall.WaitStatus] on Unix, to access its contents.
+ */
+ sys(): any
+ }
+ interface ProcessState {
+ /**
+ * SysUsage returns system-dependent resource usage information about
+ * the exited process. Convert it to the appropriate underlying
+ * type, such as [*syscall.Rusage] on Unix, to access its contents.
+ * (On Unix, *syscall.Rusage matches struct rusage as defined in the
+ * getrusage(2) manual page.)
+ */
+ sysUsage(): any
+ }
+ /**
+ * ProcessState stores information about a process, as reported by Wait.
+ */
+ interface ProcessState {
+ }
+ interface ProcessState {
+ /**
+ * Pid returns the process id of the exited process.
+ */
+ pid(): number
+ }
+ interface ProcessState {
+ string(): string
+ }
+ interface ProcessState {
+ /**
+ * ExitCode returns the exit code of the exited process, or -1
+ * if the process hasn't exited or was terminated by a signal.
+ */
+ exitCode(): number
+ }
+ interface executable {
+ /**
+ * Executable returns the path name for the executable that started
+ * the current process. There is no guarantee that the path is still
+ * pointing to the correct executable. If a symlink was used to start
+ * the process, depending on the operating system, the result might
+ * be the symlink or the path it pointed to. If a stable result is
+ * needed, [path/filepath.EvalSymlinks] might help.
+ *
+ * Executable returns an absolute path unless an error occurred.
+ *
+ * The main use case is finding resources located relative to an
+ * executable.
+ */
+ (): string
+ }
+ interface File {
+ /**
+ * Name returns the name of the file as presented to Open.
+ *
+ * It is safe to call Name after [Close].
+ */
+ name(): string
+ }
+ /**
+ * LinkError records an error during a link or symlink or rename
+ * system call and the paths that caused it.
+ */
+ interface LinkError {
+ op: string
+ old: string
+ new: string
+ err: Error
+ }
+ interface LinkError {
+ error(): string
+ }
+ interface LinkError {
+ unwrap(): void
+ }
+ interface File {
+ /**
+ * Read reads up to len(b) bytes from the File and stores them in b.
+ * It returns the number of bytes read and any error encountered.
+ * At end of file, Read returns 0, io.EOF.
+ */
+ read(b: string|Array): number
+ }
+ interface File {
+ /**
+ * ReadAt reads len(b) bytes from the File starting at byte offset off.
+ * It returns the number of bytes read and the error, if any.
+ * ReadAt always returns a non-nil error when n < len(b).
+ * At end of file, that error is io.EOF.
+ */
+ readAt(b: string|Array, off: number): number
+ }
+ interface File {
+ /**
+ * ReadFrom implements io.ReaderFrom.
+ */
+ readFrom(r: io.Reader): number
+ }
+ /**
+ * noReadFrom can be embedded alongside another type to
+ * hide the ReadFrom method of that other type.
+ */
+ interface noReadFrom {
+ }
+ interface noReadFrom {
+ /**
+ * ReadFrom hides another ReadFrom method.
+ * It should never be called.
+ */
+ readFrom(_arg0: io.Reader): number
+ }
+ /**
+ * fileWithoutReadFrom implements all the methods of *File other
+ * than ReadFrom. This is used to permit ReadFrom to call io.Copy
+ * without leading to a recursive call to ReadFrom.
+ */
+ type _subpQHUo = noReadFrom&File
+ interface fileWithoutReadFrom extends _subpQHUo {
+ }
+ interface File {
+ /**
+ * Write writes len(b) bytes from b to the File.
+ * It returns the number of bytes written and an error, if any.
+ * Write returns a non-nil error when n != len(b).
+ */
+ write(b: string|Array): number
+ }
+ interface File {
+ /**
+ * WriteAt writes len(b) bytes to the File starting at byte offset off.
+ * It returns the number of bytes written and an error, if any.
+ * WriteAt returns a non-nil error when n != len(b).
+ *
+ * If file was opened with the O_APPEND flag, WriteAt returns an error.
+ */
+ writeAt(b: string|Array, off: number): number
+ }
+ interface File {
+ /**
+ * WriteTo implements io.WriterTo.
+ */
+ writeTo(w: io.Writer): number
+ }
+ /**
+ * noWriteTo can be embedded alongside another type to
+ * hide the WriteTo method of that other type.
+ */
+ interface noWriteTo {
+ }
+ interface noWriteTo {
+ /**
+ * WriteTo hides another WriteTo method.
+ * It should never be called.
+ */
+ writeTo(_arg0: io.Writer): number
+ }
+ /**
+ * fileWithoutWriteTo implements all the methods of *File other
+ * than WriteTo. This is used to permit WriteTo to call io.Copy
+ * without leading to a recursive call to WriteTo.
+ */
+ type _subUePGm = noWriteTo&File
+ interface fileWithoutWriteTo extends _subUePGm {
+ }
+ interface File {
+ /**
+ * Seek sets the offset for the next Read or Write on file to offset, interpreted
+ * according to whence: 0 means relative to the origin of the file, 1 means
+ * relative to the current offset, and 2 means relative to the end.
+ * It returns the new offset and an error, if any.
+ * The behavior of Seek on a file opened with O_APPEND is not specified.
+ */
+ seek(offset: number, whence: number): number
+ }
+ interface File {
+ /**
+ * WriteString is like Write, but writes the contents of string s rather than
+ * a slice of bytes.
+ */
+ writeString(s: string): number
+ }
+ interface mkdir {
+ /**
+ * Mkdir creates a new directory with the specified name and permission
+ * bits (before umask).
+ * If there is an error, it will be of type *PathError.
+ */
+ (name: string, perm: FileMode): void
+ }
+ interface chdir {
+ /**
+ * Chdir changes the current working directory to the named directory.
+ * If there is an error, it will be of type *PathError.
+ */
+ (dir: string): void
+ }
+ interface open {
+ /**
+ * Open opens the named file for reading. If successful, methods on
+ * the returned file can be used for reading; the associated file
+ * descriptor has mode O_RDONLY.
+ * If there is an error, it will be of type *PathError.
+ */
+ (name: string): (File)
+ }
+ interface create {
+ /**
+ * Create creates or truncates the named file. If the file already exists,
+ * it is truncated. If the file does not exist, it is created with mode 0o666
+ * (before umask). If successful, methods on the returned File can
+ * be used for I/O; the associated file descriptor has mode O_RDWR.
+ * If there is an error, it will be of type *PathError.
+ */
+ (name: string): (File)
+ }
+ interface openFile {
+ /**
+ * OpenFile is the generalized open call; most users will use Open
+ * or Create instead. It opens the named file with specified flag
+ * (O_RDONLY etc.). If the file does not exist, and the O_CREATE flag
+ * is passed, it is created with mode perm (before umask). If successful,
+ * methods on the returned File can be used for I/O.
+ * If there is an error, it will be of type *PathError.
+ */
+ (name: string, flag: number, perm: FileMode): (File)
+ }
+ interface rename {
+ /**
+ * Rename renames (moves) oldpath to newpath.
+ * If newpath already exists and is not a directory, Rename replaces it.
+ * OS-specific restrictions may apply when oldpath and newpath are in different directories.
+ * Even within the same directory, on non-Unix platforms Rename is not an atomic operation.
+ * If there is an error, it will be of type *LinkError.
+ */
+ (oldpath: string, newpath: string): void
+ }
+ interface readlink {
+ /**
+ * Readlink returns the destination of the named symbolic link.
+ * If there is an error, it will be of type *PathError.
+ *
+ * If the link destination is relative, Readlink returns the relative path
+ * without resolving it to an absolute one.
+ */
+ (name: string): string
+ }
+ interface tempDir {
+ /**
+ * TempDir returns the default directory to use for temporary files.
+ *
+ * On Unix systems, it returns $TMPDIR if non-empty, else /tmp.
+ * On Windows, it uses GetTempPath, returning the first non-empty
+ * value from %TMP%, %TEMP%, %USERPROFILE%, or the Windows directory.
+ * On Plan 9, it returns /tmp.
+ *
+ * The directory is neither guaranteed to exist nor have accessible
+ * permissions.
+ */
+ (): string
+ }
+ interface userCacheDir {
+ /**
+ * UserCacheDir returns the default root directory to use for user-specific
+ * cached data. Users should create their own application-specific subdirectory
+ * within this one and use that.
+ *
+ * On Unix systems, it returns $XDG_CACHE_HOME as specified by
+ * https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html if
+ * non-empty, else $HOME/.cache.
+ * On Darwin, it returns $HOME/Library/Caches.
+ * On Windows, it returns %LocalAppData%.
+ * On Plan 9, it returns $home/lib/cache.
+ *
+ * If the location cannot be determined (for example, $HOME is not defined),
+ * then it will return an error.
+ */
+ (): string
+ }
+ interface userConfigDir {
+ /**
+ * UserConfigDir returns the default root directory to use for user-specific
+ * configuration data. Users should create their own application-specific
+ * subdirectory within this one and use that.
+ *
+ * On Unix systems, it returns $XDG_CONFIG_HOME as specified by
+ * https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html if
+ * non-empty, else $HOME/.config.
+ * On Darwin, it returns $HOME/Library/Application Support.
+ * On Windows, it returns %AppData%.
+ * On Plan 9, it returns $home/lib.
+ *
+ * If the location cannot be determined (for example, $HOME is not defined),
+ * then it will return an error.
+ */
+ (): string
+ }
+ interface userHomeDir {
+ /**
+ * UserHomeDir returns the current user's home directory.
+ *
+ * On Unix, including macOS, it returns the $HOME environment variable.
+ * On Windows, it returns %USERPROFILE%.
+ * On Plan 9, it returns the $home environment variable.
+ *
+ * If the expected variable is not set in the environment, UserHomeDir
+ * returns either a platform-specific default value or a non-nil error.
+ */
+ (): string
+ }
+ interface chmod {
+ /**
+ * Chmod changes the mode of the named file to mode.
+ * If the file is a symbolic link, it changes the mode of the link's target.
+ * If there is an error, it will be of type *PathError.
+ *
+ * A different subset of the mode bits are used, depending on the
+ * operating system.
+ *
+ * On Unix, the mode's permission bits, ModeSetuid, ModeSetgid, and
+ * ModeSticky are used.
+ *
+ * On Windows, only the 0o200 bit (owner writable) of mode is used; it
+ * controls whether the file's read-only attribute is set or cleared.
+ * The other bits are currently unused. For compatibility with Go 1.12
+ * and earlier, use a non-zero mode. Use mode 0o400 for a read-only
+ * file and 0o600 for a readable+writable file.
+ *
+ * On Plan 9, the mode's permission bits, ModeAppend, ModeExclusive,
+ * and ModeTemporary are used.
+ */
+ (name: string, mode: FileMode): void
+ }
+ interface File {
+ /**
+ * Chmod changes the mode of the file to mode.
+ * If there is an error, it will be of type *PathError.
+ */
+ chmod(mode: FileMode): void
+ }
+ interface File {
+ /**
+ * SetDeadline sets the read and write deadlines for a File.
+ * It is equivalent to calling both SetReadDeadline and SetWriteDeadline.
+ *
+ * Only some kinds of files support setting a deadline. Calls to SetDeadline
+ * for files that do not support deadlines will return ErrNoDeadline.
+ * On most systems ordinary files do not support deadlines, but pipes do.
+ *
+ * A deadline is an absolute time after which I/O operations fail with an
+ * error instead of blocking. The deadline applies to all future and pending
+ * I/O, not just the immediately following call to Read or Write.
+ * After a deadline has been exceeded, the connection can be refreshed
+ * by setting a deadline in the future.
+ *
+ * If the deadline is exceeded a call to Read or Write or to other I/O
+ * methods will return an error that wraps ErrDeadlineExceeded.
+ * This can be tested using errors.Is(err, os.ErrDeadlineExceeded).
+ * That error implements the Timeout method, and calling the Timeout
+ * method will return true, but there are other possible errors for which
+ * the Timeout will return true even if the deadline has not been exceeded.
+ *
+ * An idle timeout can be implemented by repeatedly extending
+ * the deadline after successful Read or Write calls.
+ *
+ * A zero value for t means I/O operations will not time out.
+ */
+ setDeadline(t: time.Time): void
+ }
+ interface File {
+ /**
+ * SetReadDeadline sets the deadline for future Read calls and any
+ * currently-blocked Read call.
+ * A zero value for t means Read will not time out.
+ * Not all files support setting deadlines; see SetDeadline.
+ */
+ setReadDeadline(t: time.Time): void
+ }
+ interface File {
+ /**
+ * SetWriteDeadline sets the deadline for any future Write calls and any
+ * currently-blocked Write call.
+ * Even if Write times out, it may return n > 0, indicating that
+ * some of the data was successfully written.
+ * A zero value for t means Write will not time out.
+ * Not all files support setting deadlines; see SetDeadline.
+ */
+ setWriteDeadline(t: time.Time): void
+ }
+ interface File {
+ /**
+ * SyscallConn returns a raw file.
+ * This implements the syscall.Conn interface.
+ */
+ syscallConn(): syscall.RawConn
+ }
+ interface dirFS {
+ /**
+ * DirFS returns a file system (an fs.FS) for the tree of files rooted at the directory dir.
+ *
+ * Note that DirFS("/prefix") only guarantees that the Open calls it makes to the
+ * operating system will begin with "/prefix": DirFS("/prefix").Open("file") is the
+ * same as os.Open("/prefix/file"). So if /prefix/file is a symbolic link pointing outside
+ * the /prefix tree, then using DirFS does not stop the access any more than using
+ * os.Open does. Additionally, the root of the fs.FS returned for a relative path,
+ * DirFS("prefix"), will be affected by later calls to Chdir. DirFS is therefore not
+ * a general substitute for a chroot-style security mechanism when the directory tree
+ * contains arbitrary content.
+ *
+ * The directory dir must not be "".
+ *
+ * The result implements [io/fs.StatFS], [io/fs.ReadFileFS] and
+ * [io/fs.ReadDirFS].
+ */
+ (dir: string): fs.FS
+ }
+ interface dirFS extends String{}
+ interface dirFS {
+ open(name: string): fs.File
+ }
+ interface dirFS {
+ /**
+ * The ReadFile method calls the [ReadFile] function for the file
+ * with the given name in the directory. The function provides
+ * robust handling for small files and special file systems.
+ * Through this method, dirFS implements [io/fs.ReadFileFS].
+ */
+ readFile(name: string): string|Array
+ }
+ interface dirFS {
+ /**
+ * ReadDir reads the named directory, returning all its directory entries sorted
+ * by filename. Through this method, dirFS implements [io/fs.ReadDirFS].
+ */
+ readDir(name: string): Array
+ }
+ interface dirFS {
+ stat(name: string): fs.FileInfo
+ }
+ interface readFile {
+ /**
+ * ReadFile reads the named file and returns the contents.
+ * A successful call returns err == nil, not err == EOF.
+ * Because ReadFile reads the whole file, it does not treat an EOF from Read
+ * as an error to be reported.
+ */
+ (name: string): string|Array
+ }
+ interface writeFile {
+ /**
+ * WriteFile writes data to the named file, creating it if necessary.
+ * If the file does not exist, WriteFile creates it with permissions perm (before umask);
+ * otherwise WriteFile truncates it before writing, without changing permissions.
+ * Since WriteFile requires multiple system calls to complete, a failure mid-operation
+ * can leave the file in a partially written state.
+ */
+ (name: string, data: string|Array, perm: FileMode): void
+ }
+ interface File {
+ /**
+ * Close closes the [File], rendering it unusable for I/O.
+ * On files that support [File.SetDeadline], any pending I/O operations will
+ * be canceled and return immediately with an [ErrClosed] error.
+ * Close will return an error if it has already been called.
+ */
+ close(): void
+ }
+ interface chown {
+ /**
+ * Chown changes the numeric uid and gid of the named file.
+ * If the file is a symbolic link, it changes the uid and gid of the link's target.
+ * A uid or gid of -1 means to not change that value.
+ * If there is an error, it will be of type [*PathError].
+ *
+ * On Windows or Plan 9, Chown always returns the [syscall.EWINDOWS] or
+ * EPLAN9 error, wrapped in *PathError.
+ */
+ (name: string, uid: number, gid: number): void
+ }
+ interface lchown {
+ /**
+ * Lchown changes the numeric uid and gid of the named file.
+ * If the file is a symbolic link, it changes the uid and gid of the link itself.
+ * If there is an error, it will be of type [*PathError].
+ *
+ * On Windows, it always returns the [syscall.EWINDOWS] error, wrapped
+ * in *PathError.
+ */
+ (name: string, uid: number, gid: number): void
+ }
+ interface File {
+ /**
+ * Chown changes the numeric uid and gid of the named file.
+ * If there is an error, it will be of type [*PathError].
+ *
+ * On Windows, it always returns the [syscall.EWINDOWS] error, wrapped
+ * in *PathError.
+ */
+ chown(uid: number, gid: number): void
+ }
+ interface File {
+ /**
+ * Truncate changes the size of the file.
+ * It does not change the I/O offset.
+ * If there is an error, it will be of type [*PathError].
+ */
+ truncate(size: number): void
+ }
+ interface File {
+ /**
+ * Sync commits the current contents of the file to stable storage.
+ * Typically, this means flushing the file system's in-memory copy
+ * of recently written data to disk.
+ */
+ sync(): void
+ }
+ interface chtimes {
+ /**
+ * Chtimes changes the access and modification times of the named
+ * file, similar to the Unix utime() or utimes() functions.
+ * A zero [time.Time] value will leave the corresponding file time unchanged.
+ *
+ * The underlying filesystem may truncate or round the values to a
+ * less precise time unit.
+ * If there is an error, it will be of type [*PathError].
+ */
+ (name: string, atime: time.Time, mtime: time.Time): void
+ }
+ interface File {
+ /**
+ * Chdir changes the current working directory to the file,
+ * which must be a directory.
+ * If there is an error, it will be of type [*PathError].
+ */
+ chdir(): void
+ }
+ /**
+ * file is the real representation of *File.
+ * The extra level of indirection ensures that no clients of os
+ * can overwrite this data, which could cause the finalizer
+ * to close the wrong file descriptor.
+ */
+ interface file {
+ }
+ interface File {
+ /**
+ * Fd returns the integer Unix file descriptor referencing the open file.
+ * If f is closed, the file descriptor becomes invalid.
+ * If f is garbage collected, a finalizer may close the file descriptor,
+ * making it invalid; see [runtime.SetFinalizer] for more information on when
+ * a finalizer might be run. On Unix systems this will cause the [File.SetDeadline]
+ * methods to stop working.
+ * Because file descriptors can be reused, the returned file descriptor may
+ * only be closed through the [File.Close] method of f, or by its finalizer during
+ * garbage collection. Otherwise, during garbage collection the finalizer
+ * may close an unrelated file descriptor with the same (reused) number.
+ *
+ * As an alternative, see the f.SyscallConn method.
+ */
+ fd(): number
+ }
+ interface newFile {
+ /**
+ * NewFile returns a new File with the given file descriptor and
+ * name. The returned value will be nil if fd is not a valid file
+ * descriptor. On Unix systems, if the file descriptor is in
+ * non-blocking mode, NewFile will attempt to return a pollable File
+ * (one for which the SetDeadline methods work).
+ *
+ * After passing it to NewFile, fd may become invalid under the same
+ * conditions described in the comments of the Fd method, and the same
+ * constraints apply.
+ */
+ (fd: number, name: string): (File)
+ }
+ /**
+ * newFileKind describes the kind of file to newFile.
+ */
+ interface newFileKind extends Number{}
+ interface truncate {
+ /**
+ * Truncate changes the size of the named file.
+ * If the file is a symbolic link, it changes the size of the link's target.
+ * If there is an error, it will be of type *PathError.
+ */
+ (name: string, size: number): void
+ }
+ interface remove {
+ /**
+ * Remove removes the named file or (empty) directory.
+ * If there is an error, it will be of type *PathError.
+ */
+ (name: string): void
+ }
+ interface link {
+ /**
+ * Link creates newname as a hard link to the oldname file.
+ * If there is an error, it will be of type *LinkError.
+ */
+ (oldname: string, newname: string): void
+ }
+ interface symlink {
+ /**
+ * Symlink creates newname as a symbolic link to oldname.
+ * On Windows, a symlink to a non-existent oldname creates a file symlink;
+ * if oldname is later created as a directory the symlink will not work.
+ * If there is an error, it will be of type *LinkError.
+ */
+ (oldname: string, newname: string): void
+ }
+ interface unixDirent {
+ }
+ interface unixDirent {
+ name(): string
+ }
+ interface unixDirent {
+ isDir(): boolean
+ }
+ interface unixDirent {
+ type(): FileMode
+ }
+ interface unixDirent {
+ info(): FileInfo
+ }
+ interface unixDirent {
+ string(): string
+ }
+ interface getwd {
+ /**
+ * Getwd returns a rooted path name corresponding to the
+ * current directory. If the current directory can be
+ * reached via multiple paths (due to symbolic links),
+ * Getwd may return any one of them.
+ */
+ (): string
+ }
+ interface mkdirAll {
+ /**
+ * MkdirAll creates a directory named path,
+ * along with any necessary parents, and returns nil,
+ * or else returns an error.
+ * The permission bits perm (before umask) are used for all
+ * directories that MkdirAll creates.
+ * If path is already a directory, MkdirAll does nothing
+ * and returns nil.
+ */
+ (path: string, perm: FileMode): void
+ }
+ interface removeAll {
+ /**
+ * RemoveAll removes path and any children it contains.
+ * It removes everything it can but returns the first error
+ * it encounters. If the path does not exist, RemoveAll
+ * returns nil (no error).
+ * If there is an error, it will be of type [*PathError].
+ */
+ (path: string): void
+ }
+ interface isPathSeparator {
+ /**
+ * IsPathSeparator reports whether c is a directory separator character.
+ */
+ (c: number): boolean
+ }
+ interface pipe {
+ /**
+ * Pipe returns a connected pair of Files; reads from r return bytes written to w.
+ * It returns the files and an error, if any.
+ */
+ (): [(File), (File)]
+ }
+ interface getuid {
+ /**
+ * Getuid returns the numeric user id of the caller.
+ *
+ * On Windows, it returns -1.
+ */
+ (): number
+ }
+ interface geteuid {
+ /**
+ * Geteuid returns the numeric effective user id of the caller.
+ *
+ * On Windows, it returns -1.
+ */
+ (): number
+ }
+ interface getgid {
+ /**
+ * Getgid returns the numeric group id of the caller.
+ *
+ * On Windows, it returns -1.
+ */
+ (): number
+ }
+ interface getegid {
+ /**
+ * Getegid returns the numeric effective group id of the caller.
+ *
+ * On Windows, it returns -1.
+ */
+ (): number
+ }
+ interface getgroups {
+ /**
+ * Getgroups returns a list of the numeric ids of groups that the caller belongs to.
+ *
+ * On Windows, it returns [syscall.EWINDOWS]. See the [os/user] package
+ * for a possible alternative.
+ */
+ (): Array
+ }
+ interface exit {
+ /**
+ * Exit causes the current program to exit with the given status code.
+ * Conventionally, code zero indicates success, non-zero an error.
+ * The program terminates immediately; deferred functions are not run.
+ *
+ * For portability, the status code should be in the range [0, 125].
+ */
+ (code: number): void
+ }
+ /**
+ * rawConn implements syscall.RawConn.
+ */
+ interface rawConn {
+ }
+ interface rawConn {
+ control(f: (_arg0: number) => void): void
+ }
+ interface rawConn {
+ read(f: (_arg0: number) => boolean): void
+ }
+ interface rawConn {
+ write(f: (_arg0: number) => boolean): void
+ }
+ interface stat {
+ /**
+ * Stat returns a [FileInfo] describing the named file.
+ * If there is an error, it will be of type [*PathError].
+ */
+ (name: string): FileInfo
+ }
+ interface lstat {
+ /**
+ * Lstat returns a [FileInfo] describing the named file.
+ * If the file is a symbolic link, the returned FileInfo
+ * describes the symbolic link. Lstat makes no attempt to follow the link.
+ * If there is an error, it will be of type [*PathError].
+ *
+ * On Windows, if the file is a reparse point that is a surrogate for another
+ * named entity (such as a symbolic link or mounted folder), the returned
+ * FileInfo describes the reparse point, and makes no attempt to resolve it.
+ */
+ (name: string): FileInfo
+ }
+ interface File {
+ /**
+ * Stat returns the [FileInfo] structure describing file.
+ * If there is an error, it will be of type [*PathError].
+ */
+ stat(): FileInfo
+ }
+ interface hostname {
+ /**
+ * Hostname returns the host name reported by the kernel.
+ */
+ (): string
+ }
+ interface createTemp {
+ /**
+ * CreateTemp creates a new temporary file in the directory dir,
+ * opens the file for reading and writing, and returns the resulting file.
+ * The filename is generated by taking pattern and adding a random string to the end.
+ * If pattern includes a "*", the random string replaces the last "*".
+ * The file is created with mode 0o600 (before umask).
+ * If dir is the empty string, CreateTemp uses the default directory for temporary files, as returned by [TempDir].
+ * Multiple programs or goroutines calling CreateTemp simultaneously will not choose the same file.
+ * The caller can use the file's Name method to find the pathname of the file.
+ * It is the caller's responsibility to remove the file when it is no longer needed.
+ */
+ (dir: string, pattern: string): (File)
+ }
+ interface mkdirTemp {
+ /**
+ * MkdirTemp creates a new temporary directory in the directory dir
+ * and returns the pathname of the new directory.
+ * The new directory's name is generated by adding a random string to the end of pattern.
+ * If pattern includes a "*", the random string replaces the last "*" instead.
+ * The directory is created with mode 0o700 (before umask).
+ * If dir is the empty string, MkdirTemp uses the default directory for temporary files, as returned by TempDir.
+ * Multiple programs or goroutines calling MkdirTemp simultaneously will not choose the same directory.
+ * It is the caller's responsibility to remove the directory when it is no longer needed.
+ */
+ (dir: string, pattern: string): string
+ }
+ interface getpagesize {
+ /**
+ * Getpagesize returns the underlying system's memory page size.
+ */
+ (): number
+ }
+ /**
+ * File represents an open file descriptor.
+ *
+ * The methods of File are safe for concurrent use.
+ */
+ type _subGANfA = file
+ interface File extends _subGANfA {
+ }
+ /**
+ * A FileInfo describes a file and is returned by [Stat] and [Lstat].
+ */
+ interface FileInfo extends fs.FileInfo{}
+ /**
+ * A FileMode represents a file's mode and permission bits.
+ * The bits have the same definition on all systems, so that
+ * information about files can be moved from one system
+ * to another portably. Not all bits apply to all systems.
+ * The only required bit is [ModeDir] for directories.
+ */
+ interface FileMode extends fs.FileMode{}
+ interface fileStat {
+ name(): string
+ }
+ interface fileStat {
+ isDir(): boolean
+ }
+ interface sameFile {
+ /**
+ * SameFile reports whether fi1 and fi2 describe the same file.
+ * For example, on Unix this means that the device and inode fields
+ * of the two underlying structures are identical; on other systems
+ * the decision may be based on the path names.
+ * SameFile only applies to results returned by this package's [Stat].
+ * It returns false in other cases.
+ */
+ (fi1: FileInfo, fi2: FileInfo): boolean
+ }
+ /**
+ * A fileStat is the implementation of FileInfo returned by Stat and Lstat.
+ */
+ interface fileStat {
+ }
+ interface fileStat {
+ size(): number
+ }
+ interface fileStat {
+ mode(): FileMode
+ }
+ interface fileStat {
+ modTime(): time.Time
+ }
+ interface fileStat {
+ sys(): any
+ }
+}
+
+/**
+ * Package filepath implements utility routines for manipulating filename paths
+ * in a way compatible with the target operating system-defined file paths.
+ *
+ * The filepath package uses either forward slashes or backslashes,
+ * depending on the operating system. To process paths such as URLs
+ * that always use forward slashes regardless of the operating
+ * system, see the [path] package.
+ */
+namespace filepath {
+ interface match {
+ /**
+ * Match reports whether name matches the shell file name pattern.
+ * The pattern syntax is:
+ *
+ * ```
+ * pattern:
+ * { term }
+ * term:
+ * '*' matches any sequence of non-Separator characters
+ * '?' matches any single non-Separator character
+ * '[' [ '^' ] { character-range } ']'
+ * character class (must be non-empty)
+ * c matches character c (c != '*', '?', '\\', '[')
+ * '\\' c matches character c
+ *
+ * character-range:
+ * c matches character c (c != '\\', '-', ']')
+ * '\\' c matches character c
+ * lo '-' hi matches character c for lo <= c <= hi
+ * ```
+ *
+ * Match requires pattern to match all of name, not just a substring.
+ * The only possible returned error is [ErrBadPattern], when pattern
+ * is malformed.
+ *
+ * On Windows, escaping is disabled. Instead, '\\' is treated as
+ * path separator.
+ */
+ (pattern: string, name: string): boolean
+ }
+ interface glob {
+ /**
+ * Glob returns the names of all files matching pattern or nil
+ * if there is no matching file. The syntax of patterns is the same
+ * as in [Match]. The pattern may describe hierarchical names such as
+ * /usr/*\/bin/ed (assuming the [Separator] is '/').
+ *
+ * Glob ignores file system errors such as I/O errors reading directories.
+ * The only possible returned error is [ErrBadPattern], when pattern
+ * is malformed.
+ */
+ (pattern: string): Array
+ }
+ interface clean {
+ /**
+ * Clean returns the shortest path name equivalent to path
+ * by purely lexical processing. It applies the following rules
+ * iteratively until no further processing can be done:
+ *
+ * 1. Replace multiple [Separator] elements with a single one.
+ * 2. Eliminate each . path name element (the current directory).
+ * 3. Eliminate each inner .. path name element (the parent directory)
+ * ```
+ * along with the non-.. element that precedes it.
+ * ```
+ * 4. Eliminate .. elements that begin a rooted path:
+ * ```
+ * that is, replace "/.." by "/" at the beginning of a path,
+ * assuming Separator is '/'.
+ * ```
+ *
+ * The returned path ends in a slash only if it represents a root directory,
+ * such as "/" on Unix or `C:\` on Windows.
+ *
+ * Finally, any occurrences of slash are replaced by Separator.
+ *
+ * If the result of this process is an empty string, Clean
+ * returns the string ".".
+ *
+ * On Windows, Clean does not modify the volume name other than to replace
+ * occurrences of "/" with `\`.
+ * For example, Clean("//host/share/../x") returns `\\host\share\x`.
+ *
+ * See also Rob Pike, “Lexical File Names in Plan 9 or
+ * Getting Dot-Dot Right,”
+ * https://9p.io/sys/doc/lexnames.html
+ */
+ (path: string): string
+ }
+ interface isLocal {
+ /**
+ * IsLocal reports whether path, using lexical analysis only, has all of these properties:
+ *
+ * ```
+ * - is within the subtree rooted at the directory in which path is evaluated
+ * - is not an absolute path
+ * - is not empty
+ * - on Windows, is not a reserved name such as "NUL"
+ * ```
+ *
+ * If IsLocal(path) returns true, then
+ * Join(base, path) will always produce a path contained within base and
+ * Clean(path) will always produce an unrooted path with no ".." path elements.
+ *
+ * IsLocal is a purely lexical operation.
+ * In particular, it does not account for the effect of any symbolic links
+ * that may exist in the filesystem.
+ */
+ (path: string): boolean
+ }
+ interface localize {
+ /**
+ * Localize converts a slash-separated path into an operating system path.
+ * The input path must be a valid path as reported by [io/fs.ValidPath].
+ *
+ * Localize returns an error if the path cannot be represented by the operating system.
+ * For example, the path a\b is rejected on Windows, on which \ is a separator
+ * character and cannot be part of a filename.
+ *
+ * The path returned by Localize will always be local, as reported by IsLocal.
+ */
+ (path: string): string
+ }
+ interface toSlash {
+ /**
+ * ToSlash returns the result of replacing each separator character
+ * in path with a slash ('/') character. Multiple separators are
+ * replaced by multiple slashes.
+ */
+ (path: string): string
+ }
+ interface fromSlash {
+ /**
+ * FromSlash returns the result of replacing each slash ('/') character
+ * in path with a separator character. Multiple slashes are replaced
+ * by multiple separators.
+ *
+ * See also the Localize function, which converts a slash-separated path
+ * as used by the io/fs package to an operating system path.
+ */
+ (path: string): string
+ }
+ interface splitList {
+ /**
+ * SplitList splits a list of paths joined by the OS-specific [ListSeparator],
+ * usually found in PATH or GOPATH environment variables.
+ * Unlike strings.Split, SplitList returns an empty slice when passed an empty
+ * string.
+ */
+ (path: string): Array
+ }
+ interface split {
+ /**
+ * Split splits path immediately following the final [Separator],
+ * separating it into a directory and file name component.
+ * If there is no Separator in path, Split returns an empty dir
+ * and file set to path.
+ * The returned values have the property that path = dir+file.
+ */
+ (path: string): [string, string]
+ }
+ interface join {
+ /**
+ * Join joins any number of path elements into a single path,
+ * separating them with an OS specific [Separator]. Empty elements
+ * are ignored. The result is Cleaned. However, if the argument
+ * list is empty or all its elements are empty, Join returns
+ * an empty string.
+ * On Windows, the result will only be a UNC path if the first
+ * non-empty element is a UNC path.
+ */
+ (...elem: string[]): string
+ }
+ interface ext {
+ /**
+ * Ext returns the file name extension used by path.
+ * The extension is the suffix beginning at the final dot
+ * in the final element of path; it is empty if there is
+ * no dot.
+ */
+ (path: string): string
+ }
+ interface evalSymlinks {
+ /**
+ * EvalSymlinks returns the path name after the evaluation of any symbolic
+ * links.
+ * If path is relative the result will be relative to the current directory,
+ * unless one of the components is an absolute symbolic link.
+ * EvalSymlinks calls [Clean] on the result.
+ */
+ (path: string): string
+ }
+ interface isAbs {
+ /**
+ * IsAbs reports whether the path is absolute.
+ */
+ (path: string): boolean
+ }
+ interface abs {
+ /**
+ * Abs returns an absolute representation of path.
+ * If the path is not absolute it will be joined with the current
+ * working directory to turn it into an absolute path. The absolute
+ * path name for a given file is not guaranteed to be unique.
+ * Abs calls [Clean] on the result.
+ */
+ (path: string): string
+ }
+ interface rel {
+ /**
+ * Rel returns a relative path that is lexically equivalent to targpath when
+ * joined to basepath with an intervening separator. That is,
+ * [Join](basepath, Rel(basepath, targpath)) is equivalent to targpath itself.
+ * On success, the returned path will always be relative to basepath,
+ * even if basepath and targpath share no elements.
+ * An error is returned if targpath can't be made relative to basepath or if
+ * knowing the current working directory would be necessary to compute it.
+ * Rel calls [Clean] on the result.
+ */
+ (basepath: string, targpath: string): string
+ }
+ /**
+ * WalkFunc is the type of the function called by [Walk] to visit each
+ * file or directory.
+ *
+ * The path argument contains the argument to Walk as a prefix.
+ * That is, if Walk is called with root argument "dir" and finds a file
+ * named "a" in that directory, the walk function will be called with
+ * argument "dir/a".
+ *
+ * The directory and file are joined with Join, which may clean the
+ * directory name: if Walk is called with the root argument "x/../dir"
+ * and finds a file named "a" in that directory, the walk function will
+ * be called with argument "dir/a", not "x/../dir/a".
+ *
+ * The info argument is the fs.FileInfo for the named path.
+ *
+ * The error result returned by the function controls how Walk continues.
+ * If the function returns the special value [SkipDir], Walk skips the
+ * current directory (path if info.IsDir() is true, otherwise path's
+ * parent directory). If the function returns the special value [SkipAll],
+ * Walk skips all remaining files and directories. Otherwise, if the function
+ * returns a non-nil error, Walk stops entirely and returns that error.
+ *
+ * The err argument reports an error related to path, signaling that Walk
+ * will not walk into that directory. The function can decide how to
+ * handle that error; as described earlier, returning the error will
+ * cause Walk to stop walking the entire tree.
+ *
+ * Walk calls the function with a non-nil err argument in two cases.
+ *
+ * First, if an [os.Lstat] on the root directory or any directory or file
+ * in the tree fails, Walk calls the function with path set to that
+ * directory or file's path, info set to nil, and err set to the error
+ * from os.Lstat.
+ *
+ * Second, if a directory's Readdirnames method fails, Walk calls the
+ * function with path set to the directory's path, info, set to an
+ * [fs.FileInfo] describing the directory, and err set to the error from
+ * Readdirnames.
+ */
+ interface WalkFunc {(path: string, info: fs.FileInfo, err: Error): void }
+ interface walkDir {
+ /**
+ * WalkDir walks the file tree rooted at root, calling fn for each file or
+ * directory in the tree, including root.
+ *
+ * All errors that arise visiting files and directories are filtered by fn:
+ * see the [fs.WalkDirFunc] documentation for details.
+ *
+ * The files are walked in lexical order, which makes the output deterministic
+ * but requires WalkDir to read an entire directory into memory before proceeding
+ * to walk that directory.
+ *
+ * WalkDir does not follow symbolic links.
+ *
+ * WalkDir calls fn with paths that use the separator character appropriate
+ * for the operating system. This is unlike [io/fs.WalkDir], which always
+ * uses slash separated paths.
+ */
+ (root: string, fn: fs.WalkDirFunc): void
+ }
+ interface walk {
+ /**
+ * Walk walks the file tree rooted at root, calling fn for each file or
+ * directory in the tree, including root.
+ *
+ * All errors that arise visiting files and directories are filtered by fn:
+ * see the [WalkFunc] documentation for details.
+ *
+ * The files are walked in lexical order, which makes the output deterministic
+ * but requires Walk to read an entire directory into memory before proceeding
+ * to walk that directory.
+ *
+ * Walk does not follow symbolic links.
+ *
+ * Walk is less efficient than [WalkDir], introduced in Go 1.16,
+ * which avoids calling os.Lstat on every visited file or directory.
+ */
+ (root: string, fn: WalkFunc): void
+ }
+ interface base {
+ /**
+ * Base returns the last element of path.
+ * Trailing path separators are removed before extracting the last element.
+ * If the path is empty, Base returns ".".
+ * If the path consists entirely of separators, Base returns a single separator.
+ */
+ (path: string): string
+ }
+ interface dir {
+ /**
+ * Dir returns all but the last element of path, typically the path's directory.
+ * After dropping the final element, Dir calls [Clean] on the path and trailing
+ * slashes are removed.
+ * If the path is empty, Dir returns ".".
+ * If the path consists entirely of separators, Dir returns a single separator.
+ * The returned path does not end in a separator unless it is the root directory.
+ */
+ (path: string): string
+ }
+ interface volumeName {
+ /**
+ * VolumeName returns leading volume name.
+ * Given "C:\foo\bar" it returns "C:" on Windows.
+ * Given "\\host\share\foo" it returns "\\host\share".
+ * On other platforms it returns "".
+ */
+ (path: string): string
+ }
+ interface hasPrefix {
+ /**
+ * HasPrefix exists for historical compatibility and should not be used.
+ *
+ * Deprecated: HasPrefix does not respect path boundaries and
+ * does not ignore case when required.
+ */
+ (p: string, prefix: string): boolean
+ }
+}
+
+namespace security {
+ interface s256Challenge {
+ /**
+ * S256Challenge creates base64 encoded sha256 challenge string derived from code.
+ * The padding of the result base64 string is stripped per [RFC 7636].
+ *
+ * [RFC 7636]: https://datatracker.ietf.org/doc/html/rfc7636#section-4.2
+ */
+ (code: string): string
+ }
+ interface md5 {
+ /**
+ * MD5 creates md5 hash from the provided plain text.
+ */
+ (text: string): string
+ }
+ interface sha256 {
+ /**
+ * SHA256 creates sha256 hash as defined in FIPS 180-4 from the provided text.
+ */
+ (text: string): string
+ }
+ interface sha512 {
+ /**
+ * SHA512 creates sha512 hash as defined in FIPS 180-4 from the provided text.
+ */
+ (text: string): string
+ }
+ interface hs256 {
+ /**
+ * HS256 creates a HMAC hash with sha256 digest algorithm.
+ */
+ (text: string, secret: string): string
+ }
+ interface hs512 {
+ /**
+ * HS512 creates a HMAC hash with sha512 digest algorithm.
+ */
+ (text: string, secret: string): string
+ }
+ interface equal {
+ /**
+ * Equal compares two hash strings for equality without leaking timing information.
+ */
+ (hash1: string, hash2: string): boolean
+ }
+ // @ts-ignore
+ import crand = rand
+ interface encrypt {
+ /**
+ * Encrypt encrypts "data" with the specified "key" (must be valid 32 char AES key).
+ *
+ * This method uses AES-256-GCM block cypher mode.
+ */
+ (data: string|Array, key: string): string
+ }
+ interface decrypt {
+ /**
+ * Decrypt decrypts encrypted text with key (must be valid 32 chars AES key).
+ *
+ * This method uses AES-256-GCM block cypher mode.
+ */
+ (cipherText: string, key: string): string|Array
+ }
+ interface parseUnverifiedJWT {
+ /**
+ * ParseUnverifiedJWT parses JWT and returns its claims
+ * but DOES NOT verify the signature.
+ *
+ * It verifies only the exp, iat and nbf claims.
+ */
+ (token: string): jwt.MapClaims
+ }
+ interface parseJWT {
+ /**
+ * ParseJWT verifies and parses JWT and returns its claims.
+ */
+ (token: string, verificationKey: string): jwt.MapClaims
+ }
+ interface newJWT {
+ /**
+ * NewJWT generates and returns new HS256 signed JWT.
+ */
+ (payload: jwt.MapClaims, signingKey: string, secondsDuration: number): string
+ }
+ interface newToken {
+ /**
+ * Deprecated:
+ * Consider replacing with NewJWT().
+ *
+ * NewToken is a legacy alias for NewJWT that generates a HS256 signed JWT.
+ */
+ (payload: jwt.MapClaims, signingKey: string, secondsDuration: number): string
+ }
+ // @ts-ignore
+ import cryptoRand = rand
+ // @ts-ignore
+ import mathRand = rand
+ interface randomString {
+ /**
+ * RandomString generates a cryptographically random string with the specified length.
+ *
+ * The generated string matches [A-Za-z0-9]+ and it's transparent to URL-encoding.
+ */
+ (length: number): string
+ }
+ interface randomStringWithAlphabet {
+ /**
+ * RandomStringWithAlphabet generates a cryptographically random string
+ * with the specified length and characters set.
+ *
+ * It panics if for some reason rand.Int returns a non-nil error.
+ */
+ (length: number, alphabet: string): string
+ }
+ interface pseudorandomString {
+ /**
+ * PseudorandomString generates a pseudorandom string with the specified length.
+ *
+ * The generated string matches [A-Za-z0-9]+ and it's transparent to URL-encoding.
+ *
+ * For a cryptographically random string (but a little bit slower) use RandomString instead.
+ */
+ (length: number): string
+ }
+ interface pseudorandomStringWithAlphabet {
+ /**
+ * PseudorandomStringWithAlphabet generates a pseudorandom string
+ * with the specified length and characters set.
+ *
+ * For a cryptographically random (but a little bit slower) use RandomStringWithAlphabet instead.
+ */
+ (length: number, alphabet: string): string
+ }
+}
+
+/**
+ * Package template is a thin wrapper around the standard html/template
+ * and text/template packages that implements a convenient registry to
+ * load and cache templates on the fly concurrently.
+ *
+ * It was created to assist the JSVM plugin HTML rendering, but could be used in other Go code.
+ *
+ * Example:
+ *
+ * ```
+ * registry := template.NewRegistry()
+ *
+ * html1, err := registry.LoadFiles(
+ * // the files set wil be parsed only once and then cached
+ * "layout.html",
+ * "content.html",
+ * ).Render(map[string]any{"name": "John"})
+ *
+ * html2, err := registry.LoadFiles(
+ * // reuse the already parsed and cached files set
+ * "layout.html",
+ * "content.html",
+ * ).Render(map[string]any{"name": "Jane"})
+ * ```
+ */
+namespace template {
+ interface newRegistry {
+ /**
+ * NewRegistry creates and initializes a new templates registry with
+ * some defaults (eg. global "raw" template function for unescaped HTML).
+ *
+ * Use the Registry.Load* methods to load templates into the registry.
+ */
+ (): (Registry)
+ }
+ /**
+ * Registry defines a templates registry that is safe to be used by multiple goroutines.
+ *
+ * Use the Registry.Load* methods to load templates into the registry.
+ */
+ interface Registry {
+ }
+ interface Registry {
+ /**
+ * AddFuncs registers new global template functions.
+ *
+ * The key of each map entry is the function name that will be used in the templates.
+ * If a function with the map entry name already exists it will be replaced with the new one.
+ *
+ * The value of each map entry is a function that must have either a
+ * single return value, or two return values of which the second has type error.
+ *
+ * Example:
+ *
+ * r.AddFuncs(map[string]any{
+ * ```
+ * "toUpper": func(str string) string {
+ * return strings.ToUppser(str)
+ * },
+ * ...
+ * ```
+ * })
+ */
+ addFuncs(funcs: _TygojaDict): (Registry)
+ }
+ interface Registry {
+ /**
+ * LoadFiles caches (if not already) the specified filenames set as a
+ * single template and returns a ready to use Renderer instance.
+ *
+ * There must be at least 1 filename specified.
+ */
+ loadFiles(...filenames: string[]): (Renderer)
+ }
+ interface Registry {
+ /**
+ * LoadString caches (if not already) the specified inline string as a
+ * single template and returns a ready to use Renderer instance.
+ */
+ loadString(text: string): (Renderer)
+ }
+ interface Registry {
+ /**
+ * LoadFS caches (if not already) the specified fs and globPatterns
+ * pair as single template and returns a ready to use Renderer instance.
+ *
+ * There must be at least 1 file matching the provided globPattern(s)
+ * (note that most file names serves as glob patterns matching themselves).
+ */
+ loadFS(fsys: fs.FS, ...globPatterns: string[]): (Renderer)
+ }
+ /**
+ * Renderer defines a single parsed template.
+ */
+ interface Renderer {
+ }
+ interface Renderer {
+ /**
+ * Render executes the template with the specified data as the dot object
+ * and returns the result as plain string.
+ */
+ render(data: any): string
+ }
+}
+
+/**
+ * Package dbx provides a set of DB-agnostic and easy-to-use query building methods for relational databases.
+ */
+namespace dbx {
+ /**
+ * Builder supports building SQL statements in a DB-agnostic way.
+ * Builder mainly provides two sets of query building methods: those building SELECT statements
+ * and those manipulating DB data or schema (e.g. INSERT statements, CREATE TABLE statements).
+ */
+ interface Builder {
+ [key:string]: any;
+ /**
+ * NewQuery creates a new Query object with the given SQL statement.
+ * The SQL statement may contain parameter placeholders which can be bound with actual parameter
+ * values before the statement is executed.
+ */
+ newQuery(_arg0: string): (Query)
+ /**
+ * Select returns a new SelectQuery object that can be used to build a SELECT statement.
+ * The parameters to this method should be the list column names to be selected.
+ * A column name may have an optional alias name. For example, Select("id", "my_name AS name").
+ */
+ select(..._arg0: string[]): (SelectQuery)
+ /**
+ * ModelQuery returns a new ModelQuery object that can be used to perform model insertion, update, and deletion.
+ * The parameter to this method should be a pointer to the model struct that needs to be inserted, updated, or deleted.
+ */
+ model(_arg0: {
+ }): (ModelQuery)
+ /**
+ * GeneratePlaceholder generates an anonymous parameter placeholder with the given parameter ID.
+ */
+ generatePlaceholder(_arg0: number): string
+ /**
+ * Quote quotes a string so that it can be embedded in a SQL statement as a string value.
+ */
+ quote(_arg0: string): string
+ /**
+ * QuoteSimpleTableName quotes a simple table name.
+ * A simple table name does not contain any schema prefix.
+ */
+ quoteSimpleTableName(_arg0: string): string
+ /**
+ * QuoteSimpleColumnName quotes a simple column name.
+ * A simple column name does not contain any table prefix.
+ */
+ quoteSimpleColumnName(_arg0: string): string
+ /**
+ * QueryBuilder returns the query builder supporting the current DB.
+ */
+ queryBuilder(): QueryBuilder
+ /**
+ * Insert creates a Query that represents an INSERT SQL statement.
+ * The keys of cols are the column names, while the values of cols are the corresponding column
+ * values to be inserted.
+ */
+ insert(table: string, cols: Params): (Query)
+ /**
+ * Upsert creates a Query that represents an UPSERT SQL statement.
+ * Upsert inserts a row into the table if the primary key or unique index is not found.
+ * Otherwise it will update the row with the new values.
+ * The keys of cols are the column names, while the values of cols are the corresponding column
+ * values to be inserted.
+ */
+ upsert(table: string, cols: Params, ...constraints: string[]): (Query)
+ /**
+ * Update creates a Query that represents an UPDATE SQL statement.
+ * The keys of cols are the column names, while the values of cols are the corresponding new column
+ * values. If the "where" expression is nil, the UPDATE SQL statement will have no WHERE clause
+ * (be careful in this case as the SQL statement will update ALL rows in the table).
+ */
+ update(table: string, cols: Params, where: Expression): (Query)
+ /**
+ * Delete creates a Query that represents a DELETE SQL statement.
+ * If the "where" expression is nil, the DELETE SQL statement will have no WHERE clause
+ * (be careful in this case as the SQL statement will delete ALL rows in the table).
+ */
+ delete(table: string, where: Expression): (Query)
+ /**
+ * CreateTable creates a Query that represents a CREATE TABLE SQL statement.
+ * The keys of cols are the column names, while the values of cols are the corresponding column types.
+ * The optional "options" parameters will be appended to the generated SQL statement.
+ */
+ createTable(table: string, cols: _TygojaDict, ...options: string[]): (Query)
+ /**
+ * RenameTable creates a Query that can be used to rename a table.
+ */
+ renameTable(oldName: string, newName: string): (Query)
+ /**
+ * DropTable creates a Query that can be used to drop a table.
+ */
+ dropTable(table: string): (Query)
+ /**
+ * TruncateTable creates a Query that can be used to truncate a table.
+ */
+ truncateTable(table: string): (Query)
+ /**
+ * AddColumn creates a Query that can be used to add a column to a table.
+ */
+ addColumn(table: string, col: string, typ: string): (Query)
+ /**
+ * DropColumn creates a Query that can be used to drop a column from a table.
+ */
+ dropColumn(table: string, col: string): (Query)
+ /**
+ * RenameColumn creates a Query that can be used to rename a column in a table.
+ */
+ renameColumn(table: string, oldName: string, newName: string): (Query)
+ /**
+ * AlterColumn creates a Query that can be used to change the definition of a table column.
+ */
+ alterColumn(table: string, col: string, typ: string): (Query)
+ /**
+ * AddPrimaryKey creates a Query that can be used to specify primary key(s) for a table.
+ * The "name" parameter specifies the name of the primary key constraint.
+ */
+ addPrimaryKey(table: string, name: string, ...cols: string[]): (Query)
+ /**
+ * DropPrimaryKey creates a Query that can be used to remove the named primary key constraint from a table.
+ */
+ dropPrimaryKey(table: string, name: string): (Query)
+ /**
+ * AddForeignKey creates a Query that can be used to add a foreign key constraint to a table.
+ * The length of cols and refCols must be the same as they refer to the primary and referential columns.
+ * The optional "options" parameters will be appended to the SQL statement. They can be used to
+ * specify options such as "ON DELETE CASCADE".
+ */
+ addForeignKey(table: string, name: string, cols: Array, refCols: Array, refTable: string, ...options: string[]): (Query)
+ /**
+ * DropForeignKey creates a Query that can be used to remove the named foreign key constraint from a table.
+ */
+ dropForeignKey(table: string, name: string): (Query)
+ /**
+ * CreateIndex creates a Query that can be used to create an index for a table.
+ */
+ createIndex(table: string, name: string, ...cols: string[]): (Query)
+ /**
+ * CreateUniqueIndex creates a Query that can be used to create a unique index for a table.
+ */
+ createUniqueIndex(table: string, name: string, ...cols: string[]): (Query)
+ /**
+ * DropIndex creates a Query that can be used to remove the named index from a table.
+ */
+ dropIndex(table: string, name: string): (Query)
+ }
+ /**
+ * BaseBuilder provides a basic implementation of the Builder interface.
+ */
+ interface BaseBuilder {
+ }
+ interface newBaseBuilder {
+ /**
+ * NewBaseBuilder creates a new BaseBuilder instance.
+ */
+ (db: DB, executor: Executor): (BaseBuilder)
+ }
+ interface BaseBuilder {
+ /**
+ * DB returns the DB instance that this builder is associated with.
+ */
+ db(): (DB)
+ }
+ interface BaseBuilder {
+ /**
+ * Executor returns the executor object (a DB instance or a transaction) for executing SQL statements.
+ */
+ executor(): Executor
+ }
+ interface BaseBuilder {
+ /**
+ * NewQuery creates a new Query object with the given SQL statement.
+ * The SQL statement may contain parameter placeholders which can be bound with actual parameter
+ * values before the statement is executed.
+ */
+ newQuery(sql: string): (Query)
+ }
+ interface BaseBuilder {
+ /**
+ * GeneratePlaceholder generates an anonymous parameter placeholder with the given parameter ID.
+ */
+ generatePlaceholder(_arg0: number): string
+ }
+ interface BaseBuilder {
+ /**
+ * Quote quotes a string so that it can be embedded in a SQL statement as a string value.
+ */
+ quote(s: string): string
+ }
+ interface BaseBuilder {
+ /**
+ * QuoteSimpleTableName quotes a simple table name.
+ * A simple table name does not contain any schema prefix.
+ */
+ quoteSimpleTableName(s: string): string
+ }
+ interface BaseBuilder {
+ /**
+ * QuoteSimpleColumnName quotes a simple column name.
+ * A simple column name does not contain any table prefix.
+ */
+ quoteSimpleColumnName(s: string): string
+ }
+ interface BaseBuilder {
+ /**
+ * Insert creates a Query that represents an INSERT SQL statement.
+ * The keys of cols are the column names, while the values of cols are the corresponding column
+ * values to be inserted.
+ */
+ insert(table: string, cols: Params): (Query)
+ }
+ interface BaseBuilder {
+ /**
+ * Upsert creates a Query that represents an UPSERT SQL statement.
+ * Upsert inserts a row into the table if the primary key or unique index is not found.
+ * Otherwise it will update the row with the new values.
+ * The keys of cols are the column names, while the values of cols are the corresponding column
+ * values to be inserted.
+ */
+ upsert(table: string, cols: Params, ...constraints: string[]): (Query)
+ }
+ interface BaseBuilder {
+ /**
+ * Update creates a Query that represents an UPDATE SQL statement.
+ * The keys of cols are the column names, while the values of cols are the corresponding new column
+ * values. If the "where" expression is nil, the UPDATE SQL statement will have no WHERE clause
+ * (be careful in this case as the SQL statement will update ALL rows in the table).
+ */
+ update(table: string, cols: Params, where: Expression): (Query)
+ }
+ interface BaseBuilder {
+ /**
+ * Delete creates a Query that represents a DELETE SQL statement.
+ * If the "where" expression is nil, the DELETE SQL statement will have no WHERE clause
+ * (be careful in this case as the SQL statement will delete ALL rows in the table).
+ */
+ delete(table: string, where: Expression): (Query)
+ }
+ interface BaseBuilder {
+ /**
+ * CreateTable creates a Query that represents a CREATE TABLE SQL statement.
+ * The keys of cols are the column names, while the values of cols are the corresponding column types.
+ * The optional "options" parameters will be appended to the generated SQL statement.
+ */
+ createTable(table: string, cols: _TygojaDict, ...options: string[]): (Query)
+ }
+ interface BaseBuilder {
+ /**
+ * RenameTable creates a Query that can be used to rename a table.
+ */
+ renameTable(oldName: string, newName: string): (Query)
+ }
+ interface BaseBuilder {
+ /**
+ * DropTable creates a Query that can be used to drop a table.
+ */
+ dropTable(table: string): (Query)
+ }
+ interface BaseBuilder {
+ /**
+ * TruncateTable creates a Query that can be used to truncate a table.
+ */
+ truncateTable(table: string): (Query)
+ }
+ interface BaseBuilder {
+ /**
+ * AddColumn creates a Query that can be used to add a column to a table.
+ */
+ addColumn(table: string, col: string, typ: string): (Query)
+ }
+ interface BaseBuilder {
+ /**
+ * DropColumn creates a Query that can be used to drop a column from a table.
+ */
+ dropColumn(table: string, col: string): (Query)
+ }
+ interface BaseBuilder {
+ /**
+ * RenameColumn creates a Query that can be used to rename a column in a table.
+ */
+ renameColumn(table: string, oldName: string, newName: string): (Query)
+ }
+ interface BaseBuilder {
+ /**
+ * AlterColumn creates a Query that can be used to change the definition of a table column.
+ */
+ alterColumn(table: string, col: string, typ: string): (Query)
+ }
+ interface BaseBuilder {
+ /**
+ * AddPrimaryKey creates a Query that can be used to specify primary key(s) for a table.
+ * The "name" parameter specifies the name of the primary key constraint.
+ */
+ addPrimaryKey(table: string, name: string, ...cols: string[]): (Query)
+ }
+ interface BaseBuilder {
+ /**
+ * DropPrimaryKey creates a Query that can be used to remove the named primary key constraint from a table.
+ */
+ dropPrimaryKey(table: string, name: string): (Query)
+ }
+ interface BaseBuilder {
+ /**
+ * AddForeignKey creates a Query that can be used to add a foreign key constraint to a table.
+ * The length of cols and refCols must be the same as they refer to the primary and referential columns.
+ * The optional "options" parameters will be appended to the SQL statement. They can be used to
+ * specify options such as "ON DELETE CASCADE".
+ */
+ addForeignKey(table: string, name: string, cols: Array, refCols: Array, refTable: string, ...options: string[]): (Query)
+ }
+ interface BaseBuilder {
+ /**
+ * DropForeignKey creates a Query that can be used to remove the named foreign key constraint from a table.
+ */
+ dropForeignKey(table: string, name: string): (Query)
+ }
+ interface BaseBuilder {
+ /**
+ * CreateIndex creates a Query that can be used to create an index for a table.
+ */
+ createIndex(table: string, name: string, ...cols: string[]): (Query)
+ }
+ interface BaseBuilder {
+ /**
+ * CreateUniqueIndex creates a Query that can be used to create a unique index for a table.
+ */
+ createUniqueIndex(table: string, name: string, ...cols: string[]): (Query)
+ }
+ interface BaseBuilder {
+ /**
+ * DropIndex creates a Query that can be used to remove the named index from a table.
+ */
+ dropIndex(table: string, name: string): (Query)
+ }
+ /**
+ * MssqlBuilder is the builder for SQL Server databases.
+ */
+ type _subEPLIN = BaseBuilder
+ interface MssqlBuilder extends _subEPLIN {
+ }
+ /**
+ * MssqlQueryBuilder is the query builder for SQL Server databases.
+ */
+ type _subiJSYo = BaseQueryBuilder
+ interface MssqlQueryBuilder extends _subiJSYo {
+ }
+ interface newMssqlBuilder {
+ /**
+ * NewMssqlBuilder creates a new MssqlBuilder instance.
+ */
+ (db: DB, executor: Executor): Builder
+ }
+ interface MssqlBuilder {
+ /**
+ * QueryBuilder returns the query builder supporting the current DB.
+ */
+ queryBuilder(): QueryBuilder
+ }
+ interface MssqlBuilder {
+ /**
+ * Select returns a new SelectQuery object that can be used to build a SELECT statement.
+ * The parameters to this method should be the list column names to be selected.
+ * A column name may have an optional alias name. For example, Select("id", "my_name AS name").
+ */
+ select(...cols: string[]): (SelectQuery)
+ }
+ interface MssqlBuilder {
+ /**
+ * Model returns a new ModelQuery object that can be used to perform model-based DB operations.
+ * The model passed to this method should be a pointer to a model struct.
+ */
+ model(model: {
+ }): (ModelQuery)
+ }
+ interface MssqlBuilder {
+ /**
+ * QuoteSimpleTableName quotes a simple table name.
+ * A simple table name does not contain any schema prefix.
+ */
+ quoteSimpleTableName(s: string): string
+ }
+ interface MssqlBuilder {
+ /**
+ * QuoteSimpleColumnName quotes a simple column name.
+ * A simple column name does not contain any table prefix.
+ */
+ quoteSimpleColumnName(s: string): string
+ }
+ interface MssqlBuilder {
+ /**
+ * RenameTable creates a Query that can be used to rename a table.
+ */
+ renameTable(oldName: string, newName: string): (Query)
+ }
+ interface MssqlBuilder {
+ /**
+ * RenameColumn creates a Query that can be used to rename a column in a table.
+ */
+ renameColumn(table: string, oldName: string, newName: string): (Query)
+ }
+ interface MssqlBuilder {
+ /**
+ * AlterColumn creates a Query that can be used to change the definition of a table column.
+ */
+ alterColumn(table: string, col: string, typ: string): (Query)
+ }
+ interface MssqlQueryBuilder {
+ /**
+ * BuildOrderByAndLimit generates the ORDER BY and LIMIT clauses.
+ */
+ buildOrderByAndLimit(sql: string, cols: Array, limit: number, offset: number): string
+ }
+ /**
+ * MysqlBuilder is the builder for MySQL databases.
+ */
+ type _subMhtIq = BaseBuilder
+ interface MysqlBuilder extends _subMhtIq {
+ }
+ interface newMysqlBuilder {
+ /**
+ * NewMysqlBuilder creates a new MysqlBuilder instance.
+ */
+ (db: DB, executor: Executor): Builder
+ }
+ interface MysqlBuilder {
+ /**
+ * QueryBuilder returns the query builder supporting the current DB.
+ */
+ queryBuilder(): QueryBuilder
+ }
+ interface MysqlBuilder {
+ /**
+ * Select returns a new SelectQuery object that can be used to build a SELECT statement.
+ * The parameters to this method should be the list column names to be selected.
+ * A column name may have an optional alias name. For example, Select("id", "my_name AS name").
+ */
+ select(...cols: string[]): (SelectQuery)
+ }
+ interface MysqlBuilder {
+ /**
+ * Model returns a new ModelQuery object that can be used to perform model-based DB operations.
+ * The model passed to this method should be a pointer to a model struct.
+ */
+ model(model: {
+ }): (ModelQuery)
+ }
+ interface MysqlBuilder {
+ /**
+ * QuoteSimpleTableName quotes a simple table name.
+ * A simple table name does not contain any schema prefix.
+ */
+ quoteSimpleTableName(s: string): string
+ }
+ interface MysqlBuilder {
+ /**
+ * QuoteSimpleColumnName quotes a simple column name.
+ * A simple column name does not contain any table prefix.
+ */
+ quoteSimpleColumnName(s: string): string
+ }
+ interface MysqlBuilder {
+ /**
+ * Upsert creates a Query that represents an UPSERT SQL statement.
+ * Upsert inserts a row into the table if the primary key or unique index is not found.
+ * Otherwise it will update the row with the new values.
+ * The keys of cols are the column names, while the values of cols are the corresponding column
+ * values to be inserted.
+ */
+ upsert(table: string, cols: Params, ...constraints: string[]): (Query)
+ }
+ interface MysqlBuilder {
+ /**
+ * RenameColumn creates a Query that can be used to rename a column in a table.
+ */
+ renameColumn(table: string, oldName: string, newName: string): (Query)
+ }
+ interface MysqlBuilder {
+ /**
+ * DropPrimaryKey creates a Query that can be used to remove the named primary key constraint from a table.
+ */
+ dropPrimaryKey(table: string, name: string): (Query)
+ }
+ interface MysqlBuilder {
+ /**
+ * DropForeignKey creates a Query that can be used to remove the named foreign key constraint from a table.
+ */
+ dropForeignKey(table: string, name: string): (Query)
+ }
+ /**
+ * OciBuilder is the builder for Oracle databases.
+ */
+ type _subRBquP = BaseBuilder
+ interface OciBuilder extends _subRBquP {
+ }
+ /**
+ * OciQueryBuilder is the query builder for Oracle databases.
+ */
+ type _subENSNc = BaseQueryBuilder
+ interface OciQueryBuilder extends _subENSNc {
+ }
+ interface newOciBuilder {
+ /**
+ * NewOciBuilder creates a new OciBuilder instance.
+ */
+ (db: DB, executor: Executor): Builder
+ }
+ interface OciBuilder {
+ /**
+ * Select returns a new SelectQuery object that can be used to build a SELECT statement.
+ * The parameters to this method should be the list column names to be selected.
+ * A column name may have an optional alias name. For example, Select("id", "my_name AS name").
+ */
+ select(...cols: string[]): (SelectQuery)
+ }
+ interface OciBuilder {
+ /**
+ * Model returns a new ModelQuery object that can be used to perform model-based DB operations.
+ * The model passed to this method should be a pointer to a model struct.
+ */
+ model(model: {
+ }): (ModelQuery)
+ }
+ interface OciBuilder {
+ /**
+ * GeneratePlaceholder generates an anonymous parameter placeholder with the given parameter ID.
+ */
+ generatePlaceholder(i: number): string
+ }
+ interface OciBuilder {
+ /**
+ * QueryBuilder returns the query builder supporting the current DB.
+ */
+ queryBuilder(): QueryBuilder
+ }
+ interface OciBuilder {
+ /**
+ * DropIndex creates a Query that can be used to remove the named index from a table.
+ */
+ dropIndex(table: string, name: string): (Query)
+ }
+ interface OciBuilder {
+ /**
+ * RenameTable creates a Query that can be used to rename a table.
+ */
+ renameTable(oldName: string, newName: string): (Query)
+ }
+ interface OciBuilder {
+ /**
+ * AlterColumn creates a Query that can be used to change the definition of a table column.
+ */
+ alterColumn(table: string, col: string, typ: string): (Query)
+ }
+ interface OciQueryBuilder {
+ /**
+ * BuildOrderByAndLimit generates the ORDER BY and LIMIT clauses.
+ */
+ buildOrderByAndLimit(sql: string, cols: Array, limit: number, offset: number): string
+ }
+ /**
+ * PgsqlBuilder is the builder for PostgreSQL databases.
+ */
+ type _subsShLv = BaseBuilder
+ interface PgsqlBuilder extends _subsShLv {
+ }
+ interface newPgsqlBuilder {
+ /**
+ * NewPgsqlBuilder creates a new PgsqlBuilder instance.
+ */
+ (db: DB, executor: Executor): Builder
+ }
+ interface PgsqlBuilder {
+ /**
+ * Select returns a new SelectQuery object that can be used to build a SELECT statement.
+ * The parameters to this method should be the list column names to be selected.
+ * A column name may have an optional alias name. For example, Select("id", "my_name AS name").
+ */
+ select(...cols: string[]): (SelectQuery)
+ }
+ interface PgsqlBuilder {
+ /**
+ * Model returns a new ModelQuery object that can be used to perform model-based DB operations.
+ * The model passed to this method should be a pointer to a model struct.
+ */
+ model(model: {
+ }): (ModelQuery)
+ }
+ interface PgsqlBuilder {
+ /**
+ * GeneratePlaceholder generates an anonymous parameter placeholder with the given parameter ID.
+ */
+ generatePlaceholder(i: number): string
+ }
+ interface PgsqlBuilder {
+ /**
+ * QueryBuilder returns the query builder supporting the current DB.
+ */
+ queryBuilder(): QueryBuilder
+ }
+ interface PgsqlBuilder {
+ /**
+ * Upsert creates a Query that represents an UPSERT SQL statement.
+ * Upsert inserts a row into the table if the primary key or unique index is not found.
+ * Otherwise it will update the row with the new values.
+ * The keys of cols are the column names, while the values of cols are the corresponding column
+ * values to be inserted.
+ */
+ upsert(table: string, cols: Params, ...constraints: string[]): (Query)
+ }
+ interface PgsqlBuilder {
+ /**
+ * DropIndex creates a Query that can be used to remove the named index from a table.
+ */
+ dropIndex(table: string, name: string): (Query)
+ }
+ interface PgsqlBuilder {
+ /**
+ * RenameTable creates a Query that can be used to rename a table.
+ */
+ renameTable(oldName: string, newName: string): (Query)
+ }
+ interface PgsqlBuilder {
+ /**
+ * AlterColumn creates a Query that can be used to change the definition of a table column.
+ */
+ alterColumn(table: string, col: string, typ: string): (Query)
+ }
+ /**
+ * SqliteBuilder is the builder for SQLite databases.
+ */
+ type _subeBnpF = BaseBuilder
+ interface SqliteBuilder extends _subeBnpF {
+ }
+ interface newSqliteBuilder {
+ /**
+ * NewSqliteBuilder creates a new SqliteBuilder instance.
+ */
+ (db: DB, executor: Executor): Builder
+ }
+ interface SqliteBuilder {
+ /**
+ * QueryBuilder returns the query builder supporting the current DB.
+ */
+ queryBuilder(): QueryBuilder
+ }
+ interface SqliteBuilder {
+ /**
+ * Select returns a new SelectQuery object that can be used to build a SELECT statement.
+ * The parameters to this method should be the list column names to be selected.
+ * A column name may have an optional alias name. For example, Select("id", "my_name AS name").
+ */
+ select(...cols: string[]): (SelectQuery)
+ }
+ interface SqliteBuilder {
+ /**
+ * Model returns a new ModelQuery object that can be used to perform model-based DB operations.
+ * The model passed to this method should be a pointer to a model struct.
+ */
+ model(model: {
+ }): (ModelQuery)
+ }
+ interface SqliteBuilder {
+ /**
+ * QuoteSimpleTableName quotes a simple table name.
+ * A simple table name does not contain any schema prefix.
+ */
+ quoteSimpleTableName(s: string): string
+ }
+ interface SqliteBuilder {
+ /**
+ * QuoteSimpleColumnName quotes a simple column name.
+ * A simple column name does not contain any table prefix.
+ */
+ quoteSimpleColumnName(s: string): string
+ }
+ interface SqliteBuilder {
+ /**
+ * DropIndex creates a Query that can be used to remove the named index from a table.
+ */
+ dropIndex(table: string, name: string): (Query)
+ }
+ interface SqliteBuilder {
+ /**
+ * TruncateTable creates a Query that can be used to truncate a table.
+ */
+ truncateTable(table: string): (Query)
+ }
+ interface SqliteBuilder {
+ /**
+ * RenameTable creates a Query that can be used to rename a table.
+ */
+ renameTable(oldName: string, newName: string): (Query)
+ }
+ interface SqliteBuilder {
+ /**
+ * AlterColumn creates a Query that can be used to change the definition of a table column.
+ */
+ alterColumn(table: string, col: string, typ: string): (Query)
+ }
+ interface SqliteBuilder {
+ /**
+ * AddPrimaryKey creates a Query that can be used to specify primary key(s) for a table.
+ * The "name" parameter specifies the name of the primary key constraint.
+ */
+ addPrimaryKey(table: string, name: string, ...cols: string[]): (Query)
+ }
+ interface SqliteBuilder {
+ /**
+ * DropPrimaryKey creates a Query that can be used to remove the named primary key constraint from a table.
+ */
+ dropPrimaryKey(table: string, name: string): (Query)
+ }
+ interface SqliteBuilder {
+ /**
+ * AddForeignKey creates a Query that can be used to add a foreign key constraint to a table.
+ * The length of cols and refCols must be the same as they refer to the primary and referential columns.
+ * The optional "options" parameters will be appended to the SQL statement. They can be used to
+ * specify options such as "ON DELETE CASCADE".
+ */
+ addForeignKey(table: string, name: string, cols: Array, refCols: Array, refTable: string, ...options: string[]): (Query)
+ }
+ interface SqliteBuilder {
+ /**
+ * DropForeignKey creates a Query that can be used to remove the named foreign key constraint from a table.
+ */
+ dropForeignKey(table: string, name: string): (Query)
+ }
+ /**
+ * StandardBuilder is the builder that is used by DB for an unknown driver.
+ */
+ type _subgxMwo = BaseBuilder
+ interface StandardBuilder extends _subgxMwo {
+ }
+ interface newStandardBuilder {
+ /**
+ * NewStandardBuilder creates a new StandardBuilder instance.
+ */
+ (db: DB, executor: Executor): Builder
+ }
+ interface StandardBuilder {
+ /**
+ * QueryBuilder returns the query builder supporting the current DB.
+ */
+ queryBuilder(): QueryBuilder
+ }
+ interface StandardBuilder {
+ /**
+ * Select returns a new SelectQuery object that can be used to build a SELECT statement.
+ * The parameters to this method should be the list column names to be selected.
+ * A column name may have an optional alias name. For example, Select("id", "my_name AS name").
+ */
+ select(...cols: string[]): (SelectQuery)
+ }
+ interface StandardBuilder {
+ /**
+ * Model returns a new ModelQuery object that can be used to perform model-based DB operations.
+ * The model passed to this method should be a pointer to a model struct.
+ */
+ model(model: {
+ }): (ModelQuery)
+ }
+ /**
+ * LogFunc logs a message for each SQL statement being executed.
+ * This method takes one or multiple parameters. If a single parameter
+ * is provided, it will be treated as the log message. If multiple parameters
+ * are provided, they will be passed to fmt.Sprintf() to generate the log message.
+ */
+ interface LogFunc {(format: string, ...a: {
+ }[]): void }
+ /**
+ * PerfFunc is called when a query finishes execution.
+ * The query execution time is passed to this function so that the DB performance
+ * can be profiled. The "ns" parameter gives the number of nanoseconds that the
+ * SQL statement takes to execute, while the "execute" parameter indicates whether
+ * the SQL statement is executed or queried (usually SELECT statements).
+ */
+ interface PerfFunc {(ns: number, sql: string, execute: boolean): void }
+ /**
+ * QueryLogFunc is called each time when performing a SQL query.
+ * The "t" parameter gives the time that the SQL statement takes to execute,
+ * while rows and err are the result of the query.
+ */
+ interface QueryLogFunc {(ctx: context.Context, t: time.Duration, sql: string, rows: sql.Rows, err: Error): void }
+ /**
+ * ExecLogFunc is called each time when a SQL statement is executed.
+ * The "t" parameter gives the time that the SQL statement takes to execute,
+ * while result and err refer to the result of the execution.
+ */
+ interface ExecLogFunc {(ctx: context.Context, t: time.Duration, sql: string, result: sql.Result, err: Error): void }
+ /**
+ * BuilderFunc creates a Builder instance using the given DB instance and Executor.
+ */
+ interface BuilderFunc {(_arg0: DB, _arg1: Executor): Builder }
+ /**
+ * DB enhances sql.DB by providing a set of DB-agnostic query building methods.
+ * DB allows easier query building and population of data into Go variables.
+ */
+ type _subnBTRt = Builder
+ interface DB extends _subnBTRt {
+ /**
+ * FieldMapper maps struct fields to DB columns. Defaults to DefaultFieldMapFunc.
+ */
+ fieldMapper: FieldMapFunc
+ /**
+ * TableMapper maps structs to table names. Defaults to GetTableName.
+ */
+ tableMapper: TableMapFunc
+ /**
+ * LogFunc logs the SQL statements being executed. Defaults to nil, meaning no logging.
+ */
+ logFunc: LogFunc
+ /**
+ * PerfFunc logs the SQL execution time. Defaults to nil, meaning no performance profiling.
+ * Deprecated: Please use QueryLogFunc and ExecLogFunc instead.
+ */
+ perfFunc: PerfFunc
+ /**
+ * QueryLogFunc is called each time when performing a SQL query that returns data.
+ */
+ queryLogFunc: QueryLogFunc
+ /**
+ * ExecLogFunc is called each time when a SQL statement is executed.
+ */
+ execLogFunc: ExecLogFunc
+ }
+ /**
+ * Errors represents a list of errors.
+ */
+ interface Errors extends Array{}
+ interface newFromDB {
+ /**
+ * NewFromDB encapsulates an existing database connection.
+ */
+ (sqlDB: sql.DB, driverName: string): (DB)
+ }
+ interface open {
+ /**
+ * Open opens a database specified by a driver name and data source name (DSN).
+ * Note that Open does not check if DSN is specified correctly. It doesn't try to establish a DB connection either.
+ * Please refer to sql.Open() for more information.
+ */
+ (driverName: string, dsn: string): (DB)
+ }
+ interface mustOpen {
+ /**
+ * MustOpen opens a database and establishes a connection to it.
+ * Please refer to sql.Open() and sql.Ping() for more information.
+ */
+ (driverName: string, dsn: string): (DB)
+ }
+ interface DB {
+ /**
+ * Clone makes a shallow copy of DB.
+ */
+ clone(): (DB)
+ }
+ interface DB {
+ /**
+ * WithContext returns a new instance of DB associated with the given context.
+ */
+ withContext(ctx: context.Context): (DB)
+ }
+ interface DB {
+ /**
+ * Context returns the context associated with the DB instance.
+ * It returns nil if no context is associated.
+ */
+ context(): context.Context
+ }
+ interface DB {
+ /**
+ * DB returns the sql.DB instance encapsulated by dbx.DB.
+ */
+ db(): (sql.DB)
+ }
+ interface DB {
+ /**
+ * Close closes the database, releasing any open resources.
+ * It is rare to Close a DB, as the DB handle is meant to be
+ * long-lived and shared between many goroutines.
+ */
+ close(): void
+ }
+ interface DB {
+ /**
+ * Begin starts a transaction.
+ */
+ begin(): (Tx)
+ }
+ interface DB {
+ /**
+ * BeginTx starts a transaction with the given context and transaction options.
+ */
+ beginTx(ctx: context.Context, opts: sql.TxOptions): (Tx)
+ }
+ interface DB {
+ /**
+ * Wrap encapsulates an existing transaction.
+ */
+ wrap(sqlTx: sql.Tx): (Tx)
+ }
+ interface DB {
+ /**
+ * Transactional starts a transaction and executes the given function.
+ * If the function returns an error, the transaction will be rolled back.
+ * Otherwise, the transaction will be committed.
+ */
+ transactional(f: (_arg0: Tx) => void): void
+ }
+ interface DB {
+ /**
+ * TransactionalContext starts a transaction and executes the given function with the given context and transaction options.
+ * If the function returns an error, the transaction will be rolled back.
+ * Otherwise, the transaction will be committed.
+ */
+ transactionalContext(ctx: context.Context, opts: sql.TxOptions, f: (_arg0: Tx) => void): void
+ }
+ interface DB {
+ /**
+ * DriverName returns the name of the DB driver.
+ */
+ driverName(): string
+ }
+ interface DB {
+ /**
+ * QuoteTableName quotes the given table name appropriately.
+ * If the table name contains DB schema prefix, it will be handled accordingly.
+ * This method will do nothing if the table name is already quoted or if it contains parenthesis.
+ */
+ quoteTableName(s: string): string
+ }
+ interface DB {
+ /**
+ * QuoteColumnName quotes the given column name appropriately.
+ * If the table name contains table name prefix, it will be handled accordingly.
+ * This method will do nothing if the column name is already quoted or if it contains parenthesis.
+ */
+ quoteColumnName(s: string): string
+ }
+ interface Errors {
+ /**
+ * Error returns the error string of Errors.
+ */
+ error(): string
+ }
+ /**
+ * Expression represents a DB expression that can be embedded in a SQL statement.
+ */
+ interface Expression {
+ [key:string]: any;
+ /**
+ * Build converts an expression into a SQL fragment.
+ * If the expression contains binding parameters, they will be added to the given Params.
+ */
+ build(_arg0: DB, _arg1: Params): string
+ }
+ /**
+ * HashExp represents a hash expression.
+ *
+ * A hash expression is a map whose keys are DB column names which need to be filtered according
+ * to the corresponding values. For example, HashExp{"level": 2, "dept": 10} will generate
+ * the SQL: "level"=2 AND "dept"=10.
+ *
+ * HashExp also handles nil values and slice values. For example, HashExp{"level": []interface{}{1, 2}, "dept": nil}
+ * will generate: "level" IN (1, 2) AND "dept" IS NULL.
+ */
+ interface HashExp extends _TygojaDict{}
+ interface newExp {
+ /**
+ * NewExp generates an expression with the specified SQL fragment and the optional binding parameters.
+ */
+ (e: string, ...params: Params[]): Expression
+ }
+ interface not {
+ /**
+ * Not generates a NOT expression which prefixes "NOT" to the specified expression.
+ */
+ (e: Expression): Expression
+ }
+ interface and {
+ /**
+ * And generates an AND expression which concatenates the given expressions with "AND".
+ */
+ (...exps: Expression[]): Expression
+ }
+ interface or {
+ /**
+ * Or generates an OR expression which concatenates the given expressions with "OR".
+ */
+ (...exps: Expression[]): Expression
+ }
+ interface _in {
+ /**
+ * In generates an IN expression for the specified column and the list of allowed values.
+ * If values is empty, a SQL "0=1" will be generated which represents a false expression.
+ */
+ (col: string, ...values: {
+ }[]): Expression
+ }
+ interface notIn {
+ /**
+ * NotIn generates an NOT IN expression for the specified column and the list of disallowed values.
+ * If values is empty, an empty string will be returned indicating a true expression.
+ */
+ (col: string, ...values: {
+ }[]): Expression
+ }
+ interface like {
+ /**
+ * Like generates a LIKE expression for the specified column and the possible strings that the column should be like.
+ * If multiple values are present, the column should be like *all* of them. For example, Like("name", "key", "word")
+ * will generate a SQL expression: "name" LIKE "%key%" AND "name" LIKE "%word%".
+ *
+ * By default, each value will be surrounded by "%" to enable partial matching. If a value contains special characters
+ * such as "%", "\", "_", they will also be properly escaped.
+ *
+ * You may call Escape() and/or Match() to change the default behavior. For example, Like("name", "key").Match(false, true)
+ * generates "name" LIKE "key%".
+ */
+ (col: string, ...values: string[]): (LikeExp)
+ }
+ interface notLike {
+ /**
+ * NotLike generates a NOT LIKE expression.
+ * For example, NotLike("name", "key", "word") will generate a SQL expression:
+ * "name" NOT LIKE "%key%" AND "name" NOT LIKE "%word%". Please see Like() for more details.
+ */
+ (col: string, ...values: string[]): (LikeExp)
+ }
+ interface orLike {
+ /**
+ * OrLike generates an OR LIKE expression.
+ * This is similar to Like() except that the column should be like one of the possible values.
+ * For example, OrLike("name", "key", "word") will generate a SQL expression:
+ * "name" LIKE "%key%" OR "name" LIKE "%word%". Please see Like() for more details.
+ */
+ (col: string, ...values: string[]): (LikeExp)
+ }
+ interface orNotLike {
+ /**
+ * OrNotLike generates an OR NOT LIKE expression.
+ * For example, OrNotLike("name", "key", "word") will generate a SQL expression:
+ * "name" NOT LIKE "%key%" OR "name" NOT LIKE "%word%". Please see Like() for more details.
+ */
+ (col: string, ...values: string[]): (LikeExp)
+ }
+ interface exists {
+ /**
+ * Exists generates an EXISTS expression by prefixing "EXISTS" to the given expression.
+ */
+ (exp: Expression): Expression
+ }
+ interface notExists {
+ /**
+ * NotExists generates an EXISTS expression by prefixing "NOT EXISTS" to the given expression.
+ */
+ (exp: Expression): Expression
+ }
+ interface between {
+ /**
+ * Between generates a BETWEEN expression.
+ * For example, Between("age", 10, 30) generates: "age" BETWEEN 10 AND 30
+ */
+ (col: string, from: {
+ }, to: {
+ }): Expression
+ }
+ interface notBetween {
+ /**
+ * NotBetween generates a NOT BETWEEN expression.
+ * For example, NotBetween("age", 10, 30) generates: "age" NOT BETWEEN 10 AND 30
+ */
+ (col: string, from: {
+ }, to: {
+ }): Expression
+ }
+ /**
+ * Exp represents an expression with a SQL fragment and a list of optional binding parameters.
+ */
+ interface Exp {
+ }
+ interface Exp {
+ /**
+ * Build converts an expression into a SQL fragment.
+ */
+ build(db: DB, params: Params): string
+ }
+ interface HashExp {
+ /**
+ * Build converts an expression into a SQL fragment.
+ */
+ build(db: DB, params: Params): string
+ }
+ /**
+ * NotExp represents an expression that should prefix "NOT" to a specified expression.
+ */
+ interface NotExp {
+ }
+ interface NotExp {
+ /**
+ * Build converts an expression into a SQL fragment.
+ */
+ build(db: DB, params: Params): string
+ }
+ /**
+ * AndOrExp represents an expression that concatenates multiple expressions using either "AND" or "OR".
+ */
+ interface AndOrExp {
+ }
+ interface AndOrExp {
+ /**
+ * Build converts an expression into a SQL fragment.
+ */
+ build(db: DB, params: Params): string
+ }
+ /**
+ * InExp represents an "IN" or "NOT IN" expression.
+ */
+ interface InExp {
+ }
+ interface InExp {
+ /**
+ * Build converts an expression into a SQL fragment.
+ */
+ build(db: DB, params: Params): string
+ }
+ /**
+ * LikeExp represents a variant of LIKE expressions.
+ */
+ interface LikeExp {
+ /**
+ * Like stores the LIKE operator. It can be "LIKE", "NOT LIKE".
+ * It may also be customized as something like "ILIKE".
+ */
+ like: string
+ }
+ interface LikeExp {
+ /**
+ * Escape specifies how a LIKE expression should be escaped.
+ * Each string at position 2i represents a special character and the string at position 2i+1 is
+ * the corresponding escaped version.
+ */
+ escape(...chars: string[]): (LikeExp)
+ }
+ interface LikeExp {
+ /**
+ * Match specifies whether to do wildcard matching on the left and/or right of given strings.
+ */
+ match(left: boolean, right: boolean): (LikeExp)
+ }
+ interface LikeExp {
+ /**
+ * Build converts an expression into a SQL fragment.
+ */
+ build(db: DB, params: Params): string
+ }
+ /**
+ * ExistsExp represents an EXISTS or NOT EXISTS expression.
+ */
+ interface ExistsExp {
+ }
+ interface ExistsExp {
+ /**
+ * Build converts an expression into a SQL fragment.
+ */
+ build(db: DB, params: Params): string
+ }
+ /**
+ * BetweenExp represents a BETWEEN or a NOT BETWEEN expression.
+ */
+ interface BetweenExp {
+ }
+ interface BetweenExp {
+ /**
+ * Build converts an expression into a SQL fragment.
+ */
+ build(db: DB, params: Params): string
+ }
+ interface enclose {
+ /**
+ * Enclose surrounds the provided nonempty expression with parenthesis "()".
+ */
+ (exp: Expression): Expression
+ }
+ /**
+ * EncloseExp represents a parenthesis enclosed expression.
+ */
+ interface EncloseExp {
+ }
+ interface EncloseExp {
+ /**
+ * Build converts an expression into a SQL fragment.
+ */
+ build(db: DB, params: Params): string
+ }
+ /**
+ * TableModel is the interface that should be implemented by models which have unconventional table names.
+ */
+ interface TableModel {
+ [key:string]: any;
+ tableName(): string
+ }
+ /**
+ * ModelQuery represents a query associated with a struct model.
+ */
+ interface ModelQuery {
+ }
+ interface newModelQuery {
+ (model: {
+ }, fieldMapFunc: FieldMapFunc, db: DB, builder: Builder): (ModelQuery)
+ }
+ interface ModelQuery {
+ /**
+ * Context returns the context associated with the query.
+ */
+ context(): context.Context
+ }
+ interface ModelQuery {
+ /**
+ * WithContext associates a context with the query.
+ */
+ withContext(ctx: context.Context): (ModelQuery)
+ }
+ interface ModelQuery {
+ /**
+ * Exclude excludes the specified struct fields from being inserted/updated into the DB table.
+ */
+ exclude(...attrs: string[]): (ModelQuery)
+ }
+ interface ModelQuery {
+ /**
+ * Insert inserts a row in the table using the struct model associated with this query.
+ *
+ * By default, it inserts *all* public fields into the table, including those nil or empty ones.
+ * You may pass a list of the fields to this method to indicate that only those fields should be inserted.
+ * You may also call Exclude to exclude some fields from being inserted.
+ *
+ * If a model has an empty primary key, it is considered auto-incremental and the corresponding struct
+ * field will be filled with the generated primary key value after a successful insertion.
+ */
+ insert(...attrs: string[]): void
+ }
+ interface ModelQuery {
+ /**
+ * Update updates a row in the table using the struct model associated with this query.
+ * The row being updated has the same primary key as specified by the model.
+ *
+ * By default, it updates *all* public fields in the table, including those nil or empty ones.
+ * You may pass a list of the fields to this method to indicate that only those fields should be updated.
+ * You may also call Exclude to exclude some fields from being updated.
+ */
+ update(...attrs: string[]): void
+ }
+ interface ModelQuery {
+ /**
+ * Delete deletes a row in the table using the primary key specified by the struct model associated with this query.
+ */
+ delete(): void
+ }
+ /**
+ * ExecHookFunc executes before op allowing custom handling like auto fail/retry.
+ */
+ interface ExecHookFunc {(q: Query, op: () => void): void }
+ /**
+ * OneHookFunc executes right before the query populate the row result from One() call (aka. op).
+ */
+ interface OneHookFunc {(q: Query, a: {
+ }, op: (b: {
+ }) => void): void }
+ /**
+ * AllHookFunc executes right before the query populate the row result from All() call (aka. op).
+ */
+ interface AllHookFunc {(q: Query, sliceA: {
+ }, op: (sliceB: {
+ }) => void): void }
+ /**
+ * Params represents a list of parameter values to be bound to a SQL statement.
+ * The map keys are the parameter names while the map values are the corresponding parameter values.
+ */
+ interface Params extends _TygojaDict{}
+ /**
+ * Executor prepares, executes, or queries a SQL statement.
+ */
+ interface Executor {
+ [key:string]: any;
+ /**
+ * Exec executes a SQL statement
+ */
+ exec(query: string, ...args: {
+ }[]): sql.Result
+ /**
+ * ExecContext executes a SQL statement with the given context
+ */
+ execContext(ctx: context.Context, query: string, ...args: {
+ }[]): sql.Result
+ /**
+ * Query queries a SQL statement
+ */
+ query(query: string, ...args: {
+ }[]): (sql.Rows)
+ /**
+ * QueryContext queries a SQL statement with the given context
+ */
+ queryContext(ctx: context.Context, query: string, ...args: {
+ }[]): (sql.Rows)
+ /**
+ * Prepare creates a prepared statement
+ */
+ prepare(query: string): (sql.Stmt)
+ }
+ /**
+ * Query represents a SQL statement to be executed.
+ */
+ interface Query {
+ /**
+ * FieldMapper maps struct field names to DB column names.
+ */
+ fieldMapper: FieldMapFunc
+ /**
+ * LastError contains the last error (if any) of the query.
+ * LastError is cleared by Execute(), Row(), Rows(), One(), and All().
+ */
+ lastError: Error
+ /**
+ * LogFunc is used to log the SQL statement being executed.
+ */
+ logFunc: LogFunc
+ /**
+ * PerfFunc is used to log the SQL execution time. It is ignored if nil.
+ * Deprecated: Please use QueryLogFunc and ExecLogFunc instead.
+ */
+ perfFunc: PerfFunc
+ /**
+ * QueryLogFunc is called each time when performing a SQL query that returns data.
+ */
+ queryLogFunc: QueryLogFunc
+ /**
+ * ExecLogFunc is called each time when a SQL statement is executed.
+ */
+ execLogFunc: ExecLogFunc
+ }
+ interface newQuery {
+ /**
+ * NewQuery creates a new Query with the given SQL statement.
+ */
+ (db: DB, executor: Executor, sql: string): (Query)
+ }
+ interface Query {
+ /**
+ * SQL returns the original SQL used to create the query.
+ * The actual SQL (RawSQL) being executed is obtained by replacing the named
+ * parameter placeholders with anonymous ones.
+ */
+ sql(): string
+ }
+ interface Query {
+ /**
+ * Context returns the context associated with the query.
+ */
+ context(): context.Context
+ }
+ interface Query {
+ /**
+ * WithContext associates a context with the query.
+ */
+ withContext(ctx: context.Context): (Query)
+ }
+ interface Query {
+ /**
+ * WithExecHook associates the provided exec hook function with the query.
+ *
+ * It is called for every Query resolver (Execute(), One(), All(), Row(), Column()),
+ * allowing you to implement auto fail/retry or any other additional handling.
+ */
+ withExecHook(fn: ExecHookFunc): (Query)
+ }
+ interface Query {
+ /**
+ * WithOneHook associates the provided hook function with the query,
+ * called on q.One(), allowing you to implement custom struct scan based
+ * on the One() argument and/or result.
+ */
+ withOneHook(fn: OneHookFunc): (Query)
+ }
+ interface Query {
+ /**
+ * WithOneHook associates the provided hook function with the query,
+ * called on q.All(), allowing you to implement custom slice scan based
+ * on the All() argument and/or result.
+ */
+ withAllHook(fn: AllHookFunc): (Query)
+ }
+ interface Query {
+ /**
+ * Params returns the parameters to be bound to the SQL statement represented by this query.
+ */
+ params(): Params
+ }
+ interface Query {
+ /**
+ * Prepare creates a prepared statement for later queries or executions.
+ * Close() should be called after finishing all queries.
+ */
+ prepare(): (Query)
+ }
+ interface Query {
+ /**
+ * Close closes the underlying prepared statement.
+ * Close does nothing if the query has not been prepared before.
+ */
+ close(): void
+ }
+ interface Query {
+ /**
+ * Bind sets the parameters that should be bound to the SQL statement.
+ * The parameter placeholders in the SQL statement are in the format of "{:ParamName}".
+ */
+ bind(params: Params): (Query)
+ }
+ interface Query {
+ /**
+ * Execute executes the SQL statement without retrieving data.
+ */
+ execute(): sql.Result
+ }
+ interface Query {
+ /**
+ * One executes the SQL statement and populates the first row of the result into a struct or NullStringMap.
+ * Refer to Rows.ScanStruct() and Rows.ScanMap() for more details on how to specify
+ * the variable to be populated.
+ * Note that when the query has no rows in the result set, an sql.ErrNoRows will be returned.
+ */
+ one(a: {
+ }): void
+ }
+ interface Query {
+ /**
+ * All executes the SQL statement and populates all the resulting rows into a slice of struct or NullStringMap.
+ * The slice must be given as a pointer. Each slice element must be either a struct or a NullStringMap.
+ * Refer to Rows.ScanStruct() and Rows.ScanMap() for more details on how each slice element can be.
+ * If the query returns no row, the slice will be an empty slice (not nil).
+ */
+ all(slice: {
+ }): void
+ }
+ interface Query {
+ /**
+ * Row executes the SQL statement and populates the first row of the result into a list of variables.
+ * Note that the number of the variables should match to that of the columns in the query result.
+ * Note that when the query has no rows in the result set, an sql.ErrNoRows will be returned.
+ */
+ row(...a: {
+ }[]): void
+ }
+ interface Query {
+ /**
+ * Column executes the SQL statement and populates the first column of the result into a slice.
+ * Note that the parameter must be a pointer to a slice.
+ */
+ column(a: {
+ }): void
+ }
+ interface Query {
+ /**
+ * Rows executes the SQL statement and returns a Rows object to allow retrieving data row by row.
+ */
+ rows(): (Rows)
+ }
+ /**
+ * QueryBuilder builds different clauses for a SELECT SQL statement.
+ */
+ interface QueryBuilder {
+ [key:string]: any;
+ /**
+ * BuildSelect generates a SELECT clause from the given selected column names.
+ */
+ buildSelect(cols: Array, distinct: boolean, option: string): string
+ /**
+ * BuildFrom generates a FROM clause from the given tables.
+ */
+ buildFrom(tables: Array): string
+ /**
+ * BuildGroupBy generates a GROUP BY clause from the given group-by columns.
+ */
+ buildGroupBy(cols: Array): string
+ /**
+ * BuildJoin generates a JOIN clause from the given join information.
+ */
+ buildJoin(_arg0: Array, _arg1: Params): string
+ /**
+ * BuildWhere generates a WHERE clause from the given expression.
+ */
+ buildWhere(_arg0: Expression, _arg1: Params): string
+ /**
+ * BuildHaving generates a HAVING clause from the given expression.
+ */
+ buildHaving(_arg0: Expression, _arg1: Params): string
+ /**
+ * BuildOrderByAndLimit generates the ORDER BY and LIMIT clauses.
+ */
+ buildOrderByAndLimit(_arg0: string, _arg1: Array, _arg2: number, _arg3: number): string
+ /**
+ * BuildUnion generates a UNION clause from the given union information.
+ */
+ buildUnion(_arg0: Array, _arg1: Params): string
+ }
+ /**
+ * BaseQueryBuilder provides a basic implementation of QueryBuilder.
+ */
+ interface BaseQueryBuilder {
+ }
+ interface newBaseQueryBuilder {
+ /**
+ * NewBaseQueryBuilder creates a new BaseQueryBuilder instance.
+ */
+ (db: DB): (BaseQueryBuilder)
+ }
+ interface BaseQueryBuilder {
+ /**
+ * DB returns the DB instance associated with the query builder.
+ */
+ db(): (DB)
+ }
+ interface BaseQueryBuilder {
+ /**
+ * BuildSelect generates a SELECT clause from the given selected column names.
+ */
+ buildSelect(cols: Array, distinct: boolean, option: string): string
+ }
+ interface BaseQueryBuilder {
+ /**
+ * BuildFrom generates a FROM clause from the given tables.
+ */
+ buildFrom(tables: Array): string
+ }
+ interface BaseQueryBuilder {
+ /**
+ * BuildJoin generates a JOIN clause from the given join information.
+ */
+ buildJoin(joins: Array, params: Params): string
+ }
+ interface BaseQueryBuilder {
+ /**
+ * BuildWhere generates a WHERE clause from the given expression.
+ */
+ buildWhere(e: Expression, params: Params): string
+ }
+ interface BaseQueryBuilder {
+ /**
+ * BuildHaving generates a HAVING clause from the given expression.
+ */
+ buildHaving(e: Expression, params: Params): string
+ }
+ interface BaseQueryBuilder {
+ /**
+ * BuildGroupBy generates a GROUP BY clause from the given group-by columns.
+ */
+ buildGroupBy(cols: Array): string
+ }
+ interface BaseQueryBuilder {
+ /**
+ * BuildOrderByAndLimit generates the ORDER BY and LIMIT clauses.
+ */
+ buildOrderByAndLimit(sql: string, cols: Array, limit: number, offset: number): string
+ }
+ interface BaseQueryBuilder {
+ /**
+ * BuildUnion generates a UNION clause from the given union information.
+ */
+ buildUnion(unions: Array, params: Params): string
+ }
+ interface BaseQueryBuilder {
+ /**
+ * BuildOrderBy generates the ORDER BY clause.
+ */
+ buildOrderBy(cols: Array): string
+ }
+ interface BaseQueryBuilder {
+ /**
+ * BuildLimit generates the LIMIT clause.
+ */
+ buildLimit(limit: number, offset: number): string
+ }
+ /**
+ * VarTypeError indicates a variable type error when trying to populating a variable with DB result.
+ */
+ interface VarTypeError extends String{}
+ interface VarTypeError {
+ /**
+ * Error returns the error message.
+ */
+ error(): string
+ }
+ /**
+ * NullStringMap is a map of sql.NullString that can be used to hold DB query result.
+ * The map keys correspond to the DB column names, while the map values are their corresponding column values.
+ */
+ interface NullStringMap extends _TygojaDict{}
+ /**
+ * Rows enhances sql.Rows by providing additional data query methods.
+ * Rows can be obtained by calling Query.Rows(). It is mainly used to populate data row by row.
+ */
+ type _subuSGqA = sql.Rows
+ interface Rows extends _subuSGqA {
+ }
+ interface Rows {
+ /**
+ * ScanMap populates the current row of data into a NullStringMap.
+ * Note that the NullStringMap must not be nil, or it will panic.
+ * The NullStringMap will be populated using column names as keys and their values as
+ * the corresponding element values.
+ */
+ scanMap(a: NullStringMap): void
+ }
+ interface Rows {
+ /**
+ * ScanStruct populates the current row of data into a struct.
+ * The struct must be given as a pointer.
+ *
+ * ScanStruct associates struct fields with DB table columns through a field mapping function.
+ * It populates a struct field with the data of its associated column.
+ * Note that only exported struct fields will be populated.
+ *
+ * By default, DefaultFieldMapFunc() is used to map struct fields to table columns.
+ * This function separates each word in a field name with a underscore and turns every letter into lower case.
+ * For example, "LastName" is mapped to "last_name", "MyID" is mapped to "my_id", and so on.
+ * To change the default behavior, set DB.FieldMapper with your custom mapping function.
+ * You may also set Query.FieldMapper to change the behavior for particular queries.
+ */
+ scanStruct(a: {
+ }): void
+ }
+ /**
+ * BuildHookFunc defines a callback function that is executed on Query creation.
+ */
+ interface BuildHookFunc {(q: Query): void }
+ /**
+ * SelectQuery represents a DB-agnostic SELECT query.
+ * It can be built into a DB-specific query by calling the Build() method.
+ */
+ interface SelectQuery {
+ /**
+ * FieldMapper maps struct field names to DB column names.
+ */
+ fieldMapper: FieldMapFunc
+ /**
+ * TableMapper maps structs to DB table names.
+ */
+ tableMapper: TableMapFunc
+ }
+ /**
+ * JoinInfo contains the specification for a JOIN clause.
+ */
+ interface JoinInfo {
+ join: string
+ table: string
+ on: Expression
+ }
+ /**
+ * UnionInfo contains the specification for a UNION clause.
+ */
+ interface UnionInfo {
+ all: boolean
+ query?: Query
+ }
+ interface newSelectQuery {
+ /**
+ * NewSelectQuery creates a new SelectQuery instance.
+ */
+ (builder: Builder, db: DB): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * WithBuildHook runs the provided hook function with the query created on Build().
+ */
+ withBuildHook(fn: BuildHookFunc): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * Context returns the context associated with the query.
+ */
+ context(): context.Context
+ }
+ interface SelectQuery {
+ /**
+ * WithContext associates a context with the query.
+ */
+ withContext(ctx: context.Context): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * Select specifies the columns to be selected.
+ * Column names will be automatically quoted.
+ */
+ select(...cols: string[]): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * AndSelect adds additional columns to be selected.
+ * Column names will be automatically quoted.
+ */
+ andSelect(...cols: string[]): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * Distinct specifies whether to select columns distinctively.
+ * By default, distinct is false.
+ */
+ distinct(v: boolean): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * SelectOption specifies additional option that should be append to "SELECT".
+ */
+ selectOption(option: string): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * From specifies which tables to select from.
+ * Table names will be automatically quoted.
+ */
+ from(...tables: string[]): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * Where specifies the WHERE condition.
+ */
+ where(e: Expression): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * AndWhere concatenates a new WHERE condition with the existing one (if any) using "AND".
+ */
+ andWhere(e: Expression): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * OrWhere concatenates a new WHERE condition with the existing one (if any) using "OR".
+ */
+ orWhere(e: Expression): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * Join specifies a JOIN clause.
+ * The "typ" parameter specifies the JOIN type (e.g. "INNER JOIN", "LEFT JOIN").
+ */
+ join(typ: string, table: string, on: Expression): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * InnerJoin specifies an INNER JOIN clause.
+ * This is a shortcut method for Join.
+ */
+ innerJoin(table: string, on: Expression): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * LeftJoin specifies a LEFT JOIN clause.
+ * This is a shortcut method for Join.
+ */
+ leftJoin(table: string, on: Expression): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * RightJoin specifies a RIGHT JOIN clause.
+ * This is a shortcut method for Join.
+ */
+ rightJoin(table: string, on: Expression): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * OrderBy specifies the ORDER BY clause.
+ * Column names will be properly quoted. A column name can contain "ASC" or "DESC" to indicate its ordering direction.
+ */
+ orderBy(...cols: string[]): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * AndOrderBy appends additional columns to the existing ORDER BY clause.
+ * Column names will be properly quoted. A column name can contain "ASC" or "DESC" to indicate its ordering direction.
+ */
+ andOrderBy(...cols: string[]): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * GroupBy specifies the GROUP BY clause.
+ * Column names will be properly quoted.
+ */
+ groupBy(...cols: string[]): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * AndGroupBy appends additional columns to the existing GROUP BY clause.
+ * Column names will be properly quoted.
+ */
+ andGroupBy(...cols: string[]): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * Having specifies the HAVING clause.
+ */
+ having(e: Expression): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * AndHaving concatenates a new HAVING condition with the existing one (if any) using "AND".
+ */
+ andHaving(e: Expression): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * OrHaving concatenates a new HAVING condition with the existing one (if any) using "OR".
+ */
+ orHaving(e: Expression): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * Union specifies a UNION clause.
+ */
+ union(q: Query): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * UnionAll specifies a UNION ALL clause.
+ */
+ unionAll(q: Query): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * Limit specifies the LIMIT clause.
+ * A negative limit means no limit.
+ */
+ limit(limit: number): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * Offset specifies the OFFSET clause.
+ * A negative offset means no offset.
+ */
+ offset(offset: number): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * Bind specifies the parameter values to be bound to the query.
+ */
+ bind(params: Params): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * AndBind appends additional parameters to be bound to the query.
+ */
+ andBind(params: Params): (SelectQuery)
+ }
+ interface SelectQuery {
+ /**
+ * Build builds the SELECT query and returns an executable Query object.
+ */
+ build(): (Query)
+ }
+ interface SelectQuery {
+ /**
+ * One executes the SELECT query and populates the first row of the result into the specified variable.
+ *
+ * If the query does not specify a "from" clause, the method will try to infer the name of the table
+ * to be selected from by calling getTableName() which will return either the variable type name
+ * or the TableName() method if the variable implements the TableModel interface.
+ *
+ * Note that when the query has no rows in the result set, an sql.ErrNoRows will be returned.
+ */
+ one(a: {
+ }): void
+ }
+ interface SelectQuery {
+ /**
+ * Model selects the row with the specified primary key and populates the model with the row data.
+ *
+ * The model variable should be a pointer to a struct. If the query does not specify a "from" clause,
+ * it will use the model struct to determine which table to select data from. It will also use the model
+ * to infer the name of the primary key column. Only simple primary key is supported. For composite primary keys,
+ * please use Where() to specify the filtering condition.
+ */
+ model(pk: {
+ }, model: {
+ }): void
+ }
+ interface SelectQuery {
+ /**
+ * All executes the SELECT query and populates all rows of the result into a slice.
+ *
+ * Note that the slice must be passed in as a pointer.
+ *
+ * If the query does not specify a "from" clause, the method will try to infer the name of the table
+ * to be selected from by calling getTableName() which will return either the type name of the slice elements
+ * or the TableName() method if the slice element implements the TableModel interface.
+ */
+ all(slice: {
+ }): void
+ }
+ interface SelectQuery {
+ /**
+ * Rows builds and executes the SELECT query and returns a Rows object for data retrieval purpose.
+ * This is a shortcut to SelectQuery.Build().Rows()
+ */
+ rows(): (Rows)
+ }
+ interface SelectQuery {
+ /**
+ * Row builds and executes the SELECT query and populates the first row of the result into the specified variables.
+ * This is a shortcut to SelectQuery.Build().Row()
+ */
+ row(...a: {
+ }[]): void
+ }
+ interface SelectQuery {
+ /**
+ * Column builds and executes the SELECT statement and populates the first column of the result into a slice.
+ * Note that the parameter must be a pointer to a slice.
+ * This is a shortcut to SelectQuery.Build().Column()
+ */
+ column(a: {
+ }): void
+ }
+ /**
+ * QueryInfo represents a debug/info struct with exported SelectQuery fields.
+ */
+ interface QueryInfo {
+ builder: Builder
+ selects: Array
+ distinct: boolean
+ selectOption: string
+ from: Array
+ where: Expression
+ join: Array
+ orderBy: Array
+ groupBy: Array
+ having: Expression
+ union: Array
+ limit: number
+ offset: number
+ params: Params
+ context: context.Context
+ buildHook: BuildHookFunc
+ }
+ interface SelectQuery {
+ /**
+ * Info exports common SelectQuery fields allowing to inspect the
+ * current select query options.
+ */
+ info(): (QueryInfo)
+ }
+ /**
+ * FieldMapFunc converts a struct field name into a DB column name.
+ */
+ interface FieldMapFunc {(_arg0: string): string }
+ /**
+ * TableMapFunc converts a sample struct into a DB table name.
+ */
+ interface TableMapFunc {(a: {
+ }): string }
+ interface structInfo {
+ }
+ type _subKbJZd = structInfo
+ interface structValue extends _subKbJZd {
+ }
+ interface fieldInfo {
+ }
+ interface structInfoMapKey {
+ }
+ /**
+ * PostScanner is an optional interface used by ScanStruct.
+ */
+ interface PostScanner {
+ [key:string]: any;
+ /**
+ * PostScan executes right after the struct has been populated
+ * with the DB values, allowing you to further normalize or validate
+ * the loaded data.
+ */
+ postScan(): void
+ }
+ interface defaultFieldMapFunc {
+ /**
+ * DefaultFieldMapFunc maps a field name to a DB column name.
+ * The mapping rule set by this method is that words in a field name will be separated by underscores
+ * and the name will be turned into lower case. For example, "FirstName" maps to "first_name", and "MyID" becomes "my_id".
+ * See DB.FieldMapper for more details.
+ */
+ (f: string): string
+ }
+ interface getTableName {
+ /**
+ * GetTableName implements the default way of determining the table name corresponding to the given model struct
+ * or slice of structs. To get the actual table name for a model, you should use DB.TableMapFunc() instead.
+ * Do not call this method in a model's TableName() method because it will cause infinite loop.
+ */
+ (a: {
+ }): string
+ }
+ /**
+ * Tx enhances sql.Tx with additional querying methods.
+ */
+ type _subYNhcn = Builder
+ interface Tx extends _subYNhcn {
+ }
+ interface Tx {
+ /**
+ * Commit commits the transaction.
+ */
+ commit(): void
+ }
+ interface Tx {
+ /**
+ * Rollback aborts the transaction.
+ */
+ rollback(): void
+ }
+}
+
+/**
+ * Package validation provides configurable and extensible rules for validating data of various types.
+ */
+namespace ozzo_validation {
+ /**
+ * Error interface represents an validation error
+ */
+ interface Error {
+ [key:string]: any;
+ error(): string
+ code(): string
+ message(): string
+ setMessage(_arg0: string): Error
+ params(): _TygojaDict
+ setParams(_arg0: _TygojaDict): Error
+ }
+}
+
+/**
+ * Package exec runs external commands. It wraps os.StartProcess to make it
+ * easier to remap stdin and stdout, connect I/O with pipes, and do other
+ * adjustments.
+ *
+ * Unlike the "system" library call from C and other languages, the
+ * os/exec package intentionally does not invoke the system shell and
+ * does not expand any glob patterns or handle other expansions,
+ * pipelines, or redirections typically done by shells. The package
+ * behaves more like C's "exec" family of functions. To expand glob
+ * patterns, either call the shell directly, taking care to escape any
+ * dangerous input, or use the [path/filepath] package's Glob function.
+ * To expand environment variables, use package os's ExpandEnv.
+ *
+ * Note that the examples in this package assume a Unix system.
+ * They may not run on Windows, and they do not run in the Go Playground
+ * used by golang.org and godoc.org.
+ *
+ * # Executables in the current directory
+ *
+ * The functions [Command] and [LookPath] look for a program
+ * in the directories listed in the current path, following the
+ * conventions of the host operating system.
+ * Operating systems have for decades included the current
+ * directory in this search, sometimes implicitly and sometimes
+ * configured explicitly that way by default.
+ * Modern practice is that including the current directory
+ * is usually unexpected and often leads to security problems.
+ *
+ * To avoid those security problems, as of Go 1.19, this package will not resolve a program
+ * using an implicit or explicit path entry relative to the current directory.
+ * That is, if you run [LookPath]("go"), it will not successfully return
+ * ./go on Unix nor .\go.exe on Windows, no matter how the path is configured.
+ * Instead, if the usual path algorithms would result in that answer,
+ * these functions return an error err satisfying [errors.Is](err, [ErrDot]).
+ *
+ * For example, consider these two program snippets:
+ *
+ * ```
+ * path, err := exec.LookPath("prog")
+ * if err != nil {
+ * log.Fatal(err)
+ * }
+ * use(path)
+ * ```
+ *
+ * and
+ *
+ * ```
+ * cmd := exec.Command("prog")
+ * if err := cmd.Run(); err != nil {
+ * log.Fatal(err)
+ * }
+ * ```
+ *
+ * These will not find and run ./prog or .\prog.exe,
+ * no matter how the current path is configured.
+ *
+ * Code that always wants to run a program from the current directory
+ * can be rewritten to say "./prog" instead of "prog".
+ *
+ * Code that insists on including results from relative path entries
+ * can instead override the error using an errors.Is check:
+ *
+ * ```
+ * path, err := exec.LookPath("prog")
+ * if errors.Is(err, exec.ErrDot) {
+ * err = nil
+ * }
+ * if err != nil {
+ * log.Fatal(err)
+ * }
+ * use(path)
+ * ```
+ *
+ * and
+ *
+ * ```
+ * cmd := exec.Command("prog")
+ * if errors.Is(cmd.Err, exec.ErrDot) {
+ * cmd.Err = nil
+ * }
+ * if err := cmd.Run(); err != nil {
+ * log.Fatal(err)
+ * }
+ * ```
+ *
+ * Setting the environment variable GODEBUG=execerrdot=0
+ * disables generation of ErrDot entirely, temporarily restoring the pre-Go 1.19
+ * behavior for programs that are unable to apply more targeted fixes.
+ * A future version of Go may remove support for this variable.
+ *
+ * Before adding such overrides, make sure you understand the
+ * security implications of doing so.
+ * See https://go.dev/blog/path-security for more information.
+ */
+namespace exec {
+ interface command {
+ /**
+ * Command returns the [Cmd] struct to execute the named program with
+ * the given arguments.
+ *
+ * It sets only the Path and Args in the returned structure.
+ *
+ * If name contains no path separators, Command uses [LookPath] to
+ * resolve name to a complete path if possible. Otherwise it uses name
+ * directly as Path.
+ *
+ * The returned Cmd's Args field is constructed from the command name
+ * followed by the elements of arg, so arg should not include the
+ * command name itself. For example, Command("echo", "hello").
+ * Args[0] is always name, not the possibly resolved Path.
+ *
+ * On Windows, processes receive the whole command line as a single string
+ * and do their own parsing. Command combines and quotes Args into a command
+ * line string with an algorithm compatible with applications using
+ * CommandLineToArgvW (which is the most common way). Notable exceptions are
+ * msiexec.exe and cmd.exe (and thus, all batch files), which have a different
+ * unquoting algorithm. In these or other similar cases, you can do the
+ * quoting yourself and provide the full command line in SysProcAttr.CmdLine,
+ * leaving Args empty.
+ */
+ (name: string, ...arg: string[]): (Cmd)
+ }
+}
+
+namespace filesystem {
+ /**
+ * FileReader defines an interface for a file resource reader.
+ */
+ interface FileReader {
+ [key:string]: any;
+ open(): io.ReadSeekCloser
+ }
+ /**
+ * File defines a single file [io.ReadSeekCloser] resource.
+ *
+ * The file could be from a local path, multipart/form-data header, etc.
+ */
+ interface File {
+ reader: FileReader
+ name: string
+ originalName: string
+ size: number
+ }
+ interface newFileFromPath {
+ /**
+ * NewFileFromPath creates a new File instance from the provided local file path.
+ */
+ (path: string): (File)
+ }
+ interface newFileFromBytes {
+ /**
+ * NewFileFromBytes creates a new File instance from the provided byte slice.
+ */
+ (b: string|Array, name: string): (File)
+ }
+ interface newFileFromMultipart {
+ /**
+ * NewFileFromMultipart creates a new File from the provided multipart header.
+ */
+ (mh: multipart.FileHeader): (File)
+ }
+ interface newFileFromUrl {
+ /**
+ * NewFileFromUrl creates a new File from the provided url by
+ * downloading the resource and load it as BytesReader.
+ *
+ * Example
+ *
+ * ```
+ * ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
+ * defer cancel()
+ *
+ * file, err := filesystem.NewFileFromUrl(ctx, "https://example.com/image.png")
+ * ```
+ */
+ (ctx: context.Context, url: string): (File)
+ }
+ /**
+ * MultipartReader defines a FileReader from [multipart.FileHeader].
+ */
+ interface MultipartReader {
+ header?: multipart.FileHeader
+ }
+ interface MultipartReader {
+ /**
+ * Open implements the [filesystem.FileReader] interface.
+ */
+ open(): io.ReadSeekCloser
+ }
+ /**
+ * PathReader defines a FileReader from a local file path.
+ */
+ interface PathReader {
+ path: string
+ }
+ interface PathReader {
+ /**
+ * Open implements the [filesystem.FileReader] interface.
+ */
+ open(): io.ReadSeekCloser
+ }
+ /**
+ * BytesReader defines a FileReader from bytes content.
+ */
+ interface BytesReader {
+ bytes: string|Array
+ }
+ interface BytesReader {
+ /**
+ * Open implements the [filesystem.FileReader] interface.
+ */
+ open(): io.ReadSeekCloser
+ }
+ type _subazlvf = bytes.Reader
+ interface bytesReadSeekCloser extends _subazlvf {
+ }
+ interface bytesReadSeekCloser {
+ /**
+ * Close implements the [io.ReadSeekCloser] interface.
+ */
+ close(): void
+ }
+ interface System {
+ }
+ interface newS3 {
+ /**
+ * NewS3 initializes an S3 filesystem instance.
+ *
+ * NB! Make sure to call `Close()` after you are done working with it.
+ */
+ (bucketName: string, region: string, endpoint: string, accessKey: string, secretKey: string, s3ForcePathStyle: boolean): (System)
+ }
+ interface newLocal {
+ /**
+ * NewLocal initializes a new local filesystem instance.
+ *
+ * NB! Make sure to call `Close()` after you are done working with it.
+ */
+ (dirPath: string): (System)
+ }
+ interface System {
+ /**
+ * SetContext assigns the specified context to the current filesystem.
+ */
+ setContext(ctx: context.Context): void
+ }
+ interface System {
+ /**
+ * Close releases any resources used for the related filesystem.
+ */
+ close(): void
+ }
+ interface System {
+ /**
+ * Exists checks if file with fileKey path exists or not.
+ */
+ exists(fileKey: string): boolean
+ }
+ interface System {
+ /**
+ * Attributes returns the attributes for the file with fileKey path.
+ */
+ attributes(fileKey: string): (blob.Attributes)
+ }
+ interface System {
+ /**
+ * GetFile returns a file content reader for the given fileKey.
+ *
+ * NB! Make sure to call `Close()` after you are done working with it.
+ */
+ getFile(fileKey: string): (blob.Reader)
+ }
+ interface System {
+ /**
+ * Copy copies the file stored at srcKey to dstKey.
+ *
+ * If dstKey file already exists, it is overwritten.
+ */
+ copy(srcKey: string, dstKey: string): void
+ }
+ interface System {
+ /**
+ * List returns a flat list with info for all files under the specified prefix.
+ */
+ list(prefix: string): Array<(blob.ListObject | undefined)>
+ }
+ interface System {
+ /**
+ * Upload writes content into the fileKey location.
+ */
+ upload(content: string|Array, fileKey: string): void
+ }
+ interface System {
+ /**
+ * UploadFile uploads the provided multipart file to the fileKey location.
+ */
+ uploadFile(file: File, fileKey: string): void
+ }
+ interface System {
+ /**
+ * UploadMultipart uploads the provided multipart file to the fileKey location.
+ */
+ uploadMultipart(fh: multipart.FileHeader, fileKey: string): void
+ }
+ interface System {
+ /**
+ * Delete deletes stored file at fileKey location.
+ */
+ delete(fileKey: string): void
+ }
+ interface System {
+ /**
+ * DeletePrefix deletes everything starting with the specified prefix.
+ *
+ * The prefix could be subpath (ex. "/a/b/") or filename prefix (ex. "/a/b/file_").
+ */
+ deletePrefix(prefix: string): Array
+ }
+ interface System {
+ /**
+ * Serve serves the file at fileKey location to an HTTP response.
+ *
+ * If the `download` query parameter is used the file will be always served for
+ * download no matter of its type (aka. with "Content-Disposition: attachment").
+ */
+ serve(res: http.ResponseWriter, req: http.Request, fileKey: string, name: string): void
+ }
+ interface System {
+ /**
+ * CreateThumb creates a new thumb image for the file at originalKey location.
+ * The new thumb file is stored at thumbKey location.
+ *
+ * thumbSize is in the format:
+ * - 0xH (eg. 0x100) - resize to H height preserving the aspect ratio
+ * - Wx0 (eg. 300x0) - resize to W width preserving the aspect ratio
+ * - WxH (eg. 300x100) - resize and crop to WxH viewbox (from center)
+ * - WxHt (eg. 300x100t) - resize and crop to WxH viewbox (from top)
+ * - WxHb (eg. 300x100b) - resize and crop to WxH viewbox (from bottom)
+ * - WxHf (eg. 300x100f) - fit inside a WxH viewbox (without cropping)
+ */
+ createThumb(originalKey: string, thumbKey: string, thumbSize: string): void
+ }
+ // @ts-ignore
+ import v4 = signer
+ // @ts-ignore
+ import smithyhttp = http
+ interface ignoredHeadersKey {
+ }
+}
+
+/**
+ * Package tokens implements various user and admin tokens generation methods.
+ */
+namespace tokens {
+ interface newAdminAuthToken {
+ /**
+ * NewAdminAuthToken generates and returns a new admin authentication token.
+ */
+ (app: CoreApp, admin: models.Admin): string
+ }
+ interface newAdminResetPasswordToken {
+ /**
+ * NewAdminResetPasswordToken generates and returns a new admin password reset request token.
+ */
+ (app: CoreApp, admin: models.Admin): string
+ }
+ interface newAdminFileToken {
+ /**
+ * NewAdminFileToken generates and returns a new admin private file access token.
+ */
+ (app: CoreApp, admin: models.Admin): string
+ }
+ interface newRecordAuthToken {
+ /**
+ * NewRecordAuthToken generates and returns a new auth record authentication token.
+ */
+ (app: CoreApp, record: models.Record): string
+ }
+ interface newRecordVerifyToken {
+ /**
+ * NewRecordVerifyToken generates and returns a new record verification token.
+ */
+ (app: CoreApp, record: models.Record): string
+ }
+ interface newRecordResetPasswordToken {
+ /**
+ * NewRecordResetPasswordToken generates and returns a new auth record password reset request token.
+ */
+ (app: CoreApp, record: models.Record): string
+ }
+ interface newRecordChangeEmailToken {
+ /**
+ * NewRecordChangeEmailToken generates and returns a new auth record change email request token.
+ */
+ (app: CoreApp, record: models.Record, newEmail: string): string
+ }
+ interface newRecordFileToken {
+ /**
+ * NewRecordFileToken generates and returns a new record private file access token.
+ */
+ (app: CoreApp, record: models.Record): string
+ }
+}
+
+/**
+ * Package mails implements various helper methods for sending user and admin
+ * emails like forgotten password, verification, etc.
+ */
+namespace mails {
+ interface sendAdminPasswordReset {
+ /**
+ * SendAdminPasswordReset sends a password reset request email to the specified admin.
+ */
+ (app: CoreApp, admin: models.Admin): void
+ }
+ interface sendRecordPasswordLoginAlert {
+ /**
+ * @todo remove after the refactoring
+ *
+ * SendRecordPasswordLoginAlert sends a OAuth2 password login alert to the specified auth record.
+ */
+ (app: CoreApp, authRecord: models.Record, ...providerNames: string[]): void
+ }
+ interface sendRecordPasswordReset {
+ /**
+ * SendRecordPasswordReset sends a password reset request email to the specified user.
+ */
+ (app: CoreApp, authRecord: models.Record): void
+ }
+ interface sendRecordVerification {
+ /**
+ * SendRecordVerification sends a verification request email to the specified user.
+ */
+ (app: CoreApp, authRecord: models.Record): void
+ }
+ interface sendRecordChangeEmail {
+ /**
+ * SendRecordChangeEmail sends a change email confirmation email to the specified user.
+ */
+ (app: CoreApp, record: models.Record, newEmail: string): void
+ }
+}
+
+namespace middleware {
+ interface bodyLimit {
+ /**
+ * BodyLimit returns a BodyLimit middleware.
+ *
+ * BodyLimit middleware sets the maximum allowed size for a request body, if the size exceeds the configured limit, it
+ * sends "413 - Request Entity Too Large" response. The BodyLimit is determined based on both `Content-Length` request
+ * header and actual content read, which makes it super secure.
+ */
+ (limitBytes: number): echo.MiddlewareFunc
+ }
+ interface gzip {
+ /**
+ * Gzip returns a middleware which compresses HTTP response using gzip compression scheme.
+ */
+ (): echo.MiddlewareFunc
+ }
+}
+
+/**
+ * Package models implements various services used for request data
+ * validation and applying changes to existing DB models through the app Dao.
+ */
+namespace forms {
+ // @ts-ignore
+ import validation = ozzo_validation
+ /**
+ * AdminLogin is an admin email/pass login form.
+ */
+ interface AdminLogin {
+ identity: string
+ password: string
+ }
+ interface newAdminLogin {
+ /**
+ * NewAdminLogin creates a new [AdminLogin] form initialized with
+ * the provided [CoreApp] instance.
+ *
+ * If you want to submit the form as part of a transaction,
+ * you can change the default Dao via [SetDao()].
+ */
+ (app: CoreApp): (AdminLogin)
+ }
+ interface AdminLogin {
+ /**
+ * SetDao replaces the default form Dao instance with the provided one.
+ */
+ setDao(dao: daos.Dao): void
+ }
+ interface AdminLogin {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ interface AdminLogin {
+ /**
+ * Submit validates and submits the admin form.
+ * On success returns the authorized admin model.
+ *
+ * You can optionally provide a list of InterceptorFunc to
+ * further modify the form behavior before persisting it.
+ */
+ submit(...interceptors: InterceptorFunc[]): (models.Admin)
+ }
+ /**
+ * AdminPasswordResetConfirm is an admin password reset confirmation form.
+ */
+ interface AdminPasswordResetConfirm {
+ token: string
+ password: string
+ passwordConfirm: string
+ }
+ interface newAdminPasswordResetConfirm {
+ /**
+ * NewAdminPasswordResetConfirm creates a new [AdminPasswordResetConfirm]
+ * form initialized with from the provided [CoreApp] instance.
+ *
+ * If you want to submit the form as part of a transaction,
+ * you can change the default Dao via [SetDao()].
+ */
+ (app: CoreApp): (AdminPasswordResetConfirm)
+ }
+ interface AdminPasswordResetConfirm {
+ /**
+ * SetDao replaces the form Dao instance with the provided one.
+ *
+ * This is useful if you want to use a specific transaction Dao instance
+ * instead of the default app.Dao().
+ */
+ setDao(dao: daos.Dao): void
+ }
+ interface AdminPasswordResetConfirm {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ interface AdminPasswordResetConfirm {
+ /**
+ * Submit validates and submits the admin password reset confirmation form.
+ * On success returns the updated admin model associated to `form.Token`.
+ *
+ * You can optionally provide a list of InterceptorFunc to further
+ * modify the form behavior before persisting it.
+ */
+ submit(...interceptors: InterceptorFunc[]): (models.Admin)
+ }
+ /**
+ * AdminPasswordResetRequest is an admin password reset request form.
+ */
+ interface AdminPasswordResetRequest {
+ email: string
+ }
+ interface newAdminPasswordResetRequest {
+ /**
+ * NewAdminPasswordResetRequest creates a new [AdminPasswordResetRequest]
+ * form initialized with from the provided [CoreApp] instance.
+ *
+ * If you want to submit the form as part of a transaction,
+ * you can change the default Dao via [SetDao()].
+ */
+ (app: CoreApp): (AdminPasswordResetRequest)
+ }
+ interface AdminPasswordResetRequest {
+ /**
+ * SetDao replaces the default form Dao instance with the provided one.
+ */
+ setDao(dao: daos.Dao): void
+ }
+ interface AdminPasswordResetRequest {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ *
+ * This method doesn't verify that admin with `form.Email` exists (this is done on Submit).
+ */
+ validate(): void
+ }
+ interface AdminPasswordResetRequest {
+ /**
+ * Submit validates and submits the form.
+ * On success sends a password reset email to the `form.Email` admin.
+ *
+ * You can optionally provide a list of InterceptorFunc to further
+ * modify the form behavior before persisting it.
+ */
+ submit(...interceptors: InterceptorFunc[]): void
+ }
+ /**
+ * AdminUpsert is a [models.Admin] upsert (create/update) form.
+ */
+ interface AdminUpsert {
+ id: string
+ avatar: number
+ email: string
+ password: string
+ passwordConfirm: string
+ }
+ interface newAdminUpsert {
+ /**
+ * NewAdminUpsert creates a new [AdminUpsert] form with initializer
+ * config created from the provided [CoreApp] and [models.Admin] instances
+ * (for create you could pass a pointer to an empty Admin - `&models.Admin{}`).
+ *
+ * If you want to submit the form as part of a transaction,
+ * you can change the default Dao via [SetDao()].
+ */
+ (app: CoreApp, admin: models.Admin): (AdminUpsert)
+ }
+ interface AdminUpsert {
+ /**
+ * SetDao replaces the default form Dao instance with the provided one.
+ */
+ setDao(dao: daos.Dao): void
+ }
+ interface AdminUpsert {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ interface AdminUpsert {
+ /**
+ * Submit validates the form and upserts the form admin model.
+ *
+ * You can optionally provide a list of InterceptorFunc to further
+ * modify the form behavior before persisting it.
+ */
+ submit(...interceptors: InterceptorFunc[]): void
+ }
+ /**
+ * AppleClientSecretCreate is a form struct to generate a new Apple Client Secret.
+ *
+ * Reference: https://developer.apple.com/documentation/sign_in_with_apple/generate_and_validate_tokens
+ */
+ interface AppleClientSecretCreate {
+ /**
+ * ClientId is the identifier of your app (aka. Service ID).
+ */
+ clientId: string
+ /**
+ * TeamId is a 10-character string associated with your developer account
+ * (usually could be found next to your name in the Apple Developer site).
+ */
+ teamId: string
+ /**
+ * KeyId is a 10-character key identifier generated for the "Sign in with Apple"
+ * private key associated with your developer account.
+ */
+ keyId: string
+ /**
+ * PrivateKey is the private key associated to your app.
+ * Usually wrapped within -----BEGIN PRIVATE KEY----- X -----END PRIVATE KEY-----.
+ */
+ privateKey: string
+ /**
+ * Duration specifies how long the generated JWT should be considered valid.
+ * The specified value must be in seconds and max 15777000 (~6months).
+ */
+ duration: number
+ }
+ interface newAppleClientSecretCreate {
+ /**
+ * NewAppleClientSecretCreate creates a new [AppleClientSecretCreate] form with initializer
+ * config created from the provided [CoreApp] instances.
+ */
+ (app: CoreApp): (AppleClientSecretCreate)
+ }
+ interface AppleClientSecretCreate {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ interface AppleClientSecretCreate {
+ /**
+ * Submit validates the form and returns a new Apple Client Secret JWT.
+ */
+ submit(): string
+ }
+ /**
+ * BackupCreate is a request form for creating a new app backup.
+ */
+ interface BackupCreate {
+ name: string
+ }
+ interface newBackupCreate {
+ /**
+ * NewBackupCreate creates new BackupCreate request form.
+ */
+ (app: CoreApp): (BackupCreate)
+ }
+ interface BackupCreate {
+ /**
+ * SetContext replaces the default form context with the provided one.
+ */
+ setContext(ctx: context.Context): void
+ }
+ interface BackupCreate {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ interface BackupCreate {
+ /**
+ * Submit validates the form and creates the app backup.
+ *
+ * You can optionally provide a list of InterceptorFunc to further
+ * modify the form behavior before creating the backup.
+ */
+ submit(...interceptors: InterceptorFunc[]): void
+ }
+ /**
+ * BackupUpload is a request form for uploading a new app backup.
+ */
+ interface BackupUpload {
+ file?: filesystem.File
+ }
+ interface newBackupUpload {
+ /**
+ * NewBackupUpload creates new BackupUpload request form.
+ */
+ (app: CoreApp): (BackupUpload)
+ }
+ interface BackupUpload {
+ /**
+ * SetContext replaces the default form upload context with the provided one.
+ */
+ setContext(ctx: context.Context): void
+ }
+ interface BackupUpload {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ interface BackupUpload {
+ /**
+ * Submit validates the form and upload the backup file.
+ *
+ * You can optionally provide a list of InterceptorFunc to further
+ * modify the form behavior before uploading the backup.
+ */
+ submit(...interceptors: InterceptorFunc[]): void
+ }
+ /**
+ * InterceptorNextFunc is a interceptor handler function.
+ * Usually used in combination with InterceptorFunc.
+ */
+ interface InterceptorNextFunc {(t: T): void }
+ /**
+ * InterceptorFunc defines a single interceptor function that
+ * will execute the provided next func handler.
+ */
+ interface InterceptorFunc {(next: InterceptorNextFunc): InterceptorNextFunc }
+ /**
+ * CollectionUpsert is a [models.Collection] upsert (create/update) form.
+ */
+ interface CollectionUpsert {
+ id: string
+ type: string
+ name: string
+ system: boolean
+ schema: schema.Schema
+ indexes: types.JsonArray
+ listRule?: string
+ viewRule?: string
+ createRule?: string
+ updateRule?: string
+ deleteRule?: string
+ options: types.JsonMap
+ }
+ interface newCollectionUpsert {
+ /**
+ * NewCollectionUpsert creates a new [CollectionUpsert] form with initializer
+ * config created from the provided [CoreApp] and [models.Collection] instances
+ * (for create you could pass a pointer to an empty Collection - `&models.Collection{}`).
+ *
+ * If you want to submit the form as part of a transaction,
+ * you can change the default Dao via [SetDao()].
+ */
+ (app: CoreApp, collection: models.Collection): (CollectionUpsert)
+ }
+ interface CollectionUpsert {
+ /**
+ * SetDao replaces the default form Dao instance with the provided one.
+ */
+ setDao(dao: daos.Dao): void
+ }
+ interface CollectionUpsert {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ interface CollectionUpsert {
+ /**
+ * Submit validates the form and upserts the form's Collection model.
+ *
+ * On success the related record table schema will be auto updated.
+ *
+ * You can optionally provide a list of InterceptorFunc to further
+ * modify the form behavior before persisting it.
+ */
+ submit(...interceptors: InterceptorFunc[]): void
+ }
+ /**
+ * CollectionsImport is a form model to bulk import
+ * (create, replace and delete) collections from a user provided list.
+ */
+ interface CollectionsImport {
+ collections: Array<(models.Collection | undefined)>
+ deleteMissing: boolean
+ }
+ interface newCollectionsImport {
+ /**
+ * NewCollectionsImport creates a new [CollectionsImport] form with
+ * initialized with from the provided [CoreApp] instance.
+ *
+ * If you want to submit the form as part of a transaction,
+ * you can change the default Dao via [SetDao()].
+ */
+ (app: CoreApp): (CollectionsImport)
+ }
+ interface CollectionsImport {
+ /**
+ * SetDao replaces the default form Dao instance with the provided one.
+ */
+ setDao(dao: daos.Dao): void
+ }
+ interface CollectionsImport {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ interface CollectionsImport {
+ /**
+ * Submit applies the import, aka.:
+ * - imports the form collections (create or replace)
+ * - sync the collection changes with their related records table
+ * - ensures the integrity of the imported structure (aka. run validations for each collection)
+ * - if [form.DeleteMissing] is set, deletes all local collections that are not found in the imports list
+ *
+ * All operations are wrapped in a single transaction that are
+ * rollbacked on the first encountered error.
+ *
+ * You can optionally provide a list of InterceptorFunc to further
+ * modify the form behavior before persisting it.
+ */
+ submit(...interceptors: InterceptorFunc>[]): void
+ }
+ /**
+ * RealtimeSubscribe is a realtime subscriptions request form.
+ */
+ interface RealtimeSubscribe {
+ clientId: string
+ subscriptions: Array
+ }
+ interface newRealtimeSubscribe {
+ /**
+ * NewRealtimeSubscribe creates new RealtimeSubscribe request form.
+ */
+ (): (RealtimeSubscribe)
+ }
+ interface RealtimeSubscribe {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ /**
+ * RecordEmailChangeConfirm is an auth record email change confirmation form.
+ */
+ interface RecordEmailChangeConfirm {
+ token: string
+ password: string
+ }
+ interface newRecordEmailChangeConfirm {
+ /**
+ * NewRecordEmailChangeConfirm creates a new [RecordEmailChangeConfirm] form
+ * initialized with from the provided [CoreApp] and [models.Collection] instances.
+ *
+ * If you want to submit the form as part of a transaction,
+ * you can change the default Dao via [SetDao()].
+ */
+ (app: CoreApp, collection: models.Collection): (RecordEmailChangeConfirm)
+ }
+ interface RecordEmailChangeConfirm {
+ /**
+ * SetDao replaces the default form Dao instance with the provided one.
+ */
+ setDao(dao: daos.Dao): void
+ }
+ interface RecordEmailChangeConfirm {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ interface RecordEmailChangeConfirm {
+ /**
+ * Submit validates and submits the auth record email change confirmation form.
+ * On success returns the updated auth record associated to `form.Token`.
+ *
+ * You can optionally provide a list of InterceptorFunc to
+ * further modify the form behavior before persisting it.
+ */
+ submit(...interceptors: InterceptorFunc[]): (models.Record)
+ }
+ /**
+ * RecordEmailChangeRequest is an auth record email change request form.
+ */
+ interface RecordEmailChangeRequest {
+ newEmail: string
+ }
+ interface newRecordEmailChangeRequest {
+ /**
+ * NewRecordEmailChangeRequest creates a new [RecordEmailChangeRequest] form
+ * initialized with from the provided [CoreApp] and [models.Record] instances.
+ *
+ * If you want to submit the form as part of a transaction,
+ * you can change the default Dao via [SetDao()].
+ */
+ (app: CoreApp, record: models.Record): (RecordEmailChangeRequest)
+ }
+ interface RecordEmailChangeRequest {
+ /**
+ * SetDao replaces the default form Dao instance with the provided one.
+ */
+ setDao(dao: daos.Dao): void
+ }
+ interface RecordEmailChangeRequest {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ interface RecordEmailChangeRequest {
+ /**
+ * Submit validates and sends the change email request.
+ *
+ * You can optionally provide a list of InterceptorFunc to
+ * further modify the form behavior before persisting it.
+ */
+ submit(...interceptors: InterceptorFunc[]): void
+ }
+ /**
+ * RecordOAuth2LoginData defines the OA
+ */
+ interface RecordOAuth2LoginData {
+ externalAuth?: models.ExternalAuth
+ record?: models.Record
+ oAuth2User?: auth.AuthUser
+ providerClient: auth.Provider
+ }
+ /**
+ * BeforeOAuth2RecordCreateFunc defines a callback function that will
+ * be called before OAuth2 new Record creation.
+ */
+ interface BeforeOAuth2RecordCreateFunc {(createForm: RecordUpsert, authRecord: models.Record, authUser: auth.AuthUser): void }
+ /**
+ * RecordOAuth2Login is an auth record OAuth2 login form.
+ */
+ interface RecordOAuth2Login {
+ /**
+ * The name of the OAuth2 client provider (eg. "google")
+ */
+ provider: string
+ /**
+ * The authorization code returned from the initial request.
+ */
+ code: string
+ /**
+ * The optional PKCE code verifier as part of the code_challenge sent with the initial request.
+ */
+ codeVerifier: string
+ /**
+ * The redirect url sent with the initial request.
+ */
+ redirectUrl: string
+ /**
+ * Additional data that will be used for creating a new auth record
+ * if an existing OAuth2 account doesn't exist.
+ */
+ createData: _TygojaDict
+ }
+ interface newRecordOAuth2Login {
+ /**
+ * NewRecordOAuth2Login creates a new [RecordOAuth2Login] form with
+ * initialized with from the provided [CoreApp] instance.
+ *
+ * If you want to submit the form as part of a transaction,
+ * you can change the default Dao via [SetDao()].
+ */
+ (app: CoreApp, collection: models.Collection, optAuthRecord: models.Record): (RecordOAuth2Login)
+ }
+ interface RecordOAuth2Login {
+ /**
+ * SetDao replaces the default form Dao instance with the provided one.
+ */
+ setDao(dao: daos.Dao): void
+ }
+ interface RecordOAuth2Login {
+ /**
+ * SetBeforeNewRecordCreateFunc sets a before OAuth2 record create callback handler.
+ */
+ setBeforeNewRecordCreateFunc(f: BeforeOAuth2RecordCreateFunc): void
+ }
+ interface RecordOAuth2Login {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ interface RecordOAuth2Login {
+ /**
+ * Submit validates and submits the form.
+ *
+ * If an auth record doesn't exist, it will make an attempt to create it
+ * based on the fetched OAuth2 profile data via a local [RecordUpsert] form.
+ * You can intercept/modify the Record create form with [form.SetBeforeNewRecordCreateFunc()].
+ *
+ * You can also optionally provide a list of InterceptorFunc to
+ * further modify the form behavior before persisting it.
+ *
+ * On success returns the authorized record model and the fetched provider's data.
+ */
+ submit(...interceptors: InterceptorFunc[]): [(models.Record), (auth.AuthUser)]
+ }
+ /**
+ * RecordPasswordLogin is record username/email + password login form.
+ */
+ interface RecordPasswordLogin {
+ identity: string
+ password: string
+ }
+ interface newRecordPasswordLogin {
+ /**
+ * NewRecordPasswordLogin creates a new [RecordPasswordLogin] form initialized
+ * with from the provided [CoreApp] and [models.Collection] instance.
+ *
+ * If you want to submit the form as part of a transaction,
+ * you can change the default Dao via [SetDao()].
+ */
+ (app: CoreApp, collection: models.Collection): (RecordPasswordLogin)
+ }
+ interface RecordPasswordLogin {
+ /**
+ * SetDao replaces the default form Dao instance with the provided one.
+ */
+ setDao(dao: daos.Dao): void
+ }
+ interface RecordPasswordLogin {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ interface RecordPasswordLogin {
+ /**
+ * Submit validates and submits the form.
+ * On success returns the authorized record model.
+ *
+ * You can optionally provide a list of InterceptorFunc to
+ * further modify the form behavior before persisting it.
+ */
+ submit(...interceptors: InterceptorFunc[]): (models.Record)
+ }
+ /**
+ * RecordPasswordResetConfirm is an auth record password reset confirmation form.
+ */
+ interface RecordPasswordResetConfirm {
+ token: string
+ password: string
+ passwordConfirm: string
+ }
+ interface newRecordPasswordResetConfirm {
+ /**
+ * NewRecordPasswordResetConfirm creates a new [RecordPasswordResetConfirm]
+ * form initialized with from the provided [CoreApp] instance.
+ *
+ * If you want to submit the form as part of a transaction,
+ * you can change the default Dao via [SetDao()].
+ */
+ (app: CoreApp, collection: models.Collection): (RecordPasswordResetConfirm)
+ }
+ interface RecordPasswordResetConfirm {
+ /**
+ * SetDao replaces the default form Dao instance with the provided one.
+ */
+ setDao(dao: daos.Dao): void
+ }
+ interface RecordPasswordResetConfirm {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ interface RecordPasswordResetConfirm {
+ /**
+ * Submit validates and submits the form.
+ * On success returns the updated auth record associated to `form.Token`.
+ *
+ * You can optionally provide a list of InterceptorFunc to further
+ * modify the form behavior before persisting it.
+ */
+ submit(...interceptors: InterceptorFunc[]): (models.Record)
+ }
+ /**
+ * RecordPasswordResetRequest is an auth record reset password request form.
+ */
+ interface RecordPasswordResetRequest {
+ email: string
+ }
+ interface newRecordPasswordResetRequest {
+ /**
+ * NewRecordPasswordResetRequest creates a new [RecordPasswordResetRequest]
+ * form initialized with from the provided [CoreApp] instance.
+ *
+ * If you want to submit the form as part of a transaction,
+ * you can change the default Dao via [SetDao()].
+ */
+ (app: CoreApp, collection: models.Collection): (RecordPasswordResetRequest)
+ }
+ interface RecordPasswordResetRequest {
+ /**
+ * SetDao replaces the default form Dao instance with the provided one.
+ */
+ setDao(dao: daos.Dao): void
+ }
+ interface RecordPasswordResetRequest {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ *
+ * This method doesn't check whether auth record with `form.Email` exists (this is done on Submit).
+ */
+ validate(): void
+ }
+ interface RecordPasswordResetRequest {
+ /**
+ * Submit validates and submits the form.
+ * On success, sends a password reset email to the `form.Email` auth record.
+ *
+ * You can optionally provide a list of InterceptorFunc to further
+ * modify the form behavior before persisting it.
+ */
+ submit(...interceptors: InterceptorFunc[]): void
+ }
+ /**
+ * RecordUpsert is a [models.Record] upsert (create/update) form.
+ */
+ interface RecordUpsert {
+ /**
+ * base model fields
+ */
+ id: string
+ /**
+ * auth collection fields
+ * ---
+ */
+ username: string
+ email: string
+ emailVisibility: boolean
+ verified: boolean
+ password: string
+ passwordConfirm: string
+ oldPassword: string
+ }
+ interface newRecordUpsert {
+ /**
+ * NewRecordUpsert creates a new [RecordUpsert] form with initializer
+ * config created from the provided [CoreApp] and [models.Record] instances
+ * (for create you could pass a pointer to an empty Record - models.NewRecord(collection)).
+ *
+ * If you want to submit the form as part of a transaction,
+ * you can change the default Dao via [SetDao()].
+ */
+ (app: CoreApp, record: models.Record): (RecordUpsert)
+ }
+ interface RecordUpsert {
+ /**
+ * Data returns the loaded form's data.
+ */
+ data(): _TygojaDict
+ }
+ interface RecordUpsert {
+ /**
+ * SetFullManageAccess sets the manageAccess bool flag of the current
+ * form to enable/disable directly changing some system record fields
+ * (often used with auth collection records).
+ */
+ setFullManageAccess(fullManageAccess: boolean): void
+ }
+ interface RecordUpsert {
+ /**
+ * SetDao replaces the default form Dao instance with the provided one.
+ */
+ setDao(dao: daos.Dao): void
+ }
+ interface RecordUpsert {
+ /**
+ * LoadRequest extracts the json or multipart/form-data request data
+ * and lods it into the form.
+ *
+ * File upload is supported only via multipart/form-data.
+ */
+ loadRequest(r: http.Request, keyPrefix: string): void
+ }
+ interface RecordUpsert {
+ /**
+ * FilesToUpload returns the parsed request files ready for upload.
+ */
+ filesToUpload(): _TygojaDict
+ }
+ interface RecordUpsert {
+ /**
+ * FilesToUpload returns the parsed request filenames ready to be deleted.
+ */
+ filesToDelete(): Array
+ }
+ interface RecordUpsert {
+ /**
+ * AddFiles adds the provided file(s) to the specified file field.
+ *
+ * If the file field is a SINGLE-value file field (aka. "Max Select = 1"),
+ * then the newly added file will REPLACE the existing one.
+ * In this case if you pass more than 1 files only the first one will be assigned.
+ *
+ * If the file field is a MULTI-value file field (aka. "Max Select > 1"),
+ * then the newly added file(s) will be APPENDED to the existing one(s).
+ *
+ * Example
+ *
+ * ```
+ * f1, _ := filesystem.NewFileFromPath("/path/to/file1.txt")
+ * f2, _ := filesystem.NewFileFromPath("/path/to/file2.txt")
+ * form.AddFiles("documents", f1, f2)
+ * ```
+ */
+ addFiles(key: string, ...files: (filesystem.File | undefined)[]): void
+ }
+ interface RecordUpsert {
+ /**
+ * RemoveFiles removes a single or multiple file from the specified file field.
+ *
+ * NB! If filesToDelete is not set it will remove all existing files
+ * assigned to the file field (including those assigned with AddFiles)!
+ *
+ * Example
+ *
+ * ```
+ * // mark only only 2 files for removal
+ * form.RemoveFiles("documents", "file1_aw4bdrvws6.txt", "file2_xwbs36bafv.txt")
+ *
+ * // mark all "documents" files for removal
+ * form.RemoveFiles("documents")
+ * ```
+ */
+ removeFiles(key: string, ...toDelete: string[]): void
+ }
+ interface RecordUpsert {
+ /**
+ * LoadData loads and normalizes the provided regular record data fields into the form.
+ */
+ loadData(requestData: _TygojaDict): void
+ }
+ interface RecordUpsert {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ interface RecordUpsert {
+ validateAndFill(): void
+ }
+ interface RecordUpsert {
+ /**
+ * DrySubmit performs a form submit within a transaction and reverts it.
+ * For actual record persistence, check the `form.Submit()` method.
+ *
+ * This method doesn't handle file uploads/deletes or trigger any app events!
+ */
+ drySubmit(callback: (txDao: daos.Dao) => void): void
+ }
+ interface RecordUpsert {
+ /**
+ * Submit validates the form and upserts the form Record model.
+ *
+ * You can optionally provide a list of InterceptorFunc to further
+ * modify the form behavior before persisting it.
+ */
+ submit(...interceptors: InterceptorFunc[]): void
+ }
+ /**
+ * RecordVerificationConfirm is an auth record email verification confirmation form.
+ */
+ interface RecordVerificationConfirm {
+ token: string
+ }
+ interface newRecordVerificationConfirm {
+ /**
+ * NewRecordVerificationConfirm creates a new [RecordVerificationConfirm]
+ * form initialized with from the provided [CoreApp] instance.
+ *
+ * If you want to submit the form as part of a transaction,
+ * you can change the default Dao via [SetDao()].
+ */
+ (app: CoreApp, collection: models.Collection): (RecordVerificationConfirm)
+ }
+ interface RecordVerificationConfirm {
+ /**
+ * SetDao replaces the default form Dao instance with the provided one.
+ */
+ setDao(dao: daos.Dao): void
+ }
+ interface RecordVerificationConfirm {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ interface RecordVerificationConfirm {
+ /**
+ * Submit validates and submits the form.
+ * On success returns the verified auth record associated to `form.Token`.
+ *
+ * You can optionally provide a list of InterceptorFunc to further
+ * modify the form behavior before persisting it.
+ */
+ submit(...interceptors: InterceptorFunc[]): (models.Record)
+ }
+ /**
+ * RecordVerificationRequest is an auth record email verification request form.
+ */
+ interface RecordVerificationRequest {
+ email: string
+ }
+ interface newRecordVerificationRequest {
+ /**
+ * NewRecordVerificationRequest creates a new [RecordVerificationRequest]
+ * form initialized with from the provided [CoreApp] instance.
+ *
+ * If you want to submit the form as part of a transaction,
+ * you can change the default Dao via [SetDao()].
+ */
+ (app: CoreApp, collection: models.Collection): (RecordVerificationRequest)
+ }
+ interface RecordVerificationRequest {
+ /**
+ * SetDao replaces the default form Dao instance with the provided one.
+ */
+ setDao(dao: daos.Dao): void
+ }
+ interface RecordVerificationRequest {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ *
+ * // This method doesn't verify that auth record with `form.Email` exists (this is done on Submit).
+ */
+ validate(): void
+ }
+ interface RecordVerificationRequest {
+ /**
+ * Submit validates and sends a verification request email
+ * to the `form.Email` auth record.
+ *
+ * You can optionally provide a list of InterceptorFunc to further
+ * modify the form behavior before persisting it.
+ */
+ submit(...interceptors: InterceptorFunc[]): void
+ }
+ /**
+ * SettingsUpsert is a [settings.Settings] upsert (create/update) form.
+ */
+ type _subHPqgL = settings.Settings
+ interface SettingsUpsert extends _subHPqgL {
+ }
+ interface newSettingsUpsert {
+ /**
+ * NewSettingsUpsert creates a new [SettingsUpsert] form with initializer
+ * config created from the provided [CoreApp] instance.
+ *
+ * If you want to submit the form as part of a transaction,
+ * you can change the default Dao via [SetDao()].
+ */
+ (app: CoreApp): (SettingsUpsert)
+ }
+ interface SettingsUpsert {
+ /**
+ * SetDao replaces the default form Dao instance with the provided one.
+ */
+ setDao(dao: daos.Dao): void
+ }
+ interface SettingsUpsert {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ interface SettingsUpsert {
+ /**
+ * Submit validates the form and upserts the loaded settings.
+ *
+ * On success the app settings will be refreshed with the form ones.
+ *
+ * You can optionally provide a list of InterceptorFunc to further
+ * modify the form behavior before persisting it.
+ */
+ submit(...interceptors: InterceptorFunc[]): void
+ }
+ /**
+ * TestEmailSend is a email template test request form.
+ */
+ interface TestEmailSend {
+ template: string
+ email: string
+ }
+ interface newTestEmailSend {
+ /**
+ * NewTestEmailSend creates and initializes new TestEmailSend form.
+ */
+ (app: CoreApp): (TestEmailSend)
+ }
+ interface TestEmailSend {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ interface TestEmailSend {
+ /**
+ * Submit validates and sends a test email to the form.Email address.
+ */
+ submit(): void
+ }
+ /**
+ * TestS3Filesystem defines a S3 filesystem connection test.
+ */
+ interface TestS3Filesystem {
+ /**
+ * The name of the filesystem - storage or backups
+ */
+ filesystem: string
+ }
+ interface newTestS3Filesystem {
+ /**
+ * NewTestS3Filesystem creates and initializes new TestS3Filesystem form.
+ */
+ (app: CoreApp): (TestS3Filesystem)
+ }
+ interface TestS3Filesystem {
+ /**
+ * Validate makes the form validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ interface TestS3Filesystem {
+ /**
+ * Submit validates and performs a S3 filesystem connection test.
+ */
+ submit(): void
+ }
+}
+
+/**
+ * Package apis implements the default PocketBase api services and middlewares.
+ */
+namespace apis {
+ interface adminApi {
+ }
+ // @ts-ignore
+ import validation = ozzo_validation
+ /**
+ * ApiError defines the struct for a basic api error response.
+ */
+ interface ApiError {
+ code: number
+ message: string
+ data: _TygojaDict
+ }
+ interface ApiError {
+ /**
+ * Error makes it compatible with the `error` interface.
+ */
+ error(): string
+ }
+ interface ApiError {
+ /**
+ * RawData returns the unformatted error data (could be an internal error, text, etc.)
+ */
+ rawData(): any
+ }
+ interface newNotFoundError {
+ /**
+ * NewNotFoundError creates and returns 404 `ApiError`.
+ */
+ (message: string, data: any): (ApiError)
+ }
+ interface newBadRequestError {
+ /**
+ * NewBadRequestError creates and returns 400 `ApiError`.
+ */
+ (message: string, data: any): (ApiError)
+ }
+ interface newForbiddenError {
+ /**
+ * NewForbiddenError creates and returns 403 `ApiError`.
+ */
+ (message: string, data: any): (ApiError)
+ }
+ interface newUnauthorizedError {
+ /**
+ * NewUnauthorizedError creates and returns 401 `ApiError`.
+ */
+ (message: string, data: any): (ApiError)
+ }
+ interface newApiError {
+ /**
+ * NewApiError creates and returns new normalized `ApiError` instance.
+ */
+ (status: number, message: string, data: any): (ApiError)
+ }
+ interface backupApi {
+ }
+ interface initApi {
+ /**
+ * InitApi creates a configured echo instance with registered
+ * system and app specific routes and middlewares.
+ */
+ (app: CoreApp): (echo.Echo)
+ }
+ interface staticDirectoryHandler {
+ /**
+ * StaticDirectoryHandler is similar to `echo.StaticDirectoryHandler`
+ * but without the directory redirect which conflicts with RemoveTrailingSlash middleware.
+ *
+ * If a file resource is missing and indexFallback is set, the request
+ * will be forwarded to the base index.html (useful also for SPA).
+ *
+ * @see https://github.com/labstack/echo/issues/2211
+ */
+ (fileSystem: fs.FS, indexFallback: boolean): echo.HandlerFunc
+ }
+ interface collectionApi {
+ }
+ interface fileApi {
+ }
+ interface healthApi {
+ }
+ interface healthCheckResponse {
+ message: string
+ code: number
+ data: {
+ canBackup: boolean
+ }
+ }
+ interface logsApi {
+ }
+ interface requireGuestOnly {
+ /**
+ * RequireGuestOnly middleware requires a request to NOT have a valid
+ * Authorization header.
+ *
+ * This middleware is the opposite of [apis.RequireAdminOrRecordAuth()].
+ */
+ (): echo.MiddlewareFunc
+ }
+ interface requireRecordAuth {
+ /**
+ * RequireRecordAuth middleware requires a request to have
+ * a valid record auth Authorization header.
+ *
+ * The auth record could be from any collection.
+ *
+ * You can further filter the allowed record auth collections by
+ * specifying their names.
+ *
+ * Example:
+ *
+ * ```
+ * apis.RequireRecordAuth()
+ * ```
+ *
+ * Or:
+ *
+ * ```
+ * apis.RequireRecordAuth("users", "supervisors")
+ * ```
+ *
+ * To restrict the auth record only to the loaded context collection,
+ * use [apis.RequireSameContextRecordAuth()] instead.
+ */
+ (...optCollectionNames: string[]): echo.MiddlewareFunc
+ }
+ interface requireSameContextRecordAuth {
+ /**
+ * RequireSameContextRecordAuth middleware requires a request to have
+ * a valid record Authorization header.
+ *
+ * The auth record must be from the same collection already loaded in the context.
+ */
+ (): echo.MiddlewareFunc
+ }
+ interface requireAdminAuth {
+ /**
+ * RequireAdminAuth middleware requires a request to have
+ * a valid admin Authorization header.
+ */
+ (): echo.MiddlewareFunc
+ }
+ interface requireAdminAuthOnlyIfAny {
+ /**
+ * RequireAdminAuthOnlyIfAny middleware requires a request to have
+ * a valid admin Authorization header ONLY if the application has
+ * at least 1 existing Admin model.
+ */
+ (app: CoreApp): echo.MiddlewareFunc
+ }
+ interface requireAdminOrRecordAuth {
+ /**
+ * RequireAdminOrRecordAuth middleware requires a request to have
+ * a valid admin or record Authorization header set.
+ *
+ * You can further filter the allowed auth record collections by providing their names.
+ *
+ * This middleware is the opposite of [apis.RequireGuestOnly()].
+ */
+ (...optCollectionNames: string[]): echo.MiddlewareFunc
+ }
+ interface requireAdminOrOwnerAuth {
+ /**
+ * RequireAdminOrOwnerAuth middleware requires a request to have
+ * a valid admin or auth record owner Authorization header set.
+ *
+ * This middleware is similar to [apis.RequireAdminOrRecordAuth()] but
+ * for the auth record token expects to have the same id as the path
+ * parameter ownerIdParam (default to "id" if empty).
+ */
+ (ownerIdParam: string): echo.MiddlewareFunc
+ }
+ interface loadAuthContext {
+ /**
+ * LoadAuthContext middleware reads the Authorization request header
+ * and loads the token related record or admin instance into the
+ * request's context.
+ *
+ * This middleware is expected to be already registered by default for all routes.
+ */
+ (app: CoreApp): echo.MiddlewareFunc
+ }
+ interface loadCollectionContext {
+ /**
+ * LoadCollectionContext middleware finds the collection with related
+ * path identifier and loads it into the request context.
+ *
+ * Set optCollectionTypes to further filter the found collection by its type.
+ */
+ (app: CoreApp, ...optCollectionTypes: string[]): echo.MiddlewareFunc
+ }
+ interface activityLogger {
+ /**
+ * ActivityLogger middleware takes care to save the request information
+ * into the logs database.
+ *
+ * The middleware does nothing if the app logs retention period is zero
+ * (aka. app.Settings().Logs.MaxDays = 0).
+ */
+ (app: CoreApp): echo.MiddlewareFunc
+ }
+ interface realtimeApi {
+ }
+ /**
+ * recordData represents the broadcasted record subscrition message data.
+ */
+ interface recordData {
+ record: any // map or models.Record
+ action: string
+ }
+ interface getter {
+ [key:string]: any;
+ get(_arg0: string): any
+ }
+ interface recordAuthApi {
+ }
+ interface providerInfo {
+ name: string
+ displayName: string
+ state: string
+ authUrl: string
+ /**
+ * technically could be omitted if the provider doesn't support PKCE,
+ * but to avoid breaking existing typed clients we'll return them as empty string
+ */
+ codeVerifier: string
+ codeChallenge: string
+ codeChallengeMethod: string
+ }
+ interface oauth2RedirectData {
+ state: string
+ code: string
+ error: string
+ }
+ interface recordApi {
+ }
+ interface requestData {
+ /**
+ * Deprecated: Use RequestInfo instead.
+ */
+ (c: echo.Context): (models.RequestInfo)
+ }
+ interface requestInfo {
+ /**
+ * RequestInfo exports cached common request data fields
+ * (query, body, logged auth state, etc.) from the provided context.
+ */
+ (c: echo.Context): (models.RequestInfo)
+ }
+ interface recordAuthResponse {
+ /**
+ * RecordAuthResponse writes standardised json record auth response
+ * into the specified request context.
+ */
+ (app: CoreApp, c: echo.Context, authRecord: models.Record, meta: any, ...finalizers: ((token: string) => void)[]): void
+ }
+ interface enrichRecord {
+ /**
+ * EnrichRecord parses the request context and enrich the provided record:
+ * ```
+ * - expands relations (if defaultExpands and/or ?expand query param is set)
+ * - ensures that the emails of the auth record and its expanded auth relations
+ * are visible only for the current logged admin, record owner or record with manage access
+ * ```
+ */
+ (c: echo.Context, dao: daos.Dao, record: models.Record, ...defaultExpands: string[]): void
+ }
+ interface enrichRecords {
+ /**
+ * EnrichRecords parses the request context and enriches the provided records:
+ * ```
+ * - expands relations (if defaultExpands and/or ?expand query param is set)
+ * - ensures that the emails of the auth records and their expanded auth relations
+ * are visible only for the current logged admin, record owner or record with manage access
+ * ```
+ */
+ (c: echo.Context, dao: daos.Dao, records: Array<(models.Record | undefined)>, ...defaultExpands: string[]): void
+ }
+ /**
+ * ServeConfig defines a configuration struct for apis.Serve().
+ */
+ interface ServeConfig {
+ /**
+ * ShowStartBanner indicates whether to show or hide the server start console message.
+ */
+ showStartBanner: boolean
+ /**
+ * HttpAddr is the TCP address to listen for the HTTP server (eg. `127.0.0.1:80`).
+ */
+ httpAddr: string
+ /**
+ * HttpsAddr is the TCP address to listen for the HTTPS server (eg. `127.0.0.1:443`).
+ */
+ httpsAddr: string
+ /**
+ * Optional domains list to use when issuing the TLS certificate.
+ *
+ * If not set, the host from the bound server address will be used.
+ *
+ * For convenience, for each "non-www" domain a "www" entry and
+ * redirect will be automatically added.
+ */
+ certificateDomains: Array
+ /**
+ * AllowedOrigins is an optional list of CORS origins (default to "*").
+ */
+ allowedOrigins: Array
+ }
+ interface serve {
+ /**
+ * Serve starts a new app web server.
+ *
+ * NB! The app should be bootstrapped before starting the web server.
+ *
+ * Example:
+ *
+ * ```
+ * app.Bootstrap()
+ * apis.Serve(app, apis.ServeConfig{
+ * HttpAddr: "127.0.0.1:8080",
+ * ShowStartBanner: false,
+ * })
+ * ```
+ */
+ (app: CoreApp, config: ServeConfig): (http.Server)
+ }
+ interface migrationsConnection {
+ db?: dbx.DB
+ migrationsList: migrate.MigrationsList
+ }
+ interface settingsApi {
+ }
+}
+
+namespace pocketbase {
+ /**
+ * appWrapper serves as a private CoreApp instance wrapper.
+ */
+ type _subKNSIF = CoreApp
+ interface appWrapper extends _subKNSIF {
+ }
+ /**
+ * PocketBase defines a PocketBase app launcher.
+ *
+ * It implements [CoreApp] via embedding and all of the app interface methods
+ * could be accessed directly through the instance (eg. PocketBase.DataDir()).
+ */
+ type _subMNsmB = appWrapper
+ interface PocketBase extends _subMNsmB {
+ /**
+ * RootCmd is the main console command
+ */
+ rootCmd?: cobra.Command
+ }
+ /**
+ * Config is the PocketBase initialization config struct.
+ */
+ interface Config {
+ /**
+ * optional default values for the console flags
+ */
+ defaultDev: boolean
+ defaultDataDir: string // if not set, it will fallback to "./pb_data"
+ defaultEncryptionEnv: string
+ /**
+ * hide the default console server info on app startup
+ */
+ hideStartBanner: boolean
+ /**
+ * optional DB configurations
+ */
+ dataMaxOpenConns: number // default to core.DefaultDataMaxOpenConns
+ dataMaxIdleConns: number // default to core.DefaultDataMaxIdleConns
+ logsMaxOpenConns: number // default to core.DefaultLogsMaxOpenConns
+ logsMaxIdleConns: number // default to core.DefaultLogsMaxIdleConns
+ }
+ interface _new {
+ /**
+ * New creates a new PocketBase instance with the default configuration.
+ * Use [NewWithConfig()] if you want to provide a custom configuration.
+ *
+ * Note that the application will not be initialized/bootstrapped yet,
+ * aka. DB connections, migrations, app settings, etc. will not be accessible.
+ * Everything will be initialized when [Start()] is executed.
+ * If you want to initialize the application before calling [Start()],
+ * then you'll have to manually call [Bootstrap()].
+ */
+ (): (PocketBase)
+ }
+ interface newWithConfig {
+ /**
+ * NewWithConfig creates a new PocketBase instance with the provided config.
+ *
+ * Note that the application will not be initialized/bootstrapped yet,
+ * aka. DB connections, migrations, app settings, etc. will not be accessible.
+ * Everything will be initialized when [Start()] is executed.
+ * If you want to initialize the application before calling [Start()],
+ * then you'll have to manually call [Bootstrap()].
+ */
+ (config: Config): (PocketBase)
+ }
+ interface PocketBase {
+ /**
+ * Start starts the application, aka. registers the default system
+ * commands (serve, migrate, version) and executes pb.RootCmd.
+ */
+ start(): void
+ }
+ interface PocketBase {
+ /**
+ * Execute initializes the application (if not already) and executes
+ * the pb.RootCmd with graceful shutdown support.
+ *
+ * This method differs from pb.Start() by not registering the default
+ * system commands!
+ */
+ execute(): void
+ }
+ /**
+ * coloredWriter is a small wrapper struct to construct a [color.Color] writter.
+ */
+ interface coloredWriter {
+ }
+ interface coloredWriter {
+ /**
+ * Write writes the p bytes using the colored writer.
+ */
+ write(p: string|Array): number
+ }
+}
+
+/**
+ * Package syscall contains an interface to the low-level operating system
+ * primitives. The details vary depending on the underlying system, and
+ * by default, godoc will display the syscall documentation for the current
+ * system. If you want godoc to display syscall documentation for another
+ * system, set $GOOS and $GOARCH to the desired system. For example, if
+ * you want to view documentation for freebsd/arm on linux/amd64, set $GOOS
+ * to freebsd and $GOARCH to arm.
+ * The primary use of syscall is inside other packages that provide a more
+ * portable interface to the system, such as "os", "time" and "net". Use
+ * those packages rather than this one if you can.
+ * For details of the functions and data types in this package consult
+ * the manuals for the appropriate operating system.
+ * These calls return err == nil to indicate success; otherwise
+ * err is an operating system error describing the failure.
+ * On most systems, that error has type [Errno].
+ *
+ * NOTE: Most of the functions, types, and constants defined in
+ * this package are also available in the [golang.org/x/sys] package.
+ * That package has more system call support than this one,
+ * and most new code should prefer that package where possible.
+ * See https://golang.org/s/go1.4-syscall for more information.
+ */
+namespace syscall {
+ interface SysProcAttr {
+ chroot: string // Chroot.
+ credential?: Credential // Credential.
+ /**
+ * Ptrace tells the child to call ptrace(PTRACE_TRACEME).
+ * Call runtime.LockOSThread before starting a process with this set,
+ * and don't call UnlockOSThread until done with PtraceSyscall calls.
+ */
+ ptrace: boolean
+ setsid: boolean // Create session.
+ /**
+ * Setpgid sets the process group ID of the child to Pgid,
+ * or, if Pgid == 0, to the new child's process ID.
+ */
+ setpgid: boolean
+ /**
+ * Setctty sets the controlling terminal of the child to
+ * file descriptor Ctty. Ctty must be a descriptor number
+ * in the child process: an index into ProcAttr.Files.
+ * This is only meaningful if Setsid is true.
+ */
+ setctty: boolean
+ noctty: boolean // Detach fd 0 from controlling terminal.
+ ctty: number // Controlling TTY fd.
+ /**
+ * Foreground places the child process group in the foreground.
+ * This implies Setpgid. The Ctty field must be set to
+ * the descriptor of the controlling TTY.
+ * Unlike Setctty, in this case Ctty must be a descriptor
+ * number in the parent process.
+ */
+ foreground: boolean
+ pgid: number // Child's process group ID if Setpgid.
+ /**
+ * Pdeathsig, if non-zero, is a signal that the kernel will send to
+ * the child process when the creating thread dies. Note that the signal
+ * is sent on thread termination, which may happen before process termination.
+ * There are more details at https://go.dev/issue/27505.
+ */
+ pdeathsig: Signal
+ cloneflags: number // Flags for clone calls.
+ unshareflags: number // Flags for unshare calls.
+ uidMappings: Array // User ID mappings for user namespaces.
+ gidMappings: Array // Group ID mappings for user namespaces.
+ /**
+ * GidMappingsEnableSetgroups enabling setgroups syscall.
+ * If false, then setgroups syscall will be disabled for the child process.
+ * This parameter is no-op if GidMappings == nil. Otherwise for unprivileged
+ * users this should be set to false for mappings work.
+ */
+ gidMappingsEnableSetgroups: boolean
+ ambientCaps: Array // Ambient capabilities.
+ useCgroupFD: boolean // Whether to make use of the CgroupFD field.
+ cgroupFD: number // File descriptor of a cgroup to put the new process into.
+ /**
+ * PidFD, if not nil, is used to store the pidfd of a child, if the
+ * functionality is supported by the kernel, or -1. Note *PidFD is
+ * changed only if the process starts successfully.
+ */
+ pidFD?: number
+ }
+ // @ts-ignore
+ import errorspkg = errors
+ /**
+ * A RawConn is a raw network connection.
+ */
+ interface RawConn {
+ [key:string]: any;
+ /**
+ * Control invokes f on the underlying connection's file
+ * descriptor or handle.
+ * The file descriptor fd is guaranteed to remain valid while
+ * f executes but not after f returns.
+ */
+ control(f: (fd: number) => void): void
+ /**
+ * Read invokes f on the underlying connection's file
+ * descriptor or handle; f is expected to try to read from the
+ * file descriptor.
+ * If f returns true, Read returns. Otherwise Read blocks
+ * waiting for the connection to be ready for reading and
+ * tries again repeatedly.
+ * The file descriptor is guaranteed to remain valid while f
+ * executes but not after f returns.
+ */
+ read(f: (fd: number) => boolean): void
+ /**
+ * Write is like Read but for writing.
+ */
+ write(f: (fd: number) => boolean): void
+ }
+ // @ts-ignore
+ import runtimesyscall = syscall
+ /**
+ * An Errno is an unsigned number describing an error condition.
+ * It implements the error interface. The zero Errno is by convention
+ * a non-error, so code to convert from Errno to error should use:
+ *
+ * ```
+ * err = nil
+ * if errno != 0 {
+ * err = errno
+ * }
+ * ```
+ *
+ * Errno values can be tested against error values using [errors.Is].
+ * For example:
+ *
+ * ```
+ * _, _, err := syscall.Syscall(...)
+ * if errors.Is(err, fs.ErrNotExist) ...
+ * ```
+ */
+ interface Errno extends Number{}
+ interface Errno {
+ error(): string
+ }
+ interface Errno {
+ is(target: Error): boolean
+ }
+ interface Errno {
+ temporary(): boolean
+ }
+ interface Errno {
+ timeout(): boolean
+ }
+}
+
+/**
+ * Package time provides functionality for measuring and displaying time.
+ *
+ * The calendrical calculations always assume a Gregorian calendar, with
+ * no leap seconds.
+ *
+ * # Monotonic Clocks
+ *
+ * Operating systems provide both a “wall clock,” which is subject to
+ * changes for clock synchronization, and a “monotonic clock,” which is
+ * not. The general rule is that the wall clock is for telling time and
+ * the monotonic clock is for measuring time. Rather than split the API,
+ * in this package the Time returned by [time.Now] contains both a wall
+ * clock reading and a monotonic clock reading; later time-telling
+ * operations use the wall clock reading, but later time-measuring
+ * operations, specifically comparisons and subtractions, use the
+ * monotonic clock reading.
+ *
+ * For example, this code always computes a positive elapsed time of
+ * approximately 20 milliseconds, even if the wall clock is changed during
+ * the operation being timed:
+ *
+ * ```
+ * start := time.Now()
+ * ... operation that takes 20 milliseconds ...
+ * t := time.Now()
+ * elapsed := t.Sub(start)
+ * ```
+ *
+ * Other idioms, such as [time.Since](start), [time.Until](deadline), and
+ * time.Now().Before(deadline), are similarly robust against wall clock
+ * resets.
+ *
+ * The rest of this section gives the precise details of how operations
+ * use monotonic clocks, but understanding those details is not required
+ * to use this package.
+ *
+ * The Time returned by time.Now contains a monotonic clock reading.
+ * If Time t has a monotonic clock reading, t.Add adds the same duration to
+ * both the wall clock and monotonic clock readings to compute the result.
+ * Because t.AddDate(y, m, d), t.Round(d), and t.Truncate(d) are wall time
+ * computations, they always strip any monotonic clock reading from their results.
+ * Because t.In, t.Local, and t.UTC are used for their effect on the interpretation
+ * of the wall time, they also strip any monotonic clock reading from their results.
+ * The canonical way to strip a monotonic clock reading is to use t = t.Round(0).
+ *
+ * If Times t and u both contain monotonic clock readings, the operations
+ * t.After(u), t.Before(u), t.Equal(u), t.Compare(u), and t.Sub(u) are carried out
+ * using the monotonic clock readings alone, ignoring the wall clock
+ * readings. If either t or u contains no monotonic clock reading, these
+ * operations fall back to using the wall clock readings.
+ *
+ * On some systems the monotonic clock will stop if the computer goes to sleep.
+ * On such a system, t.Sub(u) may not accurately reflect the actual
+ * time that passed between t and u. The same applies to other functions and
+ * methods that subtract times, such as [Since], [Until], [Before], [After],
+ * [Add], [Sub], [Equal] and [Compare]. In some cases, you may need to strip
+ * the monotonic clock to get accurate results.
+ *
+ * Because the monotonic clock reading has no meaning outside
+ * the current process, the serialized forms generated by t.GobEncode,
+ * t.MarshalBinary, t.MarshalJSON, and t.MarshalText omit the monotonic
+ * clock reading, and t.Format provides no format for it. Similarly, the
+ * constructors [time.Date], [time.Parse], [time.ParseInLocation], and [time.Unix],
+ * as well as the unmarshalers t.GobDecode, t.UnmarshalBinary.
+ * t.UnmarshalJSON, and t.UnmarshalText always create times with
+ * no monotonic clock reading.
+ *
+ * The monotonic clock reading exists only in [Time] values. It is not
+ * a part of [Duration] values or the Unix times returned by t.Unix and
+ * friends.
+ *
+ * Note that the Go == operator compares not just the time instant but
+ * also the [Location] and the monotonic clock reading. See the
+ * documentation for the Time type for a discussion of equality
+ * testing for Time values.
+ *
+ * For debugging, the result of t.String does include the monotonic
+ * clock reading if present. If t != u because of different monotonic clock readings,
+ * that difference will be visible when printing t.String() and u.String().
+ *
+ * # Timer Resolution
+ *
+ * [Timer] resolution varies depending on the Go runtime, the operating system
+ * and the underlying hardware.
+ * On Unix, the resolution is ~1ms.
+ * On Windows version 1803 and newer, the resolution is ~0.5ms.
+ * On older Windows versions, the default resolution is ~16ms, but
+ * a higher resolution may be requested using [golang.org/x/sys/windows.TimeBeginPeriod].
+ */
+namespace time {
+ interface Time {
+ /**
+ * String returns the time formatted using the format string
+ *
+ * ```
+ * "2006-01-02 15:04:05.999999999 -0700 MST"
+ * ```
+ *
+ * If the time has a monotonic clock reading, the returned string
+ * includes a final field "m=±", where value is the monotonic
+ * clock reading formatted as a decimal number of seconds.
+ *
+ * The returned string is meant for debugging; for a stable serialized
+ * representation, use t.MarshalText, t.MarshalBinary, or t.Format
+ * with an explicit format string.
+ */
+ string(): string
+ }
+ interface Time {
+ /**
+ * GoString implements [fmt.GoStringer] and formats t to be printed in Go source
+ * code.
+ */
+ goString(): string
+ }
+ interface Time {
+ /**
+ * Format returns a textual representation of the time value formatted according
+ * to the layout defined by the argument. See the documentation for the
+ * constant called [Layout] to see how to represent the layout format.
+ *
+ * The executable example for [Time.Format] demonstrates the working
+ * of the layout string in detail and is a good reference.
+ */
+ format(layout: string): string
+ }
+ interface Time {
+ /**
+ * AppendFormat is like [Time.Format] but appends the textual
+ * representation to b and returns the extended buffer.
+ */
+ appendFormat(b: string|Array, layout: string): string|Array
+ }
+ /**
+ * A Time represents an instant in time with nanosecond precision.
+ *
+ * Programs using times should typically store and pass them as values,
+ * not pointers. That is, time variables and struct fields should be of
+ * type [time.Time], not *time.Time.
+ *
+ * A Time value can be used by multiple goroutines simultaneously except
+ * that the methods [Time.GobDecode], [Time.UnmarshalBinary], [Time.UnmarshalJSON] and
+ * [Time.UnmarshalText] are not concurrency-safe.
+ *
+ * Time instants can be compared using the [Time.Before], [Time.After], and [Time.Equal] methods.
+ * The [Time.Sub] method subtracts two instants, producing a [Duration].
+ * The [Time.Add] method adds a Time and a Duration, producing a Time.
+ *
+ * The zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.
+ * As this time is unlikely to come up in practice, the [Time.IsZero] method gives
+ * a simple way of detecting a time that has not been initialized explicitly.
+ *
+ * Each time has an associated [Location]. The methods [Time.Local], [Time.UTC], and Time.In return a
+ * Time with a specific Location. Changing the Location of a Time value with
+ * these methods does not change the actual instant it represents, only the time
+ * zone in which to interpret it.
+ *
+ * Representations of a Time value saved by the [Time.GobEncode], [Time.MarshalBinary],
+ * [Time.MarshalJSON], and [Time.MarshalText] methods store the [Time.Location]'s offset, but not
+ * the location name. They therefore lose information about Daylight Saving Time.
+ *
+ * In addition to the required “wall clock” reading, a Time may contain an optional
+ * reading of the current process's monotonic clock, to provide additional precision
+ * for comparison or subtraction.
+ * See the “Monotonic Clocks” section in the package documentation for details.
+ *
+ * Note that the Go == operator compares not just the time instant but also the
+ * Location and the monotonic clock reading. Therefore, Time values should not
+ * be used as map or database keys without first guaranteeing that the
+ * identical Location has been set for all values, which can be achieved
+ * through use of the UTC or Local method, and that the monotonic clock reading
+ * has been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)
+ * to t == u, since t.Equal uses the most accurate comparison available and
+ * correctly handles the case when only one of its arguments has a monotonic
+ * clock reading.
+ */
+ interface Time {
+ }
+ interface Time {
+ /**
+ * After reports whether the time instant t is after u.
+ */
+ after(u: Time): boolean
+ }
+ interface Time {
+ /**
+ * Before reports whether the time instant t is before u.
+ */
+ before(u: Time): boolean
+ }
+ interface Time {
+ /**
+ * Compare compares the time instant t with u. If t is before u, it returns -1;
+ * if t is after u, it returns +1; if they're the same, it returns 0.
+ */
+ compare(u: Time): number
+ }
+ interface Time {
+ /**
+ * Equal reports whether t and u represent the same time instant.
+ * Two times can be equal even if they are in different locations.
+ * For example, 6:00 +0200 and 4:00 UTC are Equal.
+ * See the documentation on the Time type for the pitfalls of using == with
+ * Time values; most code should use Equal instead.
+ */
+ equal(u: Time): boolean
+ }
+ interface Time {
+ /**
+ * IsZero reports whether t represents the zero time instant,
+ * January 1, year 1, 00:00:00 UTC.
+ */
+ isZero(): boolean
+ }
+ interface Time {
+ /**
+ * Date returns the year, month, and day in which t occurs.
+ */
+ date(): [number, Month, number]
+ }
+ interface Time {
+ /**
+ * Year returns the year in which t occurs.
+ */
+ year(): number
+ }
+ interface Time {
+ /**
+ * Month returns the month of the year specified by t.
+ */
+ month(): Month
+ }
+ interface Time {
+ /**
+ * Day returns the day of the month specified by t.
+ */
+ day(): number
+ }
+ interface Time {
+ /**
+ * Weekday returns the day of the week specified by t.
+ */
+ weekday(): Weekday
+ }
+ interface Time {
+ /**
+ * ISOWeek returns the ISO 8601 year and week number in which t occurs.
+ * Week ranges from 1 to 53. Jan 01 to Jan 03 of year n might belong to
+ * week 52 or 53 of year n-1, and Dec 29 to Dec 31 might belong to week 1
+ * of year n+1.
+ */
+ isoWeek(): [number, number]
+ }
+ interface Time {
+ /**
+ * Clock returns the hour, minute, and second within the day specified by t.
+ */
+ clock(): [number, number, number]
+ }
+ interface Time {
+ /**
+ * Hour returns the hour within the day specified by t, in the range [0, 23].
+ */
+ hour(): number
+ }
+ interface Time {
+ /**
+ * Minute returns the minute offset within the hour specified by t, in the range [0, 59].
+ */
+ minute(): number
+ }
+ interface Time {
+ /**
+ * Second returns the second offset within the minute specified by t, in the range [0, 59].
+ */
+ second(): number
+ }
+ interface Time {
+ /**
+ * Nanosecond returns the nanosecond offset within the second specified by t,
+ * in the range [0, 999999999].
+ */
+ nanosecond(): number
+ }
+ interface Time {
+ /**
+ * YearDay returns the day of the year specified by t, in the range [1,365] for non-leap years,
+ * and [1,366] in leap years.
+ */
+ yearDay(): number
+ }
+ /**
+ * A Duration represents the elapsed time between two instants
+ * as an int64 nanosecond count. The representation limits the
+ * largest representable duration to approximately 290 years.
+ */
+ interface Duration extends Number{}
+ interface Duration {
+ /**
+ * String returns a string representing the duration in the form "72h3m0.5s".
+ * Leading zero units are omitted. As a special case, durations less than one
+ * second format use a smaller unit (milli-, micro-, or nanoseconds) to ensure
+ * that the leading digit is non-zero. The zero duration formats as 0s.
+ */
+ string(): string
+ }
+ interface Duration {
+ /**
+ * Nanoseconds returns the duration as an integer nanosecond count.
+ */
+ nanoseconds(): number
+ }
+ interface Duration {
+ /**
+ * Microseconds returns the duration as an integer microsecond count.
+ */
+ microseconds(): number
+ }
+ interface Duration {
+ /**
+ * Milliseconds returns the duration as an integer millisecond count.
+ */
+ milliseconds(): number
+ }
+ interface Duration {
+ /**
+ * Seconds returns the duration as a floating point number of seconds.
+ */
+ seconds(): number
+ }
+ interface Duration {
+ /**
+ * Minutes returns the duration as a floating point number of minutes.
+ */
+ minutes(): number
+ }
+ interface Duration {
+ /**
+ * Hours returns the duration as a floating point number of hours.
+ */
+ hours(): number
+ }
+ interface Duration {
+ /**
+ * Truncate returns the result of rounding d toward zero to a multiple of m.
+ * If m <= 0, Truncate returns d unchanged.
+ */
+ truncate(m: Duration): Duration
+ }
+ interface Duration {
+ /**
+ * Round returns the result of rounding d to the nearest multiple of m.
+ * The rounding behavior for halfway values is to round away from zero.
+ * If the result exceeds the maximum (or minimum)
+ * value that can be stored in a [Duration],
+ * Round returns the maximum (or minimum) duration.
+ * If m <= 0, Round returns d unchanged.
+ */
+ round(m: Duration): Duration
+ }
+ interface Duration {
+ /**
+ * Abs returns the absolute value of d.
+ * As a special case, [math.MinInt64] is converted to [math.MaxInt64].
+ */
+ abs(): Duration
+ }
+ interface Time {
+ /**
+ * Add returns the time t+d.
+ */
+ add(d: Duration): Time
+ }
+ interface Time {
+ /**
+ * Sub returns the duration t-u. If the result exceeds the maximum (or minimum)
+ * value that can be stored in a [Duration], the maximum (or minimum) duration
+ * will be returned.
+ * To compute t-d for a duration d, use t.Add(-d).
+ */
+ sub(u: Time): Duration
+ }
+ interface Time {
+ /**
+ * AddDate returns the time corresponding to adding the
+ * given number of years, months, and days to t.
+ * For example, AddDate(-1, 2, 3) applied to January 1, 2011
+ * returns March 4, 2010.
+ *
+ * Note that dates are fundamentally coupled to timezones, and calendrical
+ * periods like days don't have fixed durations. AddDate uses the Location of
+ * the Time value to determine these durations. That means that the same
+ * AddDate arguments can produce a different shift in absolute time depending on
+ * the base Time value and its Location. For example, AddDate(0, 0, 1) applied
+ * to 12:00 on March 27 always returns 12:00 on March 28. At some locations and
+ * in some years this is a 24 hour shift. In others it's a 23 hour shift due to
+ * daylight savings time transitions.
+ *
+ * AddDate normalizes its result in the same way that Date does,
+ * so, for example, adding one month to October 31 yields
+ * December 1, the normalized form for November 31.
+ */
+ addDate(years: number, months: number, days: number): Time
+ }
+ interface Time {
+ /**
+ * UTC returns t with the location set to UTC.
+ */
+ utc(): Time
+ }
+ interface Time {
+ /**
+ * Local returns t with the location set to local time.
+ */
+ local(): Time
+ }
+ interface Time {
+ /**
+ * In returns a copy of t representing the same time instant, but
+ * with the copy's location information set to loc for display
+ * purposes.
+ *
+ * In panics if loc is nil.
+ */
+ in(loc: Location): Time
+ }
+ interface Time {
+ /**
+ * Location returns the time zone information associated with t.
+ */
+ location(): (Location)
+ }
+ interface Time {
+ /**
+ * Zone computes the time zone in effect at time t, returning the abbreviated
+ * name of the zone (such as "CET") and its offset in seconds east of UTC.
+ */
+ zone(): [string, number]
+ }
+ interface Time {
+ /**
+ * ZoneBounds returns the bounds of the time zone in effect at time t.
+ * The zone begins at start and the next zone begins at end.
+ * If the zone begins at the beginning of time, start will be returned as a zero Time.
+ * If the zone goes on forever, end will be returned as a zero Time.
+ * The Location of the returned times will be the same as t.
+ */
+ zoneBounds(): [Time, Time]
+ }
+ interface Time {
+ /**
+ * Unix returns t as a Unix time, the number of seconds elapsed
+ * since January 1, 1970 UTC. The result does not depend on the
+ * location associated with t.
+ * Unix-like operating systems often record time as a 32-bit
+ * count of seconds, but since the method here returns a 64-bit
+ * value it is valid for billions of years into the past or future.
+ */
+ unix(): number
+ }
+ interface Time {
+ /**
+ * UnixMilli returns t as a Unix time, the number of milliseconds elapsed since
+ * January 1, 1970 UTC. The result is undefined if the Unix time in
+ * milliseconds cannot be represented by an int64 (a date more than 292 million
+ * years before or after 1970). The result does not depend on the
+ * location associated with t.
+ */
+ unixMilli(): number
+ }
+ interface Time {
+ /**
+ * UnixMicro returns t as a Unix time, the number of microseconds elapsed since
+ * January 1, 1970 UTC. The result is undefined if the Unix time in
+ * microseconds cannot be represented by an int64 (a date before year -290307 or
+ * after year 294246). The result does not depend on the location associated
+ * with t.
+ */
+ unixMicro(): number
+ }
+ interface Time {
+ /**
+ * UnixNano returns t as a Unix time, the number of nanoseconds elapsed
+ * since January 1, 1970 UTC. The result is undefined if the Unix time
+ * in nanoseconds cannot be represented by an int64 (a date before the year
+ * 1678 or after 2262). Note that this means the result of calling UnixNano
+ * on the zero Time is undefined. The result does not depend on the
+ * location associated with t.
+ */
+ unixNano(): number
+ }
+ interface Time {
+ /**
+ * MarshalBinary implements the encoding.BinaryMarshaler interface.
+ */
+ marshalBinary(): string|Array
+ }
+ interface Time {
+ /**
+ * UnmarshalBinary implements the encoding.BinaryUnmarshaler interface.
+ */
+ unmarshalBinary(data: string|Array): void
+ }
+ interface Time {
+ /**
+ * GobEncode implements the gob.GobEncoder interface.
+ */
+ gobEncode(): string|Array
+ }
+ interface Time {
+ /**
+ * GobDecode implements the gob.GobDecoder interface.
+ */
+ gobDecode(data: string|Array): void
+ }
+ interface Time {
+ /**
+ * MarshalJSON implements the [json.Marshaler] interface.
+ * The time is a quoted string in the RFC 3339 format with sub-second precision.
+ * If the timestamp cannot be represented as valid RFC 3339
+ * (e.g., the year is out of range), then an error is reported.
+ */
+ marshalJSON(): string|Array
+ }
+ interface Time {
+ /**
+ * UnmarshalJSON implements the [json.Unmarshaler] interface.
+ * The time must be a quoted string in the RFC 3339 format.
+ */
+ unmarshalJSON(data: string|Array): void
+ }
+ interface Time {
+ /**
+ * MarshalText implements the [encoding.TextMarshaler] interface.
+ * The time is formatted in RFC 3339 format with sub-second precision.
+ * If the timestamp cannot be represented as valid RFC 3339
+ * (e.g., the year is out of range), then an error is reported.
+ */
+ marshalText(): string|Array
+ }
+ interface Time {
+ /**
+ * UnmarshalText implements the [encoding.TextUnmarshaler] interface.
+ * The time must be in the RFC 3339 format.
+ */
+ unmarshalText(data: string|Array): void
+ }
+ interface Time {
+ /**
+ * IsDST reports whether the time in the configured location is in Daylight Savings Time.
+ */
+ isDST(): boolean
+ }
+ interface Time {
+ /**
+ * Truncate returns the result of rounding t down to a multiple of d (since the zero time).
+ * If d <= 0, Truncate returns t stripped of any monotonic clock reading but otherwise unchanged.
+ *
+ * Truncate operates on the time as an absolute duration since the
+ * zero time; it does not operate on the presentation form of the
+ * time. Thus, Truncate(Hour) may return a time with a non-zero
+ * minute, depending on the time's Location.
+ */
+ truncate(d: Duration): Time
+ }
+ interface Time {
+ /**
+ * Round returns the result of rounding t to the nearest multiple of d (since the zero time).
+ * The rounding behavior for halfway values is to round up.
+ * If d <= 0, Round returns t stripped of any monotonic clock reading but otherwise unchanged.
+ *
+ * Round operates on the time as an absolute duration since the
+ * zero time; it does not operate on the presentation form of the
+ * time. Thus, Round(Hour) may return a time with a non-zero
+ * minute, depending on the time's Location.
+ */
+ round(d: Duration): Time
+ }
+}
+
+/**
+ * Package context defines the Context type, which carries deadlines,
+ * cancellation signals, and other request-scoped values across API boundaries
+ * and between processes.
+ *
+ * Incoming requests to a server should create a [Context], and outgoing
+ * calls to servers should accept a Context. The chain of function
+ * calls between them must propagate the Context, optionally replacing
+ * it with a derived Context created using [WithCancel], [WithDeadline],
+ * [WithTimeout], or [WithValue]. When a Context is canceled, all
+ * Contexts derived from it are also canceled.
+ *
+ * The [WithCancel], [WithDeadline], and [WithTimeout] functions take a
+ * Context (the parent) and return a derived Context (the child) and a
+ * [CancelFunc]. Calling the CancelFunc cancels the child and its
+ * children, removes the parent's reference to the child, and stops
+ * any associated timers. Failing to call the CancelFunc leaks the
+ * child and its children until the parent is canceled or the timer
+ * fires. The go vet tool checks that CancelFuncs are used on all
+ * control-flow paths.
+ *
+ * The [WithCancelCause] function returns a [CancelCauseFunc], which
+ * takes an error and records it as the cancellation cause. Calling
+ * [Cause] on the canceled context or any of its children retrieves
+ * the cause. If no cause is specified, Cause(ctx) returns the same
+ * value as ctx.Err().
+ *
+ * Programs that use Contexts should follow these rules to keep interfaces
+ * consistent across packages and enable static analysis tools to check context
+ * propagation:
+ *
+ * Do not store Contexts inside a struct type; instead, pass a Context
+ * explicitly to each function that needs it. The Context should be the first
+ * parameter, typically named ctx:
+ *
+ * ```
+ * func DoSomething(ctx context.Context, arg Arg) error {
+ * // ... use ctx ...
+ * }
+ * ```
+ *
+ * Do not pass a nil [Context], even if a function permits it. Pass [context.TODO]
+ * if you are unsure about which Context to use.
+ *
+ * Use context Values only for request-scoped data that transits processes and
+ * APIs, not for passing optional parameters to functions.
+ *
+ * The same Context may be passed to functions running in different goroutines;
+ * Contexts are safe for simultaneous use by multiple goroutines.
+ *
+ * See https://blog.golang.org/context for example code for a server that uses
+ * Contexts.
+ */
+namespace context {
+ /**
+ * A Context carries a deadline, a cancellation signal, and other values across
+ * API boundaries.
+ *
+ * Context's methods may be called by multiple goroutines simultaneously.
+ */
+ interface Context {
+ [key:string]: any;
+ /**
+ * Deadline returns the time when work done on behalf of this context
+ * should be canceled. Deadline returns ok==false when no deadline is
+ * set. Successive calls to Deadline return the same results.
+ */
+ deadline(): [time.Time, boolean]
+ /**
+ * Done returns a channel that's closed when work done on behalf of this
+ * context should be canceled. Done may return nil if this context can
+ * never be canceled. Successive calls to Done return the same value.
+ * The close of the Done channel may happen asynchronously,
+ * after the cancel function returns.
+ *
+ * WithCancel arranges for Done to be closed when cancel is called;
+ * WithDeadline arranges for Done to be closed when the deadline
+ * expires; WithTimeout arranges for Done to be closed when the timeout
+ * elapses.
+ *
+ * Done is provided for use in select statements:
+ *
+ * // Stream generates values with DoSomething and sends them to out
+ * // until DoSomething returns an error or ctx.Done is closed.
+ * func Stream(ctx context.Context, out chan<- Value) error {
+ * for {
+ * v, err := DoSomething(ctx)
+ * if err != nil {
+ * return err
+ * }
+ * select {
+ * case <-ctx.Done():
+ * return ctx.Err()
+ * case out <- v:
+ * }
+ * }
+ * }
+ *
+ * See https://blog.golang.org/pipelines for more examples of how to use
+ * a Done channel for cancellation.
+ */
+ done(): undefined
+ /**
+ * If Done is not yet closed, Err returns nil.
+ * If Done is closed, Err returns a non-nil error explaining why:
+ * Canceled if the context was canceled
+ * or DeadlineExceeded if the context's deadline passed.
+ * After Err returns a non-nil error, successive calls to Err return the same error.
+ */
+ err(): void
+ /**
+ * Value returns the value associated with this context for key, or nil
+ * if no value is associated with key. Successive calls to Value with
+ * the same key returns the same result.
+ *
+ * Use context values only for request-scoped data that transits
+ * processes and API boundaries, not for passing optional parameters to
+ * functions.
+ *
+ * A key identifies a specific value in a Context. Functions that wish
+ * to store values in Context typically allocate a key in a global
+ * variable then use that key as the argument to context.WithValue and
+ * Context.Value. A key can be any type that supports equality;
+ * packages should define keys as an unexported type to avoid
+ * collisions.
+ *
+ * Packages that define a Context key should provide type-safe accessors
+ * for the values stored using that key:
+ *
+ * ```
+ * // Package user defines a User type that's stored in Contexts.
+ * package user
+ *
+ * import "context"
+ *
+ * // User is the type of value stored in the Contexts.
+ * type User struct {...}
+ *
+ * // key is an unexported type for keys defined in this package.
+ * // This prevents collisions with keys defined in other packages.
+ * type key int
+ *
+ * // userKey is the key for user.User values in Contexts. It is
+ * // unexported; clients use user.NewContext and user.FromContext
+ * // instead of using this key directly.
+ * var userKey key
+ *
+ * // NewContext returns a new Context that carries value u.
+ * func NewContext(ctx context.Context, u *User) context.Context {
+ * return context.WithValue(ctx, userKey, u)
+ * }
+ *
+ * // FromContext returns the User value stored in ctx, if any.
+ * func FromContext(ctx context.Context) (*User, bool) {
+ * u, ok := ctx.Value(userKey).(*User)
+ * return u, ok
+ * }
+ * ```
+ */
+ value(key: any): any
+ }
+}
+
+/**
+ * Package io provides basic interfaces to I/O primitives.
+ * Its primary job is to wrap existing implementations of such primitives,
+ * such as those in package os, into shared public interfaces that
+ * abstract the functionality, plus some other related primitives.
+ *
+ * Because these interfaces and primitives wrap lower-level operations with
+ * various implementations, unless otherwise informed clients should not
+ * assume they are safe for parallel execution.
+ */
+namespace io {
+ /**
+ * Reader is the interface that wraps the basic Read method.
+ *
+ * Read reads up to len(p) bytes into p. It returns the number of bytes
+ * read (0 <= n <= len(p)) and any error encountered. Even if Read
+ * returns n < len(p), it may use all of p as scratch space during the call.
+ * If some data is available but not len(p) bytes, Read conventionally
+ * returns what is available instead of waiting for more.
+ *
+ * When Read encounters an error or end-of-file condition after
+ * successfully reading n > 0 bytes, it returns the number of
+ * bytes read. It may return the (non-nil) error from the same call
+ * or return the error (and n == 0) from a subsequent call.
+ * An instance of this general case is that a Reader returning
+ * a non-zero number of bytes at the end of the input stream may
+ * return either err == EOF or err == nil. The next Read should
+ * return 0, EOF.
+ *
+ * Callers should always process the n > 0 bytes returned before
+ * considering the error err. Doing so correctly handles I/O errors
+ * that happen after reading some bytes and also both of the
+ * allowed EOF behaviors.
+ *
+ * If len(p) == 0, Read should always return n == 0. It may return a
+ * non-nil error if some error condition is known, such as EOF.
+ *
+ * Implementations of Read are discouraged from returning a
+ * zero byte count with a nil error, except when len(p) == 0.
+ * Callers should treat a return of 0 and nil as indicating that
+ * nothing happened; in particular it does not indicate EOF.
+ *
+ * Implementations must not retain p.
+ */
+ interface Reader {
+ [key:string]: any;
+ read(p: string|Array): number
+ }
+ /**
+ * Writer is the interface that wraps the basic Write method.
+ *
+ * Write writes len(p) bytes from p to the underlying data stream.
+ * It returns the number of bytes written from p (0 <= n <= len(p))
+ * and any error encountered that caused the write to stop early.
+ * Write must return a non-nil error if it returns n < len(p).
+ * Write must not modify the slice data, even temporarily.
+ *
+ * Implementations must not retain p.
+ */
+ interface Writer {
+ [key:string]: any;
+ write(p: string|Array): number
+ }
+ /**
+ * ReadSeekCloser is the interface that groups the basic Read, Seek and Close
+ * methods.
+ */
+ interface ReadSeekCloser {
+ [key:string]: any;
+ }
+}
+
+/**
+ * Package fs defines basic interfaces to a file system.
+ * A file system can be provided by the host operating system
+ * but also by other packages.
+ *
+ * See the [testing/fstest] package for support with testing
+ * implementations of file systems.
+ */
+namespace fs {
+ /**
+ * An FS provides access to a hierarchical file system.
+ *
+ * The FS interface is the minimum implementation required of the file system.
+ * A file system may implement additional interfaces,
+ * such as [ReadFileFS], to provide additional or optimized functionality.
+ *
+ * [testing/fstest.TestFS] may be used to test implementations of an FS for
+ * correctness.
+ */
+ interface FS {
+ [key:string]: any;
+ /**
+ * Open opens the named file.
+ *
+ * When Open returns an error, it should be of type *PathError
+ * with the Op field set to "open", the Path field set to name,
+ * and the Err field describing the problem.
+ *
+ * Open should reject attempts to open names that do not satisfy
+ * ValidPath(name), returning a *PathError with Err set to
+ * ErrInvalid or ErrNotExist.
+ */
+ open(name: string): File
+ }
+ /**
+ * A File provides access to a single file.
+ * The File interface is the minimum implementation required of the file.
+ * Directory files should also implement [ReadDirFile].
+ * A file may implement [io.ReaderAt] or [io.Seeker] as optimizations.
+ */
+ interface File {
+ [key:string]: any;
+ stat(): FileInfo
+ read(_arg0: string|Array): number
+ close(): void
+ }
+ /**
+ * A DirEntry is an entry read from a directory
+ * (using the [ReadDir] function or a [ReadDirFile]'s ReadDir method).
+ */
+ interface DirEntry {
+ [key:string]: any;
+ /**
+ * Name returns the name of the file (or subdirectory) described by the entry.
+ * This name is only the final element of the path (the base name), not the entire path.
+ * For example, Name would return "hello.go" not "home/gopher/hello.go".
+ */
+ name(): string
+ /**
+ * IsDir reports whether the entry describes a directory.
+ */
+ isDir(): boolean
+ /**
+ * Type returns the type bits for the entry.
+ * The type bits are a subset of the usual FileMode bits, those returned by the FileMode.Type method.
+ */
+ type(): FileMode
+ /**
+ * Info returns the FileInfo for the file or subdirectory described by the entry.
+ * The returned FileInfo may be from the time of the original directory read
+ * or from the time of the call to Info. If the file has been removed or renamed
+ * since the directory read, Info may return an error satisfying errors.Is(err, ErrNotExist).
+ * If the entry denotes a symbolic link, Info reports the information about the link itself,
+ * not the link's target.
+ */
+ info(): FileInfo
+ }
+ /**
+ * A FileInfo describes a file and is returned by [Stat].
+ */
+ interface FileInfo {
+ [key:string]: any;
+ name(): string // base name of the file
+ size(): number // length in bytes for regular files; system-dependent for others
+ mode(): FileMode // file mode bits
+ modTime(): time.Time // modification time
+ isDir(): boolean // abbreviation for Mode().IsDir()
+ sys(): any // underlying data source (can return nil)
+ }
+ /**
+ * A FileMode represents a file's mode and permission bits.
+ * The bits have the same definition on all systems, so that
+ * information about files can be moved from one system
+ * to another portably. Not all bits apply to all systems.
+ * The only required bit is [ModeDir] for directories.
+ */
+ interface FileMode extends Number{}
+ interface FileMode {
+ string(): string
+ }
+ interface FileMode {
+ /**
+ * IsDir reports whether m describes a directory.
+ * That is, it tests for the [ModeDir] bit being set in m.
+ */
+ isDir(): boolean
+ }
+ interface FileMode {
+ /**
+ * IsRegular reports whether m describes a regular file.
+ * That is, it tests that no mode type bits are set.
+ */
+ isRegular(): boolean
+ }
+ interface FileMode {
+ /**
+ * Perm returns the Unix permission bits in m (m & [ModePerm]).
+ */
+ perm(): FileMode
+ }
+ interface FileMode {
+ /**
+ * Type returns type bits in m (m & [ModeType]).
+ */
+ type(): FileMode
+ }
+ /**
+ * PathError records an error and the operation and file path that caused it.
+ */
+ interface PathError {
+ op: string
+ path: string
+ err: Error
+ }
+ interface PathError {
+ error(): string
+ }
+ interface PathError {
+ unwrap(): void
+ }
+ interface PathError {
+ /**
+ * Timeout reports whether this error represents a timeout.
+ */
+ timeout(): boolean
+ }
+ /**
+ * WalkDirFunc is the type of the function called by [WalkDir] to visit
+ * each file or directory.
+ *
+ * The path argument contains the argument to [WalkDir] as a prefix.
+ * That is, if WalkDir is called with root argument "dir" and finds a file
+ * named "a" in that directory, the walk function will be called with
+ * argument "dir/a".
+ *
+ * The d argument is the [DirEntry] for the named path.
+ *
+ * The error result returned by the function controls how [WalkDir]
+ * continues. If the function returns the special value [SkipDir], WalkDir
+ * skips the current directory (path if d.IsDir() is true, otherwise
+ * path's parent directory). If the function returns the special value
+ * [SkipAll], WalkDir skips all remaining files and directories. Otherwise,
+ * if the function returns a non-nil error, WalkDir stops entirely and
+ * returns that error.
+ *
+ * The err argument reports an error related to path, signaling that
+ * [WalkDir] will not walk into that directory. The function can decide how
+ * to handle that error; as described earlier, returning the error will
+ * cause WalkDir to stop walking the entire tree.
+ *
+ * [WalkDir] calls the function with a non-nil err argument in two cases.
+ *
+ * First, if the initial [Stat] on the root directory fails, WalkDir
+ * calls the function with path set to root, d set to nil, and err set to
+ * the error from [fs.Stat].
+ *
+ * Second, if a directory's ReadDir method (see [ReadDirFile]) fails, WalkDir calls the
+ * function with path set to the directory's path, d set to an
+ * [DirEntry] describing the directory, and err set to the error from
+ * ReadDir. In this second case, the function is called twice with the
+ * path of the directory: the first call is before the directory read is
+ * attempted and has err set to nil, giving the function a chance to
+ * return [SkipDir] or [SkipAll] and avoid the ReadDir entirely. The second call
+ * is after a failed ReadDir and reports the error from ReadDir.
+ * (If ReadDir succeeds, there is no second call.)
+ *
+ * The differences between WalkDirFunc compared to [path/filepath.WalkFunc] are:
+ *
+ * ```
+ * - The second argument has type [DirEntry] instead of [FileInfo].
+ * - The function is called before reading a directory, to allow [SkipDir]
+ * or [SkipAll] to bypass the directory read entirely or skip all remaining
+ * files and directories respectively.
+ * - If a directory read fails, the function is called a second time
+ * for that directory to report the error.
+ * ```
+ */
+ interface WalkDirFunc {(path: string, d: DirEntry, err: Error): void }
+}
+
+/**
+ * Package bytes implements functions for the manipulation of byte slices.
+ * It is analogous to the facilities of the [strings] package.
+ */
+namespace bytes {
+ /**
+ * A Reader implements the [io.Reader], [io.ReaderAt], [io.WriterTo], [io.Seeker],
+ * [io.ByteScanner], and [io.RuneScanner] interfaces by reading from
+ * a byte slice.
+ * Unlike a [Buffer], a Reader is read-only and supports seeking.
+ * The zero value for Reader operates like a Reader of an empty slice.
+ */
+ interface Reader {
+ }
+ interface Reader {
+ /**
+ * Len returns the number of bytes of the unread portion of the
+ * slice.
+ */
+ len(): number
+ }
+ interface Reader {
+ /**
+ * Size returns the original length of the underlying byte slice.
+ * Size is the number of bytes available for reading via [Reader.ReadAt].
+ * The result is unaffected by any method calls except [Reader.Reset].
+ */
+ size(): number
+ }
+ interface Reader {
+ /**
+ * Read implements the [io.Reader] interface.
+ */
+ read(b: string|Array): number
+ }
+ interface Reader {
+ /**
+ * ReadAt implements the [io.ReaderAt] interface.
+ */
+ readAt(b: string|Array, off: number): number
+ }
+ interface Reader {
+ /**
+ * ReadByte implements the [io.ByteReader] interface.
+ */
+ readByte(): number
+ }
+ interface Reader {
+ /**
+ * UnreadByte complements [Reader.ReadByte] in implementing the [io.ByteScanner] interface.
+ */
+ unreadByte(): void
+ }
+ interface Reader {
+ /**
+ * ReadRune implements the [io.RuneReader] interface.
+ */
+ readRune(): [number, number]
+ }
+ interface Reader {
+ /**
+ * UnreadRune complements [Reader.ReadRune] in implementing the [io.RuneScanner] interface.
+ */
+ unreadRune(): void
+ }
+ interface Reader {
+ /**
+ * Seek implements the [io.Seeker] interface.
+ */
+ seek(offset: number, whence: number): number
+ }
+ interface Reader {
+ /**
+ * WriteTo implements the [io.WriterTo] interface.
+ */
+ writeTo(w: io.Writer): number
+ }
+ interface Reader {
+ /**
+ * Reset resets the [Reader] to be reading from b.
+ */
+ reset(b: string|Array): void
+ }
+}
+
+/**
+ * Package types implements some commonly used db serializable types
+ * like datetime, json, etc.
+ */
+namespace types {
+ /**
+ * JsonArray defines a slice that is safe for json and db read/write.
+ */
+ interface JsonArray extends Array{}
+ interface JsonArray {
+ /**
+ * MarshalJSON implements the [json.Marshaler] interface.
+ */
+ marshalJSON(): string|Array
+ }
+ interface JsonArray {
+ /**
+ * Value implements the [driver.Valuer] interface.
+ */
+ value(): any
+ }
+ interface JsonArray {
+ /**
+ * Scan implements [sql.Scanner] interface to scan the provided value
+ * into the current JsonArray[T] instance.
+ */
+ scan(value: any): void
+ }
+ /**
+ * JsonMap defines a map that is safe for json and db read/write.
+ */
+ interface JsonMap extends _TygojaDict{}
+ interface JsonMap {
+ /**
+ * MarshalJSON implements the [json.Marshaler] interface.
+ */
+ marshalJSON(): string|Array
+ }
+ interface JsonMap {
+ /**
+ * Get retrieves a single value from the current JsonMap.
+ *
+ * This helper was added primarily to assist the goja integration since custom map types
+ * don't have direct access to the map keys (https://pkg.go.dev/github.com/dop251/goja#hdr-Maps_with_methods).
+ */
+ get(key: string): any
+ }
+ interface JsonMap {
+ /**
+ * Set sets a single value in the current JsonMap.
+ *
+ * This helper was added primarily to assist the goja integration since custom map types
+ * don't have direct access to the map keys (https://pkg.go.dev/github.com/dop251/goja#hdr-Maps_with_methods).
+ */
+ set(key: string, value: any): void
+ }
+ interface JsonMap {
+ /**
+ * Value implements the [driver.Valuer] interface.
+ */
+ value(): any
+ }
+ interface JsonMap {
+ /**
+ * Scan implements [sql.Scanner] interface to scan the provided value
+ * into the current `JsonMap` instance.
+ */
+ scan(value: any): void
+ }
+}
+
+/**
+ * Package jwt is a Go implementation of JSON Web Tokens: http://self-issued.info/docs/draft-jones-json-web-token.html
+ *
+ * See README.md for more info.
+ */
+namespace jwt {
+ /**
+ * MapClaims is a claims type that uses the map[string]interface{} for JSON decoding.
+ * This is the default claims type if you don't supply one
+ */
+ interface MapClaims extends _TygojaDict{}
+ interface MapClaims {
+ /**
+ * VerifyAudience Compares the aud claim against cmp.
+ * If required is false, this method will return true if the value matches or is unset
+ */
+ verifyAudience(cmp: string, req: boolean): boolean
+ }
+ interface MapClaims {
+ /**
+ * VerifyExpiresAt compares the exp claim against cmp (cmp <= exp).
+ * If req is false, it will return true, if exp is unset.
+ */
+ verifyExpiresAt(cmp: number, req: boolean): boolean
+ }
+ interface MapClaims {
+ /**
+ * VerifyIssuedAt compares the exp claim against cmp (cmp >= iat).
+ * If req is false, it will return true, if iat is unset.
+ */
+ verifyIssuedAt(cmp: number, req: boolean): boolean
+ }
+ interface MapClaims {
+ /**
+ * VerifyNotBefore compares the nbf claim against cmp (cmp >= nbf).
+ * If req is false, it will return true, if nbf is unset.
+ */
+ verifyNotBefore(cmp: number, req: boolean): boolean
+ }
+ interface MapClaims {
+ /**
+ * VerifyIssuer compares the iss claim against cmp.
+ * If required is false, this method will return true if the value matches or is unset
+ */
+ verifyIssuer(cmp: string, req: boolean): boolean
+ }
+ interface MapClaims {
+ /**
+ * Valid validates time based claims "exp, iat, nbf".
+ * There is no accounting for clock skew.
+ * As well, if any of the above claims are not in the token, it will still
+ * be considered a valid claim.
+ */
+ valid(): void
+ }
+}
+
+/**
+ * Package multipart implements MIME multipart parsing, as defined in RFC
+ * 2046.
+ *
+ * The implementation is sufficient for HTTP (RFC 2388) and the multipart
+ * bodies generated by popular browsers.
+ *
+ * # Limits
+ *
+ * To protect against malicious inputs, this package sets limits on the size
+ * of the MIME data it processes.
+ *
+ * [Reader.NextPart] and [Reader.NextRawPart] limit the number of headers in a
+ * part to 10000 and [Reader.ReadForm] limits the total number of headers in all
+ * FileHeaders to 10000.
+ * These limits may be adjusted with the GODEBUG=multipartmaxheaders=
+ * setting.
+ *
+ * Reader.ReadForm further limits the number of parts in a form to 1000.
+ * This limit may be adjusted with the GODEBUG=multipartmaxparts=
+ * setting.
+ */
+namespace multipart {
+ /**
+ * A FileHeader describes a file part of a multipart request.
+ */
+ interface FileHeader {
+ filename: string
+ header: textproto.MIMEHeader
+ size: number
+ }
+ interface FileHeader {
+ /**
+ * Open opens and returns the [FileHeader]'s associated File.
+ */
+ open(): File
+ }
+}
+
+/**
+ * Package http provides HTTP client and server implementations.
+ *
+ * [Get], [Head], [Post], and [PostForm] make HTTP (or HTTPS) requests:
+ *
+ * ```
+ * resp, err := http.Get("http://example.com/")
+ * ...
+ * resp, err := http.Post("http://example.com/upload", "image/jpeg", &buf)
+ * ...
+ * resp, err := http.PostForm("http://example.com/form",
+ * url.Values{"key": {"Value"}, "id": {"123"}})
+ * ```
+ *
+ * The caller must close the response body when finished with it:
+ *
+ * ```
+ * resp, err := http.Get("http://example.com/")
+ * if err != nil {
+ * // handle error
+ * }
+ * defer resp.Body.Close()
+ * body, err := io.ReadAll(resp.Body)
+ * // ...
+ * ```
+ *
+ * # Clients and Transports
+ *
+ * For control over HTTP client headers, redirect policy, and other
+ * settings, create a [Client]:
+ *
+ * ```
+ * client := &http.Client{
+ * CheckRedirect: redirectPolicyFunc,
+ * }
+ *
+ * resp, err := client.Get("http://example.com")
+ * // ...
+ *
+ * req, err := http.NewRequest("GET", "http://example.com", nil)
+ * // ...
+ * req.Header.Add("If-None-Match", `W/"wyzzy"`)
+ * resp, err := client.Do(req)
+ * // ...
+ * ```
+ *
+ * For control over proxies, TLS configuration, keep-alives,
+ * compression, and other settings, create a [Transport]:
+ *
+ * ```
+ * tr := &http.Transport{
+ * MaxIdleConns: 10,
+ * IdleConnTimeout: 30 * time.Second,
+ * DisableCompression: true,
+ * }
+ * client := &http.Client{Transport: tr}
+ * resp, err := client.Get("https://example.com")
+ * ```
+ *
+ * Clients and Transports are safe for concurrent use by multiple
+ * goroutines and for efficiency should only be created once and re-used.
+ *
+ * # Servers
+ *
+ * ListenAndServe starts an HTTP server with a given address and handler.
+ * The handler is usually nil, which means to use [DefaultServeMux].
+ * [Handle] and [HandleFunc] add handlers to [DefaultServeMux]:
+ *
+ * ```
+ * http.Handle("/foo", fooHandler)
+ *
+ * http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) {
+ * fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))
+ * })
+ *
+ * log.Fatal(http.ListenAndServe(":8080", nil))
+ * ```
+ *
+ * More control over the server's behavior is available by creating a
+ * custom Server:
+ *
+ * ```
+ * s := &http.Server{
+ * Addr: ":8080",
+ * Handler: myHandler,
+ * ReadTimeout: 10 * time.Second,
+ * WriteTimeout: 10 * time.Second,
+ * MaxHeaderBytes: 1 << 20,
+ * }
+ * log.Fatal(s.ListenAndServe())
+ * ```
+ *
+ * # HTTP/2
+ *
+ * Starting with Go 1.6, the http package has transparent support for the
+ * HTTP/2 protocol when using HTTPS. Programs that must disable HTTP/2
+ * can do so by setting [Transport.TLSNextProto] (for clients) or
+ * [Server.TLSNextProto] (for servers) to a non-nil, empty
+ * map. Alternatively, the following GODEBUG settings are
+ * currently supported:
+ *
+ * ```
+ * GODEBUG=http2client=0 # disable HTTP/2 client support
+ * GODEBUG=http2server=0 # disable HTTP/2 server support
+ * GODEBUG=http2debug=1 # enable verbose HTTP/2 debug logs
+ * GODEBUG=http2debug=2 # ... even more verbose, with frame dumps
+ * ```
+ *
+ * Please report any issues before disabling HTTP/2 support: https://golang.org/s/http2bug
+ *
+ * The http package's [Transport] and [Server] both automatically enable
+ * HTTP/2 support for simple configurations. To enable HTTP/2 for more
+ * complex configurations, to use lower-level HTTP/2 features, or to use
+ * a newer version of Go's http2 package, import "golang.org/x/net/http2"
+ * directly and use its ConfigureTransport and/or ConfigureServer
+ * functions. Manually configuring HTTP/2 via the golang.org/x/net/http2
+ * package takes precedence over the net/http package's built-in HTTP/2
+ * support.
+ */
+namespace http {
+ // @ts-ignore
+ import mathrand = rand
+ // @ts-ignore
+ import urlpkg = url
+ /**
+ * A Request represents an HTTP request received by a server
+ * or to be sent by a client.
+ *
+ * The field semantics differ slightly between client and server
+ * usage. In addition to the notes on the fields below, see the
+ * documentation for [Request.Write] and [RoundTripper].
+ */
+ interface Request {
+ /**
+ * Method specifies the HTTP method (GET, POST, PUT, etc.).
+ * For client requests, an empty string means GET.
+ */
+ method: string
+ /**
+ * URL specifies either the URI being requested (for server
+ * requests) or the URL to access (for client requests).
+ *
+ * For server requests, the URL is parsed from the URI
+ * supplied on the Request-Line as stored in RequestURI. For
+ * most requests, fields other than Path and RawQuery will be
+ * empty. (See RFC 7230, Section 5.3)
+ *
+ * For client requests, the URL's Host specifies the server to
+ * connect to, while the Request's Host field optionally
+ * specifies the Host header value to send in the HTTP
+ * request.
+ */
+ url?: url.URL
+ /**
+ * The protocol version for incoming server requests.
+ *
+ * For client requests, these fields are ignored. The HTTP
+ * client code always uses either HTTP/1.1 or HTTP/2.
+ * See the docs on Transport for details.
+ */
+ proto: string // "HTTP/1.0"
+ protoMajor: number // 1
+ protoMinor: number // 0
+ /**
+ * Header contains the request header fields either received
+ * by the server or to be sent by the client.
+ *
+ * If a server received a request with header lines,
+ *
+ * ```
+ * Host: example.com
+ * accept-encoding: gzip, deflate
+ * Accept-Language: en-us
+ * fOO: Bar
+ * foo: two
+ * ```
+ *
+ * then
+ *
+ * ```
+ * Header = map[string][]string{
+ * "Accept-Encoding": {"gzip, deflate"},
+ * "Accept-Language": {"en-us"},
+ * "Foo": {"Bar", "two"},
+ * }
+ * ```
+ *
+ * For incoming requests, the Host header is promoted to the
+ * Request.Host field and removed from the Header map.
+ *
+ * HTTP defines that header names are case-insensitive. The
+ * request parser implements this by using CanonicalHeaderKey,
+ * making the first character and any characters following a
+ * hyphen uppercase and the rest lowercase.
+ *
+ * For client requests, certain headers such as Content-Length
+ * and Connection are automatically written when needed and
+ * values in Header may be ignored. See the documentation
+ * for the Request.Write method.
+ */
+ header: Header
+ /**
+ * Body is the request's body.
+ *
+ * For client requests, a nil body means the request has no
+ * body, such as a GET request. The HTTP Client's Transport
+ * is responsible for calling the Close method.
+ *
+ * For server requests, the Request Body is always non-nil
+ * but will return EOF immediately when no body is present.
+ * The Server will close the request body. The ServeHTTP
+ * Handler does not need to.
+ *
+ * Body must allow Read to be called concurrently with Close.
+ * In particular, calling Close should unblock a Read waiting
+ * for input.
+ */
+ body: io.ReadCloser
+ /**
+ * GetBody defines an optional func to return a new copy of
+ * Body. It is used for client requests when a redirect requires
+ * reading the body more than once. Use of GetBody still
+ * requires setting Body.
+ *
+ * For server requests, it is unused.
+ */
+ getBody: () => io.ReadCloser
+ /**
+ * ContentLength records the length of the associated content.
+ * The value -1 indicates that the length is unknown.
+ * Values >= 0 indicate that the given number of bytes may
+ * be read from Body.
+ *
+ * For client requests, a value of 0 with a non-nil Body is
+ * also treated as unknown.
+ */
+ contentLength: number
+ /**
+ * TransferEncoding lists the transfer encodings from outermost to
+ * innermost. An empty list denotes the "identity" encoding.
+ * TransferEncoding can usually be ignored; chunked encoding is
+ * automatically added and removed as necessary when sending and
+ * receiving requests.
+ */
+ transferEncoding: Array
+ /**
+ * Close indicates whether to close the connection after
+ * replying to this request (for servers) or after sending this
+ * request and reading its response (for clients).
+ *
+ * For server requests, the HTTP server handles this automatically
+ * and this field is not needed by Handlers.
+ *
+ * For client requests, setting this field prevents re-use of
+ * TCP connections between requests to the same hosts, as if
+ * Transport.DisableKeepAlives were set.
+ */
+ close: boolean
+ /**
+ * For server requests, Host specifies the host on which the
+ * URL is sought. For HTTP/1 (per RFC 7230, section 5.4), this
+ * is either the value of the "Host" header or the host name
+ * given in the URL itself. For HTTP/2, it is the value of the
+ * ":authority" pseudo-header field.
+ * It may be of the form "host:port". For international domain
+ * names, Host may be in Punycode or Unicode form. Use
+ * golang.org/x/net/idna to convert it to either format if
+ * needed.
+ * To prevent DNS rebinding attacks, server Handlers should
+ * validate that the Host header has a value for which the
+ * Handler considers itself authoritative. The included
+ * ServeMux supports patterns registered to particular host
+ * names and thus protects its registered Handlers.
+ *
+ * For client requests, Host optionally overrides the Host
+ * header to send. If empty, the Request.Write method uses
+ * the value of URL.Host. Host may contain an international
+ * domain name.
+ */
+ host: string
+ /**
+ * Form contains the parsed form data, including both the URL
+ * field's query parameters and the PATCH, POST, or PUT form data.
+ * This field is only available after ParseForm is called.
+ * The HTTP client ignores Form and uses Body instead.
+ */
+ form: url.Values
+ /**
+ * PostForm contains the parsed form data from PATCH, POST
+ * or PUT body parameters.
+ *
+ * This field is only available after ParseForm is called.
+ * The HTTP client ignores PostForm and uses Body instead.
+ */
+ postForm: url.Values
+ /**
+ * MultipartForm is the parsed multipart form, including file uploads.
+ * This field is only available after ParseMultipartForm is called.
+ * The HTTP client ignores MultipartForm and uses Body instead.
+ */
+ multipartForm?: multipart.Form
+ /**
+ * Trailer specifies additional headers that are sent after the request
+ * body.
+ *
+ * For server requests, the Trailer map initially contains only the
+ * trailer keys, with nil values. (The client declares which trailers it
+ * will later send.) While the handler is reading from Body, it must
+ * not reference Trailer. After reading from Body returns EOF, Trailer
+ * can be read again and will contain non-nil values, if they were sent
+ * by the client.
+ *
+ * For client requests, Trailer must be initialized to a map containing
+ * the trailer keys to later send. The values may be nil or their final
+ * values. The ContentLength must be 0 or -1, to send a chunked request.
+ * After the HTTP request is sent the map values can be updated while
+ * the request body is read. Once the body returns EOF, the caller must
+ * not mutate Trailer.
+ *
+ * Few HTTP clients, servers, or proxies support HTTP trailers.
+ */
+ trailer: Header
+ /**
+ * RemoteAddr allows HTTP servers and other software to record
+ * the network address that sent the request, usually for
+ * logging. This field is not filled in by ReadRequest and
+ * has no defined format. The HTTP server in this package
+ * sets RemoteAddr to an "IP:port" address before invoking a
+ * handler.
+ * This field is ignored by the HTTP client.
+ */
+ remoteAddr: string
+ /**
+ * RequestURI is the unmodified request-target of the
+ * Request-Line (RFC 7230, Section 3.1.1) as sent by the client
+ * to a server. Usually the URL field should be used instead.
+ * It is an error to set this field in an HTTP client request.
+ */
+ requestURI: string
+ /**
+ * TLS allows HTTP servers and other software to record
+ * information about the TLS connection on which the request
+ * was received. This field is not filled in by ReadRequest.
+ * The HTTP server in this package sets the field for
+ * TLS-enabled connections before invoking a handler;
+ * otherwise it leaves the field nil.
+ * This field is ignored by the HTTP client.
+ */
+ tls?: any
+ /**
+ * Cancel is an optional channel whose closure indicates that the client
+ * request should be regarded as canceled. Not all implementations of
+ * RoundTripper may support Cancel.
+ *
+ * For server requests, this field is not applicable.
+ *
+ * Deprecated: Set the Request's context with NewRequestWithContext
+ * instead. If a Request's Cancel field and context are both
+ * set, it is undefined whether Cancel is respected.
+ */
+ cancel: undefined
+ /**
+ * Response is the redirect response which caused this request
+ * to be created. This field is only populated during client
+ * redirects.
+ */
+ response?: Response
+ /**
+ * Pattern is the [ServeMux] pattern that matched the request.
+ * It is empty if the request was not matched against a pattern.
+ */
+ pattern: string
+ }
+ interface Request {
+ /**
+ * Context returns the request's context. To change the context, use
+ * [Request.Clone] or [Request.WithContext].
+ *
+ * The returned context is always non-nil; it defaults to the
+ * background context.
+ *
+ * For outgoing client requests, the context controls cancellation.
+ *
+ * For incoming server requests, the context is canceled when the
+ * client's connection closes, the request is canceled (with HTTP/2),
+ * or when the ServeHTTP method returns.
+ */
+ context(): context.Context
+ }
+ interface Request {
+ /**
+ * WithContext returns a shallow copy of r with its context changed
+ * to ctx. The provided ctx must be non-nil.
+ *
+ * For outgoing client request, the context controls the entire
+ * lifetime of a request and its response: obtaining a connection,
+ * sending the request, and reading the response headers and body.
+ *
+ * To create a new request with a context, use [NewRequestWithContext].
+ * To make a deep copy of a request with a new context, use [Request.Clone].
+ */
+ withContext(ctx: context.Context): (Request)
+ }
+ interface Request {
+ /**
+ * Clone returns a deep copy of r with its context changed to ctx.
+ * The provided ctx must be non-nil.
+ *
+ * Clone only makes a shallow copy of the Body field.
+ *
+ * For an outgoing client request, the context controls the entire
+ * lifetime of a request and its response: obtaining a connection,
+ * sending the request, and reading the response headers and body.
+ */
+ clone(ctx: context.Context): (Request)
+ }
+ interface Request {
+ /**
+ * ProtoAtLeast reports whether the HTTP protocol used
+ * in the request is at least major.minor.
+ */
+ protoAtLeast(major: number, minor: number): boolean
+ }
+ interface Request {
+ /**
+ * UserAgent returns the client's User-Agent, if sent in the request.
+ */
+ userAgent(): string
+ }
+ interface Request {
+ /**
+ * Cookies parses and returns the HTTP cookies sent with the request.
+ */
+ cookies(): Array<(Cookie | undefined)>
+ }
+ interface Request {
+ /**
+ * CookiesNamed parses and returns the named HTTP cookies sent with the request
+ * or an empty slice if none matched.
+ */
+ cookiesNamed(name: string): Array<(Cookie | undefined)>
+ }
+ interface Request {
+ /**
+ * Cookie returns the named cookie provided in the request or
+ * [ErrNoCookie] if not found.
+ * If multiple cookies match the given name, only one cookie will
+ * be returned.
+ */
+ cookie(name: string): (Cookie)
+ }
+ interface Request {
+ /**
+ * AddCookie adds a cookie to the request. Per RFC 6265 section 5.4,
+ * AddCookie does not attach more than one [Cookie] header field. That
+ * means all cookies, if any, are written into the same line,
+ * separated by semicolon.
+ * AddCookie only sanitizes c's name and value, and does not sanitize
+ * a Cookie header already present in the request.
+ */
+ addCookie(c: Cookie): void
+ }
+ interface Request {
+ /**
+ * Referer returns the referring URL, if sent in the request.
+ *
+ * Referer is misspelled as in the request itself, a mistake from the
+ * earliest days of HTTP. This value can also be fetched from the
+ * [Header] map as Header["Referer"]; the benefit of making it available
+ * as a method is that the compiler can diagnose programs that use the
+ * alternate (correct English) spelling req.Referrer() but cannot
+ * diagnose programs that use Header["Referrer"].
+ */
+ referer(): string
+ }
+ interface Request {
+ /**
+ * MultipartReader returns a MIME multipart reader if this is a
+ * multipart/form-data or a multipart/mixed POST request, else returns nil and an error.
+ * Use this function instead of [Request.ParseMultipartForm] to
+ * process the request body as a stream.
+ */
+ multipartReader(): (multipart.Reader)
+ }
+ interface Request {
+ /**
+ * Write writes an HTTP/1.1 request, which is the header and body, in wire format.
+ * This method consults the following fields of the request:
+ *
+ * ```
+ * Host
+ * URL
+ * Method (defaults to "GET")
+ * Header
+ * ContentLength
+ * TransferEncoding
+ * Body
+ * ```
+ *
+ * If Body is present, Content-Length is <= 0 and [Request.TransferEncoding]
+ * hasn't been set to "identity", Write adds "Transfer-Encoding:
+ * chunked" to the header. Body is closed after it is sent.
+ */
+ write(w: io.Writer): void
+ }
+ interface Request {
+ /**
+ * WriteProxy is like [Request.Write] but writes the request in the form
+ * expected by an HTTP proxy. In particular, [Request.WriteProxy] writes the
+ * initial Request-URI line of the request with an absolute URI, per
+ * section 5.3 of RFC 7230, including the scheme and host.
+ * In either case, WriteProxy also writes a Host header, using
+ * either r.Host or r.URL.Host.
+ */
+ writeProxy(w: io.Writer): void
+ }
+ interface Request {
+ /**
+ * BasicAuth returns the username and password provided in the request's
+ * Authorization header, if the request uses HTTP Basic Authentication.
+ * See RFC 2617, Section 2.
+ */
+ basicAuth(): [string, string, boolean]
+ }
+ interface Request {
+ /**
+ * SetBasicAuth sets the request's Authorization header to use HTTP
+ * Basic Authentication with the provided username and password.
+ *
+ * With HTTP Basic Authentication the provided username and password
+ * are not encrypted. It should generally only be used in an HTTPS
+ * request.
+ *
+ * The username may not contain a colon. Some protocols may impose
+ * additional requirements on pre-escaping the username and
+ * password. For instance, when used with OAuth2, both arguments must
+ * be URL encoded first with [url.QueryEscape].
+ */
+ setBasicAuth(username: string, password: string): void
+ }
+ interface Request {
+ /**
+ * ParseForm populates r.Form and r.PostForm.
+ *
+ * For all requests, ParseForm parses the raw query from the URL and updates
+ * r.Form.
+ *
+ * For POST, PUT, and PATCH requests, it also reads the request body, parses it
+ * as a form and puts the results into both r.PostForm and r.Form. Request body
+ * parameters take precedence over URL query string values in r.Form.
+ *
+ * If the request Body's size has not already been limited by [MaxBytesReader],
+ * the size is capped at 10MB.
+ *
+ * For other HTTP methods, or when the Content-Type is not
+ * application/x-www-form-urlencoded, the request Body is not read, and
+ * r.PostForm is initialized to a non-nil, empty value.
+ *
+ * [Request.ParseMultipartForm] calls ParseForm automatically.
+ * ParseForm is idempotent.
+ */
+ parseForm(): void
+ }
+ interface Request {
+ /**
+ * ParseMultipartForm parses a request body as multipart/form-data.
+ * The whole request body is parsed and up to a total of maxMemory bytes of
+ * its file parts are stored in memory, with the remainder stored on
+ * disk in temporary files.
+ * ParseMultipartForm calls [Request.ParseForm] if necessary.
+ * If ParseForm returns an error, ParseMultipartForm returns it but also
+ * continues parsing the request body.
+ * After one call to ParseMultipartForm, subsequent calls have no effect.
+ */
+ parseMultipartForm(maxMemory: number): void
+ }
+ interface Request {
+ /**
+ * FormValue returns the first value for the named component of the query.
+ * The precedence order:
+ * 1. application/x-www-form-urlencoded form body (POST, PUT, PATCH only)
+ * 2. query parameters (always)
+ * 3. multipart/form-data form body (always)
+ *
+ * FormValue calls [Request.ParseMultipartForm] and [Request.ParseForm]
+ * if necessary and ignores any errors returned by these functions.
+ * If key is not present, FormValue returns the empty string.
+ * To access multiple values of the same key, call ParseForm and
+ * then inspect [Request.Form] directly.
+ */
+ formValue(key: string): string
+ }
+ interface Request {
+ /**
+ * PostFormValue returns the first value for the named component of the POST,
+ * PUT, or PATCH request body. URL query parameters are ignored.
+ * PostFormValue calls [Request.ParseMultipartForm] and [Request.ParseForm] if necessary and ignores
+ * any errors returned by these functions.
+ * If key is not present, PostFormValue returns the empty string.
+ */
+ postFormValue(key: string): string
+ }
+ interface Request {
+ /**
+ * FormFile returns the first file for the provided form key.
+ * FormFile calls [Request.ParseMultipartForm] and [Request.ParseForm] if necessary.
+ */
+ formFile(key: string): [multipart.File, (multipart.FileHeader)]
+ }
+ interface Request {
+ /**
+ * PathValue returns the value for the named path wildcard in the [ServeMux] pattern
+ * that matched the request.
+ * It returns the empty string if the request was not matched against a pattern
+ * or there is no such wildcard in the pattern.
+ */
+ pathValue(name: string): string
+ }
+ interface Request {
+ /**
+ * SetPathValue sets name to value, so that subsequent calls to r.PathValue(name)
+ * return value.
+ */
+ setPathValue(name: string, value: string): void
+ }
+ /**
+ * A ResponseWriter interface is used by an HTTP handler to
+ * construct an HTTP response.
+ *
+ * A ResponseWriter may not be used after [Handler.ServeHTTP] has returned.
+ */
+ interface ResponseWriter {
+ [key:string]: any;
+ /**
+ * Header returns the header map that will be sent by
+ * [ResponseWriter.WriteHeader]. The [Header] map also is the mechanism with which
+ * [Handler] implementations can set HTTP trailers.
+ *
+ * Changing the header map after a call to [ResponseWriter.WriteHeader] (or
+ * [ResponseWriter.Write]) has no effect unless the HTTP status code was of the
+ * 1xx class or the modified headers are trailers.
+ *
+ * There are two ways to set Trailers. The preferred way is to
+ * predeclare in the headers which trailers you will later
+ * send by setting the "Trailer" header to the names of the
+ * trailer keys which will come later. In this case, those
+ * keys of the Header map are treated as if they were
+ * trailers. See the example. The second way, for trailer
+ * keys not known to the [Handler] until after the first [ResponseWriter.Write],
+ * is to prefix the [Header] map keys with the [TrailerPrefix]
+ * constant value.
+ *
+ * To suppress automatic response headers (such as "Date"), set
+ * their value to nil.
+ */
+ header(): Header
+ /**
+ * Write writes the data to the connection as part of an HTTP reply.
+ *
+ * If [ResponseWriter.WriteHeader] has not yet been called, Write calls
+ * WriteHeader(http.StatusOK) before writing the data. If the Header
+ * does not contain a Content-Type line, Write adds a Content-Type set
+ * to the result of passing the initial 512 bytes of written data to
+ * [DetectContentType]. Additionally, if the total size of all written
+ * data is under a few KB and there are no Flush calls, the
+ * Content-Length header is added automatically.
+ *
+ * Depending on the HTTP protocol version and the client, calling
+ * Write or WriteHeader may prevent future reads on the
+ * Request.Body. For HTTP/1.x requests, handlers should read any
+ * needed request body data before writing the response. Once the
+ * headers have been flushed (due to either an explicit Flusher.Flush
+ * call or writing enough data to trigger a flush), the request body
+ * may be unavailable. For HTTP/2 requests, the Go HTTP server permits
+ * handlers to continue to read the request body while concurrently
+ * writing the response. However, such behavior may not be supported
+ * by all HTTP/2 clients. Handlers should read before writing if
+ * possible to maximize compatibility.
+ */
+ write(_arg0: string|Array): number
+ /**
+ * WriteHeader sends an HTTP response header with the provided
+ * status code.
+ *
+ * If WriteHeader is not called explicitly, the first call to Write
+ * will trigger an implicit WriteHeader(http.StatusOK).
+ * Thus explicit calls to WriteHeader are mainly used to
+ * send error codes or 1xx informational responses.
+ *
+ * The provided code must be a valid HTTP 1xx-5xx status code.
+ * Any number of 1xx headers may be written, followed by at most
+ * one 2xx-5xx header. 1xx headers are sent immediately, but 2xx-5xx
+ * headers may be buffered. Use the Flusher interface to send
+ * buffered data. The header map is cleared when 2xx-5xx headers are
+ * sent, but not with 1xx headers.
+ *
+ * The server will automatically send a 100 (Continue) header
+ * on the first read from the request body if the request has
+ * an "Expect: 100-continue" header.
+ */
+ writeHeader(statusCode: number): void
+ }
+ /**
+ * A Server defines parameters for running an HTTP server.
+ * The zero value for Server is a valid configuration.
+ */
+ interface Server {
+ /**
+ * Addr optionally specifies the TCP address for the server to listen on,
+ * in the form "host:port". If empty, ":http" (port 80) is used.
+ * The service names are defined in RFC 6335 and assigned by IANA.
+ * See net.Dial for details of the address format.
+ */
+ addr: string
+ handler: Handler // handler to invoke, http.DefaultServeMux if nil
+ /**
+ * DisableGeneralOptionsHandler, if true, passes "OPTIONS *" requests to the Handler,
+ * otherwise responds with 200 OK and Content-Length: 0.
+ */
+ disableGeneralOptionsHandler: boolean
+ /**
+ * TLSConfig optionally provides a TLS configuration for use
+ * by ServeTLS and ListenAndServeTLS. Note that this value is
+ * cloned by ServeTLS and ListenAndServeTLS, so it's not
+ * possible to modify the configuration with methods like
+ * tls.Config.SetSessionTicketKeys. To use
+ * SetSessionTicketKeys, use Server.Serve with a TLS Listener
+ * instead.
+ */
+ tlsConfig?: any
+ /**
+ * ReadTimeout is the maximum duration for reading the entire
+ * request, including the body. A zero or negative value means
+ * there will be no timeout.
+ *
+ * Because ReadTimeout does not let Handlers make per-request
+ * decisions on each request body's acceptable deadline or
+ * upload rate, most users will prefer to use
+ * ReadHeaderTimeout. It is valid to use them both.
+ */
+ readTimeout: time.Duration
+ /**
+ * ReadHeaderTimeout is the amount of time allowed to read
+ * request headers. The connection's read deadline is reset
+ * after reading the headers and the Handler can decide what
+ * is considered too slow for the body. If zero, the value of
+ * ReadTimeout is used. If negative, or if zero and ReadTimeout
+ * is zero or negative, there is no timeout.
+ */
+ readHeaderTimeout: time.Duration
+ /**
+ * WriteTimeout is the maximum duration before timing out
+ * writes of the response. It is reset whenever a new
+ * request's header is read. Like ReadTimeout, it does not
+ * let Handlers make decisions on a per-request basis.
+ * A zero or negative value means there will be no timeout.
+ */
+ writeTimeout: time.Duration
+ /**
+ * IdleTimeout is the maximum amount of time to wait for the
+ * next request when keep-alives are enabled. If zero, the value
+ * of ReadTimeout is used. If negative, or if zero and ReadTimeout
+ * is zero or negative, there is no timeout.
+ */
+ idleTimeout: time.Duration
+ /**
+ * MaxHeaderBytes controls the maximum number of bytes the
+ * server will read parsing the request header's keys and
+ * values, including the request line. It does not limit the
+ * size of the request body.
+ * If zero, DefaultMaxHeaderBytes is used.
+ */
+ maxHeaderBytes: number
+ /**
+ * TLSNextProto optionally specifies a function to take over
+ * ownership of the provided TLS connection when an ALPN
+ * protocol upgrade has occurred. The map key is the protocol
+ * name negotiated. The Handler argument should be used to
+ * handle HTTP requests and will initialize the Request's TLS
+ * and RemoteAddr if not already set. The connection is
+ * automatically closed when the function returns.
+ * If TLSNextProto is not nil, HTTP/2 support is not enabled
+ * automatically.
+ */
+ tlsNextProto: _TygojaDict
+ /**
+ * ConnState specifies an optional callback function that is
+ * called when a client connection changes state. See the
+ * ConnState type and associated constants for details.
+ */
+ connState: (_arg0: net.Conn, _arg1: ConnState) => void
+ /**
+ * ErrorLog specifies an optional logger for errors accepting
+ * connections, unexpected behavior from handlers, and
+ * underlying FileSystem errors.
+ * If nil, logging is done via the log package's standard logger.
+ */
+ errorLog?: any
+ /**
+ * BaseContext optionally specifies a function that returns
+ * the base context for incoming requests on this server.
+ * The provided Listener is the specific Listener that's
+ * about to start accepting requests.
+ * If BaseContext is nil, the default is context.Background().
+ * If non-nil, it must return a non-nil context.
+ */
+ baseContext: (_arg0: net.Listener) => context.Context
+ /**
+ * ConnContext optionally specifies a function that modifies
+ * the context used for a new connection c. The provided ctx
+ * is derived from the base context and has a ServerContextKey
+ * value.
+ */
+ connContext: (ctx: context.Context, c: net.Conn) => context.Context
+ }
+ interface Server {
+ /**
+ * Close immediately closes all active net.Listeners and any
+ * connections in state [StateNew], [StateActive], or [StateIdle]. For a
+ * graceful shutdown, use [Server.Shutdown].
+ *
+ * Close does not attempt to close (and does not even know about)
+ * any hijacked connections, such as WebSockets.
+ *
+ * Close returns any error returned from closing the [Server]'s
+ * underlying Listener(s).
+ */
+ close(): void
+ }
+ interface Server {
+ /**
+ * Shutdown gracefully shuts down the server without interrupting any
+ * active connections. Shutdown works by first closing all open
+ * listeners, then closing all idle connections, and then waiting
+ * indefinitely for connections to return to idle and then shut down.
+ * If the provided context expires before the shutdown is complete,
+ * Shutdown returns the context's error, otherwise it returns any
+ * error returned from closing the [Server]'s underlying Listener(s).
+ *
+ * When Shutdown is called, [Serve], [ListenAndServe], and
+ * [ListenAndServeTLS] immediately return [ErrServerClosed]. Make sure the
+ * program doesn't exit and waits instead for Shutdown to return.
+ *
+ * Shutdown does not attempt to close nor wait for hijacked
+ * connections such as WebSockets. The caller of Shutdown should
+ * separately notify such long-lived connections of shutdown and wait
+ * for them to close, if desired. See [Server.RegisterOnShutdown] for a way to
+ * register shutdown notification functions.
+ *
+ * Once Shutdown has been called on a server, it may not be reused;
+ * future calls to methods such as Serve will return ErrServerClosed.
+ */
+ shutdown(ctx: context.Context): void
+ }
+ interface Server {
+ /**
+ * RegisterOnShutdown registers a function to call on [Server.Shutdown].
+ * This can be used to gracefully shutdown connections that have
+ * undergone ALPN protocol upgrade or that have been hijacked.
+ * This function should start protocol-specific graceful shutdown,
+ * but should not wait for shutdown to complete.
+ */
+ registerOnShutdown(f: () => void): void
+ }
+ interface Server {
+ /**
+ * ListenAndServe listens on the TCP network address srv.Addr and then
+ * calls [Serve] to handle requests on incoming connections.
+ * Accepted connections are configured to enable TCP keep-alives.
+ *
+ * If srv.Addr is blank, ":http" is used.
+ *
+ * ListenAndServe always returns a non-nil error. After [Server.Shutdown] or [Server.Close],
+ * the returned error is [ErrServerClosed].
+ */
+ listenAndServe(): void
+ }
+ interface Server {
+ /**
+ * Serve accepts incoming connections on the Listener l, creating a
+ * new service goroutine for each. The service goroutines read requests and
+ * then call srv.Handler to reply to them.
+ *
+ * HTTP/2 support is only enabled if the Listener returns [*tls.Conn]
+ * connections and they were configured with "h2" in the TLS
+ * Config.NextProtos.
+ *
+ * Serve always returns a non-nil error and closes l.
+ * After [Server.Shutdown] or [Server.Close], the returned error is [ErrServerClosed].
+ */
+ serve(l: net.Listener): void
+ }
+ interface Server {
+ /**
+ * ServeTLS accepts incoming connections on the Listener l, creating a
+ * new service goroutine for each. The service goroutines perform TLS
+ * setup and then read requests, calling srv.Handler to reply to them.
+ *
+ * Files containing a certificate and matching private key for the
+ * server must be provided if neither the [Server]'s
+ * TLSConfig.Certificates, TLSConfig.GetCertificate nor
+ * config.GetConfigForClient are populated.
+ * If the certificate is signed by a certificate authority, the
+ * certFile should be the concatenation of the server's certificate,
+ * any intermediates, and the CA's certificate.
+ *
+ * ServeTLS always returns a non-nil error. After [Server.Shutdown] or [Server.Close], the
+ * returned error is [ErrServerClosed].
+ */
+ serveTLS(l: net.Listener, certFile: string, keyFile: string): void
+ }
+ interface Server {
+ /**
+ * SetKeepAlivesEnabled controls whether HTTP keep-alives are enabled.
+ * By default, keep-alives are always enabled. Only very
+ * resource-constrained environments or servers in the process of
+ * shutting down should disable them.
+ */
+ setKeepAlivesEnabled(v: boolean): void
+ }
+ interface Server {
+ /**
+ * ListenAndServeTLS listens on the TCP network address srv.Addr and
+ * then calls [ServeTLS] to handle requests on incoming TLS connections.
+ * Accepted connections are configured to enable TCP keep-alives.
+ *
+ * Filenames containing a certificate and matching private key for the
+ * server must be provided if neither the [Server]'s TLSConfig.Certificates
+ * nor TLSConfig.GetCertificate are populated. If the certificate is
+ * signed by a certificate authority, the certFile should be the
+ * concatenation of the server's certificate, any intermediates, and
+ * the CA's certificate.
+ *
+ * If srv.Addr is blank, ":https" is used.
+ *
+ * ListenAndServeTLS always returns a non-nil error. After [Server.Shutdown] or
+ * [Server.Close], the returned error is [ErrServerClosed].
+ */
+ listenAndServeTLS(certFile: string, keyFile: string): void
+ }
+}
+
+namespace auth {
+ /**
+ * AuthUser defines a standardized oauth2 user data structure.
+ */
+ interface AuthUser {
+ id: string
+ name: string
+ username: string
+ email: string
+ avatarUrl: string
+ accessToken: string
+ refreshToken: string
+ expiry: types.DateTime
+ rawUser: _TygojaDict
+ }
+ /**
+ * Provider defines a common interface for an OAuth2 client.
+ */
+ interface Provider {
+ [key:string]: any;
+ /**
+ * Context returns the context associated with the provider (if any).
+ */
+ context(): context.Context
+ /**
+ * SetContext assigns the specified context to the current provider.
+ */
+ setContext(ctx: context.Context): void
+ /**
+ * PKCE indicates whether the provider can use the PKCE flow.
+ */
+ pkce(): boolean
+ /**
+ * SetPKCE toggles the state whether the provider can use the PKCE flow or not.
+ */
+ setPKCE(enable: boolean): void
+ /**
+ * DisplayName usually returns provider name as it is officially written
+ * and it could be used directly in the UI.
+ */
+ displayName(): string
+ /**
+ * SetDisplayName sets the provider's display name.
+ */
+ setDisplayName(displayName: string): void
+ /**
+ * Scopes returns the provider access permissions that will be requested.
+ */
+ scopes(): Array
+ /**
+ * SetScopes sets the provider access permissions that will be requested later.
+ */
+ setScopes(scopes: Array): void
+ /**
+ * ClientId returns the provider client's app ID.
+ */
+ clientId(): string
+ /**
+ * SetClientId sets the provider client's ID.
+ */
+ setClientId(clientId: string): void
+ /**
+ * ClientSecret returns the provider client's app secret.
+ */
+ clientSecret(): string
+ /**
+ * SetClientSecret sets the provider client's app secret.
+ */
+ setClientSecret(secret: string): void
+ /**
+ * RedirectUrl returns the end address to redirect the user
+ * going through the OAuth flow.
+ */
+ redirectUrl(): string
+ /**
+ * SetRedirectUrl sets the provider's RedirectUrl.
+ */
+ setRedirectUrl(url: string): void
+ /**
+ * AuthUrl returns the provider's authorization service url.
+ */
+ authUrl(): string
+ /**
+ * SetAuthUrl sets the provider's AuthUrl.
+ */
+ setAuthUrl(url: string): void
+ /**
+ * TokenUrl returns the provider's token exchange service url.
+ */
+ tokenUrl(): string
+ /**
+ * SetTokenUrl sets the provider's TokenUrl.
+ */
+ setTokenUrl(url: string): void
+ /**
+ * UserApiUrl returns the provider's user info api url.
+ */
+ userApiUrl(): string
+ /**
+ * SetUserApiUrl sets the provider's UserApiUrl.
+ */
+ setUserApiUrl(url: string): void
+ /**
+ * Client returns an http client using the provided token.
+ */
+ client(token: oauth2.Token): (any)
+ /**
+ * BuildAuthUrl returns a URL to the provider's consent page
+ * that asks for permissions for the required scopes explicitly.
+ */
+ buildAuthUrl(state: string, ...opts: oauth2.AuthCodeOption[]): string
+ /**
+ * FetchToken converts an authorization code to token.
+ */
+ fetchToken(code: string, ...opts: oauth2.AuthCodeOption[]): (oauth2.Token)
+ /**
+ * FetchRawUserData requests and marshalizes into `result` the
+ * the OAuth user api response.
+ */
+ fetchRawUserData(token: oauth2.Token): string|Array
+ /**
+ * FetchAuthUser is similar to FetchRawUserData, but normalizes and
+ * marshalizes the user api response into a standardized AuthUser struct.
+ */
+ fetchAuthUser(token: oauth2.Token): (AuthUser)
+ }
+}
+
+/**
+ * Package sql provides a generic interface around SQL (or SQL-like)
+ * databases.
+ *
+ * The sql package must be used in conjunction with a database driver.
+ * See https://golang.org/s/sqldrivers for a list of drivers.
+ *
+ * Drivers that do not support context cancellation will not return until
+ * after the query is completed.
+ *
+ * For usage examples, see the wiki page at
+ * https://golang.org/s/sqlwiki.
+ */
+namespace sql {
+ /**
+ * TxOptions holds the transaction options to be used in [DB.BeginTx].
+ */
+ interface TxOptions {
+ /**
+ * Isolation is the transaction isolation level.
+ * If zero, the driver or database's default level is used.
+ */
+ isolation: IsolationLevel
+ readOnly: boolean
+ }
+ /**
+ * DB is a database handle representing a pool of zero or more
+ * underlying connections. It's safe for concurrent use by multiple
+ * goroutines.
+ *
+ * The sql package creates and frees connections automatically; it
+ * also maintains a free pool of idle connections. If the database has
+ * a concept of per-connection state, such state can be reliably observed
+ * within a transaction ([Tx]) or connection ([Conn]). Once [DB.Begin] is called, the
+ * returned [Tx] is bound to a single connection. Once [Tx.Commit] or
+ * [Tx.Rollback] is called on the transaction, that transaction's
+ * connection is returned to [DB]'s idle connection pool. The pool size
+ * can be controlled with [DB.SetMaxIdleConns].
+ */
+ interface DB {
+ }
+ interface DB {
+ /**
+ * PingContext verifies a connection to the database is still alive,
+ * establishing a connection if necessary.
+ */
+ pingContext(ctx: context.Context): void
+ }
+ interface DB {
+ /**
+ * Ping verifies a connection to the database is still alive,
+ * establishing a connection if necessary.
+ *
+ * Ping uses [context.Background] internally; to specify the context, use
+ * [DB.PingContext].
+ */
+ ping(): void
+ }
+ interface DB {
+ /**
+ * Close closes the database and prevents new queries from starting.
+ * Close then waits for all queries that have started processing on the server
+ * to finish.
+ *
+ * It is rare to Close a [DB], as the [DB] handle is meant to be
+ * long-lived and shared between many goroutines.
+ */
+ close(): void
+ }
+ interface DB {
+ /**
+ * SetMaxIdleConns sets the maximum number of connections in the idle
+ * connection pool.
+ *
+ * If MaxOpenConns is greater than 0 but less than the new MaxIdleConns,
+ * then the new MaxIdleConns will be reduced to match the MaxOpenConns limit.
+ *
+ * If n <= 0, no idle connections are retained.
+ *
+ * The default max idle connections is currently 2. This may change in
+ * a future release.
+ */
+ setMaxIdleConns(n: number): void
+ }
+ interface DB {
+ /**
+ * SetMaxOpenConns sets the maximum number of open connections to the database.
+ *
+ * If MaxIdleConns is greater than 0 and the new MaxOpenConns is less than
+ * MaxIdleConns, then MaxIdleConns will be reduced to match the new
+ * MaxOpenConns limit.
+ *
+ * If n <= 0, then there is no limit on the number of open connections.
+ * The default is 0 (unlimited).
+ */
+ setMaxOpenConns(n: number): void
+ }
+ interface DB {
+ /**
+ * SetConnMaxLifetime sets the maximum amount of time a connection may be reused.
+ *
+ * Expired connections may be closed lazily before reuse.
+ *
+ * If d <= 0, connections are not closed due to a connection's age.
+ */
+ setConnMaxLifetime(d: time.Duration): void
+ }
+ interface DB {
+ /**
+ * SetConnMaxIdleTime sets the maximum amount of time a connection may be idle.
+ *
+ * Expired connections may be closed lazily before reuse.
+ *
+ * If d <= 0, connections are not closed due to a connection's idle time.
+ */
+ setConnMaxIdleTime(d: time.Duration): void
+ }
+ interface DB {
+ /**
+ * Stats returns database statistics.
+ */
+ stats(): DBStats
+ }
+ interface DB {
+ /**
+ * PrepareContext creates a prepared statement for later queries or executions.
+ * Multiple queries or executions may be run concurrently from the
+ * returned statement.
+ * The caller must call the statement's [*Stmt.Close] method
+ * when the statement is no longer needed.
+ *
+ * The provided context is used for the preparation of the statement, not for the
+ * execution of the statement.
+ */
+ prepareContext(ctx: context.Context, query: string): (Stmt)
+ }
+ interface DB {
+ /**
+ * Prepare creates a prepared statement for later queries or executions.
+ * Multiple queries or executions may be run concurrently from the
+ * returned statement.
+ * The caller must call the statement's [*Stmt.Close] method
+ * when the statement is no longer needed.
+ *
+ * Prepare uses [context.Background] internally; to specify the context, use
+ * [DB.PrepareContext].
+ */
+ prepare(query: string): (Stmt)
+ }
+ interface DB {
+ /**
+ * ExecContext executes a query without returning any rows.
+ * The args are for any placeholder parameters in the query.
+ */
+ execContext(ctx: context.Context, query: string, ...args: any[]): Result
+ }
+ interface DB {
+ /**
+ * Exec executes a query without returning any rows.
+ * The args are for any placeholder parameters in the query.
+ *
+ * Exec uses [context.Background] internally; to specify the context, use
+ * [DB.ExecContext].
+ */
+ exec(query: string, ...args: any[]): Result
+ }
+ interface DB {
+ /**
+ * QueryContext executes a query that returns rows, typically a SELECT.
+ * The args are for any placeholder parameters in the query.
+ */
+ queryContext(ctx: context.Context, query: string, ...args: any[]): (Rows)
+ }
+ interface DB {
+ /**
+ * Query executes a query that returns rows, typically a SELECT.
+ * The args are for any placeholder parameters in the query.
+ *
+ * Query uses [context.Background] internally; to specify the context, use
+ * [DB.QueryContext].
+ */
+ query(query: string, ...args: any[]): (Rows)
+ }
+ interface DB {
+ /**
+ * QueryRowContext executes a query that is expected to return at most one row.
+ * QueryRowContext always returns a non-nil value. Errors are deferred until
+ * [Row]'s Scan method is called.
+ * If the query selects no rows, the [*Row.Scan] will return [ErrNoRows].
+ * Otherwise, [*Row.Scan] scans the first selected row and discards
+ * the rest.
+ */
+ queryRowContext(ctx: context.Context, query: string, ...args: any[]): (Row)
+ }
+ interface DB {
+ /**
+ * QueryRow executes a query that is expected to return at most one row.
+ * QueryRow always returns a non-nil value. Errors are deferred until
+ * [Row]'s Scan method is called.
+ * If the query selects no rows, the [*Row.Scan] will return [ErrNoRows].
+ * Otherwise, [*Row.Scan] scans the first selected row and discards
+ * the rest.
+ *
+ * QueryRow uses [context.Background] internally; to specify the context, use
+ * [DB.QueryRowContext].
+ */
+ queryRow(query: string, ...args: any[]): (Row)
+ }
+ interface DB {
+ /**
+ * BeginTx starts a transaction.
+ *
+ * The provided context is used until the transaction is committed or rolled back.
+ * If the context is canceled, the sql package will roll back
+ * the transaction. [Tx.Commit] will return an error if the context provided to
+ * BeginTx is canceled.
+ *
+ * The provided [TxOptions] is optional and may be nil if defaults should be used.
+ * If a non-default isolation level is used that the driver doesn't support,
+ * an error will be returned.
+ */
+ beginTx(ctx: context.Context, opts: TxOptions): (Tx)
+ }
+ interface DB {
+ /**
+ * Begin starts a transaction. The default isolation level is dependent on
+ * the driver.
+ *
+ * Begin uses [context.Background] internally; to specify the context, use
+ * [DB.BeginTx].
+ */
+ begin(): (Tx)
+ }
+ interface DB {
+ /**
+ * Driver returns the database's underlying driver.
+ */
+ driver(): any
+ }
+ interface DB {
+ /**
+ * Conn returns a single connection by either opening a new connection
+ * or returning an existing connection from the connection pool. Conn will
+ * block until either a connection is returned or ctx is canceled.
+ * Queries run on the same Conn will be run in the same database session.
+ *
+ * Every Conn must be returned to the database pool after use by
+ * calling [Conn.Close].
+ */
+ conn(ctx: context.Context): (Conn)
+ }
+ /**
+ * Tx is an in-progress database transaction.
+ *
+ * A transaction must end with a call to [Tx.Commit] or [Tx.Rollback].
+ *
+ * After a call to [Tx.Commit] or [Tx.Rollback], all operations on the
+ * transaction fail with [ErrTxDone].
+ *
+ * The statements prepared for a transaction by calling
+ * the transaction's [Tx.Prepare] or [Tx.Stmt] methods are closed
+ * by the call to [Tx.Commit] or [Tx.Rollback].
+ */
+ interface Tx {
+ }
+ interface Tx {
+ /**
+ * Commit commits the transaction.
+ */
+ commit(): void
+ }
+ interface Tx {
+ /**
+ * Rollback aborts the transaction.
+ */
+ rollback(): void
+ }
+ interface Tx {
+ /**
+ * PrepareContext creates a prepared statement for use within a transaction.
+ *
+ * The returned statement operates within the transaction and will be closed
+ * when the transaction has been committed or rolled back.
+ *
+ * To use an existing prepared statement on this transaction, see [Tx.Stmt].
+ *
+ * The provided context will be used for the preparation of the context, not
+ * for the execution of the returned statement. The returned statement
+ * will run in the transaction context.
+ */
+ prepareContext(ctx: context.Context, query: string): (Stmt)
+ }
+ interface Tx {
+ /**
+ * Prepare creates a prepared statement for use within a transaction.
+ *
+ * The returned statement operates within the transaction and will be closed
+ * when the transaction has been committed or rolled back.
+ *
+ * To use an existing prepared statement on this transaction, see [Tx.Stmt].
+ *
+ * Prepare uses [context.Background] internally; to specify the context, use
+ * [Tx.PrepareContext].
+ */
+ prepare(query: string): (Stmt)
+ }
+ interface Tx {
+ /**
+ * StmtContext returns a transaction-specific prepared statement from
+ * an existing statement.
+ *
+ * Example:
+ *
+ * ```
+ * updateMoney, err := db.Prepare("UPDATE balance SET money=money+? WHERE id=?")
+ * ...
+ * tx, err := db.Begin()
+ * ...
+ * res, err := tx.StmtContext(ctx, updateMoney).Exec(123.45, 98293203)
+ * ```
+ *
+ * The provided context is used for the preparation of the statement, not for the
+ * execution of the statement.
+ *
+ * The returned statement operates within the transaction and will be closed
+ * when the transaction has been committed or rolled back.
+ */
+ stmtContext(ctx: context.Context, stmt: Stmt): (Stmt)
+ }
+ interface Tx {
+ /**
+ * Stmt returns a transaction-specific prepared statement from
+ * an existing statement.
+ *
+ * Example:
+ *
+ * ```
+ * updateMoney, err := db.Prepare("UPDATE balance SET money=money+? WHERE id=?")
+ * ...
+ * tx, err := db.Begin()
+ * ...
+ * res, err := tx.Stmt(updateMoney).Exec(123.45, 98293203)
+ * ```
+ *
+ * The returned statement operates within the transaction and will be closed
+ * when the transaction has been committed or rolled back.
+ *
+ * Stmt uses [context.Background] internally; to specify the context, use
+ * [Tx.StmtContext].
+ */
+ stmt(stmt: Stmt): (Stmt)
+ }
+ interface Tx {
+ /**
+ * ExecContext executes a query that doesn't return rows.
+ * For example: an INSERT and UPDATE.
+ */
+ execContext(ctx: context.Context, query: string, ...args: any[]): Result
+ }
+ interface Tx {
+ /**
+ * Exec executes a query that doesn't return rows.
+ * For example: an INSERT and UPDATE.
+ *
+ * Exec uses [context.Background] internally; to specify the context, use
+ * [Tx.ExecContext].
+ */
+ exec(query: string, ...args: any[]): Result
+ }
+ interface Tx {
+ /**
+ * QueryContext executes a query that returns rows, typically a SELECT.
+ */
+ queryContext(ctx: context.Context, query: string, ...args: any[]): (Rows)
+ }
+ interface Tx {
+ /**
+ * Query executes a query that returns rows, typically a SELECT.
+ *
+ * Query uses [context.Background] internally; to specify the context, use
+ * [Tx.QueryContext].
+ */
+ query(query: string, ...args: any[]): (Rows)
+ }
+ interface Tx {
+ /**
+ * QueryRowContext executes a query that is expected to return at most one row.
+ * QueryRowContext always returns a non-nil value. Errors are deferred until
+ * [Row]'s Scan method is called.
+ * If the query selects no rows, the [*Row.Scan] will return [ErrNoRows].
+ * Otherwise, the [*Row.Scan] scans the first selected row and discards
+ * the rest.
+ */
+ queryRowContext(ctx: context.Context, query: string, ...args: any[]): (Row)
+ }
+ interface Tx {
+ /**
+ * QueryRow executes a query that is expected to return at most one row.
+ * QueryRow always returns a non-nil value. Errors are deferred until
+ * [Row]'s Scan method is called.
+ * If the query selects no rows, the [*Row.Scan] will return [ErrNoRows].
+ * Otherwise, the [*Row.Scan] scans the first selected row and discards
+ * the rest.
+ *
+ * QueryRow uses [context.Background] internally; to specify the context, use
+ * [Tx.QueryRowContext].
+ */
+ queryRow(query: string, ...args: any[]): (Row)
+ }
+ /**
+ * Stmt is a prepared statement.
+ * A Stmt is safe for concurrent use by multiple goroutines.
+ *
+ * If a Stmt is prepared on a [Tx] or [Conn], it will be bound to a single
+ * underlying connection forever. If the [Tx] or [Conn] closes, the Stmt will
+ * become unusable and all operations will return an error.
+ * If a Stmt is prepared on a [DB], it will remain usable for the lifetime of the
+ * [DB]. When the Stmt needs to execute on a new underlying connection, it will
+ * prepare itself on the new connection automatically.
+ */
+ interface Stmt {
+ }
+ interface Stmt {
+ /**
+ * ExecContext executes a prepared statement with the given arguments and
+ * returns a [Result] summarizing the effect of the statement.
+ */
+ execContext(ctx: context.Context, ...args: any[]): Result
+ }
+ interface Stmt {
+ /**
+ * Exec executes a prepared statement with the given arguments and
+ * returns a [Result] summarizing the effect of the statement.
+ *
+ * Exec uses [context.Background] internally; to specify the context, use
+ * [Stmt.ExecContext].
+ */
+ exec(...args: any[]): Result
+ }
+ interface Stmt {
+ /**
+ * QueryContext executes a prepared query statement with the given arguments
+ * and returns the query results as a [*Rows].
+ */
+ queryContext(ctx: context.Context, ...args: any[]): (Rows)
+ }
+ interface Stmt {
+ /**
+ * Query executes a prepared query statement with the given arguments
+ * and returns the query results as a *Rows.
+ *
+ * Query uses [context.Background] internally; to specify the context, use
+ * [Stmt.QueryContext].
+ */
+ query(...args: any[]): (Rows)
+ }
+ interface Stmt {
+ /**
+ * QueryRowContext executes a prepared query statement with the given arguments.
+ * If an error occurs during the execution of the statement, that error will
+ * be returned by a call to Scan on the returned [*Row], which is always non-nil.
+ * If the query selects no rows, the [*Row.Scan] will return [ErrNoRows].
+ * Otherwise, the [*Row.Scan] scans the first selected row and discards
+ * the rest.
+ */
+ queryRowContext(ctx: context.Context, ...args: any[]): (Row)
+ }
+ interface Stmt {
+ /**
+ * QueryRow executes a prepared query statement with the given arguments.
+ * If an error occurs during the execution of the statement, that error will
+ * be returned by a call to Scan on the returned [*Row], which is always non-nil.
+ * If the query selects no rows, the [*Row.Scan] will return [ErrNoRows].
+ * Otherwise, the [*Row.Scan] scans the first selected row and discards
+ * the rest.
+ *
+ * Example usage:
+ *
+ * ```
+ * var name string
+ * err := nameByUseridStmt.QueryRow(id).Scan(&name)
+ * ```
+ *
+ * QueryRow uses [context.Background] internally; to specify the context, use
+ * [Stmt.QueryRowContext].
+ */
+ queryRow(...args: any[]): (Row)
+ }
+ interface Stmt {
+ /**
+ * Close closes the statement.
+ */
+ close(): void
+ }
+ /**
+ * Rows is the result of a query. Its cursor starts before the first row
+ * of the result set. Use [Rows.Next] to advance from row to row.
+ */
+ interface Rows {
+ }
+ interface Rows {
+ /**
+ * Next prepares the next result row for reading with the [Rows.Scan] method. It
+ * returns true on success, or false if there is no next result row or an error
+ * happened while preparing it. [Rows.Err] should be consulted to distinguish between
+ * the two cases.
+ *
+ * Every call to [Rows.Scan], even the first one, must be preceded by a call to [Rows.Next].
+ */
+ next(): boolean
+ }
+ interface Rows {
+ /**
+ * NextResultSet prepares the next result set for reading. It reports whether
+ * there is further result sets, or false if there is no further result set
+ * or if there is an error advancing to it. The [Rows.Err] method should be consulted
+ * to distinguish between the two cases.
+ *
+ * After calling NextResultSet, the [Rows.Next] method should always be called before
+ * scanning. If there are further result sets they may not have rows in the result
+ * set.
+ */
+ nextResultSet(): boolean
+ }
+ interface Rows {
+ /**
+ * Err returns the error, if any, that was encountered during iteration.
+ * Err may be called after an explicit or implicit [Rows.Close].
+ */
+ err(): void
+ }
+ interface Rows {
+ /**
+ * Columns returns the column names.
+ * Columns returns an error if the rows are closed.
+ */
+ columns(): Array
+ }
+ interface Rows {
+ /**
+ * ColumnTypes returns column information such as column type, length,
+ * and nullable. Some information may not be available from some drivers.
+ */
+ columnTypes(): Array<(ColumnType | undefined)>
+ }
+ interface Rows {
+ /**
+ * Scan copies the columns in the current row into the values pointed
+ * at by dest. The number of values in dest must be the same as the
+ * number of columns in [Rows].
+ *
+ * Scan converts columns read from the database into the following
+ * common Go types and special types provided by the sql package:
+ *
+ * ```
+ * *string
+ * *[]byte
+ * *int, *int8, *int16, *int32, *int64
+ * *uint, *uint8, *uint16, *uint32, *uint64
+ * *bool
+ * *float32, *float64
+ * *interface{}
+ * *RawBytes
+ * *Rows (cursor value)
+ * any type implementing Scanner (see Scanner docs)
+ * ```
+ *
+ * In the most simple case, if the type of the value from the source
+ * column is an integer, bool or string type T and dest is of type *T,
+ * Scan simply assigns the value through the pointer.
+ *
+ * Scan also converts between string and numeric types, as long as no
+ * information would be lost. While Scan stringifies all numbers
+ * scanned from numeric database columns into *string, scans into
+ * numeric types are checked for overflow. For example, a float64 with
+ * value 300 or a string with value "300" can scan into a uint16, but
+ * not into a uint8, though float64(255) or "255" can scan into a
+ * uint8. One exception is that scans of some float64 numbers to
+ * strings may lose information when stringifying. In general, scan
+ * floating point columns into *float64.
+ *
+ * If a dest argument has type *[]byte, Scan saves in that argument a
+ * copy of the corresponding data. The copy is owned by the caller and
+ * can be modified and held indefinitely. The copy can be avoided by
+ * using an argument of type [*RawBytes] instead; see the documentation
+ * for [RawBytes] for restrictions on its use.
+ *
+ * If an argument has type *interface{}, Scan copies the value
+ * provided by the underlying driver without conversion. When scanning
+ * from a source value of type []byte to *interface{}, a copy of the
+ * slice is made and the caller owns the result.
+ *
+ * Source values of type [time.Time] may be scanned into values of type
+ * *time.Time, *interface{}, *string, or *[]byte. When converting to
+ * the latter two, [time.RFC3339Nano] is used.
+ *
+ * Source values of type bool may be scanned into types *bool,
+ * *interface{}, *string, *[]byte, or [*RawBytes].
+ *
+ * For scanning into *bool, the source may be true, false, 1, 0, or
+ * string inputs parseable by [strconv.ParseBool].
+ *
+ * Scan can also convert a cursor returned from a query, such as
+ * "select cursor(select * from my_table) from dual", into a
+ * [*Rows] value that can itself be scanned from. The parent
+ * select query will close any cursor [*Rows] if the parent [*Rows] is closed.
+ *
+ * If any of the first arguments implementing [Scanner] returns an error,
+ * that error will be wrapped in the returned error.
+ */
+ scan(...dest: any[]): void
+ }
+ interface Rows {
+ /**
+ * Close closes the [Rows], preventing further enumeration. If [Rows.Next] is called
+ * and returns false and there are no further result sets,
+ * the [Rows] are closed automatically and it will suffice to check the
+ * result of [Rows.Err]. Close is idempotent and does not affect the result of [Rows.Err].
+ */
+ close(): void
+ }
+ /**
+ * A Result summarizes an executed SQL command.
+ */
+ interface Result {
+ [key:string]: any;
+ /**
+ * LastInsertId returns the integer generated by the database
+ * in response to a command. Typically this will be from an
+ * "auto increment" column when inserting a new row. Not all
+ * databases support this feature, and the syntax of such
+ * statements varies.
+ */
+ lastInsertId(): number
+ /**
+ * RowsAffected returns the number of rows affected by an
+ * update, insert, or delete. Not every database or database
+ * driver may support this.
+ */
+ rowsAffected(): number
+ }
+}
+
+/**
+ * Package echo implements high performance, minimalist Go web framework.
+ *
+ * Example:
+ *
+ * ```
+ * package main
+ *
+ * import (
+ * "github.com/labstack/echo/v5"
+ * "github.com/labstack/echo/v5/middleware"
+ * "log"
+ * "net/http"
+ * )
+ *
+ * // Handler
+ * func hello(c echo.Context) error {
+ * return c.String(http.StatusOK, "Hello, World!")
+ * }
+ *
+ * func main() {
+ * // Echo instance
+ * e := echo.New()
+ *
+ * // Middleware
+ * e.Use(middleware.Logger())
+ * e.Use(middleware.Recover())
+ *
+ * // Routes
+ * e.GET("/", hello)
+ *
+ * // Start server
+ * if err := e.Start(":8080"); err != http.ErrServerClosed {
+ * log.Fatal(err)
+ * }
+ * }
+ * ```
+ *
+ * Learn more at https://echo.labstack.com
+ */
+namespace echo {
+ /**
+ * Context represents the context of the current HTTP request. It holds request and
+ * response objects, path, path parameters, data and registered handler.
+ */
+ interface Context {
+ [key:string]: any;
+ /**
+ * Request returns `*http.Request`.
+ */
+ request(): (http.Request)
+ /**
+ * SetRequest sets `*http.Request`.
+ */
+ setRequest(r: http.Request): void
+ /**
+ * SetResponse sets `*Response`.
+ */
+ setResponse(r: Response): void
+ /**
+ * Response returns `*Response`.
+ */
+ response(): (Response)
+ /**
+ * IsTLS returns true if HTTP connection is TLS otherwise false.
+ */
+ isTLS(): boolean
+ /**
+ * IsWebSocket returns true if HTTP connection is WebSocket otherwise false.
+ */
+ isWebSocket(): boolean
+ /**
+ * Scheme returns the HTTP protocol scheme, `http` or `https`.
+ */
+ scheme(): string
+ /**
+ * RealIP returns the client's network address based on `X-Forwarded-For`
+ * or `X-Real-IP` request header.
+ * The behavior can be configured using `Echo#IPExtractor`.
+ */
+ realIP(): string
+ /**
+ * RouteInfo returns current request route information. Method, Path, Name and params if they exist for matched route.
+ * In case of 404 (route not found) and 405 (method not allowed) RouteInfo returns generic struct for these cases.
+ */
+ routeInfo(): RouteInfo
+ /**
+ * Path returns the registered path for the handler.
+ */
+ path(): string
+ /**
+ * PathParam returns path parameter by name.
+ */
+ pathParam(name: string): string
+ /**
+ * PathParamDefault returns the path parameter or default value for the provided name.
+ *
+ * Notes for DefaultRouter implementation:
+ * Path parameter could be empty for cases like that:
+ * * route `/release-:version/bin` and request URL is `/release-/bin`
+ * * route `/api/:version/image.jpg` and request URL is `/api//image.jpg`
+ * but not when path parameter is last part of route path
+ * * route `/download/file.:ext` will not match request `/download/file.`
+ */
+ pathParamDefault(name: string, defaultValue: string): string
+ /**
+ * PathParams returns path parameter values.
+ */
+ pathParams(): PathParams
+ /**
+ * SetPathParams sets path parameters for current request.
+ */
+ setPathParams(params: PathParams): void
+ /**
+ * QueryParam returns the query param for the provided name.
+ */
+ queryParam(name: string): string
+ /**
+ * QueryParamDefault returns the query param or default value for the provided name.
+ */
+ queryParamDefault(name: string, defaultValue: string): string
+ /**
+ * QueryParams returns the query parameters as `url.Values`.
+ */
+ queryParams(): url.Values
+ /**
+ * QueryString returns the URL query string.
+ */
+ queryString(): string
+ /**
+ * FormValue returns the form field value for the provided name.
+ */
+ formValue(name: string): string
+ /**
+ * FormValueDefault returns the form field value or default value for the provided name.
+ */
+ formValueDefault(name: string, defaultValue: string): string
+ /**
+ * FormValues returns the form field values as `url.Values`.
+ */
+ formValues(): url.Values
+ /**
+ * FormFile returns the multipart form file for the provided name.
+ */
+ formFile(name: string): (multipart.FileHeader)
+ /**
+ * MultipartForm returns the multipart form.
+ */
+ multipartForm(): (multipart.Form)
+ /**
+ * Cookie returns the named cookie provided in the request.
+ */
+ cookie(name: string): (http.Cookie)
+ /**
+ * SetCookie adds a `Set-Cookie` header in HTTP response.
+ */
+ setCookie(cookie: http.Cookie): void
+ /**
+ * Cookies returns the HTTP cookies sent with the request.
+ */
+ cookies(): Array<(http.Cookie | undefined)>
+ /**
+ * Get retrieves data from the context.
+ */
+ get(key: string): {
+ }
+ /**
+ * Set saves data in the context.
+ */
+ set(key: string, val: {
+ }): void
+ /**
+ * Bind binds path params, query params and the request body into provided type `i`. The default binder
+ * binds body based on Content-Type header.
+ */
+ bind(i: {
+ }): void
+ /**
+ * Validate validates provided `i`. It is usually called after `Context#Bind()`.
+ * Validator must be registered using `Echo#Validator`.
+ */
+ validate(i: {
+ }): void
+ /**
+ * Render renders a template with data and sends a text/html response with status
+ * code. Renderer must be registered using `Echo.Renderer`.
+ */
+ render(code: number, name: string, data: {
+ }): void
+ /**
+ * HTML sends an HTTP response with status code.
+ */
+ html(code: number, html: string): void
+ /**
+ * HTMLBlob sends an HTTP blob response with status code.
+ */
+ htmlBlob(code: number, b: string|Array): void
+ /**
+ * String sends a string response with status code.
+ */
+ string(code: number, s: string): void
+ /**
+ * JSON sends a JSON response with status code.
+ */
+ json(code: number, i: {
+ }): void
+ /**
+ * JSONPretty sends a pretty-print JSON with status code.
+ */
+ jsonPretty(code: number, i: {
+ }, indent: string): void
+ /**
+ * JSONBlob sends a JSON blob response with status code.
+ */
+ jsonBlob(code: number, b: string|Array): void
+ /**
+ * JSONP sends a JSONP response with status code. It uses `callback` to construct
+ * the JSONP payload.
+ */
+ jsonp(code: number, callback: string, i: {
+ }): void
+ /**
+ * JSONPBlob sends a JSONP blob response with status code. It uses `callback`
+ * to construct the JSONP payload.
+ */
+ jsonpBlob(code: number, callback: string, b: string|Array): void
+ /**
+ * XML sends an XML response with status code.
+ */
+ xml(code: number, i: {
+ }): void
+ /**
+ * XMLPretty sends a pretty-print XML with status code.
+ */
+ xmlPretty(code: number, i: {
+ }, indent: string): void
+ /**
+ * XMLBlob sends an XML blob response with status code.
+ */
+ xmlBlob(code: number, b: string|Array): void
+ /**
+ * Blob sends a blob response with status code and content type.
+ */
+ blob(code: number, contentType: string, b: string|Array): void
+ /**
+ * Stream sends a streaming response with status code and content type.
+ */
+ stream(code: number, contentType: string, r: io.Reader): void
+ /**
+ * File sends a response with the content of the file.
+ */
+ file(file: string): void
+ /**
+ * FileFS sends a response with the content of the file from given filesystem.
+ */
+ fileFS(file: string, filesystem: fs.FS): void
+ /**
+ * Attachment sends a response as attachment, prompting client to save the
+ * file.
+ */
+ attachment(file: string, name: string): void
+ /**
+ * Inline sends a response as inline, opening the file in the browser.
+ */
+ inline(file: string, name: string): void
+ /**
+ * NoContent sends a response with no body and a status code.
+ */
+ noContent(code: number): void
+ /**
+ * Redirect redirects the request to a provided URL with status code.
+ */
+ redirect(code: number, url: string): void
+ /**
+ * Error invokes the registered global HTTP error handler. Generally used by middleware.
+ * A side-effect of calling global error handler is that now Response has been committed (sent to the client) and
+ * middlewares up in chain can not change Response status code or Response body anymore.
+ *
+ * Avoid using this method in handlers as no middleware will be able to effectively handle errors after that.
+ * Instead of calling this method in handler return your error and let it be handled by middlewares or global error handler.
+ */
+ error(err: Error): void
+ /**
+ * Echo returns the `Echo` instance.
+ *
+ * WARNING: Remember that Echo public fields and methods are coroutine safe ONLY when you are NOT mutating them
+ * anywhere in your code after Echo server has started.
+ */
+ echo(): (Echo)
+ }
+ // @ts-ignore
+ import stdContext = context
+ /**
+ * Echo is the top-level framework instance.
+ *
+ * Goroutine safety: Do not mutate Echo instance fields after server has started. Accessing these
+ * fields from handlers/middlewares and changing field values at the same time leads to data-races.
+ * Same rule applies to adding new routes after server has been started - Adding a route is not Goroutine safe action.
+ */
+ interface Echo {
+ /**
+ * NewContextFunc allows using custom context implementations, instead of default *echo.context
+ */
+ newContextFunc: (e: Echo, pathParamAllocSize: number) => ServableContext
+ debug: boolean
+ httpErrorHandler: HTTPErrorHandler
+ binder: Binder
+ jsonSerializer: JSONSerializer
+ validator: Validator
+ renderer: Renderer
+ logger: Logger
+ ipExtractor: IPExtractor
+ /**
+ * Filesystem is file system used by Static and File handlers to access files.
+ * Defaults to os.DirFS(".")
+ *
+ * When dealing with `embed.FS` use `fs := echo.MustSubFS(fs, "rootDirectory") to create sub fs which uses necessary
+ * prefix for directory path. This is necessary as `//go:embed assets/images` embeds files with paths
+ * including `assets/images` as their prefix.
+ */
+ filesystem: fs.FS
+ /**
+ * OnAddRoute is called when Echo adds new route to specific host router. Handler is called for every router
+ * and before route is added to the host router.
+ */
+ onAddRoute: (host: string, route: Routable) => void
+ }
+ /**
+ * HandlerFunc defines a function to serve HTTP requests.
+ */
+ interface HandlerFunc {(c: Context): void }
+ /**
+ * MiddlewareFunc defines a function to process middleware.
+ */
+ interface MiddlewareFunc {(next: HandlerFunc): HandlerFunc }
+ interface Echo {
+ /**
+ * NewContext returns a new Context instance.
+ *
+ * Note: both request and response can be left to nil as Echo.ServeHTTP will call c.Reset(req,resp) anyway
+ * these arguments are useful when creating context for tests and cases like that.
+ */
+ newContext(r: http.Request, w: http.ResponseWriter): Context
+ }
+ interface Echo {
+ /**
+ * Router returns the default router.
+ */
+ router(): Router
+ }
+ interface Echo {
+ /**
+ * Routers returns the new map of host => router.
+ */
+ routers(): _TygojaDict
+ }
+ interface Echo {
+ /**
+ * RouterFor returns Router for given host. When host is left empty the default router is returned.
+ */
+ routerFor(host: string): [Router, boolean]
+ }
+ interface Echo {
+ /**
+ * ResetRouterCreator resets callback for creating new router instances.
+ * Note: current (default) router is immediately replaced with router created with creator func and vhost routers are cleared.
+ */
+ resetRouterCreator(creator: (e: Echo) => Router): void
+ }
+ interface Echo {
+ /**
+ * Pre adds middleware to the chain which is run before router tries to find matching route.
+ * Meaning middleware is executed even for 404 (not found) cases.
+ */
+ pre(...middleware: MiddlewareFunc[]): void
+ }
+ interface Echo {
+ /**
+ * Use adds middleware to the chain which is run after router has found matching route and before route/request handler method is executed.
+ */
+ use(...middleware: MiddlewareFunc[]): void
+ }
+ interface Echo {
+ /**
+ * CONNECT registers a new CONNECT route for a path with matching handler in the
+ * router with optional route-level middleware. Panics on error.
+ */
+ connect(path: string, h: HandlerFunc, ...m: MiddlewareFunc[]): RouteInfo
+ }
+ interface Echo {
+ /**
+ * DELETE registers a new DELETE route for a path with matching handler in the router
+ * with optional route-level middleware. Panics on error.
+ */
+ delete(path: string, h: HandlerFunc, ...m: MiddlewareFunc[]): RouteInfo
+ }
+ interface Echo {
+ /**
+ * GET registers a new GET route for a path with matching handler in the router
+ * with optional route-level middleware. Panics on error.
+ */
+ get(path: string, h: HandlerFunc, ...m: MiddlewareFunc[]): RouteInfo
+ }
+ interface Echo {
+ /**
+ * HEAD registers a new HEAD route for a path with matching handler in the
+ * router with optional route-level middleware. Panics on error.
+ */
+ head(path: string, h: HandlerFunc, ...m: MiddlewareFunc[]): RouteInfo
+ }
+ interface Echo {
+ /**
+ * OPTIONS registers a new OPTIONS route for a path with matching handler in the
+ * router with optional route-level middleware. Panics on error.
+ */
+ options(path: string, h: HandlerFunc, ...m: MiddlewareFunc[]): RouteInfo
+ }
+ interface Echo {
+ /**
+ * PATCH registers a new PATCH route for a path with matching handler in the
+ * router with optional route-level middleware. Panics on error.
+ */
+ patch(path: string, h: HandlerFunc, ...m: MiddlewareFunc[]): RouteInfo
+ }
+ interface Echo {
+ /**
+ * POST registers a new POST route for a path with matching handler in the
+ * router with optional route-level middleware. Panics on error.
+ */
+ post(path: string, h: HandlerFunc, ...m: MiddlewareFunc[]): RouteInfo
+ }
+ interface Echo {
+ /**
+ * PUT registers a new PUT route for a path with matching handler in the
+ * router with optional route-level middleware. Panics on error.
+ */
+ put(path: string, h: HandlerFunc, ...m: MiddlewareFunc[]): RouteInfo
+ }
+ interface Echo {
+ /**
+ * TRACE registers a new TRACE route for a path with matching handler in the
+ * router with optional route-level middleware. Panics on error.
+ */
+ trace(path: string, h: HandlerFunc, ...m: MiddlewareFunc[]): RouteInfo
+ }
+ interface Echo {
+ /**
+ * RouteNotFound registers a special-case route which is executed when no other route is found (i.e. HTTP 404 cases)
+ * for current request URL.
+ * Path supports static and named/any parameters just like other http method is defined. Generally path is ended with
+ * wildcard/match-any character (`/*`, `/download/*` etc).
+ *
+ * Example: `e.RouteNotFound("/*", func(c echo.Context) error { return c.NoContent(http.StatusNotFound) })`
+ */
+ routeNotFound(path: string, h: HandlerFunc, ...m: MiddlewareFunc[]): RouteInfo
+ }
+ interface Echo {
+ /**
+ * Any registers a new route for all HTTP methods (supported by Echo) and path with matching handler
+ * in the router with optional route-level middleware.
+ *
+ * Note: this method only adds specific set of supported HTTP methods as handler and is not true
+ * "catch-any-arbitrary-method" way of matching requests.
+ */
+ any(path: string, handler: HandlerFunc, ...middleware: MiddlewareFunc[]): Routes
+ }
+ interface Echo {
+ /**
+ * Match registers a new route for multiple HTTP methods and path with matching
+ * handler in the router with optional route-level middleware. Panics on error.
+ */
+ match(methods: Array, path: string, handler: HandlerFunc, ...middleware: MiddlewareFunc[]): Routes
+ }
+ interface Echo {
+ /**
+ * Static registers a new route with path prefix to serve static files from the provided root directory.
+ */
+ static(pathPrefix: string, fsRoot: string): RouteInfo
+ }
+ interface Echo {
+ /**
+ * StaticFS registers a new route with path prefix to serve static files from the provided file system.
+ *
+ * When dealing with `embed.FS` use `fs := echo.MustSubFS(fs, "rootDirectory") to create sub fs which uses necessary
+ * prefix for directory path. This is necessary as `//go:embed assets/images` embeds files with paths
+ * including `assets/images` as their prefix.
+ */
+ staticFS(pathPrefix: string, filesystem: fs.FS): RouteInfo
+ }
+ interface Echo {
+ /**
+ * FileFS registers a new route with path to serve file from the provided file system.
+ */
+ fileFS(path: string, file: string, filesystem: fs.FS, ...m: MiddlewareFunc[]): RouteInfo
+ }
+ interface Echo {
+ /**
+ * File registers a new route with path to serve a static file with optional route-level middleware. Panics on error.
+ */
+ file(path: string, file: string, ...middleware: MiddlewareFunc[]): RouteInfo
+ }
+ interface Echo {
+ /**
+ * AddRoute registers a new Route with default host Router
+ */
+ addRoute(route: Routable): RouteInfo
+ }
+ interface Echo {
+ /**
+ * Add registers a new route for an HTTP method and path with matching handler
+ * in the router with optional route-level middleware.
+ */
+ add(method: string, path: string, handler: HandlerFunc, ...middleware: MiddlewareFunc[]): RouteInfo
+ }
+ interface Echo {
+ /**
+ * Host creates a new router group for the provided host and optional host-level middleware.
+ */
+ host(name: string, ...m: MiddlewareFunc[]): (Group)
+ }
+ interface Echo {
+ /**
+ * Group creates a new router group with prefix and optional group-level middleware.
+ */
+ group(prefix: string, ...m: MiddlewareFunc[]): (Group)
+ }
+ interface Echo {
+ /**
+ * AcquireContext returns an empty `Context` instance from the pool.
+ * You must return the context by calling `ReleaseContext()`.
+ */
+ acquireContext(): Context
+ }
+ interface Echo {
+ /**
+ * ReleaseContext returns the `Context` instance back to the pool.
+ * You must call it after `AcquireContext()`.
+ */
+ releaseContext(c: Context): void
+ }
+ interface Echo {
+ /**
+ * ServeHTTP implements `http.Handler` interface, which serves HTTP requests.
+ */
+ serveHTTP(w: http.ResponseWriter, r: http.Request): void
+ }
+ interface Echo {
+ /**
+ * Start stars HTTP server on given address with Echo as a handler serving requests. The server can be shutdown by
+ * sending os.Interrupt signal with `ctrl+c`.
+ *
+ * Note: this method is created for use in examples/demos and is deliberately simple without providing configuration
+ * options.
+ *
+ * In need of customization use:
+ *
+ * ```
+ * sc := echo.StartConfig{Address: ":8080"}
+ * if err := sc.Start(e); err != http.ErrServerClosed {
+ * log.Fatal(err)
+ * }
+ * ```
+ *
+ * // or standard library `http.Server`
+ *
+ * ```
+ * s := http.Server{Addr: ":8080", Handler: e}
+ * if err := s.ListenAndServe(); err != http.ErrServerClosed {
+ * log.Fatal(err)
+ * }
+ * ```
+ */
+ start(address: string): void
+ }
+}
+
+/**
+ * Package exec runs external commands. It wraps os.StartProcess to make it
+ * easier to remap stdin and stdout, connect I/O with pipes, and do other
+ * adjustments.
+ *
+ * Unlike the "system" library call from C and other languages, the
+ * os/exec package intentionally does not invoke the system shell and
+ * does not expand any glob patterns or handle other expansions,
+ * pipelines, or redirections typically done by shells. The package
+ * behaves more like C's "exec" family of functions. To expand glob
+ * patterns, either call the shell directly, taking care to escape any
+ * dangerous input, or use the [path/filepath] package's Glob function.
+ * To expand environment variables, use package os's ExpandEnv.
+ *
+ * Note that the examples in this package assume a Unix system.
+ * They may not run on Windows, and they do not run in the Go Playground
+ * used by golang.org and godoc.org.
+ *
+ * # Executables in the current directory
+ *
+ * The functions [Command] and [LookPath] look for a program
+ * in the directories listed in the current path, following the
+ * conventions of the host operating system.
+ * Operating systems have for decades included the current
+ * directory in this search, sometimes implicitly and sometimes
+ * configured explicitly that way by default.
+ * Modern practice is that including the current directory
+ * is usually unexpected and often leads to security problems.
+ *
+ * To avoid those security problems, as of Go 1.19, this package will not resolve a program
+ * using an implicit or explicit path entry relative to the current directory.
+ * That is, if you run [LookPath]("go"), it will not successfully return
+ * ./go on Unix nor .\go.exe on Windows, no matter how the path is configured.
+ * Instead, if the usual path algorithms would result in that answer,
+ * these functions return an error err satisfying [errors.Is](err, [ErrDot]).
+ *
+ * For example, consider these two program snippets:
+ *
+ * ```
+ * path, err := exec.LookPath("prog")
+ * if err != nil {
+ * log.Fatal(err)
+ * }
+ * use(path)
+ * ```
+ *
+ * and
+ *
+ * ```
+ * cmd := exec.Command("prog")
+ * if err := cmd.Run(); err != nil {
+ * log.Fatal(err)
+ * }
+ * ```
+ *
+ * These will not find and run ./prog or .\prog.exe,
+ * no matter how the current path is configured.
+ *
+ * Code that always wants to run a program from the current directory
+ * can be rewritten to say "./prog" instead of "prog".
+ *
+ * Code that insists on including results from relative path entries
+ * can instead override the error using an errors.Is check:
+ *
+ * ```
+ * path, err := exec.LookPath("prog")
+ * if errors.Is(err, exec.ErrDot) {
+ * err = nil
+ * }
+ * if err != nil {
+ * log.Fatal(err)
+ * }
+ * use(path)
+ * ```
+ *
+ * and
+ *
+ * ```
+ * cmd := exec.Command("prog")
+ * if errors.Is(cmd.Err, exec.ErrDot) {
+ * cmd.Err = nil
+ * }
+ * if err := cmd.Run(); err != nil {
+ * log.Fatal(err)
+ * }
+ * ```
+ *
+ * Setting the environment variable GODEBUG=execerrdot=0
+ * disables generation of ErrDot entirely, temporarily restoring the pre-Go 1.19
+ * behavior for programs that are unable to apply more targeted fixes.
+ * A future version of Go may remove support for this variable.
+ *
+ * Before adding such overrides, make sure you understand the
+ * security implications of doing so.
+ * See https://go.dev/blog/path-security for more information.
+ */
+namespace exec {
+ /**
+ * Cmd represents an external command being prepared or run.
+ *
+ * A Cmd cannot be reused after calling its [Cmd.Run], [Cmd.Output] or [Cmd.CombinedOutput]
+ * methods.
+ */
+ interface Cmd {
+ /**
+ * Path is the path of the command to run.
+ *
+ * This is the only field that must be set to a non-zero
+ * value. If Path is relative, it is evaluated relative
+ * to Dir.
+ */
+ path: string
+ /**
+ * Args holds command line arguments, including the command as Args[0].
+ * If the Args field is empty or nil, Run uses {Path}.
+ *
+ * In typical use, both Path and Args are set by calling Command.
+ */
+ args: Array
+ /**
+ * Env specifies the environment of the process.
+ * Each entry is of the form "key=value".
+ * If Env is nil, the new process uses the current process's
+ * environment.
+ * If Env contains duplicate environment keys, only the last
+ * value in the slice for each duplicate key is used.
+ * As a special case on Windows, SYSTEMROOT is always added if
+ * missing and not explicitly set to the empty string.
+ */
+ env: Array
+ /**
+ * Dir specifies the working directory of the command.
+ * If Dir is the empty string, Run runs the command in the
+ * calling process's current directory.
+ */
+ dir: string
+ /**
+ * Stdin specifies the process's standard input.
+ *
+ * If Stdin is nil, the process reads from the null device (os.DevNull).
+ *
+ * If Stdin is an *os.File, the process's standard input is connected
+ * directly to that file.
+ *
+ * Otherwise, during the execution of the command a separate
+ * goroutine reads from Stdin and delivers that data to the command
+ * over a pipe. In this case, Wait does not complete until the goroutine
+ * stops copying, either because it has reached the end of Stdin
+ * (EOF or a read error), or because writing to the pipe returned an error,
+ * or because a nonzero WaitDelay was set and expired.
+ */
+ stdin: io.Reader
+ /**
+ * Stdout and Stderr specify the process's standard output and error.
+ *
+ * If either is nil, Run connects the corresponding file descriptor
+ * to the null device (os.DevNull).
+ *
+ * If either is an *os.File, the corresponding output from the process
+ * is connected directly to that file.
+ *
+ * Otherwise, during the execution of the command a separate goroutine
+ * reads from the process over a pipe and delivers that data to the
+ * corresponding Writer. In this case, Wait does not complete until the
+ * goroutine reaches EOF or encounters an error or a nonzero WaitDelay
+ * expires.
+ *
+ * If Stdout and Stderr are the same writer, and have a type that can
+ * be compared with ==, at most one goroutine at a time will call Write.
+ */
+ stdout: io.Writer
+ stderr: io.Writer
+ /**
+ * ExtraFiles specifies additional open files to be inherited by the
+ * new process. It does not include standard input, standard output, or
+ * standard error. If non-nil, entry i becomes file descriptor 3+i.
+ *
+ * ExtraFiles is not supported on Windows.
+ */
+ extraFiles: Array<(os.File | undefined)>
+ /**
+ * SysProcAttr holds optional, operating system-specific attributes.
+ * Run passes it to os.StartProcess as the os.ProcAttr's Sys field.
+ */
+ sysProcAttr?: syscall.SysProcAttr
+ /**
+ * Process is the underlying process, once started.
+ */
+ process?: os.Process
+ /**
+ * ProcessState contains information about an exited process.
+ * If the process was started successfully, Wait or Run will
+ * populate its ProcessState when the command completes.
+ */
+ processState?: os.ProcessState
+ err: Error // LookPath error, if any.
+ /**
+ * If Cancel is non-nil, the command must have been created with
+ * CommandContext and Cancel will be called when the command's
+ * Context is done. By default, CommandContext sets Cancel to
+ * call the Kill method on the command's Process.
+ *
+ * Typically a custom Cancel will send a signal to the command's
+ * Process, but it may instead take other actions to initiate cancellation,
+ * such as closing a stdin or stdout pipe or sending a shutdown request on a
+ * network socket.
+ *
+ * If the command exits with a success status after Cancel is
+ * called, and Cancel does not return an error equivalent to
+ * os.ErrProcessDone, then Wait and similar methods will return a non-nil
+ * error: either an error wrapping the one returned by Cancel,
+ * or the error from the Context.
+ * (If the command exits with a non-success status, or Cancel
+ * returns an error that wraps os.ErrProcessDone, Wait and similar methods
+ * continue to return the command's usual exit status.)
+ *
+ * If Cancel is set to nil, nothing will happen immediately when the command's
+ * Context is done, but a nonzero WaitDelay will still take effect. That may
+ * be useful, for example, to work around deadlocks in commands that do not
+ * support shutdown signals but are expected to always finish quickly.
+ *
+ * Cancel will not be called if Start returns a non-nil error.
+ */
+ cancel: () => void
+ /**
+ * If WaitDelay is non-zero, it bounds the time spent waiting on two sources
+ * of unexpected delay in Wait: a child process that fails to exit after the
+ * associated Context is canceled, and a child process that exits but leaves
+ * its I/O pipes unclosed.
+ *
+ * The WaitDelay timer starts when either the associated Context is done or a
+ * call to Wait observes that the child process has exited, whichever occurs
+ * first. When the delay has elapsed, the command shuts down the child process
+ * and/or its I/O pipes.
+ *
+ * If the child process has failed to exit — perhaps because it ignored or
+ * failed to receive a shutdown signal from a Cancel function, or because no
+ * Cancel function was set — then it will be terminated using os.Process.Kill.
+ *
+ * Then, if the I/O pipes communicating with the child process are still open,
+ * those pipes are closed in order to unblock any goroutines currently blocked
+ * on Read or Write calls.
+ *
+ * If pipes are closed due to WaitDelay, no Cancel call has occurred,
+ * and the command has otherwise exited with a successful status, Wait and
+ * similar methods will return ErrWaitDelay instead of nil.
+ *
+ * If WaitDelay is zero (the default), I/O pipes will be read until EOF,
+ * which might not occur until orphaned subprocesses of the command have
+ * also closed their descriptors for the pipes.
+ */
+ waitDelay: time.Duration
+ }
+ interface Cmd {
+ /**
+ * String returns a human-readable description of c.
+ * It is intended only for debugging.
+ * In particular, it is not suitable for use as input to a shell.
+ * The output of String may vary across Go releases.
+ */
+ string(): string
+ }
+ interface Cmd {
+ /**
+ * Run starts the specified command and waits for it to complete.
+ *
+ * The returned error is nil if the command runs, has no problems
+ * copying stdin, stdout, and stderr, and exits with a zero exit
+ * status.
+ *
+ * If the command starts but does not complete successfully, the error is of
+ * type [*ExitError]. Other error types may be returned for other situations.
+ *
+ * If the calling goroutine has locked the operating system thread
+ * with [runtime.LockOSThread] and modified any inheritable OS-level
+ * thread state (for example, Linux or Plan 9 name spaces), the new
+ * process will inherit the caller's thread state.
+ */
+ run(): void
+ }
+ interface Cmd {
+ /**
+ * Start starts the specified command but does not wait for it to complete.
+ *
+ * If Start returns successfully, the c.Process field will be set.
+ *
+ * After a successful call to Start the [Cmd.Wait] method must be called in
+ * order to release associated system resources.
+ */
+ start(): void
+ }
+ interface Cmd {
+ /**
+ * Wait waits for the command to exit and waits for any copying to
+ * stdin or copying from stdout or stderr to complete.
+ *
+ * The command must have been started by [Cmd.Start].
+ *
+ * The returned error is nil if the command runs, has no problems
+ * copying stdin, stdout, and stderr, and exits with a zero exit
+ * status.
+ *
+ * If the command fails to run or doesn't complete successfully, the
+ * error is of type [*ExitError]. Other error types may be
+ * returned for I/O problems.
+ *
+ * If any of c.Stdin, c.Stdout or c.Stderr are not an [*os.File], Wait also waits
+ * for the respective I/O loop copying to or from the process to complete.
+ *
+ * Wait releases any resources associated with the [Cmd].
+ */
+ wait(): void
+ }
+ interface Cmd {
+ /**
+ * Output runs the command and returns its standard output.
+ * Any returned error will usually be of type [*ExitError].
+ * If c.Stderr was nil, Output populates [ExitError.Stderr].
+ */
+ output(): string|Array
+ }
+ interface Cmd {
+ /**
+ * CombinedOutput runs the command and returns its combined standard
+ * output and standard error.
+ */
+ combinedOutput(): string|Array
+ }
+ interface Cmd {
+ /**
+ * StdinPipe returns a pipe that will be connected to the command's
+ * standard input when the command starts.
+ * The pipe will be closed automatically after [Cmd.Wait] sees the command exit.
+ * A caller need only call Close to force the pipe to close sooner.
+ * For example, if the command being run will not exit until standard input
+ * is closed, the caller must close the pipe.
+ */
+ stdinPipe(): io.WriteCloser
+ }
+ interface Cmd {
+ /**
+ * StdoutPipe returns a pipe that will be connected to the command's
+ * standard output when the command starts.
+ *
+ * [Cmd.Wait] will close the pipe after seeing the command exit, so most callers
+ * need not close the pipe themselves. It is thus incorrect to call Wait
+ * before all reads from the pipe have completed.
+ * For the same reason, it is incorrect to call [Cmd.Run] when using StdoutPipe.
+ * See the example for idiomatic usage.
+ */
+ stdoutPipe(): io.ReadCloser
+ }
+ interface Cmd {
+ /**
+ * StderrPipe returns a pipe that will be connected to the command's
+ * standard error when the command starts.
+ *
+ * [Cmd.Wait] will close the pipe after seeing the command exit, so most callers
+ * need not close the pipe themselves. It is thus incorrect to call Wait
+ * before all reads from the pipe have completed.
+ * For the same reason, it is incorrect to use [Cmd.Run] when using StderrPipe.
+ * See the StdoutPipe example for idiomatic usage.
+ */
+ stderrPipe(): io.ReadCloser
+ }
+ interface Cmd {
+ /**
+ * Environ returns a copy of the environment in which the command would be run
+ * as it is currently configured.
+ */
+ environ(): Array
+ }
+}
+
+/**
+ * Package blob provides an easy and portable way to interact with blobs
+ * within a storage location. Subpackages contain driver implementations of
+ * blob for supported services.
+ *
+ * See https://gocloud.dev/howto/blob/ for a detailed how-to guide.
+ *
+ * *blob.Bucket implements io/fs.FS and io/fs.SubFS, so it can be used with
+ * functions in that package.
+ *
+ * # Errors
+ *
+ * The errors returned from this package can be inspected in several ways:
+ *
+ * The Code function from gocloud.dev/gcerrors will return an error code, also
+ * defined in that package, when invoked on an error.
+ *
+ * The Bucket.ErrorAs method can retrieve the driver error underlying the returned
+ * error.
+ *
+ * # OpenCensus Integration
+ *
+ * OpenCensus supports tracing and metric collection for multiple languages and
+ * backend providers. See https://opencensus.io.
+ *
+ * This API collects OpenCensus traces and metrics for the following methods:
+ * ```
+ * - Attributes
+ * - Copy
+ * - Delete
+ * - ListPage
+ * - NewRangeReader, from creation until the call to Close. (NewReader and ReadAll
+ * are included because they call NewRangeReader.)
+ * - NewWriter, from creation until the call to Close.
+ * ```
+ *
+ * All trace and metric names begin with the package import path.
+ * The traces add the method name.
+ * For example, "gocloud.dev/blob/Attributes".
+ * The metrics are "completed_calls", a count of completed method calls by driver,
+ * method and status (error code); and "latency", a distribution of method latency
+ * by driver and method.
+ * For example, "gocloud.dev/blob/latency".
+ *
+ * It also collects the following metrics:
+ * ```
+ * - gocloud.dev/blob/bytes_read: the total number of bytes read, by driver.
+ * - gocloud.dev/blob/bytes_written: the total number of bytes written, by driver.
+ * ```
+ *
+ * To enable trace collection in your application, see "Configure Exporter" at
+ * https://opencensus.io/quickstart/go/tracing.
+ * To enable metric collection in your application, see "Exporting stats" at
+ * https://opencensus.io/quickstart/go/metrics.
+ */
+namespace blob {
+ /**
+ * Reader reads bytes from a blob.
+ * It implements io.ReadSeekCloser, and must be closed after
+ * reads are finished.
+ */
+ interface Reader {
+ }
+ interface Reader {
+ /**
+ * Read implements io.Reader (https://golang.org/pkg/io/#Reader).
+ */
+ read(p: string|Array): number
+ }
+ interface Reader {
+ /**
+ * Seek implements io.Seeker (https://golang.org/pkg/io/#Seeker).
+ */
+ seek(offset: number, whence: number): number
+ }
+ interface Reader {
+ /**
+ * Close implements io.Closer (https://golang.org/pkg/io/#Closer).
+ */
+ close(): void
+ }
+ interface Reader {
+ /**
+ * ContentType returns the MIME type of the blob.
+ */
+ contentType(): string
+ }
+ interface Reader {
+ /**
+ * ModTime returns the time the blob was last modified.
+ */
+ modTime(): time.Time
+ }
+ interface Reader {
+ /**
+ * Size returns the size of the blob content in bytes.
+ */
+ size(): number
+ }
+ interface Reader {
+ /**
+ * As converts i to driver-specific types.
+ * See https://gocloud.dev/concepts/as/ for background information, the "As"
+ * examples in this package for examples, and the driver package
+ * documentation for the specific types supported for that driver.
+ */
+ as(i: {
+ }): boolean
+ }
+ interface Reader {
+ /**
+ * WriteTo reads from r and writes to w until there's no more data or
+ * an error occurs.
+ * The return value is the number of bytes written to w.
+ *
+ * It implements the io.WriterTo interface.
+ */
+ writeTo(w: io.Writer): number
+ }
+ /**
+ * Attributes contains attributes about a blob.
+ */
+ interface Attributes {
+ /**
+ * CacheControl specifies caching attributes that services may use
+ * when serving the blob.
+ * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
+ */
+ cacheControl: string
+ /**
+ * ContentDisposition specifies whether the blob content is expected to be
+ * displayed inline or as an attachment.
+ * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition
+ */
+ contentDisposition: string
+ /**
+ * ContentEncoding specifies the encoding used for the blob's content, if any.
+ * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding
+ */
+ contentEncoding: string
+ /**
+ * ContentLanguage specifies the language used in the blob's content, if any.
+ * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Language
+ */
+ contentLanguage: string
+ /**
+ * ContentType is the MIME type of the blob. It will not be empty.
+ * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type
+ */
+ contentType: string
+ /**
+ * Metadata holds key/value pairs associated with the blob.
+ * Keys are guaranteed to be in lowercase, even if the backend service
+ * has case-sensitive keys (although note that Metadata written via
+ * this package will always be lowercased). If there are duplicate
+ * case-insensitive keys (e.g., "foo" and "FOO"), only one value
+ * will be kept, and it is undefined which one.
+ */
+ metadata: _TygojaDict
+ /**
+ * CreateTime is the time the blob was created, if available. If not available,
+ * CreateTime will be the zero time.
+ */
+ createTime: time.Time
+ /**
+ * ModTime is the time the blob was last modified.
+ */
+ modTime: time.Time
+ /**
+ * Size is the size of the blob's content in bytes.
+ */
+ size: number
+ /**
+ * MD5 is an MD5 hash of the blob contents or nil if not available.
+ */
+ md5: string|Array
+ /**
+ * ETag for the blob; see https://en.wikipedia.org/wiki/HTTP_ETag.
+ */
+ eTag: string
+ }
+ interface Attributes {
+ /**
+ * As converts i to driver-specific types.
+ * See https://gocloud.dev/concepts/as/ for background information, the "As"
+ * examples in this package for examples, and the driver package
+ * documentation for the specific types supported for that driver.
+ */
+ as(i: {
+ }): boolean
+ }
+ /**
+ * ListObject represents a single blob returned from List.
+ */
+ interface ListObject {
+ /**
+ * Key is the key for this blob.
+ */
+ key: string
+ /**
+ * ModTime is the time the blob was last modified.
+ */
+ modTime: time.Time
+ /**
+ * Size is the size of the blob's content in bytes.
+ */
+ size: number
+ /**
+ * MD5 is an MD5 hash of the blob contents or nil if not available.
+ */
+ md5: string|Array
+ /**
+ * IsDir indicates that this result represents a "directory" in the
+ * hierarchical namespace, ending in ListOptions.Delimiter. Key can be
+ * passed as ListOptions.Prefix to list items in the "directory".
+ * Fields other than Key and IsDir will not be set if IsDir is true.
+ */
+ isDir: boolean
+ }
+ interface ListObject {
+ /**
+ * As converts i to driver-specific types.
+ * See https://gocloud.dev/concepts/as/ for background information, the "As"
+ * examples in this package for examples, and the driver package
+ * documentation for the specific types supported for that driver.
+ */
+ as(i: {
+ }): boolean
+ }
+}
+
+/**
+ * Package schema implements custom Schema and SchemaField datatypes
+ * for handling the Collection schema definitions.
+ */
+namespace schema {
+ // @ts-ignore
+ import validation = ozzo_validation
+ /**
+ * Schema defines a dynamic db schema as a slice of `SchemaField`s.
+ */
+ interface Schema {
+ }
+ interface Schema {
+ /**
+ * Fields returns the registered schema fields.
+ */
+ fields(): Array<(SchemaField | undefined)>
+ }
+ interface Schema {
+ /**
+ * InitFieldsOptions calls `InitOptions()` for all schema fields.
+ */
+ initFieldsOptions(): void
+ }
+ interface Schema {
+ /**
+ * Clone creates a deep clone of the current schema.
+ */
+ clone(): (Schema)
+ }
+ interface Schema {
+ /**
+ * AsMap returns a map with all registered schema field.
+ * The returned map is indexed with each field name.
+ */
+ asMap(): _TygojaDict
+ }
+ interface Schema {
+ /**
+ * GetFieldById returns a single field by its id.
+ */
+ getFieldById(id: string): (SchemaField)
+ }
+ interface Schema {
+ /**
+ * GetFieldByName returns a single field by its name.
+ */
+ getFieldByName(name: string): (SchemaField)
+ }
+ interface Schema {
+ /**
+ * RemoveField removes a single schema field by its id.
+ *
+ * This method does nothing if field with `id` doesn't exist.
+ */
+ removeField(id: string): void
+ }
+ interface Schema {
+ /**
+ * AddField registers the provided newField to the current schema.
+ *
+ * If field with `newField.Id` already exist, the existing field is
+ * replaced with the new one.
+ *
+ * Otherwise the new field is appended to the other schema fields.
+ */
+ addField(newField: SchemaField): void
+ }
+ interface Schema {
+ /**
+ * Validate makes Schema validatable by implementing [validation.Validatable] interface.
+ *
+ * Internally calls each individual field's validator and additionally
+ * checks for invalid renamed fields and field name duplications.
+ */
+ validate(): void
+ }
+ interface Schema {
+ /**
+ * MarshalJSON implements the [json.Marshaler] interface.
+ */
+ marshalJSON(): string|Array
+ }
+ interface Schema {
+ /**
+ * UnmarshalJSON implements the [json.Unmarshaler] interface.
+ *
+ * On success, all schema field options are auto initialized.
+ */
+ unmarshalJSON(data: string|Array): void
+ }
+ interface Schema {
+ /**
+ * Value implements the [driver.Valuer] interface.
+ */
+ value(): any
+ }
+ interface Schema {
+ /**
+ * Scan implements [sql.Scanner] interface to scan the provided value
+ * into the current Schema instance.
+ */
+ scan(value: any): void
+ }
+}
+
+/**
+ * Package models implements all PocketBase DB models and DTOs.
+ */
+namespace models {
+ type _subdxrsi = BaseModel
+ interface Admin extends _subdxrsi {
+ avatar: number
+ email: string
+ tokenKey: string
+ passwordHash: string
+ lastResetSentAt: types.DateTime
+ }
+ interface Admin {
+ /**
+ * TableName returns the Admin model SQL table name.
+ */
+ tableName(): string
+ }
+ interface Admin {
+ /**
+ * ValidatePassword validates a plain password against the model's password.
+ */
+ validatePassword(password: string): boolean
+ }
+ interface Admin {
+ /**
+ * SetPassword sets cryptographically secure string to `model.Password`.
+ *
+ * Additionally this method also resets the LastResetSentAt and the TokenKey fields.
+ */
+ setPassword(password: string): void
+ }
+ interface Admin {
+ /**
+ * RefreshTokenKey generates and sets new random token key.
+ */
+ refreshTokenKey(): void
+ }
+ // @ts-ignore
+ import validation = ozzo_validation
+ type _subzAftL = BaseModel
+ interface Collection extends _subzAftL {
+ name: string
+ type: string
+ system: boolean
+ schema: schema.Schema
+ indexes: types.JsonArray
+ /**
+ * rules
+ */
+ listRule?: string
+ viewRule?: string
+ createRule?: string
+ updateRule?: string
+ deleteRule?: string
+ options: types.JsonMap
+ }
+ interface Collection {
+ /**
+ * TableName returns the Collection model SQL table name.
+ */
+ tableName(): string
+ }
+ interface Collection {
+ /**
+ * BaseFilesPath returns the storage dir path used by the collection.
+ */
+ baseFilesPath(): string
+ }
+ interface Collection {
+ /**
+ * IsBase checks if the current collection has "base" type.
+ */
+ isBase(): boolean
+ }
+ interface Collection {
+ /**
+ * IsAuth checks if the current collection has "auth" type.
+ */
+ isAuth(): boolean
+ }
+ interface Collection {
+ /**
+ * IsView checks if the current collection has "view" type.
+ */
+ isView(): boolean
+ }
+ interface Collection {
+ /**
+ * MarshalJSON implements the [json.Marshaler] interface.
+ */
+ marshalJSON(): string|Array
+ }
+ interface Collection {
+ /**
+ * BaseOptions decodes the current collection options and returns them
+ * as new [CollectionBaseOptions] instance.
+ */
+ baseOptions(): CollectionBaseOptions
+ }
+ interface Collection {
+ /**
+ * AuthOptions decodes the current collection options and returns them
+ * as new [CollectionAuthOptions] instance.
+ */
+ authOptions(): CollectionAuthOptions
+ }
+ interface Collection {
+ /**
+ * ViewOptions decodes the current collection options and returns them
+ * as new [CollectionViewOptions] instance.
+ */
+ viewOptions(): CollectionViewOptions
+ }
+ interface Collection {
+ /**
+ * NormalizeOptions updates the current collection options with a
+ * new normalized state based on the collection type.
+ */
+ normalizeOptions(): void
+ }
+ interface Collection {
+ /**
+ * DecodeOptions decodes the current collection options into the
+ * provided "result" (must be a pointer).
+ */
+ decodeOptions(result: any): void
+ }
+ interface Collection {
+ /**
+ * SetOptions normalizes and unmarshals the specified options into m.Options.
+ */
+ setOptions(typedOptions: any): void
+ }
+ type _sublegJO = BaseModel
+ interface ExternalAuth extends _sublegJO {
+ collectionId: string
+ recordId: string
+ provider: string
+ providerId: string
+ }
+ interface ExternalAuth {
+ tableName(): string
+ }
+ type _subFBhFW = BaseModel
+ interface Record extends _subFBhFW {
+ }
+ interface Record {
+ /**
+ * TableName returns the table name associated to the current Record model.
+ */
+ tableName(): string
+ }
+ interface Record {
+ /**
+ * Collection returns the Collection model associated to the current Record model.
+ */
+ collection(): (Collection)
+ }
+ interface Record {
+ /**
+ * OriginalCopy returns a copy of the current record model populated
+ * with its ORIGINAL data state (aka. the initially loaded) and
+ * everything else reset to the defaults.
+ */
+ originalCopy(): (Record)
+ }
+ interface Record {
+ /**
+ * CleanCopy returns a copy of the current record model populated only
+ * with its LATEST data state and everything else reset to the defaults.
+ */
+ cleanCopy(): (Record)
+ }
+ interface Record {
+ /**
+ * Expand returns a shallow copy of the current Record model expand data.
+ */
+ expand(): _TygojaDict
+ }
+ interface Record {
+ /**
+ * SetExpand shallow copies the provided data to the current Record model's expand.
+ */
+ setExpand(expand: _TygojaDict): void
+ }
+ interface Record {
+ /**
+ * MergeExpand merges recursively the provided expand data into
+ * the current model's expand (if any).
+ *
+ * Note that if an expanded prop with the same key is a slice (old or new expand)
+ * then both old and new records will be merged into a new slice (aka. a :merge: [b,c] => [a,b,c]).
+ * Otherwise the "old" expanded record will be replace with the "new" one (aka. a :merge: aNew => aNew).
+ */
+ mergeExpand(expand: _TygojaDict): void
+ }
+ interface Record {
+ /**
+ * SchemaData returns a shallow copy ONLY of the defined record schema fields data.
+ */
+ schemaData(): _TygojaDict
+ }
+ interface Record {
+ /**
+ * UnknownData returns a shallow copy ONLY of the unknown record fields data,
+ * aka. fields that are neither one of the base and special system ones,
+ * nor defined by the collection schema.
+ */
+ unknownData(): _TygojaDict
+ }
+ interface Record {
+ /**
+ * IgnoreEmailVisibility toggles the flag to ignore the auth record email visibility check.
+ */
+ ignoreEmailVisibility(state: boolean): void
+ }
+ interface Record {
+ /**
+ * WithUnknownData toggles the export/serialization of unknown data fields
+ * (false by default).
+ */
+ withUnknownData(state: boolean): void
+ }
+ interface Record {
+ /**
+ * Set sets the provided key-value data pair for the current Record model.
+ *
+ * If the record collection has field with name matching the provided "key",
+ * the value will be further normalized according to the field rules.
+ */
+ set(key: string, value: any): void
+ }
+ interface Record {
+ /**
+ * Get returns a normalized single record model data value for "key".
+ */
+ get(key: string): any
+ }
+ interface Record {
+ /**
+ * GetBool returns the data value for "key" as a bool.
+ */
+ getBool(key: string): boolean
+ }
+ interface Record {
+ /**
+ * GetString returns the data value for "key" as a string.
+ */
+ getString(key: string): string
+ }
+ interface Record {
+ /**
+ * GetInt returns the data value for "key" as an int.
+ */
+ getInt(key: string): number
+ }
+ interface Record {
+ /**
+ * GetFloat returns the data value for "key" as a float64.
+ */
+ getFloat(key: string): number
+ }
+ interface Record {
+ /**
+ * GetTime returns the data value for "key" as a [time.Time] instance.
+ */
+ getTime(key: string): time.Time
+ }
+ interface Record {
+ /**
+ * GetDateTime returns the data value for "key" as a DateTime instance.
+ */
+ getDateTime(key: string): types.DateTime
+ }
+ interface Record {
+ /**
+ * GetStringSlice returns the data value for "key" as a slice of unique strings.
+ */
+ getStringSlice(key: string): Array
+ }
+ interface Record {
+ /**
+ * ExpandedOne retrieves a single relation Record from the already
+ * loaded expand data of the current model.
+ *
+ * If the requested expand relation is multiple, this method returns
+ * only first available Record from the expanded relation.
+ *
+ * Returns nil if there is no such expand relation loaded.
+ */
+ expandedOne(relField: string): (Record)
+ }
+ interface Record {
+ /**
+ * ExpandedAll retrieves a slice of relation Records from the already
+ * loaded expand data of the current model.
+ *
+ * If the requested expand relation is single, this method normalizes
+ * the return result and will wrap the single model as a slice.
+ *
+ * Returns nil slice if there is no such expand relation loaded.
+ */
+ expandedAll(relField: string): Array<(Record | undefined)>
+ }
+ interface Record {
+ /**
+ * Retrieves the "key" json field value and unmarshals it into "result".
+ *
+ * Example
+ *
+ * ```
+ * result := struct {
+ * FirstName string `json:"first_name"`
+ * }{}
+ * err := m.UnmarshalJSONField("my_field_name", &result)
+ * ```
+ */
+ unmarshalJSONField(key: string, result: any): void
+ }
+ interface Record {
+ /**
+ * BaseFilesPath returns the storage dir path used by the record.
+ */
+ baseFilesPath(): string
+ }
+ interface Record {
+ /**
+ * FindFileFieldByFile returns the first file type field for which
+ * any of the record's data contains the provided filename.
+ */
+ findFileFieldByFile(filename: string): (schema.SchemaField)
+ }
+ interface Record {
+ /**
+ * Load bulk loads the provided data into the current Record model.
+ */
+ load(data: _TygojaDict): void
+ }
+ interface Record {
+ /**
+ * ColumnValueMap implements [ColumnValueMapper] interface.
+ */
+ columnValueMap(): _TygojaDict
+ }
+ interface Record {
+ /**
+ * PublicExport exports only the record fields that are safe to be public.
+ *
+ * For auth records, to force the export of the email field you need to set
+ * `m.IgnoreEmailVisibility(true)`.
+ */
+ publicExport(): _TygojaDict
+ }
+ interface Record {
+ /**
+ * MarshalJSON implements the [json.Marshaler] interface.
+ *
+ * Only the data exported by `PublicExport()` will be serialized.
+ */
+ marshalJSON(): string|Array
+ }
+ interface Record {
+ /**
+ * UnmarshalJSON implements the [json.Unmarshaler] interface.
+ */
+ unmarshalJSON(data: string|Array): void
+ }
+ interface Record {
+ /**
+ * ReplaceModifers returns a new map with applied modifier
+ * values based on the current record and the specified data.
+ *
+ * The resolved modifier keys will be removed.
+ *
+ * Multiple modifiers will be applied one after another,
+ * while reusing the previous base key value result (eg. 1; -5; +2 => -2).
+ *
+ * Example usage:
+ *
+ * ```
+ * newData := record.ReplaceModifers(data)
+ * // record: {"field": 10}
+ * // data: {"field+": 5}
+ * // newData: {"field": 15}
+ * ```
+ */
+ replaceModifers(data: _TygojaDict): _TygojaDict
+ }
+ interface Record {
+ /**
+ * Username returns the "username" auth record data value.
+ */
+ username(): string
+ }
+ interface Record {
+ /**
+ * SetUsername sets the "username" auth record data value.
+ *
+ * This method doesn't check whether the provided value is a valid username.
+ *
+ * Returns an error if the record is not from an auth collection.
+ */
+ setUsername(username: string): void
+ }
+ interface Record {
+ /**
+ * Email returns the "email" auth record data value.
+ */
+ email(): string
+ }
+ interface Record {
+ /**
+ * SetEmail sets the "email" auth record data value.
+ *
+ * This method doesn't check whether the provided value is a valid email.
+ *
+ * Returns an error if the record is not from an auth collection.
+ */
+ setEmail(email: string): void
+ }
+ interface Record {
+ /**
+ * Verified returns the "emailVisibility" auth record data value.
+ */
+ emailVisibility(): boolean
+ }
+ interface Record {
+ /**
+ * SetEmailVisibility sets the "emailVisibility" auth record data value.
+ *
+ * Returns an error if the record is not from an auth collection.
+ */
+ setEmailVisibility(visible: boolean): void
+ }
+ interface Record {
+ /**
+ * Verified returns the "verified" auth record data value.
+ */
+ verified(): boolean
+ }
+ interface Record {
+ /**
+ * SetVerified sets the "verified" auth record data value.
+ *
+ * Returns an error if the record is not from an auth collection.
+ */
+ setVerified(verified: boolean): void
+ }
+ interface Record {
+ /**
+ * TokenKey returns the "tokenKey" auth record data value.
+ */
+ tokenKey(): string
+ }
+ interface Record {
+ /**
+ * SetTokenKey sets the "tokenKey" auth record data value.
+ *
+ * Returns an error if the record is not from an auth collection.
+ */
+ setTokenKey(key: string): void
+ }
+ interface Record {
+ /**
+ * RefreshTokenKey generates and sets new random auth record "tokenKey".
+ *
+ * Returns an error if the record is not from an auth collection.
+ */
+ refreshTokenKey(): void
+ }
+ interface Record {
+ /**
+ * LastResetSentAt returns the "lastResentSentAt" auth record data value.
+ */
+ lastResetSentAt(): types.DateTime
+ }
+ interface Record {
+ /**
+ * SetLastResetSentAt sets the "lastResentSentAt" auth record data value.
+ *
+ * Returns an error if the record is not from an auth collection.
+ */
+ setLastResetSentAt(dateTime: types.DateTime): void
+ }
+ interface Record {
+ /**
+ * LastVerificationSentAt returns the "lastVerificationSentAt" auth record data value.
+ */
+ lastVerificationSentAt(): types.DateTime
+ }
+ interface Record {
+ /**
+ * SetLastVerificationSentAt sets an "lastVerificationSentAt" auth record data value.
+ *
+ * Returns an error if the record is not from an auth collection.
+ */
+ setLastVerificationSentAt(dateTime: types.DateTime): void
+ }
+ interface Record {
+ /**
+ * LastLoginAlertSentAt returns the "lastLoginAlertSentAt" auth record data value.
+ */
+ lastLoginAlertSentAt(): types.DateTime
+ }
+ interface Record {
+ /**
+ * SetLastLoginAlertSentAt sets an "lastLoginAlertSentAt" auth record data value.
+ *
+ * Returns an error if the record is not from an auth collection.
+ */
+ setLastLoginAlertSentAt(dateTime: types.DateTime): void
+ }
+ interface Record {
+ /**
+ * PasswordHash returns the "passwordHash" auth record data value.
+ */
+ passwordHash(): string
+ }
+ interface Record {
+ /**
+ * ValidatePassword validates a plain password against the auth record password.
+ *
+ * Returns false if the password is incorrect or record is not from an auth collection.
+ */
+ validatePassword(password: string): boolean
+ }
+ interface Record {
+ /**
+ * SetPassword sets cryptographically secure string to the auth record "password" field.
+ * This method also resets the "lastResetSentAt" and the "tokenKey" fields.
+ *
+ * Returns an error if the record is not from an auth collection or
+ * an empty password is provided.
+ */
+ setPassword(password: string): void
+ }
+ /**
+ * RequestInfo defines a HTTP request data struct, usually used
+ * as part of the `@request.*` filter resolver.
+ */
+ interface RequestInfo {
+ context: string
+ query: _TygojaDict
+ data: _TygojaDict
+ headers: _TygojaDict
+ authRecord?: Record
+ admin?: Admin
+ method: string
+ }
+ interface RequestInfo {
+ /**
+ * HasModifierDataKeys loosely checks if the current struct has any modifier Data keys.
+ */
+ hasModifierDataKeys(): boolean
+ }
+}
+
+namespace settings {
+ // @ts-ignore
+ import validation = ozzo_validation
+ /**
+ * Settings defines common app configuration options.
+ */
+ interface Settings {
+ meta: MetaConfig
+ logs: LogsConfig
+ smtp: SmtpConfig
+ s3: S3Config
+ backups: BackupsConfig
+ adminAuthToken: TokenConfig
+ adminPasswordResetToken: TokenConfig
+ adminFileToken: TokenConfig
+ recordAuthToken: TokenConfig
+ recordPasswordResetToken: TokenConfig
+ recordEmailChangeToken: TokenConfig
+ recordVerificationToken: TokenConfig
+ recordFileToken: TokenConfig
+ /**
+ * Deprecated: Will be removed in v0.9+
+ */
+ emailAuth: EmailAuthConfig
+ googleAuth: AuthProviderConfig
+ facebookAuth: AuthProviderConfig
+ githubAuth: AuthProviderConfig
+ gitlabAuth: AuthProviderConfig
+ discordAuth: AuthProviderConfig
+ twitterAuth: AuthProviderConfig
+ microsoftAuth: AuthProviderConfig
+ spotifyAuth: AuthProviderConfig
+ kakaoAuth: AuthProviderConfig
+ twitchAuth: AuthProviderConfig
+ stravaAuth: AuthProviderConfig
+ giteeAuth: AuthProviderConfig
+ livechatAuth: AuthProviderConfig
+ giteaAuth: AuthProviderConfig
+ oidcAuth: AuthProviderConfig
+ oidc2Auth: AuthProviderConfig
+ oidc3Auth: AuthProviderConfig
+ appleAuth: AuthProviderConfig
+ instagramAuth: AuthProviderConfig
+ vkAuth: AuthProviderConfig
+ yandexAuth: AuthProviderConfig
+ patreonAuth: AuthProviderConfig
+ mailcowAuth: AuthProviderConfig
+ bitbucketAuth: AuthProviderConfig
+ planningcenterAuth: AuthProviderConfig
+ }
+ interface Settings {
+ /**
+ * Validate makes Settings validatable by implementing [validation.Validatable] interface.
+ */
+ validate(): void
+ }
+ interface Settings {
+ /**
+ * Merge merges `other` settings into the current one.
+ */
+ merge(other: Settings): void
+ }
+ interface Settings {
+ /**
+ * Clone creates a new deep copy of the current settings.
+ */
+ clone(): (Settings)
+ }
+ interface Settings {
+ /**
+ * RedactClone creates a new deep copy of the current settings,
+ * while replacing the secret values with `******`.
+ */
+ redactClone(): (Settings)
+ }
+ interface Settings {
+ /**
+ * NamedAuthProviderConfigs returns a map with all registered OAuth2
+ * provider configurations (indexed by their name identifier).
+ */
+ namedAuthProviderConfigs(): _TygojaDict
+ }
+}
+
+/**
+ * Package daos handles common PocketBase DB model manipulations.
+ *
+ * Think of daos as DB repository and service layer in one.
+ */
+namespace daos {
+ interface Dao {
+ /**
+ * AdminQuery returns a new Admin select query.
+ */
+ adminQuery(): (dbx.SelectQuery)
+ }
+ interface Dao {
+ /**
+ * FindAdminById finds the admin with the provided id.
+ */
+ findAdminById(id: string): (models.Admin)
+ }
+ interface Dao {
+ /**
+ * FindAdminByEmail finds the admin with the provided email address.
+ */
+ findAdminByEmail(email: string): (models.Admin)
+ }
+ interface Dao {
+ /**
+ * FindAdminByToken finds the admin associated with the provided JWT.
+ *
+ * Returns an error if the JWT is invalid or expired.
+ */
+ findAdminByToken(token: string, baseTokenKey: string): (models.Admin)
+ }
+ interface Dao {
+ /**
+ * TotalAdmins returns the number of existing admin records.
+ */
+ totalAdmins(): number
+ }
+ interface Dao {
+ /**
+ * IsAdminEmailUnique checks if the provided email address is not
+ * already in use by other admins.
+ */
+ isAdminEmailUnique(email: string, ...excludeIds: string[]): boolean
+ }
+ interface Dao {
+ /**
+ * DeleteAdmin deletes the provided Admin model.
+ *
+ * Returns an error if there is only 1 admin.
+ */
+ deleteAdmin(admin: models.Admin): void
+ }
+ interface Dao {
+ /**
+ * SaveAdmin upserts the provided Admin model.
+ */
+ saveAdmin(admin: models.Admin): void
+ }
+ /**
+ * Dao handles various db operations.
+ *
+ * You can think of Dao as a repository and service layer in one.
+ */
+ interface Dao {
+ /**
+ * MaxLockRetries specifies the default max "database is locked" auto retry attempts.
+ */
+ maxLockRetries: number
+ /**
+ * ModelQueryTimeout is the default max duration of a running ModelQuery().
+ *
+ * This field has no effect if an explicit query context is already specified.
+ */
+ modelQueryTimeout: time.Duration
+ /**
+ * write hooks
+ */
+ beforeCreateFunc: (eventDao: Dao, m: models.Model, action: () => void) => void
+ afterCreateFunc: (eventDao: Dao, m: models.Model) => void
+ beforeUpdateFunc: (eventDao: Dao, m: models.Model, action: () => void) => void
+ afterUpdateFunc: (eventDao: Dao, m: models.Model) => void
+ beforeDeleteFunc: (eventDao: Dao, m: models.Model, action: () => void) => void
+ afterDeleteFunc: (eventDao: Dao, m: models.Model) => void
+ }
+ interface Dao {
+ /**
+ * DB returns the default dao db builder (*dbx.DB or *dbx.TX).
+ *
+ * Currently the default db builder is dao.concurrentDB but that may change in the future.
+ */
+ db(): dbx.Builder
+ }
+ interface Dao {
+ /**
+ * ConcurrentDB returns the dao concurrent (aka. multiple open connections)
+ * db builder (*dbx.DB or *dbx.TX).
+ *
+ * In a transaction the concurrentDB and nonconcurrentDB refer to the same *dbx.TX instance.
+ */
+ concurrentDB(): dbx.Builder
+ }
+ interface Dao {
+ /**
+ * NonconcurrentDB returns the dao nonconcurrent (aka. single open connection)
+ * db builder (*dbx.DB or *dbx.TX).
+ *
+ * In a transaction the concurrentDB and nonconcurrentDB refer to the same *dbx.TX instance.
+ */
+ nonconcurrentDB(): dbx.Builder
+ }
+ interface Dao {
+ /**
+ * Clone returns a new Dao with the same configuration options as the current one.
+ */
+ clone(): (Dao)
+ }
+ interface Dao {
+ /**
+ * WithoutHooks returns a new Dao with the same configuration options
+ * as the current one, but without create/update/delete hooks.
+ */
+ withoutHooks(): (Dao)
+ }
+ interface Dao {
+ /**
+ * ModelQuery creates a new preconfigured select query with preset
+ * SELECT, FROM and other common fields based on the provided model.
+ */
+ modelQuery(m: models.Model): (dbx.SelectQuery)
+ }
+ interface Dao {
+ /**
+ * FindById finds a single db record with the specified id and
+ * scans the result into m.
+ */
+ findById(m: models.Model, id: string): void
+ }
+ interface Dao {
+ /**
+ * RunInTransaction wraps fn into a transaction.
+ *
+ * It is safe to nest RunInTransaction calls as long as you use the txDao.
+ */
+ runInTransaction(fn: (txDao: Dao) => void): void
+ }
+ interface Dao {
+ /**
+ * Delete deletes the provided model.
+ */
+ delete(m: models.Model): void
+ }
+ interface Dao {
+ /**
+ * Save persists the provided model in the database.
+ *
+ * If m.IsNew() is true, the method will perform a create, otherwise an update.
+ * To explicitly mark a model for update you can use m.MarkAsNotNew().
+ */
+ save(m: models.Model): void
+ }
+ interface Dao {
+ /**
+ * CollectionQuery returns a new Collection select query.
+ */
+ collectionQuery(): (dbx.SelectQuery)
+ }
+ interface Dao {
+ /**
+ * FindCollectionsByType finds all collections by the given type.
+ */
+ findCollectionsByType(collectionType: string): Array<(models.Collection | undefined)>
+ }
+ interface Dao {
+ /**
+ * FindCollectionByNameOrId finds a single collection by its name (case insensitive) or id.
+ */
+ findCollectionByNameOrId(nameOrId: string): (models.Collection)
+ }
+ interface Dao {
+ /**
+ * IsCollectionNameUnique checks that there is no existing collection
+ * with the provided name (case insensitive!).
+ *
+ * Note: case insensitive check because the name is used also as a table name for the records.
+ */
+ isCollectionNameUnique(name: string, ...excludeIds: string[]): boolean
+ }
+ interface Dao {
+ /**
+ * FindCollectionReferences returns information for all
+ * relation schema fields referencing the provided collection.
+ *
+ * If the provided collection has reference to itself then it will be
+ * also included in the result. To exclude it, pass the collection id
+ * as the excludeId argument.
+ */
+ findCollectionReferences(collection: models.Collection, ...excludeIds: string[]): _TygojaDict
+ }
+ interface Dao {
+ /**
+ * DeleteCollection deletes the provided Collection model.
+ * This method automatically deletes the related collection records table.
+ *
+ * NB! The collection cannot be deleted, if:
+ * - is system collection (aka. collection.System is true)
+ * - is referenced as part of a relation field in another collection
+ */
+ deleteCollection(collection: models.Collection): void
+ }
+ interface Dao {
+ /**
+ * SaveCollection persists the provided Collection model and updates
+ * its related records table schema.
+ *
+ * If collection.IsNew() is true, the method will perform a create, otherwise an update.
+ * To explicitly mark a collection for update you can use collection.MarkAsNotNew().
+ */
+ saveCollection(collection: models.Collection): void
+ }
+ interface Dao {
+ /**
+ * ImportCollections imports the provided collections list within a single transaction.
+ *
+ * NB1! If deleteMissing is set, all local collections and schema fields, that are not present
+ * in the imported configuration, WILL BE DELETED (including their related records data).
+ *
+ * NB2! This method doesn't perform validations on the imported collections data!
+ * If you need validations, use [forms.CollectionsImport].
+ */
+ importCollections(importedCollections: Array<(models.Collection | undefined)>, deleteMissing: boolean, afterSync: (txDao: Dao, mappedImported: _TygojaDict, mappedExisting: _TygojaDict) => void): void
+ }
+ interface Dao {
+ /**
+ * ExternalAuthQuery returns a new ExternalAuth select query.
+ */
+ externalAuthQuery(): (dbx.SelectQuery)
+ }
+ interface Dao {
+ /**
+ * FindAllExternalAuthsByRecord returns all ExternalAuth models
+ * linked to the provided auth record.
+ */
+ findAllExternalAuthsByRecord(authRecord: models.Record): Array<(models.ExternalAuth | undefined)>
+ }
+ interface Dao {
+ /**
+ * FindExternalAuthByRecordAndProvider returns the first available
+ * ExternalAuth model for the specified record data and provider.
+ */
+ findExternalAuthByRecordAndProvider(authRecord: models.Record, provider: string): (models.ExternalAuth)
+ }
+ interface Dao {
+ /**
+ * FindFirstExternalAuthByExpr returns the first available
+ * ExternalAuth model that satisfies the non-nil expression.
+ */
+ findFirstExternalAuthByExpr(expr: dbx.Expression): (models.ExternalAuth)
+ }
+ interface Dao {
+ /**
+ * SaveExternalAuth upserts the provided ExternalAuth model.
+ */
+ saveExternalAuth(model: models.ExternalAuth): void
+ }
+ interface Dao {
+ /**
+ * DeleteExternalAuth deletes the provided ExternalAuth model.
+ */
+ deleteExternalAuth(model: models.ExternalAuth): void
+ }
+ interface Dao {
+ /**
+ * LogQuery returns a new Log select query.
+ */
+ logQuery(): (dbx.SelectQuery)
+ }
+ interface Dao {
+ /**
+ * FindLogById finds a single Log entry by its id.
+ */
+ findLogById(id: string): (models.Log)
+ }
+ interface Dao {
+ /**
+ * LogsStats returns hourly grouped requests logs statistics.
+ */
+ logsStats(expr: dbx.Expression): Array<(LogsStatsItem | undefined)>
+ }
+ interface Dao {
+ /**
+ * DeleteOldLogs delete all requests that are created before createdBefore.
+ */
+ deleteOldLogs(createdBefore: time.Time): void
+ }
+ interface Dao {
+ /**
+ * SaveLog upserts the provided Log model.
+ */
+ saveLog(log: models.Log): void
+ }
+ interface Dao {
+ /**
+ * ParamQuery returns a new Param select query.
+ */
+ paramQuery(): (dbx.SelectQuery)
+ }
+ interface Dao {
+ /**
+ * FindParamByKey finds the first Param model with the provided key.
+ */
+ findParamByKey(key: string): (models.Param)
+ }
+ interface Dao {
+ /**
+ * SaveParam creates or updates a Param model by the provided key-value pair.
+ * The value argument will be encoded as json string.
+ *
+ * If `optEncryptionKey` is provided it will encrypt the value before storing it.
+ */
+ saveParam(key: string, value: any, ...optEncryptionKey: string[]): void
+ }
+ interface Dao {
+ /**
+ * DeleteParam deletes the provided Param model.
+ */
+ deleteParam(param: models.Param): void
+ }
+ interface Dao {
+ /**
+ * RecordQuery returns a new Record select query from a collection model, id or name.
+ *
+ * In case a collection id or name is provided and that collection doesn't
+ * actually exists, the generated query will be created with a cancelled context
+ * and will fail once an executor (Row(), One(), All(), etc.) is called.
+ */
+ recordQuery(collectionModelOrIdentifier: any): (dbx.SelectQuery)
+ }
+ interface Dao {
+ /**
+ * FindRecordById finds the Record model by its id.
+ */
+ findRecordById(collectionNameOrId: string, recordId: string, ...optFilters: ((q: dbx.SelectQuery) => void)[]): (models.Record)
+ }
+ interface Dao {
+ /**
+ * FindRecordsByIds finds all Record models by the provided ids.
+ * If no records are found, returns an empty slice.
+ */
+ findRecordsByIds(collectionNameOrId: string, recordIds: Array, ...optFilters: ((q: dbx.SelectQuery) => void)[]): Array<(models.Record | undefined)>
+ }
+ interface Dao {
+ /**
+ * FindRecordsByExpr finds all records by the specified db expression.
+ *
+ * Returns all collection records if no expressions are provided.
+ *
+ * Returns an empty slice if no records are found.
+ *
+ * Example:
+ *
+ * ```
+ * expr1 := dbx.HashExp{"email": "test@example.com"}
+ * expr2 := dbx.NewExp("LOWER(username) = {:username}", dbx.Params{"username": "test"})
+ * dao.FindRecordsByExpr("example", expr1, expr2)
+ * ```
+ */
+ findRecordsByExpr(collectionNameOrId: string, ...exprs: dbx.Expression[]): Array<(models.Record | undefined)>
+ }
+ interface Dao {
+ /**
+ * FindFirstRecordByData returns the first found record matching
+ * the provided key-value pair.
+ */
+ findFirstRecordByData(collectionNameOrId: string, key: string, value: any): (models.Record)
+ }
+ interface Dao {
+ /**
+ * FindRecordsByFilter returns limit number of records matching the
+ * provided string filter.
+ *
+ * NB! Use the last "params" argument to bind untrusted user variables!
+ *
+ * The sort argument is optional and can be empty string OR the same format
+ * used in the web APIs, eg. "-created,title".
+ *
+ * If the limit argument is <= 0, no limit is applied to the query and
+ * all matching records are returned.
+ *
+ * Example:
+ *
+ * ```
+ * dao.FindRecordsByFilter(
+ * "posts",
+ * "title ~ {:title} && visible = {:visible}",
+ * "-created",
+ * 10,
+ * 0,
+ * dbx.Params{"title": "lorem ipsum", "visible": true}
+ * )
+ * ```
+ */
+ findRecordsByFilter(collectionNameOrId: string, filter: string, sort: string, limit: number, offset: number, ...params: dbx.Params[]): Array<(models.Record | undefined)>
+ }
+ interface Dao {
+ /**
+ * FindFirstRecordByFilter returns the first available record matching the provided filter.
+ *
+ * NB! Use the last params argument to bind untrusted user variables!
+ *
+ * Example:
+ *
+ * ```
+ * dao.FindFirstRecordByFilter("posts", "slug={:slug} && status='public'", dbx.Params{"slug": "test"})
+ * ```
+ */
+ findFirstRecordByFilter(collectionNameOrId: string, filter: string, ...params: dbx.Params[]): (models.Record)
+ }
+ interface Dao {
+ /**
+ * IsRecordValueUnique checks if the provided key-value pair is a unique Record value.
+ *
+ * For correctness, if the collection is "auth" and the key is "username",
+ * the unique check will be case insensitive.
+ *
+ * NB! Array values (eg. from multiple select fields) are matched
+ * as a serialized json strings (eg. `["a","b"]`), so the value uniqueness
+ * depends on the elements order. Or in other words the following values
+ * are considered different: `[]string{"a","b"}` and `[]string{"b","a"}`
+ */
+ isRecordValueUnique(collectionNameOrId: string, key: string, value: any, ...excludeIds: string[]): boolean
+ }
+ interface Dao {
+ /**
+ * FindAuthRecordByToken finds the auth record associated with the provided JWT.
+ *
+ * Returns an error if the JWT is invalid, expired or not associated to an auth collection record.
+ */
+ findAuthRecordByToken(token: string, baseTokenKey: string): (models.Record)
+ }
+ interface Dao {
+ /**
+ * FindAuthRecordByEmail finds the auth record associated with the provided email.
+ *
+ * Returns an error if it is not an auth collection or the record is not found.
+ */
+ findAuthRecordByEmail(collectionNameOrId: string, email: string): (models.Record)
+ }
+ interface Dao {
+ /**
+ * FindAuthRecordByUsername finds the auth record associated with the provided username (case insensitive).
+ *
+ * Returns an error if it is not an auth collection or the record is not found.
+ */
+ findAuthRecordByUsername(collectionNameOrId: string, username: string): (models.Record)
+ }
+ interface Dao {
+ /**
+ * SuggestUniqueAuthRecordUsername checks if the provided username is unique
+ * and return a new "unique" username with appended random numeric part
+ * (eg. "existingName" -> "existingName583").
+ *
+ * The same username will be returned if the provided string is already unique.
+ */
+ suggestUniqueAuthRecordUsername(collectionNameOrId: string, baseUsername: string, ...excludeIds: string[]): string
+ }
+ interface Dao {
+ /**
+ * CanAccessRecord checks if a record is allowed to be accessed by the
+ * specified requestInfo and accessRule.
+ *
+ * Rule and db checks are ignored in case requestInfo.Admin is set.
+ *
+ * The returned error indicate that something unexpected happened during
+ * the check (eg. invalid rule or db error).
+ *
+ * The method always return false on invalid access rule or db error.
+ *
+ * Example:
+ *
+ * ```
+ * requestInfo := apis.RequestInfo(c /* echo.Context *\/)
+ * record, _ := dao.FindRecordById("example", "RECORD_ID")
+ * rule := types.Pointer("@request.auth.id != '' || status = 'public'")
+ * // ... or use one of the record collection's rule, eg. record.Collection().ViewRule
+ *
+ * if ok, _ := dao.CanAccessRecord(record, requestInfo, rule); ok { ... }
+ * ```
+ */
+ canAccessRecord(record: models.Record, requestInfo: models.RequestInfo, accessRule: string): boolean
+ }
+ interface Dao {
+ /**
+ * SaveRecord persists the provided Record model in the database.
+ *
+ * If record.IsNew() is true, the method will perform a create, otherwise an update.
+ * To explicitly mark a record for update you can use record.MarkAsNotNew().
+ */
+ saveRecord(record: models.Record): void
+ }
+ interface Dao {
+ /**
+ * DeleteRecord deletes the provided Record model.
+ *
+ * This method will also cascade the delete operation to all linked
+ * relational records (delete or unset, depending on the rel settings).
+ *
+ * The delete operation may fail if the record is part of a required
+ * reference in another record (aka. cannot be deleted or unset).
+ */
+ deleteRecord(record: models.Record): void
+ }
+ interface Dao {
+ /**
+ * ExpandRecord expands the relations of a single Record model.
+ *
+ * If optFetchFunc is not set, then a default function will be used
+ * that returns all relation records.
+ *
+ * Returns a map with the failed expand parameters and their errors.
+ */
+ expandRecord(record: models.Record, expands: Array, optFetchFunc: ExpandFetchFunc): _TygojaDict
+ }
+ interface Dao {
+ /**
+ * ExpandRecords expands the relations of the provided Record models list.
+ *
+ * If optFetchFunc is not set, then a default function will be used
+ * that returns all relation records.
+ *
+ * Returns a map with the failed expand parameters and their errors.
+ */
+ expandRecords(records: Array<(models.Record | undefined)>, expands: Array, optFetchFunc: ExpandFetchFunc): _TygojaDict
+ }
+ // @ts-ignore
+ import validation = ozzo_validation
+ interface Dao {
+ /**
+ * SyncRecordTableSchema compares the two provided collections
+ * and applies the necessary related record table changes.
+ *
+ * If `oldCollection` is null, then only `newCollection` is used to create the record table.
+ */
+ syncRecordTableSchema(newCollection: models.Collection, oldCollection: models.Collection): void
+ }
+ interface Dao {
+ /**
+ * FindSettings returns and decode the serialized app settings param value.
+ *
+ * The method will first try to decode the param value without decryption.
+ * If it fails and optEncryptionKey is set, it will try again by first
+ * decrypting the value and then decode it again.
+ *
+ * Returns an error if it fails to decode the stored serialized param value.
+ */
+ findSettings(...optEncryptionKey: string[]): (settings.Settings)
+ }
+ interface Dao {
+ /**
+ * SaveSettings persists the specified settings configuration.
+ *
+ * If optEncryptionKey is set, then the stored serialized value will be encrypted with it.
+ */
+ saveSettings(newSettings: settings.Settings, ...optEncryptionKey: string[]): void
+ }
+ interface Dao {
+ /**
+ * HasTable checks if a table (or view) with the provided name exists (case insensitive).
+ */
+ hasTable(tableName: string): boolean
+ }
+ interface Dao {
+ /**
+ * TableColumns returns all column names of a single table by its name.
+ */
+ tableColumns(tableName: string): Array
+ }
+ interface Dao {
+ /**
+ * TableInfo returns the `table_info` pragma result for the specified table.
+ */
+ tableInfo(tableName: string): Array<(models.TableInfoRow | undefined)>
+ }
+ interface Dao {
+ /**
+ * TableIndexes returns a name grouped map with all non empty index of the specified table.
+ *
+ * Note: This method doesn't return an error on nonexisting table.
+ */
+ tableIndexes(tableName: string): _TygojaDict
+ }
+ interface Dao {
+ /**
+ * DeleteTable drops the specified table.
+ *
+ * This method is a no-op if a table with the provided name doesn't exist.
+ *
+ * Be aware that this method is vulnerable to SQL injection and the
+ * "tableName" argument must come only from trusted input!
+ */
+ deleteTable(tableName: string): void
+ }
+ interface Dao {
+ /**
+ * Vacuum executes VACUUM on the current dao.DB() instance in order to
+ * reclaim unused db disk space.
+ */
+ vacuum(): void
+ }
+ interface Dao {
+ /**
+ * DeleteView drops the specified view name.
+ *
+ * This method is a no-op if a view with the provided name doesn't exist.
+ *
+ * Be aware that this method is vulnerable to SQL injection and the
+ * "name" argument must come only from trusted input!
+ */
+ deleteView(name: string): void
+ }
+ interface Dao {
+ /**
+ * SaveView creates (or updates already existing) persistent SQL view.
+ *
+ * Be aware that this method is vulnerable to SQL injection and the
+ * "selectQuery" argument must come only from trusted input!
+ */
+ saveView(name: string, selectQuery: string): void
+ }
+ interface Dao {
+ /**
+ * CreateViewSchema creates a new view schema from the provided select query.
+ *
+ * There are some caveats:
+ * - The select query must have an "id" column.
+ * - Wildcard ("*") columns are not supported to avoid accidentally leaking sensitive data.
+ */
+ createViewSchema(selectQuery: string): schema.Schema
+ }
+ interface Dao {
+ /**
+ * FindRecordByViewFile returns the original models.Record of the
+ * provided view collection file.
+ */
+ findRecordByViewFile(viewCollectionNameOrId: string, fileFieldName: string, filename: string): (models.Record)
+ }
+}
+
+/**
+ * Package core is the backbone of PocketBase.
+ *
+ * It defines the main PocketBase App interface and its base implementation.
+ */
+namespace core {
+ /**
+ * App defines the main PocketBase app interface.
+ */
+ interface App {
+ [key:string]: any;
+ /**
+ * Deprecated:
+ * This method may get removed in the near future.
+ * It is recommended to access the app db instance from app.Dao().DB() or
+ * if you want more flexibility - app.Dao().ConcurrentDB() and app.Dao().NonconcurrentDB().
+ *
+ * DB returns the default app database instance.
+ */
+ db(): (dbx.DB)
+ /**
+ * Dao returns the default app Dao instance.
+ *
+ * This Dao could operate only on the tables and models
+ * associated with the default app database. For example,
+ * trying to access the request logs table will result in error.
+ */
+ dao(): (daos.Dao)
+ /**
+ * Deprecated:
+ * This method may get removed in the near future.
+ * It is recommended to access the logs db instance from app.LogsDao().DB() or
+ * if you want more flexibility - app.LogsDao().ConcurrentDB() and app.LogsDao().NonconcurrentDB().
+ *
+ * LogsDB returns the app logs database instance.
+ */
+ logsDB(): (dbx.DB)
+ /**
+ * LogsDao returns the app logs Dao instance.
+ *
+ * This Dao could operate only on the tables and models
+ * associated with the logs database. For example, trying to access
+ * the users table from LogsDao will result in error.
+ */
+ logsDao(): (daos.Dao)
+ /**
+ * Logger returns the active app logger.
+ */
+ logger(): (slog.Logger)
+ /**
+ * DataDir returns the app data directory path.
+ */
+ dataDir(): string
+ /**
+ * EncryptionEnv returns the name of the app secret env key
+ * (used for settings encryption).
+ */
+ encryptionEnv(): string
+ /**
+ * IsDev returns whether the app is in dev mode.
+ */
+ isDev(): boolean
+ /**
+ * Settings returns the loaded app settings.
+ */
+ settings(): (settings.Settings)
+ /**
+ * Deprecated: Use app.Store() instead.
+ */
+ cache(): (store.Store)
+ /**
+ * Store returns the app runtime store.
+ */
+ store(): (store.Store)
+ /**
+ * SubscriptionsBroker returns the app realtime subscriptions broker instance.
+ */
+ subscriptionsBroker(): (subscriptions.Broker)
+ /**
+ * NewMailClient creates and returns a configured app mail client.
+ */
+ newMailClient(): mailer.Mailer
+ /**
+ * NewFilesystem creates and returns a configured filesystem.System instance
+ * for managing regular app files (eg. collection uploads).
+ *
+ * NB! Make sure to call Close() on the returned result
+ * after you are done working with it.
+ */
+ newFilesystem(): (filesystem.System)
+ /**
+ * NewBackupsFilesystem creates and returns a configured filesystem.System instance
+ * for managing app backups.
+ *
+ * NB! Make sure to call Close() on the returned result
+ * after you are done working with it.
+ */
+ newBackupsFilesystem(): (filesystem.System)
+ /**
+ * RefreshSettings reinitializes and reloads the stored application settings.
+ */
+ refreshSettings(): void
+ /**
+ * IsBootstrapped checks if the application was initialized
+ * (aka. whether Bootstrap() was called).
+ */
+ isBootstrapped(): boolean
+ /**
+ * Bootstrap takes care for initializing the application
+ * (open db connections, load settings, etc.).
+ *
+ * It will call ResetBootstrapState() if the application was already bootstrapped.
+ */
+ bootstrap(): void
+ /**
+ * ResetBootstrapState takes care for releasing initialized app resources
+ * (eg. closing db connections).
+ */
+ resetBootstrapState(): void
+ /**
+ * CreateBackup creates a new backup of the current app pb_data directory.
+ *
+ * Backups can be stored on S3 if it is configured in app.Settings().Backups.
+ *
+ * Please refer to the godoc of the specific CoreApp implementation
+ * for details on the backup procedures.
+ */
+ createBackup(ctx: context.Context, name: string): void
+ /**
+ * RestoreBackup restores the backup with the specified name and restarts
+ * the current running application process.
+ *
+ * The safely perform the restore it is recommended to have free disk space
+ * for at least 2x the size of the restored pb_data backup.
+ *
+ * Please refer to the godoc of the specific CoreApp implementation
+ * for details on the restore procedures.
+ *
+ * NB! This feature is experimental and currently is expected to work only on UNIX based systems.
+ */
+ restoreBackup(ctx: context.Context, name: string): void
+ /**
+ * Restart restarts the current running application process.
+ *
+ * Currently it is relying on execve so it is supported only on UNIX based systems.
+ */
+ restart(): void
+ /**
+ * OnBeforeBootstrap hook is triggered before initializing the main
+ * application resources (eg. before db open and initial settings load).
+ */
+ onBeforeBootstrap(): (hook.Hook)
+ /**
+ * OnAfterBootstrap hook is triggered after initializing the main
+ * application resources (eg. after db open and initial settings load).
+ */
+ onAfterBootstrap(): (hook.Hook)
+ /**
+ * OnBeforeServe hook is triggered before serving the internal router (echo),
+ * allowing you to adjust its options and attach new routes or middlewares.
+ */
+ onBeforeServe(): (hook.Hook)
+ /**
+ * OnBeforeApiError hook is triggered right before sending an error API
+ * response to the client, allowing you to further modify the error data
+ * or to return a completely different API response.
+ */
+ onBeforeApiError(): (hook.Hook)
+ /**
+ * OnAfterApiError hook is triggered right after sending an error API
+ * response to the client.
+ * It could be used to log the final API error in external services.
+ */
+ onAfterApiError(): (hook.Hook)
+ /**
+ * OnTerminate hook is triggered when the app is in the process
+ * of being terminated (eg. on SIGTERM signal).
+ */
+ onTerminate(): (hook.Hook)
+ /**
+ * OnModelBeforeCreate hook is triggered before inserting a new
+ * model in the DB, allowing you to modify or validate the stored data.
+ *
+ * If the optional "tags" list (table names and/or the Collection id for Record models)
+ * is specified, then all event handlers registered via the created hook
+ * will be triggered and called only if their event data origin matches the tags.
+ */
+ onModelBeforeCreate(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnModelAfterCreate hook is triggered after successfully
+ * inserting a new model in the DB.
+ *
+ * If the optional "tags" list (table names and/or the Collection id for Record models)
+ * is specified, then all event handlers registered via the created hook
+ * will be triggered and called only if their event data origin matches the tags.
+ */
+ onModelAfterCreate(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnModelBeforeUpdate hook is triggered before updating existing
+ * model in the DB, allowing you to modify or validate the stored data.
+ *
+ * If the optional "tags" list (table names and/or the Collection id for Record models)
+ * is specified, then all event handlers registered via the created hook
+ * will be triggered and called only if their event data origin matches the tags.
+ */
+ onModelBeforeUpdate(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnModelAfterUpdate hook is triggered after successfully updating
+ * existing model in the DB.
+ *
+ * If the optional "tags" list (table names and/or the Collection id for Record models)
+ * is specified, then all event handlers registered via the created hook
+ * will be triggered and called only if their event data origin matches the tags.
+ */
+ onModelAfterUpdate(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnModelBeforeDelete hook is triggered before deleting an
+ * existing model from the DB.
+ *
+ * If the optional "tags" list (table names and/or the Collection id for Record models)
+ * is specified, then all event handlers registered via the created hook
+ * will be triggered and called only if their event data origin matches the tags.
+ */
+ onModelBeforeDelete(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnModelAfterDelete hook is triggered after successfully deleting an
+ * existing model from the DB.
+ *
+ * If the optional "tags" list (table names and/or the Collection id for Record models)
+ * is specified, then all event handlers registered via the created hook
+ * will be triggered and called only if their event data origin matches the tags.
+ */
+ onModelAfterDelete(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnMailerBeforeAdminResetPasswordSend hook is triggered right
+ * before sending a password reset email to an admin, allowing you
+ * to inspect and customize the email message that is being sent.
+ */
+ onMailerBeforeAdminResetPasswordSend(): (hook.Hook)
+ /**
+ * OnMailerAfterAdminResetPasswordSend hook is triggered after
+ * admin password reset email was successfully sent.
+ */
+ onMailerAfterAdminResetPasswordSend(): (hook.Hook)
+ /**
+ * OnMailerBeforeRecordResetPasswordSend hook is triggered right
+ * before sending a password reset email to an auth record, allowing
+ * you to inspect and customize the email message that is being sent.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onMailerBeforeRecordResetPasswordSend(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnMailerAfterRecordResetPasswordSend hook is triggered after
+ * an auth record password reset email was successfully sent.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onMailerAfterRecordResetPasswordSend(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnMailerBeforeRecordVerificationSend hook is triggered right
+ * before sending a verification email to an auth record, allowing
+ * you to inspect and customize the email message that is being sent.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onMailerBeforeRecordVerificationSend(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnMailerAfterRecordVerificationSend hook is triggered after a
+ * verification email was successfully sent to an auth record.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onMailerAfterRecordVerificationSend(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnMailerBeforeRecordChangeEmailSend hook is triggered right before
+ * sending a confirmation new address email to an auth record, allowing
+ * you to inspect and customize the email message that is being sent.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onMailerBeforeRecordChangeEmailSend(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnMailerAfterRecordChangeEmailSend hook is triggered after a
+ * verification email was successfully sent to an auth record.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onMailerAfterRecordChangeEmailSend(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRealtimeConnectRequest hook is triggered right before establishing
+ * the SSE client connection.
+ */
+ onRealtimeConnectRequest(): (hook.Hook)
+ /**
+ * OnRealtimeDisconnectRequest hook is triggered on disconnected/interrupted
+ * SSE client connection.
+ */
+ onRealtimeDisconnectRequest(): (hook.Hook)
+ /**
+ * OnRealtimeBeforeMessageSend hook is triggered right before sending
+ * an SSE message to a client.
+ *
+ * Returning [hook.StopPropagation] will prevent sending the message.
+ * Returning any other non-nil error will close the realtime connection.
+ */
+ onRealtimeBeforeMessageSend(): (hook.Hook)
+ /**
+ * OnRealtimeAfterMessageSend hook is triggered right after sending
+ * an SSE message to a client.
+ */
+ onRealtimeAfterMessageSend(): (hook.Hook)
+ /**
+ * OnRealtimeBeforeSubscribeRequest hook is triggered before changing
+ * the client subscriptions, allowing you to further validate and
+ * modify the submitted change.
+ */
+ onRealtimeBeforeSubscribeRequest(): (hook.Hook)
+ /**
+ * OnRealtimeAfterSubscribeRequest hook is triggered after the client
+ * subscriptions were successfully changed.
+ */
+ onRealtimeAfterSubscribeRequest(): (hook.Hook)
+ /**
+ * OnSettingsListRequest hook is triggered on each successful
+ * API Settings list request.
+ *
+ * Could be used to validate or modify the response before
+ * returning it to the client.
+ */
+ onSettingsListRequest(): (hook.Hook)
+ /**
+ * OnSettingsBeforeUpdateRequest hook is triggered before each API
+ * Settings update request (after request data load and before settings persistence).
+ *
+ * Could be used to additionally validate the request data or
+ * implement completely different persistence behavior.
+ */
+ onSettingsBeforeUpdateRequest(): (hook.Hook)
+ /**
+ * OnSettingsAfterUpdateRequest hook is triggered after each
+ * successful API Settings update request.
+ */
+ onSettingsAfterUpdateRequest(): (hook.Hook)
+ /**
+ * OnFileDownloadRequest hook is triggered before each API File download request.
+ *
+ * Could be used to validate or modify the file response before
+ * returning it to the client.
+ */
+ onFileDownloadRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnFileBeforeTokenRequest hook is triggered before each file
+ * token API request.
+ *
+ * If no token or model was submitted, e.Model and e.Token will be empty,
+ * allowing you to implement your own custom model file auth implementation.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onFileBeforeTokenRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnFileAfterTokenRequest hook is triggered after each
+ * successful file token API request.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onFileAfterTokenRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnAdminsListRequest hook is triggered on each API Admins list request.
+ *
+ * Could be used to validate or modify the response before returning it to the client.
+ */
+ onAdminsListRequest(): (hook.Hook)
+ /**
+ * OnAdminViewRequest hook is triggered on each API Admin view request.
+ *
+ * Could be used to validate or modify the response before returning it to the client.
+ */
+ onAdminViewRequest(): (hook.Hook)
+ /**
+ * OnAdminBeforeCreateRequest hook is triggered before each API
+ * Admin create request (after request data load and before model persistence).
+ *
+ * Could be used to additionally validate the request data or implement
+ * completely different persistence behavior.
+ */
+ onAdminBeforeCreateRequest(): (hook.Hook)
+ /**
+ * OnAdminAfterCreateRequest hook is triggered after each
+ * successful API Admin create request.
+ */
+ onAdminAfterCreateRequest(): (hook.Hook)
+ /**
+ * OnAdminBeforeUpdateRequest hook is triggered before each API
+ * Admin update request (after request data load and before model persistence).
+ *
+ * Could be used to additionally validate the request data or implement
+ * completely different persistence behavior.
+ */
+ onAdminBeforeUpdateRequest(): (hook.Hook)
+ /**
+ * OnAdminAfterUpdateRequest hook is triggered after each
+ * successful API Admin update request.
+ */
+ onAdminAfterUpdateRequest(): (hook.Hook)
+ /**
+ * OnAdminBeforeDeleteRequest hook is triggered before each API
+ * Admin delete request (after model load and before actual deletion).
+ *
+ * Could be used to additionally validate the request data or implement
+ * completely different delete behavior.
+ */
+ onAdminBeforeDeleteRequest(): (hook.Hook)
+ /**
+ * OnAdminAfterDeleteRequest hook is triggered after each
+ * successful API Admin delete request.
+ */
+ onAdminAfterDeleteRequest(): (hook.Hook)
+ /**
+ * OnAdminAuthRequest hook is triggered on each successful API Admin
+ * authentication request (sign-in, token refresh, etc.).
+ *
+ * Could be used to additionally validate or modify the
+ * authenticated admin data and token.
+ */
+ onAdminAuthRequest(): (hook.Hook)
+ /**
+ * OnAdminBeforeAuthWithPasswordRequest hook is triggered before each Admin
+ * auth with password API request (after request data load and before password validation).
+ *
+ * Could be used to implement for example a custom password validation
+ * or to locate a different Admin identity (by assigning [AdminAuthWithPasswordEvent.Admin]).
+ */
+ onAdminBeforeAuthWithPasswordRequest(): (hook.Hook)
+ /**
+ * OnAdminAfterAuthWithPasswordRequest hook is triggered after each
+ * successful Admin auth with password API request.
+ */
+ onAdminAfterAuthWithPasswordRequest(): (hook.Hook)
+ /**
+ * OnAdminBeforeAuthRefreshRequest hook is triggered before each Admin
+ * auth refresh API request (right before generating a new auth token).
+ *
+ * Could be used to additionally validate the request data or implement
+ * completely different auth refresh behavior.
+ */
+ onAdminBeforeAuthRefreshRequest(): (hook.Hook)
+ /**
+ * OnAdminAfterAuthRefreshRequest hook is triggered after each
+ * successful auth refresh API request (right after generating a new auth token).
+ */
+ onAdminAfterAuthRefreshRequest(): (hook.Hook)
+ /**
+ * OnAdminBeforeRequestPasswordResetRequest hook is triggered before each Admin
+ * request password reset API request (after request data load and before sending the reset email).
+ *
+ * Could be used to additionally validate the request data or implement
+ * completely different password reset behavior.
+ */
+ onAdminBeforeRequestPasswordResetRequest(): (hook.Hook)
+ /**
+ * OnAdminAfterRequestPasswordResetRequest hook is triggered after each
+ * successful request password reset API request.
+ */
+ onAdminAfterRequestPasswordResetRequest(): (hook.Hook)
+ /**
+ * OnAdminBeforeConfirmPasswordResetRequest hook is triggered before each Admin
+ * confirm password reset API request (after request data load and before persistence).
+ *
+ * Could be used to additionally validate the request data or implement
+ * completely different persistence behavior.
+ */
+ onAdminBeforeConfirmPasswordResetRequest(): (hook.Hook)
+ /**
+ * OnAdminAfterConfirmPasswordResetRequest hook is triggered after each
+ * successful confirm password reset API request.
+ */
+ onAdminAfterConfirmPasswordResetRequest(): (hook.Hook)
+ /**
+ * OnRecordAuthRequest hook is triggered on each successful API
+ * record authentication request (sign-in, token refresh, etc.).
+ *
+ * Could be used to additionally validate or modify the authenticated
+ * record data and token.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordAuthRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordBeforeAuthWithPasswordRequest hook is triggered before each Record
+ * auth with password API request (after request data load and before password validation).
+ *
+ * Could be used to implement for example a custom password validation
+ * or to locate a different Record model (by reassigning [RecordAuthWithPasswordEvent.Record]).
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordBeforeAuthWithPasswordRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordAfterAuthWithPasswordRequest hook is triggered after each
+ * successful Record auth with password API request.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordAfterAuthWithPasswordRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordBeforeAuthWithOAuth2Request hook is triggered before each Record
+ * OAuth2 sign-in/sign-up API request (after token exchange and before external provider linking).
+ *
+ * If the [RecordAuthWithOAuth2Event.Record] is not set, then the OAuth2
+ * request will try to create a new auth Record.
+ *
+ * To assign or link a different existing record model you can
+ * change the [RecordAuthWithOAuth2Event.Record] field.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordBeforeAuthWithOAuth2Request(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordAfterAuthWithOAuth2Request hook is triggered after each
+ * successful Record OAuth2 API request.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordAfterAuthWithOAuth2Request(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordBeforeAuthRefreshRequest hook is triggered before each Record
+ * auth refresh API request (right before generating a new auth token).
+ *
+ * Could be used to additionally validate the request data or implement
+ * completely different auth refresh behavior.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordBeforeAuthRefreshRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordAfterAuthRefreshRequest hook is triggered after each
+ * successful auth refresh API request (right after generating a new auth token).
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordAfterAuthRefreshRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordListExternalAuthsRequest hook is triggered on each API record external auths list request.
+ *
+ * Could be used to validate or modify the response before returning it to the client.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordListExternalAuthsRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordBeforeUnlinkExternalAuthRequest hook is triggered before each API record
+ * external auth unlink request (after models load and before the actual relation deletion).
+ *
+ * Could be used to additionally validate the request data or implement
+ * completely different delete behavior.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordBeforeUnlinkExternalAuthRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordAfterUnlinkExternalAuthRequest hook is triggered after each
+ * successful API record external auth unlink request.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordAfterUnlinkExternalAuthRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordBeforeRequestPasswordResetRequest hook is triggered before each Record
+ * request password reset API request (after request data load and before sending the reset email).
+ *
+ * Could be used to additionally validate the request data or implement
+ * completely different password reset behavior.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordBeforeRequestPasswordResetRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordAfterRequestPasswordResetRequest hook is triggered after each
+ * successful request password reset API request.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordAfterRequestPasswordResetRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordBeforeConfirmPasswordResetRequest hook is triggered before each Record
+ * confirm password reset API request (after request data load and before persistence).
+ *
+ * Could be used to additionally validate the request data or implement
+ * completely different persistence behavior.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordBeforeConfirmPasswordResetRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordAfterConfirmPasswordResetRequest hook is triggered after each
+ * successful confirm password reset API request.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordAfterConfirmPasswordResetRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordBeforeRequestVerificationRequest hook is triggered before each Record
+ * request verification API request (after request data load and before sending the verification email).
+ *
+ * Could be used to additionally validate the loaded request data or implement
+ * completely different verification behavior.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordBeforeRequestVerificationRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordAfterRequestVerificationRequest hook is triggered after each
+ * successful request verification API request.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordAfterRequestVerificationRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordBeforeConfirmVerificationRequest hook is triggered before each Record
+ * confirm verification API request (after request data load and before persistence).
+ *
+ * Could be used to additionally validate the request data or implement
+ * completely different persistence behavior.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordBeforeConfirmVerificationRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordAfterConfirmVerificationRequest hook is triggered after each
+ * successful confirm verification API request.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordAfterConfirmVerificationRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordBeforeRequestEmailChangeRequest hook is triggered before each Record request email change API request
+ * (after request data load and before sending the email link to confirm the change).
+ *
+ * Could be used to additionally validate the request data or implement
+ * completely different request email change behavior.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordBeforeRequestEmailChangeRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordAfterRequestEmailChangeRequest hook is triggered after each
+ * successful request email change API request.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordAfterRequestEmailChangeRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordBeforeConfirmEmailChangeRequest hook is triggered before each Record
+ * confirm email change API request (after request data load and before persistence).
+ *
+ * Could be used to additionally validate the request data or implement
+ * completely different persistence behavior.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordBeforeConfirmEmailChangeRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordAfterConfirmEmailChangeRequest hook is triggered after each
+ * successful confirm email change API request.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordAfterConfirmEmailChangeRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordsListRequest hook is triggered on each API Records list request.
+ *
+ * Could be used to validate or modify the response before returning it to the client.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordsListRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordViewRequest hook is triggered on each API Record view request.
+ *
+ * Could be used to validate or modify the response before returning it to the client.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordViewRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordBeforeCreateRequest hook is triggered before each API Record
+ * create request (after request data load and before model persistence).
+ *
+ * Could be used to additionally validate the request data or implement
+ * completely different persistence behavior.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordBeforeCreateRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordAfterCreateRequest hook is triggered after each
+ * successful API Record create request.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordAfterCreateRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordBeforeUpdateRequest hook is triggered before each API Record
+ * update request (after request data load and before model persistence).
+ *
+ * Could be used to additionally validate the request data or implement
+ * completely different persistence behavior.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordBeforeUpdateRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordAfterUpdateRequest hook is triggered after each
+ * successful API Record update request.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordAfterUpdateRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordBeforeDeleteRequest hook is triggered before each API Record
+ * delete request (after model load and before actual deletion).
+ *
+ * Could be used to additionally validate the request data or implement
+ * completely different delete behavior.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordBeforeDeleteRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnRecordAfterDeleteRequest hook is triggered after each
+ * successful API Record delete request.
+ *
+ * If the optional "tags" list (Collection ids or names) is specified,
+ * then all event handlers registered via the created hook will be
+ * triggered and called only if their event data origin matches the tags.
+ */
+ onRecordAfterDeleteRequest(...tags: string[]): (hook.TaggedHook)
+ /**
+ * OnCollectionsListRequest hook is triggered on each API Collections list request.
+ *
+ * Could be used to validate or modify the response before returning it to the client.
+ */
+ onCollectionsListRequest(): (hook.Hook)
+ /**
+ * OnCollectionViewRequest hook is triggered on each API Collection view request.
+ *
+ * Could be used to validate or modify the response before returning it to the client.
+ */
+ onCollectionViewRequest(): (hook.Hook)
+ /**
+ * OnCollectionBeforeCreateRequest hook is triggered before each API Collection
+ * create request (after request data load and before model persistence).
+ *
+ * Could be used to additionally validate the request data or implement
+ * completely different persistence behavior.
+ */
+ onCollectionBeforeCreateRequest(): (hook.Hook)
+ /**
+ * OnCollectionAfterCreateRequest hook is triggered after each
+ * successful API Collection create request.
+ */
+ onCollectionAfterCreateRequest(): (hook.Hook)
+ /**
+ * OnCollectionBeforeUpdateRequest hook is triggered before each API Collection
+ * update request (after request data load and before model persistence).
+ *
+ * Could be used to additionally validate the request data or implement
+ * completely different persistence behavior.
+ */
+ onCollectionBeforeUpdateRequest(): (hook.Hook)
+ /**
+ * OnCollectionAfterUpdateRequest hook is triggered after each
+ * successful API Collection update request.
+ */
+ onCollectionAfterUpdateRequest(): (hook.Hook)
+ /**
+ * OnCollectionBeforeDeleteRequest hook is triggered before each API
+ * Collection delete request (after model load and before actual deletion).
+ *
+ * Could be used to additionally validate the request data or implement
+ * completely different delete behavior.
+ */
+ onCollectionBeforeDeleteRequest(): (hook.Hook)
+ /**
+ * OnCollectionAfterDeleteRequest hook is triggered after each
+ * successful API Collection delete request.
+ */
+ onCollectionAfterDeleteRequest(): (hook.Hook)
+ /**
+ * OnCollectionsBeforeImportRequest hook is triggered before each API
+ * collections import request (after request data load and before the actual import).
+ *
+ * Could be used to additionally validate the imported collections or
+ * to implement completely different import behavior.
+ */
+ onCollectionsBeforeImportRequest(): (hook.Hook)
+ /**
+ * OnCollectionsAfterImportRequest hook is triggered after each
+ * successful API collections import request.
+ */
+ onCollectionsAfterImportRequest(): (hook.Hook)
+ }
+}
+
+namespace migrate {
+ /**
+ * MigrationsList defines a list with migration definitions
+ */
+ interface MigrationsList {
+ }
+ interface MigrationsList {
+ /**
+ * Item returns a single migration from the list by its index.
+ */
+ item(index: number): (Migration)
+ }
+ interface MigrationsList {
+ /**
+ * Items returns the internal migrations list slice.
+ */
+ items(): Array<(Migration | undefined)>
+ }
+ interface MigrationsList {
+ /**
+ * Register adds new migration definition to the list.
+ *
+ * If `optFilename` is not provided, it will try to get the name from its .go file.
+ *
+ * The list will be sorted automatically based on the migrations file name.
+ */
+ register(up: (db: dbx.Builder) => void, down: (db: dbx.Builder) => void, ...optFilename: string[]): void
+ }
+}
+
+/**
+ * Package cobra is a commander providing a simple interface to create powerful modern CLI interfaces.
+ * In addition to providing an interface, Cobra simultaneously provides a controller to organize your application code.
+ */
+namespace cobra {
+ interface Command {
+ /**
+ * GenBashCompletion generates bash completion file and writes to the passed writer.
+ */
+ genBashCompletion(w: io.Writer): void
+ }
+ interface Command {
+ /**
+ * GenBashCompletionFile generates bash completion file.
+ */
+ genBashCompletionFile(filename: string): void
+ }
+ interface Command {
+ /**
+ * GenBashCompletionFileV2 generates Bash completion version 2.
+ */
+ genBashCompletionFileV2(filename: string, includeDesc: boolean): void
+ }
+ interface Command {
+ /**
+ * GenBashCompletionV2 generates Bash completion file version 2
+ * and writes it to the passed writer.
+ */
+ genBashCompletionV2(w: io.Writer, includeDesc: boolean): void
+ }
+ // @ts-ignore
+ import flag = pflag
+ /**
+ * Command is just that, a command for your application.
+ * E.g. 'go run ...' - 'run' is the command. Cobra requires
+ * you to define the usage and description as part of your command
+ * definition to ensure usability.
+ */
+ interface Command {
+ /**
+ * Use is the one-line usage message.
+ * Recommended syntax is as follows:
+ * ```
+ * [ ] identifies an optional argument. Arguments that are not enclosed in brackets are required.
+ * ... indicates that you can specify multiple values for the previous argument.
+ * | indicates mutually exclusive information. You can use the argument to the left of the separator or the
+ * argument to the right of the separator. You cannot use both arguments in a single use of the command.
+ * { } delimits a set of mutually exclusive arguments when one of the arguments is required. If the arguments are
+ * optional, they are enclosed in brackets ([ ]).
+ * ```
+ * Example: add [-F file | -D dir]... [-f format] profile
+ */
+ use: string
+ /**
+ * Aliases is an array of aliases that can be used instead of the first word in Use.
+ */
+ aliases: Array
+ /**
+ * SuggestFor is an array of command names for which this command will be suggested -
+ * similar to aliases but only suggests.
+ */
+ suggestFor: Array
+ /**
+ * Short is the short description shown in the 'help' output.
+ */
+ short: string
+ /**
+ * The group id under which this subcommand is grouped in the 'help' output of its parent.
+ */
+ groupID: string
+ /**
+ * Long is the long message shown in the 'help ' output.
+ */
+ long: string
+ /**
+ * Example is examples of how to use the command.
+ */
+ example: string
+ /**
+ * ValidArgs is list of all valid non-flag arguments that are accepted in shell completions
+ */
+ validArgs: Array