revengai 2.12.1__py3-none-any.whl → 2.14.1__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.

Potentially problematic release.


This version of revengai might be problematic. Click here for more details.

revengai/__init__.py CHANGED
@@ -13,7 +13,7 @@
13
13
  """ # noqa: E501
14
14
 
15
15
 
16
- __version__ = "v2.12.1"
16
+ __version__ = "v2.14.1"
17
17
 
18
18
  # Define package exports
19
19
  __all__ = [
@@ -238,6 +238,7 @@ __all__ = [
238
238
  "FunctionRenameMap",
239
239
  "FunctionSearchResponse",
240
240
  "FunctionSearchResult",
241
+ "FunctionSourceType",
241
242
  "FunctionString",
242
243
  "FunctionStringsResponse",
243
244
  "FunctionTaskResponse",
@@ -565,6 +566,7 @@ from revengai.models.function_rename import FunctionRename as FunctionRename
565
566
  from revengai.models.function_rename_map import FunctionRenameMap as FunctionRenameMap
566
567
  from revengai.models.function_search_response import FunctionSearchResponse as FunctionSearchResponse
567
568
  from revengai.models.function_search_result import FunctionSearchResult as FunctionSearchResult
569
+ from revengai.models.function_source_type import FunctionSourceType as FunctionSourceType
568
570
  from revengai.models.function_string import FunctionString as FunctionString
569
571
  from revengai.models.function_strings_response import FunctionStringsResponse as FunctionStringsResponse
570
572
  from revengai.models.function_task_response import FunctionTaskResponse as FunctionTaskResponse
revengai/api_client.py CHANGED
@@ -90,7 +90,7 @@ class ApiClient:
90
90
  self.default_headers[header_name] = header_value
91
91
  self.cookie = cookie
92
92
  # Set default User-Agent.
93
- self.user_agent = 'OpenAPI-Generator/v2.12.1/python'
93
+ self.user_agent = 'OpenAPI-Generator/v2.14.1/python'
94
94
  self.client_side_validation = configuration.client_side_validation
95
95
 
96
96
  def __enter__(self):
revengai/configuration.py CHANGED
@@ -529,8 +529,8 @@ conf = revengai.Configuration(
529
529
  return "Python SDK Debug Report:\n"\
530
530
  "OS: {env}\n"\
531
531
  "Python Version: {pyversion}\n"\
532
- "Version of the API: v2.12.1\n"\
533
- "SDK Package Version: v2.12.1".\
532
+ "Version of the API: v2.14.1\n"\
533
+ "SDK Package Version: v2.14.1".\
534
534
  format(env=sys.platform, pyversion=sys.version)
535
535
 
536
536
  def get_host_settings(self) -> List[HostSetting]:
@@ -205,6 +205,7 @@ from revengai.models.function_rename import FunctionRename
205
205
  from revengai.models.function_rename_map import FunctionRenameMap
206
206
  from revengai.models.function_search_response import FunctionSearchResponse
207
207
  from revengai.models.function_search_result import FunctionSearchResult
208
+ from revengai.models.function_source_type import FunctionSourceType
208
209
  from revengai.models.function_string import FunctionString
209
210
  from revengai.models.function_strings_response import FunctionStringsResponse
210
211
  from revengai.models.function_task_response import FunctionTaskResponse
@@ -32,8 +32,9 @@ class AnalysisFunctionMatchingRequest(BaseModel):
32
32
  results_per_function: Optional[Annotated[int, Field(le=10, strict=True, ge=1)]] = Field(default=1, description="Maximum number of matches to return per function, default is 1, max is 10")
33
33
  page: Optional[Annotated[int, Field(strict=True, ge=1)]] = Field(default=1, description="Page number for paginated results, default is 1 (first page)")
34
34
  page_size: Optional[Annotated[int, Field(le=1000, strict=True, ge=0)]] = Field(default=0, description="Number of functions to return per page, default is 0 (all functions), max is 1000")
35
+ status_only: Optional[StrictBool] = Field(default=False, description="If set to true, only returns the status of the matching operation without the actual results")
35
36
  no_cache: Optional[StrictBool] = Field(default=False, description="If set to true, forces the system to bypass any cached results and perform a fresh computation")
36
- __properties: ClassVar[List[str]] = ["min_similarity", "filters", "results_per_function", "page", "page_size", "no_cache"]
37
+ __properties: ClassVar[List[str]] = ["min_similarity", "filters", "results_per_function", "page", "page_size", "status_only", "no_cache"]
37
38
 
38
39
  model_config = ConfigDict(
39
40
  populate_by_name=True,
@@ -99,6 +100,7 @@ class AnalysisFunctionMatchingRequest(BaseModel):
99
100
  "results_per_function": obj.get("results_per_function") if obj.get("results_per_function") is not None else 1,
100
101
  "page": obj.get("page") if obj.get("page") is not None else 1,
101
102
  "page_size": obj.get("page_size") if obj.get("page_size") is not None else 0,
103
+ "status_only": obj.get("status_only") if obj.get("status_only") is not None else False,
102
104
  "no_cache": obj.get("no_cache") if obj.get("no_cache") is not None else False
103
105
  })
104
106
  return _obj
@@ -30,8 +30,9 @@ class AutoUnstripRequest(BaseModel):
30
30
  apply: Optional[StrictBool] = Field(default=False, description="Whether to apply the matched function names to the target binary, default is False")
31
31
  confidence_threshold: Optional[Union[Annotated[float, Field(le=100.0, strict=True, ge=0.0)], Annotated[int, Field(le=100, strict=True, ge=0)]]] = Field(default=90.0, description="Confidence threshold for applying function names as a percentage, default is 90")
32
32
  min_group_size: Optional[Annotated[int, Field(le=20, strict=True, ge=1)]] = Field(default=10, description="Minimum number of matching functions required to consider for a match, default is 10")
33
+ status_only: Optional[StrictBool] = Field(default=False, description="If set to true, only returns the status of the auto-unstrip operation without the actual results")
33
34
  no_cache: Optional[StrictBool] = Field(default=False, description="If set to true, forces the system to bypass any cached results and perform a fresh computation")
34
- __properties: ClassVar[List[str]] = ["min_similarity", "apply", "confidence_threshold", "min_group_size", "no_cache"]
35
+ __properties: ClassVar[List[str]] = ["min_similarity", "apply", "confidence_threshold", "min_group_size", "status_only", "no_cache"]
35
36
 
36
37
  model_config = ConfigDict(
37
38
  populate_by_name=True,
@@ -88,6 +89,7 @@ class AutoUnstripRequest(BaseModel):
88
89
  "apply": obj.get("apply") if obj.get("apply") is not None else False,
89
90
  "confidence_threshold": obj.get("confidence_threshold") if obj.get("confidence_threshold") is not None else 90.0,
90
91
  "min_group_size": obj.get("min_group_size") if obj.get("min_group_size") is not None else 10,
92
+ "status_only": obj.get("status_only") if obj.get("status_only") is not None else False,
91
93
  "no_cache": obj.get("no_cache") if obj.get("no_cache") is not None else False
92
94
  })
93
95
  return _obj
@@ -32,7 +32,7 @@ class FunctionMatchingBatchResponse(BaseModel):
32
32
  error_message: Optional[StrictStr] = None
33
33
  current_page: Optional[StrictInt] = None
34
34
  total_pages: Optional[StrictInt] = None
35
- matches: List[FunctionMatchingResultWithBestMatch]
35
+ matches: Optional[List[FunctionMatchingResultWithBestMatch]] = None
36
36
  __properties: ClassVar[List[str]] = ["progress", "status", "total_time", "error_message", "current_page", "total_pages", "matches"]
37
37
 
38
38
  model_config = ConfigDict(
@@ -106,6 +106,11 @@ class FunctionMatchingBatchResponse(BaseModel):
106
106
  if self.total_pages is None and "total_pages" in self.model_fields_set:
107
107
  _dict['total_pages'] = None
108
108
 
109
+ # set to None if matches (nullable) is None
110
+ # and model_fields_set contains the field
111
+ if self.matches is None and "matches" in self.model_fields_set:
112
+ _dict['matches'] = None
113
+
109
114
  return _dict
110
115
 
111
116
  @classmethod
@@ -34,8 +34,9 @@ class FunctionMatchingRequest(BaseModel):
34
34
  results_per_function: Optional[Annotated[int, Field(le=50, strict=True, ge=1)]] = Field(default=1, description="Maximum number of matches to return per function, default is 1, max is 50")
35
35
  page: Optional[Annotated[int, Field(strict=True, ge=1)]] = Field(default=1, description="Page number for paginated results, default is 1 (first page)")
36
36
  page_size: Optional[Annotated[int, Field(le=1000, strict=True, ge=0)]] = Field(default=0, description="Number of functions to return per page, default is 0 (all functions), max is 1000")
37
+ status_only: Optional[StrictBool] = Field(default=False, description="If set to true, only returns the status of the matching operation without the actual results")
37
38
  no_cache: Optional[StrictBool] = Field(default=False, description="If set to true, forces the system to bypass any cached results and perform a fresh computation")
38
- __properties: ClassVar[List[str]] = ["model_id", "function_ids", "min_similarity", "filters", "results_per_function", "page", "page_size", "no_cache"]
39
+ __properties: ClassVar[List[str]] = ["model_id", "function_ids", "min_similarity", "filters", "results_per_function", "page", "page_size", "status_only", "no_cache"]
39
40
 
40
41
  model_config = ConfigDict(
41
42
  populate_by_name=True,
@@ -103,6 +104,7 @@ class FunctionMatchingRequest(BaseModel):
103
104
  "results_per_function": obj.get("results_per_function") if obj.get("results_per_function") is not None else 1,
104
105
  "page": obj.get("page") if obj.get("page") is not None else 1,
105
106
  "page_size": obj.get("page_size") if obj.get("page_size") is not None else 0,
107
+ "status_only": obj.get("status_only") if obj.get("status_only") is not None else False,
106
108
  "no_cache": obj.get("no_cache") if obj.get("no_cache") is not None else False
107
109
  })
108
110
  return _obj
@@ -18,6 +18,7 @@ import json
18
18
 
19
19
  from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr
20
20
  from typing import Any, ClassVar, Dict, List
21
+ from revengai.models.function_source_type import FunctionSourceType
21
22
  from typing import Optional, Set
22
23
  from typing_extensions import Self
23
24
 
@@ -28,10 +29,11 @@ class FunctionNameHistory(BaseModel):
28
29
  history_id: StrictInt = Field(description="The ID of the history record")
29
30
  change_made_by: StrictStr = Field(description="The user who made the change")
30
31
  function_name: StrictStr = Field(description="The name of the function")
32
+ mangled_name: StrictStr = Field(description="The mangled name of the function")
31
33
  is_debug: StrictBool = Field(description="Whether the function is debugged")
32
- source_type: StrictStr = Field(description="The source type of the function")
34
+ source_type: FunctionSourceType = Field(description="The source type of the function")
33
35
  created_at: StrictStr = Field(description="The timestamp when the function name was created")
34
- __properties: ClassVar[List[str]] = ["history_id", "change_made_by", "function_name", "is_debug", "source_type", "created_at"]
36
+ __properties: ClassVar[List[str]] = ["history_id", "change_made_by", "function_name", "mangled_name", "is_debug", "source_type", "created_at"]
35
37
 
36
38
  model_config = ConfigDict(
37
39
  populate_by_name=True,
@@ -87,6 +89,7 @@ class FunctionNameHistory(BaseModel):
87
89
  "history_id": obj.get("history_id"),
88
90
  "change_made_by": obj.get("change_made_by"),
89
91
  "function_name": obj.get("function_name"),
92
+ "mangled_name": obj.get("mangled_name"),
90
93
  "is_debug": obj.get("is_debug"),
91
94
  "source_type": obj.get("source_type"),
92
95
  "created_at": obj.get("created_at")
@@ -0,0 +1,39 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ RevEng.AI API
5
+
6
+ RevEng.AI is Similarity Search Engine for executable binaries
7
+
8
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
9
+
10
+ Do not edit the class manually.
11
+ """ # noqa: E501
12
+
13
+
14
+ from __future__ import annotations
15
+ import json
16
+ from enum import Enum
17
+ from typing_extensions import Self
18
+
19
+
20
+ class FunctionSourceType(str, Enum):
21
+ """
22
+ FunctionSourceType
23
+ """
24
+
25
+ """
26
+ allowed enum values
27
+ """
28
+ SYSTEM = 'SYSTEM'
29
+ USER = 'USER'
30
+ EXTERNAL = 'EXTERNAL'
31
+ AUTO_UNSTRIP = 'AUTO_UNSTRIP'
32
+ AI_UNSTRIP = 'AI_UNSTRIP'
33
+
34
+ @classmethod
35
+ def from_json(cls, json_str: str) -> Self:
36
+ """Create an instance of FunctionSourceType from a JSON string"""
37
+ return cls(json.loads(json_str))
38
+
39
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: revengai
3
- Version: 2.12.1
3
+ Version: 2.14.1
4
4
  Summary: RevEng.AI API
