wandelbots_api_client 26.6.0.dev70__py3-none-any.whl → 26.6.0.dev72__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.
@@ -13,7 +13,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech)
13
13
  Do not edit the class manually.
14
14
  """ # noqa: E501
15
15
 
16
- __version__ = "26.6.0.dev70"
16
+ __version__ = "26.6.0.dev72"
17
17
 
18
18
  from . import api
19
19
  from . import api_client
@@ -85,7 +85,7 @@ class ApiClient:
85
85
  self.default_headers[header_name] = header_value
86
86
  self.cookie = cookie
87
87
  # Set default User-Agent.
88
- self.user_agent = "Wandelbots-Nova-API-Python-Client/26.6.0.dev70"
88
+ self.user_agent = "Wandelbots-Nova-API-Python-Client/26.6.0.dev72"
89
89
  self.client_side_validation = configuration.client_side_validation
90
90
 
91
91
  async def __aenter__(self):
@@ -512,7 +512,7 @@ class Configuration:
512
512
  "OS: {env}\n"
513
513
  "Python Version: {pyversion}\n"
514
514
  "Version of the API: 2.6.0 dev\n"
515
- "SDK Package Version: 26.6.0.dev70".format(env=sys.platform, pyversion=sys.version)
515
+ "SDK Package Version: 26.6.0.dev72".format(env=sys.platform, pyversion=sys.version)
516
516
  )
517
517
 
518
518
  def get_host_settings(self) -> List[HostSetting]:
@@ -396,6 +396,7 @@ from wandelbots_api_client.v2.models.service_status_status import ServiceStatusS
396
396
  from wandelbots_api_client.v2.models.session_response import SessionResponse
397
397
  from wandelbots_api_client.v2.models.set_io import SetIO
398
398
  from wandelbots_api_client.v2.models.settable_robot_system_mode import SettableRobotSystemMode
399
+ from wandelbots_api_client.v2.models.singularity_handling import SingularityHandling
399
400
  from wandelbots_api_client.v2.models.singularity_type_enum import SingularityTypeEnum
400
401
  from wandelbots_api_client.v2.models.snap7_io import Snap7IO
401
402
  from wandelbots_api_client.v2.models.snap7_io_area import Snap7IOArea
@@ -17,9 +17,10 @@ import re # noqa: F401
17
17
  import json
18
18
 
19
19
  from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt
20
- from typing import Any, ClassVar, Dict, List, Union
20
+ from typing import Any, ClassVar, Dict, List, Optional, Union
21
21
  from wandelbots_api_client.v2.models.motion_command import MotionCommand
22
22
  from wandelbots_api_client.v2.models.motion_group_setup import MotionGroupSetup
23
+ from wandelbots_api_client.v2.models.singularity_handling import SingularityHandling
23
24
  from typing import Optional, Set
24
25
  from typing_extensions import Self
25
26
  from pydantic_core import to_jsonable_python
@@ -39,7 +40,11 @@ class PlanTrajectoryRequest(BaseModel):
39
40
  motion_commands: List[MotionCommand] = Field(
40
41
  description="List of motion commands. A command consists of a path definition (line, circle, joint_ptp, cartesian_ptp, cubic_spline), blending, and limits override. "
41
42
  )
42
- __properties: ClassVar[List[str]] = ["motion_group_setup", "start_joint_position", "motion_commands"]
43
+ singularity_handling: Optional[SingularityHandling] = Field(
44
+ default=None,
45
+ description="<!-- theme: danger --> > > **Experimental** Strategy used to deal with wrist singularities along a cartesian path. ",
46
+ )
47
+ __properties: ClassVar[List[str]] = ["motion_group_setup", "start_joint_position", "motion_commands", "singularity_handling"]
43
48
 
44
49
  model_config = ConfigDict(
45
50
  validate_by_name=True,
@@ -108,6 +113,7 @@ class PlanTrajectoryRequest(BaseModel):
108
113
  "motion_commands": [MotionCommand.from_dict(_item) for _item in obj["motion_commands"]]
109
114
  if obj.get("motion_commands") is not None
110
115
  else None,
116
+ "singularity_handling": obj.get("singularity_handling"),
111
117
  }
112
118
  )
113
119
  return _obj
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Wandelbots NOVA API
5
+
6
+ Interact with robots in an easy and intuitive way.
7
+
8
+ The version of the OpenAPI document: 2.6.0 dev
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+ from __future__ import annotations
15
+ import json
16
+ from enum import Enum
17
+ from typing_extensions import Self
18
+
19
+
20
+ class SingularityHandling(str, Enum):
21
+ """
22
+ <!-- theme: danger --> > > **Experimental** Strategy used to deal with wrist singularities along a cartesian path. > > - `NONE`: No special handling; a singularity ends the path. > - `PALLETIZING_WRIST`: When performing a palletizing motion, attempt to bridge a wrist singularity by flipping the wrist branch. > A palletizing motion is a motion where the flange axis of rotation is alway parallel to the base axis of rotation. > This flag is supported for all robots except FANUC CRX and ABB GoFa. > - `ADAPTIVE_SAMPLING`: Alternative cartesian solver that re-samples the path in proximity to a singularity.
23
+ """
24
+
25
+ """
26
+ allowed enum values
27
+ """
28
+ NONE = "NONE"
29
+ PALLETIZING_WRIST = "PALLETIZING_WRIST"
30
+ ADAPTIVE_SAMPLING = "ADAPTIVE_SAMPLING"
31
+
32
+ @classmethod
33
+ def from_json(cls, json_str: str) -> Self:
34
+ """Create an instance of SingularityHandling from a JSON string"""
35
+ return cls(json.loads(json_str))
@@ -13,7 +13,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech)
13
13
  Do not edit the class manually.
14
14
  """ # noqa: E501
