opengradient 0.4.6__py3-none-any.whl → 0.4.8__py3-none-any.whl

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.
opengradient/__init__.py CHANGED
@@ -6,7 +6,20 @@ from typing import Any, Dict, List, Optional, Tuple, Union
6
6
 
7
7
  from .client import Client
8
8
  from .defaults import DEFAULT_INFERENCE_CONTRACT_ADDRESS, DEFAULT_RPC_URL
9
- from .types import LLM, TEE_LLM, HistoricalInputQuery, InferenceMode, LlmInferenceMode, SchedulerParams
9
+ from .types import (
10
+ LLM,
11
+ TEE_LLM,
12
+ HistoricalInputQuery,
13
+ SchedulerParams,
14
+ CandleType,
15
+ CandleOrder,
16
+ InferenceMode,
17
+ LlmInferenceMode,
18
+ TextGenerationOutput,
19
+ ModelOutput,
20
+ ModelRepository,
21
+ FileUploadResult,
22
+ )
10
23
 
11
24
  from . import llm, alphasense
12
25
 
@@ -14,15 +27,19 @@ _client = None
14
27
 
15
28
 
16
29
  def new_client(
17
- email: str, password: str, private_key: str, rpc_url=DEFAULT_RPC_URL, contract_address=DEFAULT_INFERENCE_CONTRACT_ADDRESS
30
+ email: Optional[str],
31
+ password: Optional[str],
32
+ private_key: str,
33
+ rpc_url=DEFAULT_RPC_URL,
34
+ contract_address=DEFAULT_INFERENCE_CONTRACT_ADDRESS,
18
35
  ) -> Client:
19
36
  """
20
37
  Creates a unique OpenGradient client instance with the given authentication and network settings.
21
38
 
22
39
  Args:
23
- email: User's email address for authentication
24
- password: User's password for authentication
25
- private_key: Ethereum private key for blockchain transactions
40
+ email: User's email address for authentication with Model Hub
41
+ password: User's password for authentication with Model Hub
42
+ private_key: Private key for OpenGradient transactions
26
43
  rpc_url: Optional RPC URL for the blockchain network, defaults to mainnet
27
44
  contract_address: Optional inference contract address
28
45
  """