5
5
  Project-URL: Repository, https://github.com/RevEngAI/sdk-python
6
6
  License-Expression: MIT
@@ -362,6 +362,7 @@ Class | Method | HTTP request | Description
362
362
  - [FunctionRenameMap](docs/FunctionRenameMap.md)
363
363
  - [FunctionSearchResponse](docs/FunctionSearchResponse.md)
364
364
  - [FunctionSearchResult](docs/FunctionSearchResult.md)
365
+ - [FunctionSourceType](docs/FunctionSourceType.md)
365
366
  - [FunctionString](docs/FunctionString.md)
366
367
  - [FunctionStringsResponse](docs/FunctionStringsResponse.md)
367
368
  - [FunctionTaskResponse](docs/FunctionTaskResponse.md)
@@ -1,7 +1,7 @@
1
- revengai/__init__.py,sha256=3AxK8bPT069ptPwdibOPF138U1ppXQW4-GM77tRIM5c,40771
2
- revengai/api_client.py,sha256=Hdk2QLG3VoYaY_IKvtS4GXsvwVvM_I777rY2GLhTXfg,27670
1
+ revengai/__init__.py,sha256=PmqejqihdDcHISV6CAXPHuJdU9Op-E4Ioc7NeIFBRY8,40887
2
+ revengai/api_client.py,sha256=y5APbZpHDiAcltsZQYklRcmQbZaqBj5lOvidMwQTOoI,27670
3
3
  revengai/api_response.py,sha256=eMxw1mpmJcoGZ3gs9z6jM4oYoZ10Gjk333s9sKxGv7s,652