15
15
 
16
- __version__ = "26.6.0.dev70"
16
+ __version__ = "26.6.0.dev72"
17
17
 
18
18
  from . import api
19
19
  from . import api_client
@@ -85,7 +85,7 @@ class ApiClient:
85
85
  self.default_headers[header_name] = header_value
86
86
  self.cookie = cookie
87
87
  # Set default User-Agent.
88
- self.user_agent = "Wandelbots-Nova-API-Python-Client/26.6.0.dev70"
88
+ self.user_agent = "Wandelbots-Nova-API-Python-Client/26.6.0.dev72"
89
89
  self.client_side_validation = configuration.client_side_validation
90
90
 
91
91
  async def __aenter__(self):
@@ -512,7 +512,7 @@ class Configuration:
512
512
  "OS: {env}\n"
513
513
  "Python Version: {pyversion}\n"
514
514
  "Version of the API: 2.6.0 dev\n"
515
- "SDK Package Version: 26.6.0.dev70".format(env=sys.platform, pyversion=sys.version)
515
+ "SDK Package Version: 26.6.0.dev72".format(env=sys.platform, pyversion=sys.version)
516
516
  )
517
517
 
518
518
  def get_host_settings(self) -> List[HostSetting]:
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: tmps4or0_rz
3
- # timestamp: 2026-07-10T10:28:20+00:00
2
+ # filename: tmpp8ur0wkf
3
+ # timestamp: 2026-07-10T13:07:20+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -399,6 +399,7 @@ from .models import (
399
399
  SessionResponse,
400
400
  SetIO,
401
401
  SettableRobotSystemMode,
402
+ SingularityHandling,
402
403
  SingularityTypeEnum,
403
404
  Snap7IO,
404
405
  Snap7IOArea,
@@ -841,6 +842,7 @@ __all__ = [
841
842
  "SessionResponse",
842
843
  "SetIO",
843
844
  "SettableRobotSystemMode",
845
+ "SingularityHandling",
844
846
  "SingularityTypeEnum",
845
847
  "Snap7IO",
846
848
  "Snap7IOArea",
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: models.yaml
3
- # timestamp: 2026-07-10T10:28:20+00:00
3
+ # timestamp: 2026-07-10T13:07:20+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
  from pydantic import AnyUrl, AwareDatetime, BaseModel, EmailStr, Field, RootModel
@@ -3586,6 +3586,28 @@ class MotionCommand(BaseModel):
3586
3586
  ) = Field(..., discriminator="path_definition_name")