@@ -46,7 +63,7 @@ def init(email: str, password: str, private_key: str, rpc_url=DEFAULT_RPC_URL, c
46
63
  return _client
47
64
 
48
65
 
49
- def upload(model_path, model_name, version):
66
+ def upload(model_path, model_name, version) -> FileUploadResult:
50
67
  """Upload a model file to OpenGradient.
51
68
 
52
69
  Args:
@@ -55,7 +72,7 @@ def upload(model_path, model_name, version):
55
72
  version: Version string for this model upload
56
73
 
57
74
  Returns:
58
- dict: Upload response containing file metadata
75
+ FileUploadResult: Upload response containing file metadata
59
76
 
60
77
  Raises:
61
78
  RuntimeError: If SDK is not initialized
@@ -65,7 +82,7 @@ def upload(model_path, model_name, version):
65
82
  return _client.upload(model_path, model_name, version)
66
83
 
67
84
 
68
- def create_model(model_name: str, model_desc: str, model_path: str = None):
85
+ def create_model(model_name: str, model_desc: str, model_path: Optional[str] = None) -> ModelRepository:
69
86
  """Create a new model repository.
70
87
 
71
88
  Args:
@@ -74,7 +91,7 @@ def create_model(model_name: str, model_desc: str, model_path: str = None):
74
91
  model_path: Optional path to model file to upload immediately
75
92
 
76
93
  Returns:
77
- dict: Creation response with model metadata and optional upload results
94
+ ModelRepository: Creation response with model metadata and optional upload results
78
95
 
79
96
  Raises:
80
97
  RuntimeError: If SDK is not initialized
@@ -121,7 +138,7 @@ def infer(model_cid, inference_mode, model_input, max_retries: Optional[int] = N
121
138
  max_retries: Maximum number of retries for failed transactions
122
139
 
123
140
  Returns:
124
- Tuple[str, Any]: Transaction hash and model output
141
+ InferenceResult: Transaction hash and model output
125
142
 
126
143
  Raises:
127
144
  RuntimeError: If SDK is not initialized
@@ -134,12 +151,12 @@ def infer(model_cid, inference_mode, model_input, max_retries: Optional[int] = N
134
151
  def llm_completion(
135
152
  model_cid: LLM,
136
153
  prompt: str,
137
- inference_mode: str = LlmInferenceMode.VANILLA,
154
+ inference_mode: LlmInferenceMode = LlmInferenceMode.VANILLA,
138
155
  max_tokens: int = 100,
139
156
  stop_sequence: Optional[List[str]] = None,
140
157
  temperature: float = 0.0,
141
158
  max_retries: Optional[int] = None,
142
- ) -> Tuple[str, str]:
159
+ ) -> TextGenerationOutput:
143
160
  """Generate text completion using an LLM.
144
161
 
145
162
  Args:
@@ -152,7 +169,7 @@ def llm_completion(
152
169
  max_retries: Maximum number of retries for failed transactions
153
170
 
154
171
  Returns:
155
- Tuple[str, str]: Transaction hash and generated text
172
+ TextGenerationOutput: Transaction hash and generated text
156
173
 
157
174
  Raises:
158
175
  RuntimeError: If SDK is not initialized
@@ -173,14 +190,14 @@ def llm_completion(
173
190
  def llm_chat(
174
191
  model_cid: LLM,
175
192
  messages: List[Dict],
176
- inference_mode: str = LlmInferenceMode.VANILLA,
193
+ inference_mode: LlmInferenceMode = LlmInferenceMode.VANILLA,
177
194
  max_tokens: int = 100,
178
195
  stop_sequence: Optional[List[str]] = None,
179
196
  temperature: float = 0.0,
180
197
  tools: Optional[List[Dict]] = None,
181
198
  tool_choice: Optional[str] = None,
182
199
  max_retries: Optional[int] = None,
183
- ) -> Tuple[str, str, Dict]:
200
+ ) -> TextGenerationOutput:
184
201
  """Have a chat conversation with an LLM.
185
202
 
186
203
  Args:
@@ -195,7 +212,7 @@ def llm_chat(
195
212
  max_retries: Maximum number of retries for failed transactions
196
213
 
197
214
  Returns:
198
- Tuple[str, str, Dict]: Transaction hash, model response, and metadata
215
+ TextGenerationOutput
199
216
 
200
217
  Raises:
201
218
  RuntimeError: If SDK is not initialized
@@ -215,24 +232,6 @@ def llm_chat(
215
232
  )
216
233
 
217
234
 
218
- def login(email: str, password: str):
219
- """Login to OpenGradient.
220
-
221
- Args:
222
- email: User's email address
223
- password: User's password
224
-
225
- Returns:
226
- dict: Login response with authentication tokens
227
-
228
- Raises:
229
- RuntimeError: If SDK is not initialized
230
- """
231
- if _client is None:
232
- raise RuntimeError("OpenGradient client not initialized. Call og.init() first.")
233
- return _client.login(email, password)
234
-
235
-
236
235
  def list_files(model_name: str, version: str) -> List[Dict]:
237
236
  """List files in a model repository version.
238
237
 
@@ -251,32 +250,11 @@ def list_files(model_name: str, version: str) -> List[Dict]:
251
250
  return _client.list_files(model_name, version)
252
251
 
253
252
 
254
- def generate_image(model: str, prompt: str, height: Optional[int] = None, width: Optional[int] = None) -> bytes:
255
- """Generate an image from a text prompt.
256
-
257
- Args:
258
- model: Model identifier (e.g. "stabilityai/stable-diffusion-xl-base-1.0")
259
- prompt: Text description of the desired image
260
- height: Optional height of the generated image in pixels
261
- width: Optional width of the generated image in pixels
262
-
263
- Returns:
264
- bytes: Raw image data as bytes
265
-
266
- Raises:
267
- RuntimeError: If SDK is not initialized
268
- OpenGradientError: If image generation fails
269
- """
270
- if _client is None:
271
- raise RuntimeError("OpenGradient client not initialized. Call og.init() first.")
272
- return _client.generate_image(model, prompt, height=height, width=width)
273
-
274
-
275
253
  def new_workflow(
276
254
  model_cid: str,
277
- input_query: Union[Dict[str, Any], HistoricalInputQuery],
255
+ input_query: HistoricalInputQuery,
278
256
  input_tensor_name: str,
279
- scheduler_params: Optional[Union[Dict[str, int], SchedulerParams]] = None,
257
+ scheduler_params: Optional[SchedulerParams] = None,
280
258
  ) -> str:
281
259
  """
282
260
  Deploy a new workflow contract with the specified parameters.
@@ -287,13 +265,9 @@ def new_workflow(
287
265
 
288
266
  Args:
289
267
  model_cid: IPFS CID of the model
290
- input_query: Dictionary or HistoricalInputQuery containing query parameters
268
+ input_query: HistoricalInputQuery containing query parameters
291
269
  input_tensor_name: Name of the input tensor
292
- scheduler_params: Optional scheduler configuration:
293
- - Can be a dictionary with:
294
- - frequency: Execution frequency in seconds (default: 600)
295
- - duration_hours: How long to run in hours (default: 2)
296
- - Or a SchedulerParams instance
270
+ scheduler_params: Optional scheduler configuration as SchedulerParams instance
297
271
  If not provided, the workflow will be deployed without scheduling.
298
272
 
299
273
  Returns:
@@ -303,15 +277,12 @@ def new_workflow(
303
277
  if _client is None:
304
278
  raise RuntimeError("OpenGradient client not initialized. Call og.init(...) first.")
305
279
 
306
- # Convert scheduler_params if it's a dict, otherwise use as is
307
- scheduler = SchedulerParams.from_dict(scheduler_params) if isinstance(scheduler_params, dict) else scheduler_params
308
-
309
280
  return _client.new_workflow(
310
- model_cid=model_cid, input_query=input_query, input_tensor_name=input_tensor_name, scheduler_params=scheduler
281
+ model_cid=model_cid, input_query=input_query, input_tensor_name=input_tensor_name, scheduler_params=scheduler_params
311
282
  )
312
283
 
313
284
 
314
- def read_workflow_result(contract_address: str) -> Dict[str, Union[str, Dict]]:
285
+ def read_workflow_result(contract_address: str) -> ModelOutput:
315
286
  """
316
287
  Reads the latest inference result from a deployed workflow contract.
317
288
 
@@ -335,7 +306,7 @@ def read_workflow_result(contract_address: str) -> Dict[str, Union[str, Dict]]:
335
306
  return _client.read_workflow_result(contract_address)
336
307
 
337
308
 
338
- def run_workflow(contract_address: str) -> Dict[str, Union[str, Dict]]:
309
+ def run_workflow(contract_address: str) -> ModelOutput:
339
310
  """
340
311
  Executes the workflow by calling run() on the contract to pull latest data and perform inference.
341
312
 
@@ -350,8 +321,23 @@ def run_workflow(contract_address: str) -> Dict[str, Union[str, Dict]]:
350
321
  return _client.run_workflow(contract_address)
351
322
 
352
323
 
324
+ def read_workflow_history(contract_address: str, num_results: int) -> List[ModelOutput]:
325
+ """
326
+ Gets historical inference results from a workflow contract.
327
+
328
+ Args:
329
+ contract_address (str): Address of the deployed workflow contract
330
+ num_results (int): Number of historical results to retrieve
331
+
332
+ Returns:
333
+ List[Dict]: List of historical inference results
334
+ """
335
+ if _client is None:
336
+ raise RuntimeError("OpenGradient client not initialized. Call og.init() first.")
337
+ return _client.read_workflow_history(contract_address, num_results)
338
+
339
+
353
340
  __all__ = [
354
- "generate_image",
355
341
  "list_files",
356
342
  "login",
357
343
  "llm_chat",
@@ -366,6 +352,14 @@ __all__ = [
366
352
  "new_workflow",
367
353
  "read_workflow_result",
368
354
  "run_workflow",
355
+ "read_workflow_history",
356
+ "InferenceMode",
357
+ "LlmInferenceMode",
358
+ "HistoricalInputQuery",
359
+ "SchedulerParams",
360
+ "CandleType",
361
+ "CandleOrder",
362
+ "InferenceMode",
369
363
  "llm",
370
364
  "alphasense",
371
365
  ]
@@ -0,0 +1 @@
1
+ [{"inputs":[{"internalType":"string","name":"_modelId","type":"string"},{"internalType":"string","name":"_inputName","type":"string"},{"components":[{"internalType":"string","name":"base","type":"string"},{"internalType":"string","name":"quote","type":"string"},{"internalType":"uint32","name":"total_candles","type":"uint32"},{"internalType":"uint32","name":"candle_duration_in_mins","type":"uint32"},{"internalType":"enum CandleOrder","name":"order","type":"uint8"},{"internalType":"enum CandleType[]","name":"candle_types","type":"uint8[]"}],"internalType":"struct HistoricalInputQuery","name":"_query","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"components":[{"components":[{"internalType":"string","name":"name","type":"string"},{"components":[{"internalType":"int128","name":"value","type":"int128"},{"internalType":"int128","name":"decimals","type":"int128"}],"internalType":"struct TensorLib.Number[]","name":"values","type":"tuple[]"},{"internalType":"uint32[]","name":"shape","type":"uint32[]"}],"internalType":"struct TensorLib.MultiDimensionalNumberTensor[]","name":"numbers","type":"tuple[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string[]","name":"values","type":"string[]"}],"internalType":"struct TensorLib.StringTensor[]","name":"strings","type":"tuple[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"value","type":"string"}],"internalType":"struct TensorLib.JsonScalar[]","name":"jsons","type":"tuple[]"},{"internalType":"bool","name":"is_simulation_result","type":"bool"}],"indexed":false,"internalType":"struct ModelOutput","name":"result","type":"tuple"}],"name":"InferenceResultEmitted","type":"event"},{"inputs":[],"name":"getInferenceResult","outputs":[{"components":[{"components":[{"internalType":"string","name":"name","type":"string"},{"components":[{"internalType":"int128","name":"value","type":"int128"},{"internalType":"int128","name":"decimals","type":"int128"}],"internalType":"struct TensorLib.Number[]","name":"values","type":"tuple[]"},{"internalType":"uint32[]","name":"shape","type":"uint32[]"}],"internalType":"struct TensorLib.MultiDimensionalNumberTensor[]","name":"numbers","type":"tuple[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string[]","name":"values","type":"string[]"}],"internalType":"struct TensorLib.StringTensor[]","name":"strings","type":"tuple[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"value","type":"string"}],"internalType":"struct TensorLib.JsonScalar[]","name":"jsons","type":"tuple[]"},{"internalType":"bool","name":"is_simulation_result","type":"bool"}],"internalType":"struct ModelOutput","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"getLastInferenceResults","outputs":[{"components":[{"components":[{"internalType":"string","name":"name","type":"string"},{"components":[{"internalType":"int128","name":"value","type":"int128"},{"internalType":"int128","name":"decimals","type":"int128"}],"internalType":"struct TensorLib.Number[]","name":"values","type":"tuple[]"},{"internalType":"uint32[]","name":"shape","type":"uint32[]"}],"internalType":"struct TensorLib.MultiDimensionalNumberTensor[]","name":"numbers","type":"tuple[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string[]","name":"values","type":"string[]"}],"internalType":"struct TensorLib.StringTensor[]","name":"strings","type":"tuple[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"value","type":"string"}],"internalType":"struct TensorLib.JsonScalar[]","name":"jsons","type":"tuple[]"},{"internalType":"bool","name":"is_simulation_result","type":"bool"}],"internalType":"struct ModelOutput[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"historicalContract","outputs":[{"internalType":"contract OGHistorical","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inputName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inputQuery","outputs":[{"internalType":"string","name":"base","type":"string"},{"internalType":"string","name":"quote","type":"string"},{"internalType":"uint32","name":"total_candles","type":"uint32"},{"internalType":"uint32","name":"candle_duration_in_mins","type":"uint32"},{"internalType":"enum CandleOrder","name":"order","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"modelId","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"run","outputs":[],"stateMutability":"nonpayable","type":"function"}]
@@ -0,0 +1,13 @@
1
+ [
2
+ {
3
+ "inputs": [
4
+ {"internalType": "address", "name": "contractAddress", "type": "address"},
5
+ {"internalType": "uint256", "name": "endTime", "type": "uint256"},
6
+ {"internalType": "uint256", "name": "frequency", "type": "uint256"}
7
+ ],
8
+ "name": "registerTask",
9
+ "outputs": [],
10
+ "stateMutability": "nonpayable",
11
+ "type": "function"
12
+ }
13
+ ]
@@ -12,7 +12,7 @@ def create_read_workflow_tool(
12
12
  tool_name: str,
13
13
  tool_description: str,
14
14
  output_formatter: Callable[..., str] = lambda x: x,
15
- ) -> BaseTool:
15
+ ) -> BaseTool | Callable:
16
16
  """
17
17
  Creates a tool that reads results from a workflow contract on OpenGradient.
18
18
 
@@ -1,5 +1,5 @@
1
1
  from enum import Enum
2
- from typing import Any, Callable, Dict, Type
2
+ from typing import Any, Callable, Dict, Type, Optional
3
3
 
4
4
  from langchain_core.tools import BaseTool, StructuredTool
5
5
  from pydantic import BaseModel
@@ -14,10 +14,10 @@ def create_run_model_tool(
14
14
  tool_name: str,
15
15
  input_getter: Callable,
16
16
  output_formatter: Callable[..., str] = lambda x: x,
17
- input_schema: Type[BaseModel] = None,
17
+ input_schema: Optional[Type[BaseModel]] = None,
18
18
  tool_description: str = "Executes the given ML model",
19
19
  inference_mode: og.InferenceMode = og.InferenceMode.VANILLA,
20
- ) -> BaseTool:
20
+ ) -> BaseTool | Callable:
21
21
  """
22
22
  Creates a tool that wraps an OpenGradient model for inference.
23
23
 
@@ -0,0 +1 @@
1
+ 60a0604052346100405761001a610014610389565b91610a62565b610022610045565b61460c610a928239608051818181610b7401526144c0015261460c90f35b61004b565b60405190565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906100779061004f565b810190811060018060401b0382111761008f57604052565b610059565b906100a76100a0610045565b928361006d565b565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b60018060401b0381116100d5576100d160209161004f565b0190565b610059565b90825f9392825e0152565b909291926100fa6100f5826100b9565b610094565b9381855260208501908284011161011657610114926100da565b565b6100b5565b9080601f8301121561013957816020610136935191016100e5565b90565b6100b1565b5f80fd5b5f80fd5b63ffffffff1690565b61015881610146565b0361015f57565b5f80fd5b905051906101708261014f565b565b6002111561017c57565b5f80fd5b9050519061018d82610172565b565b60018060401b0381116101a55760208091020190565b610059565b5f80fd5b600511156101b857565b5f80fd5b905051906101c9826101ae565b565b909291926101e06101db8261018f565b610094565b938185526020808601920283019281841161021d57915b8383106102045750505050565b6020809161021284866101bc565b8152019201916101f7565b6101aa565b9080601f830112156102405781602061023d935191016101cb565b90565b6100b1565b91909160c0818403126103095761025c60c0610094565b925f82015160018060401b038111610304578161027a91840161011b565b5f850152602082015160018060401b0381116102ff578161029c91840161011b565b60208501526102ae8160408401610163565b60408501526102c08160608401610163565b60608501526102d28160808401610180565b608085015260a082015160018060401b0381116102fa576102f39201610222565b60a0830152565b610142565b610142565b610142565b61013e565b91606083830312610384575f83015160018060401b03811161037f578261033691850161011b565b92602081015160018060401b03811161037a578361035591830161011b565b92604082015160018060401b038111610375576103729201610245565b90565b6100ad565b6100ad565b6100ad565b6100a9565b6103a761509e8038038061039c81610094565b92833981019061030e565b909192565b5190565b634e487b7160e01b5f52602260045260245ffd5b90600160028304921680156103e4575b60208310146103df57565b6103b0565b91607f16916103d4565b5f5260205f2090565b601f602091010490565b1b90565b9190600861042091029161041a5f1984610401565b92610401565b9181191691161790565b90565b90565b61044461043f6104499261042a565b61042d565b61042a565b90565b90565b919061046561046061046d93610430565b61044c565b908354610405565b9055565b5f90565b61048791610481610471565b9161044f565b565b5b818110610495575050565b806104a25f600193610475565b0161048a565b9190601f81116104b8575b505050565b6104c46104e9936103ee565b9060206104d0846103f7565b830193106104f1575b6104e2906103f7565b0190610489565b5f80806104b3565b91506104e2819290506104d9565b1c90565b90610513905f19906008026104ff565b191690565b8161052291610503565b906002021790565b90610534816103ac565b9060018060401b0382116105f2576105568261055085546103c4565b856104a8565b602090601f831160011461058a57918091610579935f9261057e575b5050610518565b90555b565b90915001515f80610572565b601f19831691610599856103ee565b925f5b8181106105da575091600293918560019694106105c0575b5050500201905561057c565b6105d0910151601f841690610503565b90555f80806105b4565b9193602060018192878701518155019501920161059c565b610059565b906106019161052a565b565b60018060a01b031690565b61062261061d61062792610603565b61042d565b610603565b90565b6106339061060e565b90565b61063f9061062a565b90565b5190565b6106509051610146565b90565b5f1b90565b9061066763ffffffff91610653565b9181191691161790565b61068561068061068a92610146565b61042d565b610146565b90565b90565b906106a56106a06106ac92610671565b61068d565b8254610658565b9055565b60201b90565b906106c967ffffffff00000000916106b0565b9181191691161790565b906106e86106e36106ef92610671565b61068d565b82546106b6565b9055565b634e487b7160e01b5f52602160045260245ffd5b6002111561071157565b6106f3565b9061072082610707565b565b61072c9051610716565b90565b60401b90565b9061074968ff00000000000000009161072f565b9181191691161790565b61075c90610716565b90565b90565b9061077761077261077e92610753565b61075f565b8254610735565b9055565b5190565b5490565b60209060018203010490565b5f5260205f2090565b5b8181106107ab575050565b806107b85f600193610475565b016107a0565b906107d1905f19906020036008026104ff565b8154169055565b9190918282106107e8575b505050565b600160206107f86108209561078a565b61080a6108048661078a565b94610796565b93840193019306025f8111610828575b5061079f565b5f80806107e3565b61083590600183036107be565b5f61081a565b90680100000000000000008111610864578161085961086293610786565b908281556107d8565b565b610059565b5190565b6005111561087757565b6106f3565b906108868261086d565b565b610892905161087c565b90565b60200190565b919060086108b69102916108b060ff84610401565b92610401565b9181191691161790565b90565b906108cd81610869565b9060018060401b0382116109ae576108f16108f7916108ec848661083b565b610895565b92610796565b60208204915f5b83811061096657506020830290035f811161091a575b50505050565b925f935f5b8181106109345750505001555f808080610914565b909194602061095a60019261095061094b8a610888565b6108c0565b908585029061089b565b9601910191909161091f565b5f5f5b6020811061098057509060019181850155016108fe565b959060206109a560019261099b61099686610888565b6108c0565b908a85029061089b565b92019601610969565b610059565b906109bd916108c3565b565b90610a4e60a06003610a54946109e25f82016109dc5f8801610642565b906105f7565b6109fb600182016109f560208801610642565b906105f7565b610a1460028201610a0e60408801610646565b90610690565b610a2d60028201610a2760608801610646565b906106d3565b610a4660028201610a4060808801610722565b90610762565b019201610782565b906109b3565b565b90610a60916109bf565b565b610a8f9291610a74610a7b925f6105f7565b60016105f7565b610a8560f5610636565b6080526002610a56565b56fe60806040526004361015610013575b610c2f565b61001d5f3561008c565b80631b9fc7011461008757806343cdaad214610082578063554970111461007d5780639e30396c14610078578063c040622614610073578063c4c71aac1461006e5763df958cf60361000e57610bfa565b610b39565b610996565b61095c565b6107e3565b61079f565b6105a0565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f9103126100aa57565b61009c565b5190565b60209181520190565b60200190565b5190565b60209181520190565b90825f9392825e0152565b601f801991011690565b61010361010c602093610111936100fa816100c2565b938480936100c6565b958691016100cf565b6100da565b0190565b5190565b60209181520190565b60200190565b600f0b90565b61013790610128565b9052565b9060208061015d936101535f8201515f86019061012e565b015191019061012e565b565b9061016c8160409361013b565b0190565b60200190565b9061019361018d61018684610115565b8093610119565b92610122565b905f5b8181106101a35750505090565b9091926101bc6101b6600192865161015f565b94610170565b9101919091610196565b5190565b60209181520190565b60200190565b63ffffffff1690565b6101eb906101d9565b9052565b906101fc816020936101e2565b0190565b60200190565b9061022361021d610216846101c6565b80936101ca565b926101d3565b905f5b8181106102335750505090565b90919261024c61024660019286516101ef565b94610200565b9101919091610226565b610299916040610288610276606084015f8601518582035f8701526100e4565b60208501518482036020860152610176565b920151906040818403910152610206565b90565b906102a691610256565b90565b60200190565b906102c36102bc836100af565b80926100b3565b90816102d4602083028401946100bc565b925f915b8383106102e757505050505090565b909192939460206103096103038385600195038752895161029c565b976102a9565b93019301919392906102d8565b5190565b60209181520190565b60200190565b5190565b60209181520190565b60200190565b90610346916100e4565b90565b60200190565b9061036361035c83610329565b809261032d565b908161037460208302840194610336565b925f915b83831061038757505050505090565b909192939460206103a96103a38385600195038752895161033c565b97610349565b9301930191939290610378565b6103e49160206103d3604083015f8501518482035f8601526100e4565b92015190602081840391015261034f565b90565b906103f1916103b6565b90565b60200190565b9061040e61040783610316565b809261031a565b908161041f60208302840194610323565b925f915b83831061043257505050505090565b9091929394602061045461044e838560019503875289516103e7565b976103f4565b9301930191939290610423565b5190565b60209181520190565b60200190565b6104a2916020610491604083015f8501518482035f8601526100e4565b9201519060208184039101526100e4565b90565b906104af91610474565b90565b60200190565b906104cc6104c583610461565b8092610465565b90816104dd6020830284019461046e565b925f915b8383106104f057505050505090565b9091929394602061051261050c838560019503875289516104a5565b976104b2565b93019301919392906104e1565b151590565b61052d9061051f565b9052565b906105859060608061057a610568610556608086015f8901518782035f8901526102af565b602088015186820360208801526103fa565b604087015185820360408701526104b8565b940151910190610524565b90565b61059d9160208201915f818403910152610531565b90565b346105d0576105b03660046100a0565b6105cc6105bb611519565b6105c3610092565b91829182610588565b0390f35b610098565b634e487b7160e01b5f525f60045260245ffd5b634e487b7160e01b5f52602260045260245ffd5b906001600283049216801561061c575b602083101461061757565b6105e8565b91607f169161060c565b5f5260205f2090565b905f9291805490610649610642836105fc565b80946100c6565b916001811690815f146106a05750600114610664575b505050565b6106719192939450610626565b915f925b81841061068857505001905f808061065f565b60018160209295939554848601520191019290610675565b92949550505060ff19168252151560200201905f808061065f565b906106c59161062f565b90565b634e487b7160e01b5f52604160045260245ffd5b906106e6906100da565b810190811067ffffffffffffffff82111761070057604052565b6106c8565b9061072561071e92610715610092565b938480926106bb565b03836106dc565b565b905f1061073a5761073790610705565b90565b6105d5565b61074a5f5f90610727565b90565b60209181520190565b61077561077e6020936107839361076c816100c2565b9384809361074d565b958691016100cf565b6100da565b0190565b61079c9160208201915f818403910152610756565b90565b346107cf576107af3660046100a0565b6107cb6107ba61073f565b6107c2610092565b91829182610787565b0390f35b610098565b6107e060015f90610727565b90565b34610813576107f33660046100a0565b61080f6107fe6107d4565b610806610092565b91829182610787565b0390f35b610098565b5f80fd5b90565b6108288161081c565b0361082f57565b5f80fd5b905035906108408261081f565b565b9060208282031261085b57610858915f01610833565b90565b61009c565b5190565b60209181520190565b60200190565b906108c7906060806108bc6108aa610898608086015f8901518782035f8901526102af565b602088015186820360208801526103fa565b604087015185820360408701526104b8565b940151910190610524565b90565b906108d491610873565b90565b60200190565b906108f16108ea83610860565b8092610864565b90816109026020830284019461086d565b925f915b83831061091557505050505090565b90919293946020610937610931838560019503875289516108ca565b976108d7565b9301930191939290610906565b6109599160208201915f8184039101526108dd565b90565b3461098c57610988610977610972366004610842565b61179a565b61097f610092565b91829182610944565b0390f35b610098565b5f0190565b346109c4576109a63660046100a0565b6109ae6144bb565b6109b6610092565b806109c081610991565b0390f35b610098565b5f1c90565b63ffffffff1690565b6109e36109e8916109c9565b6109ce565b90565b6109f590546109d7565b90565b60201c90565b610a0a610a0f916109f8565b6109ce565b90565b610a1c90546109fe565b90565b60401c90565b60ff1690565b610a37610a3c91610a1f565b610a25565b90565b610a499054610a2b565b90565b6002610a595f8201610705565b91610a6660018301610705565b91610a73600282016109eb565b91610a8b6002610a84818501610a12565b9301610a3f565b90565b610a97906101d9565b9052565b634e487b7160e01b5f52602160045260245ffd5b60021115610ab957565b610a9b565b90610ac882610aaf565b565b610ad390610abe565b90565b610adf90610aca565b9052565b90610b3794610b26610b1b608095610b0d610b30959b9a989b60a08801908882035f8a0152610756565b908682036020880152610756565b986040850190610a8e565b6060830190610a8e565b0190610ad6565b565b34610b6d57610b493660046100a0565b610b69610b54610a4c565b91610b60959395610092565b95869586610ae3565b0390f35b610098565b7f000000000000000000000000000000000000000000000000000000000000000090565b60018060a01b031690565b90565b610bb8610bb3610bbd92610b96565b610ba1565b610b96565b90565b610bc990610ba4565b90565b610bd590610bc0565b90565b610be190610bcc565b9052565b9190610bf8905f60208501940190610bd8565b565b34610c2a57610c0a3660046100a0565b610c26610c15610b72565b610c1d610092565b91829182610be5565b0390f35b610098565b5f80fd5b90610c46610c3f610092565b92836106dc565b565b610c526080610c33565b90565b606090565b606090565b606090565b5f90565b610c70610c48565b90602080808085610c7f610c55565b815201610c8a610c5a565b815201610c95610c5f565b815201610ca0610c64565b81525050565b610cae610c68565b90565b5490565b67ffffffffffffffff8111610ccd5760208091020190565b6106c8565b90610ce4610cdf83610cb5565b610c33565b918252565b5f5260205f2090565b52565b5490565b67ffffffffffffffff8111610d115760208091020190565b6106c8565b90610d28610d2383610cf9565b610c33565b918252565b5f5260205f2090565b600f0b90565b610d48610d4d916109c9565b610d36565b90565b610d5a9054610d3c565b90565b90610d6790610128565b9052565b60801c90565b610d7d610d8291610d6b565b610d36565b90565b610d8f9054610d71565b90565b610d9c6040610c33565b90565b90610dd5610dcc5f610daf610d92565b94610dc6610dbe838301610d50565b838801610d5d565b01610d85565b60208401610d5d565b565b610de090610d9f565b90565b90610ded82610cf5565b610df681610d16565b92610e046020850191610d2d565b5f915b838310610e145750505050565b600160208192610e2385610dd7565b815201920192019190610e07565b52565b5490565b5f5260205f2090565b610e4d610e5291610a1f565b6109ce565b90565b60601c90565b610e67610e6c91610e55565b6109ce565b90565b610e7b610e8091610d6b565b6109ce565b90565b60a01c90565b610e95610e9a91610e83565b6109ce565b90565b60c01c90565b610eaf610eb491610e9d565b6109ce565b90565b610ec3610ec89161008c565b6109ce565b90565b90600190610eeb610ee5610ede85610e34565b80936101ca565b93610e38565b5f92611055575b6001610eff575b50505090565b5490808310611033575b808310611011575b808310610fef575b808310610fcd575b808310610fab575b808310610f89575b808310610f67575b8210610f46575b80610ef9565b82610f5e60019394610f59602094610eb7565b6101e2565b0191015f610f40565b9192602081610f80600193610f7b86610ea3565b6101e2565b01930191610f39565b9192602081610fa2600193610f9d86610e89565b6101e2565b01930191610f31565b9192602081610fc4600193610fbf86610e6f565b6101e2565b01930191610f29565b9192602081610fe6600193610fe186610e5b565b6101e2565b01930191610f21565b919260208161100860019361100386610e41565b6101e2565b01930191610f19565b919260208161102a600193611025866109fe565b6101e2565b01930191610f11565b919260208161104c600193611047866109d7565b6101e2565b01930191610f09565b5b81600160080384011015610ef257926001602061110961110e600894838080808080808f549761108e816110898b6109d7565b6101e2565b016110a18161109c8a6109fe565b6101e2565b016110b4816110af89610e41565b6101e2565b016110c7816110c288610e5b565b6101e2565b016110da816110d587610e6f565b6101e2565b016110ed816110e886610e89565b6101e2565b01611100816110fb85610ea3565b6101e2565b01928391610eb7565b6101e2565b019401920191611056565b9061112391610ecb565b90565b9061114661113f92611136610092565b93848092611119565b03836106dc565b565b52565b6111556060610c33565b90565b906111a761119e600261116961114b565b946111806111785f8301610705565b5f8801610cf2565b61119861118f60018301610de3565b60208801610e31565b01611126565b60408401611148565b565b6111b290611158565b90565b906111bf82610cb1565b6111c881610cd2565b926111d66020850191610ce9565b5f915b8383106111e65750505050565b600360206001926111f6856111a9565b8152019201920191906111d9565b52565b5490565b67ffffffffffffffff81116112235760208091020190565b6106c8565b9061123a6112358361120b565b610c33565b918252565b5f5260205f2090565b5490565b67ffffffffffffffff81116112645760208091020190565b6106c8565b9061127b6112768361124c565b610c33565b918252565b5f5260205f2090565b61129290610705565b90565b9061129f82611248565b6112a881611269565b926112b66020850191611280565b5f915b8383106112c65750505050565b6001602081926112d585611289565b8152019201920191906112b9565b52565b6112f06040610c33565b90565b9061132a61132160016113046112e6565b9461131b6113135f8301610705565b5f8801610cf2565b01611295565b602084016112e3565b565b611335906112f3565b90565b9061134282611207565b61134b81611228565b92611359602085019161123f565b5f915b8383106113695750505050565b600260206001926113798561132c565b81520192019201919061135c565b52565b5490565b67ffffffffffffffff81116113a65760208091020190565b6106c8565b906113bd6113b88361138e565b610c33565b918252565b5f5260205f2090565b6113d56040610c33565b90565b9061140f61140660016113e96113cb565b946114006113f85f8301610705565b5f8801610cf2565b01610705565b60208401610cf2565b565b61141a906113d8565b90565b906114278261138a565b611430816113ab565b9261143e60208501916113c2565b5f915b83831061144e5750505050565b6002602060019261145e85611411565b815201920192019190611441565b52565b60ff1690565b611481611486916109c9565b61146f565b90565b6114939054611475565b90565b906114a09061051f565b9052565b9061150b61150260036114b5610c48565b946114cc6114c45f83016111b5565b5f8801611204565b6114e46114db60018301611338565b60208801611387565b6114fc6114f36002830161141d565b6040880161146c565b01611489565b60608401611496565b565b611516906114a4565b90565b611521610ca6565b5061152c600661150d565b90565b606090565b90565b61154b61154661155092611534565b610ba1565b61081c565b90565b60207f7665000000000000000000000000000000000000000000000000000000000000917f4e756d626572206f6620726573756c7473206d75737420626520706f736974695f8201520152565b6115ad602260409261074d565b6115b681611553565b0190565b6115cf9060208101905f8183039101526115a0565b90565b156115d957565b6115e1610092565b62461bcd60e51b8152806115f7600482016115ba565b0390fd5b90565b61160a61160f916109c9565b6115fb565b90565b61161c90546115fe565b90565b634e487b7160e01b5f52601160045260245ffd5b6116426116489193929361081c565b9261081c565b820391821161165357565b61161f565b90565b61166f61166a61167492611658565b610ba1565b61081c565b90565b61168661168c9193929361081c565b9261081c565b820180921161169757565b61161f565b67ffffffffffffffff81116116b45760208091020190565b6106c8565b906116cb6116c68361169c565b610c33565b918252565b6116d8610c68565b90565b5f5b8281106116e957505050565b6020906116f46116d0565b81840152016116dd565b9061172361170b836116b9565b92602080611719869361169c565b92019103906116db565b565b6001611731910161081c565b90565b61174861174361174d9261081c565b610ba1565b61081c565b90565b9061175a90611734565b5f5260205260405f2090565b634e487b7160e01b5f52603260045260245ffd5b9061178482610860565b811015611795576020809102010190565b611766565b6117a261152f565b506117bf816117b96117b35f611537565b9161081c565b116115d2565b806117db6117d56117d0600a611612565b61081c565b9161081c565b115f1461188e57506117ed600a611612565b5b906118166118066117ff600a611612565b8490611633565b611810600161165b565b90611677565b61181f836116fe565b916118295f611537565b5b8061183d6118378761081c565b9161081c565b1015611887576118829061187b611860600b61185a878590611677565b90611750565b8661186b849261150d565b611875838361177a565b5261177a565b5150611725565b61182a565b5092505090565b6117ee565b60e01b90565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f80fd5b67ffffffffffffffff81116118cb576118c76020916100da565b0190565b6106c8565b909291926118e56118e0826118ad565b610c33565b93818552602085019082840111611901576118ff926100cf565b565b6118a9565b9080601f8301121561192457816020611921935191016118d0565b90565b6118a1565b61193281610128565b0361193957565b5f80fd5b9050519061194a82611929565b565b91906040838203126119865761197f906119666040610c33565b93611973825f830161193d565b5f86015260200161193d565b6020830152565b611899565b909291926119a061199b82610cf9565b610c33565b9381855260406020860192028301928184116119df57915b8383106119c55750505050565b60206040916119d4848661194c565b8152019201916119b8565b6118a5565b9080601f83011215611a02578160206119ff9351910161198b565b90565b6118a1565b67ffffffffffffffff8111611a1f5760208091020190565b6106c8565b611a2d816101d9565b03611a3457565b5f80fd5b90505190611a4582611a24565b565b90929192611a5c611a5782611a07565b610c33565b9381855260208086019202830192818411611a9957915b838310611a805750505050565b60208091611a8e8486611a38565b815201920191611a73565b6118a5565b9080601f83011215611abc57816020611ab993519101611a47565b90565b6118a1565b919091606081840312611b5557611ad86060610c33565b925f82015167ffffffffffffffff8111611b505781611af8918401611906565b5f850152602082015167ffffffffffffffff8111611b4b5781611b1c9184016119e4565b6020850152604082015167ffffffffffffffff8111611b4657611b3f9201611a9e565b6040830152565b61189d565b61189d565b61189d565b611899565b929190611b6e611b6982610cb5565b610c33565b9381855260208086019202810191838311611bc55781905b838210611b94575050505050565b815167ffffffffffffffff8111611bc057602091611bb58784938701611ac1565b815201910190611b86565b6118a1565b6118a5565b9080601f83011215611be857816020611be593519101611b5a565b90565b6118a1565b929190611c01611bfc8261124c565b610c33565b9381855260208086019202810191838311611c585781905b838210611c27575050505050565b815167ffffffffffffffff8111611c5357602091611c488784938701611906565b815201910190611c19565b6118a1565b6118a5565b9080601f83011215611c7b57816020611c7893519101611bed565b90565b6118a1565b919091604081840312611cea57611c976040610c33565b925f82015167ffffffffffffffff8111611ce55781611cb7918401611906565b5f850152602082015167ffffffffffffffff8111611ce057611cd99201611c5d565b6020830152565b61189d565b61189d565b611899565b929190611d03611cfe8261120b565b610c33565b9381855260208086019202810191838311611d5a5781905b838210611d29575050505050565b815167ffffffffffffffff8111611d5557602091611d4a8784938701611c80565b815201910190611d1b565b6118a1565b6118a5565b9080601f83011215611d7d57816020611d7a93519101611cef565b90565b6118a1565b919091604081840312611dec57611d996040610c33565b925f82015167ffffffffffffffff8111611de75781611db9918401611906565b5f850152602082015167ffffffffffffffff8111611de257611ddb9201611906565b6020830152565b61189d565b61189d565b611899565b929190611e05611e008261138e565b610c33565b9381855260208086019202810191838311611e5c5781905b838210611e2b575050505050565b815167ffffffffffffffff8111611e5757602091611e4c8784938701611d82565b815201910190611e1d565b6118a1565b6118a5565b9080601f83011215611e7f57816020611e7c93519101611df1565b90565b6118a1565b611e8d8161051f565b03611e9457565b5f80fd5b90505190611ea582611e84565b565b919091608081840312611f4e57611ebe6080610c33565b925f82015167ffffffffffffffff8111611f495781611ede918401611bca565b5f850152602082015167ffffffffffffffff8111611f445781611f02918401611d5f565b602085015260408201519167ffffffffffffffff8311611f3f57611f2b82611f38948301611e61565b6040860152606001611e98565b6060830152565b61189d565b61189d565b61189d565b611899565b90602082820312611f83575f82015167ffffffffffffffff8111611f7e57611f7b9201611ea7565b90565b610818565b61009c565b905f9291805490611fa2611f9b836105fc565b809461074d565b916001811690815f14611ff95750600114611fbd575b505050565b611fca9192939450610626565b915f925b818410611fe157505001905f8080611fb8565b60018160209295939554848601520191019290611fce565b92949550505060ff19168252151560200201905f8080611fb8565b61201d90610aca565b9052565b5490565b60209181520190565b5f5260205f2090565b6005111561204157565b610a9b565b9061205082612037565b565b61205b90612046565b90565b61206790612052565b9052565b60ff1690565b61207d612082916109c9565b61206b565b90565b60081c90565b61209761209c91612085565b61206b565b90565b60101c90565b6120b16120b69161209f565b61206b565b90565b60181c90565b6120cb6120d0916120b9565b61206b565b90565b6120df6120e4916109f8565b61206b565b90565b60281c90565b6120f96120fe916120e7565b61206b565b90565b60301c90565b61211361211891612101565b61206b565b90565b60381c90565b61212d6121329161211b565b61206b565b90565b61214161214691610a1f565b61206b565b90565b60481c90565b61215b61216091612149565b61206b565b90565b60501c90565b61217561217a91612163565b61206b565b90565b60581c90565b61218f6121949161217d565b61206b565b90565b6121a36121a891610e55565b61206b565b90565b60681c90565b6121bd6121c2916121ab565b61206b565b90565b60701c90565b6121d76121dc916121c5565b61206b565b90565b60781c90565b6121f16121f6916121df565b61206b565b90565b61220561220a91610d6b565b61206b565b90565b60881c90565b61221f6122249161220d565b61206b565b90565b60901c90565b61223961223e91612227565b61206b565b90565b60981c90565b61225361225891612241565b61206b565b90565b61226761226c91610e83565b61206b565b90565b60a81c90565b6122816122869161226f565b61206b565b90565b60b01c90565b61229b6122a091612289565b61206b565b90565b60b81c90565b6122b56122ba916122a3565b61206b565b90565b6122c96122ce91610e9d565b61206b565b90565b60c81c90565b6122e36122e8916122d1565b61206b565b90565b60d01c90565b6122fd612302916122eb565b61206b565b90565b60d81c90565b61231761231c91612305565b61206b565b90565b61232b6123309161008c565b61206b565b90565b60e81c90565b61234561234a91612333565b61206b565b90565b60f01c90565b61235f6123649161234d565b61206b565b90565b60f81c90565b61237961237e91612367565b61206b565b90565b906001906123a161239b61239485612021565b8093612025565b9361202e565b5f926128fb575b60016123b5575b50505090565b54908083106128d9575b8083106128b7575b808310612895575b808310612873575b808310612851575b80831061282f575b80831061280d575b8083106127eb575b8083106127c9575b8083106127a7575b808310612785575b808310612763575b808310612741575b80831061271f575b8083106126fd575b8083106126db575b8083106126b9575b808310612697575b808310612675575b808310612653575b808310612631575b80831061260f575b8083106125ed575b8083106125cb575b8083106125a9575b808310612587575b808310612565575b808310612543575b808310612521575b8083106124ff575b8083106124dd575b82106124bc575b806123af565b826124d4600193946124cf60209461236d565b61205e565b0191015f6124b6565b91926020816124f66001936124f186612353565b61205e565b019301916124af565b919260208161251860019361251386612339565b61205e565b019301916124a7565b919260208161253a6001936125358661231f565b61205e565b0193019161249f565b919260208161255c6001936125578661230b565b61205e565b01930191612497565b919260208161257e600193612579866122f1565b61205e565b0193019161248f565b91926020816125a060019361259b866122d7565b61205e565b01930191612487565b91926020816125c26001936125bd866122bd565b61205e565b0193019161247f565b91926020816125e46001936125df866122a9565b61205e565b01930191612477565b91926020816126066001936126018661228f565b61205e565b0193019161246f565b919260208161262860019361262386612275565b61205e565b01930191612467565b919260208161264a6001936126458661225b565b61205e565b0193019161245f565b919260208161266c60019361266786612247565b61205e565b01930191612457565b919260208161268e6001936126898661222d565b61205e565b0193019161244f565b91926020816126b06001936126ab86612213565b61205e565b01930191612447565b91926020816126d26001936126cd866121f9565b61205e565b0193019161243f565b91926020816126f46001936126ef866121e5565b61205e565b01930191612437565b9192602081612716600193612711866121cb565b61205e565b0193019161242f565b9192602081612738600193612733866121b1565b61205e565b01930191612427565b919260208161275a60019361275586612197565b61205e565b0193019161241f565b919260208161277c60019361277786612183565b61205e565b01930191612417565b919260208161279e60019361279986612169565b61205e565b0193019161240f565b91926020816127c06001936127bb8661214f565b61205e565b01930191612407565b91926020816127e26001936127dd86612135565b61205e565b019301916123ff565b91926020816128046001936127ff86612121565b61205e565b019301916123f7565b919260208161282660019361282186612107565b61205e565b019301916123ef565b9192602081612848600193612843866120ed565b61205e565b019301916123e7565b919260208161286a600193612865866120d3565b61205e565b019301916123df565b919260208161288c600193612887866120bf565b61205e565b019301916123d7565b91926020816128ae6001936128a9866120a5565b61205e565b019301916123cf565b91926020816128d06001936128cb8661208b565b61205e565b019301916123c7565b91926020816128f26001936128ed86612071565b61205e565b019301916123bf565b5b816001602003840110156123a857928354908061291883612071565b906129229161205e565b6020018061292f8361208b565b906129399161205e565b60200180612946836120a5565b906129509161205e565b6020018061295d836120bf565b906129679161205e565b60200180612974836120d3565b9061297e9161205e565b6020018061298b836120ed565b906129959161205e565b602001806129a283612107565b906129ac9161205e565b602001806129b983612121565b906129c39161205e565b602001806129d083612135565b906129da9161205e565b602001806129e78361214f565b906129f19161205e565b602001806129fe83612169565b90612a089161205e565b60200180612a1583612183565b90612a1f9161205e565b60200180612a2c83612197565b90612a369161205e565b60200180612a43836121b1565b90612a4d9161205e565b60200180612a5a836121cb565b90612a649161205e565b60200180612a71836121e5565b90612a7b9161205e565b60200180612a88836121f9565b90612a929161205e565b60200180612a9f83612213565b90612aa99161205e565b60200180612ab68361222d565b90612ac09161205e565b60200180612acd83612247565b90612ad79161205e565b60200180612ae48361225b565b90612aee9161205e565b60200180612afb83612275565b90612b059161205e565b60200180612b128361228f565b90612b1c9161205e565b60200180612b29836122a9565b90612b339161205e565b60200180612b40836122bd565b90612b4a9161205e565b60200180612b57836122d7565b90612b619161205e565b60200180612b6e836122f1565b90612b789161205e565b60200180612b858361230b565b90612b8f9161205e565b60200180612b9c8361231f565b90612ba69161205e565b60200180612bb383612339565b90612bbd9161205e565b60200180612bca83612353565b90612bd49161205e565b602001612be1819261236d565b90612beb9161205e565b6020019260010191602001916128fc565b612c82916003612c2c612c1b60c084015f86018582035f87015261062f565b60018501848203602086015261062f565b92612c73612c696002830154612c4e612c44826109d7565b60408801906101e2565b612c64612c5a826109fe565b60608801906101e2565b610a2b565b6080850190612014565b019060a0818403910152612381565b90565b91612cb190612ca3612cbf959360608601908682035f880152611f88565b908482036020860152611f88565b916040818403910152612bfc565b90565b612cca610092565b3d5f823e3d90fd5b5190565b612ce5612ceb9193929361081c565b9261081c565b91612cf783820261081c565b928184041490151715612d0657565b61161f565b612d16906003612cd6565b90565b1c90565b90612d30905f1990602003600802612d19565b8154169055565b1b90565b91906008612d56910291612d505f1984612d37565b92612d37565b9181191691161790565b90565b9190612d79612d74612d8193611734565b612d60565b908354612d3b565b9055565b5f90565b612d9b91612d95612d85565b91612d63565b565b5b818110612da9575050565b80612db65f600193612d89565b01612d9e565b90612dcc905f1990600802612d19565b191690565b81612ddb91612dbc565b906002021790565b905f91612dfa612df282610626565b928354612dd1565b905555565b601f602091010490565b919290602082105f14612e6257601f8411600114612e3257612e2c929350612dd1565b90555b5b565b5090612e58612e5d936001612e4f612e4985610626565b92612dff565b82019101612d9d565b612de3565b612e2f565b50612e998293612e73600194610626565b612e92612e7f85612dff565b820192601f861680612ea4575b50612dff565b0190612d9d565b600202179055612e30565b612eb090888603612d1d565b5f612e8c565b929091680100000000000000008211612f16576020115f14612f0757602081105f14612eeb57612ee591612dd1565b90555b5b565b60019160ff1916612efb84610626565b55600202019055612ee8565b60019150600202019055612ee9565b6106c8565b908154612f27816105fc565b90818311612f50575b818310612f3e575b50505050565b612f4793612e09565b5f808080612f38565b612f5c83838387612eb6565b612f30565b5f612f6b91612f1b565b565b905f03612f7f57612f7d90612f61565b565b6105d5565b600190818003010490565b5f80910155565b905f03612fa857612fa690612f8f565b565b6105d5565b5b818110612fb9575050565b80612fc65f600193612f96565b01612fae565b9091828110612fdb575b505050565b612ff9612ff3612fed61300495612f84565b92612f84565b92610d2d565b918201910190612fad565b5f8080612fd6565b90680100000000000000008111613035578161302a61303393610cf5565b90828155612fcc565b565b6106c8565b5f6130449161300c565b565b905f03613058576130569061303a565b565b6105d5565b60089060018203010490565b5b818110613075575050565b806130825f600193612d89565b0161306a565b919091828210613098575b505050565b600460086130a86130d09561305d565b6130ba6130b48661305d565b94610e38565b93840193019306025f81116130d8575b50613069565b5f8080613093565b6130e59060018303612d1d565b5f6130ca565b90680100000000000000008111613114578161310961311293610e34565b90828155613088565b565b6106c8565b5f613123916130eb565b565b905f036131375761313590613119565b565b6105d5565b5f60026131629261314f83808301612f6d565b61315c8360018301613046565b01613125565b565b905f03613176576131749061313c565b565b6105d5565b5b818110613187575050565b806131945f600393613164565b0161317c565b90918281106131a9575b505050565b6131c76131c16131bb6131d295612d0b565b92612d0b565b92610ce9565b91820191019061317b565b5f80806131a4565b9068010000000000000000811161320357816131f861320193610cb1565b9082815561319a565b565b6106c8565b5190565b5190565b9190601f8111613220575b505050565b61322c61325193610626565b90602061323884612dff565b83019310613259575b61324a90612dff565b0190612d9d565b5f808061321b565b915061324a81929050613241565b90613271816100c2565b9067ffffffffffffffff8211613331576132958261328f85546105fc565b85613210565b602090601f83116001146132c9579180916132b8935f926132bd575b5050612dd1565b90555b565b90915001515f806132b1565b601f198316916132d885610626565b925f5b818110613319575091600293918560019694106132ff575b505050020190556132bb565b61330f910151601f841690612dbc565b90555f80806132f3565b919360206001819287870151815501950192016132db565b6106c8565b9061334091613267565b565b5190565b5190565b6133549051610128565b90565b5f1b90565b906133776fffffffffffffffffffffffffffffffff91613357565b9181191691161790565b61339561339061339a92610128565b610ba1565b610128565b90565b90565b906133b56133b06133bc92613381565b61339d565b825461335c565b9055565b60801b90565b906133e26fffffffffffffffffffffffffffffffff19916133c0565b9181191691161790565b906134016133fc61340892613381565b61339d565b82546133c6565b9055565b9061343660205f61343c9461342e82820161342884880161334a565b906133a0565b01920161334a565b906133ec565b565b906134489161340c565b565b61346f61346961345984610115565b93613464858561300c565b610122565b91610d2d565b5f915b83831061347f5750505050565b60016020826134976134918495613346565b8661343e565b01920192019190613472565b906134ad9161344a565b565b5190565b6134bd90516101d9565b90565b919060086134de9102916134d863ffffffff84612d37565b92612d37565b9181191691161790565b90565b906134f5816101c6565b9067ffffffffffffffff82116135da5761351b6135219161351684866130eb565b6101d3565b92610e38565b60088204915f5b83811061359157506008830290035f8111613544575b50505050565b925f935f5b81811061355e5750505001555f80808061353e565b909194602061358560019261357a6135758a6134b3565b6134e8565b9085600402906134c0565b96019101919091613549565b5f5f5b600881106135ab5750906001918185015501613528565b959060206135d16001926135c66135c1866134b3565b6134e8565b908a600402906134c0565b92019601613594565b6106c8565b906135e9916134eb565b565b9061362f604060026136359461360e5f82016136085f880161320c565b90613336565b6136276001820161362160208801613342565b906134a3565b0192016134af565b906135df565b565b90613641916135eb565b565b613668613662613652846100af565b9361365d85856131da565b6100bc565b91610ce9565b5f915b8383106136785750505050565b600360208261369161368b600195613208565b86613637565b0192019201919061366b565b906136a791613643565b565b5190565b6136b8906002612cd6565b90565b600190818003010490565b5b8181106136d2575050565b806136df5f600193612f6d565b016136c7565b90918281106136f4575b505050565b61371261370c61370661371d956136bb565b926136bb565b92611280565b9182019101906136c6565b5f80806136ef565b9068010000000000000000811161374e578161374361374c93611248565b908281556136e5565b565b6106c8565b5f61375d91613725565b565b905f036137715761376f90613753565b565b6105d5565b5f600161378f9261378983808301612f6d565b0161375f565b565b905f036137a3576137a190613776565b565b6105d5565b5b8181106137b4575050565b806137c15f600293613791565b016137a9565b90918281106137d6575b505050565b6137f46137ee6137e86137ff956136ad565b926136ad565b9261123f565b9182019101906137a8565b5f80806137d1565b90680100000000000000008111613830578161382561382e93611207565b908281556137c7565b565b6106c8565b5190565b5190565b61386261385c61384c84610329565b936138578585613725565b610336565b91611280565b5f915b8383106138725750505050565b600160208261388a613884849561320c565b86613336565b01920192019190613865565b906138a09161383d565b565b906138cd602060016138d3946138c55f82016138bf5f880161320c565b90613336565b019201613839565b90613896565b565b906138df916138a2565b565b6139066139006138f084610316565b936138fb8585613807565b610323565b9161123f565b5f915b8383106139165750505050565b600260208261392f613929600195613835565b866138d5565b01920192019190613909565b90613945916138e1565b565b5190565b613956906002612cd6565b90565b5f60016139729261396c83808301612f6d565b01612f6d565b565b905f036139865761398490613959565b565b6105d5565b5b818110613997575050565b806139a45f600293613974565b0161398c565b90918281106139b9575b505050565b6139d76139d16139cb6139e29561394b565b9261394b565b926113c2565b91820191019061398b565b5f80806139b4565b90680100000000000000008111613a135781613a08613a119361138a565b908281556139aa565b565b6106c8565b5190565b90613a4760206001613a4d94613a3f5f8201613a395f880161320c565b90613336565b01920161320c565b90613336565b565b90613a5991613a1c565b565b613a80613a7a613a6a84610461565b93613a7585856139ea565b61046e565b916113c2565b5f915b838310613a905750505050565b6002602082613aa9613aa3600195613a18565b86613a4f565b01920192019190613a83565b90613abf91613a5b565b565b613acb905161051f565b90565b90613ada60ff91613357565b9181191691161790565b613aed9061051f565b90565b90565b90613b08613b03613b0f92613ae4565b613af0565b8254613ace565b9055565b90613b7060606003613b7694613b365f8201613b305f8801612cd2565b9061369d565b613b4f60018201613b49602088016136a9565b9061393b565b613b6860028201613b6260408801613947565b90613ab5565b019201613ac1565b90613af3565b565b90613b8291613b13565b565b613b8d9061081c565b5f198114613b9b5760010190565b61161f565b90613bac5f1991613357565b9181191691161790565b90613bcb613bc6613bd292611734565b612d60565b8254613ba0565b9055565b613be090546105fc565b90565b90808214613cc257613bf481613bd6565b9067ffffffffffffffff8211613cbd57613c1882613c1285546105fc565b85613210565b5f90601f8311600114613c4b57918091613c3a935f92613c3f575b5050612dd1565b90555b565b90915001545f80613c33565b90613c5a601f19841692610626565b90613c6485610626565b925f5b818110613ca557509160029391856001969410613c8b575b50505002019055613c3d565b613c9b910154601f841690612dbc565b90555f8080613c7f565b91936001806020928787015481550195019201613c67565b6106c8565b5050565b90613cd091613be3565b565b90808203613cdf575b5050565b613d075f8084613cff82613d0d9701613cf9848801610d50565b906133a0565b019201610d85565b906133ec565b5f80613cdb565b90613d1e91613cd2565b565b818114613d7757613d4c613d46613d3684610cf5565b93613d41858561300c565b610d2d565b91610d2d565b5f915b838310613d5c5750505050565b60018082613d6b829486613d14565b01920192019190613d4f565b5050565b90613d8591613d20565b565b90565b90613d9a905f1990600802612d37565b191690565b90808214613e4557613db081610e34565b9067ffffffffffffffff8211613e4057613dd6613ddc91613dd184866130eb565b610e38565b92610e38565b60088204918354905f5b848110613e2257506008840290035f8111613e03575b5050505050565b6001916004613e13920290613d8a565b93505001555f80808080613dfc565b94916001613e308192613d87565b9301958654938186015501613de6565b6106c8565b5050565b90613e5391613d9f565b565b90808203613e62575b5050565b60028083613e785f613e9296015f860190613cc6565b613e89600182016001860190613d7b565b01910190613e49565b5f80613e5e565b90613ea391613e55565b565b818114613efd57613ed1613ecb613ebb84610cb1565b93613ec685856131da565b610ce9565b91610ce9565b5f915b838310613ee15750505050565b60038082613ef160019486613e99565b01920192019190613ed4565b5050565b90613f0b91613ea5565b565b818114613f6457613f39613f33613f2384611248565b93613f2e8585613725565b611280565b91611280565b5f915b838310613f495750505050565b60018082613f58829486613cc6565b01920192019190613f3c565b5050565b90613f7291613f0d565b565b90808203613f81575b5050565b60018083613f975f613fa096015f860190613cc6565b01910190613f68565b5f80613f7d565b90613fb191613f74565b565b81811461400b57613fdf613fd9613fc984611207565b93613fd48585613807565b61123f565b9161123f565b5f915b838310613fef5750505050565b60028082613fff60019486613fa7565b01920192019190613fe2565b5050565b9061401991613fb3565b565b90808203614028575b5050565b6001808361403e5f61404796015f860190613cc6565b01910190613cc6565b5f80614024565b906140589161401b565b565b8181146140b2576140866140806140708461138a565b9361407b85856139ea565b6113c2565b916113c2565b5f915b8383106140965750505050565b600280826140a66001948661404e565b01920192019190614089565b5050565b906140c09161405a565b565b908082036140cf575b5050565b614112600380846140e85f61411897015f870190613f01565b6140f960018201600187019061400f565b61410a6002820160028701906140b6565b019201611489565b90613af3565b5f806140cb565b90614129916140c2565b565b61413490610bc0565b90565b90602061415e5f61416694015461415961415082610d3c565b5f86019061012e565b610d71565b91019061012e565b565b9061417581604093614137565b0190565b60010190565b9061419c61419661418f84610cf5565b8093610119565b92610d2d565b905f5b8181106141ac5750505090565b9091926141c46141be60019286614168565b94614179565b910191909161419f565b61420e9160026141fe6141ed606084015f86018582035f87015261062f565b60018501848203602086015261417f565b9201906040818403910152610ecb565b90565b9061421b916141ce565b90565b60030190565b9061423861423183610cb1565b80926100b3565b908161424960208302840194610ce9565b925f915b83831061425c57505050505090565b9091929394602061427d614277838560019503875289614211565b9761421e565b930193019193929061424d565b60010190565b906142a461429d83611248565b809261032d565b90816142b560208302840194611280565b925f915b8383106142c857505050505090565b909192939460206142e96142e38385600195038752896106bb565b9761428a565b93019301919392906142b9565b614322916001614312604083015f85018482035f86015261062f565b9201906020818403910152614290565b90565b9061432f916142f6565b90565b60020190565b9061434c61434583611207565b809261031a565b908161435d6020830284019461123f565b925f915b83831061437057505050505090565b9091929394602061439161438b838560019503875289614325565b97614332565b9301930191939290614361565b6143ca9160016143ba604083015f85018482035f86015261062f565b920190602081840391015261062f565b90565b906143d79161439e565b90565b60020190565b906143f46143ed8361138a565b8092610465565b9081614405602083028401946113c2565b925f915b83831061441857505050505090565b909192939460206144396144338385600195038752896143cd565b976143da565b9301930191939290614409565b906144a0906060614498600361449061447f61446e608087015f8a018882035f8a0152614224565b600189018782036020890152614338565b6002880186820360408801526143e0565b950154611475565b910190610524565b90565b6144b89160208201915f818403910152614446565b90565b6144e47f0000000000000000000000000000000000000000000000000000000000000000610bcc565b5f63a192a0f991819061450d836001956145186002614501610092565b98899788968795611893565b855260048501612c85565b03925af180156145d157614535915f916145af575b506006613b78565b6145676006614562600b61455161454c600a611612565b613b84565b61455c81600a613bb6565b90611750565b61411f565b336006906145aa6145987f5a1ed425a160d1bc929890b991acc0e3d25a6f5db1ac65c07ee4c917708f76d49261412b565b926145a1610092565b918291826144a3565b0390a2565b6145cb91503d805f833e6145c381836106dc565b810190611f53565b5f61452d565b612cc256fea26469706673582212205bdf48c709477ad1d504988b5ab70fe01da3ad2825229213f67d3fbd3d03afef64736f6c634300081c0033
opengradient/cli.py CHANGED
@@ -1,3 +1,5 @@
1
+ # type: ignore
2
+
1
3
  import ast
2
4
  import json
3
5
  import logging
@@ -320,21 +322,23 @@ def infer(ctx, model_cid: str, inference_mode: str, input_data, input_file: Path
320
322
  model_input = json.load(file)
321
323
 
322
324
  click.echo(f'Running {inference_mode} inference for model "{model_cid}"')
323
- tx_hash, model_output = client.infer(model_cid=model_cid, inference_mode=InferenceModes[inference_mode], model_input=model_input)
325
+ inference_result = client.infer(model_cid=model_cid, inference_mode=InferenceModes[inference_mode], model_input=model_input)
324
326
 
325
327
  click.echo() # Add a newline for better spacing
326
328
  click.secho("✅ Transaction successful", fg="green", bold=True)
327
329
  click.echo("──────────────────────────────────────")
328
330
  click.echo("Transaction hash: ", nl=False)
329
- click.secho(tx_hash, fg="cyan", bold=True)
331
+ click.secho(inference_result.transaction_hash, fg="cyan", bold=True)
330
332
 
331
- block_explorer_link = f"{DEFAULT_BLOCKCHAIN_EXPLORER}0x{tx_hash}"
333
+ block_explorer_link = f"{DEFAULT_BLOCKCHAIN_EXPLORER}0x{inference_result.transaction_hash}"
332
334
  click.echo("Block explorer link: ", nl=False)
333
335
  click.secho(block_explorer_link, fg="blue", underline=True)
334
336
  click.echo()
335
337
 
336
338
  click.secho("Inference result:", fg="green")
337
- formatted_output = json.dumps(model_output, indent=2, default=lambda x: x.tolist() if hasattr(x, "tolist") else str(x))
339
+ formatted_output = json.dumps(
340
+ inference_result.model_output, indent=2, default=lambda x: x.tolist() if hasattr(x, "tolist") else str(x)
341
+ )
338
342
  click.echo(formatted_output)
339
343
  except json.JSONDecodeError as e:
340
344
  click.echo(f"Error decoding JSON: {e}", err=True)