4
- revengai/configuration.py,sha256=yKnPxsXL8Vr_XK4wXJcaQY6_Jl2OhUUuV0H39gNtkRA,18749
4
+ revengai/configuration.py,sha256=PjxcvRxvhc9H1qy3KZOVWYsK9HSMxIxdLy7ThyQbn2w,18749
5
5
  revengai/exceptions.py,sha256=IvdI9ZIZ9b2lSSKtIKMQDlG-5UPAedrjm3U4xfmGkso,6385
6
6
  revengai/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  revengai/rest.py,sha256=T6Q2dcazhntqm288H33BKC1hf8NVdvmQWgaymlJo158,9376
@@ -25,7 +25,7 @@ revengai/api/functions_decompilation_api.py,sha256=93tId0XHIUo8zPdCwoFShyvZPbptn
25
25
  revengai/api/functions_renaming_history_api.py,sha256=2VuhjQliFO0rDcwmnl4s5BA36xgEtps2_qZdsqQI6hw,44111
26
26
  revengai/api/models_api.py,sha256=jZ1wY48GT0JsxY-DgcwkxF5uyQTqygUYOuF8De0BQnw,10402
27
27
  revengai/api/search_api.py,sha256=WQslQMX-fExlxONkJVy4MMfQ0VnDxqzJumYc9dbcRp0,63402