3587
3587
 
3588
3588
 
3589
+ class SingularityHandling(Enum):
3590
+ """
3591
+ <!-- theme: danger -->
3592
+ >
3593
+ > **Experimental**
3594
+
3595
+ Strategy used to deal with wrist singularities along a cartesian path.
3596
+
3597
+ >
3598
+ > - `NONE`: No special handling; a singularity ends the path.
3599
+ > - `PALLETIZING_WRIST`: When performing a palletizing motion, attempt to bridge a wrist singularity by flipping the wrist branch.
3600
+ > A palletizing motion is a motion where the flange axis of rotation is alway parallel to the base axis of rotation.
3601
+ > This flag is supported for all robots except FANUC CRX and ABB GoFa.
3602
+ > - `ADAPTIVE_SAMPLING`: Alternative cartesian solver that re-samples the path in proximity to a singularity.
3603
+
3604
+ """
3605
+
3606
+ NONE = "NONE"
3607
+ PALLETIZING_WRIST = "PALLETIZING_WRIST"
3608
+ ADAPTIVE_SAMPLING = "ADAPTIVE_SAMPLING"
3609
+
3610
+
3589
3611
  class PlanTrajectoryRequest(BaseModel):
3590
3612
  motion_group_setup: MotionGroupSetup
3591
3613
  """
@@ -3605,6 +3627,15 @@ class PlanTrajectoryRequest(BaseModel):
3605
3627
  List of motion commands. A command consists of a path definition (line, circle, joint_ptp, cartesian_ptp, cubic_spline), blending, and limits override.
3606
3628
 
3607
3629
  """
3630
+ singularity_handling: SingularityHandling = SingularityHandling.NONE
3631
+ """
3632
+ <!-- theme: danger -->
3633
+ >
3634
+ > **Experimental**
3635
+
3636
+ Strategy used to deal with wrist singularities along a cartesian path.
3637
+
3638
+ """
3608
3639
 
3609
3640
 
3610
3641
  class JointTrajectory(BaseModel):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wandelbots_api_client
3
- Version: 26.6.0.dev70
3
+ Version: 26.6.0.dev72
4
4
  Summary: Wandelbots Python Client: Interact with robots in an easy and intuitive way.
5
5
  Author: Copyright (c) 2025 Wandelbots GmbH
6
6
  Author-email: Copyright (c) 2025 Wandelbots GmbH <contact@wandelbots.com>
@@ -31,7 +31,7 @@ Description-Content-Type: text/markdown
31
31
  Interact with robots in an easy and intuitive way.
32
32
 
33
33
  - Compatible API version: 2.6.0 dev (can be found at the home screen of your instance -> API)
34
- - Package version: 26.6.0.dev70
34
+ - Package version: 26.6.0.dev72
35
35
 
36
36
  ## Requirements.
37
37
  Python >=3.9, Python < 4.0
@@ -1,6 +1,6 @@
1
1
  wandelbots_api_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  wandelbots_api_client/authorization.py,sha256=QNd828qdNPI-ctZ2hteyFgqLnd7zpIfEehxbfxJ75-U,7979
3
- wandelbots_api_client/v2/__init__.py,sha256=mh35AiqX49qFBJ1vPK-ht6i61_0aQw_r84HL1CEiPOc,1032
3
+ wandelbots_api_client/v2/__init__.py,sha256=LtDEHPbgGg88YRLT5AhaEzUy_eAMeiC7RHEtVZr8jBw,1032
4
4
  wandelbots_api_client/v2/api/__init__.py,sha256=P0yGp2xWLeEPi0maOq33OfqhAM3pyWPwtc5AJpdTp8Y,1967
5
5
  wandelbots_api_client/v2/api/application_api.py,sha256=nVY1ZFCeazTJOou0UKhtAaFURbixCIFAl-AIAFvn4-8,69559