28
- revengai/models/__init__.py,sha256=6h20K0g1uP2y4CofAJqqx3Wa2dV9X3Aqsl-u4ynTXWM,21946
28
+ revengai/models/__init__.py,sha256=AqODqXr8RcmXxGyfiNBFPx0SQqgPRrYraxuw5omammU,22014
29
29
  revengai/models/addr.py,sha256=-2N-UQsOiZ0eyEAQ7ssk0of8W2fBrXeYdTZXuVt3SZs,4787
30
30
  revengai/models/ai_decompilation_rating.py,sha256=gyay27QJwToUNtK9NARyw731Sg8GFRTufGGUABVYyfo,722
31
31
  revengai/models/ai_unstrip_request.py,sha256=loSXNdHATJmY5yttiUCE-lLEOkuE63qVDTz8U0eCAIc,2596
@@ -35,7 +35,7 @@ revengai/models/analysis_create_request.py,sha256=6hU94Fi47hrxXQ-wX1jRuDrDi1GQym
35
35
  revengai/models/analysis_create_response.py,sha256=aaO3-lJ65iBGe5lnyW8exHb9qByDaWfF2hOVKrWkN-I,2628
36
36
  revengai/models/analysis_detail_response.py,sha256=KPyzlSbu9TU7itVlhGusJVSszrZAkuC8dMg1welYZeM,4170