6
6
  wandelbots_api_client/v2/api/bus_inputs_outputs_api.py,sha256=3V_7OHnjzC0LnS-jAnEhb_Yv90TGnAP-egURffcUIcs,267414
@@ -27,11 +27,11 @@ wandelbots_api_client/v2/api/version_api.py,sha256=1dAhtFz73CmB6F8fMOgsLGjCWq4w6
27
27
  wandelbots_api_client/v2/api/virtual_controller_api.py,sha256=nQ_rkwRufKGKGHB3QIjm7i771tqKRJGlt8nGxWupMPI,291431
28
28
  wandelbots_api_client/v2/api/virtual_controller_behavior_api.py,sha256=ByeJFFto88jrhAu8LpXAuHosXXIKpks5rSY8ZOWUdG4,41046
29
29
  wandelbots_api_client/v2/api/virtual_controller_inputs_outputs_api.py,sha256=OcQg8mxoQqZLHpByvSY3iqWNLia8rsxlvdpwlc02wb0,42027
30
- wandelbots_api_client/v2/api_client.py,sha256=MCJ8u8j5NKFJxpn4neQo3WUxArCr7Mlh_-whowAddO8,27803
30
+ wandelbots_api_client/v2/api_client.py,sha256=-u4Hy6IBrfW5ItRqneq-QLSoVc4iPNNxwAVzV1UitJc,27803
31
31
  wandelbots_api_client/v2/api_response.py,sha256=WhxwYDSMm6wPixp9CegO8dJzjFxDz3JF1yCq9s0ZqKE,639
32
- wandelbots_api_client/v2/configuration.py,sha256=r7J4nts-BBRSP7D49rrz_8bS0iYo4ZpBE9LMnLpor6g,18047
32
+ wandelbots_api_client/v2/configuration.py,sha256=OROdfgeGDdlB64NFMvRZvjOJUQrMdkHXVqtZajdc4lQ,18047
33
33
  wandelbots_api_client/v2/exceptions.py,sha256=7XIPwMCrxI3N-TgSYabwGXMOROXRQdrJA2wOpyaRC1A,6393
34
- wandelbots_api_client/v2/models/__init__.py,sha256=xE9DzCj5bx5jSc_Y5Jt5BfI3CW8fUhyQy33Jh8M6esQ,36996
34
+ wandelbots_api_client/v2/models/__init__.py,sha256=7Aj1zfex6MsLl_U0KSff_fIAA8vzHhEsuR_sJtPKdXk,37081
35
35
  wandelbots_api_client/v2/models/abb_confdata.py,sha256=lXK9rOsDRyCc2urbmVISftopF5LEbANjZ1R-1jXeLNg,3378
36
36
  wandelbots_api_client/v2/models/abb_configured_pose.py,sha256=Lg-eaUD80RzyQRshY3vm5BIq3_qFPZdz3kQk0ue9w_w,3144
37
37
  wandelbots_api_client/v2/models/abb_controller.py,sha256=P7QY_bKvz5fbW_nub4o2yROATVzb8xNr4cBetw5reSk,3741
@@ -330,7 +330,7 @@ wandelbots_api_client/v2/models/plan_collision_free_response.py,sha256=N3r3nnW4h
330
330
  wandelbots_api_client/v2/models/plan_collision_free_response_response.py,sha256=IbrBP_WO_r-ri0yehvvEse15_5eRphFe4wtNAUP7HMg,5916
331
331
  wandelbots_api_client/v2/models/plan_trajectory_failed_response.py,sha256=7D4vlDg9oRZ8WnBSCdQ6bDycz23gRenFxU1zUS5Qgzk,4239
332
332
  wandelbots_api_client/v2/models/plan_trajectory_failed_response_error_feedback.py,sha256=i-V3WE-uT20WkWLI_7ceBeag6IWgZbG10U77KK2YhfE,25052