37
37
  revengai/models/analysis_function_mapping.py,sha256=_8LOSaBOgsFKLeqvoizbU2FSHtekA7aNrM7deIJyM4k,2886
38
- revengai/models/analysis_function_matching_request.py,sha256=w-BJaHtbNOoaWM1RbSaT2P24X8X6RLEtuqfcvO_i43Q,4610
38
+ revengai/models/analysis_function_matching_request.py,sha256=BROfA46VO5-KN9AKkYJGY4TuoZfP4qf87tEem_Xj1cA,4894
39
39
  revengai/models/analysis_functions.py,sha256=N1TKQuw33I9dw-i07kLus36k2bcAXQVm2oc1Ycfrgdw,3067
40
40
  revengai/models/analysis_record.py,sha256=DxnERhF-s5AilH804yKtMAOyXhhjWQsq0ned1ji5t5Q,5516
41
41
  revengai/models/analysis_scope.py,sha256=azpsUux2axe4QKwQ4FbW30HbazYYVFP-e68F9zp33-4,668
@@ -53,7 +53,7 @@ revengai/models/app_api_rest_v2_functions_types_function.py,sha256=t3BttHuPogip0
53
53
  revengai/models/app_services_binary_ann_schema_tag_item.py,sha256=m25sIz8KEsPES0XGjmOZFhmLNLmB-jsakfRUpRfiMks,2977
54
54
  revengai/models/app_services_dynamic_execution_schemas_dynamic_execution_status.py,sha256=9e3LDnw0iNCbowQPFTkNyIqkzsCQyJLZrx6tqRska6o,2562
55
55
  revengai/models/argument.py,sha256=QmWpJiohyzTVC1GLHg1IlgM5QyONnBF6FGK_mOYQL_Y,3148
56
- revengai/models/auto_unstrip_request.py,sha256=pS7ZtnDbYywMrKZVDF3VQpT7oyXmn5dmmwpGCaVxG74,4030
56
+ revengai/models/auto_unstrip_request.py,sha256=DtTrmudKBYGdIEbv6-SWUUGOna4_JmRV8JkI_V_q0jI,4318
57
57
  revengai/models/auto_unstrip_response.py,sha256=g37ANqNsVIM_BCb-kHNDak6E-8fNVUyPOh03YFjm2O8,4737
58
58
  revengai/models/base_response.py,sha256=U1Hwv1TXztjpxHxXGwGk46egAYs49jfzEfr1nTajMjg,4526
59
59
  revengai/models/base_response_analysis_create_response.py,sha256=bwA1vMqKgLUDcElBvuvTH2jo8tvx0mjfbMOnoniswbE,4682
@@ -209,16 +209,17 @@ revengai/models/function_info_output.py,sha256=iIxkZ6_KFSoz0NhbBXyNi7knPvWcIp-hm
209
209
  revengai/models/function_local_variable_response.py,sha256=llv5alvfVXqxE3Cs6vt7qnQNyfwj4PBoxq_Sim65jic,2733
210
210
  revengai/models/function_mapping.py,sha256=EBO_jGfEjK7ihIdx-bWSHAT9EozB_S9JDeCLL0dAQJM,2923
211
211
  revengai/models/function_mapping_full.py,sha256=dax345vnk25zSPVVpAmCFrrOWXzFXW6OnhSs9zVIKpI,11948
212
- revengai/models/function_matching_batch_response.py,sha256=oBglZULIjMvbrlzjymWNKSNERVzftWH7hHBRC3uMoP0,4952
212
+ revengai/models/function_matching_batch_response.py,sha256=GC_Xhssh7nO1RtouaKpdoyMCuYj5AOehVcGVTRQD5Qw,5180
213
213
  revengai/models/function_matching_filters.py,sha256=O5F1PIcPhbumH8z-4KbG7JNoUsx_H3wBZQU9kCZ_boI,3710
214
- revengai/models/function_matching_request.py,sha256=6xIis7eqfUmXLUbZykrBHZW9eKhEAHUOCeXYv-rGKww,4973
214
+ revengai/models/function_matching_request.py,sha256=u8K_4LHhkSASmfM07aACCH41sZVk4T-AQbMwUSQ2bHQ,5257
215
215
  revengai/models/function_matching_result_with_best_match.py,sha256=lPuw9GkqzMvPguZRsct9mUZxdTu4swb8i5qwvge9wZM,4114
216
- revengai/models/function_name_history.py,sha256=INu3KWYUpQMFfWy6oWl5iSaxrlayKr-wvuiahRCzinI,3265
216
+ revengai/models/function_name_history.py,sha256=VnzWZ5rh52qunP6dYwGECaK4TSTd-SgvXuuNB4zjEjE,3495
217
217
  revengai/models/function_param_response.py,sha256=hYsmmzxKwYuCh9y_khNvJSinRpvjDXcpi4fJ7xF-F3k,2697
218
218
  revengai/models/function_rename.py,sha256=viZHvHCecb47UWsJMcdNZsmFqhw7fwslhc38dsdmNGI,2636
219
219
  revengai/models/function_rename_map.py,sha256=AsEmYjvRQDDSEYyFRnwpLEX9HuEGMTGxr4y3oxYQoSw,2808
220
220
  revengai/models/function_search_response.py,sha256=9hwZiJ4oUKyWr26jqH64m4bdEiw-5gRQBS7z23KoRH8,2986
221
221
  revengai/models/function_search_result.py,sha256=PI-MPPhDFVGZKEagHfiykBN-enZsLluiaOFAZj80LHE,3487
222
+ revengai/models/function_source_type.py,sha256=Aeo9jZP6oWCPv7t7oaRsjCLha__FoT0h4q4ERfc3WuU,767
222
223
  revengai/models/function_string.py,sha256=XT1Pr8FbFNMDqj16umYUkVEg7jqzywUtHGEVfnnW0SU,2585
223
224
  revengai/models/function_strings_response.py,sha256=AuD55_lQILjDfh_PveG6iRMTb_36wUzKKh5iZh5wAVA,3202
224
225
  revengai/models/function_task_response.py,sha256=LYrPw_-vGi7-DpJlxMoAxjLeawKtQ_TyJa3tzbEkfSk,2875
@@ -318,7 +319,7 @@ revengai/models/vulnerabilities.py,sha256=9t6uoZd3svWyfcZJjmj6zP731Dp47Apb25y8Qt
318
319
  revengai/models/vulnerability.py,sha256=P7rAOAYU5JLLpcRr824-YJgZba5kPb_J9ALV3tSNfLQ,3688
319
320
  revengai/models/vulnerability_type.py,sha256=SyOgfMmELYYc_H84oPkikBpjwngtG5Qw9Q_86a2TPr8,866
320
321
  revengai/models/workspace.py,sha256=chjU62GFvByEmaNd6luMNQVQLP3wlPx1zJgGJ_yyMLA,676
321
- revengai-2.12.1.dist-info/METADATA,sha256=x6PMySc03YIcUWPFzV2xBKDkIjX62Dq48bzej0OwQnw,39203
322
- revengai-2.12.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
323
- revengai-2.12.1.dist-info/licenses/LICENSE.md,sha256=z1S-x9w52sZDqbFdJi0kL5-FLP5CR2aQA0kW8m6scaw,1052
324
- revengai-2.12.1.dist-info/RECORD,,
322
+ revengai-2.14.1.dist-info/METADATA,sha256=MKAgmKe3OpY9UlhfRUtk7hbYMpGAFkU80Cbz0McScIw,39255
323
+ revengai-2.14.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
324
+ revengai-2.14.1.dist-info/licenses/LICENSE.md,sha256=z1S-x9w52sZDqbFdJi0kL5-FLP5CR2aQA0kW8m6scaw,1052
325
+ revengai-2.14.1.dist-info/RECORD,,