333
- wandelbots_api_client/v2/models/plan_trajectory_request.py,sha256=Qqrsg6GUq7rApUa3y4cw60Jsgb1Ohd0b99i0EuqdNQI,4801
333
+ wandelbots_api_client/v2/models/plan_trajectory_request.py,sha256=RGxbdGYVT_AHxfB1XUejAN2t-ELzzQR9-4RPyrmazvA,5226
334
334
  wandelbots_api_client/v2/models/plan_trajectory_response.py,sha256=DQ-WQEiv6WO7iprGr_JAyU7FDrhW9peIeeBaqrdg09s,2825
335
335
  wandelbots_api_client/v2/models/plan_trajectory_response_response.py,sha256=REHbF0rEVT1gMjR0lUz1i_QAg2lL_9G2GDODr01iCJs,5840
336
336
  wandelbots_api_client/v2/models/plan_validation_error.py,sha256=sQAXKliWURJdvcYLEeBNYza2qgmbG6tEsdAzCQ4lDNc,3587
@@ -393,6 +393,7 @@ wandelbots_api_client/v2/models/service_status_status.py,sha256=qpd5-LwxzR7StK4d
393
393
  wandelbots_api_client/v2/models/session_response.py,sha256=PkwBB5o5GBjvOaQkmmS_IIpIB689Fx0Fkzbwcs6tMvQ,4465
394
394
  wandelbots_api_client/v2/models/set_io.py,sha256=JQxpqmBtscpJPRANit5SJO8KbaizwAYeflIBLmQgBUs,3117
395
395
  wandelbots_api_client/v2/models/settable_robot_system_mode.py,sha256=c4Cl2oe5eL-DeA_WLkNbDWLA22_Jd-qzUzVy4R_ZZjs,1014
396
+ wandelbots_api_client/v2/models/singularity_handling.py,sha256=Kp4iwl0ls5SAe-v6J-2ceHScdFGIHzJ79B0yVcPN0ak,1363
396
397
  wandelbots_api_client/v2/models/singularity_type_enum.py,sha256=HBdyzZW69iEgGOgKTPsGLgFHMYhtfj-jVeH-w37bdMw,729
397
398
  wandelbots_api_client/v2/models/snap7_io.py,sha256=HwMmy5eKySMPFEZxMfEtLi8_dvHDmHVjFN4Rk5iggtg,4023
398
399
  wandelbots_api_client/v2/models/snap7_io_area.py,sha256=rndBhEDFIJ9eNNsLbuFJtFekFiNu0eM7uQDAMeK48Q0,975
@@ -441,7 +442,7 @@ wandelbots_api_client/v2/models/zod_validation_error_error_details_inner.py,sha2
441
442
  wandelbots_api_client/v2/models/zod_validation_error_error_details_inner_path_inner.py,sha256=BJFV1ZqYKcQauiUfZ10UhbRxVhOL0DjQyHzHhlQ-hUA,5652
442
443
  wandelbots_api_client/v2/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
443
444
  wandelbots_api_client/v2/rest.py,sha256=pzalGbo_80nNBxbupQKYjZjOpOgPbYrEJtCfm236vL4,7253
444
- wandelbots_api_client/v2_pydantic/__init__.py,sha256=xHpBRUBTFxjx0Hw_gFSITFwzdB6iT1hzwmkN5-CLeL8,1041
445
+ wandelbots_api_client/v2_pydantic/__init__.py,sha256=vC8Z_tC3oGccASdrOBtry2OK_fuYhKdBpsT6nFC9qdk,1041
445
446
  wandelbots_api_client/v2_pydantic/api/__init__.py,sha256=P0yGp2xWLeEPi0maOq33OfqhAM3pyWPwtc5AJpdTp8Y,1967
446
447
  wandelbots_api_client/v2_pydantic/api/application_api.py,sha256=vU-xA4SdVSJuXu7EAO7tTK9yJjSkMR1Y5_76RZdBp-E,69591
447
448
  wandelbots_api_client/v2_pydantic/api/bus_inputs_outputs_api.py,sha256=CKmqk0PsMcT0Cp-2zEQDIS65dTWJJonJ83vkCAWEjn8,267356
@@ -468,14 +469,14 @@ wandelbots_api_client/v2_pydantic/api/version_api.py,sha256=TTJwo3cWTBgxpeDO2S-S
468
469
  wandelbots_api_client/v2_pydantic/api/virtual_controller_api.py,sha256=rdrD4YOLnKKg_ILuzc37Ku_VMMJh2MUsR2a8frZraXc,291365
469
470
  wandelbots_api_client/v2_pydantic/api/virtual_controller_behavior_api.py,sha256=3mNzqQUb8JM_E7iZ4MJGg7rnEGdL9VFFqjLlrMa6bss,41027
470
471
  wandelbots_api_client/v2_pydantic/api/virtual_controller_inputs_outputs_api.py,sha256=LItWYQPUCu8mh2XAA9gOudhYTNMzIjtzY1ijXoV4w2E,42039
471
- wandelbots_api_client/v2_pydantic/api_client.py,sha256=WkpVFDPybpcusWMl_5j1JTD5LU8QmEGTWqIHyDDdNK4,27857
472
+ wandelbots_api_client/v2_pydantic/api_client.py,sha256=VlsE1TSIllg7BE9MWEvNBqEiOF-QDfhmzTbcuiPCUU0,27857
472
473
  wandelbots_api_client/v2_pydantic/api_response.py,sha256=WhxwYDSMm6wPixp9CegO8dJzjFxDz3JF1yCq9s0ZqKE,639
473
- wandelbots_api_client/v2_pydantic/configuration.py,sha256=NkIOGWEjnoKWkI49d3DfvQI4_riYAVxHo2OBSCaNYFU,18056
474
+ wandelbots_api_client/v2_pydantic/configuration.py,sha256=gT9gn5Si30wuvEiYWUev2mi0FKmcgBuWfgj8tb7MP1M,18056
474
475
  wandelbots_api_client/v2_pydantic/exceptions.py,sha256=7XIPwMCrxI3N-TgSYabwGXMOROXRQdrJA2wOpyaRC1A,6393
475
- wandelbots_api_client/v2_pydantic/models/__init__.py,sha256=ubeca6Uq_F7WzJDvcZXFF9HE0zxJvSg9I2HLQHPs0HU,22719
476
- wandelbots_api_client/v2_pydantic/models/models.py,sha256=TjBDN2mxeCq4r2fxF1q01yu1TYfmBgvHlxI6SDcQH2Y,213415
476
+ wandelbots_api_client/v2_pydantic/models/__init__.py,sha256=PT9FSW03zSJds7Fnbb-8TJ23hUD2-N0ebyqdb5uzA50,22771
477
+ wandelbots_api_client/v2_pydantic/models/models.py,sha256=D9wflTrafDa1tennaqIP_LUWw8QANCCuDAcNTRHAv5U,214450
477
478
  wandelbots_api_client/v2_pydantic/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
478
479
  wandelbots_api_client/v2_pydantic/rest.py,sha256=EDM0lK-GKehCIR2PgMyO_5a5MGlOHws5c7Ue3j0FeSc,7262
479
- wandelbots_api_client-26.6.0.dev70.dist-info/WHEEL,sha256=WvwXFgRajeoYkfRVmDhkP4Qlqo31Mk687zIO2QQoFmw,80
480
- wandelbots_api_client-26.6.0.dev70.dist-info/METADATA,sha256=XWdJIlnUEP5RSpVaa-2vS8kCeFI7DkGhx2_Z9WDeBBg,1411
481
- wandelbots_api_client-26.6.0.dev70.dist-info/RECORD,,
480
+ wandelbots_api_client-26.6.0.dev72.dist-info/WHEEL,sha256=WvwXFgRajeoYkfRVmDhkP4Qlqo31Mk687zIO2QQoFmw,80
481
+ wandelbots_api_client-26.6.0.dev72.dist-info/METADATA,sha256=e7BB-HoUtUjUpxTbzP3dqQsL-iHmDwbBAmDPzh_otXM,1411
482
+ wandelbots_api_client-26.6.0.dev72.dist-info/RECORD,,