diff --git a/.clangd b/.clangd new file mode 100644 index 0000000..437f255 --- /dev/null +++ b/.clangd @@ -0,0 +1,2 @@ +CompileFlags: + Remove: [-f*, -m*] diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2c11903 --- /dev/null +++ b/.gitignore @@ -0,0 +1,64 @@ +# ESP-IDF build outputs +/build/ +/build-*/ +/managed_components/ + +# Local ESP-IDF configuration (keep sdkconfig.defaults in Git) +/sdkconfig +/sdkconfig.old +/sdkconfig.old.* + +# Local scratch and generated files +/tmp/ +/dist/ +/out/ + +# Generated microphone calibration recordings +/PC_SoftWare/calibration/data/real/ +/PC_SoftWare/calibration/data/sim/ + +# IDE/editor state containing machine-specific paths and ports +/.vscode/ +/.idea/ +*.code-workspace +*.swp +*.swo +*~ + +# Python caches and virtual environments +__pycache__/ +*.py[cod] +.pytest_cache/ +.mypy_cache/ +.ruff_cache/ +.coverage +.coverage.* +coverage.xml +htmlcov/ +.tox/ +.nox/ +.hypothesis/ +.venv/ +venv/ + +# CMake/Ninja files accidentally generated outside build directories +CMakeFiles/ +CMakeCache.txt +cmake_install.cmake +compile_commands.json +.ninja_* + +# Logs, crash dumps, and temporary files +*.log +*.tmp +*.temp +*.bak +*.dmp +core +core.* + +# Operating-system metadata +.DS_Store +Thumbs.db +Desktop.ini +$RECYCLE.BIN/ diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..01adc74 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.16) + +set(IDF_TARGET "esp32p4") +set(EXTRA_COMPONENT_DIRS "${CMAKE_CURRENT_LIST_DIR}/src") + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(esp32p4_usb_audio_hs) diff --git a/PCB_SCH/EasyEDA/LED_ring_v0.1.eprj2 b/PCB_SCH/EasyEDA/LED_ring_v0.1.eprj2 new file mode 100644 index 0000000..e2748c9 Binary files /dev/null and b/PCB_SCH/EasyEDA/LED_ring_v0.1.eprj2 differ diff --git a/PCB_SCH/EasyEDA/MainBoard_v0.3.eprj2 b/PCB_SCH/EasyEDA/MainBoard_v0.3.eprj2 new file mode 100644 index 0000000..e82a928 Binary files /dev/null and b/PCB_SCH/EasyEDA/MainBoard_v0.3.eprj2 differ diff --git a/PCB_SCH/EasyEDA/MicCell_V0.2.eprj2 b/PCB_SCH/EasyEDA/MicCell_V0.2.eprj2 new file mode 100644 index 0000000..356b9c6 Binary files /dev/null and b/PCB_SCH/EasyEDA/MicCell_V0.2.eprj2 differ diff --git a/PCB_SCH/README.md b/PCB_SCH/README.md new file mode 100644 index 0000000..372ea3d --- /dev/null +++ b/PCB_SCH/README.md @@ -0,0 +1,20 @@ +# PCB 打板注意事项 + +!!**特别注意板子厚度** +EashEDA/LED_ring_v0.1 ----------- 灯环板 板厚0.8mm +EashEDA/MainBoard_v0.3 ----------- 主板 板厚1.2mm +EashEDA/MicCell_v0.2 ------------- 咪板 板厚1.2mm + + +## 物料购买链接推荐 +本制作需要的个别物料比较冷门,以下是我购买的渠道,省去大家选购烦恼: + +[ESP32P4](https://item.taobao.com/item.htm?id=1069648375438&mi_id=0000Bty9AoDk8Pm7osqsQpSyEjnrG0gd3J2TxzlnfYYkg9k&spm=tbpc.boughtlist.suborder_itemtitle.1.3b022e8dl4WFlU) +[PCMD3180](https://item.taobao.com/item.htm?id=925148836133&mi_id=0000tLo6H694iLw_67OtnppISD4evxnzwUPfeShn5z4tfi4&spm=tbpc.boughtlist.suborder_itemtitle.1.3b022e8dl4WFlU) +[数字硅麦](https://item.taobao.com/item.htm?id=657891737326&mi_id=0000F52byEd69URltpPhxIZJAkliFo8_sBrmgKc14Bk8eLE&spm=tbpc.boughtlist.suborder_itemtitle.1.3b022e8dl4WFlU) +[板对板连接器](https://item.taobao.com/item.htm?id=1040176945284&mi_id=0000N8Fwsg3L-xKHa2momL1XCa3c24ZhiaalgcqPLpUbHfQ&spm=tbpc.boughtlist.suborder_itemtitle.1.3b022e8dl4WFlU) +[TypeC弯头数据线](https://detail.tmall.com/item.htm?id=1067254708680&maskChannel=bybtrs&pisk=hao-Rn1Pwc2vAkpD6x4TwzZ3lKAMAD2QdvkFd7ZW8MtIsvj3KURFvqHZ97vezu0Y9jGYNM4HzJILGbInrYcHvWMagkDuZWc0JjMtZXVH4HeIsjIuRDYmUY8G-IY-vzwbc8kfN8aW3nKBHkOMsHQchzRoZnZqWU_bhSydVMZIOowbIRrQd8ZBHSwLQw1SOk9xhSyhNJw7PiZbKJ5QAzZClswLBM17AM_fhJPbOkNIOx9YKSNQAkGIhaM_PhT93WbFLqfGzYNAXxoMyz_rEQIdAm3Yk5sgMQYJpb4jLynFLM3-FVlUCb1W9Woxh0gs1IbuNVeKI2IEbDvfRw873CQ9LFbzLGT3H5v7Pw7UWmyYsKpA8wz73-FMFg_F8PnV.&spm=tbpc.boughtlist.suborder_itemtitle.1.67002e8dkLCuOH&u_channel=bybtqdyh&umpChannel=bybtqdyh) + + +其他物料均为常见物料,自行选择即可 +所有PCB和原理图均为可编辑的文件,如需要替换硅麦器件,自行替换对应封装。 diff --git a/PCB_SCH/datasheet/MSM26D4..01.pdf b/PCB_SCH/datasheet/MSM26D4..01.pdf new file mode 100644 index 0000000..e3c2e69 Binary files /dev/null and b/PCB_SCH/datasheet/MSM26D4..01.pdf differ diff --git a/PCB_SCH/datasheet/PCMD3180结构流程.vsdx b/PCB_SCH/datasheet/PCMD3180结构流程.vsdx new file mode 100644 index 0000000..21995ae Binary files /dev/null and b/PCB_SCH/datasheet/PCMD3180结构流程.vsdx differ diff --git a/PCB_SCH/datasheet/pcmd3180.pdf b/PCB_SCH/datasheet/pcmd3180.pdf new file mode 100644 index 0000000..a93f9ed Binary files /dev/null and b/PCB_SCH/datasheet/pcmd3180.pdf differ diff --git a/PC_SoftWare/.gitignore b/PC_SoftWare/.gitignore new file mode 100644 index 0000000..e456810 --- /dev/null +++ b/PC_SoftWare/.gitignore @@ -0,0 +1,14 @@ +# Python-generated files +__pycache__/ +*.py[oc] +build/ +dist/ +wheels/ +*.egg-info + +# Virtual environments +.venv +.python-version + +# Upstream dependency cloned separately from the official repository +/pyroomacoustics/ diff --git a/PC_SoftWare/CMakeLists.txt b/PC_SoftWare/CMakeLists.txt new file mode 100644 index 0000000..affbc59 --- /dev/null +++ b/PC_SoftWare/CMakeLists.txt @@ -0,0 +1,4 @@ +cmake_minimum_required(VERSION 3.16) +project(esp32_8mic LANGUAGES CXX) + +add_subdirectory(cpp) diff --git a/PC_SoftWare/README.md b/PC_SoftWare/README.md new file mode 100644 index 0000000..6b48a89 --- /dev/null +++ b/PC_SoftWare/README.md @@ -0,0 +1,211 @@ +# ESP32 八麦克风 DOA 监视器 + +本文件夹的程序运行在PC端上位机,是纯python程序 windows/Linux/MaxOS均可运行 +从 USB 音频设备采集八路同步音频,使用 Pyroomacoustics 的SRP-PHAT 或 NormMUSIC +算法估计单个远场声源的水平方位,并根据估计方向引导频域 MVDR 波束形成器。 +界面会同时显示声源方位、各通道电平和波束形成后的输出电平。 + +## 阵列与角度约定 + +- 圆形阵列半径为 56 mm。 +- USB 通道必须按照 CH1 至 CH8 的顺序排列。 +- 各通道的数学方位角通过 `src/doa_estimator.py` 中的 + `MIC_AZIMUTHS_DEG` 配置。 +- 界面中的 0° 指向右侧(`+x`),角度沿逆时针方向增大。 +- 当前通道布局中 CH1 位于 157.5°,其余通道沿逆时针方向以 45° 间隔均匀分布。 + +如果实际 USB 通道顺序或阵列参考方向不同,请修改 `MIC_AZIMUTHS_DEG`。 +即使所有通道完全同步,错误的通道顺序仍可能造成方位镜像或其他定位错误。 + +## Pyroomacoustics 源码 + +`pyroomacoustics/` 是独立的上游仓库,不纳入本项目的 Git 管理。首次检出本项目后, +请从官方仓库克隆(当前项目已验证的上游提交为 `ff7d61f`): + +```powershell +git clone https://github.com/LCAV/pyroomacoustics.git pyroomacoustics +git -C pyroomacoustics checkout ff7d61f219e4eb41489963c4bb5f57bea5bc2c69 +``` + +项目要求上游源码位于以下路径: + +```text +./pyroomacoustics/pyroomacoustics/doa/srp.py +./pyroomacoustics/pyroomacoustics/doa/music.py +./pyroomacoustics/pyroomacoustics/doa/normmusic.py +``` + +程序只加载上游纯 Python 实现的 SRP-PHAT 和 NormMUSIC 算法。NormMUSIC +会先对各频率的 MUSIC 伪谱进行归一化,再沿频率轴融合,相比普通 MUSIC 对宽带 +信号更加稳健。实时 DOA 估计不需要房间仿真使用的原生 `libroom` 扩展。 + +## 运行程序 + +安装或同步依赖,然后列出可用的音频输入设备: + +```powershell +uv sync +uv run python src/main.py --list-devices +``` + +自动选择 USB 音频设备并启动: + +```powershell +uv run python src/main.py +``` + +启动时终端会显示本次实际打开的设备编号、设备名称、驱动接口(Host API)、 +使用/可用输入通道数、实际采样率和设备默认采样率。如果无法打开兼容的八通道 +输入设备,终端会显示进入模拟预览模式的具体原因。 + +默认不再强制使用 48 kHz。程序会优先选择能够更准确报告端点格式的 Windows +WASAPI/WDM-KS 设备,读取其 `default_samplerate`,再以音频流实际报告的采样率 +统一配置采集、SRP-PHAT、NormMUSIC 和 MVDR。顶部的 `DEVICE RATE` 显示本次音频 +流实际采用的采样率。`--list-devices` 的输出同时包含每个端点的默认采样率和 +Host API,便于区分同一硬件的 MME、DirectSound、WASAPI 和 WDM-KS 条目。 + +也可以使用 PortAudio 设备序号或设备名称中不区分大小写的部分文本来选择设备: + +```powershell +uv run python src/main.py --device 3 +uv run python src/main.py --device "USB Audio" +``` + +设备编号可能因重启、重新插拔或增加其他音频设备而改变。运行前可随时重新查询 +当前可用的设备编号: + +```powershell +uv run python src/main.py --list-devices +``` + +如需覆盖自动检测结果,可以显式指定采样率: + +```powershell +uv run python src/main.py --sample-rate 24000 +``` + +PortAudio 能查询的是操作系统音频端点的默认采样率和音频流协商后的实际采样率, +无法对所有驱动直接读取 ADC 内部时钟。Windows 上的旧式 MME/DirectSound +端点可能报告经过共享混音器转换后的 44.1/48 kHz,因此自动选择会优先使用 +WASAPI,其次使用 WDM-KS。显式使用数字设备序号时,程序会严格使用指定端点。 + +估计器使用 500 Hz 至 4 kHz 的频段和 1° 间隔的方位搜索网格。STFT 参数会 +根据设备采样率自动缩放:48 kHz 使用 `nfft=512、hop=256、window=8192`, +24 kHz 使用 `nfft=256、hop=128、window=4096`。两套配置的频率间隔均为 +93.75 Hz,STFT 帧长均约为 10.67 ms,帧重叠率均为 50%,滚动窗口时长均约 +为 171 ms。因此 24 kHz 模式在保持原有时频分辨率和处理延迟的同时,减少了 +FFT 与后续矩阵计算量。 + +当音频低于 -58 dBFS 时,DOA 区域显示 `LOW SIGNAL`,不再用噪声刷新方位。 +如果此前已经获得过有效 DOA,MVDR 会冻结并继续使用最后一次有效导向角,同时 +使用当前音频窗口更新协方差和流式输出,监听不会因低信号而断流;MVDR 卡片显示 +`HOLD` 和实际保持的 `STEER` 角度。程序启动后尚未得到过有效方向时,MVDR 才会 +等待首次定位。切换 SRP-PHAT/NormMUSIC 会清除保持角并重新定位。 + +上述参数均可在 `DoaConfig` 中配置,其中 MVDR 对角加载系数由 +`mvdr_diagonal_loading` 设置。程序会检查 4 kHz 分析上限必须低于当前采样率 +的奈奎斯特频率。 + +使用右侧面板中的 `SRP-PHAT / NormMUSIC` 分段开关选择 DOA 算法,也可以按 +`M` 键切换。切换算法不会中断当前 USB 音频采集流,但会重新开始方位估计。 + +如果没有兼容的八通道输入设备,界面会进入带有明确标识的模拟预览模式。 + +## DOA 引导的 MVDR 波束形成 + +每个有效的 DOA 结果都会用于引导一个八输入、单输出的频域 MVDR 波束形成器。 +在 500 Hz 至 4 kHz 的分析频段内,算法根据当前滚动窗口估计空间协方差矩阵, +执行对角加载,并在检测到的声源方向上施加单位增益的无失真约束。该频段之外 +使用更稳定的延迟求和权重。MVDR 与 SRP-PHAT/NormMUSIC 共用麦克风坐标、声速、 +STFT 参数和角度约定。每个处理周期只执行一次多通道去直流、加窗和 FFT;DOA +与 MVDR 直接复用同一份 `snapshots × frequencies × channels` 频谱,不再重复 +计算 STFT。 + +界面采用三栏布局:左侧为阵列方向图,中间为 DOA 结果、算法选择和八通道电平, +最右侧为独立的 MVDR 专用栏。该栏顶部的 `MVDR OUTPUT` 卡片在有最新结果时显示 +`LIVE` 状态、单通道输出电平、输入电平、引导角度和输出电平条。 +`LiveAudioSource.read_beamformed_audio()` 可返回最新单通道窗口的结果副本: +24 kHz 时为 4096 点,48 kHz 时为 8192 点。该数据是滚动窗口快照,相邻结果 +之间存在重叠,因此不能直接连续拼接成录音。 + +卡片中的 `MVDR IN` 不代表某一个麦克风通道,而是当前窗口内八个通道的整体 +RMS 输入电平。程序先对所有通道、所有采样点的平方值求平均,再开平方得到 +整体 RMS,最后转换为 dBFS: + +```text +MVDR IN = 20 × log10(sqrt(sum(x[m,n]²) / (8 × N))) +``` + +其中 `m` 为通道编号,`n` 为采样点编号,`N` 为每个通道的采样点数。因此它 +等价于先对八个通道的线性功率求平均后再转换为 dBFS,并不是八个通道 dBFS +读数的算术平均。若八个通道的电平接近,该数值会接近任意单通道的 RMS 电平。 + +MVDR 专用栏还提供 `MANUAL STEERING` 角度输入框和开关。输入采用与 DOA 相同的 +角度约定:0° 指向右侧,逆时针为正;提交时会归一化到 0°~359.9°。开关显示 +`MANUAL ON` 时,MVDR 使用该角度而不改变 DOA 算法的检测结果,即使当前为低信号 +也会继续按手动方向处理;输出卡片状态显示 `MANUAL`。阵列方向图使用浅蓝色箭头 +显示手动方向。切回 `AUTO DOA` 后,浅蓝色箭头消失,MVDR 恢复使用最新有效 DOA。 + +## MVDR 实时监听 + +最右侧 MVDR 专用栏按照 `MANUAL STEERING`、`MVDR OUTPUT`、`MONITOR`、 +`OUTPUT DEVICE`、`GAIN` 的顺序纵向排列引导设置、结果与监听控件: + +- `MONITOR` 开关用于启动或停止监听,键盘 `L` 键也可以切换。 +- `OUTPUT DEVICE` 下拉列表显示支持当前采样率、单通道 Float32 输出的设备, + 设备名称后同时标注 Host API。 +- `GAIN` 滑动条范围为 -10 dB~+40 dB,默认值为 0 dB。 +- 增益按照 `10^(dB/20)` 应用于 MVDR 单通道输出,超过 `[-1, 1]` 的采样会被 + 限幅,此时监听状态显示 `CLIPPING`。 + +监听默认关闭,以免扬声器输出重新进入麦克风阵列并产生强声反馈。启用前应优先 +选择耳机,或确保监听扬声器与麦克风阵列之间具有足够的声学隔离。 + +MVDR 完整滚动窗口的左右边缘缺少相邻 STFT 帧的重叠贡献,不能直接用于连续 +播放。监听路径使用有状态的流式 WOLA:只处理全局采样序号中尚未合成的新频谱 +帧,保存当前帧的后半个 Hann 窗,等下一帧到达后与其前半窗重叠相加,再按窗 +平方和归一化。只有获得完整前后帧贡献的 `hop` 才会送往输出设备,因此不会播放 +有限窗口中归一化条件很差的末端。24 kHz 配置会增加一个 128 点、约 5.33 ms +的合成等待时间。 + +空间协方差矩阵同时采用系数 0.70 的跨窗口指数平滑,相邻批次使用不同 MVDR +权重时,Hann 重叠也会对时域输出自然交叉渐变。已完成的 WOLA 音频块进入最多 +八项的有界播放队列;监听启动时先等待第一个完整块,再打开 PortAudio 输出, +避免初始欠载。播放使用独立的阻塞输出线程,不占用 Pygame 界面线程和 USB +输入线程。界面中的 `U` 表示输出欠载次数,`D` 表示队列溢出或源采样序号不连续 +的次数。 + +录音模块或网络发送模块仍可单独使用上述快照接口。 + +Pyroomacoustics 中考虑房间响应的 rake-MVDR 实现需要已知房间脉冲响应以及 +声源和干扰源的位置。实时 DOA 链路无法提供这些输入,因此本项目直接根据实测 +协方差矩阵实现等效的宽带 MVDR 无失真约束。 + +## 音频采集架构 + +USB 输入在独立的普通优先级线程中使用 PortAudio 阻塞读取模式。音频流设置为 +`blocksize=0`,由主机音频 API 选择稳定的原生块大小,采集线程每次请求读取 +1024 帧。RMS 计算和 DOA 数据提交均不会在 PortAudio 实时回调中执行。 + +DOA 输入保存在预分配的定长八通道环形缓冲区中,24 kHz 时为 4096×8, +48 kHz 时为 8192×8。新音频会覆盖最旧数据,因此即使估计过程延迟,也不会 +造成队列或处理延迟持续增长。声源方向面板中的 `OVF n` 表示 PortAudio 检测到 +的输入溢出次数。`AUDIO STALE` 或 `AUDIO ERROR` 表示采集线程已经停止提供 +新的音频块。 + +## 测试 + +```powershell +uv run pytest -q +``` + +测试会在多个方位合成远场平面波,验证从 STFT 到 Pyroomacoustics 的两条完整 +算法链路,包括 0°/360° 边界、运行时算法切换、有界环形缓冲区和 USB 阻塞采集。 +测试还会验证 MVDR 对目标方向的单位响应、对轴外干扰的抑制能力,以及后台线程 +能否正确发布波束形成音频,并检查 DOA 与 MVDR 在每个处理周期只执行一次共享 +STFT。监听测试还会检查有状态 WOLA 输出、输出设备参数、增益换算和削波保护。 +连续合成测试会额外验证 WOLA 块的全局采样区间首尾相接,并确保有限窗口边缘 +尖峰不会进入监听音频。 + +## 实际麦克风增益校准 +'calibration/' 中是麦克风增益一致性校准使用的脚本,具体极少查看 'calibration/README.md' diff --git a/PC_SoftWare/calibration/Gain Self-Calibration Procedure for Microphone Arrays.pdf b/PC_SoftWare/calibration/Gain Self-Calibration Procedure for Microphone Arrays.pdf new file mode 100644 index 0000000..102a445 Binary files /dev/null and b/PC_SoftWare/calibration/Gain Self-Calibration Procedure for Microphone Arrays.pdf differ diff --git a/PC_SoftWare/calibration/README.md b/PC_SoftWare/calibration/README.md new file mode 100644 index 0000000..93dc616 --- /dev/null +++ b/PC_SoftWare/calibration/README.md @@ -0,0 +1,148 @@ +# 离线麦克风增益校准 + +`src/calibrate_from_recordings.py` 按 `Gain Self-Calibration Procedure for +Microphone Arrays.pdf` 的公式 (5)--(9) 处理已经录制的 8 路同步音频。由于 +实验角度已知,目录名直接提供相对 CH0 的 DOA,不运行 DOA 估计器。 + +## 生成模拟数据 + +需要 `pyroomacoustics`(项目依赖已经声明)。从项目根目录执行: + +```powershell +uv run python calibration/src/generate_sim_data.py +``` + +默认在 `calibration/data/sim/` 下生成 `degree0`、`degree15`、...、 +`degree345` 共 24 组数据。每个目录包含: + +```text +ch0.wav ... ch7.wav # 24 kHz,同步,单通道 float32 WAV +metadata.json # 阵列、声源和注入增益信息 +``` + +`degree15` 表示声源 DOA 比 CH0 逆时针旋转 15°,不是绝对坐标系中的 15°。 +生成器默认注入一组通道增益,用来验证校准结果;可以用 +`--channel-gain-db` 替换。 + +## 运行校准 + +```bash +uv run python calibration/src/calibrate_from_recordings.py \ + --data calibration/data/sim \ + --iterations 5 \ + --alpha 0.5 \ + --log calibration/data/calibration.log \ + --output calibration/data/calibration_result.json +``` + +日志对每个方向输出拟合斜率、截距、RMSE、相对误差、实测/预测能量和该方向 +的候选修正量;最后输出跨所有方向汇总的 8 个线性校正系数和 dB 校正量。 + +脚本输出的系数是直接乘到音频样本上的补偿系数: + +```python +corrected[:, channel] = raw[:, channel] * correction[channel] +``` + +校准程序使用几何平均跨方向汇总增益,并在离线迭代中使用 `alpha` 平滑更新。 +校正系数会归一化为平均值 1,因此只改变通道匹配,不改变整体音量。 + +## `calibration_result.json` 字段说明 + +`calibration_result.json` 是校准程序生成的 JSON 结果文件。它保存了每个声源 +方向的拟合信息、最终的 8 通道补偿系数以及迭代过程,**不是新的音频文件**。 + +顶层字段如下: + +| 字段 | 类型 | 含义 | +| --- | --- | --- | +| `directions` | 数组 | 使用最终收敛的补偿系数,对每个 `degreeXX` 方向重新计算的拟合结果。 | +| `correction_linear` | 长度为 8 的数组 | 最终线性补偿系数,对应 `ch0`~`ch7`;运行时直接乘到对应通道音频上。 | +| `correction_db` | 长度为 8 的数组 | 与 `correction_linear` 对应的 dB 补偿量,计算方式为 `20 * log10(correction_linear)`。 | +| `iterations` | 整数 | 离线迭代次数,由命令行参数 `--iterations` 指定。 | +| `alpha` | 浮点数 | 每轮迭代的更新权重,由 `--alpha` 指定。数值越大,更新越快,也越容易受单次拟合误差影响。 | +| `history` | 数组 | 每一轮、每一个方向的中间拟合记录,用于检查收敛过程。 | + +### `correction_linear` 和 `correction_db` + +这两个数组是最重要的运行时结果,数组下标就是通道号: + +```text +correction_linear[0] / correction_db[0] -> ch0 +correction_linear[1] / correction_db[1] -> ch1 +... +correction_linear[7] / correction_db[7] -> ch7 +``` + +例如: + +```python +from scipy.io import wavfile +import numpy as np + +result = ... # 读取 calibration_result.json +audio = ... # shape: [samples, 8] +correction = np.asarray(result["correction_linear"], dtype=float) +corrected_audio = audio * correction[np.newaxis, :] +``` + +补偿系数的平均值会被归一化为 1,所以它只负责平衡通道间增益,不负责改变 +整体音量。若要查看某个通道需要增加还是衰减,可直接看 `correction_db`: + +- 正值:该通道需要放大; +- 负值:该通道需要衰减; +- 0 dB:该通道接近整体平均水平。 + +### `directions` 中的字段 + +`directions` 数组每一项对应一个方向,例如 `degree90`: + +| 字段 | 含义 | +| --- | --- | +| `folder` | 参与计算的数据目录名,例如 `degree90`。 | +| `angle_deg` | 相对于 CH0 的声源角度,单位为度;正方向为逆时针。 | +| `slope` | 能量拟合直线的斜率 (a_1)。 | +| `intercept` | 能量拟合直线的截距 (a_0)。 | +| `rmse` | 实测通道能量与拟合能量之间的均方根误差,越小通常表示拟合越好。 | +| `relative_error` | 相对拟合误差,程序内部以小数保存;例如 `0.04` 表示约 `4%`。 | + +拟合直线来自论文中的公式: + +```text +E_predicted(d) = slope * d + intercept +``` + +其中 `d` 是麦克风坐标在已知 DOA 方向上的投影,`slope` 和 `intercept` +的数值单位取决于输入音频的幅值标度,因此主要用于比较拟合质量,不建议跨不同 +录音音量直接比较其绝对大小。 + +### `history` 中的字段 + +`history` 保存每次迭代、每个方向的中间结果。它的条目数量通常等于: + +```text +iterations × 方向数量 +``` + +例如使用 5 轮、24 个方向时共有 120 条记录。除 `iteration` 外,其余字段与 +`directions` 基本相同: + +| 字段 | 含义 | +| --- | --- | +| `iteration` | 当前是第几轮迭代,从 1 开始。 | +| `angle_deg` | 当前方向,相对于 CH0 的角度。 | +| `slope`、`intercept` | 当前轮的能量直线拟合参数。 | +| `rmse` | 当前轮的拟合均方根误差。 | +| `relative_error` | 当前轮的相对拟合误差。 | + +通常可以观察到:随着迭代进行,`relative_error` 和 `rmse` 整体下降,最终的 +`correction_linear` 或 `correction_db` 逐渐稳定。如果某几个方向的误差明显高于 +其他方向,应检查对应录音是否存在噪声、削波、混响、声源移动或通道异常。 + +### 使用结果时的注意事项 + +1. `correction_linear` 的顺序必须与录音文件的 `ch0.wav`~`ch7.wav` 顺序一致。 +2. 这些系数是针对当前麦克风、前置放大器、采样增益和采样率条件得到的;更换硬件 + 或改变模拟前端后应重新校准。 +3. 模拟数据中的 `correction_db` 主要用于验证算法是否找回生成时注入的通道增益, + 实际录音时应以真实校准结果为准。 diff --git a/PC_SoftWare/calibration/data/calibration_result.json b/PC_SoftWare/calibration/data/calibration_result.json new file mode 100644 index 0000000..a426554 --- /dev/null +++ b/PC_SoftWare/calibration/data/calibration_result.json @@ -0,0 +1,1180 @@ +{ + "directions": [ + { + "folder": "degree0", + "angle_deg": 0.0, + "slope": 0.002143574555471232, + "intercept": 0.0016055520930747826, + "rmse": 6.492724053115841e-05, + "relative_error": 0.040439198959167165 + }, + { + "folder": "degree15", + "angle_deg": 15.0, + "slope": 0.0016467660738292435, + "intercept": 0.0016023133296622423, + "rmse": 7.055898303716873e-05, + "relative_error": 0.044035696221813324 + }, + { + "folder": "degree30", + "angle_deg": 30.0, + "slope": 0.0012259237569529863, + "intercept": 0.0016013363210894249, + "rmse": 6.013709438477434e-05, + "relative_error": 0.03755431859802052 + }, + { + "folder": "degree45", + "angle_deg": 45.0, + "slope": 0.0009332828134567735, + "intercept": 0.0016033992045385377, + "rmse": 5.655607526076824e-05, + "relative_error": 0.035272610277392036 + }, + { + "folder": "degree60", + "angle_deg": 60.0, + "slope": 0.0005179864719830612, + "intercept": 0.0016003990009170854, + "rmse": 5.1239536152282864e-05, + "relative_error": 0.032016725905802734 + }, + { + "folder": "degree75", + "angle_deg": 75.0, + "slope": 0.0002591234159167343, + "intercept": 0.0015998835080540685, + "rmse": 3.6177719676378986e-05, + "relative_error": 0.0226127211726695 + }, + { + "folder": "degree90", + "angle_deg": 90.0, + "slope": 0.00017972635146134273, + "intercept": 0.001602252501867401, + "rmse": 2.8204925302327567e-05, + "relative_error": 0.017603296153044016 + }, + { + "folder": "degree105", + "angle_deg": 105.0, + "slope": 4.113731962504569e-05, + "intercept": 0.001599618906648671, + "rmse": 2.3771712722870475e-05, + "relative_error": 0.014860860061146756 + }, + { + "folder": "degree120", + "angle_deg": 120.0, + "slope": 9.075696343308736e-05, + "intercept": 0.0015996461589870348, + "rmse": 2.6228170373807063e-05, + "relative_error": 0.016396232520831906 + }, + { + "folder": "degree135", + "angle_deg": 135.0, + "slope": 0.00032902569004571554, + "intercept": 0.0016023830087416894, + "rmse": 3.3714116669657574e-05, + "relative_error": 0.02103998637387725 + }, + { + "folder": "degree150", + "angle_deg": 150.0, + "slope": 0.0004925291765304317, + "intercept": 0.0016001822636989881, + "rmse": 4.51608479177903e-05, + "relative_error": 0.02822231500891423 + }, + { + "folder": "degree165", + "angle_deg": 165.0, + "slope": 0.0008276321495675723, + "intercept": 0.0016010085539545477, + "rmse": 6.283251178469047e-05, + "relative_error": 0.03924558156138013 + }, + { + "folder": "degree180", + "angle_deg": 180.0, + "slope": 0.0012935986275820757, + "intercept": 0.0016040998263335913, + "rmse": 6.512446536548136e-05, + "relative_error": 0.040598760935180084 + }, + { + "folder": "degree195", + "angle_deg": 195.0, + "slope": 0.0016168644581061767, + "intercept": 0.0016020016046851195, + "rmse": 6.392886509666713e-05, + "relative_error": 0.03990561863964714 + }, + { + "folder": "degree210", + "angle_deg": 210.0, + "slope": 0.002035845276115016, + "intercept": 0.0016028649637595007, + "rmse": 6.724708573728205e-05, + "relative_error": 0.04195430510849449 + }, + { + "folder": "degree225", + "angle_deg": 225.0, + "slope": 0.0025118816848816714, + "intercept": 0.001606071167035325, + "rmse": 5.687231972470526e-05, + "relative_error": 0.035410834147335375 + }, + { + "folder": "degree240", + "angle_deg": 240.0, + "slope": 0.00274515451394418, + "intercept": 0.0016037704027603685, + "rmse": 4.422506139745176e-05, + "relative_error": 0.027575681233007368 + }, + { + "folder": "degree255", + "angle_deg": 255.0, + "slope": 0.0030065751148725343, + "intercept": 0.0016044192804145108, + "rmse": 4.2285680509260276e-05, + "relative_error": 0.026355754400019134 + }, + { + "folder": "degree270", + "angle_deg": 270.0, + "slope": 0.003262332308432661, + "intercept": 0.0016074230932237223, + "rmse": 2.8428356854751115e-05, + "relative_error": 0.01768567154135967 + }, + { + "folder": "degree285", + "angle_deg": 285.0, + "slope": 0.0032230178946231268, + "intercept": 0.0016047370320784028, + "rmse": 2.4564675446143655e-05, + "relative_error": 0.015307601778422407 + }, + { + "folder": "degree300", + "angle_deg": 300.0, + "slope": 0.0031662966234584436, + "intercept": 0.0016044892617676047, + "rmse": 1.9692340598219296e-05, + "relative_error": 0.012273276654107984 + }, + { + "folder": "degree315", + "angle_deg": 315.0, + "slope": 0.0031083979679499005, + "intercept": 0.0016070952942202738, + "rmse": 3.4307050502185125e-05, + "relative_error": 0.021347240966709525 + }, + { + "folder": "degree330", + "angle_deg": 330.0, + "slope": 0.0027633880778752578, + "intercept": 0.001603971807058683, + "rmse": 5.0974839860641045e-05, + "relative_error": 0.03178038394210758 + }, + { + "folder": "degree345", + "angle_deg": 345.0, + "slope": 0.0024321523253018566, + "intercept": 0.0016033782979010343, + "rmse": 5.652380453245615e-05, + "relative_error": 0.035252943492157074 + } + ], + "correction_linear": [ + 0.8101321484207693, + 1.174589859595009, + 0.9079624106194999, + 1.2584957490497182, + 0.8837347310448367, + 1.0637304510822183, + 0.7536839967546087, + 1.1476706534333403 + ], + "correction_db": [ + -1.8288826681343429, + 1.3977249439146622, + -0.8386426154471731, + 1.9970350585161052, + -1.073561535307002, + 0.536631836656505, + -2.456214123248102, + 1.196345532707942 + ], + "iterations": 5, + "alpha": 0.5, + "history": [ + { + "iteration": 1, + "angle_deg": 0.0, + "slope": 0.003893723015541337, + "intercept": 0.0017808202059708064, + "rmse": 0.0006792127130242472, + "relative_error": 0.38140442855879286 + }, + { + "iteration": 1, + "angle_deg": 15.0, + "slope": 0.0019426842502820658, + "intercept": 0.0017748500257678307, + "rmse": 0.0006818173677319597, + "relative_error": 0.3841549189132157 + }, + { + "iteration": 1, + "angle_deg": 30.0, + "slope": -3.5410111522709106e-05, + "intercept": 0.001768266234668651, + "rmse": 0.0006642733445257003, + "relative_error": 0.37566364809888264 + }, + { + "iteration": 1, + "angle_deg": 45.0, + "slope": -0.001649839998540538, + "intercept": 0.0017680227776879223, + "rmse": 0.0006500819745249304, + "relative_error": 0.3676886874585718 + }, + { + "iteration": 1, + "angle_deg": 60.0, + "slope": -0.003283957871862909, + "intercept": 0.0017635441938545812, + "rmse": 0.0006327688907426211, + "relative_error": 0.35880523603980524 + }, + { + "iteration": 1, + "angle_deg": 75.0, + "slope": -0.004458951635987985, + "intercept": 0.0017630472294792197, + "rmse": 0.0006168235336461661, + "relative_error": 0.34986217234144507 + }, + { + "iteration": 1, + "angle_deg": 90.0, + "slope": -0.005223257663261534, + "intercept": 0.001765629850990276, + "rmse": 0.0006070765571316139, + "relative_error": 0.343830025750373 + }, + { + "iteration": 1, + "angle_deg": 105.0, + "slope": -0.0055543884603602225, + "intercept": 0.0017622065949279622, + "rmse": 0.0005967507927354564, + "relative_error": 0.33863838352043574 + }, + { + "iteration": 1, + "angle_deg": 120.0, + "slope": -0.005410315860158604, + "intercept": 0.0017603597213628637, + "rmse": 0.0005944339156375967, + "relative_error": 0.33767752603279755 + }, + { + "iteration": 1, + "angle_deg": 135.0, + "slope": -0.004613777179465781, + "intercept": 0.0017629958297051976, + "rmse": 0.0006055647380529082, + "relative_error": 0.3434861999385267 + }, + { + "iteration": 1, + "angle_deg": 150.0, + "slope": -0.003607430882127524, + "intercept": 0.0017632829018288346, + "rmse": 0.0006276062559016217, + "relative_error": 0.3559305516152193 + }, + { + "iteration": 1, + "angle_deg": 165.0, + "slope": -0.0020240024941476148, + "intercept": 0.001768747421219266, + "rmse": 0.0006550322740583391, + "relative_error": 0.3703368079580294 + }, + { + "iteration": 1, + "angle_deg": 180.0, + "slope": -0.0001957686377281763, + "intercept": 0.0017740602545156465, + "rmse": 0.0006700266522528236, + "relative_error": 0.37767976062106984 + }, + { + "iteration": 1, + "angle_deg": 195.0, + "slope": 0.001690586356444689, + "intercept": 0.0017729799048970911, + "rmse": 0.000673966884101694, + "relative_error": 0.38013227461865284 + }, + { + "iteration": 1, + "angle_deg": 210.0, + "slope": 0.003630016336052898, + "intercept": 0.001775261193701984, + "rmse": 0.0006719027677473848, + "relative_error": 0.37848107654865926 + }, + { + "iteration": 1, + "angle_deg": 225.0, + "slope": 0.005572929788156582, + "intercept": 0.0017802397308737431, + "rmse": 0.0006595887437587383, + "relative_error": 0.3705055742324162 + }, + { + "iteration": 1, + "angle_deg": 240.0, + "slope": 0.006949479168593042, + "intercept": 0.0017788497091247536, + "rmse": 0.0006407104953242074, + "relative_error": 0.36018247749522125 + }, + { + "iteration": 1, + "angle_deg": 255.0, + "slope": 0.008247050995657345, + "intercept": 0.0017844374722517707, + "rmse": 0.0006399382801588098, + "relative_error": 0.35862185708938044 + }, + { + "iteration": 1, + "angle_deg": 270.0, + "slope": 0.009094837344258555, + "intercept": 0.0017894570195913853, + "rmse": 0.0006295517025303399, + "relative_error": 0.3518115806291314 + }, + { + "iteration": 1, + "angle_deg": 285.0, + "slope": 0.009266662631209831, + "intercept": 0.0017864881019445025, + "rmse": 0.0006243803351244214, + "relative_error": 0.34950153569162584 + }, + { + "iteration": 1, + "angle_deg": 300.0, + "slope": 0.008907461544403769, + "intercept": 0.001782366576027923, + "rmse": 0.0006161021654922854, + "relative_error": 0.34566523731907856 + }, + { + "iteration": 1, + "angle_deg": 315.0, + "slope": 0.00834978715969677, + "intercept": 0.001785082816771224, + "rmse": 0.0006324914776416619, + "relative_error": 0.3543205232268627 + }, + { + "iteration": 1, + "angle_deg": 330.0, + "slope": 0.00703331875128994, + "intercept": 0.0017805415101777313, + "rmse": 0.000648936001437935, + "relative_error": 0.3644599116215825 + }, + { + "iteration": 1, + "angle_deg": 345.0, + "slope": 0.005578656787436386, + "intercept": 0.0017803207597266366, + "rmse": 0.0006681529201197061, + "relative_error": 0.3752991793581619 + }, + { + "iteration": 2, + "angle_deg": 0.0, + "slope": 0.003189384203435781, + "intercept": 0.0016818959336700305, + "rmse": 0.0003640067232739719, + "relative_error": 0.216426424481377 + }, + { + "iteration": 2, + "angle_deg": 15.0, + "slope": 0.0017719410766432833, + "intercept": 0.001677036373095265, + "rmse": 0.00036835161956671564, + "relative_error": 0.21964438307730802 + }, + { + "iteration": 2, + "angle_deg": 30.0, + "slope": 0.0003754152318554869, + "intercept": 0.001672874593904138, + "rmse": 0.00035330786770635064, + "relative_error": 0.21119805931286473 + }, + { + "iteration": 2, + "angle_deg": 45.0, + "slope": -0.0007617180987888331, + "intercept": 0.0016735412369710708, + "rmse": 0.0003417628139066575, + "relative_error": 0.204215352664516 + }, + { + "iteration": 2, + "angle_deg": 60.0, + "slope": -0.001936776607049974, + "intercept": 0.0016696454561568612, + "rmse": 0.000326906410436577, + "relative_error": 0.1957939089589955 + }, + { + "iteration": 2, + "angle_deg": 75.0, + "slope": -0.0027744029137183397, + "intercept": 0.0016688258618359586, + "rmse": 0.000311625348468466, + "relative_error": 0.18673329290668556 + }, + { + "iteration": 2, + "angle_deg": 90.0, + "slope": -0.003269890393149135, + "intercept": 0.0016711009119589088, + "rmse": 0.0003023394666757046, + "relative_error": 0.18092232761772253 + }, + { + "iteration": 2, + "angle_deg": 105.0, + "slope": -0.003523340554473571, + "intercept": 0.0016681685579556078, + "rmse": 0.0002940991418156095, + "relative_error": 0.17630061447509665 + }, + { + "iteration": 2, + "angle_deg": 120.0, + "slope": -0.0033953195499603905, + "intercept": 0.0016673593294765521, + "rmse": 0.000292735736359205, + "relative_error": 0.17556847596319022 + }, + { + "iteration": 2, + "angle_deg": 135.0, + "slope": -0.002803213715029741, + "intercept": 0.0016700926340671295, + "rmse": 0.00030341164001651235, + "relative_error": 0.1816735394357273 + }, + { + "iteration": 2, + "angle_deg": 150.0, + "slope": -0.0020902032695953796, + "intercept": 0.001669316569378936, + "rmse": 0.0003236545853361431, + "relative_error": 0.1938844861861988 + }, + { + "iteration": 2, + "angle_deg": 165.0, + "slope": -0.0009684880006104005, + "intercept": 0.0016727956183743814, + "rmse": 0.0003493860825117603, + "relative_error": 0.2088635806275562 + }, + { + "iteration": 2, + "angle_deg": 180.0, + "slope": 0.00035941682289021017, + "intercept": 0.001677179316486249, + "rmse": 0.0003609930140429133, + "relative_error": 0.21523817429325723 + }, + { + "iteration": 2, + "angle_deg": 195.0, + "slope": 0.0016572251929970756, + "intercept": 0.001675874447595631, + "rmse": 0.00036271991068888125, + "relative_error": 0.21643620809976175 + }, + { + "iteration": 2, + "angle_deg": 210.0, + "slope": 0.0030347952508046894, + "intercept": 0.0016779368141598278, + "rmse": 0.00035997459585908494, + "relative_error": 0.2145340592216105 + }, + { + "iteration": 2, + "angle_deg": 225.0, + "slope": 0.004422420382334315, + "intercept": 0.0016822956697840322, + "rmse": 0.00034631827375854104, + "relative_error": 0.2058605273608059 + }, + { + "iteration": 2, + "angle_deg": 240.0, + "slope": 0.005378602010874508, + "intercept": 0.0016806543690720988, + "rmse": 0.00032763889146611956, + "relative_error": 0.1949472166885874 + }, + { + "iteration": 2, + "angle_deg": 255.0, + "slope": 0.0062721067885496366, + "intercept": 0.0016839283954081833, + "rmse": 0.0003240206034083709, + "relative_error": 0.19241946646420705 + }, + { + "iteration": 2, + "angle_deg": 270.0, + "slope": 0.006896993557575842, + "intercept": 0.0016880778906239154, + "rmse": 0.00031208766276616645, + "relative_error": 0.18487752520164724 + }, + { + "iteration": 2, + "angle_deg": 285.0, + "slope": 0.006980794102425839, + "intercept": 0.0016852417999622146, + "rmse": 0.0003075776683111933, + "relative_error": 0.1825124847473458 + }, + { + "iteration": 2, + "angle_deg": 300.0, + "slope": 0.006746478377645998, + "intercept": 0.0016830961480226029, + "rmse": 0.00030043720467054784, + "relative_error": 0.1785026987457125 + }, + { + "iteration": 2, + "angle_deg": 315.0, + "slope": 0.00636274931003144, + "intercept": 0.0016856521532564817, + "rmse": 0.00031574764244157147, + "relative_error": 0.18731482757672405 + }, + { + "iteration": 2, + "angle_deg": 330.0, + "slope": 0.005409694080850465, + "intercept": 0.001681628368801765, + "rmse": 0.00033390209391369005, + "relative_error": 0.19855878986604522 + }, + { + "iteration": 2, + "angle_deg": 345.0, + "slope": 0.00435486923894298, + "intercept": 0.0016807949819885523, + "rmse": 0.00035260916854187554, + "relative_error": 0.20978713782492547 + }, + { + "iteration": 3, + "angle_deg": 0.0, + "slope": 0.002773060779951248, + "intercept": 0.0016405480392413835, + "rmse": 0.00021127473428255437, + "relative_error": 0.12878302203222972 + }, + { + "iteration": 3, + "angle_deg": 15.0, + "slope": 0.0017062219822238823, + "intercept": 0.001636357494617585, + "rmse": 0.00021664159764098038, + "relative_error": 0.1323925843549299 + }, + { + "iteration": 3, + "angle_deg": 30.0, + "slope": 0.0006861568936949623, + "intercept": 0.0016335817089566732, + "rmse": 0.00020284288034612123, + "relative_error": 0.1241706363593357 + }, + { + "iteration": 3, + "angle_deg": 45.0, + "slope": -0.0001328650170483846, + "intercept": 0.0016348090789337555, + "rmse": 0.00019325855763619427, + "relative_error": 0.11821475677284599 + }, + { + "iteration": 3, + "angle_deg": 60.0, + "slope": -0.0010138076619140939, + "intercept": 0.0016312662952694817, + "rmse": 0.0001801479782070923, + "relative_error": 0.11043443901802204 + }, + { + "iteration": 3, + "angle_deg": 75.0, + "slope": -0.001631431787648007, + "intercept": 0.0016304112235825592, + "rmse": 0.000164159874522139, + "relative_error": 0.1006861779088007 + }, + { + "iteration": 3, + "angle_deg": 90.0, + "slope": -0.001961419033850726, + "intercept": 0.0016326186412468852, + "rmse": 0.0001546737634335903, + "relative_error": 0.09473967742733894 + }, + { + "iteration": 3, + "angle_deg": 105.0, + "slope": -0.0021697857895634377, + "intercept": 0.0016298745872879825, + "rmse": 0.00014737596454115394, + "relative_error": 0.09042165924335262 + }, + { + "iteration": 3, + "angle_deg": 120.0, + "slope": -0.002064703493822549, + "intercept": 0.001629551096847748, + "rmse": 0.00014686242606906693, + "relative_error": 0.09012446823739492 + }, + { + "iteration": 3, + "angle_deg": 135.0, + "slope": -0.0016092672427419027, + "intercept": 0.0016323208032783993, + "rmse": 0.00015767710761817468, + "relative_error": 0.09659688665456662 + }, + { + "iteration": 3, + "angle_deg": 150.0, + "slope": -0.0011005846072349723, + "intercept": 0.001630926091720106, + "rmse": 0.000176758789847886, + "relative_error": 0.10837939913111694 + }, + { + "iteration": 3, + "angle_deg": 165.0, + "slope": -0.00028264472911403144, + "intercept": 0.0016332479473147323, + "rmse": 0.00020155947790482067, + "relative_error": 0.12341021351731078 + }, + { + "iteration": 3, + "angle_deg": 180.0, + "slope": 0.0007155242349012898, + "intercept": 0.0016370947923566232, + "rmse": 0.00021069978547314273, + "relative_error": 0.12870347304070104 + }, + { + "iteration": 3, + "angle_deg": 195.0, + "slope": 0.001634088265045105, + "intercept": 0.0016355582326620277, + "rmse": 0.0002112409742424147, + "relative_error": 0.12915527556521164 + }, + { + "iteration": 3, + "angle_deg": 210.0, + "slope": 0.002644423415491683, + "intercept": 0.0016373038914741461, + "rmse": 0.00020956803321651646, + "relative_error": 0.1279958071973016 + }, + { + "iteration": 3, + "angle_deg": 225.0, + "slope": 0.0036774706400389276, + "intercept": 0.001641240522388376, + "rmse": 0.00019556251391013172, + "relative_error": 0.11915530432160183 + }, + { + "iteration": 3, + "angle_deg": 240.0, + "slope": 0.004358938309074374, + "intercept": 0.0016393782325618963, + "rmse": 0.0001771338187334284, + "relative_error": 0.10804939044275162 + }, + { + "iteration": 3, + "angle_deg": 255.0, + "slope": 0.005002789190541815, + "intercept": 0.001641429661324884, + "rmse": 0.0001722465545586866, + "relative_error": 0.10493690873092751 + }, + { + "iteration": 3, + "angle_deg": 270.0, + "slope": 0.005486896341958587, + "intercept": 0.001645082818567115, + "rmse": 0.00015883494839862274, + "relative_error": 0.09655133869610874 + }, + { + "iteration": 3, + "angle_deg": 285.0, + "slope": 0.005520910069415554, + "intercept": 0.0016423107153353794, + "rmse": 0.00015430266110165835, + "relative_error": 0.09395460899136124 + }, + { + "iteration": 3, + "angle_deg": 300.0, + "slope": 0.0053628971142171515, + "intercept": 0.00164115032656262, + "rmse": 0.00014787503336686431, + "relative_error": 0.09010450229540382 + }, + { + "iteration": 3, + "angle_deg": 315.0, + "slope": 0.005101022124844902, + "intercept": 0.0016436882990567498, + "rmse": 0.00016335384927370188, + "relative_error": 0.09938249810955303 + }, + { + "iteration": 3, + "angle_deg": 330.0, + "slope": 0.004384320699858398, + "intercept": 0.0016400000410799153, + "rmse": 0.00018292146842599537, + "relative_error": 0.11153747795368611 + }, + { + "iteration": 3, + "angle_deg": 345.0, + "slope": 0.003600306415647694, + "intercept": 0.0016390335368254836, + "rmse": 0.00019975700411139499, + "relative_error": 0.1218748729805058 + }, + { + "iteration": 4, + "angle_deg": 0.0, + "slope": 0.0024921038722659225, + "intercept": 0.0016210896273856977, + "rmse": 0.00013371061629359208, + "relative_error": 0.08248193932942795 + }, + { + "iteration": 4, + "angle_deg": 15.0, + "slope": 0.0016749814546415144, + "intercept": 0.0016173369155191106, + "rmse": 0.0001394994965255405, + "relative_error": 0.08625258917111026 + }, + { + "iteration": 4, + "angle_deg": 30.0, + "slope": 0.0009194153559667331, + "intercept": 0.0016154184310070985, + "rmse": 0.0001267898369400704, + "relative_error": 0.07848730366473902 + }, + { + "iteration": 4, + "angle_deg": 45.0, + "slope": 0.000329666890802706, + "intercept": 0.0016170230208654125, + "rmse": 0.00011926484311258401, + "relative_error": 0.07375581025974189 + }, + { + "iteration": 4, + "angle_deg": 60.0, + "slope": -0.00034549102003468037, + "intercept": 0.0016137215485704812, + "rmse": 0.00010838037261907895, + "relative_error": 0.06716175582775599 + }, + { + "iteration": 4, + "angle_deg": 75.0, + "slope": -0.0008062765796675595, + "intercept": 0.0016129542249236652, + "rmse": 9.180167559061015e-05, + "relative_error": 0.05691523923746488 + }, + { + "iteration": 4, + "angle_deg": 90.0, + "slope": -0.0010238868218246271, + "intercept": 0.0016151925237296984, + "rmse": 8.224800596377682e-05, + "relative_error": 0.050921487535030834 + }, + { + "iteration": 4, + "angle_deg": 105.0, + "slope": -0.0012014951080150252, + "intercept": 0.0016125223282926946, + "rmse": 7.558188993182365e-05, + "relative_error": 0.046871840845669525 + }, + { + "iteration": 4, + "angle_deg": 120.0, + "slope": -0.0011182585986066692, + "intercept": 0.0016124200871349764, + "rmse": 7.601835157889107e-05, + "relative_error": 0.04714550022380585 + }, + { + "iteration": 4, + "angle_deg": 135.0, + "slope": -0.0007591066171853254, + "intercept": 0.0016151903331903968, + "rmse": 8.671457080778203e-05, + "relative_error": 0.05368690551564874 + }, + { + "iteration": 4, + "angle_deg": 150.0, + "slope": -0.0004001590221225643, + "intercept": 0.0016134116201659235, + "rmse": 0.00010402394478338696, + "relative_error": 0.06447452310569643 + }, + { + "iteration": 4, + "angle_deg": 165.0, + "slope": 0.00020409860092266837, + "intercept": 0.0016150168420521885, + "rmse": 0.00012715201468455466, + "relative_error": 0.07873107658925937 + }, + { + "iteration": 4, + "angle_deg": 180.0, + "slope": 0.0009682989039177599, + "intercept": 0.0016185167809094057, + "rmse": 0.00013388015972528458, + "relative_error": 0.08271780762758638 + }, + { + "iteration": 4, + "angle_deg": 195.0, + "slope": 0.0016226532615006453, + "intercept": 0.0016167622030521865, + "rmse": 0.0001336357890734039, + "relative_error": 0.08265642827443706 + }, + { + "iteration": 4, + "angle_deg": 210.0, + "slope": 0.0023729880134930057, + "intercept": 0.0016181766387983695, + "rmse": 0.00013374849174021958, + "relative_error": 0.08265382686499476 + }, + { + "iteration": 4, + "angle_deg": 225.0, + "slope": 0.003159147078326154, + "intercept": 0.001621800394394403, + "rmse": 0.00012044754269483633, + "relative_error": 0.074267797141468 + }, + { + "iteration": 4, + "angle_deg": 240.0, + "slope": 0.0036446579570347773, + "intercept": 0.001619756017311395, + "rmse": 0.00010317771488127983, + "relative_error": 0.06369954102874255 + }, + { + "iteration": 4, + "angle_deg": 255.0, + "slope": 0.004117841541906393, + "intercept": 0.001621107214738004, + "rmse": 9.837280709065708e-05, + "relative_error": 0.060682480588771945 + }, + { + "iteration": 4, + "angle_deg": 270.0, + "slope": 0.004502276617777876, + "intercept": 0.0016244519116210554, + "rmse": 8.394298727776161e-05, + "relative_error": 0.051674652033247406 + }, + { + "iteration": 4, + "angle_deg": 285.0, + "slope": 0.004503372536453787, + "intercept": 0.00162171925921098, + "rmse": 7.927299681439994e-05, + "relative_error": 0.04888207152017722 + }, + { + "iteration": 4, + "angle_deg": 300.0, + "slope": 0.004393531715715913, + "intercept": 0.0016210627523180017, + "rmse": 7.340285759035561e-05, + "relative_error": 0.04528070087687529 + }, + { + "iteration": 4, + "angle_deg": 315.0, + "slope": 0.0042205207206157894, + "intercept": 0.0016236198367808015, + "rmse": 8.932473533335454e-05, + "relative_error": 0.055015794528885095 + }, + { + "iteration": 4, + "angle_deg": 330.0, + "slope": 0.0036688380945089356, + "intercept": 0.0016201746607928116, + "rmse": 0.00010923521386850581, + "relative_error": 0.0674218752532847 + }, + { + "iteration": 4, + "angle_deg": 345.0, + "slope": 0.00308149377356983, + "intercept": 0.0016192824617367696, + "rmse": 0.00012275317873488534, + "relative_error": 0.07580714398847116 + }, + { + "iteration": 5, + "angle_deg": 0.0, + "slope": 0.0022910332523483567, + "intercept": 0.0016110706140023557, + "rmse": 9.098249225866282e-05, + "relative_error": 0.0564733112676151 + }, + { + "iteration": 5, + "angle_deg": 15.0, + "slope": 0.0016575378628655333, + "intercept": 0.0016076187879572141, + "rmse": 9.678320858318759e-05, + "relative_error": 0.060202834968213506 + }, + { + "iteration": 5, + "angle_deg": 30.0, + "slope": 0.0010944626428631818, + "intercept": 0.001606260628199075, + "rmse": 8.52389932818303e-05, + "relative_error": 0.053066726398815794 + }, + { + "iteration": 5, + "angle_deg": 45.0, + "slope": 0.0006746660187494698, + "intercept": 0.0016081311698668613, + "rmse": 7.981323779632694e-05, + "relative_error": 0.04963104956353452 + }, + { + "iteration": 5, + "angle_deg": 60.0, + "slope": 0.00014900495719275046, + "intercept": 0.0016050033524468278, + "rmse": 7.168727259740149e-05, + "relative_error": 0.04466487405656457 + }, + { + "iteration": 5, + "angle_deg": 75.0, + "slope": -0.00019614102280542987, + "intercept": 0.001604362151212607, + "rmse": 5.541367020081845e-05, + "relative_error": 0.03453937763299624 + }, + { + "iteration": 5, + "angle_deg": 90.0, + "slope": -0.0003337739869241456, + "intercept": 0.0016066638327567064, + "rmse": 4.635301138121377e-05, + "relative_error": 0.028850472909246663 + }, + { + "iteration": 5, + "angle_deg": 105.0, + "slope": -0.0004890029393905268, + "intercept": 0.0016040214553686596, + "rmse": 4.052810767787669e-05, + "relative_error": 0.02526656207884821 + }, + { + "iteration": 5, + "angle_deg": 120.0, + "slope": -0.000424349294932032, + "intercept": 0.0016040137368461696, + "rmse": 4.2029695342291985e-05, + "relative_error": 0.026202827554913127 + }, + { + "iteration": 5, + "angle_deg": 135.0, + "slope": -0.00013489184205800397, + "intercept": 0.001606769346212731, + "rmse": 5.16978356753167e-05, + "relative_error": 0.03217501989141886 + }, + { + "iteration": 5, + "angle_deg": 150.0, + "slope": 0.00011237715855890233, + "intercept": 0.0016047395446706228, + "rmse": 6.631094236096396e-05, + "relative_error": 0.04132193450406586 + }, + { + "iteration": 5, + "angle_deg": 165.0, + "slope": 0.0005616187561891844, + "intercept": 0.0016058794970861712, + "rmse": 8.687623951425585e-05, + "relative_error": 0.05409885341452497 + }, + { + "iteration": 5, + "angle_deg": 180.0, + "slope": 0.001154572358325574, + "intercept": 0.0016091407539260444, + "rmse": 9.125286236716586e-05, + "relative_error": 0.05670906174274908 + }, + { + "iteration": 5, + "angle_deg": 195.0, + "slope": 0.0016180808030124367, + "intercept": 0.0016071974680468505, + "rmse": 9.044297998235594e-05, + "relative_error": 0.05627371980138005 + }, + { + "iteration": 5, + "angle_deg": 210.0, + "slope": 0.0021781661157308633, + "intercept": 0.0016083122909185405, + "rmse": 9.233389818064554e-05, + "relative_error": 0.05741042874696414 + }, + { + "iteration": 5, + "angle_deg": 225.0, + "slope": 0.0027856937558071774, + "intercept": 0.0016116988416182707, + "rmse": 8.042059040961529e-05, + "relative_error": 0.04989802581781766 + }, + { + "iteration": 5, + "angle_deg": 240.0, + "slope": 0.003126733921080623, + "intercept": 0.001609510076160642, + "rmse": 6.524714562018405e-05, + "relative_error": 0.04053851329457093 + }, + { + "iteration": 5, + "angle_deg": 255.0, + "slope": 0.0034776539314388126, + "intercept": 0.0016104337725496248, + "rmse": 6.159811809802958e-05, + "relative_error": 0.03824939537905242 + }, + { + "iteration": 5, + "angle_deg": 270.0, + "slope": 0.0037884911267714056, + "intercept": 0.001613575852351877, + "rmse": 4.6988777881364165e-05, + "relative_error": 0.02912089804323447 + }, + { + "iteration": 5, + "angle_deg": 285.0, + "slope": 0.0037662338195545756, + "intercept": 0.001610870354963577, + "rmse": 4.244183568946073e-05, + "relative_error": 0.02634714554072253 + }, + { + "iteration": 5, + "angle_deg": 300.0, + "slope": 0.003688010507900557, + "intercept": 0.0016104787793754971, + "rmse": 3.705367470657329e-05, + "relative_error": 0.023007862743116534 + }, + { + "iteration": 5, + "angle_deg": 315.0, + "slope": 0.0035808986852052, + "intercept": 0.0016130614458538517, + "rmse": 5.290831590690144e-05, + "relative_error": 0.03279993830544698 + }, + { + "iteration": 5, + "angle_deg": 330.0, + "slope": 0.0031483855000238154, + "intercept": 0.0016097991475386739, + "rmse": 7.172659954458021e-05, + "relative_error": 0.04455624147537142 + }, + { + "iteration": 5, + "angle_deg": 345.0, + "slope": 0.0027073960983574805, + "intercept": 0.0016090519052658768, + "rmse": 8.117673388807334e-05, + "relative_error": 0.050450040562650365 + } + ] +} \ No newline at end of file diff --git a/PC_SoftWare/calibration/import_auditon_data.py b/PC_SoftWare/calibration/import_auditon_data.py new file mode 100644 index 0000000..e58d1f3 --- /dev/null +++ b/PC_SoftWare/calibration/import_auditon_data.py @@ -0,0 +1,53 @@ +import os +import shutil +import re + +# ===== 配置路径 ===== +src_dir = r"d:\Users\zzwang\Desktop\Record\未命名混音项目 4\未命名混音项目 4_Recorded" # 原始目录 +dst_root = r"E:\esp32_8mic\calibration\data\real" # 目标根目录 + + +# 匹配 _001 ~ _024 +pattern = re.compile(r'_(\d{3})') + + +for filename in os.listdir(src_dir): + src_path = os.path.join(src_dir, filename) + + # 跳过文件夹,只处理文件 + if not os.path.isfile(src_path): + continue + + match = pattern.search(filename) + if not match: + continue + + x = int(match.group(1)) + + # 只处理 _001 ~ _024 + if not 1 <= x <= 24: + continue + + degree = (x - 1) * 15 + + # 例如 degree0、degree15、degree30... + dst_dir = os.path.join(dst_root, f"degree{degree}") + + # 如果目录不存在则自动创建 + os.makedirs(dst_dir, exist_ok=True) + + # 去掉角度编号,将轨道 1 / 轨道_1 等格式改为 ch0 ~ ch7 + dst_filename = filename[:match.start()] + filename[match.end():] + dst_filename = re.sub( + r'轨道[_\s]+([1-8])(?!\d)', + lambda m: f"ch{int(m.group(1)) - 1}", + dst_filename, + ) + dst_path = os.path.join(dst_dir, dst_filename) + + shutil.copy2(src_path, dst_path) + + print(f"{filename} -> degree{degree}/{dst_filename}") + + +print("复制完成") diff --git a/PC_SoftWare/calibration/src/calibrate_from_recordings.py b/PC_SoftWare/calibration/src/calibrate_from_recordings.py new file mode 100644 index 0000000..edc0e35 --- /dev/null +++ b/PC_SoftWare/calibration/src/calibrate_from_recordings.py @@ -0,0 +1,167 @@ +"""Offline gain self-calibration using known DOA values from folder names. + +The implementation follows equations (5)--(9) of the supplied paper. Since +the coefficients returned here are applied directly to audio samples, the +correction ratio is sqrt(E_predicted / E_measured), i.e. the inverse of the +paper's path-gain estimate. +""" + +from __future__ import annotations + +import argparse +import json +import logging +from pathlib import Path +import sys + +import numpy as np + +ROOT = Path(__file__).resolve().parents[2] +if str(ROOT) not in sys.path: + sys.path.insert(0, str(ROOT)) + +from calibration.src.calibration_common import ( # noqa: E402 + CHANNEL_COUNT, + FitResult, + channel_energies, + fit_energy_line, + folder_angle_deg, + load_folder_audio, + projection_coordinates, +) + +LOG = logging.getLogger("calibration") + + +def recording_folders(data_root: Path) -> list[Path]: + folders = [] + for path in data_root.iterdir(): + if path.is_dir() and path.name.lower().startswith("degree"): + folder_angle_deg(path) # validate the name early + folders.append(path) + return sorted(folders, key=folder_angle_deg) + + +def format_vector(values: np.ndarray, unit: str = "") -> str: + return "[" + ", ".join(f"{value:+.4f}{unit}" for value in values) + "]" + + +def fit_one_folder(folder: Path, compensation: np.ndarray) -> tuple[FitResult, np.ndarray, np.ndarray]: + angle = folder_angle_deg(folder) + audio = load_folder_audio(folder) + energy = channel_energies(audio, compensation) + result = fit_energy_line(projection_coordinates(angle), energy) + candidate = compensation * np.sqrt(result.predicted_energy / energy) + candidate /= np.mean(candidate) + return result, candidate, energy + + +def log_folder_fit(folder: Path, result: FitResult, candidate: np.ndarray, energy: np.ndarray, prefix: str) -> None: + angle = folder_angle_deg(folder) + LOG.info( + "%s %s: slope=%+.6e intercept=%.6e RMSE=%.6e relative_error=%.3f%%", + prefix, + folder.name, + result.slope, + result.intercept, + result.rmse, + 100.0 * result.relative_error, + ) + LOG.info(" measured_energy=%s", format_vector(energy)) + LOG.info(" predicted_energy=%s", format_vector(result.predicted_energy)) + LOG.info(" candidate_correction_db=%s", format_vector(20.0 * np.log10(candidate), " dB")) + + +def calibrate(data_root: Path, iterations: int, alpha: float) -> tuple[np.ndarray, list[dict]]: + folders = recording_folders(data_root) + if not folders: + raise FileNotFoundError(f"no degree folders found under {data_root}") + compensation = np.ones(CHANNEL_COUNT, dtype=float) + history: list[dict] = [] + + for iteration in range(1, iterations + 1): + candidates = [] + LOG.info("===== calibration iteration %d/%d; current_correction_db=%s =====", iteration, iterations, format_vector(20.0 * np.log10(compensation), " dB")) + for folder in folders: + result, candidate, energy = fit_one_folder(folder, compensation) + log_folder_fit(folder, result, candidate, energy, f"iteration {iteration}") + candidates.append(candidate) + history.append({ + "iteration": iteration, + "angle_deg": folder_angle_deg(folder), + "slope": result.slope, + "intercept": result.intercept, + "rmse": result.rmse, + "relative_error": result.relative_error, + }) + # Geometric mean is appropriate for multiplicative gains and is less + # sensitive to one bad direction than an arithmetic mean. + aggregate = np.exp(np.mean(np.log(np.vstack(candidates)), axis=0)) + aggregate /= np.mean(aggregate) + compensation = (1.0 - alpha) * compensation + alpha * aggregate + compensation /= np.mean(compensation) + LOG.info("iteration %d aggregate_correction_db=%s", iteration, format_vector(20.0 * np.log10(compensation), " dB")) + return compensation, history + + +def final_report(data_root: Path, compensation: np.ndarray) -> dict: + folders = recording_folders(data_root) + reports = [] + candidates = [] + LOG.info("===== final fit using converged correction =====") + for folder in folders: + result, candidate, energy = fit_one_folder(folder, compensation) + log_folder_fit(folder, result, candidate, energy, "final") + candidates.append(candidate) + reports.append({ + "folder": folder.name, + "angle_deg": folder_angle_deg(folder), + "slope": result.slope, + "intercept": result.intercept, + "rmse": result.rmse, + "relative_error": result.relative_error, + }) + aggregate = np.exp(np.mean(np.log(np.vstack(candidates)), axis=0)) + aggregate /= np.mean(aggregate) + LOG.info("===== final result across all directions =====") + LOG.info("correction_linear=%s", format_vector(compensation)) + LOG.info("correction_db=%s", format_vector(20.0 * np.log10(compensation), " dB")) + LOG.info("mean_final_per_direction_candidate_db=%s", format_vector(20.0 * np.log10(aggregate), " dB")) + LOG.info("final_direction_relative_error_mean=%.3f%%", 100.0 * np.mean([r["relative_error"] for r in reports])) + return {"directions": reports, "correction_linear": compensation.tolist(), "correction_db": (20.0 * np.log10(compensation)).tolist()} + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--data", default=ROOT / "calibration" / "data" / "sim") + parser.add_argument("--iterations", type=int, default=5) + parser.add_argument("--alpha", type=float, default=0.5, help="offline update weight per iteration") + parser.add_argument("--output", default=ROOT / "calibration" / "data" / "calibration_result.json") + parser.add_argument("--log", default=None, help="optional log file; stdout is always logged") + return parser.parse_args() + + +def main() -> None: + args = parse_args() + if not 1 <= args.iterations: + raise ValueError("iterations must be positive") + if not 0.0 < args.alpha <= 1.0: + raise ValueError("alpha must be in (0, 1]") + handlers: list[logging.Handler] = [logging.StreamHandler()] + if args.log: + handlers.append(logging.FileHandler(args.log, encoding="utf-8")) + logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s", handlers=handlers) + data_root = Path(args.data).resolve() + compensation, history = calibrate(data_root, args.iterations, args.alpha) + report = final_report(data_root, compensation) + report["iterations"] = args.iterations + report["alpha"] = args.alpha + report["history"] = history + output = Path(args.output).resolve() + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2), encoding="utf-8") + LOG.info("saved calibration result to %s", output) + + +if __name__ == "__main__": + main() diff --git a/PC_SoftWare/calibration/src/calibration_common.py b/PC_SoftWare/calibration/src/calibration_common.py new file mode 100644 index 0000000..1798329 --- /dev/null +++ b/PC_SoftWare/calibration/src/calibration_common.py @@ -0,0 +1,114 @@ +"""Shared geometry, WAV and fitting helpers for microphone calibration.""" + +from __future__ import annotations + +from dataclasses import dataclass +from pathlib import Path +import re + +import numpy as np +from scipy.io import wavfile + + +SAMPLE_RATE = 24_000 +CHANNEL_COUNT = 8 +ARRAY_RADIUS_M = 0.056 +# This is the channel order used by src/doa_estimator.py. +MIC_AZIMUTHS_DEG = np.array( + [157.5, 202.5, 247.5, 292.5, 337.5, 22.5, 67.5, 112.5], dtype=float +) +CH0_AZIMUTH_DEG = float(MIC_AZIMUTHS_DEG[0]) + + +@dataclass(frozen=True) +class FitResult: + slope: float + intercept: float + predicted_energy: np.ndarray + rmse: float + relative_error: float + + +def microphone_positions() -> np.ndarray: + """Return positions as a 2 x 8 matrix in the project's channel order.""" + + angles = np.deg2rad(MIC_AZIMUTHS_DEG) + return ARRAY_RADIUS_M * np.vstack((np.cos(angles), np.sin(angles))) + + +def projection_coordinates(relative_doa_deg: float) -> np.ndarray: + """Project each microphone onto the known DOA line. + + Folder angles are measured from CH0. Adding the CH0 absolute azimuth and + using the absolute microphone coordinates is equivalent to using this + relative expression, but the latter makes the folder convention explicit. + """ + + relative_mic_angles = np.deg2rad(MIC_AZIMUTHS_DEG - CH0_AZIMUTH_DEG) + doa = np.deg2rad(relative_doa_deg) + return ARRAY_RADIUS_M * np.cos(doa - relative_mic_angles) + + +def read_mono_wav(path: Path, expected_rate: int = SAMPLE_RATE) -> np.ndarray: + rate, data = wavfile.read(path) + if rate != expected_rate: + raise ValueError(f"{path}: expected {expected_rate} Hz, got {rate} Hz") + if data.ndim != 1: + raise ValueError(f"{path}: expected one channel per file, got shape {data.shape}") + if np.issubdtype(data.dtype, np.integer): + info = np.iinfo(data.dtype) + scale = max(abs(info.min), info.max) + result = data.astype(np.float64) / scale + else: + result = data.astype(np.float64) + if not np.all(np.isfinite(result)): + raise ValueError(f"{path}: audio contains non-finite samples") + return result + + +def fit_energy_line(d: np.ndarray, energy: np.ndarray) -> FitResult: + """Fit E~=a1*d+a0 using the MMSE line from the paper.""" + + if d.shape != energy.shape or d.ndim != 1 or d.size < 2: + raise ValueError("projection and energy arrays must be one-dimensional and equal") + if not np.all(np.isfinite(energy)) or np.any(energy <= 0.0): + raise ValueError("energies must be finite and positive") + slope, intercept = np.polyfit(d, energy, 1) + predicted = slope * d + intercept + if np.any(predicted <= 0.0): + raise ValueError("linear energy fit produced a non-positive prediction") + residual = predicted - energy + rmse = float(np.sqrt(np.mean(residual * residual))) + relative_error = float(rmse / max(abs(intercept), np.finfo(float).eps)) + return FitResult(slope, intercept, predicted, rmse, relative_error) + + +def folder_angle_deg(folder: Path) -> float: + match = re.fullmatch(r"degree(-?\d+(?:\.\d+)?)", folder.name, re.IGNORECASE) + if not match: + raise ValueError(f"folder must be named degree, got {folder.name!r}") + return float(match.group(1)) + + +def channel_paths(folder: Path) -> list[Path]: + paths = [folder / f"ch{channel}.wav" for channel in range(CHANNEL_COUNT)] + missing = [path for path in paths if not path.is_file()] + if missing: + raise FileNotFoundError("missing channel files: " + ", ".join(str(p) for p in missing)) + return paths + + +def load_folder_audio(folder: Path) -> np.ndarray: + signals = [read_mono_wav(path) for path in channel_paths(folder)] + length = min(signal.size for signal in signals) + if length < 16: + raise ValueError(f"{folder}: audio is too short") + return np.column_stack([signal[:length] for signal in signals]) + + +def channel_energies(audio: np.ndarray, compensation: np.ndarray) -> np.ndarray: + """Return mean-square energies after applying direct correction C[m].""" + + corrected = audio * compensation[np.newaxis, :] + centered = corrected - np.mean(corrected, axis=0, keepdims=True) + return np.mean(centered * centered, axis=0) diff --git a/PC_SoftWare/calibration/src/generate_sim_data.py b/PC_SoftWare/calibration/src/generate_sim_data.py new file mode 100644 index 0000000..b1dfdcf --- /dev/null +++ b/PC_SoftWare/calibration/src/generate_sim_data.py @@ -0,0 +1,119 @@ +"""Generate 8-channel Pyroomacoustics calibration recordings. + +Angles in directory names are measured counter-clockwise from CH0. Thus +``degree0`` puts the source on the CH0 ray, and ``degree15`` rotates it 15°. +""" + +from __future__ import annotations + +import argparse +import json +from pathlib import Path +import sys + +import numpy as np +from scipy.io import wavfile + +import pyroomacoustics as pra + +ROOT = Path(__file__).resolve().parents[2] +if str(ROOT) not in sys.path: + sys.path.insert(0, str(ROOT)) + +from calibration.src.calibration_common import ( # noqa: E402 + ARRAY_RADIUS_M, + CH0_AZIMUTH_DEG, + CHANNEL_COUNT, + MIC_AZIMUTHS_DEG, + SAMPLE_RATE, + microphone_positions, +) + + +def build_source_signal(sample_rate: int, duration_s: float, seed: int) -> np.ndarray: + rng = np.random.default_rng(seed) + count = int(round(sample_rate * duration_s)) + # A broadband deterministic signal gives the energy estimator many + # independent samples while remaining repeatable across directions. + signal = rng.standard_normal(count) + signal -= np.mean(signal) + signal /= max(np.std(signal), np.finfo(float).eps) + return 0.08 * signal.astype(np.float64) + + +def generate(args: argparse.Namespace) -> None: + output_root = Path(args.output).resolve() + output_root.mkdir(parents=True, exist_ok=True) + positions = microphone_positions() + source_signal = build_source_signal(args.sample_rate, args.duration, args.seed) + channel_gains_db = np.asarray(args.channel_gain_db, dtype=float) + if channel_gains_db.size != CHANNEL_COUNT: + raise ValueError("exactly eight channel_gain_db values are required") + channel_gains = 10.0 ** (channel_gains_db / 20.0) + + metadata = { + "sample_rate": args.sample_rate, + "duration_s": args.duration, + "array_radius_m": ARRAY_RADIUS_M, + "microphone_azimuths_deg": MIC_AZIMUTHS_DEG.tolist(), + "ch0_azimuth_deg": CH0_AZIMUTH_DEG, + "source_distance_m": args.distance, + "channel_gain_db": channel_gains_db.tolist(), + "channel_gain_linear": channel_gains.tolist(), + "angle_convention": "folder degree is source DOA minus CH0 azimuth, CCW", + } + + for relative_angle in range(args.start_angle, args.stop_angle + 1, args.step): + absolute_angle = CH0_AZIMUTH_DEG + relative_angle + theta = np.deg2rad(absolute_angle) + source = args.distance * np.array([np.cos(theta), np.sin(theta)]) + room = pra.AnechoicRoom(dim=2, fs=args.sample_rate, sigma2_awgn=args.noise_variance) + room.add_source(source, signal=source_signal) + room.add_microphone_array(pra.MicrophoneArray(positions, fs=args.sample_rate)) + room.simulate() + signals = np.asarray(room.mic_array.signals, dtype=np.float64) + signals = signals[:CHANNEL_COUNT, : source_signal.size] + signals *= channel_gains[:, np.newaxis] + peak = float(np.max(np.abs(signals))) + if peak >= 0.98: + signals *= 0.9 / peak + folder = output_root / f"degree{relative_angle}" + folder.mkdir(parents=True, exist_ok=True) + for channel in range(CHANNEL_COUNT): + # Float32 WAV preserves relative levels without an avoidable + # quantization floor; the calibration reader also accepts PCM WAV. + wavfile.write(folder / f"ch{channel}.wav", args.sample_rate, signals[channel].astype(np.float32)) + (folder / "metadata.json").write_text( + json.dumps( + {**metadata, "relative_doa_deg": relative_angle, "absolute_doa_deg": absolute_angle}, + indent=2, + ), + encoding="utf-8", + ) + print(f"generated {folder.name}: relative DOA={relative_angle:.1f}°, absolute={absolute_angle:.1f}°") + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--output", default=ROOT / "calibration" / "data" / "sim") + parser.add_argument("--sample-rate", type=int, default=SAMPLE_RATE) + parser.add_argument("--duration", type=float, default=4.0) + parser.add_argument("--distance", type=float, default=2.0) + parser.add_argument("--noise-variance", type=float, default=1e-8) + parser.add_argument("--seed", type=int, default=20260922) + parser.add_argument("--start-angle", type=int, default=0) + parser.add_argument("--stop-angle", type=int, default=345) + parser.add_argument("--step", type=int, default=15) + parser.add_argument( + "--channel-gain-db", + type=float, + nargs=CHANNEL_COUNT, + default=[2.0, -1.5, 0.7, -2.2, 1.1, -0.4, 2.8, -1.0], + metavar="DB", + help="eight injected channel gains used to validate calibration", + ) + return parser.parse_args() + + +if __name__ == "__main__": + generate(parse_args()) diff --git a/PC_SoftWare/cpp/CMakeLists.txt b/PC_SoftWare/cpp/CMakeLists.txt new file mode 100644 index 0000000..e1b3582 --- /dev/null +++ b/PC_SoftWare/cpp/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 3.16) +project(esp32_doa LANGUAGES CXX) + +add_library(esp32_doa doa_algorithms.cpp) +target_compile_features(esp32_doa PUBLIC cxx_std_17) +target_include_directories(esp32_doa PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + +add_executable(doa_cli doa_cli.cpp) +target_link_libraries(doa_cli PRIVATE esp32_doa) + +if (MSVC) + target_compile_options(esp32_doa PRIVATE /W4 /permissive-) + target_compile_options(doa_cli PRIVATE /W4 /permissive-) +else() + target_compile_options(esp32_doa PRIVATE -Wall -Wextra -Wpedantic) + target_compile_options(doa_cli PRIVATE -Wall -Wextra -Wpedantic) +endif() diff --git a/PC_SoftWare/cpp/README.md b/PC_SoftWare/cpp/README.md new file mode 100644 index 0000000..4b35e5c --- /dev/null +++ b/PC_SoftWare/cpp/README.md @@ -0,0 +1,36 @@ +# Standalone C++ DOA and MVDR + +This directory contains a dependency-free C++17 implementation of SRP-PHAT +(the historical `SRP-PATH` spelling is accepted as an alias), NormMUSIC, and +frequency-domain MVDR. It includes its own radix-2 FFT, complex Hermitian +Jacobi eigensolver, and Gaussian elimination. The resulting binary does not +require Eigen, FFTW, BLAS, Python, or Pyroomacoustics at runtime. + +Build from the repository root: + +```powershell +cmake -S . -B build +cmake --build build --config Release +``` + +The CLI input format is a whitespace-separated matrix. The first line is +` `, followed by one row per sample: + +```powershell +build\cpp\Release\doa_cli.exe srp input.txt 48000 512 +build\cpp\Release\doa_cli.exe normmusic input.txt 48000 512 +build\cpp\Release\doa_cli.exe mvdr input.txt 73 48000 512 > output.txt +``` + +`compare_with_pyroomacoustics.py` generates a deterministic plane wave and +compares both DOA angles and MVDR samples against the repository's Python +reference. Run it after building with: + +```powershell +uv run python cpp/compare_with_pyroomacoustics.py +``` + +The implementation uses the same microphone coordinates, Hann window, +frequency-bin convention (`500 <= f < 4000 Hz`), steering-vector sign, +frequency-normalized NormMUSIC spectrum, diagonal loading, and overlap-add +normalization as the Python path. diff --git a/PC_SoftWare/cpp/compare_with_pyroomacoustics.py b/PC_SoftWare/cpp/compare_with_pyroomacoustics.py new file mode 100644 index 0000000..228f221 --- /dev/null +++ b/PC_SoftWare/cpp/compare_with_pyroomacoustics.py @@ -0,0 +1,82 @@ +"""Numerical parity check between the standalone C++ CLI and the Python path. + +Build first with ``cmake -S . -B build && cmake --build build --config Release``. +The script intentionally uses only the repository's existing NumPy and +Pyroomacoustics source tree for the reference calculation. +""" + +from __future__ import annotations + +import json +import subprocess +import sys +import tempfile +from pathlib import Path + +import numpy as np + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT)) +from src.doa_estimator import DoaConfig, DoaEstimator # noqa: E402 + + +def plane_wave(config: DoaConfig, angle: float) -> np.ndarray: + rng = np.random.default_rng(1234) + source = rng.standard_normal(config.window_samples) + frequencies = np.fft.rfftfreq(config.window_samples, 1.0 / config.sample_rate) + source_spectrum = np.fft.rfft(source) + azimuths = np.deg2rad(config.microphone_azimuths_deg) + positions = config.radius_m * np.vstack((np.cos(azimuths), np.sin(azimuths))) + direction = np.array([np.cos(np.deg2rad(angle)), np.sin(np.deg2rad(angle))]) + delays = direction @ positions / config.sound_speed_m_s + return np.stack( + [np.fft.irfft(source_spectrum * np.exp(2j * np.pi * frequencies * delay), + n=config.window_samples) for delay in delays], axis=1 + ).astype(np.float64) * 0.05 + + +def main() -> int: + config = DoaConfig() + audio = plane_wave(config, 73.0) + build = ROOT / "build" / "cpp" / "doa_cli" + if sys.platform == "win32": + build = build.with_suffix(".exe") + candidate = ROOT / "build" / "cpp" / "Release" / "doa_cli.exe" + if candidate.exists(): + build = candidate + if not build.exists(): + raise SystemExit(f"CLI not found: {build}; build it with CMake first") + + with tempfile.TemporaryDirectory() as directory: + matrix = Path(directory) / "audio.txt" + with matrix.open("w", encoding="ascii") as output: + output.write(f"{audio.shape[0]} {audio.shape[1]}\n") + np.savetxt(output, audio, fmt="%.17g") + estimator = DoaEstimator(config=config, start_worker=False) + try: + for algorithm, command in (("SRP-PHAT", "srp"), ("NormMUSIC", "normmusic")): + reference = estimator.estimate(audio, algorithm=algorithm) + raw = subprocess.check_output( + [str(build), command, str(matrix), str(config.sample_rate), str(config.nfft)], + text=True, + ) + result = json.loads(raw) + error = abs((result["angle_degrees"] - reference.angle_degrees + 180) % 360 - 180) + print(f"{algorithm}: Python={reference.angle_degrees:.3f} C++={result['angle_degrees']:.3f} error={error:.3f} deg") + if error > 1.0: + return 1 + reference_mvdr = estimator._mvdr.process(audio, 73.0).audio + raw = subprocess.check_output( + [str(build), "mvdr", str(matrix), "73", str(config.sample_rate), str(config.nfft)], + text=True, + ) + actual_mvdr = np.fromstring(raw, sep="\n") + error = np.max(np.abs(reference_mvdr.astype(float) - actual_mvdr)) + print(f"MVDR: max absolute sample error={error:.3e}") + return int(error > 1e-5) + finally: + estimator.close() + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/PC_SoftWare/cpp/doa_algorithms.cpp b/PC_SoftWare/cpp/doa_algorithms.cpp new file mode 100644 index 0000000..742429a --- /dev/null +++ b/PC_SoftWare/cpp/doa_algorithms.cpp @@ -0,0 +1,407 @@ +#include "doa_algorithms.hpp" + +#include +#include +#include +#include +#include +#include + +namespace esp32_doa { +namespace { + +constexpr double kPi = 3.141592653589793238462643383279502884; +constexpr double kTolerance = 1e-14; + +std::size_t index(const Stft &s, int snapshot, int frequency, int channel) { + return (static_cast(snapshot) * s.bins + frequency) * + s.channels + channel; +} + +void fft(std::vector &x, bool inverse) { + const std::size_t n = x.size(); + if (n == 0 || (n & (n - 1)) != 0) { + throw std::invalid_argument("nfft must be a power of two"); + } + for (std::size_t i = 1, j = 0; i < n; ++i) { + std::size_t bit = n >> 1; + for (; j & bit; bit >>= 1) j ^= bit; + j ^= bit; + if (i < j) std::swap(x[i], x[j]); + } + for (std::size_t len = 2; len <= n; len <<= 1) { + const double sign = inverse ? 1.0 : -1.0; + const Complex root = std::polar(1.0, sign * 2.0 * kPi / len); + for (std::size_t start = 0; start < n; start += len) { + Complex w(1.0, 0.0); + const std::size_t half = len >> 1; + for (std::size_t j = 0; j < half; ++j) { + const Complex u = x[start + j]; + const Complex v = x[start + j + half] * w; + x[start + j] = u + v; + x[start + j + half] = u - v; + w *= root; + } + } + } + if (inverse) { + for (Complex &v : x) v /= static_cast(n); + } +} + +double hann(int n, int length) { + if (length <= 1) return 1.0; + return 0.5 - 0.5 * std::cos(2.0 * kPi * n / (length - 1)); +} + +std::vector frequency_bins(const Config &c) { + const int first = static_cast(std::floor( + c.min_frequency_hz * c.nfft / c.sample_rate + 0.5)); + const int last = static_cast(std::floor( + c.max_frequency_hz * c.nfft / c.sample_rate + 0.5)); + std::vector bins; + for (int k = first; k < last && k <= c.nfft / 2; ++k) + if (k >= 0) bins.push_back(k); + return bins; +} + +void validate(const Config &c) { + if (c.sample_rate <= 0 || c.channels <= 0 || c.nfft <= 0 || + (c.nfft & (c.nfft - 1)) != 0 || c.hop <= 0 || c.hop > c.nfft) + throw std::invalid_argument("invalid STFT configuration"); + if (static_cast(c.microphone_azimuths_deg.size()) != c.channels) + throw std::invalid_argument("one microphone azimuth is required per channel"); + if (!(c.min_frequency_hz >= 0.0 && c.min_frequency_hz < c.max_frequency_hz && + c.max_frequency_hz < c.sample_rate / 2.0)) + throw std::invalid_argument("invalid frequency range"); +} + +std::vector> microphone_positions(const Config &c) { + std::vector> p(c.channels); + for (int m = 0; m < c.channels; ++m) { + const double a = c.microphone_azimuths_deg[m] * kPi / 180.0; + p[m] = {c.radius_m * std::cos(a), c.radius_m * std::sin(a)}; + } + return p; +} + +double wrap_degrees(double angle) { + angle = std::fmod(angle, 360.0); + return angle < 0.0 ? angle + 360.0 : angle; +} + +std::vector mode_vector(const Config &c, int frequency, + double angle_degrees) { + const auto positions = microphone_positions(c); + const double a = angle_degrees * kPi / 180.0; + const double dx = std::cos(a), dy = std::sin(a); + const double omega = 2.0 * kPi * c.sample_rate * frequency / c.nfft; + std::vector mode(c.channels); + for (int m = 0; m < c.channels; ++m) { + const double tau = (dx * positions[m].first + dy * positions[m].second) / + c.sound_speed_m_s; + mode[m] = std::polar(1.0, omega * tau); + } + return mode; +} + +std::vector solve_linear(std::vector a, std::vector b, + int n) { + for (int col = 0; col < n; ++col) { + int pivot = col; + double best = std::abs(a[col * n + col]); + for (int row = col + 1; row < n; ++row) { + const double value = std::abs(a[row * n + col]); + if (value > best) best = value, pivot = row; + } + if (best < 1e-20) throw std::runtime_error("singular covariance matrix"); + if (pivot != col) { + for (int j = col; j < n; ++j) + std::swap(a[col * n + j], a[pivot * n + j]); + std::swap(b[col], b[pivot]); + } + const Complex diagonal = a[col * n + col]; + for (int j = col; j < n; ++j) a[col * n + j] /= diagonal; + b[col] /= diagonal; + for (int row = 0; row < n; ++row) { + if (row == col) continue; + const Complex factor = a[row * n + col]; + if (std::abs(factor) == 0.0) continue; + for (int j = col; j < n; ++j) a[row * n + j] -= factor * a[col * n + j]; + b[row] -= factor * b[col]; + } + } + return b; +} + +struct EigenResult { + std::vector values; + std::vector vectors; // column-major eigenvectors +}; + +// Complex Hermitian Jacobi eigensolver. This small implementation is enough +// for the fixed 8-microphone covariance matrices and avoids BLAS/LAPACK. +EigenResult hermitian_eigen(const std::vector &input, int n) { + std::vector a = input; + std::vector v(static_cast(n) * n, Complex(0.0)); + for (int i = 0; i < n; ++i) v[i * n + i] = 1.0; + for (int iteration = 0; iteration < 80 * n * n; ++iteration) { + int p = 0, q = 1; + double largest = 0.0; + for (int i = 0; i < n; ++i) + for (int j = i + 1; j < n; ++j) + if (std::abs(a[i * n + j]) > largest) + largest = std::abs(a[i * n + j]), p = i, q = j; + if (largest < 1e-12) break; + const Complex b = a[p * n + q]; + const double phase = std::arg(b); + const double magnitude = std::abs(b); + const double theta = 0.5 * std::atan2(2.0 * magnitude, + a[q * n + q].real() - a[p * n + p].real()); + const double cs = std::cos(theta), sn = std::sin(theta); + const Complex ph = std::polar(1.0, phase); + const double app = a[p * n + p].real(), aqq = a[q * n + q].real(); + for (int k = 0; k < n; ++k) { + if (k == p || k == q) continue; + const Complex akp = a[k * n + p], akq = a[k * n + q]; + a[k * n + p] = akp * ph * cs - akq * sn; + a[p * n + k] = std::conj(a[k * n + p]); + a[k * n + q] = akp * ph * sn + akq * cs; + a[q * n + k] = std::conj(a[k * n + q]); + } + a[p * n + p] = app * cs * cs + aqq * sn * sn - 2.0 * magnitude * cs * sn; + a[q * n + q] = app * sn * sn + aqq * cs * cs + 2.0 * magnitude * cs * sn; + a[p * n + q] = a[q * n + p] = Complex(0.0); + for (int k = 0; k < n; ++k) { + const Complex vkp = v[k * n + p], vkq = v[k * n + q]; + v[k * n + p] = vkp * ph * cs - vkq * sn; + v[k * n + q] = vkp * ph * sn + vkq * cs; + } + } + std::vector order(n); + for (int i = 0; i < n; ++i) order[i] = i; + std::sort(order.begin(), order.end(), [&](int x, int y) { + return a[x * n + x].real() < a[y * n + y].real(); + }); + EigenResult result; + result.values.resize(n); + result.vectors.resize(static_cast(n) * n); + for (int col = 0; col < n; ++col) { + result.values[col] = a[order[col] * n + order[col]].real(); + for (int row = 0; row < n; ++row) + result.vectors[row * n + col] = v[row * n + order[col]]; + } + return result; +} + +double spectrum_sharpness(const std::vector &spectrum) { + if (spectrum.empty()) return 0.0; + std::vector sorted = spectrum; + std::sort(sorted.begin(), sorted.end()); + const double peak = sorted.back(); + const double floor = sorted[sorted.size() / 2]; + const double spread = peak - sorted.front(); + return std::clamp((peak - floor) / (spread + 1e-12), 0.0, 1.0); +} + +DoaResult finish_spectrum(std::vector spectrum) { + auto peak = std::max_element(spectrum.begin(), spectrum.end()); + const int index = static_cast(peak - spectrum.begin()); + DoaResult result; + result.angle_degrees = wrap_degrees(360.0 * index / spectrum.size()); + result.peak_sharpness = spectrum_sharpness(spectrum); + result.spectrum = std::move(spectrum); + return result; +} + +} // namespace + +Complex &Stft::at(int snapshot, int frequency, int channel) { + return spectra[index(*this, snapshot, frequency, channel)]; +} +const Complex &Stft::at(int snapshot, int frequency, int channel) const { + return spectra[index(*this, snapshot, frequency, channel)]; +} + +Stft analyze_stft(const std::vector &audio, int sample_count, + const Config &config) { + validate(config); + if (sample_count < config.nfft || + static_cast(sample_count) * config.channels > audio.size()) + throw std::invalid_argument("audio does not contain enough samples"); + Stft result; + result.sample_count = sample_count; + result.snapshots = (sample_count - config.nfft) / config.hop + 1; + result.bins = config.nfft / 2 + 1; + result.channels = config.channels; + result.spectra.assign(static_cast(result.snapshots) * result.bins * + result.channels, + Complex(0.0)); + std::vector means(config.channels, 0.0); + for (int n = 0; n < sample_count; ++n) + for (int m = 0; m < config.channels; ++m) + means[m] += audio[static_cast(n) * config.channels + m] / + sample_count; + for (int s = 0; s < result.snapshots; ++s) { + const int start = s * config.hop; + for (int m = 0; m < config.channels; ++m) { + std::vector frame(config.nfft); + for (int n = 0; n < config.nfft; ++n) + frame[n] = (audio[static_cast(start + n) * config.channels + m] - + means[m]) * hann(n, config.nfft); + fft(frame, false); + for (int k = 0; k < result.bins; ++k) result.at(s, k, m) = frame[k]; + } + } + return result; +} + +DoaResult srp_phat(const Stft &stft, const Config &config) { + validate(config); + const std::vector bins = frequency_bins(config); + const int pairs = config.channels * (config.channels - 1) / 2; + std::vector response(config.grid_points, 0.0); + const auto positions = microphone_positions(config); + for (int g = 0; g < config.grid_points; ++g) { + const double angle = 360.0 * g / config.grid_points * kPi / 180.0; + const double dx = std::cos(angle), dy = std::sin(angle); + double score = 0.0; + for (int k : bins) { + std::vector> cc(config.channels, + std::vector(config.channels)); + for (int i = 0; i < config.channels; ++i) + for (int j = 0; j < config.channels; ++j) + for (int s = 0; s < stft.snapshots; ++s) { + Complex xi = stft.at(s, k, i), xj = stft.at(s, k, j); + const double ai = std::max(std::abs(xi), kTolerance); + const double aj = std::max(std::abs(xj), kTolerance); + cc[i][j] += (xi / ai) * std::conj(xj / aj); + } + const double omega = 2.0 * kPi * config.sample_rate * k / config.nfft; + for (int i = 0; i < config.channels; ++i) { + const double ti = (dx * positions[i].first + dy * positions[i].second) / + config.sound_speed_m_s; + for (int j = i + 1; j < config.channels; ++j) { + const double tj = (dx * positions[j].first + dy * positions[j].second) / + config.sound_speed_m_s; + const Complex mode = std::polar(1.0, omega * (tj - ti)); + score += 2.0 * std::real(cc[i][j] * mode); + } + } + } + const double dc = static_cast(stft.snapshots * config.channels * bins.size()); + response[g] = (score + dc) / + (stft.snapshots * bins.size() * static_cast(pairs)); + } + return finish_spectrum(std::move(response)); +} + +DoaResult norm_music(const Stft &stft, const Config &config) { + validate(config); + const std::vector bins = frequency_bins(config); + std::vector per_frequency(static_cast(bins.size()) * + config.grid_points, 0.0); + for (std::size_t frequency_index = 0; frequency_index < bins.size(); ++frequency_index) { + const int k = bins[frequency_index]; + std::vector covariance(static_cast(config.channels) * config.channels, + Complex(0.0)); + for (int i = 0; i < config.channels; ++i) + for (int j = 0; j < config.channels; ++j) + for (int s = 0; s < stft.snapshots; ++s) + covariance[i * config.channels + j] += + stft.at(s, k, i) * std::conj(stft.at(s, k, j)) / stft.snapshots; + const EigenResult eig = hermitian_eigen(covariance, config.channels); + for (int g = 0; g < config.grid_points; ++g) { + const auto mode = mode_vector(config, k, 360.0 * g / config.grid_points); + Complex denom(0.0); + for (int i = 0; i < config.channels; ++i) { + for (int j = 0; j < config.channels; ++j) { + Complex cross = (i == j ? Complex(1.0) : Complex(0.0)); + cross -= eig.vectors[i * config.channels + config.channels - 1] * + std::conj(eig.vectors[j * config.channels + config.channels - 1]); + denom += std::conj(mode[i]) * cross * mode[j]; + } + } + per_frequency[frequency_index * config.grid_points + g] = + 1.0 / std::max(std::abs(denom), 1e-20); + } + } + std::vector response(config.grid_points, 0.0); + // Pyroomacoustics' NormMUSIC normalizes along the frequency axis for + // every candidate direction (Pssl / max(Pssl, axis=0)). + for (int g = 0; g < config.grid_points; ++g) { + double maximum = 0.0; + for (std::size_t f = 0; f < bins.size(); ++f) + maximum = std::max(maximum, per_frequency[f * config.grid_points + g]); + for (std::size_t f = 0; f < bins.size(); ++f) + response[g] += per_frequency[f * config.grid_points + g] / + std::max(maximum, 1e-20); + response[g] /= bins.size(); + } + return finish_spectrum(std::move(response)); +} + +MvdrResult mvdr(const Stft &stft, const Config &config, double angle_degrees) { + validate(config); + const std::vector bins = frequency_bins(config); + const int n = config.channels; + std::vector weights(static_cast(stft.bins) * n); + for (int k = 0; k < stft.bins; ++k) { + const auto steering = mode_vector(config, k, angle_degrees); + for (int m = 0; m < n; ++m) weights[k * n + m] = steering[m] / n; + } + for (int k : bins) { + std::vector covariance(static_cast(n) * n, Complex(0.0)); + for (int i = 0; i < n; ++i) + for (int j = 0; j < n; ++j) + for (int s = 0; s < stft.snapshots; ++s) + covariance[i * n + j] += stft.at(s, k, i) * std::conj(stft.at(s, k, j)) / + stft.snapshots; + double power = 0.0; + for (int i = 0; i < n; ++i) power += covariance[i * n + i].real(); + const double loading = config.diagonal_loading * std::max(power / n, 1e-12); + for (int i = 0; i < n; ++i) covariance[i * n + i] += loading; + std::vector solved = solve_linear(covariance, steering, n); + Complex denominator(0.0); + for (int m = 0; m < n; ++m) denominator += std::conj(steering[m]) * solved[m]; + if (std::abs(denominator) < 1e-12) denominator = Complex(1e-12); + for (int m = 0; m < n; ++m) weights[k * n + m] = solved[m] / denominator; + } + std::vector output(stft.sample_count, 0.0), normalization(stft.sample_count, 0.0); + for (int s = 0; s < stft.snapshots; ++s) { + std::vector spectrum(config.nfft, Complex(0.0)); + for (int k = 0; k < stft.bins; ++k) { + Complex value(0.0); + for (int m = 0; m < n; ++m) value += std::conj(weights[k * n + m]) * stft.at(s, k, m); + spectrum[k] = value; + if (k > 0 && k < config.nfft / 2) spectrum[config.nfft - k] = std::conj(value); + } + fft(spectrum, true); + const int start = s * config.hop; + for (int i = 0; i < config.nfft; ++i) { + const double w = hann(i, config.nfft); + output[start + i] += spectrum[i].real() * w; + normalization[start + i] += w * w; + } + } + for (int i = 0; i < stft.sample_count; ++i) + output[i] = normalization[i] > 1e-12 ? output[i] / normalization[i] : 0.0; + return {std::move(output)}; +} + +DoaResult estimate(const std::vector &audio, int sample_count, + const Config &config, const std::string &algorithm) { + const Stft stft = analyze_stft(audio, sample_count, config); + if (algorithm == "SRP-PHAT" || algorithm == "SRP" || algorithm == "SRP-PATH") + return srp_phat(stft, config); + if (algorithm == "NormMUSIC" || algorithm == "MUSIC" || algorithm == "NORMMUSIC") + return norm_music(stft, config); + throw std::invalid_argument("unknown algorithm: " + algorithm); +} + +MvdrResult beamform(const std::vector &audio, int sample_count, + const Config &config, double angle_degrees) { + return mvdr(analyze_stft(audio, sample_count, config), config, angle_degrees); +} + +} // namespace esp32_doa diff --git a/PC_SoftWare/cpp/doa_algorithms.hpp b/PC_SoftWare/cpp/doa_algorithms.hpp new file mode 100644 index 0000000..8be352a --- /dev/null +++ b/PC_SoftWare/cpp/doa_algorithms.hpp @@ -0,0 +1,62 @@ +#pragma once + +#include +#include +#include +#include +#include + +namespace esp32_doa { + +using Complex = std::complex; + +struct Config { + int sample_rate = 48000; + int channels = 8; + int nfft = 512; + int hop = 256; + double sound_speed_m_s = 343.0; + double radius_m = 0.056; + double min_frequency_hz = 500.0; + double max_frequency_hz = 4000.0; + int grid_points = 360; + double diagonal_loading = 1e-2; + std::vector microphone_azimuths_deg = { + 157.5, 202.5, 247.5, 292.5, 337.5, 22.5, 67.5, 112.5}; +}; + +struct Stft { + int sample_count = 0; + int snapshots = 0; + int bins = 0; + int channels = 0; + // Layout is [snapshot][frequency bin][channel]. + std::vector spectra; + Complex &at(int snapshot, int frequency, int channel); + const Complex &at(int snapshot, int frequency, int channel) const; +}; + +struct DoaResult { + double angle_degrees = 0.0; + double peak_sharpness = 0.0; + std::vector spectrum; +}; + +struct MvdrResult { + std::vector audio; +}; + +Stft analyze_stft(const std::vector &audio, int sample_count, + const Config &config); +DoaResult srp_phat(const Stft &stft, const Config &config); +DoaResult norm_music(const Stft &stft, const Config &config); +MvdrResult mvdr(const Stft &stft, const Config &config, double angle_degrees); + +// Convenience functions for callers that already have samples in row-major +// samples x channels form. +DoaResult estimate(const std::vector &audio, int sample_count, + const Config &config, const std::string &algorithm); +MvdrResult beamform(const std::vector &audio, int sample_count, + const Config &config, double angle_degrees); + +} // namespace esp32_doa diff --git a/PC_SoftWare/cpp/doa_cli.cpp b/PC_SoftWare/cpp/doa_cli.cpp new file mode 100644 index 0000000..434b63c --- /dev/null +++ b/PC_SoftWare/cpp/doa_cli.cpp @@ -0,0 +1,50 @@ +#include "doa_algorithms.hpp" + +#include +#include +#include +#include + +using namespace esp32_doa; + +int main(int argc, char **argv) { + if (argc < 3 || argc > 6) { + std::cerr << "usage: doa_cli [sample_rate] [nfft]\n" + " doa_cli mvdr [sample_rate] [nfft]\n"; + return 2; + } + try { + std::ifstream input(argv[2]); + if (!input) throw std::runtime_error("cannot open input matrix"); + int samples = 0, channels = 0; + input >> samples >> channels; + Config config; + config.channels = channels; + const std::string command = argv[1]; + if (command == "mvdr") { + if (argc < 4) throw std::runtime_error("mvdr requires an angle"); + if (argc >= 5) config.sample_rate = std::stoi(argv[4]); + if (argc >= 6) config.nfft = std::stoi(argv[5]); + } else { + if (argc >= 4) config.sample_rate = std::stoi(argv[3]); + if (argc >= 5) config.nfft = std::stoi(argv[4]); + } + config.hop = config.nfft / 2; + std::vector audio(static_cast(samples) * channels); + for (double &value : audio) + if (!(input >> value)) throw std::runtime_error("matrix has too few values"); + std::cout << std::setprecision(17); + if (command == "mvdr") { + const auto result = beamform(audio, samples, config, std::stod(argv[3])); + for (double value : result.audio) std::cout << value << '\n'; + } else { + const auto result = estimate(audio, samples, config, command); + std::cout << "{\"angle_degrees\":" << result.angle_degrees + << ",\"peak_sharpness\":" << result.peak_sharpness << "}\n"; + } + } catch (const std::exception &error) { + std::cerr << "error: " << error.what() << '\n'; + return 1; + } + return 0; +} diff --git a/PC_SoftWare/pyproject.toml b/PC_SoftWare/pyproject.toml new file mode 100644 index 0000000..8ae7b44 --- /dev/null +++ b/PC_SoftWare/pyproject.toml @@ -0,0 +1,36 @@ +[project] +name = "esp32_8mic" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.12" +dependencies = [ + "pygame>=2.6.1", + "sounddevice>=0.5.2", + "beautifulsoup4>=4.15.0", + "fastapi>=0.139.2", + "flask>=3.1.3", + "gradio>=6.20.0", + "librosa>=0.11,<0.12", + "matplotlib>=3.11.1", + "numba>=0.66.0", + "numpy>=2.0,<3", + "openpyxl>=3.1.5", + "pandas>=3.0.3", + "pillow>=12.3.0", + "pyroomacoustics>=0.10.0", + "pytest>=9.1.1", + "requests>=2.34.2", + "scikit-learn>=1.9.0", + "scipy>=1.13.0", + "tensorboard>=2.21.0", + "torch>=2.13.0", + "tqdm>=4.69.0", +] + +[tool.uv] +index-url = "https://pypi.tuna.tsinghua.edu.cn/simple" +extra-index-url = ["https://mirrors.aliyun.com/pypi/simple"] + +[tool.pytest.ini_options] +testpaths = ["tests"] diff --git a/PC_SoftWare/src/audio_monitor.py b/PC_SoftWare/src/audio_monitor.py new file mode 100644 index 0000000..0dd48a1 --- /dev/null +++ b/PC_SoftWare/src/audio_monitor.py @@ -0,0 +1,325 @@ +"""Non-blocking playback of the newest non-overlapping MVDR output.""" + +from __future__ import annotations + +import threading +import time +from dataclasses import dataclass +from typing import Callable + +import numpy as np + +try: + from .mvdr_beamformer import MvdrResult +except ImportError: # Support direct execution from the src directory. + from mvdr_beamformer import MvdrResult + + +@dataclass(frozen=True) +class MonitorDevice: + index: int + name: str + host_api: str + + @property + def label(self) -> str: + return f"{self.name} [{self.host_api}]" if self.host_api else self.name + + +class MvdrAudioMonitor: + """Play new tails of rolling MVDR windows on a blocking output thread.""" + + MIN_GAIN_DB = -10.0 + MAX_GAIN_DB = 40.0 + + def __init__( + self, + sample_rate: int, + result_provider: Callable[[], MvdrResult | None], + reset_provider: Callable[[], None] | None = None, + ) -> None: + import sounddevice as sd + + self.sample_rate = sample_rate + self._provider = result_provider + self._reset_provider = reset_provider + self._sd = sd + discovery_error = None + try: + self.devices = self._find_compatible_devices(sd, sample_rate) + default_output = sd.default.device[1] + except Exception as exc: + self.devices = [] + default_output = -1 + discovery_error = str(exc) + selected = next( + (i for i, device in enumerate(self.devices) if device.index == default_output), + 0, + ) + self._selected = selected if self.devices else -1 + self._gain_db = 0.0 + self._enabled = False + self._status = "ERROR" if discovery_error else "OFF" + self._error: str | None = discovery_error + self._underflows = 0 + self._discontinuities = 0 + self._condition = threading.Condition() + self._stop = False + self._configuration = 0 + self._stream = None + self._thread = threading.Thread( + target=self._worker, + name="mvdr-audio-monitor", + daemon=True, + ) + self._thread.start() + + @staticmethod + def _hostapi_name(sd, info) -> str: + try: + return str(sd.query_hostapis(info["hostapi"])["name"]) + except Exception: + return "" + + @classmethod + def _find_compatible_devices(cls, sd, sample_rate: int) -> list[MonitorDevice]: + compatible = [] + for index, info in enumerate(sd.query_devices()): + if int(info["max_output_channels"]) < 1: + continue + try: + sd.check_output_settings( + device=index, + channels=1, + samplerate=sample_rate, + dtype="float32", + ) + except Exception: + continue + compatible.append( + MonitorDevice( + index=index, + name=str(info["name"]), + host_api=cls._hostapi_name(sd, info), + ) + ) + return compatible + + @property + def enabled(self) -> bool: + with self._condition: + return self._enabled + + @property + def gain_db(self) -> float: + with self._condition: + return self._gain_db + + @property + def selected_device(self) -> MonitorDevice | None: + with self._condition: + if not 0 <= self._selected < len(self.devices): + return None + return self.devices[self._selected] + + @property + def selected_index(self) -> int: + with self._condition: + return self._selected + + @property + def state(self) -> tuple[str, str | None, int, int]: + with self._condition: + return ( + self._status, + self._error, + self._underflows, + self._discontinuities, + ) + + def set_enabled(self, enabled: bool) -> None: + stream = None + with self._condition: + if enabled and not self.devices: + self._error = "No compatible output device" + self._status = "ERROR" + return + if enabled == self._enabled: + return + self._enabled = enabled + self._status = "STARTING" if enabled else "OFF" + self._error = None + self._configuration += 1 + if not enabled: + stream = self._stream + self._condition.notify_all() + if stream is not None: + try: + stream.abort() + except Exception: + pass + + def toggle(self) -> None: + self.set_enabled(not self.enabled) + + def select_device(self, list_index: int) -> None: + stream = None + with self._condition: + if not 0 <= list_index < len(self.devices): + return + if list_index == self._selected: + return + self._selected = list_index + self._configuration += 1 + self._error = None + if self._enabled: + self._status = "STARTING" + stream = self._stream + self._condition.notify_all() + if stream is not None: + try: + stream.abort() + except Exception: + pass + + def set_gain_db(self, gain_db: float) -> float: + value = max(self.MIN_GAIN_DB, min(self.MAX_GAIN_DB, float(gain_db))) + with self._condition: + self._gain_db = value + return value + + @staticmethod + def apply_gain(audio: np.ndarray, gain_db: float) -> tuple[np.ndarray, bool]: + factor = 10.0 ** (gain_db / 20.0) + amplified = np.asarray(audio, dtype=np.float32) * factor + clipped = bool(np.any(np.abs(amplified) > 1.0)) + return np.clip(amplified, -1.0, 1.0).astype(np.float32), clipped + + def _worker(self) -> None: + while True: + with self._condition: + self._condition.wait_for(lambda: self._stop or self._enabled) + if self._stop: + return + configuration = self._configuration + device = self.devices[self._selected] + + stream = None + try: + if self._reset_provider is not None: + self._reset_provider() + with self._condition: + if self._enabled and configuration == self._configuration: + self._status = "WAITING" + self._error = None + + # Do not start PortAudio until one finalized WOLA block is + # ready; otherwise the device begins in an avoidable underflow. + pending_result = None + while pending_result is None: + with self._condition: + if ( + self._stop + or not self._enabled + or configuration != self._configuration + ): + break + candidate = self._provider() + if ( + candidate is not None + and candidate.stream_audio is not None + and candidate.stream_audio.size + ): + pending_result = candidate + break + time.sleep(0.01) + if pending_result is None: + continue + + stream = self._sd.OutputStream( + device=device.index, + channels=1, + samplerate=self.sample_rate, + blocksize=0, + dtype="float32", + ) + with self._condition: + self._stream = stream + stream.start() + + last_timestamp = -1.0 + last_stream_end: int | None = None + while True: + with self._condition: + if ( + self._stop + or not self._enabled + or configuration != self._configuration + ): + break + gain_db = self._gain_db + + result = pending_result + pending_result = None + if result is None: + result = self._provider() + if result is None or result.timestamp == last_timestamp: + time.sleep(0.01) + continue + + stream_audio = result.stream_audio + if stream_audio is None or stream_audio.size == 0: + last_timestamp = result.timestamp + continue + if ( + last_stream_end is not None + and result.stream_sample_start is not None + and result.stream_sample_start != last_stream_end + ): + with self._condition: + self._discontinuities += 1 + + chunk, clipped = self.apply_gain(stream_audio, gain_db) + underflowed = bool(stream.write(chunk[:, None])) + last_timestamp = result.timestamp + last_stream_end = result.stream_sample_end + with self._condition: + self._status = "CLIPPING" if clipped else "LIVE" + if underflowed: + self._underflows += 1 + except Exception as exc: + with self._condition: + if self._enabled and configuration == self._configuration: + self._status = "ERROR" + self._error = str(exc) + self._enabled = False + finally: + if stream is not None: + try: + stream.abort() + except Exception: + pass + try: + stream.close() + except Exception: + pass + with self._condition: + if self._stream is stream: + self._stream = None + if not self._enabled and self._status != "ERROR": + self._status = "OFF" + + def close(self) -> None: + stream = None + with self._condition: + self._stop = True + self._enabled = False + stream = self._stream + self._condition.notify_all() + if stream is not None: + try: + stream.abort() + except Exception: + pass + if self._thread is not threading.current_thread(): + self._thread.join(timeout=2.0) diff --git a/PC_SoftWare/src/doa_estimator.py b/PC_SoftWare/src/doa_estimator.py new file mode 100644 index 0000000..45e328b --- /dev/null +++ b/PC_SoftWare/src/doa_estimator.py @@ -0,0 +1,507 @@ +"""Real-time SRP-PHAT and NormMUSIC direction-of-arrival estimation. + +The algorithms are loaded directly from the cloned Pyroomacoustics source +tree. This avoids importing the package-level room simulator, whose native +``libroom`` extension is unrelated to DOA and is not required here. +""" + +from __future__ import annotations + +import importlib +import math +import sys +import threading +import time +import types +from collections import deque +from dataclasses import dataclass +from pathlib import Path +from typing import Any + +import numpy as np + +try: + from .mvdr_beamformer import MvdrBeamformer, MvdrConfig, MvdrResult + from .stft_analysis import StftAnalysis, analyze_multichannel_stft +except ImportError: # Support direct execution from the src directory. + from mvdr_beamformer import MvdrBeamformer, MvdrConfig, MvdrResult + from stft_analysis import StftAnalysis, analyze_multichannel_stft + + +# Channel coordinates must match the USB channel order. Angles use the +# mathematical convention: 0 degrees points right (+x), positive is CCW (+y). +# These values reproduce the channel locations drawn by src/main.py. +MIC_AZIMUTHS_DEG = (157.5, 202.5, 247.5, 292.5, 337.5, 22.5, 67.5, 112.5) +DOA_ALGORITHMS = ("SRP-PHAT", "NormMUSIC") + + +def _load_pyroomacoustics_doa_class(module_name: str, class_name: str) -> type[Any]: + """Load an upstream DOA class without importing the native room simulator.""" + + doa_source = ( + Path(__file__).resolve().parents[1] + / "pyroomacoustics" + / "pyroomacoustics" + / "doa" + ) + algorithm_source = doa_source / f"{module_name}.py" + if not algorithm_source.is_file(): + raise RuntimeError( + "Pyroomacoustics source was not found. Expected " + f"{algorithm_source}. Clone https://github.com/LCAV/pyroomacoustics.git " + "into the project root." + ) + + # Give the source directory a private package name so relative imports in + # algorithm modules (doa.py, grid.py, utils.py, ...) continue to work. Do + # not execute pyroomacoustics/__init__.py, which imports the native libroom. + package_name = "_esp32_8mic_pyroom_doa" + if package_name not in sys.modules: + package = types.ModuleType(package_name) + package.__path__ = [str(doa_source)] # type: ignore[attr-defined] + package.__package__ = package_name + sys.modules[package_name] = package + + module = importlib.import_module(f"{package_name}.{module_name}") + return getattr(module, class_name) + + +def load_pyroomacoustics_srp() -> type[Any]: + return _load_pyroomacoustics_doa_class("srp", "SRP") + + +def load_pyroomacoustics_normmusic() -> type[Any]: + return _load_pyroomacoustics_doa_class("normmusic", "NormMUSIC") + + +def normalize_algorithm(algorithm: str) -> str: + normalized = algorithm.strip().upper().replace("_", "-") + if normalized == "SRP": + normalized = "SRP-PHAT" + elif normalized in ("MUSIC", "NORMMUSIC", "NORM-MUSIC"): + # MUSIC is retained as an input alias for saved settings and callers, + # but always selects Pyroomacoustics' frequency-normalized variant. + normalized = "NormMUSIC" + if normalized not in DOA_ALGORITHMS: + choices = ", ".join(DOA_ALGORITHMS) + raise ValueError(f"Unknown DOA algorithm {algorithm!r}; expected {choices}") + return normalized + + +@dataclass(frozen=True) +class DoaConfig: + sample_rate: int = 48_000 + channels: int = 8 + radius_m: float = 0.056 + sound_speed_m_s: float = 343.0 + # Zero selects duration-equivalent defaults derived from sample_rate. + nfft: int = 0 + hop: int = 0 + window_samples: int = 0 + update_interval_s: float = 0.10 + min_frequency_hz: float = 500.0 + max_frequency_hz: float = 4_000.0 + activity_threshold_dbfs: float = -58.0 + grid_points: int = 360 + smoothing: float = 0.35 + mvdr_diagonal_loading: float = 1e-2 + microphone_azimuths_deg: tuple[float, ...] = MIC_AZIMUTHS_DEG + + def __post_init__(self) -> None: + nfft = self.nfft + if nfft == 0: + # Preserve the 512-point/48 kHz frame duration while selecting a + # radix-2 FFT. This resolves to 256 points at 24 kHz. + target = max(128.0, 512.0 * self.sample_rate / 48_000.0) + exponent = int(round(math.log2(target))) + nfft = max(128, min(4_096, 1 << exponent)) + object.__setattr__(self, "nfft", nfft) + if self.hop == 0: + object.__setattr__(self, "hop", max(1, nfft // 2)) + if self.window_samples == 0: + # Sixteen FFT lengths gives 8192 samples at 48 kHz and 4096 at + # 24 kHz, preserving the approximately 171 ms rolling duration. + object.__setattr__(self, "window_samples", max(nfft, nfft * 16)) + + +@dataclass(frozen=True) +class DoaEstimate: + angle_degrees: float | None + level_dbfs: float + peak_sharpness: float + timestamp: float + algorithm: str + + +class DoaEstimator: + """Estimate one horizontal far-field source with SRP-PHAT or NormMUSIC.""" + + def __init__( + self, + config: DoaConfig | None = None, + *, + algorithm: str = "SRP-PHAT", + srp_class: type[Any] | None = None, + normmusic_class: type[Any] | None = None, + start_worker: bool = True, + ) -> None: + self.config = config or DoaConfig() + self._validate_config() + + angles = np.deg2rad(np.asarray(self.config.microphone_azimuths_deg)) + self.microphone_positions = self.config.radius_m * np.vstack( + (np.cos(angles), np.sin(angles)) + ) + common_args = (self.microphone_positions, self.config.sample_rate, self.config.nfft) + common_kwargs = { + "c": self.config.sound_speed_m_s, + "num_src": 1, + "mode": "far", + "n_grid": self.config.grid_points, + "dim": 2, + } + srp_type = srp_class or load_pyroomacoustics_srp() + normmusic_type = normmusic_class or load_pyroomacoustics_normmusic() + self._engines = { + "SRP-PHAT": srp_type(*common_args, **common_kwargs), + "NormMUSIC": normmusic_type( + *common_args, + frequency_normalization=True, + **common_kwargs, + ), + } + self._algorithm = normalize_algorithm(algorithm) + self._analysis_window = np.hanning(self.config.nfft).astype(np.float32) + self._mvdr = MvdrBeamformer( + self.microphone_positions, + MvdrConfig( + sample_rate=self.config.sample_rate, + nfft=self.config.nfft, + hop=self.config.hop, + sound_speed_m_s=self.config.sound_speed_m_s, + min_frequency_hz=self.config.min_frequency_hz, + max_frequency_hz=self.config.max_frequency_hz, + diagonal_loading=self.config.mvdr_diagonal_loading, + ), + ) + + self._lock = threading.Lock() + self._latest: DoaEstimate | None = None + self._latest_mvdr: MvdrResult | None = None + self._error: str | None = None + self._mvdr_error: str | None = None + self._monitor_results: deque[MvdrResult] = deque(maxlen=8) + self._reset_mvdr_stream = False + self._last_valid_angle_degrees: float | None = None + self._manual_mvdr_angle_degrees: float | None = None + self._smoothed_angle_radians: float | None = None + # A fixed single-producer/single-consumer ring keeps the newest DOA + # window. It cannot grow or build latency when estimation falls behind. + self._ring = np.zeros( + (self.config.window_samples, self.config.channels), dtype=np.float32 + ) + self._ring_write = 0 + self._ring_count = 0 + self._ring_generation = 0 + self._samples_submitted = 0 + self._ring_condition = threading.Condition() + self._stop = threading.Event() + self._thread: threading.Thread | None = None + if start_worker: + self._thread = threading.Thread( + target=self._worker, + name="realtime-doa", + daemon=True, + ) + self._thread.start() + + def _validate_config(self) -> None: + c = self.config + if c.channels != len(c.microphone_azimuths_deg): + raise ValueError("One microphone angle is required for every channel") + if c.nfft <= 0 or c.nfft % 2: + raise ValueError("nfft must be a positive even integer") + if not 0 < c.hop <= c.nfft: + raise ValueError("hop must be in the range 1..nfft") + if c.window_samples < c.nfft: + raise ValueError("window_samples must be at least nfft") + if c.sample_rate <= 0: + raise ValueError("sample_rate must be positive") + if not 0.0 <= c.min_frequency_hz < c.max_frequency_hz: + raise ValueError("DOA frequency range is invalid") + if c.max_frequency_hz >= c.sample_rate / 2.0: + raise ValueError("max_frequency_hz must be below the Nyquist frequency") + if not 0.0 < c.smoothing <= 1.0: + raise ValueError("smoothing must be in the range (0, 1]") + if c.mvdr_diagonal_loading <= 0.0: + raise ValueError("mvdr_diagonal_loading must be positive") + + @property + def latest(self) -> DoaEstimate | None: + with self._lock: + return self._latest + + @property + def error(self) -> str | None: + with self._lock: + return self._error + + @property + def latest_mvdr(self) -> MvdrResult | None: + with self._lock: + return self._latest_mvdr + + @property + def mvdr_error(self) -> str | None: + with self._lock: + return self._mvdr_error + + @property + def algorithm(self) -> str: + with self._lock: + return self._algorithm + + def set_algorithm(self, algorithm: str) -> str: + selected = normalize_algorithm(algorithm) + with self._lock: + if selected != self._algorithm: + self._algorithm = selected + self._latest = None + self._latest_mvdr = None + self._error = None + self._mvdr_error = None + self._monitor_results.clear() + self._reset_mvdr_stream = True + self._last_valid_angle_degrees = None + self._smoothed_angle_radians = None + return selected + + def toggle_algorithm(self) -> str: + current = self.algorithm + index = DOA_ALGORITHMS.index(current) + return self.set_algorithm(DOA_ALGORITHMS[(index + 1) % len(DOA_ALGORITHMS)]) + + @property + def mvdr_steering_angle_override(self) -> float | None: + """Return the manual MVDR steering angle, or ``None`` for DOA steering.""" + + with self._lock: + return self._manual_mvdr_angle_degrees + + def set_mvdr_steering_angle(self, angle_degrees: float | None) -> float | None: + """Override the MVDR bearing without changing the DOA estimator output.""" + + if angle_degrees is None: + normalized = None + else: + value = float(angle_degrees) + if not math.isfinite(value): + raise ValueError("MVDR steering angle must be finite") + normalized = value % 360.0 + with self._lock: + self._manual_mvdr_angle_degrees = normalized + return normalized + + def pop_monitor_result(self) -> MvdrResult | None: + """Pop the oldest finalized streaming-WOLA block for playback.""" + + with self._lock: + return self._monitor_results.popleft() if self._monitor_results else None + + def clear_monitor_results(self) -> None: + with self._lock: + self._monitor_results.clear() + + def submit(self, audio: np.ndarray) -> None: + """Copy an ``samples x channels`` block into the fixed audio ring.""" + + block = np.asarray(audio, dtype=np.float32) + if block.ndim != 2 or block.shape[1] != self.config.channels: + return + capacity = self.config.window_samples + submitted_count = block.shape[0] + if block.shape[0] >= capacity: + block = block[-capacity:] + + count = block.shape[0] + with self._ring_condition: + first = min(count, capacity - self._ring_write) + self._ring[self._ring_write : self._ring_write + first] = block[:first] + remaining = count - first + if remaining: + self._ring[:remaining] = block[first:] + self._ring_write = (self._ring_write + count) % capacity + self._ring_count = min(capacity, self._ring_count + count) + self._samples_submitted += submitted_count + self._ring_generation += 1 + self._ring_condition.notify() + + @property + def buffered_samples(self) -> int: + with self._ring_condition: + return self._ring_count + + def estimate(self, audio: np.ndarray, algorithm: str | None = None) -> DoaEstimate: + """Synchronously estimate DOA from a calibrated multichannel window.""" + + analysis = self.analyze_stft(audio) + return self.estimate_stft(analysis, algorithm=algorithm) + + def analyze_stft(self, audio: np.ndarray) -> StftAnalysis: + """Compute the STFT shared by DOA and MVDR for one audio window.""" + + return analyze_multichannel_stft( + audio, + channels=self.config.channels, + nfft=self.config.nfft, + hop=self.config.hop, + window=self._analysis_window, + ) + + def estimate_stft( + self, + analysis: StftAnalysis, + algorithm: str | None = None, + ) -> DoaEstimate: + """Estimate DOA from a previously computed multichannel STFT.""" + + selected = normalize_algorithm(algorithm) if algorithm else self.algorithm + engine = self._engines[selected] + level_dbfs = analysis.level_dbfs + now = time.monotonic() + if level_dbfs < self.config.activity_threshold_dbfs: + return DoaEstimate(None, level_dbfs, 0.0, now, selected) + + # Pyroomacoustics expects channels x frequencies x snapshots. + snapshots = np.transpose(analysis.spectra, (2, 1, 0)) + + engine.locate_sources( + snapshots, + freq_range=[ + self.config.min_frequency_hz, + self.config.max_frequency_hz, + ], + ) + angle = float(np.degrees(engine.azimuth_recon[0]) % 360.0) + values = np.asarray(engine.grid.values, dtype=float) + peak = float(np.max(values)) + floor = float(np.median(values)) + spread = peak - float(np.min(values)) + sharpness = float(np.clip((peak - floor) / (spread + 1e-12), 0.0, 1.0)) + return DoaEstimate(angle, level_dbfs, sharpness, now, selected) + + def _smooth_angle(self, angle_degrees: float) -> float: + current = math.radians(angle_degrees) + previous = self._smoothed_angle_radians + if previous is None: + smoothed = current + else: + alpha = self.config.smoothing + x = (1.0 - alpha) * math.cos(previous) + alpha * math.cos(current) + y = (1.0 - alpha) * math.sin(previous) + alpha * math.sin(current) + smoothed = math.atan2(y, x) + self._smoothed_angle_radians = smoothed + return math.degrees(smoothed) % 360.0 + + def _worker(self) -> None: + buffer = np.empty( + (self.config.window_samples, self.config.channels), dtype=np.float32 + ) + last_generation = -1 + next_update = 0.0 + while not self._stop.is_set(): + with self._ring_condition: + self._ring_condition.wait_for( + lambda: self._stop.is_set() + or self._ring_generation != last_generation, + timeout=0.2, + ) + if self._stop.is_set(): + break + last_generation = self._ring_generation + source_sample_end = self._samples_submitted + if self._ring_count < self.config.window_samples: + continue + + # Once full, _ring_write points at the oldest sample. Copy a + # coherent chronological snapshot into a reusable work buffer. + split = self.config.window_samples - self._ring_write + buffer[:split] = self._ring[self._ring_write :] + if self._ring_write: + buffer[split:] = self._ring[: self._ring_write] + + now = time.monotonic() + if now < next_update: + continue + next_update = now + self.config.update_interval_s + + selected = self.algorithm + try: + with self._lock: + reset_mvdr_stream = self._reset_mvdr_stream + self._reset_mvdr_stream = False + if reset_mvdr_stream: + self._mvdr.reset_stream() + # One DC-removal/window/FFT pass feeds both the selected DOA + # engine and MVDR; the beamformer does not recompute an STFT. + analysis = self.analyze_stft(buffer) + result = self.estimate_stft(analysis, algorithm=selected) + with self._lock: + if result.algorithm != self._algorithm: + continue + if result.angle_degrees is not None: + result = DoaEstimate( + self._smooth_angle(result.angle_degrees), + result.level_dbfs, + result.peak_sharpness, + result.timestamp, + result.algorithm, + ) + self._last_valid_angle_degrees = result.angle_degrees + beamforming_angle = ( + self._manual_mvdr_angle_degrees + if self._manual_mvdr_angle_degrees is not None + else self._last_valid_angle_degrees + ) + + mvdr_result = None + mvdr_error = None + if beamforming_angle is not None: + try: + mvdr_result = self._mvdr.process_stft( + analysis, + beamforming_angle, + source_sample_end=source_sample_end, + ) + except Exception as exc: + mvdr_error = str(exc) + + with self._lock: + if result.algorithm != self._algorithm: + continue + self._latest = result + self._latest_mvdr = mvdr_result + self._error = None + self._mvdr_error = mvdr_error + if ( + mvdr_result is not None + and mvdr_result.stream_audio is not None + and mvdr_result.stream_audio.size + ): + self._monitor_results.append(mvdr_result) + except Exception as exc: + with self._lock: + if selected == self._algorithm: + self._error = str(exc) + + def close(self) -> None: + self._stop.set() + with self._ring_condition: + self._ring_condition.notify_all() + if self._thread is not None: + self._thread.join(timeout=1.0) + + +# Backward-compatible name used by the initial SRP-only UI and external code. +SrpPhatConfig = DoaConfig +SrpPhatEstimator = DoaEstimator diff --git a/PC_SoftWare/src/gain_cali.json b/PC_SoftWare/src/gain_cali.json new file mode 100644 index 0000000..5f66196 --- /dev/null +++ b/PC_SoftWare/src/gain_cali.json @@ -0,0 +1,13 @@ +{ + "common_base_gain_db": 15.0, + "channel_trim_gain_db": [ + -1.8288826681343429, + 1.3977249439146622, + -0.8386426154471731, + 1.9970350585161052, + -1.073561535307002, + 0.536631836656505, + -2.456214123248102, + 1.196345532707942 + ] +} diff --git a/PC_SoftWare/src/gain_calibration.py b/PC_SoftWare/src/gain_calibration.py new file mode 100644 index 0000000..b4adede --- /dev/null +++ b/PC_SoftWare/src/gain_calibration.py @@ -0,0 +1,77 @@ +"""Input gain calibration for the multichannel microphone stream.""" + +from __future__ import annotations + +import json +import math +from dataclasses import dataclass +from pathlib import Path + +import numpy as np + + +DEFAULT_GAIN_CALIBRATION_PATH = Path(__file__).with_name("gain_cali.json") + + +@dataclass(frozen=True) +class GainCalibration: + """Common and per-channel amplitude gains loaded from a JSON file.""" + + common_base_gain_db: float + channel_trim_gain_db: tuple[float, ...] + linear_gain: np.ndarray + + @classmethod + def load( + cls, + path: str | Path = DEFAULT_GAIN_CALIBRATION_PATH, + *, + channels: int = 8, + ) -> GainCalibration: + config_path = Path(path) + with config_path.open("r", encoding="utf-8") as config_file: + config = json.load(config_file) + + if not isinstance(config, dict): + raise ValueError(f"Gain calibration in {config_path} must be a JSON object") + + common_gain = cls._finite_number( + config.get("common_base_gain_db"), + "common_base_gain_db", + config_path, + ) + raw_trim = config.get("channel_trim_gain_db") + if not isinstance(raw_trim, list) or len(raw_trim) != channels: + raise ValueError( + f"channel_trim_gain_db in {config_path} must contain " + f"exactly {channels} values" + ) + trim = tuple( + cls._finite_number(value, f"channel_trim_gain_db[{index}]", config_path) + for index, value in enumerate(raw_trim) + ) + + total_gain_db = np.asarray(trim, dtype=np.float64) + common_gain + linear_gain = np.power(10.0, total_gain_db / 20.0).astype(np.float32) + linear_gain.setflags(write=False) + return cls(common_gain, trim, linear_gain) + + @staticmethod + def _finite_number(value: object, name: str, path: Path) -> float: + if isinstance(value, bool) or not isinstance(value, (int, float)): + raise ValueError(f"{name} in {path} must be a number in dB") + result = float(value) + if not math.isfinite(result): + raise ValueError(f"{name} in {path} must be finite") + return result + + def apply(self, samples: np.ndarray) -> np.ndarray: + """Apply amplitude gains to frames shaped ``(samples, channels)``.""" + + audio = np.asarray(samples, dtype=np.float32) + if audio.ndim != 2 or audio.shape[1] != len(self.channel_trim_gain_db): + raise ValueError( + "Audio must be a two-dimensional array with " + f"{len(self.channel_trim_gain_db)} channels" + ) + return audio * self.linear_gain diff --git a/PC_SoftWare/src/main.py b/PC_SoftWare/src/main.py new file mode 100644 index 0000000..1c95453 --- /dev/null +++ b/PC_SoftWare/src/main.py @@ -0,0 +1,1418 @@ +"""8-channel circular microphone array monitor. + +Run with ``python src/main.py`` after installing the project's dependencies. +The monitor opens the first system/USB input exposing at least eight channels +through sounddevice. If no compatible device is available it falls back to a +local demo signal. +""" + +from __future__ import annotations + +import argparse +import math +import random +import sys +import threading +import time +from dataclasses import dataclass +from pathlib import Path + +import numpy as np +import pygame + +try: + from .audio_monitor import MvdrAudioMonitor + from .doa_estimator import ( + DOA_ALGORITHMS, + MIC_AZIMUTHS_DEG, + DoaConfig, + DoaEstimator, + DoaEstimate, + MvdrResult, + ) + from .gain_calibration import DEFAULT_GAIN_CALIBRATION_PATH, GainCalibration +except ImportError: # Support direct execution with ``python src/main.py``. + from audio_monitor import MvdrAudioMonitor + from doa_estimator import ( + DOA_ALGORITHMS, + MIC_AZIMUTHS_DEG, + DoaConfig, + DoaEstimator, + DoaEstimate, + MvdrResult, + ) + from gain_calibration import DEFAULT_GAIN_CALIBRATION_PATH, GainCalibration + + +WIDTH, HEIGHT = 1500, 820 +FPS = 60 +FALLBACK_SAMPLE_RATE = 48_000 +# Audio scale used by both the radial chart and the channel meters. +DB_MIN, DB_MAX = -90.0, 0.0 +# Pyroomacoustics and the displayed bearing both use 0 degrees at +x (right) +# and positive angles counter-clockwise. Pygame's y axis points down, hence the +# sign inversion when a mathematical angle is drawn. +RING_ORDER = (1, 2, 3, 4, 5, 6, 7, 8) +BG = (9, 15, 29) +PANEL = (15, 24, 43) +GRID = (45, 65, 92) +MUTED = (133, 154, 180) +TEXT = (229, 238, 250) +CYAN = (52, 211, 220) +CYAN_SOFT = (46, 164, 182) +GREEN = (67, 218, 151) +MANUAL_BLUE = (105, 190, 255) +AMBER = (245, 182, 74) + + +def clamp(value: float, low: float, high: float) -> float: + return max(low, min(high, value)) + + +def polar(center: tuple[int, int], radius: float, angle: float) -> tuple[int, int]: + return (int(center[0] + math.cos(angle) * radius), int(center[1] + math.sin(angle) * radius)) + + +def font(size: int, bold: bool = False) -> pygame.font.Font: + # Noto Sans CJK is common on the target desktop; fall back cleanly elsewhere. + candidates = ["Noto Sans CJK SC", "Microsoft YaHei", "Arial"] + for name in candidates: + path = pygame.font.match_font(name, bold=bold) + if path: + return pygame.font.Font(path, size) + return pygame.font.Font(None, size) + + +@dataclass +class Channel: + index: int + angle: float + level: float = -36.0 + peak: float = -32.0 + history: list[float] | None = None + + def __post_init__(self) -> None: + self.history = [-72.0] * 32 + + +class AudioSource: + """Smooth synthetic levels for a responsive preview without microphone hardware.""" + + def __init__(self) -> None: + self.t = 0.0 + self.rng = random.Random(8) + + def read_levels(self, dt: float) -> list[float]: + self.t += dt + values = [] + for i in range(8): + wave = math.sin(self.t * (2.1 + i * 0.08) + i * 0.72) * 7.0 + wave += math.sin(self.t * 5.5 + i * 1.4) * 2.2 + noise = self.rng.uniform(-2.0, 2.0) + values.append(clamp(-54 + wave + noise, DB_MIN, -3)) + # Occasionally show a stronger source, making peak-hold behavior visible. + if int(self.t) % 11 in (4, 5): + values[2] = clamp(values[2] + 12, DB_MIN, -1) + return values + + +class LiveAudioSource: + """Capture eight channels from the system audio driver via PortAudio. + + A normal-priority Python thread uses PortAudio's blocking read mode. This + keeps allocation, NumPy work, locks, and DOA hand-off out of PortAudio's + real-time callback context. + """ + + def __init__( + self, + channels: int = 8, + sample_rate: int | None = None, + blocksize: int = 1_024, + device: int | str | None = None, + gain_calibration_path: str | Path = DEFAULT_GAIN_CALIBRATION_PATH, + ) -> None: + self.channels = channels + self.sample_rate = sample_rate or FALLBACK_SAMPLE_RATE + self.sample_rate_is_automatic = sample_rate is None + self.read_frames = blocksize + self.levels = np.full(channels, DB_MIN, dtype=np.float32) + self.lock = threading.Lock() + self.stream = None + self.error: str | None = None + self.input_overflows = 0 + self.frames_captured = 0 + self.last_capture_time = 0.0 + self.doa_error: str | None = None + self.doa: DoaEstimator | None = None + self._doa_algorithm = DOA_ALGORITHMS[0] + self._capture_stop = threading.Event() + self._capture_thread: threading.Thread | None = None + self.device_index: int | None = None + self.device_name = "" + self.device_host_api = "" + self.device_max_input_channels = 0 + self.device_default_sample_rate = 0.0 + self.gain_calibration: GainCalibration | None = None + try: + self.gain_calibration = GainCalibration.load( + gain_calibration_path, + channels=channels, + ) + import sounddevice as sd + + selected_device = self._find_device(sd, device, channels) + if selected_device is None: + raise RuntimeError("No audio input device with at least 8 channels was found") + info = sd.query_devices(selected_device) + self.device_index = selected_device + self.device_name = str(info["name"]) + self.device_host_api = self._hostapi_name(sd, info) + self.device_max_input_channels = int(info["max_input_channels"]) + self.device_default_sample_rate = float( + info.get("default_samplerate", 0.0) + ) + selected_rate = self._select_sample_rate(info, sample_rate) + + check_settings = getattr(sd, "check_input_settings", None) + if callable(check_settings): + check_settings( + device=selected_device, + channels=channels, + samplerate=selected_rate, + dtype="float32", + ) + + self.stream = sd.InputStream( + device=selected_device, + channels=channels, + samplerate=selected_rate, + # Let the host API select its stable native block granularity. + blocksize=0, + dtype="float32", + ) + # Use the rate actually reported by the opened stream throughout + # DOA and beamforming. This also covers host APIs that negotiate a + # rate slightly differently from the requested endpoint default. + actual_rate = float(getattr(self.stream, "samplerate", selected_rate)) + if not math.isfinite(actual_rate) or actual_rate <= 0: + raise RuntimeError(f"Audio driver reported invalid sample rate {actual_rate}") + self.sample_rate = int(round(actual_rate)) + try: + self.doa = DoaEstimator( + DoaConfig(sample_rate=self.sample_rate, channels=channels), + algorithm=self._doa_algorithm, + ) + except Exception as exc: + self.doa_error = str(exc) + self.stream.start() + self._capture_thread = threading.Thread( + target=self._capture_loop, + name="usb-audio-capture", + daemon=True, + ) + self._capture_thread.start() + except Exception as exc: # Driver/library errors should not prevent the UI opening. + self.error = str(exc) + self.close() + + @staticmethod + def _select_sample_rate(info, requested: int | None) -> int: + if requested is not None: + if requested <= 0: + raise ValueError("sample_rate must be positive") + return requested + detected = float(info.get("default_samplerate", FALLBACK_SAMPLE_RATE)) + if not math.isfinite(detected) or detected <= 0: + return FALLBACK_SAMPLE_RATE + return int(round(detected)) + + @staticmethod + def _hostapi_name(sd, info) -> str: + hostapi_index = info.get("hostapi") + query_hostapis = getattr(sd, "query_hostapis", None) + if hostapi_index is None or not callable(query_hostapis): + return "" + try: + return str(query_hostapis(hostapi_index)["name"]) + except Exception: + return "" + + @classmethod + def _device_sort_key(cls, sd, item, default_input: int) -> tuple[int, int, int]: + index, info = item + hostapi = cls._hostapi_name(sd, info).casefold() + if "wasapi" in hostapi: + api_rank = 0 + elif "wdm-ks" in hostapi or "wdm/ks" in hostapi: + api_rank = 1 + elif "directsound" in hostapi: + api_rank = 5 + elif "mme" in hostapi: + api_rank = 6 + else: + api_rank = 2 + name = str(info["name"]).casefold() + name_rank = 0 if any(key in name for key in ("usb", "mic", "array")) else 1 + default_rank = 0 if index == default_input else 1 + return api_rank, name_rank, default_rank + + @staticmethod + def _find_device(sd, preferred: int | str | None, channels: int) -> int | None: + devices = sd.query_devices() + if isinstance(devices, dict): + devices = [devices] + + if preferred is not None: + if isinstance(preferred, int) or str(preferred).isdigit(): + index = int(preferred) + if 0 <= index < len(devices) and devices[index]["max_input_channels"] >= channels: + return index + raise RuntimeError( + f"Audio device {index} does not exist or has fewer than {channels} inputs" + ) + needle = str(preferred).casefold() + matches = [ + (i, d) + for i, d in enumerate(devices) + if needle in str(d["name"]).casefold() + and d["max_input_channels"] >= channels + ] + if not matches: + raise RuntimeError( + f"No {channels}-channel input device contains {preferred!r} in its name" + ) + default_input = sd.default.device[0] + matches.sort( + key=lambda item: LiveAudioSource._device_sort_key( + sd, item, default_input + ) + ) + return matches[0][0] + + default_input = sd.default.device[0] + candidates = [ + (i, d) for i, d in enumerate(devices) + if d["max_input_channels"] >= channels + ] + if not candidates: + return None + # On Windows the same endpoint is often exposed by MME, DirectSound, + # WASAPI and WDM-KS with different default rates. Prefer WASAPI/WDM-KS, + # which report the native endpoint format more accurately than the + # legacy shared mixer APIs. + candidates.sort( + key=lambda item: LiveAudioSource._device_sort_key( + sd, item, default_input + ) + ) + return candidates[0][0] + + def _capture_loop(self) -> None: + while not self._capture_stop.is_set(): + stream = self.stream + if stream is None: + break + try: + audio, overflowed = stream.read(self.read_frames) + except Exception as exc: + if not self._capture_stop.is_set(): + with self.lock: + self.error = f"Audio capture stopped: {exc}" + break + if self._capture_stop.is_set(): + break + + data = np.asarray(audio, dtype=np.float32) + if data.ndim != 2 or data.shape[1] < self.channels: + continue + if self.gain_calibration is None: + continue + # This is the first processing step after the driver read. Both + # level display and all downstream DOA/MVDR work use this data. + channels = self.gain_calibration.apply(data[:, : self.channels]) + rms = np.sqrt(np.mean(np.square(channels), axis=0) + 1e-12) + levels = np.clip(20.0 * np.log10(rms), DB_MIN, DB_MAX) + with self.lock: + self.levels[:] = levels + self.frames_captured += channels.shape[0] + self.last_capture_time = time.monotonic() + if overflowed: + self.input_overflows += 1 + if self.doa is not None: + self.doa.submit(channels) + + @property + def available(self) -> bool: + return self.stream is not None + + def read_levels(self, _dt: float) -> list[float]: + with self.lock: + return self.levels.astype(float).tolist() + + def console_status(self) -> str: + """Return startup details suitable for a terminal or log.""" + + if not self.available: + reason = self.error or "unknown audio input error" + return ( + "[audio] Live input unavailable; using simulated preview\n" + f" Reason: {reason}" + ) + + host_api = self.device_host_api or "unknown" + default_rate = self.device_default_sample_rate + default_rate_text = ( + f"{default_rate:g} Hz" if math.isfinite(default_rate) and default_rate > 0 + else "unknown" + ) + return ( + "[audio] Input stream opened\n" + f" Device: #{self.device_index} {self.device_name}\n" + f" Driver interface (Host API): {host_api}\n" + f" Input channels: {self.channels} used / " + f"{self.device_max_input_channels} available\n" + f" Sample rate: {self.sample_rate} Hz " + f"(device default: {default_rate_text})" + ) + + @property + def doa_estimate(self) -> DoaEstimate | None: + return self.doa.latest if self.doa is not None else None + + @property + def doa_status_error(self) -> str | None: + if self.doa is not None and self.doa.error: + return self.doa.error + return self.doa_error + + @property + def mvdr_result(self) -> MvdrResult | None: + """Return the newest DOA-steered mono beamformer result.""" + + return self.doa.latest_mvdr if self.doa is not None else None + + @property + def mvdr_status_error(self) -> str | None: + return self.doa.mvdr_error if self.doa is not None else self.doa_error + + def read_beamformed_audio(self) -> np.ndarray | None: + """Copy the newest MVDR window for analysis or downstream processing. + + The UI intentionally does not play this signal to the system output, + because doing so near the microphone array can create acoustic feedback. + The window is 4096 samples at 24 kHz and 8192 samples at 48 kHz. + """ + + result = self.mvdr_result + return None if result is None else result.audio.copy() + + def pop_monitor_result(self) -> MvdrResult | None: + return self.doa.pop_monitor_result() if self.doa is not None else None + + def clear_monitor_results(self) -> None: + if self.doa is not None: + self.doa.clear_monitor_results() + + @property + def capture_error(self) -> str | None: + with self.lock: + return self.error + + @property + def capture_status(self) -> tuple[int, float]: + with self.lock: + age = ( + time.monotonic() - self.last_capture_time + if self.last_capture_time + else float("inf") + ) + return self.input_overflows, age + + @property + def doa_algorithm(self) -> str: + return self.doa.algorithm if self.doa is not None else self._doa_algorithm + + def set_doa_algorithm(self, algorithm: str) -> str: + if self.doa is not None: + self._doa_algorithm = self.doa.set_algorithm(algorithm) + elif algorithm in DOA_ALGORITHMS: + self._doa_algorithm = algorithm + return self._doa_algorithm + + def set_mvdr_steering_angle(self, angle_degrees: float | None) -> float | None: + if self.doa is None: + return None if angle_degrees is None else float(angle_degrees) % 360.0 + return self.doa.set_mvdr_steering_angle(angle_degrees) + + def close(self) -> None: + self._capture_stop.set() + stream = self.stream + if stream is not None: + try: + # Abort wakes a blocking read immediately; stop() may wait for + # pending input and delay application shutdown. + stream.abort() + except Exception: + pass + if ( + self._capture_thread is not None + and self._capture_thread is not threading.current_thread() + ): + self._capture_thread.join(timeout=2.0) + self._capture_thread = None + if stream is not None: + try: + stream.close() + except Exception: + pass + self.stream = None + if self.doa is not None: + self.doa.close() + self.doa = None + + +class Monitor: + def __init__( + self, + *, + device: int | str | None = None, + sample_rate: int | None = None, + ) -> None: + pygame.init() + pygame.display.set_caption("MIC ARRAY / DOA MONITOR") + self.screen = pygame.display.set_mode((WIDTH, HEIGHT), pygame.RESIZABLE) + self.clock = pygame.time.Clock() + self.title_font = font(22, True) + self.h1_font = font(30, True) + self.doa_font = font(36, True) + self.body_font = font(15) + self.small_font = font(12) + self.demo_source = AudioSource() + self.live_source = LiveAudioSource(device=device, sample_rate=sample_rate) + print(self.live_source.console_status(), flush=True) + self.sample_rate = self.live_source.sample_rate + self.audio_monitor = MvdrAudioMonitor( + self.sample_rate, + self.live_source.pop_monitor_result, + self.live_source.clear_monitor_results, + ) + angles = { + channel_id: -math.radians(MIC_AZIMUTHS_DEG[slot]) + for slot, channel_id in enumerate(RING_ORDER) + } + # Keep the data/list order CH1..CH8 while placing each channel by the + # physical ring order above. + self.channels = [Channel(i + 1, angles[i + 1]) for i in range(8)] + self.paused = False + # Prefer the USB/audio-driver stream; fall back to the deterministic + # demo signal when PortAudio cannot open an 8-channel input. + self.demo = not self.live_source.available + self.doa_angle_degrees: float | None = None + self.doa_status = "SIMULATED" if self.demo else "WARMING UP" + self.doa_detail = "" + self.mvdr_status = "PREVIEW" if self.demo else "WARMING" + self.mvdr_detail = "preview only" if self.demo else "collecting audio" + self.mvdr_level_dbfs: float | None = None + self.mvdr_input_level_dbfs: float | None = None + self.mvdr_angle_degrees: float | None = None + self.manual_steer_enabled = False + self.manual_steer_angle_degrees = 0.0 + self.manual_steer_text = "0.0" + self.manual_steer_input_active = False + self.manual_steer_input_invalid = False + self.manual_steer_replace_on_type = False + self.manual_steer_input_rect = pygame.Rect(0, 0, 0, 0) + self.manual_steer_toggle_rect = pygame.Rect(0, 0, 0, 0) + self.algorithm_buttons: dict[str, pygame.Rect] = {} + self.monitor_toggle_rect = pygame.Rect(0, 0, 0, 0) + self.monitor_device_rect = pygame.Rect(0, 0, 0, 0) + self.monitor_gain_rect = pygame.Rect(0, 0, 0, 0) + self.monitor_device_buttons: dict[int, pygame.Rect] = {} + self.monitor_device_menu_open = False + self.monitor_gain_dragging = False + + def text(self, surface: pygame.Surface, value: str, xy: tuple[int, int], f: pygame.font.Font, color=TEXT) -> None: + surface.blit(f.render(value, True, color), xy) + + def rounded(self, surface: pygame.Surface, rect: pygame.Rect, color: tuple[int, int, int], radius: int = 10, width: int = 0) -> None: + pygame.draw.rect(surface, color, rect, width=width, border_radius=radius) + + def update(self, dt: float) -> None: + if self.paused: + return + levels = self.demo_source.read_levels(dt) if self.demo else self.live_source.read_levels(dt) + for channel, level in zip(self.channels, levels): + channel.level = channel.level * 0.72 + level * 0.28 + channel.peak = max(channel.level, channel.peak - dt * 4.0) + assert channel.history is not None + channel.history.append(channel.level) + del channel.history[0] + + if self.demo: + # UI-only preview; it is explicitly labelled SIMULATED. + self.doa_angle_degrees = (25.0 + self.demo_source.t * 18.0) % 360.0 + self.doa_status = "SIMULATED" + self.doa_detail = f"{self.live_source.doa_algorithm} preview" + self.mvdr_status = "PREVIEW" + self.mvdr_detail = "preview only" + self.mvdr_level_dbfs = None + self.mvdr_input_level_dbfs = None + self.mvdr_angle_degrees = None + return + + capture_error = self.live_source.capture_error + error = self.live_source.doa_status_error + estimate = self.live_source.doa_estimate + mvdr_error = self.live_source.mvdr_status_error + mvdr_result = self.live_source.mvdr_result + overflows, capture_age = self.live_source.capture_status + if capture_error: + self.doa_angle_degrees = None + self.doa_status = "AUDIO ERROR" + self.doa_detail = capture_error[:28] + elif math.isfinite(capture_age) and capture_age > 1.5: + self.doa_angle_degrees = None + self.doa_status = "AUDIO STALE" + self.doa_detail = f"last block {capture_age:.1f}s ago" + elif error: + self.doa_angle_degrees = None + self.doa_status = "DOA ERROR" + self.doa_detail = error[:28] + elif estimate is None: + self.doa_angle_degrees = None + self.doa_status = "WARMING UP" + self.doa_detail = "collecting audio" + elif time.monotonic() - estimate.timestamp > 1.5: + self.doa_angle_degrees = None + self.doa_status = "STALE" + self.doa_detail = "waiting for audio" + elif estimate.angle_degrees is None: + self.doa_angle_degrees = None + self.doa_status = "LOW SIGNAL" + self.doa_detail = f"{estimate.level_dbfs:.1f} dBFS" + else: + self.doa_angle_degrees = estimate.angle_degrees + self.doa_status = f"{estimate.algorithm} / LIVE" + self.doa_detail = ( + f"OVF {overflows}" if overflows else f"{estimate.level_dbfs:.1f} dBFS" + ) + + self.mvdr_level_dbfs = None + self.mvdr_input_level_dbfs = None + self.mvdr_angle_degrees = None + if capture_error or (math.isfinite(capture_age) and capture_age > 1.5): + self.mvdr_status = "OFFLINE" + self.mvdr_detail = "no fresh audio" + elif mvdr_error: + self.mvdr_status = "ERROR" + self.mvdr_detail = mvdr_error[:28] + elif mvdr_result is None: + if self.manual_steer_enabled: + self.mvdr_status = "WARMING" + self.mvdr_detail = "waiting for manual output" + elif estimate is not None and estimate.angle_degrees is None: + self.mvdr_status = "LOW SIGNAL" + self.mvdr_detail = "no valid DOA to hold" + else: + self.mvdr_status = "WARMING" + self.mvdr_detail = "waiting for direction" + elif time.monotonic() - mvdr_result.timestamp > 1.5: + self.mvdr_status = "STALE" + self.mvdr_detail = "waiting for audio" + else: + holding_direction = estimate is not None and estimate.angle_degrees is None + if self.manual_steer_enabled: + self.mvdr_status = "MANUAL" + self.mvdr_detail = "manual steering override" + else: + self.mvdr_status = "HOLD" if holding_direction else "LIVE" + self.mvdr_detail = ( + "using last valid DOA" + if holding_direction + else "8 inputs / 1 mono output" + ) + self.mvdr_level_dbfs = mvdr_result.level_dbfs + self.mvdr_input_level_dbfs = mvdr_result.input_level_dbfs + self.mvdr_angle_degrees = mvdr_result.angle_degrees + + def set_doa_algorithm(self, algorithm: str) -> None: + selected = self.live_source.set_doa_algorithm(algorithm) + self.doa_angle_degrees = None + self.doa_status = "SIMULATED" if self.demo else "WARMING UP" + self.doa_detail = f"{selected} selected" + self.mvdr_status = "PREVIEW" if self.demo else "WARMING" + self.mvdr_detail = "waiting for direction" + self.mvdr_level_dbfs = None + self.mvdr_input_level_dbfs = None + self.mvdr_angle_degrees = None + + def toggle_doa_algorithm(self) -> None: + current = self.live_source.doa_algorithm + index = DOA_ALGORITHMS.index(current) + self.set_doa_algorithm(DOA_ALGORITHMS[(index + 1) % len(DOA_ALGORITHMS)]) + + def draw_header(self, surface: pygame.Surface, width: int) -> None: + self.text(surface, "MIC ARRAY", (32, 27), self.title_font) + self.text(surface, "DOA + MVDR BEAMFORMING", (32, 57), self.small_font, MUTED) + status = "PAUSED" if self.paused else "DEMO" if self.demo else "LIVE" + status_color = AMBER if self.paused else CYAN if self.demo else GREEN + self.rounded(surface, pygame.Rect(272, 31, 72, 26), (24, 67, 68), 13) + pygame.draw.circle(surface, status_color, (289, 44), 4) + self.text(surface, status, (299, 37), self.small_font, status_color) + mode = "8 CH / DEMO" if self.demo else "USB / 8 CH" if self.live_source.available else "NO INPUT" + doa_config = ( + self.live_source.doa.config + if self.live_source.doa is not None + else DoaConfig(sample_rate=self.sample_rate) + ) + window_ms = round(doa_config.window_samples / self.sample_rate * 1_000) + cards = [ + ("DEVICE RATE", f"{self.sample_rate / 1_000:.1f} kHz", 100), + ("DOA WINDOW", f"{window_ms} ms", 95), + ("MODE", mode, 115), + ] + x = width - 355 + for label, value, card_width in cards: + self.rounded(surface, pygame.Rect(x, 24, card_width, 40), PANEL, 7) + self.text(surface, label, (x + 12, 29), self.small_font, MUTED) + self.text(surface, value, (x + 12, 45), self.small_font, TEXT) + x += card_width + 10 + pygame.draw.line(surface, (29, 43, 65), (32, 87), (width - 32, 87), 1) + + def db_to_radius(self, db: float, inner: float, outer: float) -> float: + # DB_MIN at the inner boundary, 0 dB at the outer boundary. + return inner + (clamp(db, DB_MIN, DB_MAX) - DB_MIN) / (DB_MAX - DB_MIN) * (outer - inner) + + def draw_radial(self, surface: pygame.Surface, center: tuple[int, int], radius: int) -> None: + inner = 66 + for db in (-90, -75, -60, -45, -30, -15, 0): + r = self.db_to_radius(db, inner, radius) + pygame.draw.circle(surface, GRID if db not in (-60, 0) else (65, 88, 116), center, int(r), 1) + label = f"{db} dB" + self.text(surface, label, (center[0] + 9, center[1] - int(r) - 8), self.small_font, MUTED) + + # Eight radial guides and channel labels. + for channel in self.channels: + end = polar(center, radius, channel.angle) + pygame.draw.line(surface, (31, 49, 73), center, end, 1) + label_pos = polar(center, radius + 25, channel.angle) + label = f"CH {channel.index}" + label_surface = self.small_font.render(label, True, TEXT) + surface.blit(label_surface, (label_pos[0] - label_surface.get_width() // 2, label_pos[1] - 7)) + + # History is rendered as a tapered waveform strip on each spoke. + for channel in self.channels: + history = channel.history or [] + points = [] + for j, level in enumerate(history): + spoke_radius = self.db_to_radius(level, inner, radius - 15) + angle = channel.angle + (j - len(history) / 2) * 0.010 + points.append(polar(center, spoke_radius, angle)) + if len(points) > 1: + pygame.draw.lines(surface, CYAN_SOFT, False, points, 2) + pygame.draw.circle(surface, CYAN, points[-1], 4) + peak_radius = self.db_to_radius(channel.peak, inner, radius - 15) + pygame.draw.line(surface, AMBER, polar(center, peak_radius - 5, channel.angle), polar(center, peak_radius + 5, channel.angle), 3) + + if self.doa_angle_degrees is not None: + self.draw_doa_direction(surface, center, radius, self.doa_angle_degrees) + if self.manual_steer_enabled: + self.draw_manual_direction( + surface, + center, + radius, + self.manual_steer_angle_degrees, + ) + + pygame.draw.circle(surface, (11, 22, 38), center, 54) + pygame.draw.circle(surface, (48, 86, 108), center, 54, 1) + self.text(surface, "8", (center[0] - 11, center[1] - 18), self.h1_font, CYAN) + self.text(surface, "CHANNELS", (center[0] - 29, center[1] + 16), self.small_font, MUTED) + + def draw_doa_direction( + self, + surface: pygame.Surface, + center: tuple[int, int], + radius: int, + angle_degrees: float, + ) -> None: + screen_angle = -math.radians(angle_degrees) + inner_radius = 59 + outer_radius = max(inner_radius + 10, radius - 10) + overlay = pygame.Surface(surface.get_size(), pygame.SRCALPHA) + wedge = [ + polar(center, inner_radius, screen_angle - math.radians(5)), + polar(center, outer_radius, screen_angle - math.radians(3)), + polar(center, outer_radius, screen_angle + math.radians(3)), + polar(center, inner_radius, screen_angle + math.radians(5)), + ] + pygame.draw.polygon(overlay, (*GREEN, 42), wedge) + surface.blit(overlay, (0, 0)) + + start = polar(center, inner_radius, screen_angle) + tip = polar(center, outer_radius, screen_angle) + pygame.draw.line(surface, GREEN, start, tip, 4) + arrow = [ + tip, + polar(tip, 15, screen_angle + math.radians(150)), + polar(tip, 15, screen_angle - math.radians(150)), + ] + pygame.draw.polygon(surface, GREEN, arrow) + + def draw_manual_direction( + self, + surface: pygame.Surface, + center: tuple[int, int], + radius: int, + angle_degrees: float, + ) -> None: + screen_angle = -math.radians(angle_degrees) + inner_radius = 62 + outer_radius = max(inner_radius + 10, radius - 24) + overlay = pygame.Surface(surface.get_size(), pygame.SRCALPHA) + wedge = [ + polar(center, inner_radius, screen_angle - math.radians(4)), + polar(center, outer_radius, screen_angle - math.radians(2)), + polar(center, outer_radius, screen_angle + math.radians(2)), + polar(center, inner_radius, screen_angle + math.radians(4)), + ] + pygame.draw.polygon(overlay, (*MANUAL_BLUE, 34), wedge) + surface.blit(overlay, (0, 0)) + + start = polar(center, inner_radius, screen_angle) + tip = polar(center, outer_radius, screen_angle) + pygame.draw.line(surface, MANUAL_BLUE, start, tip, 3) + arrow = [ + tip, + polar(tip, 13, screen_angle + math.radians(150)), + polar(tip, 13, screen_angle - math.radians(150)), + ] + pygame.draw.polygon(surface, MANUAL_BLUE, arrow) + + def draw_channel_panel(self, surface: pygame.Surface, rect: pygame.Rect) -> None: + self.rounded(surface, rect, PANEL, 10) + self.text(surface, "SOURCE DIRECTION", (rect.x + 20, rect.y + 18), self.body_font, TEXT) + angle_text = "---.- deg" if self.doa_angle_degrees is None else f"{self.doa_angle_degrees:05.1f} deg" + angle_color = GREEN if self.doa_angle_degrees is not None else MUTED + self.text(surface, angle_text, (rect.x + 20, rect.y + 43), self.doa_font, angle_color) + self.text(surface, self.doa_status, (rect.x + 20, rect.y + 86), self.small_font, angle_color) + self.text(surface, self.doa_detail, (rect.x + 142, rect.y + 86), self.small_font, MUTED) + self.text(surface, "0 deg RIGHT / CCW +", (rect.x + 20, rect.y + 105), self.small_font, MUTED) + self.draw_algorithm_switch(surface, rect) + pygame.draw.line( + surface, + (37, 54, 77), + (rect.x + 20, rect.y + 183), + (rect.right - 20, rect.y + 183), + 1, + ) + self.text(surface, "CHANNEL LEVELS", (rect.x + 20, rect.y + 197), self.body_font, TEXT) + self.text(surface, "RMS / PEAK HOLD", (rect.x + 143, rect.y + 199), self.small_font, MUTED) + y = rect.y + 228 + for channel in self.channels: + level_color = GREEN if channel.level > -18 else AMBER if channel.level > -30 else CYAN + self.text(surface, f"CH {channel.index:02d}", (rect.x + 20, y), self.small_font, TEXT) + self.text(surface, f"{channel.level:5.1f} dB", (rect.right - 90, y), self.small_font, level_color) + bar = pygame.Rect(rect.x + 20, y + 19, rect.width - 40, 6) + self.rounded(surface, bar, (31, 46, 68), 4) + ratio = clamp((channel.level - DB_MIN) / (DB_MAX - DB_MIN), 0.0, 1.0) + fill = pygame.Rect(bar.x, bar.y, int(bar.width * ratio), bar.height) + self.rounded(surface, fill, level_color, 4) + peak_ratio = clamp((channel.peak - DB_MIN) / (DB_MAX - DB_MIN), 0.0, 1.0) + peak_x = bar.x + int(bar.width * peak_ratio) + pygame.draw.rect(surface, AMBER, pygame.Rect(peak_x, bar.y - 2, 2, bar.height + 4)) + y += 49 + + def draw_mvdr_output(self, surface: pygame.Surface, rect: pygame.Rect) -> None: + card = pygame.Rect(rect.x + 15, rect.y + 110, rect.width - 30, 105) + self.rounded(surface, card, (9, 18, 32), 8) + self.text(surface, "MVDR OUTPUT", (card.x + 12, card.y + 9), self.body_font, TEXT) + + active = self.mvdr_status in ("LIVE", "HOLD", "MANUAL") + status_color = ( + MANUAL_BLUE + if self.mvdr_status == "MANUAL" + else GREEN + if self.mvdr_status == "LIVE" + else AMBER + if self.mvdr_status in ("HOLD", "ERROR") + else MUTED + ) + status_label = self.small_font.render(self.mvdr_status, True, status_color) + status_x = card.right - status_label.get_width() - 12 + surface.blit(status_label, (status_x, card.y + 11)) + + if self.mvdr_level_dbfs is None: + self.text(surface, "---.- dBFS", (card.x + 12, card.y + 31), self.title_font, MUTED) + self.text(surface, self.mvdr_detail, (card.x + 137, card.y + 38), self.small_font, MUTED) + level = DB_MIN + else: + self.text( + surface, + f"{self.mvdr_level_dbfs:5.1f} dBFS", + (card.x + 12, card.y + 31), + self.title_font, + GREEN, + ) + input_text = f"IN {self.mvdr_input_level_dbfs:5.1f} dBFS" + angle_text = f"STEER {self.mvdr_angle_degrees:05.1f} deg" + self.text(surface, input_text, (card.x + 145, card.y + 32), self.small_font, MUTED) + self.text(surface, angle_text, (card.x + 145, card.y + 48), self.small_font, MUTED) + level = self.mvdr_level_dbfs + + bar = pygame.Rect(card.x + 12, card.bottom - 13, card.width - 24, 6) + self.rounded(surface, bar, (31, 46, 68), 3) + ratio = clamp((level - DB_MIN) / (DB_MAX - DB_MIN), 0.0, 1.0) + fill = pygame.Rect(bar.x, bar.y, int(bar.width * ratio), bar.height) + fill_color = MANUAL_BLUE if self.mvdr_status == "MANUAL" else GREEN + self.rounded(surface, fill, fill_color if active else MUTED, 3) + + def draw_manual_steering_controls( + self, + surface: pygame.Surface, + rect: pygame.Rect, + ) -> None: + content_x = rect.x + 20 + content_width = rect.width - 40 + label_color = MANUAL_BLUE if self.manual_steer_enabled else MUTED + self.text( + surface, + "MANUAL STEERING", + (content_x, rect.y + 44), + self.small_font, + label_color, + ) + self.text( + surface, + "0 - 359.9 deg", + (rect.right - 91, rect.y + 44), + self.small_font, + MUTED, + ) + + input_width = 104 + self.manual_steer_input_rect = pygame.Rect( + content_x, + rect.y + 62, + input_width, + 34, + ) + self.manual_steer_toggle_rect = pygame.Rect( + self.manual_steer_input_rect.right + 8, + rect.y + 62, + content_width - input_width - 8, + 34, + ) + self.rounded(surface, self.manual_steer_input_rect, (9, 17, 31), 6) + input_border = ( + AMBER + if self.manual_steer_input_invalid + else MANUAL_BLUE + if self.manual_steer_input_active + else (47, 68, 94) + ) + self.rounded( + surface, + self.manual_steer_input_rect, + input_border, + 6, + width=1, + ) + input_text = self.small_font.render(self.manual_steer_text, True, TEXT) + input_y = self.manual_steer_input_rect.centery - input_text.get_height() // 2 + surface.blit(input_text, (self.manual_steer_input_rect.x + 9, input_y)) + self.text( + surface, + "deg", + (self.manual_steer_input_rect.right - 28, self.manual_steer_input_rect.y + 9), + self.small_font, + MUTED, + ) + if self.manual_steer_input_active and int(time.monotonic() * 2) % 2 == 0: + caret_x = min( + self.manual_steer_input_rect.right - 32, + self.manual_steer_input_rect.x + 9 + input_text.get_width() + 1, + ) + pygame.draw.line( + surface, + TEXT, + (caret_x, self.manual_steer_input_rect.y + 8), + (caret_x, self.manual_steer_input_rect.bottom - 8), + 1, + ) + + toggle_color = (34, 85, 118) if self.manual_steer_enabled else (26, 39, 58) + self.rounded(surface, self.manual_steer_toggle_rect, toggle_color, 6) + toggle_label = self.small_font.render( + "MANUAL ON" if self.manual_steer_enabled else "AUTO DOA", + True, + MANUAL_BLUE if self.manual_steer_enabled else MUTED, + ) + surface.blit( + toggle_label, + ( + self.manual_steer_toggle_rect.centerx - toggle_label.get_width() // 2, + self.manual_steer_toggle_rect.centery - toggle_label.get_height() // 2, + ), + ) + + def draw_algorithm_switch(self, surface: pygame.Surface, rect: pygame.Rect) -> None: + self.text(surface, "DOA ALGORITHM", (rect.x + 20, rect.y + 127), self.small_font, MUTED) + switch_rect = pygame.Rect(rect.x + 20, rect.y + 141, rect.width - 40, 27) + self.rounded(surface, switch_rect, (9, 17, 31), 6) + selected = self.live_source.doa_algorithm + self.algorithm_buttons = {} + button_width = switch_rect.width // len(DOA_ALGORITHMS) + for index, algorithm in enumerate(DOA_ALGORITHMS): + button = pygame.Rect( + switch_rect.x + index * button_width, + switch_rect.y, + button_width if index < len(DOA_ALGORITHMS) - 1 else switch_rect.right - (switch_rect.x + index * button_width), + switch_rect.height, + ) + self.algorithm_buttons[algorithm] = button + active = algorithm == selected + if active: + self.rounded(surface, button, (27, 87, 83), 6) + label = self.small_font.render(algorithm, True, GREEN if active else MUTED) + surface.blit(label, (button.centerx - label.get_width() // 2, button.centery - label.get_height() // 2)) + + def draw_monitor_controls(self, surface: pygame.Surface, rect: pygame.Rect) -> None: + content_x = rect.x + 20 + content_width = rect.width - 40 + self.text(surface, "MONITOR", (content_x, rect.y + 241), self.body_font, TEXT) + self.monitor_toggle_rect = pygame.Rect( + content_x, + rect.y + 267, + content_width, + 36, + ) + status, error, underflows, discontinuities = self.audio_monitor.state + enabled = self.audio_monitor.enabled + can_monitor = ( + not self.demo + and self.live_source.available + and bool(self.audio_monitor.devices) + ) + toggle_color = (27, 87, 83) if enabled else (26, 39, 58) + self.rounded(surface, self.monitor_toggle_rect, toggle_color, 6) + toggle_text = f"MONITOR ON / {status}" if enabled else "MONITOR OFF" + toggle_label = self.body_font.render( + toggle_text, + True, + GREEN if enabled else MUTED, + ) + surface.blit( + toggle_label, + ( + self.monitor_toggle_rect.centerx - toggle_label.get_width() // 2, + self.monitor_toggle_rect.centery - toggle_label.get_height() // 2, + ), + ) + if not can_monitor: + pygame.draw.rect( + surface, + MUTED, + self.monitor_toggle_rect, + width=1, + border_radius=6, + ) + + self.text( + surface, + "OUTPUT DEVICE", + (content_x, rect.y + 325), + self.body_font, + TEXT, + ) + self.monitor_device_rect = pygame.Rect( + content_x, + rect.y + 351, + content_width, + 34, + ) + self.rounded(surface, self.monitor_device_rect, (9, 17, 31), 6) + selected = self.audio_monitor.selected_device + if error: + device_text = f"ERROR: {error}" + elif selected is None: + device_text = f"No {self.sample_rate / 1000:.1f} kHz output" + else: + device_text = selected.label + old_clip = surface.get_clip() + surface.set_clip(self.monitor_device_rect.inflate(-12, 0)) + self.text( + surface, + device_text, + (self.monitor_device_rect.x + 8, self.monitor_device_rect.y + 6), + self.small_font, + TEXT if selected is not None and not error else AMBER, + ) + surface.set_clip(old_clip) + pygame.draw.polygon( + surface, + MUTED, + [ + (self.monitor_device_rect.right - 15, self.monitor_device_rect.centery - 2), + (self.monitor_device_rect.right - 7, self.monitor_device_rect.centery - 2), + (self.monitor_device_rect.right - 11, self.monitor_device_rect.centery + 3), + ], + ) + + gain_db = self.audio_monitor.gain_db + diagnostics = "" + if underflows or discontinuities: + diagnostics = f" / U{underflows} D{discontinuities}" + self.text( + surface, + f"GAIN {gain_db:+.1f} dB{diagnostics}", + (content_x, rect.y + 415), + self.body_font, + AMBER if status == "CLIPPING" else TEXT, + ) + self.monitor_gain_rect = pygame.Rect( + content_x, + rect.y + 450, + content_width, + 9, + ) + self.rounded(surface, self.monitor_gain_rect, (31, 46, 68), 4) + ratio = (gain_db - MvdrAudioMonitor.MIN_GAIN_DB) / ( + MvdrAudioMonitor.MAX_GAIN_DB - MvdrAudioMonitor.MIN_GAIN_DB + ) + fill_width = int(self.monitor_gain_rect.width * ratio) + self.rounded( + surface, + pygame.Rect( + self.monitor_gain_rect.x, + self.monitor_gain_rect.y, + fill_width, + self.monitor_gain_rect.height, + ), + GREEN, + 4, + ) + knob_x = self.monitor_gain_rect.x + fill_width + pygame.draw.circle(surface, TEXT, (knob_x, self.monitor_gain_rect.centery), 6) + self.text(surface, "-10 dB", (content_x, rect.y + 467), self.small_font, MUTED) + self.text( + surface, + "+40 dB", + (rect.right - 57, rect.y + 467), + self.small_font, + MUTED, + ) + pygame.draw.line( + surface, + (37, 54, 77), + (content_x, rect.y + 502), + (rect.right - 20, rect.y + 502), + 1, + ) + self.text( + surface, + "HEADPHONES RECOMMENDED", + (content_x, rect.y + 520), + self.small_font, + AMBER, + ) + self.text( + surface, + f"{self.sample_rate / 1_000:.1f} kHz / MONO / FLOAT32", + (content_x, rect.y + 541), + self.small_font, + MUTED, + ) + self.text( + surface, + "STATEFUL WOLA OUTPUT", + (content_x, rect.y + 562), + self.small_font, + MUTED, + ) + + self.monitor_device_buttons = {} + if self.monitor_device_menu_open and self.audio_monitor.devices: + menu_y = self.monitor_device_rect.bottom + 2 + for index, device in enumerate(self.audio_monitor.devices): + option = pygame.Rect( + self.monitor_device_rect.x, + menu_y + index * 25, + self.monitor_device_rect.width, + 25, + ) + self.monitor_device_buttons[index] = option + active = index == self.audio_monitor.selected_index + self.rounded( + surface, + option, + (27, 87, 83) if active else (13, 24, 42), + 4, + ) + old_clip = surface.get_clip() + surface.set_clip(option.inflate(-10, 0)) + self.text( + surface, + device.label, + (option.x + 7, option.y + 5), + self.small_font, + GREEN if active else TEXT, + ) + surface.set_clip(old_clip) + + def draw_mvdr_panel(self, surface: pygame.Surface, rect: pygame.Rect) -> None: + self.rounded(surface, rect, PANEL, 10) + self.text( + surface, + "MVDR BEAMFORMING", + (rect.x + 20, rect.y + 18), + self.body_font, + TEXT, + ) + self.draw_manual_steering_controls(surface, rect) + self.draw_mvdr_output(surface, rect) + self.draw_monitor_controls(surface, rect) + + def commit_manual_steering_angle(self) -> bool: + try: + value = float(self.manual_steer_text.strip()) + except ValueError: + self.manual_steer_input_invalid = True + return False + if not math.isfinite(value): + self.manual_steer_input_invalid = True + return False + + self.manual_steer_angle_degrees = round(value % 360.0, 1) % 360.0 + self.manual_steer_text = f"{self.manual_steer_angle_degrees:.1f}" + self.manual_steer_input_invalid = False + self.manual_steer_replace_on_type = False + if self.manual_steer_enabled: + self.live_source.set_mvdr_steering_angle( + self.manual_steer_angle_degrees + ) + return True + + def set_manual_steering_enabled(self, enabled: bool) -> None: + if enabled and not self.commit_manual_steering_angle(): + return + self.manual_steer_enabled = enabled + self.live_source.set_mvdr_steering_angle( + self.manual_steer_angle_degrees if enabled else None + ) + + def handle_manual_steering_mouse_down( + self, + position: tuple[int, int], + ) -> bool: + if self.manual_steer_input_rect.collidepoint(position): + self.manual_steer_input_active = True + self.manual_steer_input_invalid = False + self.manual_steer_replace_on_type = True + self.monitor_device_menu_open = False + return True + + if self.manual_steer_input_active: + self.commit_manual_steering_angle() + self.manual_steer_input_active = False + + if self.manual_steer_toggle_rect.collidepoint(position): + self.set_manual_steering_enabled(not self.manual_steer_enabled) + return True + return False + + def handle_manual_steering_key_down(self, event: pygame.event.Event) -> bool: + if not self.manual_steer_input_active: + return False + if event.key in (pygame.K_RETURN, pygame.K_KP_ENTER): + if self.commit_manual_steering_angle(): + self.manual_steer_input_active = False + elif event.key == pygame.K_ESCAPE: + self.manual_steer_text = f"{self.manual_steer_angle_degrees:.1f}" + self.manual_steer_input_invalid = False + self.manual_steer_input_active = False + self.manual_steer_replace_on_type = False + elif event.key == pygame.K_BACKSPACE: + if self.manual_steer_replace_on_type: + self.manual_steer_text = "" + self.manual_steer_replace_on_type = False + else: + self.manual_steer_text = self.manual_steer_text[:-1] + self.manual_steer_input_invalid = False + elif event.unicode in "0123456789.-" and len(self.manual_steer_text) < 8: + if self.manual_steer_replace_on_type: + self.manual_steer_text = event.unicode + self.manual_steer_replace_on_type = False + else: + self.manual_steer_text += event.unicode + self.manual_steer_input_invalid = False + return True + + def set_monitor_gain_from_x(self, x: int) -> None: + if self.monitor_gain_rect.width <= 0: + return + ratio = clamp( + (x - self.monitor_gain_rect.x) / self.monitor_gain_rect.width, + 0.0, + 1.0, + ) + gain_db = MvdrAudioMonitor.MIN_GAIN_DB + ratio * ( + MvdrAudioMonitor.MAX_GAIN_DB - MvdrAudioMonitor.MIN_GAIN_DB + ) + self.audio_monitor.set_gain_db(round(gain_db, 1)) + + def handle_monitor_mouse_down(self, position: tuple[int, int]) -> bool: + if self.monitor_device_menu_open: + for index, button in self.monitor_device_buttons.items(): + if button.collidepoint(position): + self.audio_monitor.select_device(index) + self.monitor_device_menu_open = False + return True + if not self.monitor_device_rect.collidepoint(position): + self.monitor_device_menu_open = False + + if self.monitor_toggle_rect.collidepoint(position): + if not self.demo and self.live_source.available: + self.audio_monitor.toggle() + return True + if self.monitor_device_rect.collidepoint(position): + self.monitor_device_menu_open = not self.monitor_device_menu_open + return True + if self.monitor_gain_rect.inflate(0, 12).collidepoint(position): + self.monitor_gain_dragging = True + self.set_monitor_gain_from_x(position[0]) + return True + return False + + def draw_footer(self, surface: pygame.Surface, width: int, height: int) -> None: + footer_y = height - 50 + pygame.draw.line(surface, (29, 43, 65), (32, footer_y - 15), (width - 32, footer_y - 15), 1) + self.text(surface, "SPACE pause/resume", (32, footer_y), self.small_font, MUTED) + self.text(surface, "R reset peaks", (196, footer_y), self.small_font, MUTED) + self.text(surface, "D demo/live", (300, footer_y), self.small_font, MUTED) + self.text(surface, "M switch algorithm", (405, footer_y), self.small_font, MUTED) + self.text(surface, "L monitor", (552, footer_y), self.small_font, MUTED) + self.text(surface, "ESC quit", (width - 91, footer_y), self.small_font, MUTED) + + def draw(self) -> None: + width, height = self.screen.get_size() + surface = self.screen + surface.fill(BG) + self.draw_header(surface, width) + + panel_width = 280 + panel_gap = 16 + mvdr_panel = pygame.Rect( + width - 32 - panel_width, + 112, + panel_width, + height - 180, + ) + doa_panel = pygame.Rect( + mvdr_panel.x - panel_gap - panel_width, + 112, + panel_width, + height - 180, + ) + chart_rect = pygame.Rect( + 32, + 112, + max(600, doa_panel.x - panel_gap - 32), + height - 180, + ) + self.rounded(surface, chart_rect, (11, 20, 36), 10) + center = (chart_rect.centerx, chart_rect.centery + 6) + radius = min(chart_rect.width, chart_rect.height) // 2 - 76 + self.draw_radial(surface, center, radius) + self.draw_channel_panel(surface, doa_panel) + self.draw_mvdr_panel(surface, mvdr_panel) + self.draw_footer(surface, width, height) + pygame.display.flip() + + def run(self) -> None: + running = True + while running: + dt = self.clock.tick(FPS) / 1000.0 + for event in pygame.event.get(): + if event.type == pygame.QUIT: + running = False + elif event.type == pygame.KEYDOWN: + if self.handle_manual_steering_key_down(event): + continue + if event.key == pygame.K_ESCAPE: + running = False + elif event.key == pygame.K_SPACE: + self.paused = not self.paused + elif event.key == pygame.K_d: + self.demo = not self.demo + if self.demo: + self.audio_monitor.set_enabled(False) + elif event.key == pygame.K_m: + self.toggle_doa_algorithm() + elif event.key == pygame.K_l: + if not self.demo and self.live_source.available: + self.audio_monitor.toggle() + elif event.key == pygame.K_r: + for channel in self.channels: + channel.peak = channel.level + elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: + if self.handle_manual_steering_mouse_down(event.pos): + continue + if self.handle_monitor_mouse_down(event.pos): + continue + for algorithm, button in self.algorithm_buttons.items(): + if button.collidepoint(event.pos): + self.set_doa_algorithm(algorithm) + break + elif event.type == pygame.MOUSEMOTION and self.monitor_gain_dragging: + self.set_monitor_gain_from_x(event.pos[0]) + elif event.type == pygame.MOUSEBUTTONUP and event.button == 1: + self.monitor_gain_dragging = False + self.update(dt) + self.draw() + self.audio_monitor.close() + self.live_source.close() + pygame.quit() + + +def list_audio_devices() -> None: + import sounddevice as sd + + for index, device in enumerate(sd.query_devices()): + inputs = int(device["max_input_channels"]) + if inputs: + hostapi = LiveAudioSource._hostapi_name(sd, device) or "unknown API" + rate = float(device.get("default_samplerate", 0.0)) + print( + f"{index:>3} {inputs:>2} in {rate:>8.1f} Hz " + f"{hostapi:<20} {device['name']}" + ) + + +def main() -> None: + parser = argparse.ArgumentParser(description="8-channel USB DOA monitor") + parser.add_argument( + "--device", + help="PortAudio device index or case-insensitive name fragment", + ) + parser.add_argument( + "--sample-rate", + type=int, + default=None, + help="override the detected device sample rate", + ) + parser.add_argument("--list-devices", action="store_true") + args = parser.parse_args() + if args.list_devices: + list_audio_devices() + return + try: + Monitor(device=args.device, sample_rate=args.sample_rate).run() + except pygame.error as exc: + print(f"Unable to start pygame display: {exc}", file=sys.stderr) + raise + + +if __name__ == "__main__": + main() diff --git a/PC_SoftWare/src/mvdr_beamformer.py b/PC_SoftWare/src/mvdr_beamformer.py new file mode 100644 index 0000000..b2c11a6 --- /dev/null +++ b/PC_SoftWare/src/mvdr_beamformer.py @@ -0,0 +1,289 @@ +"""Frequency-domain MVDR beamforming steered by a DOA azimuth.""" + +from __future__ import annotations + +import time +from dataclasses import dataclass + +import numpy as np + +try: + from .stft_analysis import StftAnalysis, analyze_multichannel_stft +except ImportError: # Support direct execution from the src directory. + from stft_analysis import StftAnalysis, analyze_multichannel_stft + + +@dataclass(frozen=True) +class MvdrConfig: + sample_rate: int = 48_000 + nfft: int = 512 + hop: int = 256 + sound_speed_m_s: float = 343.0 + min_frequency_hz: float = 500.0 + max_frequency_hz: float = 4_000.0 + diagonal_loading: float = 1e-2 + covariance_smoothing: float = 0.70 + + +@dataclass(frozen=True) +class MvdrResult: + audio: np.ndarray + level_dbfs: float + input_level_dbfs: float + angle_degrees: float + timestamp: float + source_sample_end: int | None = None + stream_audio: np.ndarray | None = None + stream_sample_start: int | None = None + stream_sample_end: int | None = None + + +class MvdrBeamformer: + """Apply broadband MVDR with delay-and-sum outside the adaptive band.""" + + def __init__( + self, + microphone_positions: np.ndarray, + config: MvdrConfig | None = None, + ) -> None: + self.config = config or MvdrConfig() + positions = np.asarray(microphone_positions, dtype=np.float64) + if positions.ndim != 2 or positions.shape[0] != 2: + raise ValueError("microphone_positions must have shape (2, channels)") + if self.config.nfft <= 0 or self.config.nfft % 2: + raise ValueError("nfft must be a positive even integer") + if self.config.sample_rate <= 0: + raise ValueError("sample_rate must be positive") + if not 0.0 <= self.config.min_frequency_hz < self.config.max_frequency_hz: + raise ValueError("MVDR frequency range is invalid") + if self.config.max_frequency_hz >= self.config.sample_rate / 2.0: + raise ValueError("max_frequency_hz must be below the Nyquist frequency") + if not 0 < self.config.hop <= self.config.nfft: + raise ValueError("hop must be in the range 1..nfft") + if self.config.diagonal_loading <= 0: + raise ValueError("diagonal_loading must be positive") + if not 0.0 <= self.config.covariance_smoothing < 1.0: + raise ValueError("covariance_smoothing must be in the range [0, 1)") + + self.microphone_positions = positions + self.channels = positions.shape[1] + self._window = np.hanning(self.config.nfft).astype(np.float64) + self._frequencies = np.fft.rfftfreq( + self.config.nfft, 1.0 / self.config.sample_rate + ) + self._adaptive_bins = np.flatnonzero( + (self._frequencies >= self.config.min_frequency_hz) + & (self._frequencies <= self.config.max_frequency_hz) + ) + self._covariance_state: np.ndarray | None = None + self._stream_tail: np.ndarray | None = None + self._stream_tail_normalization: np.ndarray | None = None + self._stream_last_frame_start: int | None = None + + def reset_stream(self) -> None: + """Reset adaptive smoothing and the stateful WOLA synthesis tail.""" + + self._covariance_state = None + self._stream_tail = None + self._stream_tail_normalization = None + self._stream_last_frame_start = None + + def steering_vector(self, angle_degrees: float) -> np.ndarray: + """Return ``frequency x channels`` far-field steering vectors.""" + + angle = np.deg2rad(angle_degrees) + direction = np.array([np.cos(angle), np.sin(angle)]) + relative_times = ( + direction @ self.microphone_positions / self.config.sound_speed_m_s + ) + return np.exp( + 2j + * np.pi + * self._frequencies[:, None] + * relative_times[None, :] + ) + + def process(self, audio: np.ndarray, angle_degrees: float) -> MvdrResult: + """Beamform a ``samples x channels`` calibrated audio window.""" + + analysis = analyze_multichannel_stft( + audio, + channels=self.channels, + nfft=self.config.nfft, + hop=self.config.hop, + window=self._window, + ) + return self.process_stft(analysis, angle_degrees) + + def process_stft( + self, + analysis: StftAnalysis, + angle_degrees: float, + *, + source_sample_end: int | None = None, + ) -> MvdrResult: + """Beamform a shared STFT already computed by the DOA front end.""" + + spectra = np.asarray(analysis.spectra) + expected_bins = self.config.nfft // 2 + 1 + if spectra.ndim != 3 or spectra.shape[1:] != ( + expected_bins, + self.channels, + ): + raise ValueError( + "STFT spectra must have shape " + f"(snapshots, {expected_bins}, {self.channels})" + ) + starts = np.arange( + 0, + analysis.sample_count - self.config.nfft + 1, + self.config.hop, + ) + if spectra.shape[0] != starts.size: + raise ValueError("STFT snapshot count does not match sample_count") + steering = self.steering_vector(angle_degrees) + + # Delay-and-sum is the stable fallback. MVDR replaces weights only in + # the calibrated, spatially unaliased DOA band. + weights = steering / self.channels + bins = self._adaptive_bins + selected = spectra[:, bins, :] + instantaneous_covariance = np.einsum( + "sfm,sfn->fmn", selected, np.conj(selected), optimize=True + ) / selected.shape[0] + if ( + self._covariance_state is None + or self._covariance_state.shape != instantaneous_covariance.shape + ): + covariance = instantaneous_covariance + else: + smoothing = self.config.covariance_smoothing + covariance = ( + smoothing * self._covariance_state + + (1.0 - smoothing) * instantaneous_covariance + ) + self._covariance_state = covariance.copy() + mean_power = np.trace(covariance, axis1=1, axis2=2).real / self.channels + loading = self.config.diagonal_loading * np.maximum(mean_power, 1e-12) + covariance += loading[:, None, None] * np.eye(self.channels)[None, :, :] + + desired = steering[bins] + inverse_steering = np.linalg.solve(covariance, desired[..., None])[..., 0] + denominator = np.einsum( + "fm,fm->f", np.conj(desired), inverse_steering, optimize=True + ) + denominator = np.where(np.abs(denominator) < 1e-12, 1e-12, denominator) + weights[bins] = inverse_steering / denominator[:, None] + + output_spectrum = np.einsum( + "fm,sfm->sf", np.conj(weights), spectra, optimize=True + ) + output_frames = np.fft.irfft( + output_spectrum, n=self.config.nfft, axis=1 + ) + stream_audio, stream_start, stream_end = self._stream_synthesize( + output_frames, + starts, + analysis.sample_count, + source_sample_end, + ) + output = np.zeros(analysis.sample_count, dtype=np.float64) + normalization = np.zeros(analysis.sample_count, dtype=np.float64) + window_squared = np.square(self._window) + for frame, start in zip(output_frames, starts): + stop = start + self.config.nfft + output[start:stop] += frame * self._window + normalization[start:stop] += window_squared + + valid = normalization > 1e-6 + output[valid] /= normalization[valid] + output[~valid] = 0.0 + + # Ignore the poorly conditioned overlap-add edges when reporting level. + level_mask = normalization > 0.25 * float(np.max(normalization)) + output_rms = float( + np.sqrt(np.mean(np.square(output[level_mask]), dtype=np.float64) + 1e-12) + ) + output_audio = output.astype(np.float32) + output_audio.setflags(write=False) + return MvdrResult( + audio=output_audio, + level_dbfs=float(20.0 * np.log10(output_rms)), + input_level_dbfs=analysis.input_level_dbfs, + angle_degrees=float(angle_degrees % 360.0), + timestamp=time.monotonic(), + source_sample_end=source_sample_end, + stream_audio=stream_audio, + stream_sample_start=stream_start, + stream_sample_end=stream_end, + ) + + def _stream_synthesize( + self, + output_frames: np.ndarray, + relative_starts: np.ndarray, + sample_count: int, + source_sample_end: int | None, + ) -> tuple[np.ndarray | None, int | None, int | None]: + """Synthesize only finalized 50%-overlapped hops for monitoring.""" + + if source_sample_end is None: + return None, None, None + if self.config.nfft != 2 * self.config.hop: + raise ValueError("Streaming WOLA requires 50% overlap") + + window_start = source_sample_end - sample_count + frame_starts = window_start + relative_starts + if self._stream_last_frame_start is None: + first_new = 0 + else: + new_indices = np.flatnonzero(frame_starts > self._stream_last_frame_start) + if new_indices.size == 0: + empty = np.empty(0, dtype=np.float32) + empty.setflags(write=False) + return empty, None, None + first_new = int(new_indices[0]) + + hop = self.config.hop + window = self._window + window_squared = np.square(window) + chunks: list[np.ndarray] = [] + output_start: int | None = None + + for frame, frame_start in zip( + output_frames[first_new:], frame_starts[first_new:] + ): + frame_start = int(frame_start) + if ( + self._stream_last_frame_start is not None + and frame_start != self._stream_last_frame_start + hop + ): + # A skipped source interval cannot be reconstructed. Drop the + # old tail and warm up again instead of splicing unrelated data. + self._stream_tail = None + self._stream_tail_normalization = None + + synthesized = frame * window + if self._stream_tail is not None: + normalization = ( + self._stream_tail_normalization + window_squared[:hop] + ) + stable = self._stream_tail + synthesized[:hop] + valid = normalization > 1e-6 + stable[valid] /= normalization[valid] + stable[~valid] = 0.0 + if output_start is None: + output_start = frame_start + chunks.append(stable.astype(np.float32)) + + self._stream_tail = synthesized[hop:].copy() + self._stream_tail_normalization = window_squared[hop:].copy() + self._stream_last_frame_start = frame_start + + if not chunks or output_start is None: + empty = np.empty(0, dtype=np.float32) + empty.setflags(write=False) + return empty, None, None + audio = np.concatenate(chunks) + audio.setflags(write=False) + return audio, output_start, output_start + audio.size diff --git a/PC_SoftWare/src/stft_analysis.py b/PC_SoftWare/src/stft_analysis.py new file mode 100644 index 0000000..d7dc451 --- /dev/null +++ b/PC_SoftWare/src/stft_analysis.py @@ -0,0 +1,58 @@ +"""Shared multichannel STFT front end for DOA and beamforming.""" + +from __future__ import annotations + +from dataclasses import dataclass + +import numpy as np + + +@dataclass(frozen=True) +class StftAnalysis: + """One window of channel-aligned spectra and its input levels.""" + + spectra: np.ndarray + sample_count: int + level_dbfs: float + input_level_dbfs: float + + +def analyze_multichannel_stft( + audio: np.ndarray, + *, + channels: int, + nfft: int, + hop: int, + window: np.ndarray, +) -> StftAnalysis: + """Remove per-channel DC and compute one reusable windowed STFT.""" + + samples = np.asarray(audio, dtype=np.float32) + if samples.ndim != 2 or samples.shape[1] != channels: + raise ValueError(f"audio must have shape (samples, {channels})") + if samples.shape[0] < nfft: + raise ValueError(f"at least {nfft} samples are required") + if window.shape != (nfft,): + raise ValueError(f"window must have shape ({nfft},)") + + input_rms = float( + np.sqrt(np.mean(np.square(samples), dtype=np.float64) + 1e-12) + ) + centered = samples - np.mean(samples, axis=0, keepdims=True) + analysis_rms = float( + np.sqrt(np.mean(np.square(centered), dtype=np.float64) + 1e-12) + ) + starts = range(0, samples.shape[0] - nfft + 1, hop) + frames = np.stack( + [centered[start : start + nfft] for start in starts], + axis=0, + ) + frames *= np.asarray(window, dtype=np.float32)[None, :, None] + spectra = np.fft.rfft(frames, n=nfft, axis=1) + spectra.setflags(write=False) + return StftAnalysis( + spectra=spectra, + sample_count=samples.shape[0], + level_dbfs=float(20.0 * np.log10(analysis_rms)), + input_level_dbfs=float(20.0 * np.log10(input_rms)), + ) diff --git a/PC_SoftWare/tests/test_audio_capture.py b/PC_SoftWare/tests/test_audio_capture.py new file mode 100644 index 0000000..2eb98d5 --- /dev/null +++ b/PC_SoftWare/tests/test_audio_capture.py @@ -0,0 +1,145 @@ +from __future__ import annotations + +import sys +import threading +import time +import types + +import numpy as np + +from src.main import LiveAudioSource + + +class FakeInputStream: + def __init__(self, **kwargs) -> None: + self.kwargs = kwargs + self.channels = kwargs["channels"] + self.samplerate = kwargs["samplerate"] + self.aborted = False + self.closed = False + self._wake = threading.Event() + + def start(self) -> None: + pass + + def read(self, frames: int): + self._wake.wait(0.005) + if self.aborted: + raise RuntimeError("aborted") + return np.full((frames, self.channels), 0.01, dtype=np.float32), False + + def abort(self) -> None: + self.aborted = True + self._wake.set() + + def close(self) -> None: + self.closed = True + + +def test_live_capture_uses_blocking_reads_without_callback(monkeypatch) -> None: + created: list[FakeInputStream] = [] + + def input_stream(**kwargs): + stream = FakeInputStream(**kwargs) + created.append(stream) + return stream + + devices = [ + { + "name": "Fake USB 8ch", + "max_input_channels": 8, + "hostapi": 0, + "default_samplerate": 44_100.0, + }, + { + "name": "Fake USB 8ch", + "max_input_channels": 8, + "hostapi": 1, + "default_samplerate": 24_000.0, + }, + ] + hostapis = [{"name": "MME"}, {"name": "Windows WASAPI"}] + + def query_devices(index=None): + return devices if index is None else devices[index] + + fake_sounddevice = types.SimpleNamespace( + default=types.SimpleNamespace(device=(0, -1)), + query_devices=query_devices, + query_hostapis=lambda index: hostapis[index], + InputStream=input_stream, + ) + monkeypatch.setitem(sys.modules, "sounddevice", fake_sounddevice) + + source = LiveAudioSource(blocksize=128) + try: + deadline = time.monotonic() + 1.0 + while source.frames_captured == 0 and time.monotonic() < deadline: + time.sleep(0.01) + + assert source.frames_captured > 0 + assert created[0].kwargs["device"] == 1 + assert created[0].kwargs["samplerate"] == 24_000 + assert created[0].kwargs["blocksize"] == 0 + assert "callback" not in created[0].kwargs + assert source.doa is not None + assert source.sample_rate == 24_000 + assert source.doa.config.sample_rate == 24_000 + assert source.doa.buffered_samples > 0 + assert max(source.read_levels(0.0)) > -41.0 + assert source.console_status() == ( + "[audio] Input stream opened\n" + " Device: #1 Fake USB 8ch\n" + " Driver interface (Host API): Windows WASAPI\n" + " Input channels: 8 used / 8 available\n" + " Sample rate: 24000 Hz (device default: 24000 Hz)" + ) + finally: + source.close() + + assert created[0].aborted + assert created[0].closed + + +def test_console_status_explains_missing_live_input(monkeypatch) -> None: + fake_sounddevice = types.SimpleNamespace( + default=types.SimpleNamespace(device=(-1, -1)), + query_devices=lambda: [], + ) + monkeypatch.setitem(sys.modules, "sounddevice", fake_sounddevice) + + source = LiveAudioSource() + + assert not source.available + assert source.console_status() == ( + "[audio] Live input unavailable; using simulated preview\n" + " Reason: No audio input device with at least 8 channels was found" + ) + + +def test_explicit_sample_rate_overrides_detected_rate(monkeypatch) -> None: + created: list[FakeInputStream] = [] + device = { + "name": "Fake USB 8ch", + "max_input_channels": 8, + "hostapi": 0, + "default_samplerate": 24_000.0, + } + + fake_sounddevice = types.SimpleNamespace( + default=types.SimpleNamespace(device=(0, -1)), + query_devices=lambda index=None: [device] if index is None else device, + query_hostapis=lambda _index: {"name": "Windows WASAPI"}, + InputStream=lambda **kwargs: created.append(FakeInputStream(**kwargs)) + or created[-1], + ) + monkeypatch.setitem(sys.modules, "sounddevice", fake_sounddevice) + + source = LiveAudioSource(sample_rate=32_000, blocksize=128) + try: + assert created[0].kwargs["samplerate"] == 32_000 + assert source.sample_rate == 32_000 + assert source.doa is not None + assert source.doa.config.sample_rate == 32_000 + finally: + source.close() diff --git a/PC_SoftWare/tests/test_audio_monitor.py b/PC_SoftWare/tests/test_audio_monitor.py new file mode 100644 index 0000000..e13f4ee --- /dev/null +++ b/PC_SoftWare/tests/test_audio_monitor.py @@ -0,0 +1,124 @@ +from __future__ import annotations + +import sys +import time +import types + +import numpy as np + +from src.audio_monitor import MvdrAudioMonitor +from src.mvdr_beamformer import MvdrResult + + +class FakeOutputStream: + def __init__(self, writes: list[np.ndarray], **kwargs) -> None: + self.kwargs = kwargs + self.writes = writes + self.aborted = False + self.closed = False + + def start(self) -> None: + pass + + def write(self, audio: np.ndarray) -> bool: + self.writes.append(audio.copy()) + return False + + def abort(self) -> None: + self.aborted = True + + def close(self) -> None: + self.closed = True + + +def result( + timestamp: float, + sample_end: int, + value: float = 0.01, + stream_samples: int = 100, +) -> MvdrResult: + audio = np.full(100, value, dtype=np.float32) + audio.setflags(write=False) + stream_audio = np.full(stream_samples, value, dtype=np.float32) + stream_audio.setflags(write=False) + return MvdrResult( + audio, + -40.0, + -30.0, + 45.0, + timestamp, + sample_end, + stream_audio, + sample_end - stream_samples, + sample_end, + ) + + +def test_monitor_plays_only_new_mvdr_tail_with_gain(monkeypatch) -> None: + writes: list[np.ndarray] = [] + streams: list[FakeOutputStream] = [] + devices = [ + { + "name": "Fake speakers", + "max_output_channels": 2, + "hostapi": 0, + } + ] + + def output_stream(**kwargs): + stream = FakeOutputStream(writes, **kwargs) + streams.append(stream) + return stream + + fake_sounddevice = types.SimpleNamespace( + default=types.SimpleNamespace(device=(-1, 0)), + query_devices=lambda: devices, + query_hostapis=lambda _index: {"name": "Fake API"}, + check_output_settings=lambda **_kwargs: None, + OutputStream=output_stream, + ) + monkeypatch.setitem(sys.modules, "sounddevice", fake_sounddevice) + + current = [result(1.0, 100)] + monitor = MvdrAudioMonitor(24_000, lambda: current[0]) + monitor.set_gain_db(20.0) + monitor.set_enabled(True) + try: + deadline = time.monotonic() + 1.0 + while len(writes) < 1 and time.monotonic() < deadline: + time.sleep(0.01) + assert writes[0].shape == (100, 1) + np.testing.assert_allclose(writes[0][:, 0], 0.1, atol=1e-6) + + current[0] = result(2.0, 140, value=0.02, stream_samples=40) + deadline = time.monotonic() + 1.0 + while len(writes) < 2 and time.monotonic() < deadline: + time.sleep(0.01) + assert writes[1].shape == (40, 1) + np.testing.assert_allclose(writes[1][:, 0], 0.2, atol=1e-6) + finally: + monitor.close() + + assert streams[0].kwargs["device"] == 0 + assert streams[0].kwargs["samplerate"] == 24_000 + assert streams[0].aborted + assert streams[0].closed + + +def test_monitor_gain_range_and_clipping(monkeypatch) -> None: + fake_sounddevice = types.SimpleNamespace( + default=types.SimpleNamespace(device=(-1, -1)), + query_devices=lambda: [], + ) + monkeypatch.setitem(sys.modules, "sounddevice", fake_sounddevice) + monitor = MvdrAudioMonitor(24_000, lambda: None) + try: + assert monitor.set_gain_db(-50.0) == -10.0 + assert monitor.set_gain_db(80.0) == 40.0 + amplified, clipped = monitor.apply_gain( + np.array([0.02, -0.02], dtype=np.float32), 40.0 + ) + np.testing.assert_array_equal(amplified, np.array([1.0, -1.0])) + assert clipped + finally: + monitor.close() diff --git a/PC_SoftWare/tests/test_doa_estimator.py b/PC_SoftWare/tests/test_doa_estimator.py new file mode 100644 index 0000000..65320c8 --- /dev/null +++ b/PC_SoftWare/tests/test_doa_estimator.py @@ -0,0 +1,250 @@ +from __future__ import annotations + +import time + +import numpy as np +import pytest + +from src.doa_estimator import ( + DOA_ALGORITHMS, + DoaConfig, + DoaEstimator, + load_pyroomacoustics_normmusic, + load_pyroomacoustics_srp, +) + + +def circular_error_degrees(actual: float, expected: float) -> float: + return abs((actual - expected + 180.0) % 360.0 - 180.0) + + +def synthesize_plane_wave( + estimator: DoaEstimator, + angle_degrees: float, +) -> np.ndarray: + config = estimator.config + rng = np.random.default_rng(8) + source = rng.standard_normal(config.window_samples) + frequencies = np.fft.rfftfreq(config.window_samples, 1.0 / config.sample_rate) + source_spectrum = np.fft.rfft(source) + + angle = np.deg2rad(angle_degrees) + direction = np.array([np.cos(angle), np.sin(angle)]) + relative_times = ( + direction @ estimator.microphone_positions / config.sound_speed_m_s + ) + channels = [ + np.fft.irfft( + source_spectrum * np.exp(2j * np.pi * frequencies * relative_time), + n=config.window_samples, + ) + for relative_time in relative_times + ] + return (0.05 * np.stack(channels, axis=1)).astype(np.float32) + + +def test_loads_srp_from_cloned_source() -> None: + srp = load_pyroomacoustics_srp() + assert srp.__name__ == "SRP" + assert srp.__module__.endswith(".srp") + + +def test_loads_normmusic_from_cloned_source() -> None: + normmusic = load_pyroomacoustics_normmusic() + assert normmusic.__name__ == "NormMUSIC" + assert normmusic.__module__.endswith(".normmusic") + + +@pytest.mark.parametrize("algorithm", DOA_ALGORITHMS) +@pytest.mark.parametrize("expected", [0.0, 47.0, 123.0, 275.0, 359.0]) +def test_plane_wave_direction(algorithm: str, expected: float) -> None: + estimator = DoaEstimator(algorithm=algorithm, start_worker=False) + try: + result = estimator.estimate(synthesize_plane_wave(estimator, expected)) + finally: + estimator.close() + + assert result.angle_degrees is not None + assert result.algorithm == algorithm + assert circular_error_degrees(result.angle_degrees, expected) <= 1.0 + assert result.peak_sharpness > 0.8 + + +def test_runtime_algorithm_switch_clears_previous_result() -> None: + estimator = DoaEstimator(start_worker=False) + try: + assert estimator.algorithm == "SRP-PHAT" + assert estimator.toggle_algorithm() == "NormMUSIC" + assert estimator.algorithm == "NormMUSIC" + assert estimator._engines["NormMUSIC"].frequency_normalization is True + assert estimator.set_algorithm("MUSIC") == "NormMUSIC" + assert estimator.set_algorithm("SRP") == "SRP-PHAT" + finally: + estimator.close() + + +def test_manual_mvdr_steering_angle_is_normalized_and_optional() -> None: + estimator = DoaEstimator(start_worker=False) + try: + assert estimator.mvdr_steering_angle_override is None + assert estimator.set_mvdr_steering_angle(370.0) == 10.0 + assert estimator.mvdr_steering_angle_override == 10.0 + assert estimator.set_mvdr_steering_angle(-15.0) == 345.0 + assert estimator.set_mvdr_steering_angle(None) is None + assert estimator.mvdr_steering_angle_override is None + with pytest.raises(ValueError): + estimator.set_mvdr_steering_angle(float("nan")) + finally: + estimator.close() + + +def test_stft_defaults_preserve_48khz_time_and_frequency_resolution() -> None: + config_48k = DoaConfig(sample_rate=48_000) + config_24k = DoaConfig(sample_rate=24_000) + + assert (config_48k.nfft, config_48k.hop, config_48k.window_samples) == ( + 512, + 256, + 8_192, + ) + assert (config_24k.nfft, config_24k.hop, config_24k.window_samples) == ( + 256, + 128, + 4_096, + ) + assert config_48k.sample_rate / config_48k.nfft == ( + config_24k.sample_rate / config_24k.nfft + ) + assert config_48k.window_samples / config_48k.sample_rate == ( + config_24k.window_samples / config_24k.sample_rate + ) + + +@pytest.mark.parametrize("algorithm", DOA_ALGORITHMS) +def test_doa_and_mvdr_use_detected_24khz_rate(algorithm: str) -> None: + config = DoaConfig(sample_rate=24_000) + estimator = DoaEstimator(config=config, algorithm=algorithm, start_worker=False) + try: + audio = synthesize_plane_wave(estimator, 68.0) + doa = estimator.estimate(audio) + assert doa.angle_degrees is not None + assert circular_error_degrees(doa.angle_degrees, 68.0) <= 1.0 + + mvdr = estimator._mvdr.process(audio, doa.angle_degrees) + assert estimator._mvdr.config.sample_rate == 24_000 + assert mvdr.audio.shape == (config.window_samples,) + assert np.isfinite(mvdr.audio).all() + finally: + estimator.close() + + +def test_audio_ring_is_strictly_bounded() -> None: + config = DoaConfig(nfft=512, window_samples=1_024) + estimator = DoaEstimator(config=config, start_worker=False) + try: + oversized = np.arange(3_000 * config.channels, dtype=np.float32).reshape( + 3_000, config.channels + ) + estimator.submit(oversized) + assert estimator.buffered_samples == config.window_samples + np.testing.assert_array_equal(estimator._ring, oversized[-1_024:]) + finally: + estimator.close() + + +def test_worker_publishes_doa_steered_mvdr_audio_with_one_shared_stft() -> None: + config = DoaConfig(update_interval_s=0.01, smoothing=1.0) + estimator = DoaEstimator(config=config) + try: + stft_calls = 0 + analyze_stft = estimator.analyze_stft + + def counted_analyze_stft(audio): + nonlocal stft_calls + stft_calls += 1 + return analyze_stft(audio) + + estimator.analyze_stft = counted_analyze_stft + estimator.submit(synthesize_plane_wave(estimator, 68.0)) + deadline = time.monotonic() + 2.0 + while estimator.latest_mvdr is None and time.monotonic() < deadline: + time.sleep(0.01) + + doa = estimator.latest + mvdr = estimator.latest_mvdr + assert doa is not None + assert doa.angle_degrees is not None + assert circular_error_degrees(doa.angle_degrees, 68.0) <= 1.0 + assert mvdr is not None + assert mvdr.audio.shape == (config.window_samples,) + assert circular_error_degrees(mvdr.angle_degrees, 68.0) <= 1.0 + assert mvdr.source_sample_end == config.window_samples + queued = estimator.pop_monitor_result() + assert queued is mvdr + assert queued.stream_audio is not None + assert queued.stream_audio.size == config.window_samples - 2 * config.hop + assert stft_calls == 1 + finally: + estimator.close() + + +def test_low_signal_keeps_mvdr_streaming_at_last_valid_direction() -> None: + config = DoaConfig(update_interval_s=0.0, smoothing=1.0) + estimator = DoaEstimator(config=config) + try: + estimator.submit(synthesize_plane_wave(estimator, 68.0)) + deadline = time.monotonic() + 2.0 + while estimator.latest_mvdr is None and time.monotonic() < deadline: + time.sleep(0.01) + + first = estimator.latest_mvdr + assert first is not None + first_timestamp = first.timestamp + held_angle = first.angle_degrees + + estimator.submit( + np.zeros((config.window_samples, config.channels), dtype=np.float32) + ) + deadline = time.monotonic() + 2.0 + while ( + estimator.latest_mvdr is None + or estimator.latest_mvdr.timestamp == first_timestamp + ) and time.monotonic() < deadline: + time.sleep(0.01) + + doa = estimator.latest + held = estimator.latest_mvdr + assert doa is not None + assert doa.angle_degrees is None + assert doa.level_dbfs < config.activity_threshold_dbfs + assert held is not None + assert held.timestamp != first_timestamp + assert circular_error_degrees(held.angle_degrees, held_angle) < 1e-6 + assert held.stream_audio is not None + assert held.stream_audio.size > 0 + finally: + estimator.close() + + +def test_manual_steering_runs_mvdr_without_a_valid_doa() -> None: + config = DoaConfig(update_interval_s=0.0, smoothing=1.0) + estimator = DoaEstimator(config=config) + try: + estimator.set_mvdr_steering_angle(123.0) + estimator.submit( + np.zeros((config.window_samples, config.channels), dtype=np.float32) + ) + deadline = time.monotonic() + 2.0 + while estimator.latest_mvdr is None and time.monotonic() < deadline: + time.sleep(0.01) + + doa = estimator.latest + mvdr = estimator.latest_mvdr + assert doa is not None + assert doa.angle_degrees is None + assert mvdr is not None + assert circular_error_degrees(mvdr.angle_degrees, 123.0) < 1e-6 + assert mvdr.stream_audio is not None + assert mvdr.stream_audio.size > 0 + finally: + estimator.close() diff --git a/PC_SoftWare/tests/test_gain_calibration.py b/PC_SoftWare/tests/test_gain_calibration.py new file mode 100644 index 0000000..760872d --- /dev/null +++ b/PC_SoftWare/tests/test_gain_calibration.py @@ -0,0 +1,64 @@ +from __future__ import annotations + +import json +from pathlib import Path + +import numpy as np +import pytest + +from src.gain_calibration import GainCalibration + + +REPOSITORY_ROOT = Path(__file__).parents[1] + + +def write_config(tmp_path, common_gain: float, trim: list[float]): + path = tmp_path / "gain.json" + path.write_text( + json.dumps( + { + "common_base_gain_db": common_gain, + "channel_trim_gain_db": trim, + } + ), + encoding="utf-8", + ) + return path + + +def test_applies_common_and_channel_gain_in_db(tmp_path) -> None: + path = write_config(tmp_path, 6.0, [0.0, -6.0]) + calibration = GainCalibration.load(path, channels=2) + + calibrated = calibration.apply(np.ones((3, 2), dtype=np.float32)) + + expected = np.array([10.0 ** (6.0 / 20.0), 1.0], dtype=np.float32) + np.testing.assert_allclose(calibrated, np.tile(expected, (3, 1)), rtol=1e-6) + + +def test_runtime_channel_trims_match_calibration_result() -> None: + runtime_config = json.loads( + (REPOSITORY_ROOT / "src" / "gain_cali.json").read_text(encoding="utf-8") + ) + calibration_result = json.loads( + (REPOSITORY_ROOT / "calibration" / "data" / "calibration_result.json").read_text( + encoding="utf-8" + ) + ) + + assert runtime_config["channel_trim_gain_db"] == calibration_result["correction_db"] + + +@pytest.mark.parametrize( + "common_gain, trim", + [ + (0.0, [0.0]), + (float("nan"), [0.0, 0.0]), + (0.0, [0.0, float("inf")]), + ], +) +def test_rejects_invalid_gain_configuration(tmp_path, common_gain, trim) -> None: + path = write_config(tmp_path, common_gain, trim) + + with pytest.raises(ValueError): + GainCalibration.load(path, channels=2) diff --git a/PC_SoftWare/tests/test_mvdr_beamformer.py b/PC_SoftWare/tests/test_mvdr_beamformer.py new file mode 100644 index 0000000..a3cf56d --- /dev/null +++ b/PC_SoftWare/tests/test_mvdr_beamformer.py @@ -0,0 +1,161 @@ +from __future__ import annotations + +import numpy as np + +from src.doa_estimator import MIC_AZIMUTHS_DEG +from src.mvdr_beamformer import MvdrBeamformer, MvdrConfig +from src.stft_analysis import analyze_multichannel_stft + + +SAMPLE_RATE = 48_000 +SAMPLES = 8_192 + + +def microphone_positions() -> np.ndarray: + angles = np.deg2rad(np.asarray(MIC_AZIMUTHS_DEG)) + return 0.056 * np.vstack((np.cos(angles), np.sin(angles))) + + +def band_limited_noise(rng: np.random.Generator) -> np.ndarray: + source = rng.standard_normal(SAMPLES) + frequencies = np.fft.rfftfreq(SAMPLES, 1.0 / SAMPLE_RATE) + spectrum = np.fft.rfft(source) + spectrum[(frequencies < 700.0) | (frequencies > 3_000.0)] = 0.0 + filtered = np.fft.irfft(spectrum, n=SAMPLES) + return filtered / np.std(filtered) + + +def plane_wave(source: np.ndarray, angle_degrees: float) -> np.ndarray: + positions = microphone_positions() + frequencies = np.fft.rfftfreq(source.size, 1.0 / SAMPLE_RATE) + angle = np.deg2rad(angle_degrees) + direction = np.array([np.cos(angle), np.sin(angle)]) + relative_times = direction @ positions / 343.0 + spectrum = np.fft.rfft(source) + return np.stack( + [ + np.fft.irfft( + spectrum * np.exp(2j * np.pi * frequencies * delay), + n=source.size, + ) + for delay in relative_times + ], + axis=1, + ) + + +def test_mvdr_preserves_signal_from_steered_direction() -> None: + rng = np.random.default_rng(21) + source = band_limited_noise(rng) + audio = 0.05 * plane_wave(source, 73.0) + beamformer = MvdrBeamformer(microphone_positions(), MvdrConfig()) + + result = beamformer.process(audio, 73.0) + + valid = slice(512, -512) + gain = np.linalg.lstsq( + source[valid, None], result.audio[valid], rcond=None + )[0][0] + assert np.isfinite(result.audio).all() + assert result.audio.shape == (SAMPLES,) + assert not result.audio.flags.writeable + assert result.angle_degrees == 73.0 + assert 0.045 < gain < 0.055 + + +def test_mvdr_suppresses_off_axis_interference() -> None: + rng = np.random.default_rng(17) + target = band_limited_noise(rng) + interference = band_limited_noise(rng) + mixture = 0.05 * ( + plane_wave(target, 40.0) + plane_wave(interference, 145.0) + ) + beamformer = MvdrBeamformer(microphone_positions(), MvdrConfig()) + + output = beamformer.process(mixture, 40.0).audio + + valid = slice(512, -512) + references = np.column_stack((target[valid], interference[valid])) + input_coefficients = np.linalg.lstsq( + references, mixture[valid, 0], rcond=None + )[0] + output_coefficients = np.linalg.lstsq( + references, output[valid], rcond=None + )[0] + input_sir = 20.0 * np.log10( + abs(input_coefficients[0] / input_coefficients[1]) + ) + output_sir = 20.0 * np.log10( + abs(output_coefficients[0] / output_coefficients[1]) + ) + + assert output_sir >= input_sir + 10.0 + + +def test_streaming_wola_excludes_unstable_edges_and_stays_continuous() -> None: + sample_rate = 24_000 + nfft = 256 + hop = 128 + window_samples = 4_096 + step = 3_072 + total = window_samples + 4 * step + rng = np.random.default_rng(123) + frequencies = np.fft.rfftfreq(total, 1.0 / sample_rate) + passband = (frequencies >= 600.0) & (frequencies <= 3_800.0) + + def noise() -> np.ndarray: + spectrum = np.fft.rfft(rng.standard_normal(total)) + spectrum[~passband] = 0.0 + signal = np.fft.irfft(spectrum, total) + return signal / np.std(signal) + + positions = microphone_positions() + + def wave(source: np.ndarray, angle_degrees: float) -> np.ndarray: + angle = np.deg2rad(angle_degrees) + direction = np.array([np.cos(angle), np.sin(angle)]) + delays = direction @ positions / 343.0 + spectrum = np.fft.rfft(source) + return np.stack( + [ + np.fft.irfft( + spectrum * np.exp(2j * np.pi * frequencies * delay), + total, + ) + for delay in delays + ], + axis=1, + ) + + audio = 0.04 * (wave(noise(), 40.0) + wave(noise(), 145.0)) + config = MvdrConfig(sample_rate=sample_rate, nfft=nfft, hop=hop) + beamformer = MvdrBeamformer(positions, config) + window = np.hanning(nfft).astype(np.float32) + stream_blocks = [] + previous_end = None + + for start in range(0, total - window_samples + 1, step): + analysis = analyze_multichannel_stft( + audio[start : start + window_samples], + channels=8, + nfft=nfft, + hop=hop, + window=window, + ) + result = beamformer.process_stft( + analysis, + 40.0, + source_sample_end=start + window_samples, + ) + assert result.stream_audio is not None + assert result.stream_audio.size > 0 + if previous_end is not None: + assert result.stream_sample_start == previous_end + assert result.stream_audio.size == step + previous_end = result.stream_sample_end + stream_blocks.append(result.stream_audio) + + joined = np.concatenate(stream_blocks) + assert stream_blocks[0].size == window_samples - 2 * hop + assert np.max(np.abs(joined)) < 0.5 + assert np.isfinite(joined).all() diff --git a/PC_SoftWare/uv.lock b/PC_SoftWare/uv.lock new file mode 100644 index 0000000..2e334ce --- /dev/null +++ b/PC_SoftWare/uv.lock @@ -0,0 +1,2562 @@ +version = 1 +revision = 3 +requires-python = ">=3.12" +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", + "python_full_version < '3.13' and sys_platform == 'emscripten'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] + +[[package]] +name = "absl-py" +version = "2.5.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/d0/4f/d79676ab82f2e42fc3611618139f13a9c4c31d0cff4b486982047679a802/absl_py-2.5.0.tar.gz", hash = "sha256:0c996f25c0490700fadabe6351630f6111534fa0ae252cc6d2014ea3b141135f" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/58/0a/a10b45aab35b175aded078a462dc8d0c698f5b13946e7cb0869097b78bb6/absl_py-2.5.0-py3-none-any.whl", hash = "sha256:0f17b89f2a4eaaedc4f28c622998aa690564b3012a396a4ffad0821007fe03ba" }, +] + +[[package]] +name = "annotated-doc" +version = "0.0.4" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320" }, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53" }, +] + +[[package]] +name = "anyio" +version = "4.14.2" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "idna" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/61/cc/a381afa6efea9f496eff839d4a6a1aed3bfafc7b3ab4b0d1b243a12573dd/anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494" }, +] + +[[package]] +name = "audioop-lts" +version = "0.2.2" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/38/53/946db57842a50b2da2e0c1e34bd37f36f5aadba1a929a3971c5d7841dbca/audioop_lts-0.2.2.tar.gz", hash = "sha256:64d0c62d88e67b98a1a5e71987b7aa7b5bcffc7dcee65b635823dbdd0a8dbbd0" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/de/d4/94d277ca941de5a507b07f0b592f199c22454eeaec8f008a286b3fbbacd6/audioop_lts-0.2.2-cp313-abi3-macosx_10_13_universal2.whl", hash = "sha256:fd3d4602dc64914d462924a08c1a9816435a2155d74f325853c1f1ac3b2d9800" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f8/5a/656d1c2da4b555920ce4177167bfeb8623d98765594af59702c8873f60ec/audioop_lts-0.2.2-cp313-abi3-macosx_10_13_x86_64.whl", hash = "sha256:550c114a8df0aafe9a05442a1162dfc8fec37e9af1d625ae6060fed6e756f303" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1b/83/ea581e364ce7b0d41456fb79d6ee0ad482beda61faf0cab20cbd4c63a541/audioop_lts-0.2.2-cp313-abi3-macosx_11_0_arm64.whl", hash = "sha256:9a13dc409f2564de15dd68be65b462ba0dde01b19663720c68c1140c782d1d75" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b8/3b/e8964210b5e216e5041593b7d33e97ee65967f17c282e8510d19c666dab4/audioop_lts-0.2.2-cp313-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:51c916108c56aa6e426ce611946f901badac950ee2ddaf302b7ed35d9958970d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c7/2e/0a1c52faf10d51def20531a59ce4c706cb7952323b11709e10de324d6493/audioop_lts-0.2.2-cp313-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:47eba38322370347b1c47024defbd36374a211e8dd5b0dcbce7b34fdb6f8847b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/75/e8/cd95eef479656cb75ab05dfece8c1f8c395d17a7c651d88f8e6e291a63ab/audioop_lts-0.2.2-cp313-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba7c3a7e5f23e215cb271516197030c32aef2e754252c4c70a50aaff7031a2c8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5c/1e/a0c42570b74f83efa5cca34905b3eef03f7ab09fe5637015df538a7f3345/audioop_lts-0.2.2-cp313-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:def246fe9e180626731b26e89816e79aae2276f825420a07b4a647abaa84becc" }, + { url = "https://mirrors.aliyun.com/pypi/packages/50/d5/8a0ae607ca07dbb34027bac8db805498ee7bfecc05fd2c148cc1ed7646e7/audioop_lts-0.2.2-cp313-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e160bf9df356d841bb6c180eeeea1834085464626dc1b68fa4e1d59070affdc3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/12/17/0d28c46179e7910bfb0bb62760ccb33edb5de973052cb2230b662c14ca2e/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4b4cd51a57b698b2d06cb9993b7ac8dfe89a3b2878e96bc7948e9f19ff51dba6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/84/ba/bd5d3806641564f2024e97ca98ea8f8811d4e01d9b9f9831474bc9e14f9e/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4a53aa7c16a60a6857e6b0b165261436396ef7293f8b5c9c828a3a203147ed4a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f9/5e/435ce8d5642f1f7679540d1e73c1c42d933331c0976eb397d1717d7f01a3/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:3fc38008969796f0f689f1453722a0f463da1b8a6fbee11987830bfbb664f623" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ae/3b/b909e76b606cbfd53875693ec8c156e93e15a1366a012f0b7e4fb52d3c34/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_s390x.whl", hash = "sha256:15ab25dd3e620790f40e9ead897f91e79c0d3ce65fe193c8ed6c26cffdd24be7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/30/e7/8f1603b4572d79b775f2140d7952f200f5e6c62904585d08a01f0a70393a/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:03f061a1915538fd96272bac9551841859dbb2e3bf73ebe4a23ef043766f5449" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b5/96/c37846df657ccdda62ba1ae2b6534fa90e2e1b1742ca8dcf8ebd38c53801/audioop_lts-0.2.2-cp313-abi3-win32.whl", hash = "sha256:3bcddaaf6cc5935a300a8387c99f7a7fbbe212a11568ec6cf6e4bc458c048636" }, + { url = "https://mirrors.aliyun.com/pypi/packages/34/a5/9d78fdb5b844a83da8a71226c7bdae7cc638861085fff7a1d707cb4823fa/audioop_lts-0.2.2-cp313-abi3-win_amd64.whl", hash = "sha256:a2c2a947fae7d1062ef08c4e369e0ba2086049a5e598fda41122535557012e9e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/34/25/20d8fde083123e90c61b51afb547bb0ea7e77bab50d98c0ab243d02a0e43/audioop_lts-0.2.2-cp313-abi3-win_arm64.whl", hash = "sha256:5f93a5db13927a37d2d09637ccca4b2b6b48c19cd9eda7b17a2e9f77edee6a6f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/58/a7/0a764f77b5c4ac58dc13c01a580f5d32ae8c74c92020b961556a43e26d02/audioop_lts-0.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:73f80bf4cd5d2ca7814da30a120de1f9408ee0619cc75da87d0641273d202a09" }, + { url = "https://mirrors.aliyun.com/pypi/packages/aa/ed/ebebedde1a18848b085ad0fa54b66ceb95f1f94a3fc04f1cd1b5ccb0ed42/audioop_lts-0.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:106753a83a25ee4d6f473f2be6b0966fc1c9af7e0017192f5531a3e7463dce58" }, + { url = "https://mirrors.aliyun.com/pypi/packages/cb/6e/11ca8c21af79f15dbb1c7f8017952ee8c810c438ce4e2b25638dfef2b02c/audioop_lts-0.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fbdd522624141e40948ab3e8cdae6e04c748d78710e9f0f8d4dae2750831de19" }, + { url = "https://mirrors.aliyun.com/pypi/packages/84/52/0022f93d56d85eec5da6b9da6a958a1ef09e80c39f2cc0a590c6af81dcbb/audioop_lts-0.2.2-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:143fad0311e8209ece30a8dbddab3b65ab419cbe8c0dde6e8828da25999be911" }, + { url = "https://mirrors.aliyun.com/pypi/packages/87/1d/48a889855e67be8718adbc7a01f3c01d5743c325453a5e81cf3717664aad/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dfbbc74ec68a0fd08cfec1f4b5e8cca3d3cd7de5501b01c4b5d209995033cde9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/98/a6/94b7213190e8077547ffae75e13ed05edc488653c85aa5c41472c297d295/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cfcac6aa6f42397471e4943e0feb2244549db5c5d01efcd02725b96af417f3fe" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e9/e9/78450d7cb921ede0cfc33426d3a8023a3bda755883c95c868ee36db8d48d/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:752d76472d9804ac60f0078c79cdae8b956f293177acd2316cd1e15149aee132" }, + { url = "https://mirrors.aliyun.com/pypi/packages/4f/e2/cd5439aad4f3e34ae1ee852025dc6aa8f67a82b97641e390bf7bd9891d3e/audioop_lts-0.2.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:83c381767e2cc10e93e40281a04852facc4cd9334550e0f392f72d1c0a9c5753" }, + { url = "https://mirrors.aliyun.com/pypi/packages/68/4b/9d853e9076c43ebba0d411e8d2aa19061083349ac695a7d082540bad64d0/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c0022283e9556e0f3643b7c3c03f05063ca72b3063291834cca43234f20c60bb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/58/26/4bae7f9d2f116ed5593989d0e521d679b0d583973d203384679323d8fa85/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:a2d4f1513d63c795e82948e1305f31a6d530626e5f9f2605408b300ae6095093" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b2/67/a9f4fb3e250dda9e9046f8866e9fa7d52664f8985e445c6b4ad6dfb55641/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:c9c8e68d8b4a56fda8c025e538e639f8c5953f5073886b596c93ec9b620055e7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/70/f7/3de86562db0121956148bcb0fe5b506615e3bcf6e63c4357a612b910765a/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:96f19de485a2925314f5020e85911fb447ff5fbef56e8c7c6927851b95533a1c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f1/32/fd772bf9078ae1001207d2df1eef3da05bea611a87dd0e8217989b2848fa/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e541c3ef484852ef36545f66209444c48b28661e864ccadb29daddb6a4b8e5f5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/4f/41/affea7181592ab0ab560044632571a38edaf9130b84928177823fbf3176a/audioop_lts-0.2.2-cp313-cp313t-win32.whl", hash = "sha256:d5e73fa573e273e4f2e5ff96f9043858a5e9311e94ffefd88a3186a910c70917" }, + { url = "https://mirrors.aliyun.com/pypi/packages/28/2b/0372842877016641db8fc54d5c88596b542eec2f8f6c20a36fb6612bf9ee/audioop_lts-0.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:9191d68659eda01e448188f60364c7763a7ca6653ed3f87ebb165822153a8547" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ee/ca/baf2b9cc7e96c179bb4a54f30fcd83e6ecb340031bde68f486403f943768/audioop_lts-0.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:c174e322bb5783c099aaf87faeb240c8d210686b04bd61dfd05a8e5a83d88969" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5c/73/413b5a2804091e2c7d5def1d618e4837f1cb82464e230f827226278556b7/audioop_lts-0.2.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:f9ee9b52f5f857fbaf9d605a360884f034c92c1c23021fb90b2e39b8e64bede6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ae/8c/daa3308dc6593944410c2c68306a5e217f5c05b70a12e70228e7dd42dc5c/audioop_lts-0.2.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:49ee1a41738a23e98d98b937a0638357a2477bc99e61b0f768a8f654f45d9b7a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/4e/86/c2e0f627168fcf61781a8f72cab06b228fe1da4b9fa4ab39cfb791b5836b/audioop_lts-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5b00be98ccd0fc123dcfad31d50030d25fcf31488cde9e61692029cd7394733b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c7/bd/35dce665255434f54e5307de39e31912a6f902d4572da7c37582809de14f/audioop_lts-0.2.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6d2e0f9f7a69403e388894d4ca5ada5c47230716a03f2847cfc7bd1ecb589d6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2d/d2/deeb9f51def1437b3afa35aeb729d577c04bcd89394cb56f9239a9f50b6f/audioop_lts-0.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9b0b8a03ef474f56d1a842af1a2e01398b8f7654009823c6d9e0ecff4d5cfbf" }, + { url = "https://mirrors.aliyun.com/pypi/packages/76/3b/09f8b35b227cee28cc8231e296a82759ed80c1a08e349811d69773c48426/audioop_lts-0.2.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2b267b70747d82125f1a021506565bdc5609a2b24bcb4773c16d79d2bb260bbd" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0b/15/05b48a935cf3b130c248bfdbdea71ce6437f5394ee8533e0edd7cfd93d5e/audioop_lts-0.2.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0337d658f9b81f4cd0fdb1f47635070cc084871a3d4646d9de74fdf4e7c3d24a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/83/80/186b7fce6d35b68d3d739f228dc31d60b3412105854edb975aa155a58339/audioop_lts-0.2.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:167d3b62586faef8b6b2275c3218796b12621a60e43f7e9d5845d627b9c9b80e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/49/89/c78cc5ac6cb5828f17514fb12966e299c850bc885e80f8ad94e38d450886/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0d9385e96f9f6da847f4d571ce3cb15b5091140edf3db97276872647ce37efd7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/4c/4b/6401888d0c010e586c2ca50fce4c903d70a6bb55928b16cfbdfd957a13da/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:48159d96962674eccdca9a3df280e864e8ac75e40a577cc97c5c42667ffabfc5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/de/f8/c874ca9bb447dae0e2ef2e231f6c4c2b0c39e31ae684d2420b0f9e97ee68/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:8fefe5868cd082db1186f2837d64cfbfa78b548ea0d0543e9b28935ccce81ce9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3e/c0/0323e66f3daebc13fd46b36b30c3be47e3fc4257eae44f1e77eb828c703f/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:58cf54380c3884fb49fdd37dfb7a772632b6701d28edd3e2904743c5e1773602" }, + { url = "https://mirrors.aliyun.com/pypi/packages/98/6b/acc7734ac02d95ab791c10c3f17ffa3584ccb9ac5c18fd771c638ed6d1f5/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:088327f00488cdeed296edd9215ca159f3a5a5034741465789cad403fcf4bec0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/13/c3/c3dc3f564ce6877ecd2a05f8d751b9b27a8c320c2533a98b0c86349778d0/audioop_lts-0.2.2-cp314-cp314t-win32.whl", hash = "sha256:068aa17a38b4e0e7de771c62c60bbca2455924b67a8814f3b0dee92b5820c0b3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/72/bb/b4608537e9ffcb86449091939d52d24a055216a36a8bf66b936af8c3e7ac/audioop_lts-0.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:a5bf613e96f49712073de86f20dbdd4014ca18efd4d34ed18c75bd808337851b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f6/22/91616fe707a5c5510de2cac9b046a30defe7007ba8a0c04f9c08f27df312/audioop_lts-0.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:b492c3b040153e68b9fdaff5913305aaaba5bb433d8a7f73d5cf6a64ed3cc1dd" }, +] + +[[package]] +name = "audioread" +version = "3.1.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "standard-aifc", marker = "python_full_version >= '3.13'" }, + { name = "standard-sunau", marker = "python_full_version >= '3.13'" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/a1/4a/874ecf9b472f998130c2b5e145dcdb9f6131e84786111489103b66772143/audioread-3.1.0.tar.gz", hash = "sha256:1c4ab2f2972764c896a8ac61ac53e261c8d29f0c6ccd652f84e18f08a4cab190" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/7e/16/fbe8e1e185a45042f7cd3a282def5bb8d95bb69ab9e9ef6a5368aa17e426/audioread-3.1.0-py3-none-any.whl", hash = "sha256:b30d1df6c5d3de5dcef0fb0e256f6ea17bdcf5f979408df0297d8a408e2971b4" }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.15.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/43/65/318323f98dbee45d42dff61d8f047181bc6f2268a9068cfad035a46be5af/beautifulsoup4-4.15.0.tar.gz", hash = "sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/88/c6/92fcd42f1ba33e1184263f25bfabf3d27c383410470f169e4b8163bf9c17/beautifulsoup4-4.15.0-py3-none-any.whl", hash = "sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9" }, +] + +[[package]] +name = "blinker" +version = "1.9.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/21/28/9b3f50ce0e048515135495f198351908d99540d69bfdc8c1d15b73dc55ce/blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc" }, +] + +[[package]] +name = "brotli" +version = "1.2.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/f7/16/c92ca344d646e71a43b8bb353f0a6490d7f6e06210f8554c8f874e454285/brotli-1.2.0.tar.gz", hash = "sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/11/ee/b0a11ab2315c69bb9b45a2aaed022499c9c24a205c3a49c3513b541a7967/brotli-1.2.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e1/2f/29c1459513cd35828e25531ebfcbf3e92a5e49f560b1777a9af7203eb46e/brotli-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3d/6f/feba03130d5fceadfa3a1bb102cb14650798c848b1df2a808356f939bb16/brotli-1.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2b/38/f3abb554eee089bd15471057ba85f47e53a44a462cfce265d9bf7088eb09/brotli-1.2.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca" }, + { url = "https://mirrors.aliyun.com/pypi/packages/03/a7/03aa61fbc3c5cbf99b44d158665f9b0dd3d8059be16c460208d9e385c837/brotli-1.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/21/1b/0374a89ee27d152a5069c356c96b93afd1b94eae83f1e004b57eb6ce2f10/brotli-1.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28" }, + { url = "https://mirrors.aliyun.com/pypi/packages/cf/57/69d4fe84a67aef4f524dcd075c6eee868d7850e85bf01d778a857d8dbe0a/brotli-1.2.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d5/3b/39e13ce78a8e9a621c5df3aeb5fd181fcc8caba8c48a194cd629771f6828/brotli-1.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036" }, + { url = "https://mirrors.aliyun.com/pypi/packages/62/28/4d00cb9bd76a6357a66fcd54b4b6d70288385584063f4b07884c1e7286ac/brotli-1.2.0-cp312-cp312-win32.whl", hash = "sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1c/4e/bc1dcac9498859d5e353c9b153627a3752868a9d5f05ce8dedd81a2354ab/brotli-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44" }, + { url = "https://mirrors.aliyun.com/pypi/packages/6c/d4/4ad5432ac98c73096159d9ce7ffeb82d151c2ac84adcc6168e476bb54674/brotli-1.2.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9e5825ba2c9998375530504578fd4d5d1059d09621a02065d1b6bfc41a8e05ab" }, + { url = "https://mirrors.aliyun.com/pypi/packages/91/9f/9cc5bd03ee68a85dc4bc89114f7067c056a3c14b3d95f171918c088bf88d/brotli-1.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0cf8c3b8ba93d496b2fae778039e2f5ecc7cff99df84df337ca31d8f2252896c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2e/b6/fe84227c56a865d16a6614e2c4722864b380cb14b13f3e6bef441e73a85a/brotli-1.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8565e3cdc1808b1a34714b553b262c5de5fbda202285782173ec137fd13709f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/55/de/de4ae0aaca06c790371cf6e7ee93a024f6b4bb0568727da8c3de112e726c/brotli-1.2.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:26e8d3ecb0ee458a9804f47f21b74845cc823fd1bb19f02272be70774f56e2a6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5f/16/a1b22cbea436642e071adcaf8d4b350a2ad02f5e0ad0da879a1be16188a0/brotli-1.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67a91c5187e1eec76a61625c77a6c8c785650f5b576ca732bd33ef58b0dff49c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/46/63/c968a97cbb3bdbf7f974ef5a6ab467a2879b82afbc5ffb65b8acbb744f95/brotli-1.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4ecdb3b6dc36e6d6e14d3a1bdc6c1057c8cbf80db04031d566eb6080ce283a48" }, + { url = "https://mirrors.aliyun.com/pypi/packages/06/9d/102c67ea5c9fc171f423e8399e585dabea29b5bc79b05572891e70013cdd/brotli-1.2.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3e1b35d56856f3ed326b140d3c6d9db91740f22e14b06e840fe4bb1923439a18" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9e/4a/9526d14fa6b87bc827ba1755a8440e214ff90de03095cacd78a64abe2b7d/brotli-1.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5b/e8/3fe1ffed70cbef83c5236166acaed7bb9c766509b157854c80e2f766b38c/brotli-1.2.0-cp313-cp313-win32.whl", hash = "sha256:1b1d6a4efedd53671c793be6dd760fcf2107da3a52331ad9ea429edf0902f27a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ff/91/e739587be970a113b37b821eae8097aac5a48e5f0eca438c22e4c7dd8648/brotli-1.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:b63daa43d82f0cdabf98dee215b375b4058cce72871fd07934f179885aad16e8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/17/e1/298c2ddf786bb7347a1cd71d63a347a79e5712a7c0cba9e3c3458ebd976f/brotli-1.2.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:6c12dad5cd04530323e723787ff762bac749a7b256a5bece32b2243dd5c27b21" }, + { url = "https://mirrors.aliyun.com/pypi/packages/84/0c/aac98e286ba66868b2b3b50338ffbd85a35c7122e9531a73a37a29763d38/brotli-1.2.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3219bd9e69868e57183316ee19c84e03e8f8b5a1d1f2667e1aa8c2f91cb061ac" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ec/f1/0ca1f3f99ae300372635ab3fe2f7a79fa335fee3d874fa7f9e68575e0e62/brotli-1.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:963a08f3bebd8b75ac57661045402da15991468a621f014be54e50f53a58d19e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d6/a6/2ebfc8f766d46df8d3e65b880a2e220732395e6d7dc312c1e1244b0f074a/brotli-1.2.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9322b9f8656782414b37e6af884146869d46ab85158201d82bab9abbcb971dc7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f3/2f/0976d5b097ff8a22163b10617f76b2557f15f0f39d6a0fe1f02b1a53e92b/brotli-1.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cf9cba6f5b78a2071ec6fb1e7bd39acf35071d90a81231d67e92d637776a6a63" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9c/97/d76df7176a2ce7616ff94c1fb72d307c9a30d2189fe877f3dd99af00ea5a/brotli-1.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7547369c4392b47d30a3467fe8c3330b4f2e0f7730e45e3103d7d636678a808b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d3/93/14cf0b1216f43df5609f5b272050b0abd219e0b54ea80b47cef9867b45e7/brotli-1.2.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:fc1530af5c3c275b8524f2e24841cbe2599d74462455e9bae5109e9ff42e9361" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b3/73/3183c9e41ca755713bdf2cc1d0810df742c09484e2e1ddd693bee53877c1/brotli-1.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d2d085ded05278d1c7f65560aae97b3160aeb2ea2c0b3e26204856beccb60888" }, + { url = "https://mirrors.aliyun.com/pypi/packages/64/6a/0c78d8f3a582859236482fd9fa86a65a60328a00983006bcf6d83b7b2253/brotli-1.2.0-cp314-cp314-win32.whl", hash = "sha256:832c115a020e463c2f67664560449a7bea26b0c1fdd690352addad6d0a08714d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f5/10/56978295c14794b2c12007b07f3e41ba26acda9257457d7085b0bb3bb90c/brotli-1.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:e7c0af964e0b4e3412a0ebf341ea26ec767fa0b4cf81abb5e897c9338b5ad6a3" }, +] + +[[package]] +name = "certifi" +version = "2026.7.22" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775" }, +] + +[[package]] +name = "cffi" +version = "2.1.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/57/5f/ff100cae70ebe9d8df1c01a00e510e45d9adb5c1fdda84791b199141de97/cffi-2.1.0.tar.gz", hash = "sha256:efc1cdd798b1aaf39b4610bba7aad28c9bea9b910f25c784ccf9ec1fa719d1f9" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/1e/85/990925db5df586ec90beb97529c853497e7f85ba0234830447faf41c3057/cffi-2.1.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:df2b82571a1b30f58a87bf4e5a9e78d2b1eff6c6ce8fd3aa3757221f93f0863f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/4b/92/e7bb136ad6b5352603732cf907ef862ca103f20f2031c1735a46300c20c9/cffi-2.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78474632761faa0fb96f30b1c928c84ebcf68713cbb80d15bab09dfe61640fde" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c3/c0/d1ec30ffb370f748f2fb54425972bfef9871e0132e82fb589c46b6676049/cffi-2.1.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5972433ad71a9e46516584ef60a0fda12d9dc459938d1539c3ddecf9bdc1368d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1b/dc/5620cf930688be01f2d673804291de757a934c90b946dbdc3d84130c2ea4/cffi-2.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b6422532152adf4e59b110cb2808cee7a033800952f5c036b4af047ee43199e7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/4b/a4/77b53abbf7a1e0beb9637edbef2a94d15f9c822f591e85d439ffd91519a6/cffi-2.1.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:46b1c8db8f6122420f32d02fffb924c2fe9bc772d228c7c711748fff56aabb2b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/58/0c/f528df19cc94b675087324d4760d9e6d5bfae97d6217aa4fac43de4f5fcc/cffi-2.1.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9fafc5aa2e2a39aaf7f8cc0c1f044a9b07fca12e558dca53a3cc5c654ad67a7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/62/f2/c9522a81c32132799a1972c39f5c5f8b4c8b9f00488a23feaa6c06f07741/cffi-2.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1e9f50d192a3e525b15a75ab5114e442d83d657b7ec29182a991bc9a88fd3a66" }, + { url = "https://mirrors.aliyun.com/pypi/packages/6e/28/bd53988b9833e8f8ad539d26f4c07a6b3f6bcb1e9e02e7ca038250b3428d/cffi-2.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98fff996e983a36d3aa2eca83af40c5821202e7e6f32d13ae94e3d2286f10cfe" }, + { url = "https://mirrors.aliyun.com/pypi/packages/79/99/0d0fd37f055224085f42bbb2c022d002e17dde4a97972822327b07d84101/cffi-2.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:379de10ce1ba048b1448599d1b37b24caee16309d1ac98d3982fc997f768700b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b0/80/c138990aa2a70b1a269f6e06348729836d733d6f970867943f61d367f8cc/cffi-2.1.0-cp312-cp312-win32.whl", hash = "sha256:9b8f0f26ca4e7513c534d351eca551947d053fac438f2a04ac96d882909b0d3a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a8/eb/f636456ff21a83fc13c032b58cc5dde061691546ac79efa284b2989b7982/cffi-2.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:c97f080ea627e2863524c5af3836e2270b5f5dfff1f104392b959f8df0c5d384" }, + { url = "https://mirrors.aliyun.com/pypi/packages/dd/2c/400ea43e721727dca8a65c4521390e9196757caba4a45643acb2b63271b8/cffi-2.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:6d194185eabd279f1c05ebe3504265ddfc5ad2b58d0714f7db9f01da592e9eb6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/96/88/a996879e2eeccb815f6e3a5967b12a308257412acec882039d386bd2aa7b/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:10537b1df4967ca26d21e5072d7d54188354483b91dc75058968d3f0cf13fbda" }, + { url = "https://mirrors.aliyun.com/pypi/packages/58/85/7ae00d5c8dd6266f4e944c3db630f3c5c9a98b61d469c714d848b1d8138a/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:a95b05f9baf29b91171b3a8bd2020b028835243e7b0ff6bb23e2a3c228518b1b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8c/e9/45c3a76ad8d43ad9261f4c95436da61128d3ca545d72b9612c0ab5be0b1c/cffi-2.1.0-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:15faec4adfff450819f3aee0e2e02c812de6edb88203aa58807955db2003472a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/84/4c/82f132cb4418ee6d953d982b19191e87e2a6372c8a4ce36e50b69d6ade4a/cffi-2.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:716ff8ec22f20b4d988b12884086bcef0fc99737043e503f7a3935a6be99b1ea" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a0/1c/4ed5a0e5bdca6cbc275556de3328dd1b76fd0c11cc13c88fe66d1d8715f2/cffi-2.1.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:63960549e4f8dc41e31accb97b975abaecfc44c03e396c093a6436763c2ea7db" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3a/a6/e879bb68cc23a2bc9ba8f4b7d8019f0c2694bad2ab6c4a3701d429439f58/cffi-2.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff067a8d8d880e7809e4ac88eb009bb848870115317b306666502ccad30b147f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/88/f6/01890cfd63c08f8eb96a8319b0443690197d240a8bd6346048cf7bde9190/cffi-2.1.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3b926723c13eba9f81d2ef3820d63aeceec3b2d4639906047bf675cb8a7a500d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a6/cf/2b684132056f438567b61e19d690dd31cd0921ace051e0a458be6074369e/cffi-2.1.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:47ff3a8bfd8cb9da1af7524b965127095055654c177fcfc7578debcb015eecd0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/6f/08/f2e7d62c460faae0926f2d6e423694aa409ced3bc1fe2927a0a6e5f05416/cffi-2.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:799416bae98336e400981ff6e532d67d5c709cfb30afb79865a1315f94b0e224" }, + { url = "https://mirrors.aliyun.com/pypi/packages/38/37/04f54b8e63a02f3d908332c9effbf8c366167c6f733ed8a3d4f79b7e2a1e/cffi-2.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:961be50688f7fba2fa65f63712d3b9b341a22311f5253460ce933f52f0de1c8c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a9/d6/c72eecca433cd3e681c65ed313ab4835d9d4a379704d0f628a6a05f51c2e/cffi-2.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bf5c6cf48238b0eb4c086978c492ad1cbc22373fc5b2d7353b3a598ce6db887a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c6/4b/e706f67279140f92939da3475ad610df18bfd52d50f14953a8e5fede71d5/cffi-2.1.0-cp313-cp313-win32.whl", hash = "sha256:db3eb7d46527159a878ec3460e9d40615bc25ba337d477db681aea6e4f05c5d2" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5a/47/59eb7975cb0e4ef0afa764ea945b29a5bb4537a9f771cb7d6c8a5dd74c95/cffi-2.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:8e74a6135550c4748af665b1b1118b6aab33b1fc6a16f9aff630af107c3b4512" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5a/af/34fee85c48f8d94efc8597bc09470c9dd274c145f1c12e0fbc6ab6d38d74/cffi-2.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:2282cd5e38aa8accd03e99d1256af8411c84cdbee6a89d841b563fdbd1f3e50f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d8/f0/81478e482afa03f6d18dc8f2afb5edc45b3080853b634b5ed91961be0998/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d2117334c3af3bdcb9a88522b844a2bdb5efdc4f71c6c822df55486ae1c3347a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7d/95/8de304305cd9204974b0ca051b86d307cafca13aa575a0ef1b44d92c0d8c/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:702c436735fbe99d59ada02a1f65cfc0d31c0ee8b7290912f8fbc5cd1e4b16c3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/20/71/7c8372d30e42415602ed9f268f7cfd66f1b855fed881ecd168bcb45dbc0b/cffi-2.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1ff3456eab0d889592d1936d6125bbfbc7ae4d3354a700f8bd80450a66445d4d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d6/5c/584e626835f0375c928176c04137c96927165cb8733cdb3150ec04e5ee5e/cffi-2.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c4165821e131d6d4ca444347c2b694e2311bcfa3fe5a861cc72968f28867beac" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2e/d2/065fcae1c73979fac8e054462478d0ff8a29c40cdc2ed7ea5676a061df53/cffi-2.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:276f20fffd7b396e12516ba8edf9509210ac248cbbc5acbc39cd512f9f59ebe6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ed/a5/e8bbb1ce5b3ac2f53ad6a10bde44318a5a8d99d4f4a000d44a6e39aeb3e4/cffi-2.1.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7d5980a3433d4b71a5e120f9dd551403d7824e31e2e67124fe2769c404c06913" }, + { url = "https://mirrors.aliyun.com/pypi/packages/28/ed/c127d3ac36e899c965e3361357c3befacd6578c03f40125183e41c3b219e/cffi-2.1.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6ca4919c6e4f89aa99c42510b42cf54596892c00b3f9077f6bdd1505e24b9c8d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/cc/d7/97d3136f81db489ec8d1d67748c110d6c994268fd7528014aa9f2b085e4e/cffi-2.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d53d10f7da99ae46f7373b9150393e9c5eab9b224909982b43832668de4779f5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d3/27/93195977168ee63aed233a1a0993a2178798654d1f4bddcdd321d6fd3b21/cffi-2.1.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c351efb95e832a853a29361675f33a7ce53de1a109cd73fd47af0712213aa4ce" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b3/c1/6dbd291ee2ae5a50a034aa057207081f545923bbf15dad4511e985aafff5/cffi-2.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:dbf7c7a88e2bac086f06d14577332760bdeecc42bdec8ac4077f6260557d9326" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0f/6f/ade5ce9863a57992a6ea3d0d10d7e29b8749fc127204b3d493d667b2815f/cffi-2.1.0-cp314-cp314-win32.whl", hash = "sha256:1854b724d00f6654c742097d5387569021be12d3a0f770eae1df8f8acfcc6acd" }, + { url = "https://mirrors.aliyun.com/pypi/packages/41/de/92b9eeed4ae4a21d6fd9b2a2c8505cbed573299902ea73981cc13f7ff62c/cffi-2.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:1b96bfe2c4bd825681b7d311ad6d9b7280a091f43e8f63da5729638083cd3bfb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2e/1a/cc6ae6c2913a03aab8898eee57963cf1035b8df5872ed8b9115fcc7e2be8/cffi-2.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:7d28dff1db6764108bc30788d85d61c876beff416d9a49cb9dd7c5a9f34f5804" }, + { url = "https://mirrors.aliyun.com/pypi/packages/14/f0/134c00ce0779ec86dea2aa1aac69339c2741a8045072676763512363a2ea/cffi-2.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7ea6b3e2c4250ff1de21c630fe72d0f63eb95c2c32ffbf64a358cf4a8836d714" }, + { url = "https://mirrors.aliyun.com/pypi/packages/50/d8/3b86aba791cb610d24e8a3e1b2cd529e71fa15096b04e4d4e360049d4a4c/cffi-2.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6af371f3767faeffc6ac1ef57cdfd25844403e9d3f476c5537caee499de96376" }, + { url = "https://mirrors.aliyun.com/pypi/packages/14/d0/117dcd9209255ad8571fbc8c92ef32593a1d294dcec91ddc4e4db50606f2/cffi-2.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb4e8997a49aa2c08a3e43c9045d224448b8941d88e7ac163c7d383e560cbf98" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b6/3d/f20f8b886b254e3ad10e15cd4186d3aed49f3e6a35ab37aab9f8f25f7c03/cffi-2.1.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bf01d8c84cbea96b944c73b22182e6c7c432b3475632b8111dbfdc95ddad6e13" }, + { url = "https://mirrors.aliyun.com/pypi/packages/28/3b/fad54de07260b93ddeef4b96d0131d57ea900675df1d410ae1deee52d7a6/cffi-2.1.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:33eb1ad83ebe8f313e0df035c406227d55a79456704a863fad9842136af5ad7d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/cc/82/3d5c705acb7abbba9bbd7d79b8e62e0f25b6120eb7ae6ac49f1b721722fe/cffi-2.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ac0f1a2d0cfa7eea3f2aaf006ab6e70e8feeb16b75d65b7e5939982ca2f11056" }, + { url = "https://mirrors.aliyun.com/pypi/packages/6c/d0/47e338384ab6b1004241002fa616301020cea4fc95f283506565d252f276/cffi-2.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c16914df9fb7f500e440e6875fa23ff5e0b31db01fa9c06af98d59a91f0dc2e4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/70/25/65bd5b58ea4bfdfc15cde02cb5365f89ef8ab8b2adfb8fe5c4bd4233382f/cffi-2.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5ecbd0499275d57506d397eebe1981cee87b47fcd9ef5c22cab7ed7644a39a94" }, + { url = "https://mirrors.aliyun.com/pypi/packages/dc/78/aa01ac599a8a4322533d45a1f9bc93b338276d2d59dabbe7c6d92a775c81/cffi-2.1.0-cp314-cp314t-win32.whl", hash = "sha256:7d034dcffa09e9a46c93fa3a3be402096cb5354ac6e41ab8e5cc9cd8b642ad76" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b9/26/d00496b22de4d4228f32dde94ad996f350c8aad676d63bcca0743c8dea4d/cffi-2.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0582a58f3051372229ca8e7f5f589f9e5632678208d8636fea3676711fdf7fe5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d5/dd/0c7dbf815a579ff005008a2d815a55d6bb047c349eef536d9dc53d3f0a8d/cffi-2.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:510aeeeac94811b138077451da1fb18b308a5feab47dd2b603af55804155e1c8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/55/c7/8c8c50cb11c6750051daf12164098a9a6f027ac4356967fd4d800a07f242/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:2e9dabb9abcb7ad15938c7196ad5c1718a4e6d33cc79b4c0209bdb64c4a54a5c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/99/e2/67680bf19a6b60d2bb7ff83baefa2a4c3d2d7dc0f3277034b802e1fc504c/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:37f525a7e7e50c017fdebe58b787be310ad59357ae43a053943a6e1a6c526001" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ed/da/4bbe583a3b3a5c8c60892124fe17f3fa3656523faf0d3484eae90f091853/cffi-2.1.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:95f2954c2c9473d892eca6e0409f3568b37ab62a8eedb122461f73cc273476e3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e5/4b/1f4c36ab273980d7aa75bb126ea4f8971f24a96108acad3a0a084028c57b/cffi-2.1.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:cdf2448aab5f661c9315308ec8b93f4e8a1a67a3c733f8631067a2b67d5913dc" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ef/c3/ad299dc38f3583f8d916b299f028af418a9ec98bc695fcbebeae7420691c/cffi-2.1.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:90bec57cf82089383bd06a605b3eb8daebf7e5a668520beaf6e327a83a947699" }, + { url = "https://mirrors.aliyun.com/pypi/packages/eb/d8/df4543cc087245044ed02ef3ad8e0a26619d0075ac7a77a12dc81177851b/cffi-2.1.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6274dcb2d15cef48daa73ed1be5a40d501d74dccd0cd6db364776d12cb6ba022" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2c/0e/fac738d73728c6cea2a88a2883dca54892496cbba88a1dc1f2909cb8a6f5/cffi-2.1.0-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:2b71d409cccee78310ab5dec549aed052aaea483346e282c7b02362596e01bb0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e6/3f/0b04a700dd64f465c93020253a793a82c9b4dff9961f48facd0df945d9b8/cffi-2.1.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7d3538f9c0e50670f4deb93dbb696576e60590369cae2faf7de681e597a8a1f1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5d/7c/b7379a5704c79eda57ce075869ba70a0368d1c850f803b3c0d078d39dcaf/cffi-2.1.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:8f9ec95b8a043d3dfbc74d9abc6f7baf524dd27a8dc160b0a32ff9cdab650c28" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5a/02/d5e6c43ea85c41bda2a184a3418f195fe7cf602967a8d2b94e085b83deef/cffi-2.1.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:af5e2915d41fe6c961694d7bfdc8562942638200f3ce2765dfb8b745cf997629" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2c/d8/772b8259bf75749adffb1c546828978381fb516f60cf701f6c83daf60c85/cffi-2.1.0-cp315-cp315-win32.whl", hash = "sha256:0a42c688d19fca6e095a53c6a6e2295a5b050a8b289f109adab02a9e61a25de6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2f/dd/afa2191fc6d57fedd26e5844a2fe2fcc0bbfa00961bbaa5a41e4921e7cca/cffi-2.1.0-cp315-cp315-win_amd64.whl", hash = "sha256:bccbbb5ee76a61f9d99b5bf3846a51d7fca4b6a732fe46f89295610edaf41853" }, + { url = "https://mirrors.aliyun.com/pypi/packages/05/ef/6cd4f8c671517162379dc79cfae5aea9106bc38abb89628d5c16adf6a838/cffi-2.1.0-cp315-cp315-win_arm64.whl", hash = "sha256:8d35c139744adb3e727cd51b1a18324bbe44b8bd41bf8322bca4d41289f48eda" }, + { url = "https://mirrors.aliyun.com/pypi/packages/11/b6/12fc55092817a5faa26fb8c40c7f9d662e11a46ee248c137aafc42517d92/cffi-2.1.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:f9912624a0c0b834b7520d7769b3644453aabc0a7e1c839da7359f050750e9bc" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8d/2e/cdac88979f295fde5daa69622c7d2111e56e7ceb94f211357fbe452339e4/cffi-2.1.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:df92f2aba50eb4d96718b68ef76f2e57a57b54f2fa62333496d16c6d585a85ca" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e0/27/1d0b408497e41a74795af122d7b603c418c5fed0171450f899afd04e594f/cffi-2.1.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0520e1f4c35f44e209cbbb421b67eec42e6a157f59444dfb6058874ff3610e5d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8b/31/e115c985105dd7ffb32444505f18ceb874bb42d992af05d5dced7ecf1980/cffi-2.1.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3681e031db29958a7502f5c0c9d6bbc4c36cb20f7b104086fa642d1799631ff8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5a/67/9e6e09409336d9e515c58367e7cfcf4f89df06ad25252675595a58eb59d5/cffi-2.1.0-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:762f99479dcb369f60ab9017ad4ab97a36a1dd7c1ee5a3b15db0f4b8659120cd" }, + { url = "https://mirrors.aliyun.com/pypi/packages/19/e5/d3cc82a4a0be7902af279c04181ad038449c096734464a5ae1de3e1401bd/cffi-2.1.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0611e7ebf90573a535ebdc33ae9da222d037853983e13359f580fab781ca017f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b9/65/b434abc97ce7cecc2c640fde160507c0ecc7e21544b483ba3325d2e2ea17/cffi-2.1.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:86cf8755a791f72c85dc287128cc62d4f24d392e3f1e15837245623f4a33cccc" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b5/9f/d4dc66ca651eb1145a133314cda721abf13cfac3d28c4a0402263ae6ad75/cffi-2.1.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:ba00f661f8ba35d075c937174e27c2c421cec3942fd2e0ea3e66996757c0fdd9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/68/5a/e536c528bc8057496c360c0978559a2dc45653f89dd6151078aa7d8fca1a/cffi-2.1.0-cp315-cp315t-win32.whl", hash = "sha256:cb96698e3c7413d906ce83f8ffd245ec1bd94707541f299d0ce4d6b0193e982b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d3/0b/0ffe8b82d3875bced5fa1e7986a7a46b748262a40ab7f60b475eb9fb1bb3/cffi-2.1.0-cp315-cp315t-win_amd64.whl", hash = "sha256:f146d154428a2523f9cc7936c02353c2459b8f6cf07d3cd1ee1c0a611109c5d5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a0/17/1073b53b68c9b5ca6914adf5f8bf55aacc2d3be102418c90700160ea8605/cffi-2.1.0-cp315-cp315t-win_arm64.whl", hash = "sha256:cbb7640ce37159548d2147b5b8c241f962143d4c71231431820783f4dc78f210" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.9" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/bd/2a/23f34ec9d04624958e137efdc394888716353190e75f25dd22c7a2c7a8aa/charset_normalizer-3.4.9.tar.gz", hash = "sha256:673611bbd43f0810bec0b0f028ddeaaa501190339cac411f347ac76917c3ae7b" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/70/4a/ecbd131485c07fcdfad54e28946d513e3da22ef3b4bd854dcafae54ec739/charset_normalizer-3.4.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:45b0cc4e3556cd875e09102988d1ab8356c998b596c9fced84547c8138b487a0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ec/96/5d9364e3342d69f3a045e1777bc47c85c383e6e9466d561b33fdb419d1f9/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9b2aff1c7b3884512b9512c3eaadd9bab39fb45042ffaaa1dd08ff2b9f8109d9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/4b/4c/5361f9aa7f2cb58d94f2ab831b3d493f69efb1d239654b4744e3c09527cb/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9104ed0bd76a429d46f9ec0dbc9b08ad1d2dcdf2b00a5a0daa1c145329b35b44" }, + { url = "https://mirrors.aliyun.com/pypi/packages/50/78/ce342ca4ff30b2eb49fe6d9578df85974f90c67d294113e94efdd9664cbd/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7b86a2b16095d250c6f58b3d9b2eee6f4147754344f3dab0922f7c9bf7d226c9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/01/c4/4fa4c8b3097a11f3c5f09a35b72ed6855fb1d332469504962ab7bafcc702/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e226f6218febc71f6c1fc2fafb91c226f75bdc1d8fb12d66823716e891608fd" }, + { url = "https://mirrors.aliyun.com/pypi/packages/87/3a/ad914516df7e358a81aae018caa5e0470ba827fa6d763b1d2e87d920a5f6/charset_normalizer-3.4.9-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:90c44bc373b7687f6948b693cceaea1348ae0975d7474746559494468e3c1d84" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d7/74/3c12f9755717dfe5c5c87da63f35d765fa0c00382ec26bf23f7fae34f2ba/charset_normalizer-3.4.9-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cdef90ae47919cae358d8ab15797a800ed41da7aba5d72419fb510729e2ed4b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/33/9a/895095b83e7907abd6d3d99aad3a38ad0d9686cc186cb0c94c24320fe63e/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:60f44ade2cf573dad7a277e6f8ca9a51a21dda572b13bd7d8539bb3cd5dbedde" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a1/34/ef5c05f412f42520d7709b7d3784d19640839eb7366ded1755511585429f/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a1786910334ed46ab1dd73222f2cd1e05c2c3bb39f6dddb4f8b36fc382058a39" }, + { url = "https://mirrors.aliyun.com/pypi/packages/83/dc/9b29fa4412b318bf3bfea985c35d67eb55e04b59a7c3f2237168b0e0be6f/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03d07803992c6c7bbc976327f34b18b6160327fc81cb82c9d504720ac0be3b62" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0e/42/6dbc00b8cd16011691203e33570fa42ed5746599a2e878112d16eab403a3/charset_normalizer-3.4.9-cp312-cp312-win32.whl", hash = "sha256:78841cccf1af7b40f6f716338d50c0902dbe88d9f800b3c973b7a9a0a693a642" }, + { url = "https://mirrors.aliyun.com/pypi/packages/80/cc/f920afd1a23c58ccd53c1d36085a71893a4737ff5e66e0371efab6809850/charset_normalizer-3.4.9-cp312-cp312-win_amd64.whl", hash = "sha256:4b3dac63058cc36820b0dd072f89898604e2d39686fe05321729d00d8ac185a0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f0/e6/0386d43a261ff4e4b30c5857af7df877254b46bec7b9d1b74b6bf969a90b/charset_normalizer-3.4.9-cp312-cp312-win_arm64.whl", hash = "sha256:78fa18e436a1a0e58dbd7e02fc4473f3f32cceb12df9dfca542d075961c307d2" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b2/06/97ec2aeae780b31d742b6352218b43841a6871e2564578ca522dce4a45c3/charset_normalizer-3.4.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:440eede837960000d74978f0eba527be106b5b9aee0daf779d395276ed0b0614" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d0/39/8ff066c672434225f8d25f8b739f992af250944392173dcc88362681c9bf/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21e764fd1e70b6a3e205a0e46f3051701f98a8cb3fad66eeb80e48bb502f8698" }, + { url = "https://mirrors.aliyun.com/pypi/packages/92/8f/3a47a3667c83c2df9483d91644c6c107de3bf8874aa1793da9d3012eb986/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e4fd89cc178bced6ad29cb3e6dd4aa63fa5017c3524dbd0b25998fb64a87cc8b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f1/60/b22cdbee7e4013dab8b0d7647fc6181120fbbbc8f7025c226d15bd5a47fc/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bd47ba7fc3ca94896759ea0109775132d3e7ab921fbf54038e1bab2e46c313c9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ea/f8/72eb13dcabe7257035cea8aefd922caad2f110d252bf9f67c4c2ca763aee/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:84fd18bcc17526fc2b3c1af7d2b9217d32c9c04448c16ec693b9b4f1985c3d33" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b0/3e/faee8f9de92b14ee1198e9163252bb15efee7301b31256a3b6d9ebfdd0dd/charset_normalizer-3.4.9-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:5b10cd92fc5c498b35a8635df6d5a100207f88b63a4dc1de7ef9a548e1e2cd63" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3a/25/45f30093ae27dd7b92a793b61882a38685f993700113ca36e0c9c14965e1/charset_normalizer-3.4.9-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a4fbdde9dd4a9ce5fd52c2b3a347bb50cc89483ef783f1cb00d408c13f7a96c0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/48/18/c8f397329c35e32f6a837e488986f4ae03bd2abebc453b48714991630c2f/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:416c229f77e5ea25b3dfd4b582f8d73d7e43c22320302b9ab128a2d3a0b38efe" }, + { url = "https://mirrors.aliyun.com/pypi/packages/86/7e/5ce0bba863470fd1902d5e5843968951bddf38abe4742fc97116ef4598b3/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:75286256590a6320cf106a0d28970d3560aad9ee09aa7b34fb40524792436d35" }, + { url = "https://mirrors.aliyun.com/pypi/packages/6c/ef/2473d3c4d869155be4af1191111d59c4d5c4e0173026f7e85b176e23bf65/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:69b157c5d3292bcd443faca052f3096f637f1e074b98212a933c074ae23dc3b8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d0/a3/53ddae3db108a088156aa8ddfafd411ebbc1340f48c5573f697b27f69a39/charset_normalizer-3.4.9-cp313-cp313-win32.whl", hash = "sha256:51307f5c71007673a2bf8232ad973483d281e74cb99c8c5a990af1eefa6277d9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e8/ef/6953a77c7cf2c2ff9998e6f575ab3e380119f100223381565a4f94c1f836/charset_normalizer-3.4.9-cp313-cp313-win_amd64.whl", hash = "sha256:fe2c7201c642b7c308f1675355ad7ff7b66acfe3541625efe5a3ad38f29d6115" }, + { url = "https://mirrors.aliyun.com/pypi/packages/6e/fb/d560d1d1555debbfe7849d9cac6145c1b537709d79576bf22557ed803b82/charset_normalizer-3.4.9-cp313-cp313-win_arm64.whl", hash = "sha256:611057cc5d5c0afc743ba8be6bd828c17e0aaa8643f9d0a9b9bb7dea80eb8012" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7e/8d/496817fa0944239ecae662dd57ea765cfeaec6a735f9f025d4b7b72e7143/charset_normalizer-3.4.9-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:0327fcd59a935777d83410750c50600ee9571af2846f71ce40f25b13da1ef380" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2b/f9/ef4a69ea338ad3c0deceea0f5f7d2380ae8b52132b06d652cb0d2cd86706/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a79d9f4d8001473a30c163556b3c3bfebec837495a412dde78b51672f6134f9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8c/e7/5ddfd76fc061eb52de219658a4aa431cbacadf0a0219c8854f00da50d289/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:33bdcc2a32c0a0e861f60841a512c8acc658c87c2ac59d89e3a46dacf7d866e4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/49/ba/768fa3f36048d81c477a0ce61f813bc1454d80917ccfe550abd9f44f5e24/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f840ed6d8ecba8255df8c42b87fadeda98ddfc6eeec05e2dc66e26d46dd6f58a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f4/c4/b3e049d2aa3766180c78507110543d9d50894cc97f57de543f1be521dcdc/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c25fe15c70c59eb7c5ce8c06a1f3fa1da0ecc5ea1e7a5922c40fd2fa9b0d5046" }, + { url = "https://mirrors.aliyun.com/pypi/packages/19/79/55c32d06d76ae4feafe053f061f3e3ab70bcf19f4007797ce8c3efda7830/charset_normalizer-3.4.9-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:f7fb7d750cfa0a070d2c24e831fd3481019a60dd317ea2b39acbcebc08b6ed81" }, + { url = "https://mirrors.aliyun.com/pypi/packages/10/e0/47c079dd82d217c807479cd59ffd30af56307ea31c108b75758970459ad3/charset_normalizer-3.4.9-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4d1c96a7a18b9690a4d46df09e3e3382406ae3213727cd1019ebade1c4a81917" }, + { url = "https://mirrors.aliyun.com/pypi/packages/42/ab/b9bc2e77d6b44a7e46ef62ec5cac1c9a6ba7b9135a5d560f002696ec9995/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a4cfde78a9f2880208d16a93b795726a3017d5977e08d1e162a7a31322479c41" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f1/78/c9c71d599f5aa2d42bcdd35cbbd46d7f535351a57e40ff7d8e5a7e219401/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:d4d6fcde76f94f5cb9e43e9e9a61f16dacefd228cbbf6f1a09bd9b219a92f1a1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f6/39/c914445c321a845097ce4f6ac7de9a18228a77b766272125a1ce00d851eb/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:898f0e9068ca27d37f8e83a5b962821df851532e6c4a7d615c1c033f9da6eedf" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9b/f2/c0d4b8508565a36bc5c624e88ed297f5b0b1095011034d7f5b83a69908b5/charset_normalizer-3.4.9-cp314-cp314-win32.whl", hash = "sha256:c1c948747b03be832dceed96ca815cef7360de9aa19d37c730f8e3f6101aca48" }, + { url = "https://mirrors.aliyun.com/pypi/packages/49/fd/a1d26144398c67486422a72bf5812cda22cb4ccfcd95a290fb41ceb4b8e2/charset_normalizer-3.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:16b65ea0f2465b6fb52aa22de5eca612aa964ddfec00a912e26f4656cbef890b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/20/95/d75e82f8ce9fd323ebf059c16c9aadefb22a1ecde13b7840b35835e4886c/charset_normalizer-3.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:40a126142a56b2dfc0aacbad1de8310cbf60da7656db0e6b16eebd48e3e93519" }, + { url = "https://mirrors.aliyun.com/pypi/packages/00/5e/17398df3a139985ba9d11ed072531986f408c8fca952835ef1ab1820c02b/charset_normalizer-3.4.9-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:609b3ba8fcc0fb5ab7af00719d0fb6ad0cb518e48e7712d12fd68f1327951198" }, + { url = "https://mirrors.aliyun.com/pypi/packages/cd/91/7253a32e86b7e1d1239b1b36ba6dd0f021a21107ab33054b53119cc083b9/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51447e9aa2684679af07ca5021c3db526e0284347ebf4ffcec1154c3350cfe32" }, + { url = "https://mirrors.aliyun.com/pypi/packages/cb/32/2e64bd2be10e89c61e57ebe6a93fd98ae88eb7ebe414b5121f22c96c69eb/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cc1b0fff8ead343dae06305f954eb8468ba0ec1a97881f42489d198e4ce3c632" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3d/ef/d96ec496cfea0c21db43b0ad03891308b02388d054cc902cf0e5a1ad6a88/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fa36ec09ef71d158186bc79e359ff5fdd6e7996fe8ab638f00d6b93139ba4fcf" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d4/ce/9af95f7876194bd7a14e3dfe4a4de2e0bff02666a3910d72beafd06cc297/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df115d4d83168fdf2cae48ef1ff6d1cb4c466364e30861b37121de0f3bf1b990" }, + { url = "https://mirrors.aliyun.com/pypi/packages/52/94/af74dde74a3996bd959c350709bfe50e297823d70a8c1cbd54b838880863/charset_normalizer-3.4.9-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:f86c6358749bd4fda175388691e3ba8c46e24c5347d0afd20f9b7edfc9faf07d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ee/f0/f1c4fe746c395922961b5916ed1d7d6e7d4c84851d19ed43cc89980ec953/charset_normalizer-3.4.9-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:32286a2c8d167e897177b673176c1e3e00d4057caf5d2b64eef9a3666b03018e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e4/56/6c745619ac397e8871e2bcd3cea1eec86b877488f33888b3aef5c3ed506e/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:83aed2c10721ddd90f68140685391b50811a880af20654c59af6b6c66c40513c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/78/ad/98aae8630ac71f16711968e38a5acfecce41b778bf2f0312851020f565a8/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cd6c3d4b783c556fa00bf540854e42f135e2f256abd29669fcd0da0f2dec79c2" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f7/40/9593d54209765207a7f11073c06494c1721e4ca4a0a426c597679bf7f91e/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ee2f2a527e3c1a6e6411eb4209642e138b544a2d72fe5d0d76daf77b24063534" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b1/27/693ee5e8a18191eb38647360c51cd505013e2bd3b366aa43fd5344c21e3c/charset_normalizer-3.4.9-cp314-cp314t-win32.whl", hash = "sha256:0d861473f743244d349b50f850d10eb87aeb22bbdcc8e64f79273c94af5a8226" }, + { url = "https://mirrors.aliyun.com/pypi/packages/80/3f/bd97d3d9c613013d07cb7733d299385b41df37f0471310f5a73dc359f0b8/charset_normalizer-3.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:9b8e0f3107e2200b76f6054de99016eac3ee6762713587b36baaa7e4bd2ae177" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3d/c6/eee9dca4439b1061f76373f06ea855678cc4a64c1c3c90b50e479edbb8eb/charset_normalizer-3.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:19ac87f93086ce37b86e098888555c4b4bc48102279bae3350098c0ed664b501" }, + { url = "https://mirrors.aliyun.com/pypi/packages/98/2b/f97f1c193fb855c345d678f5077d6926034db0722df74c8f057020e05a25/charset_normalizer-3.4.9-py3-none-any.whl", hash = "sha256:68e5f26a1ad57ded6d1cfb85331d1c1a195314756471d97758c48498bb4dcdf5" }, +] + +[[package]] +name = "click" +version = "8.4.2" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/76/d4/81420972a676e8ffea40450d8c8c92943e7218a78fe9b64359836cc9876b/click-8.4.2.tar.gz", hash = "sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl", hash = "sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" }, +] + +[[package]] +name = "contourpy" +version = "1.3.3" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/be/45/adfee365d9ea3d853550b2e735f9d66366701c65db7855cd07621732ccfc/contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b08a32ea2f8e42cf1d4be3169a98dd4be32bafe4f22b6c4cb4ba810fa9e5d2cb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:556dba8fb6f5d8742f2923fe9457dbdd51e1049c4a43fd3986a0b14a1d815fc6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d4/1c/a12359b9b2ca3a845e8f7f9ac08bdf776114eb931392fcad91743e2ea17b/contourpy-1.3.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92d9abc807cf7d0e047b95ca5d957cf4792fcd04e920ca70d48add15c1a90ea7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/63/12/897aeebfb475b7748ea67b61e045accdfcf0d971f8a588b67108ed7f5512/contourpy-1.3.3-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2e8faa0ed68cb29af51edd8e24798bb661eac3bd9f65420c1887b6ca89987c8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/43/8a/a8c584b82deb248930ce069e71576fc09bd7174bbd35183b7943fb1064fd/contourpy-1.3.3-cp312-cp312-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:626d60935cf668e70a5ce6ff184fd713e9683fb458898e4249b63be9e28286ea" }, + { url = "https://mirrors.aliyun.com/pypi/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/05/0a/a3fe3be3ee2dceb3e615ebb4df97ae6f3828aa915d3e10549ce016302bd1/contourpy-1.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:451e71b5a7d597379ef572de31eeb909a87246974d960049a9848c3bc6c41bf7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/33/1d/acad9bd4e97f13f3e2b18a3977fe1b4a37ecf3d38d815333980c6c72e963/contourpy-1.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:459c1f020cd59fcfe6650180678a9993932d80d44ccde1fa1868977438f0b411" }, + { url = "https://mirrors.aliyun.com/pypi/packages/cf/8f/5847f44a7fddf859704217a99a23a4f6417b10e5ab1256a179264561540e/contourpy-1.3.3-cp312-cp312-win32.whl", hash = "sha256:023b44101dfe49d7d53932be418477dba359649246075c996866106da069af69" }, + { url = "https://mirrors.aliyun.com/pypi/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:8153b8bfc11e1e4d75bcb0bff1db232f9e10b274e0929de9d608027e0d34ff8b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d1/e2/f05240d2c39a1ed228d8328a78b6f44cd695f7ef47beb3e684cf93604f86/contourpy-1.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:07ce5ed73ecdc4a03ffe3e1b3e3c1166db35ae7584be76f65dbbe28a7791b0cc" }, + { url = "https://mirrors.aliyun.com/pypi/packages/68/35/0167aad910bbdb9599272bd96d01a9ec6852f36b9455cf2ca67bd4cc2d23/contourpy-1.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:177fb367556747a686509d6fef71d221a4b198a3905fe824430e5ea0fda54eb5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/96/e4/7adcd9c8362745b2210728f209bfbcf7d91ba868a2c5f40d8b58f54c509b/contourpy-1.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d002b6f00d73d69333dac9d0b8d5e84d9724ff9ef044fd63c5986e62b7c9e1b1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/73/23/90e31ceeed1de63058a02cb04b12f2de4b40e3bef5e082a7c18d9c8ae281/contourpy-1.3.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:348ac1f5d4f1d66d3322420f01d42e43122f43616e0f194fc1c9f5d830c5b286" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ed/93/b43d8acbe67392e659e1d984700e79eb67e2acb2bd7f62012b583a7f1b55/contourpy-1.3.3-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:655456777ff65c2c548b7c454af9c6f33f16c8884f11083244b5819cc214f1b5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/46/3b/bec82a3ea06f66711520f75a40c8fc0b113b2a75edb36aa633eb11c4f50f/contourpy-1.3.3-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:644a6853d15b2512d67881586bd03f462c7ab755db95f16f14d7e238f2852c67" }, + { url = "https://mirrors.aliyun.com/pypi/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/33/71/e2a7945b7de4e58af42d708a219f3b2f4cff7386e6b6ab0a0fa0033c49a9/contourpy-1.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a15459b0f4615b00bbd1e91f1b9e19b7e63aea7483d03d804186f278c0af2659" }, + { url = "https://mirrors.aliyun.com/pypi/packages/12/fc/4e87ac754220ccc0e807284f88e943d6d43b43843614f0a8afa469801db0/contourpy-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca0fdcd73925568ca027e0b17ab07aad764be4706d0a925b89227e447d9737b7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a6/2e/adc197a37443f934594112222ac1aa7dc9a98faf9c3842884df9a9d8751d/contourpy-1.3.3-cp313-cp313-win32.whl", hash = "sha256:b20c7c9a3bf701366556e1b1984ed2d0cedf999903c51311417cf5f591d8c78d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/18/0b/0098c214843213759692cc638fce7de5c289200a830e5035d1791d7a2338/contourpy-1.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8a/9a/2f6024a0c5995243cd63afdeb3651c984f0d2bc727fd98066d40e141ad73/contourpy-1.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:fd914713266421b7536de2bfa8181aa8c699432b6763a0ea64195ebe28bff6a9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c0/b3/f8a1a86bd3298513f500e5b1f5fd92b69896449f6cab6a146a5d52715479/contourpy-1.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:88df9880d507169449d434c293467418b9f6cbe82edd19284aa0409e7fdb933d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3f/11/4780db94ae62fc0c2053909b65dc3246bd7cecfc4f8a20d957ad43aa4ad8/contourpy-1.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d06bb1f751ba5d417047db62bca3c8fde202b8c11fb50742ab3ab962c81e8216" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ae/15/e59f5f3ffdd6f3d4daa3e47114c53daabcb18574a26c21f03dc9e4e42ff0/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4e6b05a45525357e382909a4c1600444e2a45b4795163d3b22669285591c1ae" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0f/81/03b45cfad088e4770b1dcf72ea78d3802d04200009fb364d18a493857210/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab3074b48c4e2cf1a960e6bbeb7f04566bf36b1861d5c9d4d8ac04b82e38ba20" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0c/ba/49923366492ffbdd4486e970d421b289a670ae8cf539c1ea9a09822b371a/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c3d53c796f8647d6deb1abe867daeb66dcc8a97e8455efa729516b997b8ed99" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9f/52/5b00ea89525f8f143651f9f03a0df371d3cbd2fccd21ca9b768c7a6500c2/contourpy-1.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50ed930df7289ff2a8d7afeb9603f8289e5704755c7e5c3bbd929c90c817164b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/32/1d/a209ec1a3a3452d490f6b14dd92e72280c99ae3d1e73da74f8277d4ee08f/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4feffb6537d64b84877da813a5c30f1422ea5739566abf0bd18065ac040e120a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/bc/9e/46f0e8ebdd884ca0e8877e46a3f4e633f6c9c8c4f3f6e72be3fe075994aa/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2b7e9480ffe2b0cd2e787e4df64270e3a0440d9db8dc823312e2c940c167df7e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b9/70/f308384a3ae9cd2209e0849f33c913f658d3326900d0ff5d378d6a1422d2/contourpy-1.3.3-cp313-cp313t-win32.whl", hash = "sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b2/dd/880f890a6663b84d9e34a6f88cded89d78f0091e0045a284427cb6b18521/contourpy-1.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/80/99/2adc7d8ffead633234817ef8e9a87115c8a11927a94478f6bb3d3f4d4f7d/contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301" }, + { url = "https://mirrors.aliyun.com/pypi/packages/72/8b/4546f3ab60f78c514ffb7d01a0bd743f90de36f0019d1be84d0a708a580a/contourpy-1.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fde6c716d51c04b1c25d0b90364d0be954624a0ee9d60e23e850e8d48353d07a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b1/71/f93e1e9471d189f79d0ce2497007731c1e6bf9ef6d1d61b911430c3db4e5/contourpy-1.3.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/91/f9/e35f4c1c93f9275d4e38681a80506b5510e9327350c51f8d4a5a724d178c/contourpy-1.3.3-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b5/71/47b512f936f66a0a900d81c396a7e60d73419868fba959c61efed7a8ab46/contourpy-1.3.3-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36" }, + { url = "https://mirrors.aliyun.com/pypi/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3e/a6/0b185d4cc480ee494945cde102cb0149ae830b5fa17bf855b95f2e70ad13/contourpy-1.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/43/d7/afdc95580ca56f30fbcd3060250f66cedbde69b4547028863abd8aa3b47e/contourpy-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e2/e2/366af18a6d386f41132a48f033cbd2102e9b0cf6345d35ff0826cd984566/contourpy-1.3.3-cp314-cp314-win32.whl", hash = "sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd" }, + { url = "https://mirrors.aliyun.com/pypi/packages/18/79/a9416650df9b525737ab521aa181ccc42d56016d2123ddcb7b58e926a42c/contourpy-1.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1f/42/38c159a7d0f2b7b9c04c64ab317042bb6952b713ba875c1681529a2932fe/contourpy-1.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:33c82d0138c0a062380332c861387650c82e4cf1747aaa6938b9b6516762e772" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c3/6c/26a8205f24bca10974e77460de68d3d7c63e282e23782f1239f226fcae6f/contourpy-1.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ea37e7b45949df430fe649e5de8351c423430046a2af20b1c1961cae3afcda77" }, + { url = "https://mirrors.aliyun.com/pypi/packages/66/06/8a475c8ab718ebfd7925661747dbb3c3ee9c82ac834ccb3570be49d129f4/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b4/a3/c5ca9f010a44c223f098fccd8b158bb1cb287378a31ac141f04730dc49be/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe" }, + { url = "https://mirrors.aliyun.com/pypi/packages/80/5b/68bd33ae63fac658a4145088c1e894405e07584a316738710b636c6d0333/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/40/52/4c285a6435940ae25d7410a6c36bda5145839bc3f0beb20c707cda18b9d2/contourpy-1.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/24/ee/3e81e1dd174f5c7fefe50e85d0892de05ca4e26ef1c9a59c2a57e43b865a/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3c/b2/6d913d4d04e14379de429057cd169e5e00f6c2af3bb13e1710bcbdb5da12/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/93/8a/68a4ec5c55a2971213d29a9374913f7e9f18581945a7a31d1a39b5d2dfe5/contourpy-1.3.3-cp314-cp314t-win32.whl", hash = "sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae" }, + { url = "https://mirrors.aliyun.com/pypi/packages/fa/96/fd9f641ffedc4fa3ace923af73b9d07e869496c9cc7a459103e6e978992f/contourpy-1.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ae/8c/469afb6465b853afff216f9528ffda78a915ff880ed58813ba4faf4ba0b6/contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b" }, +] + +[[package]] +name = "cuda-bindings" +version = "13.3.1" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "cuda-pathfinder" }, +] +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/ce/67/5e7dba1ba576dd73da5dee894ca076ca5e959450dfff66d6d510a255d1f7/cuda_bindings-13.3.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7855c4868aabc0cfae28abbe83d56734bdfbd08f08fc234ac1912a12858bf49" }, + { url = "https://mirrors.aliyun.com/pypi/packages/39/2a/6d2e9047d1fb243dbaa364b01e0297534b9ed7fd27dba1c9f361519cf69b/cuda_bindings-13.3.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e32d08f71ebcdf00f0f41eab2eb37e8da94c8ed411cc9f7f7a019ce6b34abe3a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/cc/6e/2394f8163360f8391f8f1b7e72d300a82724edb81a7b7084c799fbd4c91f/cuda_bindings-13.3.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9efb21c1ee64981e184b9e0ba5eb3179e5ba3d4b51665a6cb52b8ef3d01a7cbf" }, + { url = "https://mirrors.aliyun.com/pypi/packages/34/c2/ef9b6a63f7dc432712a462c816662e662e00d38caa9b861c8c2588195d03/cuda_bindings-13.3.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2732904099e0a4d4db774a5fc6d91ee95fae065b4d2ecabb4968c5fe2406c9d7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b1/81/bff68ce829999c1e4209c761bbf903b1c06ec570416ddb25020864ad5907/cuda_bindings-13.3.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ab2f74ed65bfef4163ba07a8db16f1085e0729291db12a2423aff84ee8278b8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d4/e0/c8a1f0c8f9ffdea4f5fe6dbab89b326cef4d85caf489dad39e209da89416/cuda_bindings-13.3.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:efd4c814d311ec08c981f6dded1dbe7d4b371067ee4f6c14cccec4bde9590f80" }, + { url = "https://mirrors.aliyun.com/pypi/packages/52/b8/83b1f563925b290f2d11a01a77a84013ba56052fe3653a5bef3ccfbb43d6/cuda_bindings-13.3.1-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3c772dfff49681541d59630c90f858e173ac926b9c593a2b7123f2a1043cc76" }, + { url = "https://mirrors.aliyun.com/pypi/packages/12/20/e79b4bfe98f075195afb6343d41c498f9dbd2d161d7021d4d28bceb83581/cuda_bindings-13.3.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:36febb7c1079d68a981dbbd8d5a67235b399802b82075c9388624719607e52b9" }, +] + +[[package]] +name = "cuda-pathfinder" +version = "1.6.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/fc/b4/d088047afe39827556df21118cac9ffd20cc3f968c99a7681494d1eb333c/cuda_pathfinder-1.6.0-py3-none-any.whl", hash = "sha256:1503af579d8379c24bdd65528379bc57039b0455be9f5f9686cf8e473a1fce51" }, +] + +[[package]] +name = "cuda-toolkit" +version = "13.0.3.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/d1/c7/a79086a62c98befcdb8349656c6f114e2db3b8b2422f6e25c97a7f2a9a3c/cuda_toolkit-13.0.3.0-py2.py3-none-any.whl", hash = "sha256:d693caaa261214ddd7dbb60d68e71cbed884e68c2be7509778f3051da0b91c3f" }, +] + +[package.optional-dependencies] +cublas = [ + { name = "nvidia-cublas", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" }, + { name = "nvidia-cuda-nvrtc", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" }, +] +cudart = [ + { name = "nvidia-cuda-runtime", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" }, +] +cufft = [ + { name = "nvidia-cufft", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" }, + { name = "nvidia-nvjitlink", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" }, +] +cufile = [ + { name = "nvidia-cufile", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" }, +] +cupti = [ + { name = "nvidia-cuda-cupti", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" }, +] +curand = [ + { name = "nvidia-curand", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" }, +] +cusolver = [ + { name = "nvidia-cublas", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" }, + { name = "nvidia-cusolver", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" }, + { name = "nvidia-cusparse", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" }, + { name = "nvidia-nvjitlink", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" }, +] +cusparse = [ + { name = "nvidia-cusparse", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" }, + { name = "nvidia-nvjitlink", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" }, +] +nvjitlink = [ + { name = "nvidia-nvjitlink", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" }, +] +nvrtc = [ + { name = "nvidia-cuda-nvrtc", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" }, +] +nvtx = [ + { name = "nvidia-nvtx", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30" }, +] + +[[package]] +name = "cython" +version = "3.3.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/a9/d8/4981ef716ad0e3ff0d3ef383aefc6b03c4a88dee33b272bf8e0d833001ca/cython-3.3.0.tar.gz", hash = "sha256:eed0d93fbca7087f143b42c34b05a825849bdf17f101572c2105acfa49aa88b8" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/da/0f/95bad838a80ac52c9e982dad00bd9a0b2bad57fb4c688e5f53ac3ef65ff0/cython-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03bc5333932f5dda3ba9315298ecdd21daa1b58410bb1f8ce04c78ec8337130a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/91/8b/53d4a84de853b39940a0e35a6a2a9ed5f54cb05468daee95bc0fd1c2a178/cython-3.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7e321ae700995a16dc3055ada06ffb8d61e1a7434e5d0e811547a45ac1015ebd" }, + { url = "https://mirrors.aliyun.com/pypi/packages/6a/4e/6b1c5a4e6bbe1726104de007aa2fdf01a3e2e386b4ec93c7be5f5085d53f/cython-3.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:428fafed98ea26927000a287b4dfc9ef07339f56656a5329a34eaa593f79a4f8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f4/9b/cd724d91c500116769bdb853450a2197ba3d640dbbe3b02fc54ebdfdbd1b/cython-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:333449cc0350baedee5a6af27929eac8a71eac4ec59333c45ff476b33c6c660d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2f/cc/abc977cf683140e372714acea42164ecfc5cd3d3984ed025860e6d830ee4/cython-3.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:03056533fe4fdbc4f1d34a39178f9a4937ff35196f8bcdde2a67b5b5809c61fe" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a3/60/5367e7c80776a185ac11e0ea738fdaf18b9d0bc21d2c2bafc4d87eb19964/cython-3.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bc2f2a6b65a991666cfd35a35bab0cd88ffba4df2f601edb6e76cc8116de24b9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/bc/b8/fc595c60a7b6f5f08b4f6ad65e60688e8c61f76064ebe847eaf85d0c59fa/cython-3.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23942b0662642927a55676e4b26e6840fb166dd7d76436384685227e7e8619a4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d8/d7/376572ff69ef39a9bdcd727124f6c38aa066300e97734a4902a3ae0d2af0/cython-3.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:ab24d1a4fb6aaf0b5b6fcd75a6d70255fbd3130fa78884c26991f8d5502616b5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8a/7f/e409f76bb955ecdcb746b80350b945fbb808846d797346d647a37e1790ca/cython-3.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0deedc2e9a5a664e1adfa4c2d310aa7b54903e1a647c274b6c9213f77a02d637" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0e/6b/4a623ab6e4a5b9814b22849665cb212273f9735399a7ebca4f3e8c254f1a/cython-3.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:46072c0d404616b5e652a63882c79cc3f8a1d62635a8692f56ed0e416a4dfed8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9f/57/6d620ebee4fc24d89340427702f6ceaf7b956511d1f2222a88c92c1a72b7/cython-3.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:82f94565b6001bab8e31bf52a0911672910b5735910612a2c0f772c719670006" }, + { url = "https://mirrors.aliyun.com/pypi/packages/73/4e/26e0a584d06c5b3f345df491d2546479606c89217627ee163f1aa55e899f/cython-3.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:51999fb834365721b6c7f689cf6e2ec7c8667aae783df9eb5e589c290a414d9c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ea/45/7f6988070013e16918e39b1b3dab9c5f2c8e404253a7fd10ee685bbd6902/cython-3.3.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:596e8df019372a2cd417805015022d42cb8ee4e1803ccdc11ed00e451625fb66" }, + { url = "https://mirrors.aliyun.com/pypi/packages/6e/5d/afb6866ab10236bb208dff0f172ea4b397c9693c5250280c4d9d26057218/cython-3.3.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a36c34d1950845b8ac148653b07cdc62421a4b0d9abfcc849e69f1c4ff9919d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c9/aa/4c0b6773ecf6bc1ec6cda7db8312a566611b330fb6dae87d740e44a47822/cython-3.3.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b447f6906e0555f05dc4742ef1f99091b1e5d9aa9f16616e772fbf9ff6271616" }, + { url = "https://mirrors.aliyun.com/pypi/packages/44/bb/3e2631122f96300723d6fc42b9cf65550bdcda570a6ad5c4e0226e2e787c/cython-3.3.0-cp315-cp315-win_amd64.whl", hash = "sha256:b55c72e8eccdd508c8de3cf3bbc543aafbb3bf6a518e1ee20358d3241cd780ef" }, + { url = "https://mirrors.aliyun.com/pypi/packages/14/59/bc1a84b434cb5bebb0cd6f50da8f239d35a5c141b20fdeafc2817fd87778/cython-3.3.0-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:e0d2713d2b292c826bc21dc8732bd9e47628103aa3764180c881e04b3fef95dc" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ba/6d/542e32908fb421d88354f327ed6450e14240f9825d25393065bc65f4723f/cython-3.3.0-cp39-abi3-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:169e56fd411f4cd5bba51c82f8239421d547a846099db2b261e4aed48ba9f51f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9c/7c/ddaf197bc65b581e1891657940bc4f7cb1f740e822115e828920b3a119ce/cython-3.3.0-cp39-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:29f38ebafdf23e3da2516f40c4d065da38bfe002181bf93e2b8cf1262449aba6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/19/a7/ae5ec3e34d43da846ed4c425734752d83aae0dae49feb929f09c90fc9afa/cython-3.3.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:75c4ae8a6d3a5ccf3cdaba8ab32e6a8d0cd38e3a476aa7ac12df8f8171a8d570" }, + { url = "https://mirrors.aliyun.com/pypi/packages/31/44/c60b601fc43f0b08e9d6f14b94e0dd02eb0ca8d60f46e242ace7191ac1be/cython-3.3.0-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:b94fb5613b9fe34c27d13ec9972dc0dcd2a2155db2902e93921cadc162610a38" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b0/9e/d735c26ed907563d3365534006acb263651c2d3b87fee804f7a483dd1714/cython-3.3.0-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:c4558ba85849ab65dc57e10fd0efb13fabd9d3c09981a2566e18dec7cf47586a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e0/e8/aa7b4f3a28d6e8117c76e2cf78a0df7a503486cdf7243c5b53200c9533a1/cython-3.3.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:311a016369adfd1e0015c4f9819168fc0e518451d7efb4435c30d65a3a26d52b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9c/66/37892a8999d6bbd3f92d691a9701cb720c8ddd6171e16f5148eee6e8cb7f/cython-3.3.0-cp39-abi3-win32.whl", hash = "sha256:90869072e50b7c8904fe1dd7810321ae901fd5637a6eec6646ed9c57f9eb1081" }, + { url = "https://mirrors.aliyun.com/pypi/packages/19/a2/5f4d305cbd4489d21570e5491ad5c483c478cdab032853e2125c280e3bd5/cython-3.3.0-cp39-abi3-win_arm64.whl", hash = "sha256:dce56c26d388f00a19426371b6926bf2f77c5c03b71d5273e4556c68be98c2dd" }, + { url = "https://mirrors.aliyun.com/pypi/packages/bf/77/67b0b24e45073a699610e50f00c18474ff9b09ea29ecc95083bdf5e60acd/cython-3.3.0-py3-none-any.whl", hash = "sha256:9b24b5c8cd536946b62086fcafee6d5509d3f549f72d553d2336af87ffbe0da1" }, +] + +[[package]] +name = "decorator" +version = "5.3.1" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c" }, +] + +[[package]] +name = "esp32-8mic" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "fastapi" }, + { name = "flask" }, + { name = "gradio" }, + { name = "librosa" }, + { name = "matplotlib" }, + { name = "numba" }, + { name = "numpy" }, + { name = "openpyxl" }, + { name = "pandas" }, + { name = "pillow" }, + { name = "pygame" }, + { name = "pyroomacoustics" }, + { name = "pytest" }, + { name = "requests" }, + { name = "scikit-learn" }, + { name = "scipy" }, + { name = "sounddevice" }, + { name = "tensorboard" }, + { name = "torch" }, + { name = "tqdm" }, +] + +[package.metadata] +requires-dist = [ + { name = "beautifulsoup4", specifier = ">=4.15.0" }, + { name = "fastapi", specifier = ">=0.139.2" }, + { name = "flask", specifier = ">=3.1.3" }, + { name = "gradio", specifier = ">=6.20.0" }, + { name = "librosa", specifier = ">=0.11,<0.12" }, + { name = "matplotlib", specifier = ">=3.11.1" }, + { name = "numba", specifier = ">=0.66.0" }, + { name = "numpy", specifier = ">=2.0,<3" }, + { name = "openpyxl", specifier = ">=3.1.5" }, + { name = "pandas", specifier = ">=3.0.3" }, + { name = "pillow", specifier = ">=12.3.0" }, + { name = "pygame", specifier = ">=2.6.1" }, + { name = "pyroomacoustics", specifier = ">=0.10.0" }, + { name = "pytest", specifier = ">=9.1.1" }, + { name = "requests", specifier = ">=2.34.2" }, + { name = "scikit-learn", specifier = ">=1.9.0" }, + { name = "scipy", specifier = ">=1.13.0" }, + { name = "sounddevice", specifier = ">=0.5.2" }, + { name = "tensorboard", specifier = ">=2.21.0" }, + { name = "torch", specifier = ">=2.13.0" }, + { name = "tqdm", specifier = ">=4.69.0" }, +] + +[[package]] +name = "et-xmlfile" +version = "2.0.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa" }, +] + +[[package]] +name = "fastapi" +version = "0.139.2" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "annotated-doc" }, + { name = "pydantic" }, + { name = "starlette" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/cd/95/d3f0ae10836324a2eab98a52b61210ac609f08200bf4bb0dc8132d32f78a/fastapi-0.139.2.tar.gz", hash = "sha256:333145a6891e9b5b3cfceb69baf817e8240cde4d4588ae5a10bf56ffacb6255e" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/5f/c7/cb03251d9dfb177246a9809a76f189d21df32dbd4a845951881d11323b7f/fastapi-0.139.2-py3-none-any.whl", hash = "sha256:b9ad015a835173d59865e2f5d8296fbc2b317bf56a2ba1a5bfbdd03de2fd4b1c" }, +] + +[[package]] +name = "filelock" +version = "3.32.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/c0/80/8232b582c4b318b817cf1274ba74976b07b34d35ef439b3eb948f98645a1/filelock-3.32.0.tar.gz", hash = "sha256:7be2ad23a14607ccc71808e68fe30848aeace7058ace17852f68e2a68e310402" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/06/79/b4c714bef36bc4ec2beeae1e0c124f0223888cd8c6feb1cdc56038116920/filelock-3.32.0-py3-none-any.whl", hash = "sha256:d396bea984af47333ef05e50eae7eff88c84256de6112aea0ec48a233c064fe3" }, +] + +[[package]] +name = "flask" +version = "3.1.3" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "blinker" }, + { name = "click" }, + { name = "itsdangerous" }, + { name = "jinja2" }, + { name = "markupsafe" }, + { name = "werkzeug" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/26/00/35d85dcce6c57fdc871f3867d465d780f302a175ea360f62533f12b27e2b/flask-3.1.3.tar.gz", hash = "sha256:0ef0e52b8a9cd932855379197dd8f94047b359ca0a78695144304cb45f87c9eb" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl", hash = "sha256:f4bcbefc124291925f1a26446da31a5178f9483862233b23c0c96a20701f670c" }, +] + +[[package]] +name = "fonttools" +version = "4.63.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/84/69/c97f2c18e0db87d2c7b15da1974dace76ae938f1cfa22e2727a648b7ed43/fonttools-4.63.0.tar.gz", hash = "sha256:caeb583deeb5168e694b65cda8b4ee62abedfa66cf88488734466f2366b9c4e0" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/08/ef/b3c6b9b5be2f82416d73fe2ed2e96e2793cd80e7510bd6a17ca79cdd88ec/fonttools-4.63.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:37dd23e621e3b0aef1baa70a303b80aaf38449632cfc8fd2a55fb285bbccfc02" }, + { url = "https://mirrors.aliyun.com/pypi/packages/44/a0/c815bea63117fa63e4e1c01f8a1110d2112fa003f838e6467094ec2432ce/fonttools-4.63.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a9faff9e0c1f76f9fd55899d2ce785832efebab37eb8ae13995853aef178bef0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/44/04/0b91d8e916e92ad1fac9e4624760baf0fd5ff2ead614c2f68fb21373f03f/fonttools-4.63.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef3048ef05dbb552b89817713d9cac912e00d0fde4a3105c00d29e52e10c89af" }, + { url = "https://mirrors.aliyun.com/pypi/packages/77/c7/2342da9830e3e9d4870305ca5d2091d2a83284f2953079b7bdd3b5e029d8/fonttools-4.63.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:58dc6bb86a78d782f00f9190ca02c119cf5bbe2807536e361e18d42019f877d8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e6/6d/67fe16c48d7ce050979b33f47e0d28a318f02da030602e944c34f7a16ef3/fonttools-4.63.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ee08ebfa58f6e1aeff5697ab9582105bb620008c1caafb681e4c557e7483027b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f2/00/3bbab338c07c71fa56269953845e92c951a61457bbbb0f1022551ea266d9/fonttools-4.63.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:27fdc65af8da6f88b9c6121c47a464cbe359fcfff7ff6fc2d37a1f395d755b78" }, + { url = "https://mirrors.aliyun.com/pypi/packages/62/f2/aa27c7f98db5b064883dadcc5283947e81e034de42e22a33675878d98b54/fonttools-4.63.0-cp312-cp312-win32.whl", hash = "sha256:af2fd1664d00a397d75f806985ddb36282091c2131a73a6485c23b4a34722263" }, + { url = "https://mirrors.aliyun.com/pypi/packages/87/36/cccb9bc2a6ab63d1b2980374f0dca72ce95ae267c9b4cfe77455bb70d0d4/fonttools-4.63.0-cp312-cp312-win_amd64.whl", hash = "sha256:59ac449f8cca9b4ffa08d2e7bbadad87ce710d69d1eda5c3c1ce579baa987272" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0f/8d/d8fec3dcde2963f8c908fb315e5ff2cd0ac34f82394bbbf73a2aa5145ce3/fonttools-4.63.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:cd7e9857e5e63738b9d9fd707bc1f59c8b09e5177726d23664db393c59bb08bd" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ef/71/d935dc54e4ff121bfdd11e08702db63a7e6f25af21d8a3d7b7212df53641/fonttools-4.63.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c2a2a42198b696a6f48fad91709afb55176e66a5e566131219dba372fb7f8c59" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8e/40/e76320afa1df918e146155ef239b1719ee266092e96f5423bfd075affba1/fonttools-4.63.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e874792a8212b44583ea02189d9e693906b2f78b261f372f95d6c563210ac1d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ce/36/0b805d8c485f872f65a509cbe3b58a5d0d17bee855333b54a150c79d3061/fonttools-4.63.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:22135da48a348785c5e2d5d2d9d6bec5ed44adacbaeb9db12d9493bf6c6bfa68" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c8/26/2cee03d0aa083ab022da5c07aff9ed3f689da1defb81ad6917c9627896da/fonttools-4.63.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ccf41f2efdf56994d22d73bef4ced1052161958169428d06ba9724ea9e9a64be" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7e/48/cc4b66d9058c0d0982c833fad10127c4b0e9324606aafa41382295ca4102/fonttools-4.63.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9ced0bd02ac751dd6319b0da88aaef24414e3b0dbc32bb4f24944821a3741a27" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d8/1f/a98a30a814b9ddef3a2e706025f90b9e0bc94890e6cb15254bc86547d11a/fonttools-4.63.0-cp313-cp313-win32.whl", hash = "sha256:85be818f5506e8a7753153def2c9550178f0ecae6a47b5e0e8dbb23f7cc90380" }, + { url = "https://mirrors.aliyun.com/pypi/packages/92/46/5177b01f3b4abfdd4409f31cca4ab279c9343a26efbe9ec78c97fc612e02/fonttools-4.63.0-cp313-cp313-win_amd64.whl", hash = "sha256:ba04cb5891d4c0c21b6da95eda8d7b090021508a294fff33464fc7d241e0856b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/27/d2/23d25e3f247b328be58d04a4c9f894178a0d1eda7d42867cfb388adaf416/fonttools-4.63.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fd1e3094f42d806d3d7c79162fc59e5910fcbe3a7360c385b8da969bc4493745" }, + { url = "https://mirrors.aliyun.com/pypi/packages/cd/58/7dfa0c761cb3b2964e2a84c4dc986c926a87de0cb9fb60d5b28ded3f2914/fonttools-4.63.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:6e528da43bc3791085f8cb6141b1d13e459226790240340fcbb4625649238b03" }, + { url = "https://mirrors.aliyun.com/pypi/packages/dd/87/64cfa18a7a1621d17b7f4502b2b0ed8a135a90c3db51ea590ee99043e76b/fonttools-4.63.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b2248c5decb223562f7902ff6325077a073f608ee8e33e88ad88db734eb9f49" }, + { url = "https://mirrors.aliyun.com/pypi/packages/36/e1/a8933a72c45a87177fbde2696e0d0755c8c9062f8c077a961c6215fa27b1/fonttools-4.63.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:308f957cdeaf8abe4e5f2f124902ef405448af92c90f80e302a3b771c2e6116b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/27/60/872e6e233b8c5e8b41413796ff18b7fe479661bd40147e071b450dfad7a1/fonttools-4.63.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:bf00f21eb5fb721dbaf73d1e9da6d02a1af7768f2ebcf9798be98beab8ba90f6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/30/c4/83c24f2ec38b90cfda84bf4b1a1f49df80e84a1db4e7ac6e0d41bf23bc39/fonttools-4.63.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c1aaa4b9c75798400ac043ce04d74e7830376c85095a5a6ed7cba2f17a266bf4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/de/40/3ae22b60ff1d41ce0bd044b31238cdc72cef99f28b976f1e128ebd618c9b/fonttools-4.63.0-cp314-cp314-win32.whl", hash = "sha256:22693918177bd9ceabec4736d338045f357769416fc6b0b2508eefef75b08616" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c3/d4/98078064ccc76b45cb0f6c002452011e93c4bd26f6850344f0951cc1fe89/fonttools-4.63.0-cp314-cp314-win_amd64.whl", hash = "sha256:7d782fac32985914c351556f68ac0855391572bcd87de50e05970d3cd4c96fc5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/49/4e/652d1580c5f4e39f7d103b0c793e4773129ad633dce4addd0cf4dfebde02/fonttools-4.63.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:6db5140a60a5d731d21ec076745b40a310607731b0a565b50776393188649001" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0e/55/ad864c9a9b219f552eb46b32cd7906c466e5a578ba0c3abfcc0fe7413eb6/fonttools-4.63.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7d76edbff9014094dbf03bd2d074709dfa6ec7aba13d838c937a2b33d2d6a86e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ea/2b/0aa8db70f18cf52e49b4ed5ecec68547f981160bf5ded3b5aed6faa0a6f9/fonttools-4.63.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0eac00b9118c3c2f87d272e45341871c5b3066baa3c86897fa634a7c3fb59096" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7f/63/18e4369c25043096f1048e0c9915951adc4f842bd81c6b18155824d6fa99/fonttools-4.63.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:51394295f1a51de8b5f30bdb1e1b9a4231536c7064ef5c6e211eec19fa36036f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a1/3f/67f3eac2ffd8a98446c5022f8ed3864eac878a5ff7af8df4c8286dba16cc/fonttools-4.63.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9e12f105d2b6342c559c298afb674006bb2893afc7102dcf8a1b55b0486b4e40" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1a/ba/4e6214cb38a7b04779e97bb7636de9a5c7f20af7018d03dee0b64c08510a/fonttools-4.63.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:796f27556dbe094c4824f75ca85267e4df776c79036c8441469a4df37038c196" }, + { url = "https://mirrors.aliyun.com/pypi/packages/34/3b/214dcc19ee31d3d38fb5ad2755c11ef0514e5dc300bbaf41c0b69f393799/fonttools-4.63.0-cp314-cp314t-win32.whl", hash = "sha256:948428a275741f0b64b113c955425a953314f4b9ab9997f73a72c83e68e569c8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/dd/1e/3ff1a9b523058c2eeb6a9d50f5574e2a738200d0d94107d5bc4105e8da3f/fonttools-4.63.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6d4741eb179121cab9eea4cb2393d24492373a260d7945006358c08cfbf45419" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2c/47/c99d5268f354002ce80f8d029cd9d7d872969da1de8b93d32de4dc56d6f4/fonttools-4.63.0-py3-none-any.whl", hash = "sha256:445af2eab030a16b9171ea8bdda7ebf7d96bda2df88ee182a464252f6e05e20d" }, +] + +[[package]] +name = "fsspec" +version = "2026.6.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/10/a1/ae4e3e5003468d6391d2c77b6fa1cd73bd5d13511d81c642d7b28ac90ed4/fsspec-2026.6.0.tar.gz", hash = "sha256:f5bac145310fe30e16e1471bd6840b2d990d609e872251d7e674241822abf01a" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl", hash = "sha256:02e0b71817df9b2169dc30a16832045764def1191b43dcff5bb85bdee212d2a1" }, +] + +[[package]] +name = "gradio" +version = "6.20.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "anyio" }, + { name = "audioop-lts", marker = "python_full_version >= '3.13'" }, + { name = "brotli" }, + { name = "fastapi" }, + { name = "gradio-client" }, + { name = "groovy" }, + { name = "hf-gradio" }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "jinja2" }, + { name = "markupsafe" }, + { name = "numpy" }, + { name = "orjson" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pillow" }, + { name = "pydantic" }, + { name = "pydub" }, + { name = "python-multipart" }, + { name = "pytz" }, + { name = "pyyaml" }, + { name = "safehttpx" }, + { name = "semantic-version" }, + { name = "starlette" }, + { name = "tomlkit" }, + { name = "typer" }, + { name = "typing-extensions" }, + { name = "uvicorn" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/f8/96/3618f8a189180ab3d4e5f8b258fd92e419eda9f49b6ab4dd50c6782cda33/gradio-6.20.0.tar.gz", hash = "sha256:8672866e9225a1f8297325a6742bb525a3a0ddc8aa4d75d99beb10a27ea2915f" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/d7/f4/7dc4540836e326391a9d1ba20193d795d5a4582839b60f5c10397f5120bb/gradio-6.20.0-py3-none-any.whl", hash = "sha256:91d2ec29c37917d55b18dba87aa15bb15c4796d84dce9a9ef4ec7d87453a7fee" }, +] + +[[package]] +name = "gradio-client" +version = "2.5.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "fsspec" }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "packaging" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/e8/e6/6b6029f5fe2ad7f1211105d530e34d991014c2cae463f9223033031cfc4f/gradio_client-2.5.0.tar.gz", hash = "sha256:4cde99bad62149595c30c90876ca2e405e3a13687ecf895474f3412cb476673d" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/78/81/0a861b8e1ff42960139c6cd4c7dd591292fa09ea1ae2d87677441cba4c00/gradio_client-2.5.0-py3-none-any.whl", hash = "sha256:d43e2179c29076292a76485ad7ed2e6eaa19d14ac58283bd7f5beabfe4ca958c" }, +] + +[[package]] +name = "groovy" +version = "0.1.2" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/52/36/bbdede67400277bef33d3ec0e6a31750da972c469f75966b4930c753218f/groovy-0.1.2.tar.gz", hash = "sha256:25c1dc09b3f9d7e292458aa762c6beb96ea037071bf5e917fc81fb78d2231083" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl", hash = "sha256:7f7975bab18c729a257a8b1ae9dcd70b7cafb1720481beae47719af57c35fa64" }, +] + +[[package]] +name = "grpcio" +version = "1.83.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/0c/98/304898ac4e04e2d5e4e4c2eadc178b1f2a16d5f4bc2f91306c87d64680b9/grpcio-1.83.0.tar.gz", hash = "sha256:7674587248fbbb2ac6e4eecf83a8a0f3d91a928f941de571acfd3a2f007fbc24" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/15/2b/51e32514a4e9b715375c99721aadff0f24164cc2049b8269eda4de82a814/grpcio-1.83.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:28f6c35ac8fcf10e4594f138e468f194360089dde40d126a7033e863fc479930" }, + { url = "https://mirrors.aliyun.com/pypi/packages/39/33/b5b50fc2c6fbe350e04814047bb2d409feec7b36ef8b170254c050e06bc0/grpcio-1.83.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:33898e6a28e4ae598f1577cb1c4fec2a15c033d0ec52b9b45a09610dd045b9da" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7b/5f/734e72e7b9f79bcf0b2c270b8d3bca0e4ebb97a27a50d06240b145f6d41e/grpcio-1.83.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6fb8a1dd0c6f0f931e69e9d0dc6d1c406ed2a44fa963414eafba07b7fb685d16" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a4/17/a1735f215b2a5cd43c38b79eac072ad197e61be9829905b6b29550abd0db/grpcio-1.83.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:2b5e75c34842cd9c1b95285ca395c6a569664b81e3ffa6b714125922942abaaf" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b2/78/c9e81f806ac704b6b145cb01628db398985b1f8dfdc10e23b55fb0902b3d/grpcio-1.83.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeb339838db07600481ef869507279b75326c75eac6d10f7afa62a0da1d2bcdd" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9a/ba/94cd5af859876049d340480acbb61a959096c84b567f215534faa78d0424/grpcio-1.83.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f47d62808b4c0a97b78bff88a6d4ca283a2a492b9a04a87d814af95ca3b9c19c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3e/15/108d30d5a5c964312ae8b9cb0e8cc5b3c1cc68d8f757cca52b3565534d26/grpcio-1.83.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:62003babc444a606dcd1f009cd16391ce23669ae4ad6ec267a873da7937a69f5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ea/23/3828ae13c3db8233d123ad612747665817b952d8a954f32390230b582336/grpcio-1.83.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1aa567f8c3f19850ffd5d2858c9a8ea7c80f0db6c01186b71eb31e923ec984f5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/17/5b/77af31228f55f55a2a5112bb0077ad0a1c4d23dbb0c2853a62475bbdcc14/grpcio-1.83.0-cp312-cp312-win32.whl", hash = "sha256:cb2906c61db4f9c64cc360054b5df70eeb81846228e9e56a4944bd415a63dadc" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c0/da/f706e39550e7a3732ce2b9c5926107a93d74a802775b19b642a6df27dc96/grpcio-1.83.0-cp312-cp312-win_amd64.whl", hash = "sha256:1c699bbb20f143c8f2bff219de578aa2dc1f919399d67dc702b038b986ee62df" }, + { url = "https://mirrors.aliyun.com/pypi/packages/56/eb/135daaa713f32d33b8f99b4153b3f8dc3b2a124996ac15581bf9ebdad3c3/grpcio-1.83.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:6662f3b1e07cc7493d437351860dc867bddc6a93c83ecf33bbfdaf0c217ab2d0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8f/a1/121806ce69f23138dabe06aa595b0e5f1ae051a37e4c1954eed7d692c800/grpcio-1.83.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:74fe6f9e8a35c7dbf32255ee154d15e3e5338a81ed39173d079d594d2e544cd1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b0/e8/d0389e09cd6b4c4d3089b92967ae4e3ffd64795bd349bf2f85cd6656d3da/grpcio-1.83.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:10b3fa0475eb572c9a81a6fe37fa16a9c500c0c91cfc148cac15692b7e3c2867" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f8/51/f464c1d211fa50d5adbabe1b2e519948d99c13757052bfc9ea7afa28e284/grpcio-1.83.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:5f20a988480b0f28207f057f7f7ae1313393c3cef0adcfeae8248f9947eaf881" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e8/c0/539fe0832f2dd6500a28f5263071623fb34e8d4867aec632ccf81bd21156/grpcio-1.83.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7bd82671b39065ba18cd536e9cd45b27ff649053f81ddd2c6a966d595067080f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8c/ca/ccf617d37ffa72567fa8e005ec7090c99da922799be2fb9847c8b21ca18c/grpcio-1.83.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bc60215b5cb9fc8ca72942c498b551ac2305bd08f6ef8d4e3f0d21b64fbecd61" }, + { url = "https://mirrors.aliyun.com/pypi/packages/eb/b9/fd8d5245f823a8e0fd35d90e20ea3aa4acd47f8d5318fa8df307df52dec6/grpcio-1.83.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f1c3e5689d4b90987b1d72022bcfe866a9a3dc66197484cf856d96b6150e7f45" }, + { url = "https://mirrors.aliyun.com/pypi/packages/14/1e/f37632fc11db72dfa4bba86c3a43e54358e53030df111ecae5e91a733ad6/grpcio-1.83.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a21cb4eeeba124443f399be2e8b624943cde864dcbe588cb42e5c483a52a906c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/93/b6/d70b69ae5c0cfc341b9ba474980e4ed99cbf05c0e4a14e9eee8cb73db0a5/grpcio-1.83.0-cp313-cp313-win32.whl", hash = "sha256:8fe04f1050a59f875601eb55d42b4f66946fe89817f967e34db1462ccd07dadf" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0f/13/45d4cccb555cf4c476226979bf3d2fd0b0254216f7564c3a053e35117efc/grpcio-1.83.0-cp313-cp313-win_amd64.whl", hash = "sha256:6e01ecd9d8ef280abe1365138a4dc318f9a5287f4cb1b41d07816f796653f735" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9c/60/f2cca8147ea213d3e43ae9158d03ad04e020fdf32ff027253e1fe93f921d/grpcio-1.83.0-cp314-cp314-linux_armv7l.whl", hash = "sha256:3f351629f6ae16ecc0ec3553e586a6763ffd9f6114044286d0cbec3e09241bfa" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d0/ab/d3874931d123a95e83a3ebf8aa04537988fb62425cedb8bf3cefc5ad41b2/grpcio-1.83.0-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:d05ff664100d429335b93c91b8b34ddf9e94a112205e7fa06dede309e44a4e4c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/92/ff/6f18f9426b69306f4e00a9add3b0ee2748da8aad53836ef80cab0d62d04f/grpcio-1.83.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7936f2a56cf04f6514705c0fedf400971de01b6aa1719327e4718f410a765e2b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/70/21/706d1147c6b93b98f179240c13991fbcc56880eba0c868abb1ad40d8a0a6/grpcio-1.83.0-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:b0a0be840e51b6b7ee9df9269770faf77bdf4b771053c257c21d12bad607714c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/74/04/1a8443c889115ec9e213a213e86bc93a71ee9088027e5befa09aaa0edd9d/grpcio-1.83.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:009667eaf3dcd5224c713589cdc98e7ca4ed0ff0b61132c6b276e930eb83a2df" }, + { url = "https://mirrors.aliyun.com/pypi/packages/86/c6/94e0fee5b12bc1da1370185b680988db6f739d19b42d9959db01a7ea50bf/grpcio-1.83.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:bb669918fd88936b15599caff4160a77ab74bdeb25f2231f6e45b61282d6107b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a0/97/de1ccb671fb85575bc5192faedf9ecdbdf5b390d2e6584dcf552bcbd370e/grpcio-1.83.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c19b454d3d3f28db81f2c7c4dbaee96e7f6fd149721733ffe79d6bc530f17404" }, + { url = "https://mirrors.aliyun.com/pypi/packages/17/0f/0e0ec749a7034ffcbaa050e39779872950ead90c22e7e0116be3f28b2b46/grpcio-1.83.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:61007cd08640abc5c54547ee32505474c482cd733a53cb87551ea81faa6350af" }, + { url = "https://mirrors.aliyun.com/pypi/packages/83/fa/c3fda157287f64bc65acee6c5aa90c41acf9e0d3a8e69a265eecff6d00a1/grpcio-1.83.0-cp314-cp314-win32.whl", hash = "sha256:32e11c37f5285b0c6fa3042c05fe06903696689749833fc64e67dec71b9bbe33" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a1/00/b1b26431c9d54eee11724fd6e5585473a2ed47fbc1fb95e5204906a642ce/grpcio-1.83.0-cp314-cp314-win_amd64.whl", hash = "sha256:2bb48cb5e6dd005ca12b89ce4b6ac0b48ff3112c747542ee7986ef611a8ca6d9" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" }, +] + +[[package]] +name = "hf-gradio" +version = "0.4.1" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "gradio-client" }, + { name = "typer" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/ce/86/c9694b7cfada5780e75769e60dc161a161f4dd7fc91b61db5e3a3338bef9/hf_gradio-0.4.1.tar.gz", hash = "sha256:a017d942618f0d495a58ee4563047fa04bef614c00e0cb789a9a6d0633cffa7b" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/30/2d/afff2ee87e75d8eb85c92bb8cf0e15b05c23c2ebd8fd8dec781d8601ed7f/hf_gradio-0.4.1-py3-none-any.whl", hash = "sha256:76b8cb8be6abe62d74c1ad2d35b42f0629db89aa9e1a8d033cecfe7c856eeab3" }, +] + +[[package]] +name = "hf-xet" +version = "1.5.2" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/63/39/67be8d71f900d9a55761b6022821d6679fb56c64f1b6063d5af2c2606727/hf_xet-1.5.2.tar.gz", hash = "sha256:73044bd31bae33c984af832d19c752a0dffb67518fee9ddbd91d616e1101cf47" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/29/be/525eabac5d1736b679c39e342ecd4292534012546a2d18f0043c8e3b6021/hf_xet-1.5.2-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:4a5ecb9cda8512ba2aa8ee5d37c87a1422992165892d653098c7b90247481c3b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c5/3f/699749dd78442480eda4e4fca494284b0e3542e4063cc37654d5fdc929e6/hf_xet-1.5.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8764488197c1d7b1378c8438c18d2eea902e150dbca0b0f0d2d32603fb9b5576" }, + { url = "https://mirrors.aliyun.com/pypi/packages/22/d7/2658ac0a5b9f4664ca27ce31bd015044fe9dea50ed455fb5197aba819c11/hf_xet-1.5.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8d7446f72abbf7e01ca5ff131786bc2e74a56393462c17a6bf1e303fbab81db4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d9/58/8343f3cb63c8fa058d576136df3871550f7d5214a8f048a7ea2eab6ac906/hf_xet-1.5.2-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:580e59e29bf37aece1f2b68537de1e3fb04f43a23d910dcf6f128280b5bfbba4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0c/33/a968f4e4535037b36941ec00714625fb60e026302407e7e26ca9f3e65f4e/hf_xet-1.5.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bee28c619622d36968056532fd49cf2b35ca75099b1d616c31a618a893491380" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7b/d9/9e33981173dbaf194ba0015202b02d467b624d44d4eba89e1bf06c0d2995/hf_xet-1.5.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e396ab0faf6298199ad7a95305c3ca8498cb825978a6485be6d00587ee4ec577" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e9/4b/cc682832de4264a03880a2d1b5ec3e1fab3bf307f508817250baafdb9996/hf_xet-1.5.2-cp314-cp314t-win_amd64.whl", hash = "sha256:fd3add255549e8ef58fa35b2e42dc016961c050600444e7d77d030ba6b57120e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ea/09/b2cdf2a0fb39a08af3222b96092a36bd3b40c54123eef07de4422e870971/hf_xet-1.5.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d6f9c58549407b84b9a5383afd68db0acc42345326a3159990b36a5ca8a20e4e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/de/ba/2b70603c7552db82baeb2623e2336898304a17328845151be4fe1f48d420/hf_xet-1.5.2-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:f922b8f5fb84f1dd3d7ab7a1316354a1bca9b1c73ecfc19c76e51a2a49d29799" }, + { url = "https://mirrors.aliyun.com/pypi/packages/60/ac/b097a86a1e4a6098f3a79382643ab09d5733d87ccc864877ad1e12b49b70/hf_xet-1.5.2-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:045f84440c55cdeb659cf1a1dd48c77bcd0d2e93632e2fea8f2c3bdee79f38ed" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d3/35/db860aa3a0780660324a506ad4b3d322ddc6ecbba4b9340aed0942cbf21c/hf_xet-1.5.2-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:db78c39c83d6279daddc98e2238f373ab8980685556d42472b4ec51abcf03e8c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/af/6b/832dd980af4b0c3ae0660e309285f2ffcdff2faa38129390dbb47aa4a3f9/hf_xet-1.5.2-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7db73c810500c54c6760be8c39d4b2e476974de85424c50063efc22fdda13025" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9e/05/ae50f0d34e3254e6c3e208beb2519f6b8673016fc4b3643badaf6450d186/hf_xet-1.5.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6395cfe3c9cbead4f16b31808b0e67eac428b66c656f856e99636adaddea878f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/07/a9/c050bc2743a2bcd68928bfee157b08681667a164a24ec95fbfcfcd717e08/hf_xet-1.5.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:cde8cd167126bb6109b2ceb19b844433a4988643e8f3e01dd9dd0e4a34535097" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e9/f8/68b01c5c2edb56ac9a67b3d076ffddcb90867abaee923923eb34e7a14e76/hf_xet-1.5.2-cp38-abi3-win_amd64.whl", hash = "sha256:ecf63d1cb69a9a7319910f8f83fcf9b46e7a32dfcf4b8f8eeddb55f647306e65" }, + { url = "https://mirrors.aliyun.com/pypi/packages/39/c6/988383e9dc17294d536fcbcd6fd16eed882e411ad16c954984a53e47b09c/hf_xet-1.5.2-cp38-abi3-win_arm64.whl", hash = "sha256:1da28519496eb7c8094c11e4d25509b4a468457a0302d58136099db2fd9a671d" }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55" }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad" }, +] + +[[package]] +name = "huggingface-hub" +version = "1.24.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "click" }, + { name = "filelock" }, + { name = "fsspec" }, + { name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, + { name = "httpx" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/df/9b/d3bb4e7d792835daf34dd7091bbc7d7b4e0437d9388f1ea7239cce49f478/huggingface_hub-1.24.0.tar.gz", hash = "sha256:18431ff4daae0749aa9ba102fc952e314c98e1d30ebdec5319d85ca0a83e1ae5" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/5f/c3/aeaaf3911d2529614be18d1c8b5496afc185560e76568063d517283318af/huggingface_hub-1.24.0-py3-none-any.whl", hash = "sha256:6ed4120a84a6beec900640aa7e346bd766a6b7341e41526fef5dc8bd81fb7d59" }, +] + +[[package]] +name = "idna" +version = "3.18" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12" }, +] + +[[package]] +name = "itsdangerous" +version = "2.2.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/9c/cb/8ac0172223afbccb63986cc25049b154ecfb5e85932587206f42317be31d/itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" }, +] + +[[package]] +name = "joblib" +version = "1.5.3" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/41/f2/d34e8b3a08a9cc79a50b2208a93dce981fe615b64d5a4d4abee421d898df/joblib-1.5.3.tar.gz", hash = "sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl", hash = "sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713" }, +] + +[[package]] +name = "kiwisolver" +version = "1.5.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/d0/67/9c61eccb13f0bdca9307614e782fec49ffdde0f7a2314935d489fa93cd9c/kiwisolver-1.5.0.tar.gz", hash = "sha256:d4193f3d9dc3f6f79aaed0e5637f45d98850ebf01f7ca20e69457f3e8946b66a" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/4d/b2/818b74ebea34dabe6d0c51cb1c572e046730e64844da6ed646d5298c40ce/kiwisolver-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:4e9750bc21b886308024f8a54ccb9a2cc38ac9fa813bf4348434e3d54f337ff9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/bf/d9/405320f8077e8e1c5c4bd6adc45e1e6edf6d727b6da7f2e2533cf58bff71/kiwisolver-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:72ec46b7eba5b395e0a7b63025490d3214c11013f4aacb4f5e8d6c3041829588" }, + { url = "https://mirrors.aliyun.com/pypi/packages/99/9f/795fedf35634f746151ca8839d05681ceb6287fbed6cc1c9bf235f7887c2/kiwisolver-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ed3a984b31da7481b103f68776f7128a89ef26ed40f4dc41a2223cda7fb24819" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bb5136fb5352d3f422df33f0c879a1b0c204004324150cc3b5e3c4f310c9049f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c8/2f/cebfcdb60fd6a9b0f6b47a9337198bcbad6fbe15e68189b7011fd914911f/kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2af221f268f5af85e776a73d62b0845fc8baf8ef0abfae79d29c77d0e776aaf" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f2/0d/9b782923aada3fafb1d6b84e13121954515c669b18af0c26e7d21f579855/kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b0f172dc8ffaccb8522d7c5d899de00133f2f1ca7b0a49b7da98e901de87bf2d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/27/70/83241b6634b04fe44e892688d5208332bde130f38e610c0418f9ede47ded/kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6ab8ba9152203feec73758dad83af9a0bbe05001eb4639e547207c40cfb52083" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e4/db/30ed226fb271ae1a6431fc0fe0edffb2efe23cadb01e798caeb9f2ceae8f/kiwisolver-1.5.0-cp312-cp312-manylinux_2_39_riscv64.whl", hash = "sha256:cdee07c4d7f6d72008d3f73b9bf027f4e11550224c7c50d8df1ae4a37c1402a6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ec/bd/c314595208e4c9587652d50959ead9e461995389664e490f4dce7ff0f782/kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7c60d3c9b06fb23bd9c6139281ccbdc384297579ae037f08ae90c69f6845c0b1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c1/43/0499cec932d935229b5543d073c2b87c9c22846aab48881e9d8d6e742a2d/kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e315e5ec90d88e140f57696ff85b484ff68bb311e36f2c414aa4286293e6dee0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3d/6f/79b0d760907965acfd9d61826a3d41f8f093c538f55cd2633d3f0db269f6/kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:1465387ac63576c3e125e5337a6892b9e99e0627d52317f3ca79e6930d889d15" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ab/31/01d0537c41cb75a551a438c3c7a80d0c60d60b81f694dac83dd436aec0d0/kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:530a3fd64c87cffa844d4b6b9768774763d9caa299e9b75d8eca6a4423b31314" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e4/34/8aefdd0be9cfd00a44509251ba864f5caf2991e36772e61c408007e7f417/kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1d9daea4ea6b9be74fe2f01f7fbade8d6ffab263e781274cffca0dba9be9eec9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ad/cf/0348374369ca588f8fe9c338fae49fa4e16eeb10ffb3d012f23a54578a9e/kiwisolver-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:f18c2d9782259a6dc132fdc7a63c168cbc74b35284b6d75c673958982a378384" }, + { url = "https://mirrors.aliyun.com/pypi/packages/28/26/192b26196e2316e2bd29deef67e37cdf9870d9af8e085e521afff0fed526/kiwisolver-1.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:f7c7553b13f69c1b29a5bde08ddc6d9d0c8bfb84f9ed01c30db25944aeb852a7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9d/69/024d6711d5ba575aa65d5538042e99964104e97fa153a9f10bc369182bc2/kiwisolver-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:fd40bb9cd0891c4c3cb1ddf83f8bbfa15731a248fdc8162669405451e2724b09" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ce/48/adbb40df306f587054a348831220812b9b1d787aff714cfbc8556e38fccd/kiwisolver-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c0e1403fd7c26d77c1f03e096dc58a5c726503fa0db0456678b8668f76f521e3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a8/3a/d0a972b34e1c63e2409413104216cd1caa02c5a37cb668d1687d466c1c45/kiwisolver-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dda366d548e89a90d88a86c692377d18d8bd64b39c1fb2b92cb31370e2896bbd" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2b/0a/7b98e1e119878a27ba8618ca1e18b14f992ff1eda40f47bccccf4de44121/kiwisolver-1.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:332b4f0145c30b5f5ad9374881133e5aa64320428a57c2c2b61e9d891a51c2f3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/18/d8/55638d89ffd27799d5cc3d8aa28e12f4ce7a64d67b285114dbedc8ea4136/kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c50b89ffd3e1a911c69a1dd3de7173c0cd10b130f56222e57898683841e4f96" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b8/97/b4c8d0d18421ecceba20ad8701358453b88e32414e6f6950b5a4bad54e65/kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4db576bb8c3ef9365f8b40fe0f671644de6736ae2c27a2c62d7d8a1b4329f099" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c4/10/f862f94b6389d8957448ec9df59450b81bec4abb318805375c401a1e6892/kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0b85aad90cea8ac6797a53b5d5f2e967334fa4d1149f031c4537569972596cb8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a3/6a/f1650af35821eaf09de398ec0bc2aefc8f211f0cda50204c9f1673741ba9/kiwisolver-1.5.0-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:d36ca54cb4c6c4686f7cbb7b817f66f5911c12ddb519450bbe86707155028f87" }, + { url = "https://mirrors.aliyun.com/pypi/packages/de/19/d7fb82984b9238115fe629c915007be608ebd23dc8629703d917dbfaffd4/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:38f4a703656f493b0ad185211ccfca7f0386120f022066b018eb5296d8613e23" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7f/b9/46b7f386589fd222dac9e9de9c956ce5bcefe2ee73b4e79891381dda8654/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ac2360e93cb41be81121755c6462cff3beaa9967188c866e5fce5cf13170859" }, + { url = "https://mirrors.aliyun.com/pypi/packages/92/8b/95e237cf3d9c642960153c769ddcbe278f182c8affb20cecc1cc983e7cc5/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c95cab08d1965db3d84a121f1c7ce7479bdd4072c9b3dafd8fecce48a2e6b902" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1b/95/980c9df53501892784997820136c01f62bc1865e31b82b9560f980c0e649/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fc20894c3d21194d8041a28b65622d5b86db786da6e3cfe73f0c762951a61167" }, + { url = "https://mirrors.aliyun.com/pypi/packages/cb/32/900647fd0840abebe1561792c6b31e6a7c0e278fc3973d30572a965ca14c/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7a32f72973f0f950c1920475d5c5ea3d971b81b6f0ec53b8d0a956cc965f22e0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/be/8a/be60e3bbcf513cc5a50f4a3e88e1dcecebb79c1ad607a7222877becaa101/kiwisolver-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bf3acf1419fa93064a4c2189ac0b58e3be7872bf6ee6177b0d4c63dc4cea276" }, + { url = "https://mirrors.aliyun.com/pypi/packages/4d/d2/64be2e429eb4fca7f7e1c52a91b12663aeaf25de3895e5cca0f47ef2a8d0/kiwisolver-1.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:fa8eb9ecdb7efb0b226acec134e0d709e87a909fa4971a54c0c4f6e88635484c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b0/69/ce68dd0c85755ae2de490bf015b62f2cea5f6b14ff00a463f9d0774449ff/kiwisolver-1.5.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:db485b3847d182b908b483b2ed133c66d88d49cacf98fd278fadafe11b4478d1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/74/aa/937aac021cf9d4349990d47eb319309a51355ed1dbdc9c077cdc9224cb11/kiwisolver-1.5.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:be12f931839a3bdfe28b584db0e640a65a8bcbc24560ae3fdb025a449b3d754e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ee/20/3a87fbece2c40ad0f6f0aefa93542559159c5f99831d596050e8afae7a9f/kiwisolver-1.5.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:16b85d37c2cbb3253226d26e64663f755d88a03439a9c47df6246b35defbdfb7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f0/7f/f943879cda9007c45e1f7dba216d705c3a18d6b35830e488b6c6a4e7cdf0/kiwisolver-1.5.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4432b835675f0ea7414aab3d37d119f7226d24869b7a829caeab49ebda407b0c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/37/f8/4d4f85cc1870c127c88d950913370dd76138482161cd07eabbc450deff01/kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b0feb50971481a2cc44d94e88bdb02cdd497618252ae226b8eb1201b957e368" }, + { url = "https://mirrors.aliyun.com/pypi/packages/04/0b/65dd2916c84d252b244bd405303220f729e7c17c9d7d33dca6feeff9ffc4/kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:56fa888f10d0f367155e76ce849fa1166fc9730d13bd2d65a2aa13b6f5424489" }, + { url = "https://mirrors.aliyun.com/pypi/packages/39/5c/2606a373247babce9b1d056c03a04b65f3cf5290a8eac5d7bdead0a17e21/kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:940dda65d5e764406b9fb92761cbf462e4e63f712ab60ed98f70552e496f3bf1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d5/d1/c6078b5756670658e9192a2ef11e939c92918833d2745f85cd14a6004bdf/kiwisolver-1.5.0-cp313-cp313t-manylinux_2_39_riscv64.whl", hash = "sha256:89fc958c702ee9a745e4700378f5d23fddbc46ff89e8fdbf5395c24d5c1452a3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/cb/c8/7def6ddf16eb2b3741d8b172bdaa9af882b03c78e9b0772975408801fa63/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9027d773c4ff81487181a925945743413f6069634d0b122d0b37684ccf4f1e18" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9e/87/2ac1fce0eb1e616fcd3c35caa23e665e9b1948bb984f4764790924594128/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:5b233ea3e165e43e35dba1d2b8ecc21cf070b45b65ae17dd2747d2713d942021" }, + { url = "https://mirrors.aliyun.com/pypi/packages/67/13/c6700ccc6cc218716bfcda4935e4b2997039869b4ad8a94f364c5a3b8e63/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:ce9bf03dad3b46408c08649c6fbd6ca28a9fce0eb32fdfffa6775a13103b5310" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1b/bd/877056304626943ff0f1f44c08f584300c199b887cb3176cd7e34f1515f1/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:fc4d3f1fb9ca0ae9f97b095963bc6326f1dbfd3779d6679a1e016b9baaa153d3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/75/19/c60626c47bf0f8ac5dcf72c6c98e266d714f2fbbfd50cf6dab5ede3aaa50/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f443b4825c50a51ee68585522ab4a1d1257fac65896f282b4c6763337ac9f5d2" }, + { url = "https://mirrors.aliyun.com/pypi/packages/47/84/6a6d5e5bb8273756c27b7d810d47f7ef2f1f9b9fd23c9ee9a3f8c75c9cef/kiwisolver-1.5.0-cp313-cp313t-win_arm64.whl", hash = "sha256:893ff3a711d1b515ba9da14ee090519bad4610ed1962fbe298a434e8c5f8db53" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e4/d7/060f45052f2a01ad5762c8fdecd6d7a752b43400dc29ff75cd47225a40fd/kiwisolver-1.5.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8df31fe574b8b3993cc61764f40941111b25c2d9fea13d3ce24a49907cd2d615" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c2/a7/78da680eadd06ff35edef6ef68a1ad273bad3e2a0936c9a885103230aece/kiwisolver-1.5.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1d49a49ac4cbfb7c1375301cd1ec90169dfeae55ff84710d782260ce77a75a02" }, + { url = "https://mirrors.aliyun.com/pypi/packages/49/b2/97980f3ad4fae37dd7fe31626e2bf75fbf8bdf5d303950ec1fab39a12da8/kiwisolver-1.5.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0cbe94b69b819209a62cb27bdfa5dc2a8977d8de2f89dfd97ba4f53ed3af754e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e7/f9/b06c934a6aa8bc91f566bd2a214fd04c30506c2d9e2b6b171953216a65b6/kiwisolver-1.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:80aa065ffd378ff784822a6d7c3212f2d5f5e9c3589614b5c228b311fd3063ac" }, + { url = "https://mirrors.aliyun.com/pypi/packages/6b/f0/f768ae564a710135630672981231320bc403cf9152b5596ec5289de0f106/kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e7f886f47ab881692f278ae901039a234e4025a68e6dfab514263a0b1c4ae05" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e2/9f/1de7aad00697325f05238a5f2eafbd487fb637cc27a558b5367a5f37fb7f/kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5060731cc3ed12ca3a8b57acd4aeca5bbc2f49216dd0bec1650a1acd89486bcd" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5a/c2/297f25141d2e468e0ce7f7a7b92e0cf8918143a0cbd3422c1ad627e85a06/kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7a4aa69609f40fce3cbc3f87b2061f042eee32f94b8f11db707b66a26461591a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b9/d3/f4c73a02eb41520c47610207b21afa8cdd18fdbf64ffd94674ae21c4812d/kiwisolver-1.5.0-cp314-cp314-manylinux_2_39_riscv64.whl", hash = "sha256:d168fda2dbff7b9b5f38e693182d792a938c31db4dac3a80a4888de603c99554" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7b/46/d3f2efef7732fcda98d22bf4ad5d3d71d545167a852ca710a494f4c15343/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:413b820229730d358efd838ecbab79902fe97094565fdc80ddb6b0a18c18a581" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3f/ec/2d9756bf2b6d26ae4349b8d3662fb3993f16d80c1f971c179ce862b9dbae/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:5124d1ea754509b09e53738ec185584cc609aae4a3b510aaf4ed6aa047ef9303" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8f/9f/876a0a0f2260f1bde92e002b3019a5fabc35e0939c7d945e0fa66185eb20/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e4415a8db000bf49a6dd1c478bf70062eaacff0f462b92b0ba68791a905861f9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/6c/4f/ba3624dfac23a64d54ac4179832860cb537c1b0af06024936e82ca4154a0/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d618fd27420381a4f6044faa71f46d8bfd911bd077c555f7138ed88729bfbe79" }, + { url = "https://mirrors.aliyun.com/pypi/packages/39/b7/97716b190ab98911b20d10bf92eca469121ec483b8ce0edd314f51bc85af/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5092eb5b1172947f57d6ea7d89b2f29650414e4293c47707eb499ec07a0ac796" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a3/36/4e551e8aa55c9188bca9abb5096805edbf7431072b76e2298e34fd3a3008/kiwisolver-1.5.0-cp314-cp314-win_amd64.whl", hash = "sha256:d76e2d8c75051d58177e762164d2e9ab92886534e3a12e795f103524f221dd8e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/70/15/9b90f7df0e31a003c71649cf66ef61c3c1b862f48c81007fa2383c8bd8d7/kiwisolver-1.5.0-cp314-cp314-win_arm64.whl", hash = "sha256:fa6248cd194edff41d7ea9425ced8ca3a6f838bfb295f6f1d6e6bb694a8518df" }, + { url = "https://mirrors.aliyun.com/pypi/packages/17/01/7dc8c5443ff42b38e72731643ed7cf1ed9bf01691ae5cdca98501999ed83/kiwisolver-1.5.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d1ffeb80b5676463d7a7d56acbe8e37a20ce725570e09549fe738e02ca6b7e1e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/46/8a/b4ebe46ebaac6a303417fab10c2e165c557ddaff558f9699d302b256bc53/kiwisolver-1.5.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:bc4d8e252f532ab46a1de9349e2d27b91fce46736a9eedaa37beaca66f574ed4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/60/35/10a844afc5f19d6f567359bf4789e26661755a2f36200d5d1ed8ad0126e5/kiwisolver-1.5.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6783e069732715ad0c3ce96dbf21dbc2235ab0593f2baf6338101f70371f4028" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f8/8a/685b297052dd041dcebce8e8787b58923b6e78acc6115a0dc9189011c44b/kiwisolver-1.5.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e7c4c09a490dc4d4a7f8cbee56c606a320f9dc28cf92a7157a39d1ce7676a657" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9e/80/04865e3d4638ac5bddec28908916df4a3075b8c6cc101786a96803188b96/kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a075bd7bd19c70cf67c8badfa36cf7c5d8de3c9ddb8420c51e10d9c50e94920" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ba/01/77a19cacc0893fa13fafa46d1bba06fb4dc2360b3292baf4b56d8e067b24/kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bdd3e53429ff02aa319ba59dfe4ceeec345bf46cf180ec2cf6fd5b942e7975e9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/53/39/bcaf5d0cca50e604cfa9b4e3ae1d64b50ca1ae5b754122396084599ef903/kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cdcb35dc9d807259c981a85531048ede628eabcffb3239adf3d17463518992d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d0/7a/72c187abc6975f6978c3e39b7cf67aeb8b3c0a8f9790aa7fd412855e9e1f/kiwisolver-1.5.0-cp314-cp314t-manylinux_2_39_riscv64.whl", hash = "sha256:70d593af6a6ca332d1df73d519fddb5148edb15cd90d5f0155e3746a6d4fcc65" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c7/ca/cf5b25783ebbd59143b4371ed0c8428a278abe68d6d0104b01865b1bbd0f/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:377815a8616074cabbf3f53354e1d040c35815a134e01d7614b7692e4bf8acfa" }, + { url = "https://mirrors.aliyun.com/pypi/packages/4a/e5/b1f492adc516796e88751282276745340e2a72dcd0d36cf7173e0daf3210/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0255a027391d52944eae1dbb5d4cc5903f57092f3674e8e544cdd2622826b3f0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e6/e5/9b21fbe91a61b8f409d74a26498706e97a48008bfcd1864373d32a6ba31c/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:012b1eb16e28718fa782b5e61dc6f2da1f0792ca73bd05d54de6cb9561665fc9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b1/02/83f47986138310f95ea95531f851b2a62227c11cbc3e690ae1374fe49f0f/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:0e3aafb33aed7479377e5e9a82e9d4bf87063741fc99fc7ae48b0f16e32bdd6f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/07/18/43a5f24608d8c313dd189cf838c8e68d75b115567c6279de7796197cfb6a/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e7a116ae737f0000343218c4edf5bd45893bfeaff0993c0b215d7124c9f77646" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3b/b5/98222136d839b8afabcaa943b09bd05888c2d36355b7e448550211d1fca4/kiwisolver-1.5.0-cp314-cp314t-win_amd64.whl", hash = "sha256:1dd9b0b119a350976a6d781e7278ec7aca0b201e1a9e2d23d9804afecb6ca681" }, + { url = "https://mirrors.aliyun.com/pypi/packages/99/a2/ca7dc962848040befed12732dff6acae7fb3c4f6fc4272b3f6c9a30b8713/kiwisolver-1.5.0-cp314-cp314t-win_arm64.whl", hash = "sha256:58f812017cd2985c21fbffb4864d59174d4903dd66fa23815e74bbc7a0e2dd57" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1c/fa/2910df836372d8761bb6eff7d8bdcb1613b5c2e03f260efe7abe34d388a7/kiwisolver-1.5.0-graalpy312-graalpy250_312_native-macosx_10_13_x86_64.whl", hash = "sha256:5ae8e62c147495b01a0f4765c878e9bfdf843412446a247e28df59936e99e797" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0f/41/c5f71f9f00aabcc71fee8b7475e3f64747282580c2fe748961ba29b18385/kiwisolver-1.5.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:f6764a4ccab3078db14a632420930f6186058750df066b8ea2a7106df91d3203" }, + { url = "https://mirrors.aliyun.com/pypi/packages/fa/06/7399a607f434119c6e1fdc8ec89a8d51ccccadf3341dee4ead6bd14caaf5/kiwisolver-1.5.0-graalpy312-graalpy250_312_native-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c31c13da98624f957b0fb1b5bae5383b2333c2c3f6793d9825dd5ce79b525cb7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b5/91/53255615acd2a1eaca307ede3c90eb550bae9c94581f8c00081b6b1c8f44/kiwisolver-1.5.0-graalpy312-graalpy250_312_native-win_amd64.whl", hash = "sha256:1f1489f769582498610e015a8ef2d36f28f505ab3096d0e16b4858a9ec214f57" }, +] + +[[package]] +name = "lazy-loader" +version = "0.5" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/49/ac/21a1f8aa3777f5658576777ea76bfb124b702c520bbe90edf4ae9915eafa/lazy_loader-0.5.tar.gz", hash = "sha256:717f9179a0dbed357012ddad50a5ad3d5e4d9a0b8712680d4e687f5e6e6ed9b3" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl", hash = "sha256:ab0ea149e9c554d4ffeeb21105ac60bed7f3b4fd69b1d2360a4add51b170b005" }, +] + +[[package]] +name = "librosa" +version = "0.11.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "audioread" }, + { name = "decorator" }, + { name = "joblib" }, + { name = "lazy-loader" }, + { name = "msgpack" }, + { name = "numba" }, + { name = "numpy" }, + { name = "pooch" }, + { name = "scikit-learn" }, + { name = "scipy" }, + { name = "soundfile" }, + { name = "soxr" }, + { name = "standard-aifc", marker = "python_full_version >= '3.13'" }, + { name = "standard-sunau", marker = "python_full_version >= '3.13'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/64/36/360b5aafa0238e29758729e9486c6ed92a6f37fa403b7875e06c115cdf4a/librosa-0.11.0.tar.gz", hash = "sha256:f5ed951ca189b375bbe2e33b2abd7e040ceeee302b9bbaeeffdfddb8d0ace908" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/b5/ba/c63c5786dfee4c3417094c4b00966e61e4a63efecee22cb7b4c0387dda83/librosa-0.11.0-py3-none-any.whl", hash = "sha256:0b6415c4fd68bff4c29288abe67c6d80b587e0e1e2cfb0aad23e4559504a7fa1" }, +] + +[[package]] +name = "llvmlite" +version = "0.48.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/dc/a0/acc8ffcd5bdc63df0097e22c719bfcd61b604358343089313a8aebbb24ab/llvmlite-0.48.0.tar.gz", hash = "sha256:543b19f9ef8f3c7c60d1468191e4ee1b1537bf9f8a3d56f64c0ddd98de92edd2" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/92/a2/28696a9e61e245d1a79816d29d106692a90a2b6e7d78c98b326db70827af/llvmlite-0.48.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:d66c3beb4209087ddd4cf4ed2a0856b6887e6a913bdcf1aacfec9851cf2cba4e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/80/f2/72409351db66d0a317ec5087e076f31fb7b773a640db8a90ce6b5cac9edd/llvmlite-0.48.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:416fa4c2c66c2c6dc6d0a402648c19206e548efa0aa1eff01ad5cdad0af8217d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3a/27/5ae2f3722606360480707adb47f001ad89df8251d06b14ee80336e660b66/llvmlite-0.48.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f5e5a5131045b72345c71062ea1a91910dde913792b6c9b28ebb2c1c0a712e98" }, + { url = "https://mirrors.aliyun.com/pypi/packages/16/78/d824ffff7521cd140dc2006e44ce2bc82e64b48d1b32e90e956308c85a74/llvmlite-0.48.0-cp312-cp312-win_amd64.whl", hash = "sha256:d45c7541a80934ec6d8ab0defe67439494ecd2193cbf852a44ba827808976ac1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9c/23/fe9316d14626b42c73ef0b502e724705a6ee9450afe53759c0a99c37c2d7/llvmlite-0.48.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a83a99ef0c05b4ccddf9b6218ed9fe84b653a0caf7c1d9dbe148d6d16c67f518" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1b/4a/90715fa12006d681270b08d881195b6fab3ec39572e048764a1f7f59fed7/llvmlite-0.48.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8761b9e522f55207e24424fcd98370289eec2710bf8e915c82d1053f642450dc" }, + { url = "https://mirrors.aliyun.com/pypi/packages/70/5e/7b3e20d64650ca3c80af0cdb664ec4b575ec83d9d4dd05bea8bd31f9bbb6/llvmlite-0.48.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2fe5cb59b2063bfa039dcb8ca6481c0181bf552f340d10dcf61d7996a665556e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/17/97/5a430055d1838cf1fb7a01cfa943300f5e4c026fc6333a522c5e4a03b0c1/llvmlite-0.48.0-cp313-cp313-win_amd64.whl", hash = "sha256:91c7e24e74cde3f02b88aa5acca678373f9e069f3b98531b3dbb3a142d9d10bb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8d/8e/8170f2e0c217f88069c333d85bb976e536b332aecfcce606ddbdb249385f/llvmlite-0.48.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:321f1ac39b462603f0b589751aecf2d237d056f6d005749c1752b6f23ec3f074" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d6/e1/05b50692b647cac3c18200ac485b04f342f00ed173c9cc46767274469a15/llvmlite-0.48.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:05f0103c8f2f96a37441337e3643863c01b8e83e530aff38960dcb383c54a065" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f7/c3/470b8c4ff9ae2db2f9cf5c3e73de76ed908a32788ae9eb5602d43e6a476b/llvmlite-0.48.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:37d66fae72802175b0bfe1ea06e624b51e2d7aee6c3c34bbd09739b8f88e8e0b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c9/2d/6a5171fb7236ac0895e1a02ccba3735bf291e8597239aa6421894d3c0ba8/llvmlite-0.48.0-cp314-cp314-win_amd64.whl", hash = "sha256:966dcab0a598e2bd8fb5f2cc082cf7b07bae564fc485a3a8692393caf986facf" }, + { url = "https://mirrors.aliyun.com/pypi/packages/94/e3/7a93e09c9f94e637ca90209ceef0334a9a1d45b0bdb7c92ff922d25d6187/llvmlite-0.48.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:7a5c413317050a1d67c34708bde97707f9b2257ef1017f7532d21fe7d9a9ff30" }, + { url = "https://mirrors.aliyun.com/pypi/packages/27/98/a29133b4728671a175f7d616fab8b1c6e1d8c269d1523581d3160697bfb1/llvmlite-0.48.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1d9f952dff6c350c529997423d4fa43abae9722a884ac7ffafc37a3af676e7db" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1a/cf/7aac11a1f1c7ec54b60c7f6814e87561fb6b55b2f290455d7941eb113420/llvmlite-0.48.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:054aa7d46595935565f276cf0c1659b4f10929c996dd4a606875fae26fba2a23" }, + { url = "https://mirrors.aliyun.com/pypi/packages/db/41/b96f440c7df5ebba07872cad4e30fbc3560387755b1ea0b629adb76d5ca8/llvmlite-0.48.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d0b3c61aac83b42fb48cc96bffbf57c81b82b2aa92276b7ed6420c814629a99a" }, +] + +[[package]] +name = "markdown" +version = "3.10.2" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.2.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219" }, + { url = "https://mirrors.aliyun.com/pypi/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12" }, + { url = "https://mirrors.aliyun.com/pypi/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed" }, + { url = "https://mirrors.aliyun.com/pypi/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73" }, + { url = "https://mirrors.aliyun.com/pypi/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37" }, + { url = "https://mirrors.aliyun.com/pypi/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19" }, + { url = "https://mirrors.aliyun.com/pypi/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025" }, + { url = "https://mirrors.aliyun.com/pypi/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009" }, + { url = "https://mirrors.aliyun.com/pypi/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287" }, + { url = "https://mirrors.aliyun.com/pypi/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026" }, + { url = "https://mirrors.aliyun.com/pypi/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737" }, + { url = "https://mirrors.aliyun.com/pypi/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97" }, + { url = "https://mirrors.aliyun.com/pypi/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe" }, + { url = "https://mirrors.aliyun.com/pypi/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581" }, + { url = "https://mirrors.aliyun.com/pypi/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab" }, + { url = "https://mirrors.aliyun.com/pypi/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634" }, + { url = "https://mirrors.aliyun.com/pypi/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50" }, + { url = "https://mirrors.aliyun.com/pypi/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523" }, + { url = "https://mirrors.aliyun.com/pypi/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc" }, + { url = "https://mirrors.aliyun.com/pypi/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa" }, +] + +[[package]] +name = "matplotlib" +version = "3.11.1" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "kiwisolver" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/49/64/f9a391af28f518b11ad45a8a712353c94a0aefce09d3703200e5c54b610a/matplotlib-3.11.1.tar.gz", hash = "sha256:69647db5746941c793d6e445a4cd349323ffb87d9cc958c2ad84a659b4832d30" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/f2/6c/7ef7ebcb2bd9739b2b66b18b076e077f44bb46fdbe28ca0506edb3c62c79/matplotlib-3.11.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e15ef41507f3d525f46154ac9e3ae785dacde9f20e593a25de8986267892ef74" }, + { url = "https://mirrors.aliyun.com/pypi/packages/eb/f8/6d0c312c8d9738e7d9677f09fe5c986b3239e651a7b73a2deb38b65e4a71/matplotlib-3.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:21a67b961a6d597bca54fae826cd20695ba4a6e4d05424a08da6e13e3176fd6b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c9/cf/b4ad2cc81b6672ea29ea04e64e350a9f9b493b0908ccd884c67eeff8f7b2/matplotlib-3.11.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ba8f811b8ddfac493734d6af0b2dff96919d0c28ca0d641858dab4262777c6ea" }, + { url = "https://mirrors.aliyun.com/pypi/packages/88/90/4e10e033d9b66589d8ed98b84c95cdbb57033d57c1f41339d7393dbd2f2e/matplotlib-3.11.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c52f7ad20ef476806ed212380b1d54d20310c8b86bdc2c9a68b51f0024a44472" }, + { url = "https://mirrors.aliyun.com/pypi/packages/88/eb/799612d0f8cd3e816a10fec59329fca52cd2353264df80378dfc541ae855/matplotlib-3.11.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8b14eb22961fe865efb0e4ff167e333e428908b00115a8d800ccb65ee108e481" }, + { url = "https://mirrors.aliyun.com/pypi/packages/88/89/56649bbaa2fd12e20f3be03dbcc135b0c8676d88bac17977599e3eb442a0/matplotlib-3.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:88a2a27dd9691ae448dfae4b26f59036be90c3c28757edd3553a29559d00859f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c1/11/4d124efbbad677b7b7552f6f85a3bd432d4232f95400cea98fcd2ae36ef3/matplotlib-3.11.1-cp312-cp312-win_arm64.whl", hash = "sha256:480194afceca4df2f137c2721227d3cba67121fbf4397b69cee7f83714b0a58a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/04/6c/4798363b7fb5644e309fe1fac30216e9146c9f70859d80d588c18caf5317/matplotlib-3.11.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6771b0cd7838c6a857a7209814158c0ad09bfef878db3033dd82d70ad101f191" }, + { url = "https://mirrors.aliyun.com/pypi/packages/59/98/6acadbe7f98df19d274bc107ac58bb439fa75df82c33dc110d71a4a8501f/matplotlib-3.11.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2abdee5ffa2fe11b2d19f7a5c63b785fb7c28cc46c7bc1814156341d9d1a33e1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/24/ea/65cec46fe241390ccea1b1754207ee28eb71c5ab866bd5f22fe47e538fa4/matplotlib-3.11.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b0a19dcf73406d3746d25a5ed42d713604c9a3e024d129b102852b0d941cb9f3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c7/10/63fdccccbabe002fb0960876baabc5e3f24d9c1bb4cfb25651457f74b3a0/matplotlib-3.11.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7389b77ed2ab0552f46d9a90b81b7b8e6dfcdc42adc36c37a0865799843e0e3e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/98/51/a1155945bff7b91381875022ac1522c5dfdac0d006be8e7df389b3134eae/matplotlib-3.11.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c90be0b73568da4f662afac580956a76e308437e641b4a45aa08925eeb67d95f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0d/3a/3d5e1f42dc761bf53401a62a83ff93389b37de9d2c093b2a3aa49ac34f1b/matplotlib-3.11.1-cp313-cp313-win_amd64.whl", hash = "sha256:68408341f2312836fbbdf6b3c78047f65b2d8752f5fd221c3e72d348f5b34f8b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e2/db/3f5ea5a5b64060ef5e1ff60a19170423e41ce21b8497a6fe15a36e0b43e3/matplotlib-3.11.1-cp313-cp313-win_arm64.whl", hash = "sha256:0c1f44890d435c1b4ef52f701ad5828cb450ea97bcc83918fda6be74965d6cd2" }, + { url = "https://mirrors.aliyun.com/pypi/packages/98/6e/c7ae5e0531425b69c0826b00ebbc264c85cab853f1cd6e096c9983c2cdc1/matplotlib-3.11.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:5e510088c27a89d53580a752f959146893563e63c330e161d159b0fee652af6f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/92/79/15be162e0a2ed546939674e2e97d0e33ec2447d86d4d4e611fa295bb178c/matplotlib-3.11.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:1524e2bdd48a93557aa47ddcfe9c225dfdd57d5a01a5c49128c20f0632980ee1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/6a/7f/36ffe144fc4aacfe0e3ed2318f72b6755d1e73b041d619b4d393e60f5a66/matplotlib-3.11.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:11664c551345553db92e61cae6cf1376f138f8c47cafdf13b64b18f3e3e9e464" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ab/5f/55812d68c0a840d3a463638f48c00ab1fe338518ec49a640cb6473b444af/matplotlib-3.11.1-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e1f8922ba31959cf6a9dfb51be64b7f7bc582801a3957dc0c2f3afcd3537adf" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7a/64/cca444b4eb5e6c768c44fc5e1f0b5211f20ca2b282778051996e996a2bdf/matplotlib-3.11.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83235693abde86e5e0129998f80ee39fc7f58e6d56a88fafb28a9278833e9d5f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e5/0f/a49c329d394f2e9ef38506982107e8b04ecf94dd41a9d8423ff82cc737c7/matplotlib-3.11.1-cp313-cp313t-win_amd64.whl", hash = "sha256:9a076f4fc5cdc43fdf510f5981418d25c2db4973418d9f22d8bb3dc8045ada78" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e4/50/103e86afb806d8f64d04ede14e4cfc09dbfc25f512421ff85fdd6ebd59cf/matplotlib-3.11.1-cp313-cp313t-win_arm64.whl", hash = "sha256:216fbb93a74add02ddb4cb38ef5348f59ac00b3e84567eaf16598772d40e150a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/35/04/3079499fa8cb661ea66d13d6439d5a3ae6710a7afd5c7f72e08914f275f8/matplotlib-3.11.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:30c492d4ba9448595b6fd8708c6725963f8148e25c0d8842948da5b05f0ee8d3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/53/a2/69acfe84ec1f32930e801a5782a07fc5c79c8c6599a507b806d859d5da8e/matplotlib-3.11.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ac104be2768ffdd8655db9e71b768cbb45f2b9aa7b450cf1595e8f65d3822319" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d3/b3/31b15a2ca56d4ddd6aaa1c884c2f51cf9a61cfaf5ca6f6fbd6343d38e6df/matplotlib-3.11.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6be943cb68bc6660ead58c55b3aa6366cba2ef7feb06460fbcce32360376f19f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/64/0d/a17e966e620545c1548125af0b29ac812dd17b197a18a7462ac12fa859ee/matplotlib-3.11.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5af0dcda57d471440a7b5b623e70e0a61003518443d9098f211a96ecfbbc25be" }, + { url = "https://mirrors.aliyun.com/pypi/packages/97/c5/5e100efdd67abb7de20befaa333612ef9bfc63417fb71398f904f25d083c/matplotlib-3.11.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3d3fd84082b1afbd9398466c81309e20045be20d48fe0fb18c43504d164cbbb2" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ce/04/d719a0a36930ecc8dfc801ff340f9dcfc4223f8ca5d39d06b4020032fff8/matplotlib-3.11.1-cp314-cp314-win_amd64.whl", hash = "sha256:9601a1e90be21e4884c53b4f3dc3ee0544654946f9975258d691f1c2e2f119c6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/48/65/facabdc2f1f6caba7e856db64dfedddca25f7608df07d96a1c8fd114fd3b/matplotlib-3.11.1-cp314-cp314-win_arm64.whl", hash = "sha256:ae30c6109848ac0f9fa36c5d6270938487614c47ba31860bd5361266dabc5685" }, + { url = "https://mirrors.aliyun.com/pypi/packages/88/dd/18da6cd01cf96354534f98c468a25380c68ce582a2c9dd0cae12b04af4f2/matplotlib-3.11.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:dadfe80797174e2984aae3be0b77594a3c72d2c0a40fbd4a0de48d2728caf3ae" }, + { url = "https://mirrors.aliyun.com/pypi/packages/79/b0/f0b63555a18b79d038c81fd6126f35fc4dfce0eaff48d96103348c7cf935/matplotlib-3.11.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:89b193b255f4f6f7948dbcee3691f4f341ab05d9a8874a67b45ddb4182922eda" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c6/dd/f210ec7c4a6f198d5567237048a93d0811fb5a1f1691f13320e592f95b41/matplotlib-3.11.1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:191163532cdefcb1571ca38a6d7e6474baccde64495783e6ba47aa07ec4b9bbb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ec/d2/d6d5324507c5fbb316db48e258c09c2807f3de03d9af47017e120070926f/matplotlib-3.11.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9fdf1c818ab05d0e74002091ddaf414478a3a449ec9d51c8976d45be7e3a01e2" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0f/68/3c22e9320bdce2c4d2f1320643ef706db7a24cb7420eea28b97a2d67f5a8/matplotlib-3.11.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b937b9dba5f5f6c1e31c47abe2186c865c0914fd18f2ce0dfc39c9adcef5951d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f6/4a/907ed190ee81a9df581e0ed5456134fc0f7cb55ffcfda2f9e54ca900761c/matplotlib-3.11.1-cp314-cp314t-win_amd64.whl", hash = "sha256:f2912f647f3fbe1ccf085f91e213936f9101bead81a5e670565b1f1b3712f4fb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/23/d4/97c19b77e0a6e3b48581185bb65088f431cd20186076cc0f650a1757ea46/matplotlib-3.11.1-cp314-cp314t-win_arm64.whl", hash = "sha256:54d47b8ae8b579633a3902ca5b4ad6c1e132a5626d64447b2e22a66394e79987" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8" }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" }, +] + +[[package]] +name = "msgpack" +version = "1.2.1" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/31/f9/c0a1c127f9049db9155afc316952ea571720dd01833ff5e4d7e8e6352dbb/msgpack-1.2.1.tar.gz", hash = "sha256:04c721c2c7448767e9e3f2520a475663d8ee0f09c31890f6d2bd70fd636a9647" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/bc/dd/9e8cbd8f5582ca4b590336f2b91ee5662f6a6ca562b565abaf696a0f81ff/msgpack-1.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2ef59c659f289eddf8aa6623823f19fa2f40a4029266889eac7a2505dd210c35" }, + { url = "https://mirrors.aliyun.com/pypi/packages/50/2e/ebdb85a8da151397a2790363676b7ed7c125924fe618e4c6d8befb0cc62c/msgpack-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d3567748a5107cb40cdf66a275430c2f87c07777698f4bfd25c35f44d533258c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/26/aa/753ad8b007b464e1d8aa0c8e650b9c5f4f725e658fc5ac8a7635c55b7f6e/msgpack-1.2.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60926b75d00c8e816ef98f3034f484a8bc64242d66839cef4cf7e503142316a0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/6a/fd/6adabd4f6d5e686f97dd02ce7fce3fe4cf672cbac36b8f67ff4040e8ad8b/msgpack-1.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:020e881a764b20d8d7ca1a54fc01b8175519d108e3c3f194fddc200bda95951a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5a/cc/85039b7b0eb168aaad7383a23c97e291a11f08351cb45a606ce865e4e3f1/msgpack-1.2.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4202c74688ca06591f78cb18988228bd4cca2cc75d57b60008372892d2f1e6e6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ed/bf/35963899493b32030c85fc513b723ae66144ac70c11ebc52e889e16e3d99/msgpack-1.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8b267ce94efb76fbd1b3373511420074ee3187f0f7811bf394531de13294735a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a6/df/8e2ac970c8f99264cd9997d1c73df5466bc19da3301d7dc5500862a9b089/msgpack-1.2.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:e4f1d0f8f98ade9634e01fb704a408f9336c0a8f1117b369f5db83dc7551d8b1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/17/dd/fa8bd265110dfa51c20cb529f9e6d240a16fafe7e645004c6af2d01353ba/msgpack-1.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f02cf17a6ca1abe29b5f980644f7551f94d71f2011509b26d8625ce038f0df64" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2e/b9/8377a5ad8953fc0437c70cc98d9ae29f27fe5ac5109fbec0812085865735/msgpack-1.2.1-cp312-cp312-win32.whl", hash = "sha256:0c0d9802354507bcba62af19c17918e3eb437cc25e6f50657d511b5856a77aac" }, + { url = "https://mirrors.aliyun.com/pypi/packages/57/7f/ce1e377df7e62461fefd9eb23bfb93a4a523f40a517b377b8f844d836828/msgpack-1.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:5c24aa15d5963051e1a5c62b12c50cd705992502b5ec1f3bece6046f33c9fc24" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8f/32/ebfe84c9929f08f188d56c7a2fd913406a9ddad76a634697c1c43b8112e6/msgpack-1.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:4227224aaec8f7fbcbfbd4272319347b2bb4030366502600f8c45588c5187b07" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b0/ac/dcddcab6f6c20ecb387ca5e980371cdb3f87ff69aeca388be97eebc4c074/msgpack-1.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0a70e3cf2804a300d921bb0940426e35f4e489a23adfb77a808892241db0a064" }, + { url = "https://mirrors.aliyun.com/pypi/packages/64/71/fbcfa83a1d6a9c6091942d1cfd070962244664b87427a9a49a6897b1b219/msgpack-1.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:491cc39455ca765fad51fb451bf2915eb2cf41192ab5801ce8d67c1d614fe056" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e3/10/ddf7b06db879e8792d13934ddda09ff20bd2a583fd84c9b59aae9b0e650b/msgpack-1.2.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f310233ef7fb9c14e201c93639fe5f5260b005f56f0b29048e999c30935596cc" }, + { url = "https://mirrors.aliyun.com/pypi/packages/79/d3/36a46a8ed992b781acbc05928bd5bee3c810cb0c3563bf81a7b0c04a1a76/msgpack-1.2.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:787c9bebb5833e8f6fc8abca3c0597683d8d87f56a8842b6b89c75a5f3176e2d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f9/84/e8e9598b557c0ba6ddae901a73780a4c75ac667dddf59414b1e56a42fb34/msgpack-1.2.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:dc871b997a9370d855b7394465f2f350e847a5b806dd38dcc9c989e7d87da155" }, + { url = "https://mirrors.aliyun.com/pypi/packages/40/16/738fe6d875ad7e2a9429c165322a4ec088f4f273cdfae63d96a89c467961/msgpack-1.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:85f57e960d877f2977f6430896191b04a21f8901b3b4baf2e4604329f4db5402" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ca/be/6d5952df75a7f24f35833af764c3a6860780364cb3a0030beb8099e1b2b4/msgpack-1.2.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:1233ee2dd0cefba127583de50ea654677277047d238303521db35def3d7b2e7c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e1/39/e2ef7dbf0473bcb8dc7c50bf782a892d67414877b63e47fc88eb189ef5e6/msgpack-1.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e3dc2feb0876209d9c38aa56cb1de169bd6c4348f1aa48271f241226590993e6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ef/c5/133f4512a56e983a93445c836c9d94d88f3bc2e0980ff4b9e577bd8416ce/msgpack-1.2.1-cp313-cp313-win32.whl", hash = "sha256:6d09badf350af2be9d189184e04e64cf54ad93569ab3d96fca58bd3e84aad707" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e2/98/577e10b055096a7dd40732358cabaf7180a20c79ed1dcdbb618e4b9deac7/msgpack-1.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:33f14fba63278b714efe6ad07e50ea5f03d91537aa6a1c5f1ceca4cf44013ca9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ba/ee/0c0048e7cfbef23c6a94791b8959ab28155232e7956de8a305b5ff588f05/msgpack-1.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:afc5febcd4c99effbc02b528e49d6fd0760b2b7d48c05239e345a5fa6e743d9a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/77/58/cce442852c6b9e1639c7c8ac8fd9143121cb32dab0f308df4d1426a8eb9c/msgpack-1.2.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:05f340e47e7e47d2da8db9b53e1bb1d294369e9ef45a747441309f6650b8351d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/60/5c/15b4c7a0182f75ffa90751958ba36a9c01cafee367d49a3edc10ed140b01/msgpack-1.2.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:810b916696c86ef0deb3b74588480224df4c1b071136c34183e4a2a4284d7ac7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b8/a6/99e58722feaffc5f2fbcc0c8c0d1451ab9f84097f7af87291b46af2390f4/msgpack-1.2.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ca0dacff965c47afdc3749a8469d7302a8f801d6a28758d55120d75e66ce6889" }, + { url = "https://mirrors.aliyun.com/pypi/packages/19/03/8c63e8cf52958534ef688625965ab04c269a6cadd8caef16758b380a821a/msgpack-1.2.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e2bf9280bceb5efca998435904b5d3e9fdbcc11d90dc9df30aec7973252b720" }, + { url = "https://mirrors.aliyun.com/pypi/packages/63/d2/155d9e71b40e41fd934bc0c48b9b2770f22263e1ac20aad8e29fdca7be3f/msgpack-1.2.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:aa6c4be5d1c02a42b066ca6ddb71adf36432868fdcdb6ee87e634e86e0674190" }, + { url = "https://mirrors.aliyun.com/pypi/packages/98/48/deaf2326262a8d5ea3295ce9649912ecd3f551ba7ec8e33c665d2ba583f3/msgpack-1.2.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec0e675d59150a6269ddc9139087c722292664a37d071a849c05c473350f1f2d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/10/2a/b4410f906c2ec0008f1608d3ab5143afc3ad3f4e6da0fed3ea2231d0bef4/msgpack-1.2.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:dd3bfe82d53edfe4b7fc9a7ec9761e23a7a5b1dac22264505af428253c29ed24" }, + { url = "https://mirrors.aliyun.com/pypi/packages/59/86/1edc67270099a528fa2093ea60fe191233cd238e4bd30cfacf7db79fc959/msgpack-1.2.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5ad5467fc3f68b5468e06c5f788d712e9f8ffc8b0cd1bcb160c105c1ee92dae7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/82/90/8b630fef07d8c5ab457b71ff2c217910c83d333c7a68472c186e87cc504a/msgpack-1.2.1-cp314-cp314-win32.whl", hash = "sha256:98b58bdb89c46190e4609bb36abe17c6d4105ad13f9c5f8f6f64d320f8ced3fb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/16/f1/467b81e98b24dd3885d7b1857728797b4ffc76a7a7483af4fb321a07de3c/msgpack-1.2.1-cp314-cp314-win_amd64.whl", hash = "sha256:74847557e28ce71bd3c438a447ca90e4b507e997ddbdef8a12a7b283b86c156b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a7/1d/5d8c4c89985feb6acefb82a09e501c60392261856d2408d20bfe4f0360b1/msgpack-1.2.1-cp314-cp314-win_arm64.whl", hash = "sha256:b50b727bd652bdc37d950336c848ef20ec54a4cafc38dce19b1cd86ad625d0f7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1b/02/ad2afb678b4de94496cd432b581759b756a92c1192d8c767edd6b132efdc/msgpack-1.2.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:8d00f177ca88a77c1cf848d204a38f249751650b601cb6532acc68805d8a8273" }, + { url = "https://mirrors.aliyun.com/pypi/packages/54/74/0b797484013128837f3b1cbb6cea019277c4de4e377dc512b4d9a0f92940/msgpack-1.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5bb9c386f0a329c035ddbab4b72d1028bf9627add8dda41070288563d57ed1b1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a9/b4/b774d7eb95561739907fec675582f83203cf41c597a418c2589b4bfb8e9d/msgpack-1.2.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:20466cca18c49c7292a8984bc15d65857b171e7264bdcb5f96baf8be238791fc" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b2/f9/3243191dc9937e00756c8bc1b0272fed8f23758e43df2a3b46f533e5090f/msgpack-1.2.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:196300e7e5d6e74d50f1607ab9c06c4a1484c383cd22defd727902591f7e8dde" }, + { url = "https://mirrors.aliyun.com/pypi/packages/23/c7/1693111db9944ba4ad4b67a1e788400d78a0b6af7a6523dc7e4e58f8274b/msgpack-1.2.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:575957e79cd51903a4e8495a242442949641e08f1efd5197b43bebd3ea7682b4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3e/2b/92f86956a0c13e8662f7e2ad630c4eb4db07497b967589bd5245e018b2c1/msgpack-1.2.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8c2ed1e48cc0f460bf3c7780e7137ff21a4e18433451916f2442c1b21036cd7d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/da/ea/1479f72d200313a76fc2f823a79d1e07ed052ab7b8a0280640aa7b95de42/msgpack-1.2.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:5f6277e5f783c36786a145e0247fc189a03f35f84b251646e53592d2bc12b355" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f5/4d/fa006060ffa1011d32bfae826fe766fe73e02982183601633b7121058ab3/msgpack-1.2.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f9389552ecf4784886345ead0647e4edc96bee37cbab05b75540f542f766c48c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2f/e1/aab6c946570496b78e67804721f3d5e2d62a93081b9b37df77764ef56347/msgpack-1.2.1-cp314-cp314t-win32.whl", hash = "sha256:c1c79a604a2969a868a78b6ebd27a887e00c624f14f66b3038e0590cb23332d1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/13/0a/e608956488a2af014cfe6e3d665e090b8ee42aa14b07f8f95b8880d66b09/msgpack-1.2.1-cp314-cp314t-win_amd64.whl", hash = "sha256:f12038a35fabd52e56a3547bab42401af49a45caa6dd00b34c44de235bc93ee2" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d2/8a/27e2e57055176e366a46b85d02d68e7a5bcfbdd8474c9706375d965f24d3/msgpack-1.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:0adcf06ffde0777c0e1a9b771a2b1c4226ba1bbf748c8efcc02fcdeca3299107" }, +] + +[[package]] +name = "narwhals" +version = "2.24.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/2b/1d/58946e5aab18393e793bd4add6985b95d0e01c3a2d832f38f54468b10dcd/narwhals-2.24.0.tar.gz", hash = "sha256:b5c0f684ccd9d7475b564111e319a4964abcf2baf79d3cf6b1003d06ac9b828d" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/7e/85/a5bfaebfd305ac18b57b0854d74e37e586809061a91fda62f0bd50c8518e/narwhals-2.24.0-py3-none-any.whl", hash = "sha256:42fdedf44e5b2ca7505630d45b4ac3058f38d8485cba9fe1652ca23152df7489" }, +] + +[[package]] +name = "networkx" +version = "3.6.1" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762" }, +] + +[[package]] +name = "numba" +version = "0.66.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "llvmlite" }, + { name = "numpy" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/ae/a0/570e3dc53e5602b49108f62a13e529f1eec8bfc7ef37d49c825924dcf546/numba-0.66.0.tar.gz", hash = "sha256:b900e63a0e26c05ea9a6d5a3a5a0a177cb64c5011887bf43edb8c3ed2c38d363" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/62/a3/70deb7f88461c1cd5d16aa990c2380604102661a427667b8950dcdccc27f/numba-0.66.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:53ca5900b7cab15109796030113a6b28576bae5ad7bb507ad6dd1360ddd81ba4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2d/55/25c319845e9a4e08f16611ddbda56a192eb7b6ed13e1a2bff2da272ffb97/numba-0.66.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0999e3ee1b18c48e1fb51d11af35ef59852c7f4f50569c9550c25faef0616ad1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/71/ef/a82d6fd6bf1b0fe461651e924d3647eeec9ac17f8eee4896264bf7480930/numba-0.66.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:efe0d2d5099790df945e0cb6e1b3104bd965d7bbfac50d62f1d5d1d6ade0825d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/fc/eb/9e6171e378822ab191c7abcfd3d8cfc8644516f6c7834c22e210e4acc070/numba-0.66.0-cp312-cp312-win_amd64.whl", hash = "sha256:b075a4e7ebc43dc6294f223e2821659656209fd5e0ce53245877c23d66d6e1a9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/03/52/176c02d005c5c5143cde10a85bbcdcb6236d9e34c3aac089380e0506cd1d/numba-0.66.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:380b2556a2019ccd1e956ae77dd257eaa39403f7520768b626d44b755112785e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/44/b5/e930010965568fe7f2c6c962fd2849d458cb9f62c3ab7584af8a19a2b40a/numba-0.66.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:939316d5d8619751207b8972a67852b5a7646665298cb4de693cd6bf135152f4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d0/ec/5b51457cbe96e4831141d83e892e65191b23a1b78728456c62909d231ace/numba-0.66.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cdf506775d9f02eb92a87bf5c5b1e0d25506fd18cafd769f4ed914a8feac73e7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/83/7e/cea7710e96913d3c7f2999f16db1b28e6c5be5171cbf40f77f98333a7243/numba-0.66.0-cp313-cp313-win_amd64.whl", hash = "sha256:c5bfe5350284509ab0474390321454c3a8627a188af5b68c910e83df3e2db4a7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/96/7a/7e0e73550eb4e41ede6e72fb5371f4539537a4d770a3b73fa9b61aea0622/numba-0.66.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:46ae5f2b19e2af3c33c2df100306a90ea2f981c8158b0390f8bf6c20eee7357e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0f/26/885774c006de6620ed3d10f45d8e20fe0b8e6aad6d573211a2cbc8b3e528/numba-0.66.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e2b101f23b8b63978d334574d2039f27f0dccfe1d891756f33a2e2f3e4c88cf4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/93/99/edebf7de890b73973d839dd971cf73734adfb81ffa1b4504f84b9059c3e5/numba-0.66.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:63b943eb2c9ba371908ce2cd6dfc643db51fc40f7966993376a1701bc922f537" }, + { url = "https://mirrors.aliyun.com/pypi/packages/66/c5/b46ad28ac3681d035ea21365c5e052149062e1a0a9affd0563d2760ea6ff/numba-0.66.0-cp314-cp314-win_amd64.whl", hash = "sha256:bd57790acd20f6a468e0ad333ef6b82355e309a92310fb7dff80e919f01a21a9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/10/6f/5e77a7397a37dd16f57a7b72e7e470db5227b68e3639df0d13a8e674883d/numba-0.66.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:db7735d15ea17a283d6485b9fa3504769f78fd86e5146638ad5e8da57c031b9e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/39/fd/e9c9680a3813f3d781c20e5d53c1074801b787d4feecca0472fdd7c05ce1/numba-0.66.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:651a2b53298340956db26ecbe7ab043106b50a40c2807e66d617a4917245a4ab" }, + { url = "https://mirrors.aliyun.com/pypi/packages/61/3a/9b363287b85fcd4537ea3878793822878b2ac1008a78159d2096fea628de/numba-0.66.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8c1144ba1720ea59ad79f4f488ed54d149b2613b357f7e445678b7d0739c70e9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/4c/f2/dca53d50b8f2289dd01954ace9da261e0487d5b74b188b4304e4ecc3492c/numba-0.66.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d426178fb991a85714c43112a8ea7b9d9579ea856ad8dcdb9c1c3941903ba5be" }, +] + +[[package]] +name = "numpy" +version = "2.4.6" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751" }, + { url = "https://mirrors.aliyun.com/pypi/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089" }, + { url = "https://mirrors.aliyun.com/pypi/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359" }, + { url = "https://mirrors.aliyun.com/pypi/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778" }, + { url = "https://mirrors.aliyun.com/pypi/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe" }, + { url = "https://mirrors.aliyun.com/pypi/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997" }, + { url = "https://mirrors.aliyun.com/pypi/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20" }, + { url = "https://mirrors.aliyun.com/pypi/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67" }, + { url = "https://mirrors.aliyun.com/pypi/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab" }, + { url = "https://mirrors.aliyun.com/pypi/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261" }, + { url = "https://mirrors.aliyun.com/pypi/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43" }, + { url = "https://mirrors.aliyun.com/pypi/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627" }, + { url = "https://mirrors.aliyun.com/pypi/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66" }, +] + +[[package]] +name = "nvidia-cublas" +version = "13.1.1.3" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "nvidia-cuda-nvrtc" }, +] +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/a7/a1/0bd24ee8c8d03adac032fd2909426a00c88f8c57961b1277ded97f91119f/nvidia_cublas-13.1.1.3-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b7a210458267ac818974c53038fbec2e969d5c99f305ab15c72522fa9f001dd5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3b/cd/154ca20c38269e05eff77c1464e6c1da89f50a6390b565e9d82e06bc11e1/nvidia_cublas-13.1.1.3-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:37936a16db8fe4ac1f065c2139360608a543a09275cb1a1af612e08cfa065436" }, +] + +[[package]] +name = "nvidia-cuda-cupti" +version = "13.0.85" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/2a/2a/80353b103fc20ce05ef51e928daed4b6015db4aaa9162ed0997090fe2250/nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_aarch64.whl", hash = "sha256:796bd679890ee55fb14a94629b698b6db54bcfd833d391d5e94017dd9d7d3151" }, + { url = "https://mirrors.aliyun.com/pypi/packages/33/6d/737d164b4837a9bbd202f5ae3078975f0525a55730fe871d8ed4e3b952b0/nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_x86_64.whl", hash = "sha256:4eb01c08e859bf924d222250d2e8f8b8ff6d3db4721288cf35d14252a4d933c8" }, +] + +[[package]] +name = "nvidia-cuda-nvrtc" +version = "13.0.88" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/c3/68/483a78f5e8f31b08fb1bb671559968c0ca3a065ac7acabfc7cee55214fd6/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:ad9b6d2ead2435f11cbb6868809d2adeeee302e9bb94bcf0539c7a40d80e8575" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b7/dc/6bb80850e0b7edd6588d560758f17e0550893a1feaf436807d64d2da040f/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d27f20a0ca67a4bb34268a5e951033496c5b74870b868bacd046b1b8e0c3267b" }, +] + +[[package]] +name = "nvidia-cuda-runtime" +version = "13.0.96" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/87/4f/17d7b9b8e285199c58ce28e31b5c5bbaa4d8271af06a89b6405258245de2/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ef9bcbe90493a2b9d810e43d249adb3d02e98dd30200d86607d8d02687c43f55" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2e/24/d1558f3b68b1d26e706813b1d10aa1d785e4698c425af8db8edc3dced472/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f82250d7782aa23b6cfe765ecc7db554bd3c2870c43f3d1821f1d18aebf0548" }, +] + +[[package]] +name = "nvidia-cudnn-cu13" +version = "9.20.0.48" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "nvidia-cublas" }, +] +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/56/c5/83384d846b2fd17c44bd499b36c75a45ed4f095fbbb2252294e89cea5c5c/nvidia_cudnn_cu13-9.20.0.48-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:e31454ae00094b0c55319d9d15b6fa2fc50a9e1c0f5c8c80fb75258234e731e1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/6e/5e/edb9c0ae051602c3ccaffe424256463636d639e27d7f302dde9975ef9e7a/nvidia_cudnn_cu13-9.20.0.48-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:0c45dd8eeb50b603f07995b1b300c62ffe6a1980482b82b3bcf94a4ca9d49304" }, +] + +[[package]] +name = "nvidia-cufft" +version = "12.0.0.61" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "nvidia-nvjitlink" }, +] +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/8b/ae/f417a75c0259e85c1d2f83ca4e960289a5f814ed0cea74d18c353d3e989d/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a8/2f/7b57e29836ea8714f81e9898409196f47d772d5ddedddf1592eadb8ab743/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6c44f692dce8fd5ffd3e3df134b6cdb9c2f72d99cf40b62c32dde45eea9ddad3" }, +] + +[[package]] +name = "nvidia-cufile" +version = "1.15.1.6" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/3f/70/4f193de89a48b71714e74602ee14d04e4019ad36a5a9f20c425776e72cd6/nvidia_cufile-1.15.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:08a3ecefae5a01c7f5117351c64f17c7c62efa5fffdbe24fc7d298da19cd0b44" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ab/73/cc4a14c9813a8a0d509417cf5f4bdaba76e924d58beb9864f5a7baceefbf/nvidia_cufile-1.15.1.6-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:bdc0deedc61f548bddf7733bdc216456c2fdb101d020e1ab4b88d232d5e2f6d1" }, +] + +[[package]] +name = "nvidia-curand" +version = "10.4.0.35" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/1e/72/7c2ae24fb6b63a32e6ae5d241cc65263ea18d08802aaae087d9f013335a2/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:133df5a7509c3e292aaa2b477afd0194f06ce4ea24d714d616ff36439cee349a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a5/9f/be0a41ca4a4917abf5cb9ae0daff1a6060cc5de950aec0396de9f3b52bc5/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:1aee33a5da6e1db083fe2b90082def8915f30f3248d5896bcec36a579d941bfc" }, +] + +[[package]] +name = "nvidia-cusolver" +version = "12.0.4.66" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "nvidia-cublas" }, + { name = "nvidia-cusparse" }, + { name = "nvidia-nvjitlink" }, +] +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/c8/c3/b30c9e935fc01e3da443ec0116ed1b2a009bb867f5324d3f2d7e533e776b/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5f/67/cba3777620cdacb99102da4042883709c41c709f4b6323c10781a9c3aa34/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:0a759da5dea5c0ea10fd307de75cdeb59e7ea4fcb8add0924859b944babf1112" }, +] + +[[package]] +name = "nvidia-cusparse" +version = "12.6.3.3" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "nvidia-nvjitlink" }, +] +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/f8/94/5c26f33738ae35276672f12615a64bd008ed5be6d1ebcb23579285d960a9/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/fa/18/623c77619c31d62efd55302939756966f3ecc8d724a14dab2b75f1508850/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2b3c89c88d01ee0e477cb7f82ef60a11a4bcd57b6b87c33f789350b59759360b" }, +] + +[[package]] +name = "nvidia-cusparselt-cu13" +version = "0.8.1" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/46/e1/cdc1797eadf82d3a9a575a19b33fdc871a97edbec42c00b5b5e914f4aff4/nvidia_cusparselt_cu13-0.8.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:4dca476c50bf4780d46cd0bfbd82e2bc10a08e4fef7950917ce8d7578d22a23f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/34/7d/2661f2fb3ac4302f3a246f5fc030213ac60c1fe0bce84f9783dbd831dbb7/nvidia_cusparselt_cu13-0.8.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:786ce87568c303fadb5afcc7102d454cd3040d75f6f8626f5db460d1871f4dd0" }, +] + +[[package]] +name = "nvidia-nccl-cu13" +version = "2.29.7" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/72/0d/daf50d44177ee0cbc7ff0a0c91eb5ff676c82be42f9a970bc7597f440c3a/nvidia_nccl_cu13-2.29.7-py3-none-manylinux_2_18_aarch64.whl", hash = "sha256:674a12383e3c38a1bcccae7d4f3633b37852230b6047883cb2f4c2d1b36d9bf5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/67/f4/58e4e91b6919367c7aafb8e36fce9aad1a3047e536bf7e2fd560927d3a4c/nvidia_nccl_cu13-2.29.7-py3-none-manylinux_2_18_x86_64.whl", hash = "sha256:edd81538446786ec3b73972543e53bb43bcaf0bfc8ef76cb679fcc390ffe136d" }, +] + +[[package]] +name = "nvidia-nvjitlink" +version = "13.3.33" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/f0/ee/580ca6f29dcab0221db8706badca1bbbb084f1975c4d4e83329c3a7e31f0/nvidia_nvjitlink-13.3.33-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:26a6de7fb4c8fdaa7703d3dad720d6d427ddfea5c48a528fd97c11733ad830e5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/69/30/45414e35ff2eee7db3da037e5707037ccf9d2b5218ffbdb055ea4d5aa98a/nvidia_nvjitlink-13.3.33-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ce48b37dfeb3cb1eae4cf85adacb47d7a6539ea2272870c9a3628ce275c2037e" }, +] + +[[package]] +name = "nvidia-nvshmem-cu13" +version = "3.4.5" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/dc/0f/05cc9c720236dcd2db9c1ab97fff629e96821be2e63103569da0c9b72f19/nvidia_nvshmem_cu13-3.4.5-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6dc2a197f38e5d0376ad52cd1a2a3617d3cdc150fd5966f4aee9bcebb1d68fe9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3c/35/a9bf80a609e74e3b000fef598933235c908fcefcef9026042b8e6dfde2a9/nvidia_nvshmem_cu13-3.4.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:290f0a2ee94c9f3687a02502f3b9299a9f9fe826e6d0287ee18482e78d495b80" }, +] + +[[package]] +name = "nvidia-nvtx" +version = "13.0.85" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/c2/f3/d86c845465a2723ad7e1e5c36dcd75ddb82898b3f53be47ebd429fb2fa5d/nvidia_nvtx-13.0.85-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4936d1d6780fbe68db454f5e72a42ff64d1fd6397df9f363ae786930fd5c1cd4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a8/64/3708a90d1ebe202ffdeb7185f878a3c84d15c2b2c31858da2ce0583e2def/nvidia_nvtx-13.0.85-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cb7780edb6b14107373c835bf8b72e7a178bac7367e23da7acb108f973f157a6" }, +] + +[[package]] +name = "openpyxl" +version = "3.1.5" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "et-xmlfile" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2" }, +] + +[[package]] +name = "orjson" +version = "3.11.9" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/7e/0c/964746fcafbd16f8ff53219ad9f6b412b34f345c75f384ad434ceaadb538/orjson-3.11.9.tar.gz", hash = "sha256:4fef17e1f8722c11587a6ef18e35902450221da0028e65dbaaa543619e68e48f" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/16/6d/11867a3ffa3a3608d84a4de51ef4dd0896d6b5cc9132fbe1daf593e677bc/orjson-3.11.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9ef6fe90aadef185c7b128859f40beb24720b4ecea95379fc9000931179c3a49" }, + { url = "https://mirrors.aliyun.com/pypi/packages/24/75/05912954c8b288f34fcf5cd4b9b071cb4f6e77b9961e175e56ebb258089f/orjson-3.11.9-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:e5c9b8f28e726e97d97696c826bc7bea5d71cecd63576dba92924a32c1961291" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ab/86/1c3a47df3bc8191ea9ac51603bbb872a95167a364320c269f2557911f406/orjson-3.11.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a473dbb4162108b27901492546f83c76fdcea3d0eadff00ae7a07e18dcce09" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d7/cf/b33b5f3e695ae7d63feef9d915c37cc3b8f465493dcd4f8e0b4c697a2366/orjson-3.11.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:011382e2a60fda9d46f1cdee31068cfc52ffe952b587d683ec0463002802a0f4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/31/6a/6cf69385a58208024fcb8c014e2141b8ce838aba6492b589f8acfff97fab/orjson-3.11.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2d3dc759490128c5c1711a53eeaa8ee1d437fd0038ffd2b6008abf46db3f882" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e8/f8/0b1bd3e8f2efcdd376af5c8cfd79eaf13f018080c0089c80ebd724e3c7fb/orjson-3.11.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8ea516b3726d190e1b4297e6f4e7a8650347ae053868a18163b4dd3641d1fff" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f3/59/dab79f61044c529d2c81aecdc589b1f833a1c8dec11ba3b1c2498a02ca7e/orjson-3.11.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380cdce7ba24989af81d0a7013d0aaec5d0e2a21734c0e2681b1bc4f141957fe" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0e/a4/82b7a2fe5d8a67a59ed831b24d59a3d46ea7d207b66e1602d376541d94a6/orjson-3.11.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4fa4f0af7fa18951f7ab3fc2148e223af211bf03f59e1c6034ec3f97f21d61" }, + { url = "https://mirrors.aliyun.com/pypi/packages/50/c7/375e83a76851b73b2e39f3bcf0e5a19e2b89bad13e5bca97d0b293d27f24/orjson-3.11.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a8f5f8bc7ce7d59f08d9f99fa510c06496164a24cb5f3d34537dbd9ca30132e2" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7f/7c/49d5d82a3d3097f641f094f552131f1e2723b0b8cb0fa2874ab65ecfffa6/orjson-3.11.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:4d7fde5501b944f83b3e665e1b31343ff6e154b15560a16b7130ea1e594a4206" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3a/dc/7446c538590d55f455647e5f3c61fc33f7108714e7afcffa6a2a033f8350/orjson-3.11.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cde1a448023ba7d5bb4c01c5afb48894380b5e4956e0627266526587ef4e535f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/df/e5/4d2d8af06f788329b4f78f8cc3679bb395392fcaa1e4d8d3c33e85308fa4/orjson-3.11.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:71e63adb0e1f1ed5d9e168f50a91ceb93ae6420731d222dc7da5c69409aa47aa" }, + { url = "https://mirrors.aliyun.com/pypi/packages/06/69/850264ccf6d80f6b174620d30a87f65c9b1490aba33fe6b62798e618cad3/orjson-3.11.9-cp312-cp312-win32.whl", hash = "sha256:2d057a602cdd19a0ad680417527c45b6961a095081c0f46fe0e03e304aac6470" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b9/d5/973a43fc9c55e20f2051e9830997649f669be0cb3ca52192087c0143f118/orjson-3.11.9-cp312-cp312-win_amd64.whl", hash = "sha256:59e403b1cc5a676da8eaf31f6254801b7341b3e29efa85f92b48d272637e77be" }, + { url = "https://mirrors.aliyun.com/pypi/packages/fe/ae/495470f0e4a18f73fa10b7f6b84b464ec4cc5291c4e0c7c2a6c400bef006/orjson-3.11.9-cp312-cp312-win_arm64.whl", hash = "sha256:9af678d6488357948f1f84c6cd1c1d397c014e1ae2f98ae082a44eb48f602624" }, + { url = "https://mirrors.aliyun.com/pypi/packages/32/33/93fcc25907235c344ae73122f8a4e01d2d393ef062b4af7d2e2487a32c37/orjson-3.11.9-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4bab1b2d6141fe7b32ae71dac905666ece4f94936efbfb13d55bb7739a3a6021" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8f/27/b1e6dadb3c080313c03fdd8067b85e6a0460c7d8d6a1c3984ef77b904e4d/orjson-3.11.9-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:844417969855fc7a41be124aafe83dc424592a7f77cd4501900c67307122b92c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/21/0f/c9ede0bf052f6b4051e64a7d4fa91b725cccf8321a6a786e86eb03519f00/orjson-3.11.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe02797b5e9f3a9d8292ddcd289b474ad13e81ad83cd1891a240811f1d2cb81" }, + { url = "https://mirrors.aliyun.com/pypi/packages/fd/26/d398e28048dc18205bbe812f2c88cb9b40313db2470778e25964796458fe/orjson-3.11.9-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e4eed3b200023042814d2fc8a5d2e880f13b52e1ed2485e83da4f3962f7dc1a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/66/60/52b0054c4c700d5aa7fc5b7ca96917400d8f061307778578e67a10e25852/orjson-3.11.9-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aff7da9952a5ad1cef8e68017724d96c7b9a66e99e91d6252e1b133d67a7b10" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d5/97/1e3dc2b2a28b7b2528f403d2fc1d79ec5f39af3bc143ab65d3ec26426385/orjson-3.11.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d4e98d6f3b8afed8bc8cd9718ec0cdf46661826beefb53fe8eafb37f2bf0362" }, + { url = "https://mirrors.aliyun.com/pypi/packages/fc/39/31fbfe7850f2de32dee7e7e5c09f26d403ab01e440ac96001c6b01ad3c99/orjson-3.11.9-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a81d52442a7c99b3662333235b3adf96a1715864658b35bb797212be7bddb97" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a1/08/dca0082dd2a194acb93e5457e73455388e2e2ca464a2672449a9ddbb679d/orjson-3.11.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e39364e726a8fff737309aff059ff67d8a8c8d5b677be7bb49a8b3e84b7e218" }, + { url = "https://mirrors.aliyun.com/pypi/packages/11/d4/5bdb0626801230139987385554c5d4c42255218ac906525bf4347f22cd95/orjson-3.11.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4fd66214623f1b17501df9f0543bef0b833979ab5b6ded1e1d123222866aa8c9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/fa/88/a21fb53b3ede6703aede6dce4710ed4111e5b201cfa6bbff5e544f9d47d7/orjson-3.11.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:8ecc30f10465fa1e0ce13fd01d9e22c316e5053a719a8d915d4545a09a5ff677" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3d/57/1b30daf70f0d8180e9a73cefbfbdd99e4bf19eb020466502b01fba7e0e50/orjson-3.11.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:97db4c94a7db398a5bd636273324f0b3fd58b350bbbac8bb380ceb825a9b40f4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/04/83/45fbb6d962e260807f99441db9613cee868ceda4baceda59b3720a563f97/orjson-3.11.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9f78cf8fec5bd627f4082b8dfeac7871b43d7f3274904492a43dab39f18a19a0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5f/cc/2d10025f9056d376e4127ec05a5808b218d46f035fdc08178a5411b34250/orjson-3.11.9-cp313-cp313-win32.whl", hash = "sha256:d4087e5c0209a0a8efe4de3303c234b9c44d1174161dcd851e8eea07c7560b32" }, + { url = "https://mirrors.aliyun.com/pypi/packages/67/bd/2775ff28bfe883b9aa1ff348300542eb2ef1ee18d8ae0e3a49846817a865/orjson-3.11.9-cp313-cp313-win_amd64.whl", hash = "sha256:051b102c93b4f634e89f3866b07b9a9a98915ada541f4ec30f177067b2694979" }, + { url = "https://mirrors.aliyun.com/pypi/packages/91/2b/d26799e580939e32a7da9a39531bc9e58e15ca32ffaa6a8cb3e9bb0d22cd/orjson-3.11.9-cp313-cp313-win_arm64.whl", hash = "sha256:cce9127885941bd28f080cecf1f1d288336b7e0d812c345b08be88b572796254" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8e/eb/5da01e356015aee6ecfa1187ced87aef51364e306f5e695dd52719bf0e78/orjson-3.11.9-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b6ef1979adc4bc243523f1a2ba91418030a8e29b0a99cbe7e0e2d6807d4dce6e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/64/62/3e0e0c14c957133bcd855395c62b55ed4e3b0af23ffea11b032cb1dcbdb1/orjson-3.11.9-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:f36b7f32c7c0db4a719f1fc5824db4a9c6f8bd1a354debb91faf26ebf3a4c71e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5a/5a/07d8aa117211a8ed7630bda80c8c0b14d04e0f8dcf99bcf49656e4a710eb/orjson-3.11.9-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08f4d8ebb44925c794e535b2bebc507cebf32209df81de22ae285fb0d8d66de0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d6/ec/4acaf21483e18aa945be74a474c74b434f284b549f275a0a39b9f98956e9/orjson-3.11.9-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6cc7923789694fd58f001cbcac7e47abc13af4d560ebbfcf3b41a8b1a0748124" }, + { url = "https://mirrors.aliyun.com/pypi/packages/13/d8/5f0555e7638801323b7a75850f92e7dfa891bc84fe27a1ba4449170d1200/orjson-3.11.9-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea5c46eb2d3af39e806b986f4b09d5c2706a1f5afde3cbf7544ce6616127173c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b6/30/ed9860412a3603ceb3c5955bfd72d28b9d0e7ba6ed81add14f83d7114236/orjson-3.11.9-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f5d89a2ed90731df3be64bab0aa44f78bff39fdc9d71c291f4a8023aa46425b7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d0/17/adc514dea7ac7c505527febf884934b815d34f0c7b8693c1a8b39c5c4a57/orjson-3.11.9-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25e4aed0312d292c09f61af25bba34e0b2c88546041472b09088c39a4d828af1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaea64f3f467d22e70eeed68bdccb3bc4f83f650446c4a03c59f2cba28a108db" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c1/7a/bc82a0bb25e9faaf92dc4d9ef002732efc09737706af83e346788641d4a7/orjson-3.11.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a028425d1b440c5d92a6be1e1a020739dfe67ea87d96c6dbe828c1b30041728b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/01/55/e69188b939f77d5d32a9833745ace31ea5ccae3ab613a1ec185d3cd2c4fb/orjson-3.11.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5b192c6cf397e4455b11523c5cf2b18ed084c1bbd61b6c0926344d2129481972" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2e/1a/b8a5a7ac527e80b9cb11d51e3f6689b709279183264b9ec5c7bc680bb8b5/orjson-3.11.9-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea407d4ccf5891d667d045fecae97a7a1e5e87b3b97f97ae1803c2e741130be0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/97/4e/00503f64204bf859b37213a63927028f30fb6268cd8677fb0a5ad48155e1/orjson-3.11.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5f63aaf97afd9f6dec5b1a68e1b8da12bfccb4cb9a9a65c3e0b6c847849e7586" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0d/ba/a23b82a0a8d0ed7bed4e5f5035aae751cad4ff6a1e8d2ecd14d8860f5929/orjson-3.11.9-cp314-cp314-win32.whl", hash = "sha256:e30ab17845bb9fa54ccf67fa4f9f5282652d54faa6d17452f47d0f369d038673" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f3/c3/0c6798456bade745c75c452342dabacce5798196483e77e643be1f53877d/orjson-3.11.9-cp314-cp314-win_amd64.whl", hash = "sha256:32ef5f4283a3be81913947d19608eacb7c6608026851123790cd9cc8982af34b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/16/21/5a3f1e8913103b703a436a5664238e5b965ec392b555fe68943ea3691e6b/orjson-3.11.9-cp314-cp314-win_arm64.whl", hash = "sha256:eebdbdeef0094e4f5aefa20dcd4eb2368ab5e7a3b4edea27f1e7b2892e009cf9" }, +] + +[[package]] +name = "packaging" +version = "26.2" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e" }, +] + +[[package]] +name = "pandas" +version = "3.0.3" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09" }, + { url = "https://mirrors.aliyun.com/pypi/packages/cf/3d/b16412745651e855f357e5e66930248688378853a6e2698a214e331fba1f/pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/31/a8/fa2535168fffcedf67f4f6de28d2dd903a747ca7c8ea6989451aaeb3a92f/pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c9/a4/2eb28f2fccb4ced4a2c79ab2a5dee9ade1ebf44922ebad6fea158c9f95d4/pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f8/45/830bb57f533a4604b355e07edcb8ea18cf88b5f94e5fca92f27052d7c597/pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b9/c5/fc1b368f303087d20e8c9bf3d6ceb186263cfac0ade735cd938538bea839/pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc" }, + { url = "https://mirrors.aliyun.com/pypi/packages/86/bd/fda8f9705b1b09c6ebe14bfc0fa0e4ec8584d54ea673628f157ff55131af/pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870" }, + { url = "https://mirrors.aliyun.com/pypi/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13" }, + { url = "https://mirrors.aliyun.com/pypi/packages/86/54/effdcc3c0ff7a08037889200e148ebe94c16c4f653be078c7b3675955df1/pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac" }, + { url = "https://mirrors.aliyun.com/pypi/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ae/e9/e35cf11c8a136e757b956f5f0efdcaa50aecde85ea055f1898dfc68262f3/pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c4/c2/1ef644445fcd72e3627bceec77e3560636f87ddce4ed841afe76b83b5bf9/pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7e/49/4d8d4f42cbc9c4adc7a1870f269c02cbd6cd40d059622c06fb298addcbad/pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76" }, + { url = "https://mirrors.aliyun.com/pypi/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2a/af/33c469653b0ba03b50c3a98192d4c07f0c75c66b263ceb097fce0ee97d31/pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a2/fa/b8c257bd76b8bd060c3a9151c1fca05e9b9c5e3af5d0f549c0356f6d143d/pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04" }, + { url = "https://mirrors.aliyun.com/pypi/packages/54/eb/f19206ffb0bf1919002969aa448b4702c6594845156a6f8050674855aac3/pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/fd/24/c7c39fb4fe22b71a0c2d78bf0c585c600092d85f94f086d2b3b2f6ca27e2/pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/16/ec/dd2a9eb7fa1204df88c0864164e35b228ac581062ac612ba0a67fd812e4c/pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028" }, + { url = "https://mirrors.aliyun.com/pypi/packages/95/6e/00c61ea8e85b4f6d8d35e11852a1a4998fc7fafc91c6a602d1cc9c972d64/pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/31/89/8fc1c268969fac43688d65fd92e67df24bd128d53cb4d2eee534cd307399/pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/56/3b/e7d20dea247a3e6dc0bd8a6953854afbedc03951def4e7371e05e7263e25/pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0f/54/68a0978d1ef8502b8492099beaa6e7a0c1b32e3b5d4f677f5810cb08711c/pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1" }, +] + +[[package]] +name = "pillow" +version = "12.3.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/1c/3d/bb7fca845737cf9d7dbde16ed1843984665ff2e0a518f5db43e77ec540b9/pillow-12.3.0.tar.gz", hash = "sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/37/bf/fb3ebff8ddcb76aac5a01389251bbbb9519922a9b520d8247c1ca864a25d/pillow-12.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d8/66/9a386a92561f402389a4fc70c18838bf6d35eb5eb5c6850b4b2dc64f5048/pillow-12.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/25/27/ac8f99618ffd3dde21db0f4d4b1d2ab00c0880595bfd17df103f7f39fd0c/pillow-12.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/84/21/a35af28dcc61f37ed850a2d64c65c701321dfbf25085e469d5559360cbbf/pillow-12.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91" }, + { url = "https://mirrors.aliyun.com/pypi/packages/eb/51/8b08617af3ad95e33ce6d7dd2c99ed6c8298f7fb131636303956be022e25/pillow-12.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1d/72/cf78ac9780bb93c28328f408973845a309d4d145041665f734572ced1b52/pillow-12.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df" }, + { url = "https://mirrors.aliyun.com/pypi/packages/20/20/25e0f4dc178a6bc0696793720055519a0de89e7661dae886992decbd2f81/pillow-12.3.0-cp312-cp312-win32.whl", hash = "sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/45/89/da2f7971a317f83d807fdd4065c0af40208e59e692cc43d315a71a0e96d1/pillow-12.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09" }, + { url = "https://mirrors.aliyun.com/pypi/packages/de/47/4845a0a6c0dbf1db8456bd9fc791f13c5ced7ced20606d08a0aacfd25b49/pillow-12.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9d/ac/31fb64e1e7efb5a4b50cd3d92049ba89ac6e4d8d3bb6a74e15048ca3353e/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89" }, + { url = "https://mirrors.aliyun.com/pypi/packages/87/b4/9805e23d2b4d77842b468513841fda254ee42f0289d25088340e4ff46e2d/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace" }, + { url = "https://mirrors.aliyun.com/pypi/packages/df/39/ecf519435a200c693fe053a6ee4d835b41cf963a4dfc2551c4e637cb2a71/pillow-12.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec" }, + { url = "https://mirrors.aliyun.com/pypi/packages/42/92/2fc3ffad878ae8dd5469ec1bc8eb83b71f48e13efdf68f02709003982a32/pillow-12.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66" }, + { url = "https://mirrors.aliyun.com/pypi/packages/10/76/8803c13605b763d33d156c4678fc77f8443389c0c51c8aef707bb02015f4/pillow-12.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1f/01/e18aff37cb0b4aac47ac90f016d347a49aca667ef97f190b06ac2aabc928/pillow-12.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f7/62/de5bdd77d935331f4f802edc11e4d82950f642caad6cb2f949837b8560e2/pillow-12.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/70/4d/105627a13300c5e0df1d174230b32fd1273062c96f7745fd552b945d1e1d/pillow-12.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/6b/1d/f13de01a553988ab895ba1c722e06cf3144d4f57656fd5b81b6d881f1179/pillow-12.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c9/f9/066794cca041b969964f779ee5fa66a9498bbf34248ac39c5d7954e4198f/pillow-12.3.0-cp313-cp313-win32.whl", hash = "sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a6/9b/7a58e61d62be561da3a356fe2384d4059a6345fc130e23ef1c36a5b81d24/pillow-12.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/aa/b0/c4ed4f0ef8f8fa5ee8351537db6650bb8189f7e118842978dd6589065692/pillow-12.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/dc/01/001f65b68192f0228cc1dbbc8d2530ab5d58b61037ba0587f946fea607cd/pillow-12.3.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1a/d2/0219746d0fd16fc8a84498e79452375be3797d3ce4044596ce565164b84f/pillow-12.3.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c8/02/8d0bc62ef0302318c46ff2a512822d2610e81c7aa46c9b3abe6cbaca5ad0/pillow-12.3.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930" }, + { url = "https://mirrors.aliyun.com/pypi/packages/85/e2/73c77d218410b14f5f2d565e8a998d5317b7b9c75368d29985139f7a46f0/pillow-12.3.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b1/9d/8b2c807dbef61a5197c047afe99823787eb66f63daf9fb2432f91d6f0462/pillow-12.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/18/7e/e483414b35800b86b6f08dbbc7803fb5cd52c4d6f897f47d53ea2c7e6f65/pillow-12.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f0/f4/68c491844841ede6bed70189546b3ee9731cf9f2cbad396faff5e1ccba45/pillow-12.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a3/34/77f3f793fed8efc7d243f21b33c5a3f0d1c97ee70346d3db855587e155ff/pillow-12.3.0-cp314-cp314-win32.whl", hash = "sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f1/e0/492879f69d94f91f60fc8cd05ba03650e9520afebb2fb7aa12777d7c7f38/pillow-12.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c9/ac/6b11f2875f1c2ac040d84e1bbf9cf22a88038f901ca1037898b280b38365/pillow-12.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838" }, + { url = "https://mirrors.aliyun.com/pypi/packages/52/69/c2208e56af9bfc1913afb24020297a691eb1d4ef688474c8a04913f65e04/pillow-12.3.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/07/70/e5686d753e898a45d778ff1718dba8516ead6ab6b95d85fc8c4b70650cf2/pillow-12.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d5/37/25c6692f06927ee973ff18c8d9ee98ad0b4d84ee67a09610c2dd1447958e/pillow-12.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385" }, + { url = "https://mirrors.aliyun.com/pypi/packages/cc/91/420637fcb8f1bc11029e403b4538e6694744428d8246118e45719f944556/pillow-12.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/10/08/b94d7811281ccf0d143a1cf768d1c49e1e54af63e7b708ab2ee3eb87face/pillow-12.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d2/87/24233f785f55474dc02ce3e739c5528a77e3a862e9333d1dd7a25cc31f70/pillow-12.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931" }, + { url = "https://mirrors.aliyun.com/pypi/packages/23/26/fcb2f6e37175b04f53570b59937867e2b80ee1685e744023153028fc14f9/pillow-12.3.0-cp314-cp314t-win32.whl", hash = "sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/90/de/3634abee5f1c9e13c56787b7d5517b0ba8d6de51700b95578cf338349c9f/pillow-12.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ce/2a/fd13f8eb24de5714a6eb444a3d67e2842c6c576e159a43793adf23051351/pillow-12.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5d/dc/8fdce34ec725a33c81c6ba122b904d6b9024e50ea9ac7bede62fab54506c/pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139" }, + { url = "https://mirrors.aliyun.com/pypi/packages/76/66/2044b9a63d3b84ff048228dfcb7cd9bf0df983e8470971bf7d4c57b693de/pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402" }, + { url = "https://mirrors.aliyun.com/pypi/packages/52/7e/1f67e6f4ece6b582ee4b539decbcc9f848dc245a93ed8cd7338bafef72f1/pillow-12.3.0-cp315-cp315-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/12/40/d306fc2c8e4d45d7f175c77edca7063be7b86fe7fe6e68f4353bf71d808c/pillow-12.3.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/dd/44/668fb1437e8ce420f62d6106eb66e44a5971602a4d794615bdf79315d82d/pillow-12.3.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0c/08/93fa2e70e30a2d81547e481b6ee2bb9522117221fb1e0ce4b5df70967677/pillow-12.3.0-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f8/6d/043e96ff814fc31a33077e4cba86082167db520c93632afdf2042febbb0c/pillow-12.3.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/af/92/ba71d2ee2ac0edf3fa33bd9d5ee9ee080da70b1766f3ca3934f9938ddac9/pillow-12.3.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0f/ce/e63064e2122923ff687c8ad792d0d736a7b3920a56a46982e81a7fdd25d6/pillow-12.3.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71" }, + { url = "https://mirrors.aliyun.com/pypi/packages/54/76/a09cc3ccc8d773a7283d34c38bec1708f9e3cc932093cbc4c5e71ac4060b/pillow-12.3.0-cp315-cp315-win32.whl", hash = "sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3e/03/1846c49ba3b1d5550392a4bbd06d6fb4578e1cd91a803198b5c90f5f7d53/pillow-12.3.0-cp315-cp315-win_amd64.whl", hash = "sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/fb/bb/89f35dcc79610423f9f195504d7def7f0d1416a711541b42867e25fe3412/pillow-12.3.0-cp315-cp315-win_arm64.whl", hash = "sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658" }, + { url = "https://mirrors.aliyun.com/pypi/packages/30/88/707027ba09942dfa2c28759b5c222d769290a41c6d20ea60ec250801941f/pillow-12.3.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b0/6d/00352fa25332c2569cd387851f568cc5a4b75a9adbfb37ac4fbce4c02eec/pillow-12.3.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64" }, + { url = "https://mirrors.aliyun.com/pypi/packages/13/4f/9e049dfa21af7c22427275720e2490267ba8138120add5c4c574deb69782/pillow-12.3.0-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/36/16/cf6eeaae8d0fce8dd390a33437cf68c5d5bd73834a2bc6e2f14efda0ab45/pillow-12.3.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1e/69/dbf769bdd55f48bf5733cac28edc6364ffaa072ec9ba336266e4fe66be55/pillow-12.3.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a0/e1/ffc9cfc2eea0d178da8018e18e959301ad9d6bc9f3edb7181e748a474b97/pillow-12.3.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/18/f0/a5595c1e8c3ae44b9828cb2f0fa8155e5095ef04d6327b8f61cf44a3df85/pillow-12.3.0-cp315-cp315t-win32.whl", hash = "sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e4/04/62bcd9f844984c5938d3b05264a61d797a29d3e0812341a8204af70bbdee/pillow-12.3.0-cp315-cp315t-win_amd64.whl", hash = "sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3d/68/1f3066acedf37673694a7141381d8f811ae97f30d34413d236abe7d489f1/pillow-12.3.0-cp315-cp315t-win_arm64.whl", hash = "sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59" }, +] + +[[package]] +name = "platformdirs" +version = "4.11.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/78/9b/560e4be8e26f6fd133a03630a8df0c663b9e8d61b4ade152b72005aec83b/platformdirs-4.11.0.tar.gz", hash = "sha256:0555d18370482847566ffabcaa53ad7c6c1c29f195989ae1ed634a05f76ea1e0" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/7d/68/d8d58938dfb1370b266a1a729e6d77a985be23689a0496498ee17b2cbf90/platformdirs-4.11.0-py3-none-any.whl", hash = "sha256:360ccded2b7fce0af0ff80cc8f5942a1c5d99b0e856033acb030bfc634709e74" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746" }, +] + +[[package]] +name = "pooch" +version = "1.9.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "packaging" }, + { name = "platformdirs" }, + { name = "requests" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/83/43/85ef45e8b36c6a48546af7b266592dc32d7f67837a6514d111bced6d7d75/pooch-1.9.0.tar.gz", hash = "sha256:de46729579b9857ffd3e741987a2f6d5e0e03219892c167c6578c0091fb511ed" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl", hash = "sha256:f265597baa9f760d25ceb29d0beb8186c243d6607b0f60b83ecf14078dbc703b" }, +] + +[[package]] +name = "protobuf" +version = "7.35.1" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/da/01/9ef0afd7999eb9badb3a768b4aedd78c86d4c65cfaf1958ab276199e76b4/protobuf-7.35.1.tar.gz", hash = "sha256:ce115a26fe0c39a2c29973d914d327e516a6455464489fe3cd1e51a1b354f81a" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/10/03/8aeeb7458d22546bf64b5250ca1daeb5ff757d900e8e4a7476c6f0db843e/protobuf-7.35.1-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:24f857477359a85c0c235261b8ba905fd51b2562f4a64ca1df5473f29850cbf6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/37/4b/dfb89eb0e652a1ff073c39a59fb5e3a83cfe9b57a2c83fa6d78270101767/protobuf-7.35.1-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:11d6b0ec246892d85215b0a13ca6e0233cf5284b68f0ac02646427f4ff88a799" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0f/58/dc12f2cd484951524af6e3382c785869b9b3fb5e52ee95ae23add53ee8f9/protobuf-7.35.1-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:b73f9489a4b8b1c9cb1f8ed951c736392592edb24b9d6819f36d2e10b171d5b4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e4/be/5b3cfe508bfab6761414ff944e3366eb13be4fd71efcd69450f89ba39f43/protobuf-7.35.1-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:74758715c53d7158fb76caf4f0cfdacc5329a4b1bb994f865d6cf302d413a1c4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d8/bc/6d6c7ba8709c85f8f2c390b2b118d6fb08a783676a572271851bf45a7d22/protobuf-7.35.1-cp310-abi3-win32.whl", hash = "sha256:353652e4efd0bca5b5fc2656abf8307ef351f0cf938c9eba09f0e09c20a25c30" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0a/19/8d0cb6f20a1ef7b18f1c8986ad5783f22f84cce39c6ce9a6e645ea55192e/protobuf-7.35.1-cp310-abi3-win_amd64.whl", hash = "sha256:230a75ddfc2de4806e56696ce9640c1cdfdb6543b7cfce98d42a4c0a0e7bdb87" }, + { url = "https://mirrors.aliyun.com/pypi/packages/19/c7/5f7c636ec43e0c545e28d1f1db71990108306f7bdcb89f069ba97e428e7f/protobuf-7.35.1-py3-none-any.whl", hash = "sha256:4bc97768d8fe4ad6743c8a19403e314511ed9f6d13205b687e52421c023ac1b9" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992" }, +] + +[[package]] +name = "pydantic" +version = "2.13.4" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba" }, +] + +[[package]] +name = "pydantic-core" +version = "2.46.4" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2" }, + { url = "https://mirrors.aliyun.com/pypi/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712" }, + { url = "https://mirrors.aliyun.com/pypi/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce" }, + { url = "https://mirrors.aliyun.com/pypi/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987" }, + { url = "https://mirrors.aliyun.com/pypi/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458" }, + { url = "https://mirrors.aliyun.com/pypi/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894" }, + { url = "https://mirrors.aliyun.com/pypi/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76" }, + { url = "https://mirrors.aliyun.com/pypi/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd" }, + { url = "https://mirrors.aliyun.com/pypi/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462" }, + { url = "https://mirrors.aliyun.com/pypi/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914" }, + { url = "https://mirrors.aliyun.com/pypi/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28" }, + { url = "https://mirrors.aliyun.com/pypi/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac" }, + { url = "https://mirrors.aliyun.com/pypi/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565" }, + { url = "https://mirrors.aliyun.com/pypi/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02" }, + { url = "https://mirrors.aliyun.com/pypi/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526" }, + { url = "https://mirrors.aliyun.com/pypi/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0" }, +] + +[[package]] +name = "pydub" +version = "0.25.1" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/fe/9a/e6bca0eed82db26562c73b5076539a4a08d3cffd19c3cc5913a3e61145fd/pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6" }, +] + +[[package]] +name = "pygame" +version = "2.6.1" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/49/cc/08bba60f00541f62aaa252ce0cfbd60aebd04616c0b9574f755b583e45ae/pygame-2.6.1.tar.gz", hash = "sha256:56fb02ead529cee00d415c3e007f75e0780c655909aaa8e8bf616ee09c9feb1f" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/92/16/2c602c332f45ff9526d61f6bd764db5096ff9035433e2172e2d2cadae8db/pygame-2.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4ee7f2771f588c966fa2fa8b829be26698c9b4836f82ede5e4edc1a68594942e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/cd/53/77ccbc384b251c6e34bfd2e734c638233922449a7844e3c7a11ef91cee39/pygame-2.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c8040ea2ab18c6b255af706ec01355c8a6b08dc48d77fd4ee783f8fc46a843bf" }, + { url = "https://mirrors.aliyun.com/pypi/packages/06/be/3ed337583f010696c3b3435e89a74fb29d0c74d0931e8f33c0a4246307a9/pygame-2.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47a6938de93fa610accd4969e638c2aebcb29b2fca518a84c3a39d91ab47116" }, + { url = "https://mirrors.aliyun.com/pypi/packages/fd/ca/b015586a450db59313535662991b34d24c1f0c0dc149cc5f496573900f4e/pygame-2.6.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33006f784e1c7d7e466fcb61d5489da59cc5f7eb098712f792a225df1d4e229d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b9/f2/d31e6ad42d657af07be2ffd779190353f759a07b51232b9e1d724f2cda46/pygame-2.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1206125f14cae22c44565c9d333607f1d9f59487b1f1432945dfc809aeaa3e88" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f3/42/8ea2a6979e6fa971702fece1747e862e2256d4a8558fe0da6364dd946c53/pygame-2.6.1-cp312-cp312-win32.whl", hash = "sha256:84fc4054e25262140d09d39e094f6880d730199710829902f0d8ceae0213379e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5f/90/7d766d54bb95939725e9a9361f9c06b0cfbe3fe100aa35400f0a461a278a/pygame-2.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:3a9e7396be0d9633831c3f8d5d82dd63ba373ad65599628294b7a4f8a5a01a65" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e1/91/718acf3e2a9d08a6ddcc96bd02a6f63c99ee7ba14afeaff2a51c987df0b9/pygame-2.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae6039f3a55d800db80e8010f387557b528d34d534435e0871326804df2a62f2" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0e/c6/9cb315de851a7682d9c7568a41ea042ee98d668cb8deadc1dafcab6116f0/pygame-2.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2a3a1288e2e9b1e5834e425bedd5ba01a3cd4902b5c2bff8ed4a740ccfe98171" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9f/8f/617a1196e31ae3b46be6949fbaa95b8c93ce15e0544266198c2266cc1b4d/pygame-2.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27eb17e3dc9640e4b4683074f1890e2e879827447770470c2aba9f125f74510b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3b/87/2851a564e40a2dad353f1c6e143465d445dab18a95281f9ea458b94f3608/pygame-2.6.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c1623180e70a03c4a734deb9bac50fc9c82942ae84a3a220779062128e75f3b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/85/b5/aa23aa2e70bcba42c989c02e7228273c30f3b44b9b264abb93eaeff43ad7/pygame-2.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef07c0103d79492c21fced9ad68c11c32efa6801ca1920ebfd0f15fb46c78b1c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a6/06/29e939b34d3f1354738c7d201c51c250ad7abefefaf6f8332d962ff67c4b/pygame-2.6.1-cp313-cp313-win32.whl", hash = "sha256:3acd8c009317190c2bfd81db681ecef47d5eb108c2151d09596d9c7ea9df5c0e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7e/11/17f7f319ca91824b86557e9303e3b7a71991ef17fd45286bf47d7f0a38e6/pygame-2.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:813af4fba5d0b2cb8e58f5d95f7910295c34067dcc290d34f1be59c48bd1ea6a" }, +] + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176" }, +] + +[[package]] +name = "pyparsing" +version = "3.3.2" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d" }, +] + +[[package]] +name = "pyroomacoustics" +version = "0.10.1" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "cython" }, + { name = "numpy" }, + { name = "scipy" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/5e/f9/063c249181cdbbbd80eb621f871a4173e95df439e5d8fd22de4df44fed60/pyroomacoustics-0.10.1.tar.gz", hash = "sha256:26aa7d680e68d0b947220026b95b1c5a05eee08f38c53ff49a7804672c0a2886" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/ab/72/750082f5c94505160ffa82c6e582afcba965837bf3a6d1b58911b9c99fc3/pyroomacoustics-0.10.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:523ba1baeaa594b0ea9c02df9ea279780dc054dd6a0f79f6823874f026da3dbf" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c4/af/67a3d41d5fdd4a811b186426d2deb70bed38c068ed006500dc2f696edf86/pyroomacoustics-0.10.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce0d8bf51b1994ef88db94ed984f493a2db2238b9f93a0aae967375d4b0e9d3d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f0/55/8af80433f3318549573c60c3527a8adf7080bf45bc2f57280ad7325d16a3/pyroomacoustics-0.10.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c1b1077cfcafed9775d1b826dbbaf25fb4090aa95d21e9bc6dac795f88e8875c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d9/34/19706fee63d5171d8edfc0b6f85cd17b651cd89822abc80cda8b47dc50ba/pyroomacoustics-0.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:421fa320b6ad31465dc59e137a7b0e1033687cb821febcc8cb4d76f67a4c7b57" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7c/b1/b6c02e0f3374ddc6776e6a58fe19e2bdeb5cae0192893b9030810f3b47a7/pyroomacoustics-0.10.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d58f9d819554d552cb1d228ef6cffaff5a308aabbf9db2a72faea3c96e7b9445" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a6/ac/fdbf223e09843c90a825665e1e156f3f095d2b742bd1f186028aeee68bab/pyroomacoustics-0.10.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:af4d4f672982d616a46df4de0f7ec734703fb904d9c984d9f07ddb1e8c222818" }, + { url = "https://mirrors.aliyun.com/pypi/packages/84/20/90361ee35389cff48165fb08072af7b75551eac3387f839804b3016d20e6/pyroomacoustics-0.10.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c73af58bca4109bcf4bb567f0a3db9d5d94684a16705be4b674223f4f048f2ad" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ea/df/fd267974029c8a1426b35ed00f30e68afbb7810acde50cd31d7c40ba7022/pyroomacoustics-0.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:abcc05fe21315b6f0244ba77e96b4d0be63efdf99288614b50c33871a2d4ed2d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b3/f1/0771da3406c62addc43916251952bc2448c3550bdc219cfacf997b808dce/pyroomacoustics-0.10.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:bbefe48fcb2117fb0731a5be3f82d1d029e603d5a56bdc7fbfa2c8ccc4f6ace5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ee/24/1881600551e7d01aced3b1b048b2790667210e07f9a962a242f88bdea2ef/pyroomacoustics-0.10.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b8f13eeb593e4394b724e71b7302dcce77f3727bbb204b966a54c999cee32078" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a9/1b/fceb2596b9d511eef464bab56c950f7280af2e83e8254a922e1ba33d2387/pyroomacoustics-0.10.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef6d038374cc205c567d47203eda1fd745d7e34c06f3fb89a13289f065807ead" }, + { url = "https://mirrors.aliyun.com/pypi/packages/70/e5/14c6055896cd94e98cdd2fb74559a77cc2567fe2b2f89c42d3be407cb194/pyroomacoustics-0.10.1-cp314-cp314-win_amd64.whl", hash = "sha256:ce6743905c967c9362f546883f57f5e4e0a508c44222c0efb947074b9d0d39fe" }, +] + +[[package]] +name = "pytest" +version = "9.1.1" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" }, +] + +[[package]] +name = "python-multipart" +version = "0.0.32" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/5b/42/55c32bb9b12693c092ad250a0e82edb5b31ddeda6eb772de5f308b3804ad/python_multipart-0.0.32.tar.gz", hash = "sha256:be54b7f3fa167bb83e4fcd936b887b708f4e57fe75911c02aebf53efaf8d938e" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl", hash = "sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23" }, +] + +[[package]] +name = "pytz" +version = "2026.2" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/ff/46/dd499ec9038423421951e4fad73051febaa13d2df82b4064f87af8b8c0c3/pytz-2026.2.tar.gz", hash = "sha256:0e60b47b29f21574376f218fe21abc009894a2321ea16c6754f3cad6eb7cdd6a" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/ec/dd/96da98f892250475bdf2328112d7468abdd4acc7b902b6af23f4ed958ea0/pytz-2026.2-py2.py3-none-any.whl", hash = "sha256:04156e608bee23d3792fd45c94ae47fae1036688e75032eea2e3bf0323d1f126" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196" }, + { url = "https://mirrors.aliyun.com/pypi/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28" }, + { url = "https://mirrors.aliyun.com/pypi/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc" }, + { url = "https://mirrors.aliyun.com/pypi/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea" }, + { url = "https://mirrors.aliyun.com/pypi/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be" }, + { url = "https://mirrors.aliyun.com/pypi/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26" }, + { url = "https://mirrors.aliyun.com/pypi/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac" }, + { url = "https://mirrors.aliyun.com/pypi/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310" }, + { url = "https://mirrors.aliyun.com/pypi/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788" }, + { url = "https://mirrors.aliyun.com/pypi/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35" }, + { url = "https://mirrors.aliyun.com/pypi/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065" }, + { url = "https://mirrors.aliyun.com/pypi/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b" }, +] + +[[package]] +name = "requests" +version = "2.34.2" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0" }, +] + +[[package]] +name = "rich" +version = "15.0.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb" }, +] + +[[package]] +name = "safehttpx" +version = "0.1.7" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "httpx" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/89/d1/4282284d9cf1ee873607a46442da977fc3c985059315ab23610be31d5885/safehttpx-0.1.7.tar.gz", hash = "sha256:db201c0978c41eddb8bb480f3eee59dd67304fdd91646035e9d9a720049a9d23" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/2e/a3/0f0b7d78e2f1eb9e8e1afbff1d2bff8d60144aee17aca51c065b516743dd/safehttpx-0.1.7-py3-none-any.whl", hash = "sha256:c4f4a162db6993464d7ca3d7cc4af0ffc6515a606dfd220b9f82c6945d869cde" }, +] + +[[package]] +name = "scikit-learn" +version = "1.9.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "joblib" }, + { name = "narwhals" }, + { name = "numpy" }, + { name = "scipy" }, + { name = "threadpoolctl" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/fa/6f/37092bdb25f712817231799fc5674d8e704066a8a70c1d2d40517e18b4ab/scikit_learn-1.9.0.tar.gz", hash = "sha256:8833266989d3a5110178a9fae30783675460724d0e1efb13b14901d2c660c557" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/ac/20/75f915ff375d6249e6550ac740fdbbd66159a068fd3af1400ff62036b07a/scikit_learn-1.9.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2bd41b0d201bc81575531b96b713d3eb5e5f50fb0b82101ff0f92294fdc236ac" }, + { url = "https://mirrors.aliyun.com/pypi/packages/cc/d5/2b5148f2279196775e1db2aeb85d14b70ac80e7e32b3b28e7ebeafb0901d/scikit_learn-1.9.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:5be45aa4a42a68a533913a6ed736cf309de2226411c79ef8d609a5456f1939b1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a0/ee/5adbc77656b71f9456a2f5a7a9fdb4bcf9207a6b962889f1c2f9323afa4e/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e50ed4da51974e86e940690e9a3d82e729b62b5a49f7c9bac534d515d39d86f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/6c/c2/63fdda36c56437eeb44aaf9493c8bcd62ce230ab1598924fc626ffbfa943/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:056c92bb67ad4c28463c2f2653d9701449201e7e7a9e94e321be0f71c4fef2b8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/83/a4/c8e67227c680e2259c8864ae72ff48b06e16a6f51253a22167aa02a8aa4e/scikit_learn-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:4306775fad04cc4b472a1b15af1ae9cede1540fbfcc17fbce3767cd8dc7ae283" }, + { url = "https://mirrors.aliyun.com/pypi/packages/cf/fd/3c0863792e98e67e9184aa4029288a175935eb65443afcd30d4f143450cf/scikit_learn-1.9.0-cp312-cp312-win_arm64.whl", hash = "sha256:26e22435f63bcdcf396b574273f29f13dd531f5ea035801f5be10ba1540a4e60" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3c/01/cf3310626b6d48d3e9be69a1223f9180360b5e6edb045f50fade723ce494/scikit_learn-1.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:80746d63bd4b6eaca54d36fe5feaf4d28bb38dc6f9470f81c7cad7c40155f119" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3e/04/5acd7ae280c5f93b6ac5ef6cdec14eef4c8d1cd91d85b3292989c94d96b1/scikit_learn-1.9.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5b934c45c252844a91d69fda3a34cff5e7307e1db10d77cb10a3980312c74713" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0c/39/ffe829a5b8ecb40a518724a997794657fdc354ada5e8fe8e64d998c0bac9/scikit_learn-1.9.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:38c3dcb9a1ffb85505ec53d54c7b4aea0cff70050425a7760c2af661ac85df05" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1f/88/8dab5de10c638c083772a6be83a3d8106ced492f74a928c8693638e5bb50/scikit_learn-1.9.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da76d09304a4706db7cc1e3ebaa3b6b98a67365cc11d2996c4f1e58ba47df714" }, + { url = "https://mirrors.aliyun.com/pypi/packages/20/3f/7917ca72464038f6240ec70c29f94862d08a34a74291ae4d4ec5eb8186a0/scikit_learn-1.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:5808d98f15c6bf6d9d96d2348c1997392a5888ce7097e664105f930c4bca1277" }, + { url = "https://mirrors.aliyun.com/pypi/packages/78/c7/15739eb2f61fda3c54639e9942414e5a19ad8a8d1f5a3266afad7cb7df80/scikit_learn-1.9.0-cp313-cp313-win_arm64.whl", hash = "sha256:d77f54c017633791bc0225a43e2f8d03745fdcfe4880268fcc4df15f505dec2e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f4/7d/c9a35cf59b20a86fec24d306f1547b78dec194b08d367ce2a3e4854169d9/scikit_learn-1.9.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:9656acd4e93f74e0b66c8a36c88830a99252dfa900044d36bc2212ae89a47162" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3c/a7/552a7821597c632b907f7bfe8f36f9f572777af8ef8a48353041cf8e091a/scikit_learn-1.9.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:24360002ae845e7866522b0a5bbf690802e7bc388cac8663502e78aa98598aa2" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7d/79/f4a0c4fe9711154cddabf913471153af79056382ddc612cfe5ee0ff4b72e/scikit_learn-1.9.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5162ad10a418c8a282dde04c9aa06965de3e9a65f33c1440c0ae69bb1a09d913" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f0/af/4d72d9e475ac83719160c662619e4bf7b95c19507cd582e7d0167a3c3dae/scikit_learn-1.9.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fea2cc5677ab49d6f5bade978c866da44957b712d92e9635e8b4f723013c3cb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a2/d5/6a58eea2cb9abbb9b3f2bb8b2cfb3243d1152d69f442d256c7af71304769/scikit_learn-1.9.0-cp314-cp314-win_amd64.whl", hash = "sha256:64fa347efc1c839c487433e40c5144d38c336e8a2b59c81aa8660373945c2673" }, + { url = "https://mirrors.aliyun.com/pypi/packages/65/5b/d4c879cf358f1187141cf90ced473f087183489090244f50c124a2ee478b/scikit_learn-1.9.0-cp314-cp314-win_arm64.whl", hash = "sha256:1b944b6db288f6b926e3650026ddafb988929de95d11fc2cc5fa117773c9ba42" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8a/43/bfae3121ec67ae09150d453c442c7c1cc166e9aefe056e6ab3b7728a5cfc/scikit_learn-1.9.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:4ccacf04ca5f4b492158a5f28afe0ace43f81b2571e4b9a66d34848b46128949" }, + { url = "https://mirrors.aliyun.com/pypi/packages/75/b0/20a4546eb17f3b25d3c66df15810411c14ed5065bcfab50b53c96fb627b2/scikit_learn-1.9.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:ee1a8db2c18c08e34c7412d4b10be1cac214cd4ea7dc9715a6a327eb49a37c96" }, + { url = "https://mirrors.aliyun.com/pypi/packages/18/3c/e440e039bb82cd19004edaaad00acbde0fb9b461083c3ecf37941c557312/scikit_learn-1.9.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:147e9329ef0e39f75d4cffa02b2aa48d827832684926cd5210d9a2cb5c57246b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/43/26/b341b8dab5998da6270a3a42c2152c578501354d36f944b5856757035ef8/scikit_learn-1.9.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bad8f8b9950321b54c965fdcbac6c6c55e79e16646b49977bcf3668d3870a1a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/fb/de/b650b4d69b84468cfa2e28a3ff7b8103743029e6446ce1a97fe060ef688c/scikit_learn-1.9.0-cp314-cp314t-win_amd64.whl", hash = "sha256:78fc56eafd4edb9575d2d8950d1dd152061abb573341a1cb7e099fc40f6c6666" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ee/f3/ff83d76d7418112e5a61326443cdda87be3545dd8d6599c95b2481a4419e/scikit_learn-1.9.0-cp314-cp314t-win_arm64.whl", hash = "sha256:051075bda8b7aab87b1906ab3d4740a1e1224a19d7b3781a576736edc94e76aa" }, +] + +[[package]] +name = "scipy" +version = "1.18.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/a7/25/c2700dfaf6442b4effaa91af24ebce5dc9d31bb4a69706313aae70d72cd0/scipy-1.18.0.tar.gz", hash = "sha256:67b2ad2ad54c72ca6d04975a9b2df8c3638c34ddd5b28738e94fc2b57929d378" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/6a/19/ca10ead60b0acc80b2b833c2c4a4f2ff753d0f58b811f70d911c7e94a25c/scipy-1.18.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:7bd21faaf5a1a3b2eff922d02db5f191b99a6518db9078a8fb23169f6d22259a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/96/72/1e6442a00cd2924d361aa1b642ab6373ec35c6fabf311a760be9f76e0f13/scipy-1.18.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:265915e79107de9f946b855e50d7470d5893ec3f54b342e1aa6201cbdcd8bb6b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9b/2d/11dd93d21e147a73ba22bd75c0b9208d3a2e0ec76d53170ce7d9029b1015/scipy-1.18.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9ab7b758be6940954a713ee466e2043e9f6e2ed965c1fce5c91039f4be3d90a9" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9c/01/93552f75e0d2a7dd115a45e59209c51e8d514daff02fc887d2623be06fe1/scipy-1.18.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:97b6cddaaee0a779ef6b5ca83c9604b27cc16b2b8fc22c142652df8793319fb8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3c/23/21f5e703643d66f21faa6b4c73195bfcad70c55efcb4f1ab327cd7c4101a/scipy-1.18.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:52a96e21517c7292375c0e27dd796a811f03fcea5fd4d108fdfea8145dcf17ab" }, + { url = "https://mirrors.aliyun.com/pypi/packages/dd/aa/1b939f6c67ed68635bb538e6752d3dacc02f66535182e939a89581a44e9c/scipy-1.18.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1f55797419e16e7f30cf88ffb3113ce0467f00cfe3f70d5c281730b21769bfc2" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b6/ff/eec46be7e9234208f801062b53e1983085eddebd693f6c9bfb03b459830d/scipy-1.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ad033410e2e0672ffdc1042110cef20e1c46f8fd0616cee1d44d8d58fad8fc11" }, + { url = "https://mirrors.aliyun.com/pypi/packages/84/ca/210d4759c7210bb7d269437421959b39a33434e2776b60c5cb8a763bb30a/scipy-1.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4a55985d54c769c872e64b7f4c8a81cc30ef700cc04296abbbf3705439c126de" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2b/54/9a9edb45345bd6744da5ddfb6628e5d5185920494c6a67ec45b6381004cb/scipy-1.18.0-cp312-cp312-win_amd64.whl", hash = "sha256:71ccc8faa2dd16ac310233203474a8b5cb67f10dedd54a3116d34943f4b19132" }, + { url = "https://mirrors.aliyun.com/pypi/packages/99/0e/33f32a2a58987e26aec0f7df252cbbad1e90ae77bdbc76f40dd4ed0cf0ea/scipy-1.18.0-cp312-cp312-win_arm64.whl", hash = "sha256:d88363fd9d8fbd3511bd273f1a49efb2a540773ddf92a91d57498ce7dd7f3e76" }, + { url = "https://mirrors.aliyun.com/pypi/packages/05/52/9c0136c2de7ae0779b7b366447766cec6d9f0702c56bb8ffeb04c8fd3af4/scipy-1.18.0-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:09143f676d157d9f546d663504ef9c1becb819824f1afc018814176411942446" }, + { url = "https://mirrors.aliyun.com/pypi/packages/02/73/0291a64843270f4efb86cdcf2ee0f2048631b65ec6b405398b2b4dbf11bf/scipy-1.18.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5efe260f69417b97ddae455bfb5a95e8359f7f66ad7fa9522a60feb66f169520" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d3/0f/10ffa0b697a572f4e0d48b92a88895d366422f019f723e7e14a84c050dac/scipy-1.18.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:68363b7eaacd8b5dd426df56d782cc156468ac79a127a1b87ca597d6e2e82197" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7e/d2/e896cea21ba8edd6c81d4c55b1ffcc717e79698dcbebf9641b4cfb4c6622/scipy-1.18.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:c5557d8be5da8e41353fcd4d21491fdbab83b062fc579e94dc09a7c8ab4f669b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ea/b2/e83ea34279a52c03374477c74006256ec78df65fc877baa4617d6de1d202/scipy-1.18.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0d13bca67c096d89fb95ced0d8921807300fce0275643aef9533cc63a0773468" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f6/af/e8fe5fb136f51e2b01678b92cb4106d10d8cd68ec147ead2e7cb0ac75398/scipy-1.18.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a46f9273dbd0eb1cefba61c9b8648b4dfe3cbc14a080176f9a73e44b8336dc7f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3a/49/2c5cbb907b56695fc67517811d1db234dfd83381a84814ec220aded2794d/scipy-1.18.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5aba46108853ddfc77906b6557aac839d2b52e900c1d72a1180adaaab58d265f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/bb/73/eda39f7a2d306ff0ffc574afd13c0bbb6d10a603d9a413998ee269487a80/scipy-1.18.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b6f758e35f12757b5d95c00bc6de2438e229c2664b7a92e96f205959d9f2dfa4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b7/d2/ae881ee28d014f38e0ccbfd974a06a919ba9af34f1f74bf42b5301891d63/scipy-1.18.0-cp313-cp313-win_amd64.whl", hash = "sha256:1afac4a847207c7ff8efd321734a50b06d0280b3b2a2c0fc2f413101747ad7c7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/70/3a/21154e2d54eb3639c6bf4dbae2e531c68356bfe95990daa30df33b30d556/scipy-1.18.0-cp313-cp313-win_arm64.whl", hash = "sha256:c5dbddf60e58c2312316d097271a8e73d40eaf2eabfa4d95ed7d3695bbf2ce7b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/78/b5/915a19b3de2f7430062b509653563db1633ddbb6f021b06731521115d4e2/scipy-1.18.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:4c256ee70c0d1a8a2ace807e199ccd4e3f57037433842abb3fb36bc17eaa9578" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d7/88/b72def7262e150d16be13fca37a96481138d624e700340bc3362a7588929/scipy-1.18.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:2ef3abc54a4ffc53765374b0d5728532dfdd2585ed23f6b11c206a1f0b1b9af8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/91/02/2e636a61a525632c373cf6a9c24442a3ffb79e364d38e98b32042964ac32/scipy-1.18.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:f2a6af57bd9e4a75d70e4117e78a1bbee84f79ae3fbb6d0111005d6ebcc4cb8d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c9/b6/2135974442f6aba159d9d39d774a1c8cb19947016725d69fecc685df45bf/scipy-1.18.0-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:3f1ac564d3bf6c03d861d2cd87a1bea0da2887136f7fb1bf519c05a8971452d6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f6/e6/ba89ec5abf6ee9257c0d1ec985573f3ae32742c24bc03e016388a40b1b15/scipy-1.18.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40395a5fcd1abee49a5c7aaa98c29db393eedc835138560a588c47ec16156690" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7f/c4/bc41eb19b0fd0db868f4132920879019318d80cc522ad8f2bca4611af808/scipy-1.18.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ca01e8ae69f1b18e9a58d91afead31be3cef0dd905a10249dac559ee15460a0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/53/a4/cbdeef6eb3830a8462a9d4ada814de5fc984345cc9ecf17cbec51a036f1e/scipy-1.18.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7a7f3b01647384dbc3a711e8c6778e0aabbe93959249fef5c7393396bcac0867" }, + { url = "https://mirrors.aliyun.com/pypi/packages/80/4d/b2b82502b65f661d1b789c1665dcdf315d5f12194e06fc0b37946294ebae/scipy-1.18.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6aa94e78ec192a30063a5e72e561c28af769dc311190b24fe91774eff1969709" }, + { url = "https://mirrors.aliyun.com/pypi/packages/93/3e/902d836831474b0ab5a37d16404f7bc5fafd9efba632890e271ba952635f/scipy-1.18.0-cp314-cp314-win_amd64.whl", hash = "sha256:2d8bbdc6c817f5b4006a54d799d4f5bab6f910193cbb9a1ff310833d4d270f61" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b6/43/8d73b337a3bdb14daa0314f0434210747c02d79d729ce1777574a817dcf6/scipy-1.18.0-cp314-cp314-win_arm64.whl", hash = "sha256:18e9575f1569b2c54174e6159d32942e03731177f63dce7975f0a0c88d102f5b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b4/b4/f11918b0508a2787031a0499a03fbe3546f3bb5ca05d01038c45b278c09a/scipy-1.18.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:f351e0dd702687d12a402b867a1b4146a256923e1c38317cbc472f6372b94707" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7b/d1/1f287b57c0ff0ee5185dff3946d92c8017d39b0e431f0ae79a3ff1859512/scipy-1.18.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:7c7a51b33ce387193c97f228320cf8e87361daa1bba750638677729598b3e677" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ff/1a/7b74eb6c392fdcb27d414c0e7558a6d0231eb3b6d73571f479bb81ea8794/scipy-1.18.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:84031d7b052a54fae2f8632e0ec802073d385476eb9a63079bce6e23ef9283d4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7c/ad/f3941716320a7b9cb4d68734a903b45fe16eff5fb7da7e16f2e619304979/scipy-1.18.0-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:56abf29a7c067dde59be8b9a22d606a4ea1b2f2a4b756d9d903c62818f5dacce" }, + { url = "https://mirrors.aliyun.com/pypi/packages/22/22/1446b62ffe07f9719b7d9b1b6a4e05a772833ae8f441fe4c22c34c9b250f/scipy-1.18.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ad44305cfa24b1ba5803cbbebf033590ccbac1aa5d612d727b785325ab408b0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/56/3b/b87da667098bb470fa30c7011b0ba351ee976dd395c78798c66e941665a3/scipy-1.18.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:945c1761b93f38d7f99ae81ae80c63e621471608c7eeead563f6df025585cd58" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f8/a1/c7932f91909759b0267f75fdea34e91309f96b895757534b76a90b6b4344/scipy-1.18.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1a4441f15d620578772a49e5ab48c0ee1f7a0220e387110283062729136b2553" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f7/86/5185061a1fcc41d18c5dc2463969b3a3964b31d9ac67b2fb05d4c7ff7670/scipy-1.18.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9aac6192fac56bf2ca534389d24623f07b39ff83317d58287285e7fbd622ff76" }, + { url = "https://mirrors.aliyun.com/pypi/packages/31/8e/f04c68e39919a010d34f2ee1367fd705b0a25a02f609d755f0bfbc0a15fc/scipy-1.18.0-cp314-cp314t-win_amd64.whl", hash = "sha256:e40baea28ae7f5475c779741e2d90b1247c78531207b49c7030e698ff81cee3f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d5/19/969dc072906c84dd0a3b05dcf57ea750936087d7873549e408b35cfc3f97/scipy-1.18.0-cp314-cp314t-win_arm64.whl", hash = "sha256:368e0a705903c466aa5f08eefb39e6b1b6b2d659e7352a31fd9e2438365be0f8" }, +] + +[[package]] +name = "semantic-version" +version = "2.10.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/7d/31/f2289ce78b9b473d582568c234e104d2a342fd658cc288a7553d83bb8595/semantic_version-2.10.0.tar.gz", hash = "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/6a/23/8146aad7d88f4fcb3a6218f41a60f6c2d4e3a72de72da1825dc7c8f7877c/semantic_version-2.10.0-py2.py3-none-any.whl", hash = "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177" }, +] + +[[package]] +name = "setuptools" +version = "83.0.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/34/26/f5d29e25ffdb535afef2d35cdb55b325298f96debd670da4c325e08d70f4/setuptools-83.0.0.tar.gz", hash = "sha256:025bccbbf0fa05b6192bc64ae1e7b16e001fd6d6d4d5de03c97b1c1ade523bef" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/5d/40/e1e72872c6354b306daef1703549e8e83b4d43cfea356311bf722a043752/setuptools-83.0.0-py3-none-any.whl", hash = "sha256:29b23c360f22f414dc7336bb39178cc7bcbf6021ed2733cde173f09dba19abb3" }, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274" }, +] + +[[package]] +name = "sounddevice" +version = "0.5.6" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/ec/db/0c890e2d9aab9ba284021efc02e1d3aebfecab1b611762d7434602209bcf/sounddevice-0.5.6.tar.gz", hash = "sha256:8ec9fbfde2e32f020b167e348f3ab3bac6625a5f15af524d790108ac7147a410" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/72/1f/62eef605172bddc1017508469a12f75bc7c4194ece35c734f822795f53b1/sounddevice-0.5.6-py3-none-any.whl", hash = "sha256:de099612311ad81e55d31ccbd83f43ea6bf4d87b48f9b6ea55a1fbcde0eee4e0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b6/84/85e719d49cf98b2f406d9ac9c338892286c4448eb42ef0b2625ccf159616/sounddevice-0.5.6-py3-none-macosx_10_6_x86_64.macosx_10_6_universal2.whl", hash = "sha256:e3aef00ad8b1d1740eb66d9a7671eab88a4d2b8fa4ab33498d742e63b65c309c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c5/6f/6292145099f72a153a710245f46ae43e5fb6c77bec1b6086cb76c12dc280/sounddevice-0.5.6-py3-none-win32.whl", hash = "sha256:b36b807eb02abd257198bf84b2af05e4fea199a9d2f0019014169c7136d45e9c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/8d/3e/cbc593c31a5f0d817b3fe97e64aa8461bd0f55cb07b67ce1b776296ae336/sounddevice-0.5.6-py3-none-win_amd64.whl", hash = "sha256:7f4162f514f007b0bf25a3ccfed3f1705bc2ec311888a90232729eec4f57a4f4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/60/a4/b0c21c9f215a6fd9606b8f8748c21212dc098e5d5a2d93068c50edcf19b4/sounddevice-0.5.6-py3-none-win_arm64.whl", hash = "sha256:c8ae19173e5f27f8c12d4b5eee2dbfe542cee125d591e663e0fb4dfb75246d45" }, +] + +[[package]] +name = "soundfile" +version = "0.14.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "cffi" }, + { name = "numpy" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/d2/db/949331952a6fb1c5b12e9de80fd08747966c2039d1a61db4764fbd3981c2/soundfile-0.14.0.tar.gz", hash = "sha256:ba1c1a2d618bca5c406647c83b89f07cc8810fa506a50622a6993ba130c1de11" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/b1/d1/5e338af9ca6ed0786cd5bb03f6d60de1c325728c1189014f3b59aae7403c/soundfile-0.14.0-py2.py3-none-any.whl", hash = "sha256:8ba81ae3a89fd5ab3bef8a8eb481fbbe794e806309675a89b4df48b8d31908a8" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7e/72/c6b21e58d3113596e7e8de0a08d6f1d95173492cfbca0a4db14148cbba2a/soundfile-0.14.0-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:19be05428da76ed61a4cad29b8e4bcf43a3e5c100089d2ec81dc961eed1b0dd4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/63/7a/dfdd6f8c748988427119f75eb860a3cedd858d1aea1fe28f39ad8559ef22/soundfile-0.14.0-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:d828d35a059626da52f1415b5faee610aeab393319cb3fc4a9aef47b619fc14c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/4a/f8/fc39fad6f879633461d27394cd1ddaf1f769ffa0597dca35872f51b16461/soundfile-0.14.0-py2.py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:e85724a90bc99a6e8062c0b4ddf725f53b2a3b70afd4da875e9d2cfc4e92f377" }, + { url = "https://mirrors.aliyun.com/pypi/packages/7b/a2/70fd4432b924684c372df8b0a45708c36c057ef3596c9eb53e0a806b980b/soundfile-0.14.0-py2.py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:1e38bac1853412871318e82a1ba69a8be677619b56025bbfcccdb41b6cafe82d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d9/34/c9e80783d83eab739a9531fdee03675d53e0bf1b2ccb4bb3af5844675046/soundfile-0.14.0-py2.py3-none-win32.whl", hash = "sha256:0a6ae43c50c71b4e020cc55382925cb89451c1ed1a0c3d0f5d802da269226849" }, + { url = "https://mirrors.aliyun.com/pypi/packages/ed/97/b39c18ac1df45e755ca22b8b00e872929da5d107998a207a5e4ac831bfda/soundfile-0.14.0-py2.py3-none-win_amd64.whl", hash = "sha256:299491d3499460fb1b74bb4bd78b57ffc2d243a5fafa7b6ec1b264875c78453e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f4/83/55c65e61cf457805ce2ec157c1c6ae17715d0851aa2374422de0538838ca/soundfile-0.14.0-py2.py3-none-win_arm64.whl", hash = "sha256:e090704718e124e7c844695236f1fce8d18a5e761eaf7c82dfcd124620805f98" }, +] + +[[package]] +name = "soupsieve" +version = "2.9.1" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/d9/38/e12680bbe6b4f8f3d17adcaf38d26850aa756c85cf4a80e79fc12a018fe8/soupsieve-2.9.1.tar.gz", hash = "sha256:c33e6605bbc71dd628b00c632d58ae607c22bade247e52553928f83bbb75b4ba" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/0f/2c/437fe806897c2d6cfdc3ee43a18da8bf8e568530a4ae9bac781541ca9896/soupsieve-2.9.1-py3-none-any.whl", hash = "sha256:4f4477399246b7a0c720a88ca2454b11cd6bb9ae4c9d170140786e916776c14c" }, +] + +[[package]] +name = "soxr" +version = "1.1.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/ed/11/27cebce4a108f77afea7c80545115536b45e3f11ebfb914f638fdd9ba847/soxr-1.1.0.tar.gz", hash = "sha256:9f228ae21c78fa9359ca98d8a5e8e91f30639e438e574133dace62c5b5309e44" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/06/8a/f3da7973b5f1b05d2d7e94d5376b881dcbc05297900cae6c3d33d95b209b/soxr-1.1.0-cp312-abi3-macosx_10_14_x86_64.whl", hash = "sha256:e0e09fa633ce2e67df08b298afced4d184f6e753fc330f241022250f1d0d61da" }, + { url = "https://mirrors.aliyun.com/pypi/packages/03/dc/200013a74641f8774664bbcd2346c695c05c2e300ea792adcb40a293eed0/soxr-1.1.0-cp312-abi3-macosx_11_0_arm64.whl", hash = "sha256:d6a7ad82b8d5f3fcc04b1d2ca055562b96af571e1d4fa7c6c61d0fb509ac43b4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/88/2b/2e5eba817a762a2ec589ff165b8bc5955b25a0ad140045f7cd8e45410543/soxr-1.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf98c0d7b7d5ef5bf072fee8d3020e8b664f2d195933ea7bc5089267c2e22a06" }, + { url = "https://mirrors.aliyun.com/pypi/packages/5c/f1/0e55195893228609c9a08c3b13b7a83a46c3a992cd00d3304f0f320cfb07/soxr-1.1.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b033078e86f3c4a658e5697fac8995764fad9e799563616b630136b613167f1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b0/4d/621e4150e4815246ad552d215a8a294a90143fedd19ee442cf82d3b3abc8/soxr-1.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:6ae2a174bffea94e8ead857dad85999d3f49f091774dbad5b046c0417d7092f4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/76/cd/77b74f1e95af0e11e52e9a034421aece7f7b45afd15a909afd41d5a5d102/soxr-1.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:a941f5aaa0b8abced24318105c1ea22576afcc1138c19f625716ce4e2f76ad64" }, + { url = "https://mirrors.aliyun.com/pypi/packages/30/86/600cc31f982288167a59972746f117790162012546f995a32b5a55394b16/soxr-1.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:feebcba99ac99adb8009d46c8f4c1956b8c167576b0ae8a6fb47502e9a6f78e7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/39/e4/80cd9aae0645513db1076d4384e8b2d895faf5009218b4a04348012c54fc/soxr-1.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:52c9ca84e3dc656d83acc424574770e20ea8e0704dc3842d4e27b0fe9d3ba449" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a6/d6/cc3c80ac9b2289da4cf46c5d53b05e4327e6f5560a25868d06f9e2213af1/soxr-1.1.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f4977323ef9c3aa3c2a26ff5fe0191c84b8fd759daf7afb1f25a91a55ad8b730" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d3/9e/f7af5fae841ffe32ed8440234ea2ad6adecca3bd92b6101076268c429000/soxr-1.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:e17d4ef9b0185214b2c0935605ae63f827ea423bc74964be44763d68d2b6c21e" }, +] + +[[package]] +name = "standard-aifc" +version = "3.13.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "audioop-lts" }, + { name = "standard-chunk" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/c4/53/6050dc3dde1671eb3db592c13b55a8005e5040131f7509cef0215212cb84/standard_aifc-3.13.0.tar.gz", hash = "sha256:64e249c7cb4b3daf2fdba4e95721f811bde8bdfc43ad9f936589b7bb2fae2e43" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/c3/52/5fbb203394cc852334d1575cc020f6bcec768d2265355984dfd361968f36/standard_aifc-3.13.0-py3-none-any.whl", hash = "sha256:f7ae09cc57de1224a0dd8e3eb8f73830be7c3d0bc485de4c1f82b4a7f645ac66" }, +] + +[[package]] +name = "standard-chunk" +version = "3.13.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/43/06/ce1bb165c1f111c7d23a1ad17204d67224baa69725bb6857a264db61beaf/standard_chunk-3.13.0.tar.gz", hash = "sha256:4ac345d37d7e686d2755e01836b8d98eda0d1a3ee90375e597ae43aaf064d654" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/7a/90/a5c1084d87767d787a6caba615aa50dc587229646308d9420c960cb5e4c0/standard_chunk-3.13.0-py3-none-any.whl", hash = "sha256:17880a26c285189c644bd5bd8f8ed2bdb795d216e3293e6dbe55bbd848e2982c" }, +] + +[[package]] +name = "standard-sunau" +version = "3.13.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "audioop-lts" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/66/e3/ce8d38cb2d70e05ffeddc28bb09bad77cfef979eb0a299c9117f7ed4e6a9/standard_sunau-3.13.0.tar.gz", hash = "sha256:b319a1ac95a09a2378a8442f403c66f4fd4b36616d6df6ae82b8e536ee790908" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/34/ae/e3707f6c1bc6f7aa0df600ba8075bfb8a19252140cd595335be60e25f9ee/standard_sunau-3.13.0-py3-none-any.whl", hash = "sha256:53af624a9529c41062f4c2fd33837f297f3baa196b0cfceffea6555654602622" }, +] + +[[package]] +name = "starlette" +version = "1.3.1" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "anyio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/eb/e3/7c1dc7381d9f8ab7d854328ebfa884e62cb3f3d8549ddfd37c7814f42afa/starlette-1.3.1.tar.gz", hash = "sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/ec/bb/2799cc2ede3ed41131f8975621e7213dfc7ef4acbbaadfa440f32500c370/starlette-1.3.1-py3-none-any.whl", hash = "sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6" }, +] + +[[package]] +name = "sympy" +version = "1.14.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "mpmath" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" }, +] + +[[package]] +name = "tensorboard" +version = "2.21.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "absl-py" }, + { name = "grpcio" }, + { name = "markdown" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "protobuf" }, + { name = "setuptools" }, + { name = "tensorboard-data-server" }, + { name = "werkzeug" }, +] +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/37/4b/cd2eec9642781a8f5b2fb9994e3933a7b259ab18e9d49aeede9b5acf6311/tensorboard-2.21.0-py3-none-any.whl", hash = "sha256:7279316dcb6bd5bc391d623dea841531299cde1887310e8133bc34a996d32255" }, +] + +[[package]] +name = "tensorboard-data-server" +version = "0.7.2" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/7a/13/e503968fefabd4c6b2650af21e110aa8466fe21432cd7c43a84577a89438/tensorboard_data_server-0.7.2-py3-none-any.whl", hash = "sha256:7e0610d205889588983836ec05dc098e80f97b7e7bbff7e994ebb78f578d0ddb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b7/85/dabeaf902892922777492e1d253bb7e1264cadce3cea932f7ff599e53fea/tensorboard_data_server-0.7.2-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9fe5d24221b29625dbc7328b0436ca7fc1c23de4acf4d272f1180856e32f9f60" }, + { url = "https://mirrors.aliyun.com/pypi/packages/73/c6/825dab04195756cf8ff2e12698f22513b3db2f64925bdd41671bfb33aaa5/tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl", hash = "sha256:ef687163c24185ae9754ed5650eb5bc4d84ff257aabdc33f0cc6f74d8ba54530" }, +] + +[[package]] +name = "threadpoolctl" +version = "3.6.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb" }, +] + +[[package]] +name = "tomlkit" +version = "0.14.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/c3/af/14b24e41977adb296d6bd1fb59402cf7d60ce364f90c890bd2ec65c43b5a/tomlkit-0.14.0.tar.gz", hash = "sha256:cf00efca415dbd57575befb1f6634c4f42d2d87dbba376128adb42c121b87064" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl", hash = "sha256:592064ed85b40fa213469f81ac584f67a4f2992509a7c3ea2d632208623a3680" }, +] + +[[package]] +name = "torch" +version = "2.13.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "cuda-bindings", marker = "python_full_version < '3.15' and sys_platform == 'linux'" }, + { name = "cuda-toolkit", extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "sys_platform == 'linux'" }, + { name = "filelock" }, + { name = "fsspec" }, + { name = "jinja2" }, + { name = "networkx" }, + { name = "nvidia-cudnn-cu13", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cusparselt-cu13", marker = "sys_platform == 'linux'" }, + { name = "nvidia-nccl-cu13", marker = "sys_platform == 'linux'" }, + { name = "nvidia-nvshmem-cu13", marker = "sys_platform == 'linux'" }, + { name = "setuptools" }, + { name = "sympy" }, + { name = "triton", marker = "python_full_version < '3.15' and sys_platform == 'linux'" }, + { name = "typing-extensions" }, +] +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/c4/3a/ed0f4d4d1dcde03bced7aac9a28e800abcdc0cbd06b6775044c9fbd877b7/torch-2.13.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2fe228aba290d14b9f31b049be550dbd469c3fd3013d7a19705b30454da97027" }, + { url = "https://mirrors.aliyun.com/pypi/packages/df/a9/f6a2a4d763ff1df02e9a64c477029db614295bc9367f4131223791ccc243/torch-2.13.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:572df8be8ffb4599c88cbd6a0726f1f854f4da65d2e3c09f0e2c2283333cd6d4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f3/82/fea946351658e6534db52d2cc12bc53087cbf87f9440c5f180f367c1950b/torch-2.13.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:796633c4cdf0fe2cdced72d8f88f22e73dbcfce83132763162f6d4bff13b820b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/21/d6/e8f3c6f7e01f626f77259de9860d2a78bc84c40539e28e79b7e98b0bb659/torch-2.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:024c6cc0c1b085f2f91f20a3dc27b0471d021c31ce84b81be3afdc39f791fd9d" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0d/fa/c1c10b7aff4a9a3e8956d4f0a5f468fa6db7abc3208805719076772b4833/torch-2.13.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:33449899ce5496c1b84b4853179d94fd102028ae1407314d9fb956bb79e70d09" }, + { url = "https://mirrors.aliyun.com/pypi/packages/11/18/9ecb37b56293a0be8d80f810bf672a72fe7e02f8b475d5ef1b9bf8a0d748/torch-2.13.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:1e09d6a722504957c694faceca843acde562786df1144ebcc5a74075ec7f6005" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d4/5a/7c50ba1b7b713d71d34669c6d13dab0a11531a3eceb0307a5162dbfec0f7/torch-2.13.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:a3a9a21312872af8a26950b2c15680335a386a1f56ed03e780653d78b9607e9e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/91/3d/e7adcc6aaf36961cd18f56cf8ad0f3058c3a5c84ccf391762176c94581b8/torch-2.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:49b58f1e2c52440abb6f17c28f0335fe6c6d01ad1a7f55b0183b81e4b34d64e6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/36/76/6dcc7f0c07052102dd36f83cbc5800842a909c8c3fbf1a7f8a5844954de9/torch-2.13.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d849b390e07d8d333ce8ecaf91b273c656c598379a19c9acf1318a883f6b391c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e9/09/2c10e8cd0e00fa5d23c052df6ce467eaa7182399f5e0f824f1e4ff42ccae/torch-2.13.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:a3893dc2da0a972a8ca5d698c85a9f967559ac5f8ee1797b77408aa8734d073c" }, + { url = "https://mirrors.aliyun.com/pypi/packages/76/c6/22c2102bbef14ca6a6cb4c20e42f088e49c5f812be4e160ae57502e325f9/torch-2.13.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:49f1ea385c754e54919408a9bb3b5a72b0b755bbe2c916c1d6f70afbec4908a2" }, + { url = "https://mirrors.aliyun.com/pypi/packages/2b/0c/7d1deb6bce5bc3e6042caf39100ac768eba3b9a098e1dddd16f75bd6489b/torch-2.13.0-cp314-cp314-win_amd64.whl", hash = "sha256:4f8573e3ce9ebcd53fe922f01077a6085ccdfbe5f12fd215883a9d87d7a744fd" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f4/ce/aa8b7f9949d32e0f2f624f342bc3b48112c1b8a130288465938bc83bcbf9/torch-2.13.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:c28def70706c2f9ecc752574766e8ae4da9b810ab6676b611166761a78a9f1e1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/69/d1/491e3a0389430946145888b0203f2b6a759ce2a61481b96a85c2da4f2ced/torch-2.13.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:31061ff56ed8fbf26c749806905aeb749ebeb819810fd5d52508aa5afd90dddc" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9a/1d/38006e045bf0a1fc28ef01e757c554e59e59a8770c284bc4f47b14e60441/torch-2.13.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:cc26eead4cf51d0b544e31e364dcf000846549c273bd148936fe9d24d29acb92" }, + { url = "https://mirrors.aliyun.com/pypi/packages/56/94/655c91992a882bd5071aa0b5d22a07dbb130d801e872be97c0b627a7c693/torch-2.13.0-cp314-cp314t-win_amd64.whl", hash = "sha256:a7de8a313090dc5c7d7ba4bfe5c3be222528f9a4dba1acc83bddb1157360c4b8" }, +] + +[[package]] +name = "tqdm" +version = "4.69.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/8c/69/40407dfc835517f058b603dbf37a6df094d8582b015a51eddc988febbcb7/tqdm-4.69.0.tar.gz", hash = "sha256:700c5e85dcd5f009dd6222588a29180a193a748247a5d855b4d67db93d79a53b" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/fe/21/99a0cdaf54eb35e77623c41b5a2c9472ee4404bba687052791fe2aba6773/tqdm-4.69.0-py3-none-any.whl", hash = "sha256:9979978912be667a6ef21fd5d8abf54e324e63d82f7f43c360792ebc2bc4e622" }, +] + +[[package]] +name = "triton" +version = "3.7.1" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/94/fa/f856e24deb462d5f18bd4b5a746957862ab9b6ee5834bda60605ec348366/triton-3.7.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9497f2e696ee368862a181a90b2dcc03ca978cc4f602abd67c7d81022a6988e1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c4/6f/fb96d15db6f36d6eae4cafb998c2e0353bf59d7c4ea1662d7497f269134a/triton-3.7.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7e40869937a68206ec70d7f25bb7ec6433cb083f9135e1f36dbd318dc449a728" }, + { url = "https://mirrors.aliyun.com/pypi/packages/00/42/c5089d4d9327fcd1e862c599cc2927f39418f84dd11a84cb2ccff9d4787a/triton-3.7.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cdbfc09d9ec58bc5e68321525653220de7515c199e7a8097a97c85e62b52cd0a" }, + { url = "https://mirrors.aliyun.com/pypi/packages/07/42/2c3ac59253ae8892b6f307875263dd23dc875cdf732d3aea40d6d41fb7cb/triton-3.7.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:58c0e131da05134a2a4788ccbcc0c1105cf0f54c8e98f19e34cd465396dc15eb" }, + { url = "https://mirrors.aliyun.com/pypi/packages/40/71/e01aa7ad573883ed9456f130226babdec70b005e098c4d6226a6238e761b/triton-3.7.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fe4ea396a06171f1f1f58cbd39c70b09294398f7dd7c620939bab54ad6f934fa" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a4/09/5683146fda6a2b569deb78ccfd8fbfea8bfe55f726b081c0a6bb18dd6f28/triton-3.7.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2020153b08280415ec0da6607834e79166442147e78e144df06b508c75b186d2" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e9/f8/448220c3092019f9fdfab39ec47985968181d67da34b44f6a7f6280a5cbb/triton-3.7.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c58e4c61f0c73b5dba3b5d19b4a7093c32f90dc18b2a7f121a7c16ccd31107b7" }, + { url = "https://mirrors.aliyun.com/pypi/packages/f0/ac/229b7d4589d2e5937310e72c6d46e89599d16a4a12b479ffa1499fee8eb8/triton-3.7.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10ba85fa2cca4a2fbdeb36bf1cb082f2c252bda55bf9fccd74f65ec5bc647e68" }, +] + +[[package]] +name = "typer" +version = "0.27.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "annotated-doc" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "rich" }, + { name = "shellingham" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/37/78/fda3361b56efc27944f24225f6ecd13d96d6fcfe37bd0eb34e2f4c63f9fc/typer-0.27.0.tar.gz", hash = "sha256:629bd12ea5d13a17148125d9a264f949eb171fb3f120f9b04d85873cab054fa5" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/40/03/26a383c9e58c213199d1aad1c3d353cfc22d4444ec6d2c0bf8ad02523843/typer-0.27.0-py3-none-any.whl", hash = "sha256:6f4b27631e47f077871b7dc30e933ec0131c1390fbe0e387ea5574b5bac9ccf1" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7" }, +] + +[[package]] +name = "tzdata" +version = "2026.3" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/92/ff/5a28bdfd8c3ebec42564ac7d0e54ca3db65044a9314a97f9564fa7a1e926/tzdata-2026.3.tar.gz", hash = "sha256:4a1518b8993086a7982523e071643f3c0e5f213e75b21318e78bcabfff9d1415" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/e5/6d/b53b99a9f2766d095985947a5782f1702cabb129a34f7a802d7197af832f/tzdata-2026.3-py2.py3-none-any.whl", hash = "sha256:dc096730c87af6cab1b171c9d532be840741ff5d459015e7f6947bd7d7e54931" }, +] + +[[package]] +name = "urllib3" +version = "2.7.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897" }, +] + +[[package]] +name = "uvicorn" +version = "0.51.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "click" }, + { name = "h11" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/a2/65/b7c6c443ccc58678c91e1e973bbe2a878591538655d6e1d47f24ba1c51f3/uvicorn-0.51.0.tar.gz", hash = "sha256:f6f4b69b657c312f516dd2d268ab9ae6f254b11e4bac504f37b2ab58b24dd0b0" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/45/ec/dbb7e5a6b91f86bfb9eb7d2988a2730907b6a729875b949c7f022e8b88fa/uvicorn-0.51.0-py3-none-any.whl", hash = "sha256:5d38af6cd620f2ae3849fb44fd4879e0890aa1febe8d47eb355fb45d93fe6a5b" }, +] + +[[package]] +name = "werkzeug" +version = "3.1.8" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/dd/b2/381be8cfdee792dd117872481b6e378f85c957dd7c5bca38897b08f765fd/werkzeug-3.1.8.tar.gz", hash = "sha256:9bad61a4268dac112f1c5cd4630a56ede601b6ed420300677a869083d70a4c44" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl", hash = "sha256:63a77fb8892bf28ebc3178683445222aa500e48ebad5ec77b0ad80f8726b1f50" }, +] diff --git a/README.md b/README.md new file mode 100644 index 0000000..a629400 --- /dev/null +++ b/README.md @@ -0,0 +1,34 @@ +# Macmini M4/M6 磁吸叠放AI阵列麦克风 + +## 项目介绍 +![成品外观](./images/preview.PNG) + +本项目是一款为 Mac mini M4/M6 设计的磁吸叠放式八通道 AI 阵列麦克风,用于补足 +主机缺少内置麦克风的问题,为听写、语音交互和 AI 辅助编程提供高质量音频输入。 +设备由 ESP32-P4、PCMD3180、八颗数字硅麦及 WS2812 灯环组成,通过 USB 2.0 +High-Speed 向电脑传输多通道音频,支持声源定位、MVDR 波束形成、降噪和自动增益等 +扩展。8 mm CNC 铝合金外壳可磁吸固定在 Mac mini 顶部,中央玻璃窗口兼顾苹果标志 +展示与灯效。项目开放固件、上位机、PCB/原理图和结构模型,便于复刻并扩展会议记录、 +实时翻译及语音机器人等应用。 + +完整 ESP-IDF 工程。应用源码和 menuconfig 定义位于 [`src`](src/README.md)。 + +## 项目目录 + +```text +Mac_mini_8micArray/ +├── PC_SoftWare/ # PC 端八通道音频采集、DOA 定位、MVDR 波束形成及校准工具 +├── PCB_SCH/ # 主板、麦克风板和 LED 灯环板的 PCB、原理图及打板资料 +├── SHELL_STEP/ # CNC 铝制外壳、玻璃窗、底盖等结构设计与加工资料 +└── src/ # ESP32-P4 UAC 2.0 固件、音频驱动、USB 描述符及 LED 控制代码 +``` + +各目录均提供了更详细的说明,请分别参阅: + +- [`PC_SoftWare/README.md`](PC_SoftWare/README.md) +- [`PCB_SCH/README.md`](PCB_SCH/README.md) +- [`SHELL_STEP/README.md`](SHELL_STEP/README.md) +- [`src/README.md`](src/README.md) + + +编译前请运行 `idf.py menuconfig` 配置实际板级 I2S GPIO;未配置时固件会安全停止。 diff --git a/SHELL_STEP/CNC外壳.STEP b/SHELL_STEP/CNC外壳.STEP new file mode 100644 index 0000000..a6aa9c2 --- /dev/null +++ b/SHELL_STEP/CNC外壳.STEP @@ -0,0 +1,7129 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION (( 'STEP AP203' ), + '1' ); +FILE_NAME ('CNCÍâ¿Ç.STEP', + '2026-09-29T14:35:51', + ( '' ), + ( '' ), + 'SwSTEP 2.0', + 'SolidWorks 2021', + '' ); +FILE_SCHEMA (( 'CONFIG_CONTROL_DESIGN' )); +ENDSEC; + +DATA; +#1 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245065661, -6.700000000000000178, 56.23725382063079081 ) ) ; +#3 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4 = DIRECTION ( 'NONE', ( 0.3826834323650901148, 0.000000000000000000, 0.9238795325112867385 ) ) ; +#5 = CIRCLE ( 'NONE', #690, 40.55000000000109139 ) ; +#6 = ADVANCED_FACE ( 'NONE', ( #12 ), #1617, .T. ) ; +#7 = EDGE_CURVE ( 'NONE', #2102, #5228, #2569, .T. ) ; +#8 = ORIENTED_EDGE ( 'NONE', *, *, #1787, .F. ) ; +#9 = CARTESIAN_POINT ( 'NONE', ( 40.74772366876740648, -5.899999999999999467, 10.38390657767414282 ) ) ; +#10 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244847169, -1.000000000000000000, -56.23725382063096845 ) ) ; +#11 = AXIS2_PLACEMENT_3D ( 'NONE', #6929, #4568, #4073 ) ; +#12 = FACE_OUTER_BOUND ( 'NONE', #6099, .T. ) ; +#13 = EDGE_CURVE ( 'NONE', #4277, #2935, #5067, .T. ) ; +#14 = VERTEX_POINT ( 'NONE', #5467 ) ; +#15 = EDGE_LOOP ( 'NONE', ( #4516, #5336, #6484, #6935 ) ) ; +#16 = ADVANCED_FACE ( 'NONE', ( #2676, #2706, #4878, #5508, #4977 ), #3336, .F. ) ; +#17 = ORIENTED_EDGE ( 'NONE', *, *, #2873, .T. ) ; +#18 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#19 = EDGE_CURVE ( 'NONE', #408, #3543, #3772, .T. ) ; +#20 = EDGE_CURVE ( 'NONE', #5804, #463, #4849, .T. ) ; +#21 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#22 = CARTESIAN_POINT ( 'NONE', ( -36.15552248038196126, -5.899999999999999467, 21.47046096782009883 ) ) ; +#23 = ORIENTED_EDGE ( 'NONE', *, *, #4532, .F. ) ; +#24 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244847169, -1.000000000000000000, -51.73725382063096134 ) ) ; +#25 = DIRECTION ( 'NONE', ( -0.7071067811865536790, 0.000000000000000000, -0.7071067811865413555 ) ) ; +#26 = LINE ( 'NONE', #5392, #1085 ) ; +#27 = FACE_OUTER_BOUND ( 'NONE', #6423, .T. ) ; +#28 = FACE_OUTER_BOUND ( 'NONE', #731, .T. ) ; +#29 = ORIENTED_EDGE ( 'NONE', *, *, #6450, .F. ) ; +#30 = VERTEX_POINT ( 'NONE', #5934 ) ; +#31 = EDGE_CURVE ( 'NONE', #6707, #2716, #3241, .T. ) ; +#32 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -2.400000000000000355, 36.73402833653069166 ) ) ; +#33 = CIRCLE ( 'NONE', #2861, 4.500000000000230926 ) ; +#34 = LINE ( 'NONE', #6992, #746 ) ; +#35 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#36 = CIRCLE ( 'NONE', #144, 0.5999999999999998668 ) ; +#37 = FACE_OUTER_BOUND ( 'NONE', #1316, .T. ) ; +#38 = AXIS2_PLACEMENT_3D ( 'NONE', #2685, #3749, #4858 ) ; +#39 = AXIS2_PLACEMENT_3D ( 'NONE', #418, #2580, #3710 ) ; +#40 = ORIENTED_EDGE ( 'NONE', *, *, #6918, .T. ) ; +#41 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.800000000000000488, 25.96370172317529423 ) ) ; +#42 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#43 = AXIS2_PLACEMENT_3D ( 'NONE', #3964, #1837, #243 ) ; +#44 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#45 = AXIS2_PLACEMENT_3D ( 'NONE', #2814, #21, #54 ) ; +#46 = AXIS2_PLACEMENT_3D ( 'NONE', #1106, #1666, #4925 ) ; +#47 = AXIS2_PLACEMENT_3D ( 'NONE', #4764, #6917, #5883 ) ; +#48 = ORIENTED_EDGE ( 'NONE', *, *, #5994, .T. ) ; +#49 = ORIENTED_EDGE ( 'NONE', *, *, #5992, .F. ) ; +#50 = VERTEX_POINT ( 'NONE', #2272 ) ; +#51 = AXIS2_PLACEMENT_3D ( 'NONE', #3414, #52, #5585 ) ; +#52 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#53 = EDGE_CURVE ( 'NONE', #2757, #5120, #5630, .T. ) ; +#54 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#55 = ADVANCED_FACE ( 'NONE', ( #6065 ), #4308, .F. ) ; +#56 = CIRCLE ( 'NONE', #5735, 4.500000000000010658 ) ; +#57 = EDGE_CURVE ( 'NONE', #5132, #5377, #1091, .T. ) ; +#58 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#59 = VERTEX_POINT ( 'NONE', #6496 ) ; +#60 = CARTESIAN_POINT ( 'NONE', ( -34.92266447387282113, -2.200000000000000622, -35.53553390593242511 ) ) ; +#61 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#62 = CARTESIAN_POINT ( 'NONE', ( -35.30999999999903594, -2.200000000000000622, -56.49999999999972289 ) ) ; +#63 = CIRCLE ( 'NONE', #6869, 1.500000000000001332 ) ; +#64 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#65 = CARTESIAN_POINT ( 'NONE', ( -25.78180162019543786, -8.000000000000000000, -62.00000000000001421 ) ) ; +#66 = ORIENTED_EDGE ( 'NONE', *, *, #757, .F. ) ; +#67 = ORIENTED_EDGE ( 'NONE', *, *, #1484, .F. ) ; +#68 = LINE ( 'NONE', #1172, #352 ) ; +#69 = FACE_OUTER_BOUND ( 'NONE', #376, .T. ) ; +#70 = CARTESIAN_POINT ( 'NONE', ( -48.50000000000026290, -3.000000000000000000, 47.49999999999972289 ) ) ; +#71 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#72 = EDGE_CURVE ( 'NONE', #2551, #1127, #539, .T. ) ; +#73 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#74 = ORIENTED_EDGE ( 'NONE', *, *, #345, .F. ) ; +#75 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#76 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#77 = CIRCLE ( 'NONE', #3026, 1.500000000000001332 ) ; +#78 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#79 = EDGE_LOOP ( 'NONE', ( #322, #3127, #3545, #5520 ) ) ; +#80 = EDGE_LOOP ( 'NONE', ( #2313, #6966, #3941, #5430 ) ) ; +#81 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#82 = VERTEX_POINT ( 'NONE', #583 ) ; +#83 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#84 = AXIS2_PLACEMENT_3D ( 'NONE', #884, #5169, #4776 ) ; +#85 = LINE ( 'NONE', #2280, #1069 ) ; +#86 = EDGE_CURVE ( 'NONE', #639, #7021, #2772, .T. ) ; +#87 = CARTESIAN_POINT ( 'NONE', ( -56.16019669858830810, 0.000000000000000000, 56.16019669858773966 ) ) ; +#88 = ORIENTED_EDGE ( 'NONE', *, *, #5374, .F. ) ; +#89 = LINE ( 'NONE', #201, #3400 ) ; +#90 = CONICAL_SURFACE ( 'NONE', #4969, 28.64999999999999147, 0.7494424430768475975 ) ; +#91 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#92 = LINE ( 'NONE', #2896, #5608 ) ; +#93 = LINE ( 'NONE', #4993, #2766 ) ; +#94 = AXIS2_PLACEMENT_3D ( 'NONE', #6330, #5808, #5241 ) ; +#95 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -2.200000000000000622, -62.00000000000002132 ) ) ; +#96 = ORIENTED_EDGE ( 'NONE', *, *, #2721, .F. ) ; +#97 = ORIENTED_EDGE ( 'NONE', *, *, #2961, .T. ) ; +#98 = VERTEX_POINT ( 'NONE', #6533 ) ; +#99 = ORIENTED_EDGE ( 'NONE', *, *, #2036, .T. ) ; +#100 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ; +#101 = CARTESIAN_POINT ( 'NONE', ( -27.93000000000074579, -2.200000000000000622, -62.00000000000002132 ) ) ; +#102 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#103 = CARTESIAN_POINT ( 'NONE', ( -30.45000000000150564, -5.899999999999999467, -30.50000000000000355 ) ) ; +#104 = CIRCLE ( 'NONE', #4410, 0.6000000000000033085 ) ; +#105 = EDGE_CURVE ( 'NONE', #1411, #6696, #190, .T. ) ; +#106 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#107 = VECTOR ( 'NONE', #1418, 1000.000000000000000 ) ; +#108 = ORIENTED_EDGE ( 'NONE', *, *, #3312, .T. ) ; +#109 = ORIENTED_EDGE ( 'NONE', *, *, #300, .T. ) ; +#110 = PLANE ( 'NONE', #4879 ) ; +#111 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -6.700000000000000178, 36.73402833653069166 ) ) ; +#112 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#113 = AXIS2_PLACEMENT_3D ( 'NONE', #4701, #941, #2031 ) ; +#114 = ORIENTED_EDGE ( 'NONE', *, *, #2556, .F. ) ; +#115 = CIRCLE ( 'NONE', #462, 0.5999999999999998668 ) ; +#116 = ORIENTED_EDGE ( 'NONE', *, *, #895, .T. ) ; +#117 = FACE_OUTER_BOUND ( 'NONE', #5998, .T. ) ; +#118 = ADVANCED_FACE ( 'NONE', ( #1715, #6026 ), #2985, .F. ) ; +#119 = ORIENTED_EDGE ( 'NONE', *, *, #6374, .T. ) ; +#120 = FACE_OUTER_BOUND ( 'NONE', #6990, .T. ) ; +#121 = VECTOR ( 'NONE', #3232, 1000.000000000000000 ) ; +#122 = FACE_OUTER_BOUND ( 'NONE', #3034, .T. ) ; +#123 = LINE ( 'NONE', #2281, #1047 ) ; +#124 = VERTEX_POINT ( 'NONE', #723 ) ; +#125 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#126 = CYLINDRICAL_SURFACE ( 'NONE', #4363, 0.6000000000000033085 ) ; +#127 = EDGE_CURVE ( 'NONE', #1380, #2127, #2947, .T. ) ; +#128 = LINE ( 'NONE', #669, #5725 ) ; +#129 = CYLINDRICAL_SURFACE ( 'NONE', #2539, 0.6000000000000033085 ) ; +#130 = ORIENTED_EDGE ( 'NONE', *, *, #1833, .T. ) ; +#131 = ORIENTED_EDGE ( 'NONE', *, *, #6077, .F. ) ; +#132 = ORIENTED_EDGE ( 'NONE', *, *, #6150, .T. ) ; +#133 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#134 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#135 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063502565, -6.700000000000000178, -21.43027221244042124 ) ) ; +#136 = CARTESIAN_POINT ( 'NONE', ( -36.30999999999903594, -8.000000000000000000, -63.43772963087289440 ) ) ; +#137 = EDGE_CURVE ( 'NONE', #2950, #3394, #1780, .T. ) ; +#138 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#139 = ADVANCED_FACE ( 'NONE', ( #2879 ), #992, .F. ) ; +#140 = VERTEX_POINT ( 'NONE', #3522 ) ; +#141 = ORIENTED_EDGE ( 'NONE', *, *, #447, .T. ) ; +#142 = EDGE_CURVE ( 'NONE', #5838, #5634, #4099, .T. ) ; +#143 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#144 = AXIS2_PLACEMENT_3D ( 'NONE', #3829, #1138, #569 ) ; +#145 = EDGE_CURVE ( 'NONE', #2692, #2321, #689, .T. ) ; +#146 = CARTESIAN_POINT ( 'NONE', ( 36.15552248038325445, -6.700000000000000178, 19.97046096781792812 ) ) ; +#147 = FACE_OUTER_BOUND ( 'NONE', #207, .T. ) ; +#148 = AXIS2_PLACEMENT_3D ( 'NONE', #2118, #4284, #7012 ) ; +#149 = AXIS2_PLACEMENT_3D ( 'NONE', #6263, #785, #6806 ) ; +#150 = ORIENTED_EDGE ( 'NONE', *, *, #4482, .F. ) ; +#151 = AXIS2_PLACEMENT_3D ( 'NONE', #4724, #387, #2613 ) ; +#152 = ORIENTED_EDGE ( 'NONE', *, *, #5994, .F. ) ; +#153 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#154 = VECTOR ( 'NONE', #3923, 1000.000000000000000 ) ; +#155 = ORIENTED_EDGE ( 'NONE', *, *, #4909, .T. ) ; +#156 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#157 = CIRCLE ( 'NONE', #3443, 1.500000000000001332 ) ; +#158 = EDGE_CURVE ( 'NONE', #6696, #2551, #1293, .T. ) ; +#159 = VECTOR ( 'NONE', #2286, 1000.000000000000000 ) ; +#160 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#161 = AXIS2_PLACEMENT_3D ( 'NONE', #3928, #3351, #5523 ) ; +#162 = PRODUCT ( 'CNCÍâ¿Ç', 'CNCÍâ¿Ç', '', ( #2749 ) ) ; +#163 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, -1.000000000000000000, 22.53027221243705114 ) ) ; +#164 = AXIS2_PLACEMENT_3D ( 'NONE', #2148, #415, #4785 ) ; +#165 = ORIENTED_EDGE ( 'NONE', *, *, #4955, .F. ) ; +#166 = CARTESIAN_POINT ( 'NONE', ( 31.73239677215937249, -2.200000000000000622, 13.14398910962637856 ) ) ; +#167 = EDGE_CURVE ( 'NONE', #3203, #1157, #2840, .T. ) ; +#168 = FACE_OUTER_BOUND ( 'NONE', #5457, .T. ) ; +#169 = PLANE ( 'NONE', #6504 ) ; +#170 = CIRCLE ( 'NONE', #6294, 4.500000000000232703 ) ; +#171 = CARTESIAN_POINT ( 'NONE', ( -31.73239677215937249, -5.899999999999999467, -13.14398910962637856 ) ) ; +#172 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -6.700000000000000178, 42.73402833653355515 ) ) ; +#173 = ORIENTED_EDGE ( 'NONE', *, *, #6253, .T. ) ; +#174 = ORIENTED_EDGE ( 'NONE', *, *, #2536, .T. ) ; +#175 = ORIENTED_EDGE ( 'NONE', *, *, #3349, .F. ) ; +#176 = EDGE_LOOP ( 'NONE', ( #789, #5919 ) ) ; +#177 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000027711, 0.000000000000000000, 52.69999999572329585 ) ) ; +#178 = AXIS2_PLACEMENT_3D ( 'NONE', #2688, #5816, #5287 ) ; +#179 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, -1.000000000000000000, 51.13725382063020675 ) ) ; +#180 = LINE ( 'NONE', #2975, #6729 ) ; +#181 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.800000000000000488, 24.46370172317529068 ) ) ; +#182 = CIRCLE ( 'NONE', #6287, 6.000000000000001776 ) ; +#183 = ORIENTED_EDGE ( 'NONE', *, *, #3890, .T. ) ; +#184 = EDGE_LOOP ( 'NONE', ( #641, #5938 ) ) ; +#185 = EDGE_CURVE ( 'NONE', #2738, #1896, #6097, .T. ) ; +#186 = FACE_OUTER_BOUND ( 'NONE', #2224, .T. ) ; +#187 = FACE_OUTER_BOUND ( 'NONE', #6536, .T. ) ; +#188 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#189 = EDGE_CURVE ( 'NONE', #4867, #2051, #1897, .T. ) ; +#190 = CIRCLE ( 'NONE', #1895, 4.500000000000010658 ) ; +#191 = ORIENTED_EDGE ( 'NONE', *, *, #1397, .F. ) ; +#192 = ORIENTED_EDGE ( 'NONE', *, *, #3992, .T. ) ; +#193 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -5.899999999999999467, 24.46370172317529068 ) ) ; +#194 = ORIENTED_EDGE ( 'NONE', *, *, #2957, .F. ) ; +#195 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#196 = ADVANCED_FACE ( 'NONE', ( #2413 ), #4052, .F. ) ; +#197 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, 0.000000000000000000 ) ) ; +#198 = ORIENTED_EDGE ( 'NONE', *, *, #736, .F. ) ; +#199 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#200 = VERTEX_POINT ( 'NONE', #6674 ) ; +#201 = CARTESIAN_POINT ( 'NONE', ( 1.722075445644006830, -2.200000000000000622, 4.157457896303450973 ) ) ; +#202 = DIRECTION ( 'NONE', ( 0.7071067811865441310, 0.000000000000000000, -0.7071067811865510144 ) ) ; +#203 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#204 = FACE_BOUND ( 'NONE', #5755, .T. ) ; +#205 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#206 = VERTEX_POINT ( 'NONE', #6788 ) ; +#207 = EDGE_LOOP ( 'NONE', ( #6469, #3948, #6476, #5640 ) ) ; +#208 = AXIS2_PLACEMENT_3D ( 'NONE', #5235, #6325, #844 ) ; +#209 = ORIENTED_EDGE ( 'NONE', *, *, #5552, .T. ) ; +#210 = ORIENTED_EDGE ( 'NONE', *, *, #2014, .T. ) ; +#211 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063071265, -1.000000000000000000, -25.93027221245084490 ) ) ; +#212 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#213 = EDGE_CURVE ( 'NONE', #82, #5377, #4274, .T. ) ; +#214 = CARTESIAN_POINT ( 'NONE', ( -35.30999999999903594, -1.800000000000000711, -55.49999999999972289 ) ) ; +#215 = LINE ( 'NONE', #1399, #2419 ) ; +#216 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#217 = ORIENTED_EDGE ( 'NONE', *, *, #5192, .T. ) ; +#218 = VERTEX_POINT ( 'NONE', #1894 ) ; +#219 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#220 = AXIS2_PLACEMENT_3D ( 'NONE', #6436, #1589, #3744 ) ; +#221 = FACE_OUTER_BOUND ( 'NONE', #5032, .T. ) ; +#222 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, 0.000000000000000000, -20.83027221245303551 ) ) ; +#223 = EDGE_CURVE ( 'NONE', #5802, #874, #4560, .T. ) ; +#224 = ORIENTED_EDGE ( 'NONE', *, *, #5143, .T. ) ; +#225 = EDGE_LOOP ( 'NONE', ( #5624, #4898 ) ) ; +#226 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, -0.4999999999999886202, -22.03027221244439460 ) ) ; +#227 = AXIS2_PLACEMENT_3D ( 'NONE', #573, #1043, #2727 ) ; +#228 = EDGE_LOOP ( 'NONE', ( #2338, #5589, #4971, #3194 ) ) ; +#229 = ADVANCED_FACE ( 'NONE', ( #147 ), #1927, .T. ) ; +#230 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#231 = AXIS2_PLACEMENT_3D ( 'NONE', #5249, #359, #1883 ) ; +#232 = VERTEX_POINT ( 'NONE', #6246 ) ; +#233 = EDGE_CURVE ( 'NONE', #4261, #6911, #4947, .T. ) ; +#234 = DIRECTION ( 'NONE', ( 9.251858538542962756E-15, 0.000000000000000000, 1.000000000000000000 ) ) ; +#235 = VERTEX_POINT ( 'NONE', #4062 ) ; +#236 = PERSON_AND_ORGANIZATION ( #2507, #6702 ) ; +#237 = EDGE_CURVE ( 'NONE', #2936, #6118, #6131, .T. ) ; +#238 = EDGE_CURVE ( 'NONE', #6465, #1613, #1855, .T. ) ; +#239 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#240 = AXIS2_PLACEMENT_3D ( 'NONE', #2231, #474, #2137 ) ; +#241 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#242 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, -1.324168091886726789E-16 ) ) ; +#243 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#244 = EDGE_LOOP ( 'NONE', ( #1658, #1120, #3052, #6699 ) ) ; +#245 = CYLINDRICAL_SURFACE ( 'NONE', #5817, 1.500000000000004219 ) ; +#246 = ORIENTED_EDGE ( 'NONE', *, *, #223, .T. ) ; +#247 = VERTEX_POINT ( 'NONE', #222 ) ; +#248 = ORIENTED_EDGE ( 'NONE', *, *, #4388, .F. ) ; +#249 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#250 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -2.400000000000000355, 36.73402833653069166 ) ) ; +#251 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, -1.000000000000000000, 20.83027221243706251 ) ) ; +#252 = EDGE_CURVE ( 'NONE', #2040, #2600, #77, .T. ) ; +#253 = LINE ( 'NONE', #4125, #276 ) ; +#254 = LINE ( 'NONE', #6781, #5469 ) ; +#255 = EDGE_CURVE ( 'NONE', #2903, #4195, #2120, .T. ) ; +#256 = EDGE_LOOP ( 'NONE', ( #5623, #5643, #3025, #2401 ) ) ; +#257 = ORIENTED_EDGE ( 'NONE', *, *, #4992, .F. ) ; +#258 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#259 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#260 = CARTESIAN_POINT ( 'NONE', ( -39.95819837980435096, -6.700000000000000178, -60.50000000000001421 ) ) ; +#261 = EDGE_LOOP ( 'NONE', ( #4304, #6468, #3556, #3053 ) ) ; +#262 = EDGE_LOOP ( 'NONE', ( #2022, #4978, #6298, #3287 ) ) ; +#263 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#264 = AXIS2_PLACEMENT_3D ( 'NONE', #2933, #6844, #5184 ) ; +#265 = VERTEX_POINT ( 'NONE', #1405 ) ; +#266 = AXIS2_PLACEMENT_3D ( 'NONE', #6819, #5157, #6705 ) ; +#267 = FACE_OUTER_BOUND ( 'NONE', #6858, .T. ) ; +#268 = CIRCLE ( 'NONE', #4014, 1.099999999999989875 ) ; +#269 = ORIENTED_EDGE ( 'NONE', *, *, #31, .T. ) ; +#270 = AXIS2_PLACEMENT_3D ( 'NONE', #1314, #6189, #2434 ) ; +#271 = DIRECTION ( 'NONE', ( 0.9238795325112894030, 0.000000000000000000, -0.3826834323650834535 ) ) ; +#272 = ORIENTED_EDGE ( 'NONE', *, *, #20, .T. ) ; +#273 = EDGE_CURVE ( 'NONE', #5562, #2795, #6354, .T. ) ; +#274 = LINE ( 'NONE', #1384, #3730 ) ; +#275 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#276 = VECTOR ( 'NONE', #1286, 1000.000000000000000 ) ; +#277 = PLANE ( 'NONE', #3219 ) ; +#278 = AXIS2_PLACEMENT_3D ( 'NONE', #3032, #3065, #2503 ) ; +#279 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#280 = EDGE_CURVE ( 'NONE', #5539, #3096, #1338, .T. ) ; +#281 = VECTOR ( 'NONE', #681, 1000.000000000000000 ) ; +#282 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #2011, #349, ( #1153 ) ) ; +#283 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#284 = ORIENTED_EDGE ( 'NONE', *, *, #3870, .F. ) ; +#285 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, -1.000000000000000000, 51.73725382062663414 ) ) ; +#286 = VERTEX_POINT ( 'NONE', #5296 ) ; +#287 = ORIENTED_EDGE ( 'NONE', *, *, #5234, .F. ) ; +#288 = ORIENTED_EDGE ( 'NONE', *, *, #2154, .F. ) ; +#289 = LINE ( 'NONE', #4087, #4203 ) ; +#290 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#291 = CARTESIAN_POINT ( 'NONE', ( -39.95819837980435096, -2.200000000000000622, -60.50000000000001421 ) ) ; +#292 = AXIS2_PLACEMENT_3D ( 'NONE', #2829, #4965, #5499 ) ; +#293 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#294 = ADVANCED_FACE ( 'NONE', ( #2494 ), #1543, .F. ) ; +#295 = DIRECTION ( 'NONE', ( -0.9238795325112879597, 0.000000000000000000, 0.3826834323650868397 ) ) ; +#296 = EDGE_LOOP ( 'NONE', ( #658, #5293, #1638, #2072 ) ) ; +#297 = AXIS2_PLACEMENT_3D ( 'NONE', #3384, #1693, #3282 ) ; +#298 = ORIENTED_EDGE ( 'NONE', *, *, #4635, .F. ) ; +#299 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#300 = EDGE_CURVE ( 'NONE', #2732, #5644, #4132, .T. ) ; +#301 = FACE_OUTER_BOUND ( 'NONE', #1697, .T. ) ; +#302 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#303 = AXIS2_PLACEMENT_3D ( 'NONE', #1385, #3538, #5101 ) ; +#304 = ORIENTED_EDGE ( 'NONE', *, *, #3296, .T. ) ; +#305 = ORIENTED_EDGE ( 'NONE', *, *, #805, .T. ) ; +#306 = FACE_OUTER_BOUND ( 'NONE', #1054, .T. ) ; +#307 = EDGE_LOOP ( 'NONE', ( #1900, #5955, #3777, #1465, #1547, #4868, #3933, #1259, #1103, #6191 ) ) ; +#308 = CONICAL_SURFACE ( 'NONE', #886, 1.099999999999989875, 0.7853981633974267407 ) ; +#309 = VECTOR ( 'NONE', #4446, 1000.000000000000000 ) ; +#310 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#311 = ORIENTED_EDGE ( 'NONE', *, *, #3263, .F. ) ; +#312 = CARTESIAN_POINT ( 'NONE', ( 10.38390657767673275, -5.899999999999999467, 40.74772366876675278 ) ) ; +#313 = ORIENTED_EDGE ( 'NONE', *, *, #5860, .T. ) ; +#314 = CIRCLE ( 'NONE', #650, 1.500000000000001332 ) ; +#315 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#316 = LINE ( 'NONE', #3579, #6862 ) ; +#317 = ADVANCED_FACE ( 'NONE', ( #4171 ), #2222, .F. ) ; +#318 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#319 = FACE_OUTER_BOUND ( 'NONE', #4224, .T. ) ; +#320 = ORIENTED_EDGE ( 'NONE', *, *, #983, .F. ) ; +#321 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#322 = ORIENTED_EDGE ( 'NONE', *, *, #4635, .T. ) ; +#323 = ORIENTED_EDGE ( 'NONE', *, *, #1787, .T. ) ; +#324 = ORIENTED_EDGE ( 'NONE', *, *, #4442, .F. ) ; +#325 = FACE_BOUND ( 'NONE', #6397, .T. ) ; +#326 = FACE_OUTER_BOUND ( 'NONE', #3740, .T. ) ; +#327 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#328 = FACE_OUTER_BOUND ( 'NONE', #2174, .T. ) ; +#329 = AXIS2_PLACEMENT_3D ( 'NONE', #5770, #5300, #3062 ) ; +#330 = CARTESIAN_POINT ( 'NONE', ( 52.69999999572387139, -8.000000000000000000, 63.49999999999969447 ) ) ; +#331 = ORIENTED_EDGE ( 'NONE', *, *, #6888, .T. ) ; +#332 = ORIENTED_EDGE ( 'NONE', *, *, #1366, .F. ) ; +#333 = AXIS2_PLACEMENT_3D ( 'NONE', #2228, #3871, #6421 ) ; +#334 = CARTESIAN_POINT ( 'NONE', ( -36.72954762892960190, -6.700000000000000178, 20.08464166905317327 ) ) ; +#335 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#336 = ADVANCED_FACE ( 'NONE', ( #370 ), #5799, .T. ) ; +#337 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, -3.491481338843133355E-15 ) ) ; +#338 = VECTOR ( 'NONE', #1334, 1000.000000000000000 ) ; +#339 = AXIS2_PLACEMENT_3D ( 'NONE', #5747, #3327, #102 ) ; +#340 = ORIENTED_EDGE ( 'NONE', *, *, #5583, .T. ) ; +#341 = ORIENTED_EDGE ( 'NONE', *, *, #4106, .T. ) ; +#342 = FACE_OUTER_BOUND ( 'NONE', #4851, .T. ) ; +#343 = ORIENTED_EDGE ( 'NONE', *, *, #5202, .T. ) ; +#344 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#345 = EDGE_CURVE ( 'NONE', #2600, #4277, #5734, .T. ) ; +#346 = ORIENTED_EDGE ( 'NONE', *, *, #5478, .T. ) ; +#347 = CIRCLE ( 'NONE', #1035, 1.500000000000001332 ) ; +#348 = ORIENTED_EDGE ( 'NONE', *, *, #3624, .F. ) ; +#349 = PERSON_AND_ORGANIZATION_ROLE ( 'design_supplier' ) ; +#350 = DIRECTION ( 'NONE', ( 0.9238795325112892920, 0.000000000000000000, -0.3826834323650835645 ) ) ; +#351 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, -0.5000000000000092149, -51.13725382063397262 ) ) ; +#352 = VECTOR ( 'NONE', #2291, 1000.000000000000000 ) ; +#353 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#354 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387191874, -3.200000000000000622, -53.46446609406757489 ) ) ; +#355 = CARTESIAN_POINT ( 'NONE', ( 1.722075445644041469, -5.899999999999999467, -4.157457896303436762 ) ) ; +#356 = ORIENTED_EDGE ( 'NONE', *, *, #3004, .F. ) ; +#357 = ORIENTED_EDGE ( 'NONE', *, *, #2364, .T. ) ; +#358 = AXIS2_PLACEMENT_3D ( 'NONE', #456, #5948, #2651 ) ; +#359 = DIRECTION ( 'NONE', ( -0.9238795325112848511, 0.000000000000000000, -0.3826834323650942227 ) ) ; +#360 = CARTESIAN_POINT ( 'NONE', ( 48.50000000000026290, -8.000000000000000000, 52.52499999999972147 ) ) ; +#361 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#362 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#363 = VECTOR ( 'NONE', #6762, 1000.000000000000000 ) ; +#364 = CARTESIAN_POINT ( 'NONE', ( 52.50000000000027001, -8.000000000000000000, -44.49999999999972289 ) ) ; +#365 = ORIENTED_EDGE ( 'NONE', *, *, #3689, .T. ) ; +#366 = ORIENTED_EDGE ( 'NONE', *, *, #1721, .F. ) ; +#367 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#368 = DIRECTION ( 'NONE', ( -0.7071067811865536790, 0.000000000000000000, -0.7071067811865414665 ) ) ; +#369 = ADVANCED_FACE ( 'NONE', ( #4671 ), #3058, .F. ) ; +#370 = FACE_OUTER_BOUND ( 'NONE', #2724, .T. ) ; +#371 = ADVANCED_FACE ( 'NONE', ( #2629 ), #6826, .F. ) ; +#372 = EDGE_CURVE ( 'NONE', #5695, #898, #4266, .T. ) ; +#373 = PRODUCT_DEFINITION ( 'δ֪', '', #1153, #5851 ) ; +#374 = VERTEX_POINT ( 'NONE', #2529 ) ; +#375 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -5.899999999999999467, -24.46370172317620018 ) ) ; +#376 = EDGE_LOOP ( 'NONE', ( #1719, #1822, #2029, #6537 ) ) ; +#377 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -5.899999999999999467, 22.96370172317529068 ) ) ; +#378 = ORIENTED_EDGE ( 'NONE', *, *, #2141, .T. ) ; +#379 = SHAPE_DEFINITION_REPRESENTATION ( #5040, #742 ) ; +#380 = VECTOR ( 'NONE', #4427, 1000.000000000000000 ) ; +#381 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -2.400000000000000355, 0.000000000000000000 ) ) ; +#382 = FACE_OUTER_BOUND ( 'NONE', #4045, .T. ) ; +#383 = EDGE_CURVE ( 'NONE', #5093, #6624, #314, .T. ) ; +#384 = VECTOR ( 'NONE', #4789, 1000.000000000000000 ) ; +#385 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#386 = AXIS2_PLACEMENT_3D ( 'NONE', #6302, #1492, #4212 ) ; +#387 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#388 = ADVANCED_FACE ( 'NONE', ( #2067 ), #943, .F. ) ; +#389 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -2.200000000000000622, -55.49999999999972289 ) ) ; +#390 = ORIENTED_EDGE ( 'NONE', *, *, #5479, .T. ) ; +#391 = ORIENTED_EDGE ( 'NONE', *, *, #5190, .T. ) ; +#392 = FACE_OUTER_BOUND ( 'NONE', #2312, .T. ) ; +#393 = AXIS2_PLACEMENT_3D ( 'NONE', #1315, #3507, #5071 ) ; +#394 = CARTESIAN_POINT ( 'NONE', ( -21.43027221245029068, -1.000000000000000000, -47.23725382063096134 ) ) ; +#395 = CIRCLE ( 'NONE', #2540, 1.500000000000001332 ) ; +#396 = CYLINDRICAL_SURFACE ( 'NONE', #3672, 4.500000000000230926 ) ; +#397 = AXIS2_PLACEMENT_3D ( 'NONE', #598, #567, #4794 ) ; +#398 = CARTESIAN_POINT ( 'NONE', ( 23.15234765809358919, -6.700000000000000178, 55.89471171693044482 ) ) ; +#399 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#400 = ORIENTED_EDGE ( 'NONE', *, *, #600, .T. ) ; +#401 = VERTEX_POINT ( 'NONE', #3087 ) ; +#402 = CARTESIAN_POINT ( 'NONE', ( -5.800000000000265388, 11.64513216797408823, -57.00000000000000000 ) ) ; +#403 = AXIS2_PLACEMENT_3D ( 'NONE', #5278, #558, #6364 ) ; +#404 = CARTESIAN_POINT ( 'NONE', ( 4.299999999999722711, -2.200000000000000622, 5.693922795112557560E-16 ) ) ; +#405 = CARTESIAN_POINT ( 'NONE', ( 33.50000000000029132, -8.000000000000000000, -63.49999999999972289 ) ) ; +#406 = AXIS2_PLACEMENT_3D ( 'NONE', #4169, #6825, #5163 ) ; +#407 = EDGE_CURVE ( 'NONE', #3543, #2552, #5261, .T. ) ; +#408 = VERTEX_POINT ( 'NONE', #3156 ) ; +#409 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#410 = EDGE_LOOP ( 'NONE', ( #5693, #2883, #3359, #5753 ) ) ; +#411 = VECTOR ( 'NONE', #4953, 1000.000000000000000 ) ; +#412 = CARTESIAN_POINT ( 'NONE', ( -31.73239677215492804, -2.200000000000000622, 13.14398910963711486 ) ) ; +#413 = ORIENTED_EDGE ( 'NONE', *, *, #4958, .T. ) ; +#414 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#415 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#416 = EDGE_CURVE ( 'NONE', #3576, #5625, #4273, .T. ) ; +#417 = VECTOR ( 'NONE', #4380, 1000.000000000000000 ) ; +#418 = CARTESIAN_POINT ( 'NONE', ( 10.38390657767673275, -6.700000000000000178, 40.74772366876675278 ) ) ; +#419 = CYLINDRICAL_SURFACE ( 'NONE', #6031, 40.55000000000109139 ) ; +#420 = LINE ( 'NONE', #1102, #384 ) ; +#421 = ORIENTED_EDGE ( 'NONE', *, *, #2295, .T. ) ; +#422 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#423 = CARTESIAN_POINT ( 'NONE', ( -2.680147770384166961E-13, -2.200000000000000622, -51.94976107412088595 ) ) ; +#424 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -5.500000000000000000, 51.94976107412009725 ) ) ; +#425 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -2.400000000000000355, 36.73402833653069166 ) ) ; +#426 = CARTESIAN_POINT ( 'NONE', ( -41.45819837980560862, -6.700000000000000178, -46.10008445871534377 ) ) ; +#427 = LINE ( 'NONE', #2062, #3885 ) ; +#428 = ORIENTED_EDGE ( 'NONE', *, *, #2961, .F. ) ; +#429 = VERTEX_POINT ( 'NONE', #5828 ) ; +#430 = ADVANCED_FACE ( 'NONE', ( #4401 ), #545, .F. ) ; +#431 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#432 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000026290, -8.000000000000000000, -33.49999999999970868 ) ) ; +#433 = CARTESIAN_POINT ( 'NONE', ( 41.45819837980317146, -6.700000000000000178, -46.10008445871670091 ) ) ; +#434 = CIRCLE ( 'NONE', #7004, 4.500000000000003553 ) ; +#435 = ORIENTED_EDGE ( 'NONE', *, *, #2888, .F. ) ; +#436 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#437 = CIRCLE ( 'NONE', #2926, 6.000000000002864375 ) ; +#438 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#439 = VERTEX_POINT ( 'NONE', #1119 ) ; +#440 = VECTOR ( 'NONE', #1175, 1000.000000000000000 ) ; +#441 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#442 = ORIENTED_EDGE ( 'NONE', *, *, #3625, .F. ) ; +#443 = ORIENTED_EDGE ( 'NONE', *, *, #5962, .F. ) ; +#444 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -2.400000000000000355, -1.500000000000004219 ) ) ; +#445 = CIRCLE ( 'NONE', #1368, 4.500000000000230926 ) ; +#446 = LINE ( 'NONE', #2642, #2326 ) ; +#447 = EDGE_CURVE ( 'NONE', #140, #2824, #2010, .T. ) ; +#448 = FACE_OUTER_BOUND ( 'NONE', #6952, .T. ) ; +#449 = ADVANCED_FACE ( 'NONE', ( #37 ), #6458, .F. ) ; +#450 = DIRECTION ( 'NONE', ( 0.9238795325112866275, 0.000000000000000000, -0.3826834323650899483 ) ) ; +#451 = ADVANCED_FACE ( 'NONE', ( #3260 ), #5501, .T. ) ; +#452 = FACE_OUTER_BOUND ( 'NONE', #6243, .T. ) ; +#453 = ADVANCED_FACE ( 'NONE', ( #2165 ), #4903, .F. ) ; +#454 = ORIENTED_EDGE ( 'NONE', *, *, #6429, .F. ) ; +#455 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -5.899999999999999467, 24.46370172317529068 ) ) ; +#456 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -2.400000000000000355, 0.000000000000000000 ) ) ; +#457 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, 0.000000000000000000, -52.33725382063752818 ) ) ; +#458 = AXIS2_PLACEMENT_3D ( 'NONE', #465, #542, #5431 ) ; +#459 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -5.500000000000000000, 1.500000000000004219 ) ) ; +#460 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244847169, -1.000000000000000000, -51.73725382063096134 ) ) ; +#461 = LINE ( 'NONE', #5918, #1060 ) ; +#462 = AXIS2_PLACEMENT_3D ( 'NONE', #2180, #2155, #4323 ) ; +#463 = VERTEX_POINT ( 'NONE', #5986 ) ; +#464 = ORIENTED_EDGE ( 'NONE', *, *, #185, .T. ) ; +#465 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063086897, -1.000000000000000000, 21.43027221245048253 ) ) ; +#466 = CARTESIAN_POINT ( 'NONE', ( 31.73239677215483567, -5.899999999999999467, -13.14398910963733691 ) ) ; +#467 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#468 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#469 = EDGE_CURVE ( 'NONE', #1483, #2516, #3329, .T. ) ; +#470 = CIRCLE ( 'NONE', #5342, 1.500000000000004219 ) ; +#471 = CC_DESIGN_SECURITY_CLASSIFICATION ( #5902, ( #1153 ) ) ; +#472 = EDGE_LOOP ( 'NONE', ( #6643, #6215, #3322, #6251, #1393, #3991, #741, #1850 ) ) ; +#473 = VERTEX_POINT ( 'NONE', #103 ) ; +#474 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#475 = EDGE_CURVE ( 'NONE', #6941, #5695, #3192, .T. ) ; +#476 = PLANE ( 'NONE', #5537 ) ; +#477 = ORIENTED_EDGE ( 'NONE', *, *, #2577, .F. ) ; +#478 = PLANE ( 'NONE', #730 ) ; +#479 = ORIENTED_EDGE ( 'NONE', *, *, #1830, .F. ) ; +#480 = ORIENTED_EDGE ( 'NONE', *, *, #145, .T. ) ; +#481 = CARTESIAN_POINT ( 'NONE', ( -40.45517745126328890, -6.700000000000000178, -44.98475983471281126 ) ) ; +#482 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -6.700000000000000178, 0.000000000000000000 ) ) ; +#483 = LINE ( 'NONE', #2015, #504 ) ; +#484 = FACE_BOUND ( 'NONE', #6053, .T. ) ; +#485 = ADVANCED_FACE ( 'NONE', ( #5405 ), #308, .F. ) ; +#486 = CIRCLE ( 'NONE', #6600, 1.500000000000001332 ) ; +#487 = CARTESIAN_POINT ( 'NONE', ( -25.58773010874890375, -2.200000000000000622, 50.01517837498834496 ) ) ; +#488 = ORIENTED_EDGE ( 'NONE', *, *, #4106, .F. ) ; +#489 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#490 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#491 = DIRECTION ( 'NONE', ( -0.3826834323650943337, 0.000000000000000000, 0.9238795325112847401 ) ) ; +#492 = AXIS2_PLACEMENT_3D ( 'NONE', #1029, #1595, #1563 ) ; +#493 = CARTESIAN_POINT ( 'NONE', ( -17.30144700593532292, -5.899999999999999467, 30.01032132651306483 ) ) ; +#494 = ADVANCED_FACE ( 'NONE', ( #2132 ), #3293, .T. ) ; +#495 = AXIS2_PLACEMENT_3D ( 'NONE', #4417, #5384, #6006 ) ; +#496 = EDGE_CURVE ( 'NONE', #1407, #6822, #5924, .T. ) ; +#497 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.000000000000000000, 0.000000000000000000 ) ) ; +#498 = ADVANCED_FACE ( 'NONE', ( #2799 ), #4374, .F. ) ; +#499 = LINE ( 'NONE', #6482, #6947 ) ; +#500 = ORIENTED_EDGE ( 'NONE', *, *, #5780, .T. ) ; +#501 = VECTOR ( 'NONE', #5752, 1000.000000000000000 ) ; +#502 = VERTEX_POINT ( 'NONE', #609 ) ; +#503 = FACE_OUTER_BOUND ( 'NONE', #662, .T. ) ; +#504 = VECTOR ( 'NONE', #353, 1000.000000000000000 ) ; +#505 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#506 = CARTESIAN_POINT ( 'NONE', ( 56.16019669858830810, -8.000000000000000000, -56.16019669858773966 ) ) ; +#507 = CIRCLE ( 'NONE', #1187, 0.5999999999999998668 ) ; +#508 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#509 = ADVANCED_FACE ( 'NONE', ( #1674 ), #2765, .F. ) ; +#510 = AXIS2_PLACEMENT_3D ( 'NONE', #1038, #4221, #4192 ) ; +#511 = AXIS2_PLACEMENT_3D ( 'NONE', #3098, #6361, #441 ) ; +#512 = CIRCLE ( 'NONE', #6286, 1.499999999999999556 ) ; +#513 = AXIS2_PLACEMENT_3D ( 'NONE', #6186, #2545, #1348 ) ; +#514 = ORIENTED_EDGE ( 'NONE', *, *, #3531, .T. ) ; +#515 = ORIENTED_EDGE ( 'NONE', *, *, #1516, .F. ) ; +#516 = EDGE_CURVE ( 'NONE', #6249, #5160, #5961, .T. ) ; +#517 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#518 = CYLINDRICAL_SURFACE ( 'NONE', #796, 1.500000000000004219 ) ; +#519 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#520 = VECTOR ( 'NONE', #4625, 1000.000000000000000 ) ; +#521 = EDGE_LOOP ( 'NONE', ( #3151, #4343 ) ) ; +#522 = VECTOR ( 'NONE', #2182, 1000.000000000000000 ) ; +#523 = ORIENTED_EDGE ( 'NONE', *, *, #5049, .T. ) ; +#524 = EDGE_CURVE ( 'NONE', #6511, #5644, #5308, .T. ) ; +#525 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#526 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#527 = CIRCLE ( 'NONE', #4491, 4.500000000000232703 ) ; +#528 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244847169, -1.000000000000000000, -56.23725382063096845 ) ) ; +#529 = LINE ( 'NONE', #1526, #2986 ) ; +#530 = FACE_OUTER_BOUND ( 'NONE', #1940, .T. ) ; +#531 = VERTEX_POINT ( 'NONE', #4842 ) ; +#532 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#533 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244024005, -1.000000000000000000, 47.23725382063509670 ) ) ; +#534 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#535 = ADVANCED_FACE ( 'NONE', ( #3228 ), #5435, .F. ) ; +#536 = EDGE_CURVE ( 'NONE', #6085, #2109, #4436, .T. ) ; +#537 = CARTESIAN_POINT ( 'NONE', ( 4.157457896306343770, -5.899999999999999467, -1.722075445645189662 ) ) ; +#538 = CARTESIAN_POINT ( 'NONE', ( -1.722075445645203207, -6.700000000000000178, -4.157457896306338441 ) ) ; +#539 = CIRCLE ( 'NONE', #5410, 4.500000000000010658 ) ; +#540 = ORIENTED_EDGE ( 'NONE', *, *, #3957, .T. ) ; +#541 = ORIENTED_EDGE ( 'NONE', *, *, #2502, .T. ) ; +#542 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#543 = CARTESIAN_POINT ( 'NONE', ( -30.45000000000150564, -5.899999999999999467, -29.00000000000000000 ) ) ; +#544 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244847169, -1.000000000000000000, -51.73725382063096134 ) ) ; +#545 = CYLINDRICAL_SURFACE ( 'NONE', #6420, 6.000000000000001776 ) ; +#546 = EDGE_CURVE ( 'NONE', #2489, #4556, #3242, .T. ) ; +#547 = EDGE_CURVE ( 'NONE', #1770, #578, #1215, .T. ) ; +#548 = VERTEX_POINT ( 'NONE', #2335 ) ; +#549 = EDGE_CURVE ( 'NONE', #6052, #829, #3435, .T. ) ; +#550 = FACE_OUTER_BOUND ( 'NONE', #2567, .T. ) ; +#551 = ADVANCED_FACE ( 'NONE', ( #758 ), #6088, .F. ) ; +#552 = DIRECTION ( 'NONE', ( -2.312964634635740689E-15, 0.000000000000000000, 1.000000000000000000 ) ) ; +#553 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#554 = AXIS2_PLACEMENT_3D ( 'NONE', #3528, #3917, #4490 ) ; +#555 = ORIENTED_EDGE ( 'NONE', *, *, #1545, .T. ) ; +#556 = ORIENTED_EDGE ( 'NONE', *, *, #1902, .F. ) ; +#557 = EDGE_LOOP ( 'NONE', ( #1729, #4899, #5016, #2349, #1087, #676 ) ) ; +#558 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#559 = VECTOR ( 'NONE', #1616, 1000.000000000000000 ) ; +#560 = EDGE_CURVE ( 'NONE', #4547, #2332, #4552, .T. ) ; +#561 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#562 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#563 = VECTOR ( 'NONE', #414, 1000.000000000000000 ) ; +#564 = ORIENTED_EDGE ( 'NONE', *, *, #1996, .T. ) ; +#565 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, 0.000000000000000000, -51.73725382063397404 ) ) ; +#566 = FACE_OUTER_BOUND ( 'NONE', #1670, .T. ) ; +#567 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#568 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#569 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#570 = ORIENTED_EDGE ( 'NONE', *, *, #4246, .T. ) ; +#571 = VERTEX_POINT ( 'NONE', #5078 ) ; +#572 = AXIS2_PLACEMENT_3D ( 'NONE', #367, #5259, #431 ) ; +#573 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, -0.4999999999999886202, 21.43027221243706038 ) ) ; +#574 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#575 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#576 = CARTESIAN_POINT ( 'NONE', ( -4.157457896303442979, -2.200000000000000622, -1.722075445644026814 ) ) ; +#577 = AXIS2_PLACEMENT_3D ( 'NONE', #6272, #6847, #6814 ) ; +#578 = VERTEX_POINT ( 'NONE', #3399 ) ; +#579 = EDGE_CURVE ( 'NONE', #3519, #1769, #507, .T. ) ; +#580 = CARTESIAN_POINT ( 'NONE', ( -35.30999999999903594, -2.200000000000000622, -55.49999999999972289 ) ) ; +#581 = DIRECTION ( 'NONE', ( 0.7071067811865441310, 0.000000000000000000, -0.7071067811865510144 ) ) ; +#582 = CIRCLE ( 'NONE', #1264, 1.500000000000001332 ) ; +#583 = CARTESIAN_POINT ( 'NONE', ( 39.95819837980705103, -2.200000000000000622, -56.99999999999999289 ) ) ; +#584 = ADVANCED_FACE ( 'NONE', ( #6741 ), #1774, .F. ) ; +#585 = EDGE_CURVE ( 'NONE', #1564, #3879, #5484, .T. ) ; +#586 = ADVANCED_FACE ( 'NONE', ( #1248 ), #834, .F. ) ; +#587 = EDGE_CURVE ( 'NONE', #6882, #2716, #2297, .T. ) ; +#588 = ORIENTED_EDGE ( 'NONE', *, *, #1055, .F. ) ; +#589 = ORIENTED_EDGE ( 'NONE', *, *, #4772, .T. ) ; +#590 = AXIS2_PLACEMENT_3D ( 'NONE', #2357, #6689, #6045 ) ; +#591 = ORIENTED_EDGE ( 'NONE', *, *, #6683, .T. ) ; +#592 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#593 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#594 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000026290, -8.000000000000000000, 33.49999999999970868 ) ) ; +#595 = ORIENTED_EDGE ( 'NONE', *, *, #6345, .F. ) ; +#596 = EDGE_CURVE ( 'NONE', #2331, #1201, #6630, .T. ) ; +#597 = CARTESIAN_POINT ( 'NONE', ( 20.08464166905329762, -6.700000000000000178, 36.72954762892951663 ) ) ; +#598 = CARTESIAN_POINT ( 'NONE', ( -35.30999999999903594, -1.800000000000000711, -56.49999999999972289 ) ) ; +#599 = LINE ( 'NONE', #537, #3330 ) ; +#600 = EDGE_CURVE ( 'NONE', #1882, #1751, #3328, .T. ) ; +#601 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#602 = EDGE_LOOP ( 'NONE', ( #4479, #1190, #5764, #1538, #3914, #655 ) ) ; +#603 = EDGE_LOOP ( 'NONE', ( #4139, #612, #876, #2998 ) ) ; +#604 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#605 = AXIS2_PLACEMENT_3D ( 'NONE', #5812, #3245, #4321 ) ; +#606 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#607 = CARTESIAN_POINT ( 'NONE', ( -56.16019669858830810, -8.000000000000000000, 56.16019669858773966 ) ) ; +#608 = VECTOR ( 'NONE', #3861, 1000.000000000000000 ) ; +#609 = CARTESIAN_POINT ( 'NONE', ( -2.086137553520610372E-12, -6.700000000000000178, 57.94976107412009725 ) ) ; +#610 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#611 = CIRCLE ( 'NONE', #386, 60.49999999999994316 ) ; +#612 = ORIENTED_EDGE ( 'NONE', *, *, #3049, .T. ) ; +#613 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#614 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -2.200000000000000622, -60.50000000000001421 ) ) ; +#615 = VECTOR ( 'NONE', #6124, 1000.000000000000000 ) ; +#616 = VERTEX_POINT ( 'NONE', #5041 ) ; +#617 = VECTOR ( 'NONE', #1455, 1000.000000000000000 ) ; +#618 = EDGE_CURVE ( 'NONE', #3367, #977, #180, .T. ) ; +#619 = AXIS2_PLACEMENT_3D ( 'NONE', #5571, #1886, #6665 ) ; +#620 = EDGE_CURVE ( 'NONE', #408, #5714, #5153, .T. ) ; +#621 = AXIS2_PLACEMENT_3D ( 'NONE', #3797, #4328, #6481 ) ; +#622 = ORIENTED_EDGE ( 'NONE', *, *, #3754, .F. ) ; +#623 = ORIENTED_EDGE ( 'NONE', *, *, #2668, .F. ) ; +#624 = DIRECTION ( 'NONE', ( 0.7071067811865437980, 0.000000000000000000, -0.7071067811865511255 ) ) ; +#625 = ORIENTED_EDGE ( 'NONE', *, *, #5827, .T. ) ; +#626 = CIRCLE ( 'NONE', #51, 6.000000000000001776 ) ; +#627 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#628 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#629 = CIRCLE ( 'NONE', #2558, 1.099999999999989875 ) ; +#630 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#631 = ORIENTED_EDGE ( 'NONE', *, *, #5412, .F. ) ; +#632 = EDGE_CURVE ( 'NONE', #3239, #6193, #6591, .T. ) ; +#633 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, -1.000000000000000000, -50.63725382063395841 ) ) ; +#634 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#635 = VECTOR ( 'NONE', #3115, 1000.000000000000000 ) ; +#636 = CARTESIAN_POINT ( 'NONE', ( -22.78180162019543786, -8.000000000000000000, -60.00000000000001421 ) ) ; +#637 = FACE_OUTER_BOUND ( 'NONE', #244, .T. ) ; +#638 = ORIENTED_EDGE ( 'NONE', *, *, #3088, .T. ) ; +#639 = VERTEX_POINT ( 'NONE', #2831 ) ; +#640 = EDGE_LOOP ( 'NONE', ( #3731, #631 ) ) ; +#641 = ORIENTED_EDGE ( 'NONE', *, *, #4936, .F. ) ; +#642 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#643 = LINE ( 'NONE', #4932, #1754 ) ; +#644 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#645 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#646 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#647 = ADVANCED_FACE ( 'NONE', ( #5003 ), #6123, .F. ) ; +#648 = ORIENTED_EDGE ( 'NONE', *, *, #4957, .T. ) ; +#649 = ORIENTED_EDGE ( 'NONE', *, *, #4892, .F. ) ; +#650 = AXIS2_PLACEMENT_3D ( 'NONE', #4704, #6864, #2000 ) ; +#651 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#652 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244024005, -2.200000000000000622, 51.73725382063510381 ) ) ; +#653 = VECTOR ( 'NONE', #5125, 1000.000000000000000 ) ; +#654 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, -1.000000000000000000, 21.43027221243706038 ) ) ; +#655 = ORIENTED_EDGE ( 'NONE', *, *, #1285, .T. ) ; +#656 = ORIENTED_EDGE ( 'NONE', *, *, #3992, .F. ) ; +#657 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#658 = ORIENTED_EDGE ( 'NONE', *, *, #1197, .F. ) ; +#659 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#660 = PLANE ( 'NONE', #4814 ) ; +#661 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#662 = EDGE_LOOP ( 'NONE', ( #4904, #5292, #4231, #4174, #6736, #1074 ) ) ; +#663 = EDGE_CURVE ( 'NONE', #2356, #3357, #733, .T. ) ; +#664 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#665 = AXIS2_PLACEMENT_3D ( 'NONE', #1183, #259, #1854 ) ; +#666 = LINE ( 'NONE', #2819, #5502 ) ; +#667 = FACE_OUTER_BOUND ( 'NONE', #4742, .T. ) ; +#668 = EDGE_CURVE ( 'NONE', #200, #2757, #2423, .T. ) ; +#669 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -5.500000000000000000, 42.73402833653355515 ) ) ; +#670 = ADVANCED_FACE ( 'NONE', ( #5850 ), #6344, .F. ) ; +#671 = EDGE_CURVE ( 'NONE', #3565, #710, #1865, .T. ) ; +#672 = AXIS2_PLACEMENT_3D ( 'NONE', #6589, #644, #6765 ) ; +#673 = CARTESIAN_POINT ( 'NONE', ( 53.45932926627647674, -2.200000000000000622, -17.27281431614175844 ) ) ; +#674 = ORIENTED_EDGE ( 'NONE', *, *, #4689, .T. ) ; +#675 = VERTEX_POINT ( 'NONE', #5191 ) ; +#676 = ORIENTED_EDGE ( 'NONE', *, *, #19, .F. ) ; +#677 = ORIENTED_EDGE ( 'NONE', *, *, #5841, .F. ) ; +#678 = CARTESIAN_POINT ( 'NONE', ( -1.722075445645237179, -2.200000000000000622, 4.157457896306324230 ) ) ; +#679 = LINE ( 'NONE', #5568, #2096 ) ; +#680 = FACE_OUTER_BOUND ( 'NONE', #3994, .T. ) ; +#681 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#682 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#683 = AXIS2_PLACEMENT_3D ( 'NONE', #6352, #5294, #839 ) ; +#684 = ORIENTED_EDGE ( 'NONE', *, *, #1107, .T. ) ; +#685 = EDGE_LOOP ( 'NONE', ( #779, #564, #5446, #6082 ) ) ; +#686 = CARTESIAN_POINT ( 'NONE', ( -36.72954762893090219, -5.899999999999999467, -20.08464166905100612 ) ) ; +#687 = ADVANCED_FACE ( 'NONE', ( #4732 ), #396, .F. ) ; +#688 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#689 = LINE ( 'NONE', #1335, #6883 ) ; +#690 = AXIS2_PLACEMENT_3D ( 'NONE', #1539, #3763, #5330 ) ; +#691 = EDGE_CURVE ( 'NONE', #4979, #616, #4243, .T. ) ; +#692 = EDGE_LOOP ( 'NONE', ( #830, #4467 ) ) ; +#693 = CIRCLE ( 'NONE', #1604, 0.6000000000000033085 ) ; +#694 = ORIENTED_EDGE ( 'NONE', *, *, #1055, .T. ) ; +#695 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, -1.000000000000000000, 51.73725382063020817 ) ) ; +#696 = VERTEX_POINT ( 'NONE', #902 ) ; +#697 = CYLINDRICAL_SURFACE ( 'NONE', #5271, 1.500000000000004219 ) ; +#698 = AXIS2_PLACEMENT_3D ( 'NONE', #4109, #2601, #6722 ) ; +#699 = CARTESIAN_POINT ( 'NONE', ( -21.47046096781780733, -6.700000000000000178, 36.15552248038332550 ) ) ; +#700 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#701 = ORIENTED_EDGE ( 'NONE', *, *, #2844, .F. ) ; +#702 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#703 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#704 = LINE ( 'NONE', #4954, #860 ) ; +#705 = EDGE_CURVE ( 'NONE', #6257, #2127, #6152, .T. ) ; +#706 = LINE ( 'NONE', #2853, #5927 ) ; +#707 = CARTESIAN_POINT ( 'NONE', ( 39.29417823468470061, -6.700000000000000178, -10.01349373899637207 ) ) ; +#708 = ADVANCED_FACE ( 'NONE', ( #3652 ), #3079, .T. ) ; +#709 = ORIENTED_EDGE ( 'NONE', *, *, #935, .T. ) ; +#710 = VERTEX_POINT ( 'NONE', #1919 ) ; +#711 = ORIENTED_EDGE ( 'NONE', *, *, #383, .T. ) ; +#712 = ORIENTED_EDGE ( 'NONE', *, *, #1229, .T. ) ; +#713 = DIRECTION ( 'NONE', ( -0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#714 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.800000000000000488, -22.96370172317620018 ) ) ; +#715 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, -0.4999999999999886202, -21.43027221244439673 ) ) ; +#716 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244024005, -6.700000000000000178, 51.73725382063510381 ) ) ; +#717 = EDGE_LOOP ( 'NONE', ( #3762, #1434, #217, #6167 ) ) ; +#718 = EDGE_LOOP ( 'NONE', ( #3381, #4950, #3274, #5505 ) ) ; +#719 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.7071067811865293651, -0.7071067811865656694 ) ) ; +#720 = AXIS2_PLACEMENT_3D ( 'NONE', #4935, #73, #2229 ) ; +#721 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.800000000000000488, 24.46370172317529068 ) ) ; +#722 = ADVANCED_FACE ( 'NONE', ( #5818 ), #1398, .T. ) ; +#723 = CARTESIAN_POINT ( 'NONE', ( 4.299999999999729816, -5.500000000000000000, -57.00000000000000000 ) ) ; +#724 = AXIS2_PLACEMENT_3D ( 'NONE', #1233, #2320, #1690 ) ; +#725 = CIRCLE ( 'NONE', #6842, 4.500000000000232703 ) ; +#726 = VERTEX_POINT ( 'NONE', #965 ) ; +#727 = AXIS2_PLACEMENT_3D ( 'NONE', #4182, #6334, #5281 ) ; +#728 = ORIENTED_EDGE ( 'NONE', *, *, #2699, .T. ) ; +#729 = CARTESIAN_POINT ( 'NONE', ( 39.95819837980705103, -8.000000000000000000, -56.99999999999999289 ) ) ; +#730 = AXIS2_PLACEMENT_3D ( 'NONE', #6973, #1775, #5043 ) ; +#731 = EDGE_LOOP ( 'NONE', ( #6293, #2634, #6350, #4982 ) ) ; +#732 = CARTESIAN_POINT ( 'NONE', ( -52.50000000000027001, -3.000000000000000000, -44.49999999999971578 ) ) ; +#733 = CIRCLE ( 'NONE', #6498, 1.100000000000017630 ) ; +#734 = CIRCLE ( 'NONE', #6963, 4.500000000000010658 ) ; +#735 = CARTESIAN_POINT ( 'NONE', ( -27.93000000000074579, -2.200000000000000622, -60.50000000000001421 ) ) ; +#736 = EDGE_CURVE ( 'NONE', #4481, #6982, #6277, .T. ) ; +#737 = EDGE_LOOP ( 'NONE', ( #5968, #1356, #324, #5835, #4127, #2478 ) ) ; +#738 = AXIS2_PLACEMENT_3D ( 'NONE', #3155, #5332, #3807 ) ; +#739 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063502565, -2.200000000000000622, 21.43027221244042124 ) ) ; +#740 = CIRCLE ( 'NONE', #4364, 1.100000000000017630 ) ; +#741 = ORIENTED_EDGE ( 'NONE', *, *, #516, .T. ) ; +#742 = ADVANCED_BREP_SHAPE_REPRESENTATION ( 'CNCÍâ¿Ç', ( #3028, #6927 ), #5122 ) ; +#743 = CARTESIAN_POINT ( 'NONE', ( 39.95819837980705813, -2.200000000000000622, -32.00000000000000000 ) ) ; +#744 = CARTESIAN_POINT ( 'NONE', ( -4.300000000000265388, 11.64513216797408823, -57.00000000000000000 ) ) ; +#745 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#746 = VECTOR ( 'NONE', #6924, 1000.000000000000000 ) ; +#747 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, -3.083952846180830733E-15 ) ) ; +#748 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#749 = ORIENTED_EDGE ( 'NONE', *, *, #4951, .T. ) ; +#750 = ORIENTED_EDGE ( 'NONE', *, *, #2535, .T. ) ; +#751 = ORIENTED_EDGE ( 'NONE', *, *, #6346, .F. ) ; +#752 = ORIENTED_EDGE ( 'NONE', *, *, #1542, .F. ) ; +#753 = CARTESIAN_POINT ( 'NONE', ( 39.29417823468537563, -5.899999999999999467, 10.01349373899374307 ) ) ; +#754 = EDGE_CURVE ( 'NONE', #1392, #6471, #6276, .T. ) ; +#755 = VECTOR ( 'NONE', #491, 1000.000000000000114 ) ; +#756 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -8.000000000000000000, 0.000000000000000000 ) ) ; +#757 = EDGE_CURVE ( 'NONE', #2711, #1201, #157, .T. ) ; +#758 = FACE_OUTER_BOUND ( 'NONE', #4679, .T. ) ; +#759 = FACE_BOUND ( 'NONE', #1352, .T. ) ; +#760 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#761 = VECTOR ( 'NONE', #821, 1000.000000000000000 ) ; +#762 = VERTEX_POINT ( 'NONE', #5759 ) ; +#763 = ORIENTED_EDGE ( 'NONE', *, *, #2274, .F. ) ; +#764 = CARTESIAN_POINT ( 'NONE', ( 1.722075445645174341, -6.700000000000000178, 4.157457896306349987 ) ) ; +#765 = LINE ( 'NONE', #3369, #5657 ) ; +#766 = EDGE_CURVE ( 'NONE', #6522, #4390, #2588, .T. ) ; +#767 = CARTESIAN_POINT ( 'NONE', ( -50.01517837498825259, -2.200000000000000622, -25.58773010874907783 ) ) ; +#768 = EDGE_CURVE ( 'NONE', #6846, #3932, #6313, .T. ) ; +#769 = EDGE_CURVE ( 'NONE', #5929, #4390, #6959, .T. ) ; +#770 = EDGE_CURVE ( 'NONE', #696, #2366, #3563, .T. ) ; +#771 = VERTEX_POINT ( 'NONE', #3249 ) ; +#772 = AXIS2_PLACEMENT_3D ( 'NONE', #5996, #2234, #112 ) ; +#773 = ORIENTED_EDGE ( 'NONE', *, *, #4535, .F. ) ; +#774 = CARTESIAN_POINT ( 'NONE', ( -28.93000000000074579, -1.800000000000000711, -56.49999999999972289 ) ) ; +#775 = ORIENTED_EDGE ( 'NONE', *, *, #983, .T. ) ; +#776 = PLANE ( 'NONE', #4353 ) ; +#777 = EDGE_LOOP ( 'NONE', ( #2134, #1783, #4736, #1912 ) ) ; +#778 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#779 = ORIENTED_EDGE ( 'NONE', *, *, #5572, .F. ) ; +#780 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#781 = ADVANCED_FACE ( 'NONE', ( #2124 ), #1067, .F. ) ; +#782 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#783 = CIRCLE ( 'NONE', #2918, 4.500000000000232703 ) ; +#784 = EDGE_CURVE ( 'NONE', #2552, #6118, #2864, .T. ) ; +#785 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#786 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#787 = VERTEX_POINT ( 'NONE', #6546 ) ; +#788 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000026290, -8.000000000000000000, 33.49999999999970868 ) ) ; +#789 = ORIENTED_EDGE ( 'NONE', *, *, #5536, .T. ) ; +#790 = VECTOR ( 'NONE', #1653, 1000.000000000000000 ) ; +#791 = ORIENTED_EDGE ( 'NONE', *, *, #6295, .F. ) ; +#792 = ORIENTED_EDGE ( 'NONE', *, *, #6888, .F. ) ; +#793 = PLANE ( 'NONE', #2500 ) ; +#794 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387191874, -3.200000000000000622, -54.96446609406757489 ) ) ; +#795 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#796 = AXIS2_PLACEMENT_3D ( 'NONE', #4848, #7001, #3298 ) ; +#797 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, -1.000000000000000000, 21.43027221243706038 ) ) ; +#798 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -5.500000000000000000, 38.23402833653069877 ) ) ; +#799 = ORIENTED_EDGE ( 'NONE', *, *, #2668, .T. ) ; +#800 = ORIENTED_EDGE ( 'NONE', *, *, #1397, .T. ) ; +#801 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, -1.000000000000000000, 51.13725382062663272 ) ) ; +#802 = CIRCLE ( 'NONE', #2243, 0.6000000000000033085 ) ; +#803 = PLANE ( 'NONE', #3043 ) ; +#804 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, -1.000000000000000000, -51.73725382063752676 ) ) ; +#805 = EDGE_CURVE ( 'NONE', #3696, #1916, #4465, .T. ) ; +#806 = ORIENTED_EDGE ( 'NONE', *, *, #6028, .F. ) ; +#807 = EDGE_LOOP ( 'NONE', ( #6808, #1580 ) ) ; +#808 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#809 = AXIS2_PLACEMENT_3D ( 'NONE', #6094, #1254, #6671 ) ; +#810 = EDGE_CURVE ( 'NONE', #1513, #6070, #1694, .T. ) ; +#811 = VERTEX_POINT ( 'NONE', #5424 ) ; +#812 = ADVANCED_FACE ( 'NONE', ( #2720 ), #5355, .F. ) ; +#813 = EDGE_CURVE ( 'NONE', #140, #1244, #2689, .T. ) ; +#814 = FACE_OUTER_BOUND ( 'NONE', #2255, .T. ) ; +#815 = CIRCLE ( 'NONE', #2827, 1.500000000000001332 ) ; +#816 = ORIENTED_EDGE ( 'NONE', *, *, #3837, .T. ) ; +#817 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#818 = VERTEX_POINT ( 'NONE', #2088 ) ; +#819 = PERSON_AND_ORGANIZATION ( #2507, #6702 ) ; +#820 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#821 = DIRECTION ( 'NONE', ( -0.9238795325112835188, 0.000000000000000000, -0.3826834323650976089 ) ) ; +#822 = AXIS2_PLACEMENT_3D ( 'NONE', #1939, #199, #4536 ) ; +#823 = FACE_BOUND ( 'NONE', #2817, .T. ) ; +#824 = CARTESIAN_POINT ( 'NONE', ( 21.47046096782023028, -5.899999999999999467, 36.15552248038188310 ) ) ; +#825 = LINE ( 'NONE', #5142, #1856 ) ; +#826 = EDGE_CURVE ( 'NONE', #829, #1842, #4708, .T. ) ; +#827 = VERTEX_POINT ( 'NONE', #459 ) ; +#828 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#829 = VERTEX_POINT ( 'NONE', #5453 ) ; +#830 = ORIENTED_EDGE ( 'NONE', *, *, #5234, .T. ) ; +#831 = ORIENTED_EDGE ( 'NONE', *, *, #547, .F. ) ; +#832 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000027711, -8.000000000000000000, -52.69999999572329585 ) ) ; +#833 = CARTESIAN_POINT ( 'NONE', ( 31.73239677215937249, -2.200000000000000622, 13.14398910962637856 ) ) ; +#834 = CYLINDRICAL_SURFACE ( 'NONE', #2647, 1.500000000000001332 ) ; +#835 = FACE_BOUND ( 'NONE', #5059, .T. ) ; +#836 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -6.700000000000000178, 30.73402833652782817 ) ) ; +#837 = ORIENTED_EDGE ( 'NONE', *, *, #671, .T. ) ; +#838 = EDGE_LOOP ( 'NONE', ( #480, #3304, #2256, #3510, #6141, #1310 ) ) ; +#839 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#840 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, -0.5000000000000092149, 51.73725382063020817 ) ) ; +#841 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#842 = VERTEX_POINT ( 'NONE', #6515 ) ; +#843 = ORIENTED_EDGE ( 'NONE', *, *, #189, .F. ) ; +#844 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#845 = AXIS2_PLACEMENT_3D ( 'NONE', #4356, #6541, #6510 ) ; +#846 = EDGE_LOOP ( 'NONE', ( #1062, #1969, #970, #6811 ) ) ; +#847 = EDGE_CURVE ( 'NONE', #6522, #3969, #1645, .T. ) ; +#848 = AXIS2_PLACEMENT_3D ( 'NONE', #2108, #4275, #5503 ) ; +#849 = CARTESIAN_POINT ( 'NONE', ( -22.78180162019543786, -2.200000000000000622, -60.00000000000001421 ) ) ; +#850 = VECTOR ( 'NONE', #6879, 1000.000000000000000 ) ; +#851 = ORIENTED_EDGE ( 'NONE', *, *, #86, .F. ) ; +#852 = VECTOR ( 'NONE', #1560, 1000.000000000000000 ) ; +#853 = DIRECTION ( 'NONE', ( 0.9238795325112835188, 0.000000000000000000, 0.3826834323650976089 ) ) ; +#854 = EDGE_LOOP ( 'NONE', ( #6999, #625, #6607, #5494, #921, #6134 ) ) ; +#855 = AXIS2_PLACEMENT_3D ( 'NONE', #1324, #2371, #1845 ) ; +#856 = LINE ( 'NONE', #6223, #5542 ) ; +#857 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#858 = AXIS2_PLACEMENT_3D ( 'NONE', #2073, #2465, #4745 ) ; +#859 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, -0.4999999999999886202, -20.83027221244439531 ) ) ; +#860 = VECTOR ( 'NONE', #1312, 1000.000000000000000 ) ; +#861 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#862 = EDGE_CURVE ( 'NONE', #3358, #1587, #2752, .T. ) ; +#863 = ORIENTED_EDGE ( 'NONE', *, *, #4958, .F. ) ; +#864 = FACE_OUTER_BOUND ( 'NONE', #3873, .T. ) ; +#865 = ORIENTED_EDGE ( 'NONE', *, *, #3776, .F. ) ; +#866 = EDGE_LOOP ( 'NONE', ( #6732, #1840, #3641, #2672 ) ) ; +#867 = ORIENTED_EDGE ( 'NONE', *, *, #4570, .F. ) ; +#868 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000026290, -8.000000000000000000, -33.49999999999970868 ) ) ; +#869 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, -3.083952846180830733E-15 ) ) ; +#870 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#871 = CIRCLE ( 'NONE', #1544, 60.49999999999994316 ) ; +#872 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#873 = CARTESIAN_POINT ( 'NONE', ( 1.722075445645237179, -2.200000000000000622, -4.157457896306324230 ) ) ; +#874 = VERTEX_POINT ( 'NONE', #5882 ) ; +#875 = VECTOR ( 'NONE', #61, 1000.000000000000000 ) ; +#876 = ORIENTED_EDGE ( 'NONE', *, *, #5273, .T. ) ; +#877 = CARTESIAN_POINT ( 'NONE', ( -36.15552248038196126, -5.899999999999999467, 19.97046096782009883 ) ) ; +#878 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, -8.000000000000000000, -63.49999999999972289 ) ) ; +#879 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#880 = VECTOR ( 'NONE', #1460, 1000.000000000000000 ) ; +#881 = EDGE_CURVE ( 'NONE', #5838, #2630, #2764, .T. ) ; +#882 = ORIENTED_EDGE ( 'NONE', *, *, #2436, .T. ) ; +#883 = ORIENTED_EDGE ( 'NONE', *, *, #3837, .F. ) ; +#884 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244024005, -2.200000000000000622, 51.73725382063510381 ) ) ; +#885 = ORIENTED_EDGE ( 'NONE', *, *, #1165, .F. ) ; +#886 = AXIS2_PLACEMENT_3D ( 'NONE', #6995, #4337, #1646 ) ; +#887 = CARTESIAN_POINT ( 'NONE', ( -55.89471171693502782, -6.700000000000000178, -23.15234765808252604 ) ) ; +#888 = ORIENTED_EDGE ( 'NONE', *, *, #1964, .F. ) ; +#889 = VERTEX_POINT ( 'NONE', #2620 ) ; +#890 = DATE_TIME_ROLE ( 'creation_date' ) ; +#891 = LINE ( 'NONE', #3036, #2930 ) ; +#892 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980706524, -2.200000000000000622, -32.00000000000000000 ) ) ; +#893 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#894 = CARTESIAN_POINT ( 'NONE', ( -31.73239677215937249, -2.200000000000000622, -13.14398910962637856 ) ) ; +#895 = EDGE_CURVE ( 'NONE', #4101, #6052, #4020, .T. ) ; +#896 = CARTESIAN_POINT ( 'NONE', ( -48.50000000000026290, -3.000000000000000000, 47.49999999999972289 ) ) ; +#897 = VERTEX_POINT ( 'NONE', #6480 ) ; +#898 = VERTEX_POINT ( 'NONE', #493 ) ; +#899 = CARTESIAN_POINT ( 'NONE', ( 30.01032132651195639, -2.200000000000000622, -17.30144700593806917 ) ) ; +#900 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#901 = EDGE_CURVE ( 'NONE', #3463, #4883, #4918, .T. ) ; +#902 = CARTESIAN_POINT ( 'NONE', ( 17.27281431614965257, -6.700000000000000178, 53.45932926627320114 ) ) ; +#903 = ADVANCED_FACE ( 'NONE', ( #4832 ), #7017, .F. ) ; +#904 = EDGE_CURVE ( 'NONE', #140, #5407, #26, .T. ) ; +#905 = LINE ( 'NONE', #6667, #4239 ) ; +#906 = VECTOR ( 'NONE', #3606, 1000.000000000000000 ) ; +#907 = CARTESIAN_POINT ( 'NONE', ( 52.69999999572387139, 0.000000000000000000, 63.49999999999969447 ) ) ; +#908 = EDGE_LOOP ( 'NONE', ( #1820, #4367 ) ) ; +#909 = ORIENTED_EDGE ( 'NONE', *, *, #6972, .T. ) ; +#910 = FACE_OUTER_BOUND ( 'NONE', #4242, .T. ) ; +#911 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#912 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#913 = AXIS2_PLACEMENT_3D ( 'NONE', #3269, #5409, #552 ) ; +#914 = AXIS2_PLACEMENT_3D ( 'NONE', #2111, #5839, #990 ) ; +#915 = ORIENTED_EDGE ( 'NONE', *, *, #3676, .T. ) ; +#916 = EDGE_CURVE ( 'NONE', #2354, #3357, #4326, .T. ) ; +#917 = CARTESIAN_POINT ( 'NONE', ( 10.38390657767673275, -5.899999999999999467, 39.24772366876674567 ) ) ; +#918 = ORIENTED_EDGE ( 'NONE', *, *, #5907, .F. ) ; +#919 = CYLINDRICAL_SURFACE ( 'NONE', #4241, 4.500000000000230926 ) ; +#920 = AXIS2_PLACEMENT_3D ( 'NONE', #3833, #2129, #6524 ) ; +#921 = ORIENTED_EDGE ( 'NONE', *, *, #6997, .F. ) ; +#922 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .AHEAD. ) ; +#923 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063502565, -2.200000000000000622, -16.93027221244040703 ) ) ; +#924 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#925 = CIRCLE ( 'NONE', #1600, 1.500000000000001332 ) ; +#926 = CARTESIAN_POINT ( 'NONE', ( -25.78180162019543786, -2.200000000000000622, -62.00000000000001421 ) ) ; +#927 = CYLINDRICAL_SURFACE ( 'NONE', #5150, 40.55000000000109139 ) ; +#928 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, -1.800000000000000711, -63.49999999999972289 ) ) ; +#929 = ORIENTED_EDGE ( 'NONE', *, *, #1554, .F. ) ; +#930 = EDGE_LOOP ( 'NONE', ( #6903, #130, #6625, #4297, #5728, #623 ) ) ; +#931 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, 0.000000000000000000 ) ) ; +#932 = CIRCLE ( 'NONE', #698, 1.500000000000001332 ) ; +#933 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, -1.000000000000000000, 21.43027221244568992 ) ) ; +#934 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#935 = EDGE_CURVE ( 'NONE', #1606, #4136, #1649, .T. ) ; +#936 = LINE ( 'NONE', #5917, #3669 ) ; +#937 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#938 = VERTEX_POINT ( 'NONE', #1799 ) ; +#939 = VERTEX_POINT ( 'NONE', #6047 ) ; +#940 = CIRCLE ( 'NONE', #590, 4.500000000000010658 ) ; +#941 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#942 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, 0.000000000000000000, -63.49999999999972289 ) ) ; +#943 = CYLINDRICAL_SURFACE ( 'NONE', #3604, 1.500000000000001332 ) ; +#944 = EDGE_LOOP ( 'NONE', ( #3255, #165, #1923, #6016 ) ) ; +#945 = EDGE_CURVE ( 'NONE', #2900, #4632, #1749, .T. ) ; +#946 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, -1.000000000000000000, 52.83725382062659293 ) ) ; +#947 = ORIENTED_EDGE ( 'NONE', *, *, #5829, .F. ) ; +#948 = LINE ( 'NONE', #5303, #617 ) ; +#949 = CIRCLE ( 'NONE', #4908, 1.500000000000001332 ) ; +#950 = ORIENTED_EDGE ( 'NONE', *, *, #1931, .F. ) ; +#951 = VECTOR ( 'NONE', #1400, 1000.000000000000000 ) ; +#952 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, 0.000000000000000000, -51.73725382063397404 ) ) ; +#953 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#954 = VECTOR ( 'NONE', #5639, 1000.000000000000000 ) ; +#955 = EDGE_CURVE ( 'NONE', #989, #2463, #1429, .T. ) ; +#956 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#957 = AXIS2_PLACEMENT_3D ( 'NONE', #1722, #7010, #4351 ) ; +#958 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, -1.000000000000000000, 20.33027221243706961 ) ) ; +#959 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#960 = ORIENTED_EDGE ( 'NONE', *, *, #618, .T. ) ; +#961 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#962 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#963 = CIRCLE ( 'NONE', #3782, 5.999999999999998224 ) ; +#964 = DIRECTION ( 'NONE', ( 0.7071067811865490160, 0.000000000000000000, 0.7071067811865460184 ) ) ; +#965 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, -0.5000000000000369704, 51.13725382062663272 ) ) ; +#966 = AXIS2_PLACEMENT_3D ( 'NONE', #62, #2216, #1036 ) ; +#967 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, 0.000000000000000000 ) ) ; +#968 = AXIS2_PLACEMENT_3D ( 'NONE', #5684, #6200, #1920 ) ; +#969 = LINE ( 'NONE', #2691, #2983 ) ; +#970 = ORIENTED_EDGE ( 'NONE', *, *, #2136, .T. ) ; +#971 = ORIENTED_EDGE ( 'NONE', *, *, #1300, .F. ) ; +#972 = LINE ( 'NONE', #1641, #3060 ) ; +#973 = AXIS2_PLACEMENT_3D ( 'NONE', #4530, #6681, #1825 ) ; +#974 = LINE ( 'NONE', #432, #3268 ) ; +#975 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -2.400000000000000355, 51.94976107412009725 ) ) ; +#976 = AXIS2_PLACEMENT_3D ( 'NONE', #1174, #3326, #2862 ) ; +#977 = VERTEX_POINT ( 'NONE', #5558 ) ; +#978 = ADVANCED_FACE ( 'NONE', ( #1726 ), #3385, .F. ) ; +#979 = CARTESIAN_POINT ( 'NONE', ( 52.69999999572387139, 0.000000000000000000, 63.49999999999969447 ) ) ; +#980 = LINE ( 'NONE', #5268, #906 ) ; +#981 = ORIENTED_EDGE ( 'NONE', *, *, #5288, .F. ) ; +#982 = VECTOR ( 'NONE', #4289, 1000.000000000000000 ) ; +#983 = EDGE_CURVE ( 'NONE', #4645, #6586, #704, .T. ) ; +#984 = ADVANCED_FACE ( 'NONE', ( #3889 ), #169, .T. ) ; +#985 = ADVANCED_FACE ( 'NONE', ( #5637 ), #126, .F. ) ; +#986 = CYLINDRICAL_SURFACE ( 'NONE', #1642, 4.500000000000010658 ) ; +#987 = EDGE_CURVE ( 'NONE', #6827, #1596, #6612, .T. ) ; +#988 = ORIENTED_EDGE ( 'NONE', *, *, #4975, .F. ) ; +#989 = VERTEX_POINT ( 'NONE', #6654 ) ; +#990 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#991 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000027711, -8.000000000000000000, -51.96388500022008117 ) ) ; +#992 = CONICAL_SURFACE ( 'NONE', #2007, 1.100000000000017630, 0.7853981633974739252 ) ; +#993 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#994 = LINE ( 'NONE', #6939, #2086 ) ; +#995 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.800000000000000488, -25.96370172317620018 ) ) ; +#996 = ORIENTED_EDGE ( 'NONE', *, *, #4737, .F. ) ; +#997 = ADVANCED_FACE ( 'NONE', ( #667 ), #6079, .T. ) ; +#998 = AXIS2_PLACEMENT_3D ( 'NONE', #1478, #5232, #337 ) ; +#999 = CARTESIAN_POINT ( 'NONE', ( -34.86578921711159040, -5.899999999999999467, -20.70457056468532642 ) ) ; +#1000 = LINE ( 'NONE', #5286, #5999 ) ; +#1001 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -5.500000000000000000, 0.000000000000000000 ) ) ; +#1002 = EDGE_CURVE ( 'NONE', #5634, #4563, #2881, .T. ) ; +#1003 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1004 = LINE ( 'NONE', #6949, #6155 ) ; +#1005 = PLANE ( 'NONE', #6138 ) ; +#1006 = EDGE_LOOP ( 'NONE', ( #6892, #1864 ) ) ; +#1007 = VERTEX_POINT ( 'NONE', #4040 ) ; +#1008 = PLANE ( 'NONE', #3283 ) ; +#1009 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ; +#1010 = CARTESIAN_POINT ( 'NONE', ( -30.01032132651207718, -2.200000000000000622, 17.30144700593785956 ) ) ; +#1011 = CIRCLE ( 'NONE', #1788, 1.500000000000001332 ) ; +#1012 = VERTEX_POINT ( 'NONE', #2324 ) ; +#1013 = ORIENTED_EDGE ( 'NONE', *, *, #1836, .T. ) ; +#1014 = CARTESIAN_POINT ( 'NONE', ( -34.86578921711034695, -5.899999999999999467, 20.70457056468741541 ) ) ; +#1015 = AXIS2_PLACEMENT_3D ( 'NONE', #840, #911, #1892 ) ; +#1016 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1017 = ORIENTED_EDGE ( 'NONE', *, *, #6793, .F. ) ; +#1018 = ADVANCED_FACE ( 'NONE', ( #5068 ), #6188, .F. ) ; +#1019 = AXIS2_PLACEMENT_3D ( 'NONE', #381, #2641, #4244 ) ; +#1020 = FACE_BOUND ( 'NONE', #5698, .T. ) ; +#1021 = VERTEX_POINT ( 'NONE', #1349 ) ; +#1022 = ORIENTED_EDGE ( 'NONE', *, *, #4576, .T. ) ; +#1023 = EDGE_CURVE ( 'NONE', #4331, #1226, #92, .T. ) ; +#1024 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1025 = DIRECTION ( 'NONE', ( -0.9238795325112867385, 0.000000000000000000, 0.3826834323650899483 ) ) ; +#1026 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1027 = VECTOR ( 'NONE', #3481, 1000.000000000000000 ) ; +#1028 = CARTESIAN_POINT ( 'NONE', ( -39.29417823468537563, -6.700000000000000178, -10.01349373899374307 ) ) ; +#1029 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, 0.000000000000000000 ) ) ; +#1030 = ORIENTED_EDGE ( 'NONE', *, *, #6833, .T. ) ; +#1031 = FACE_OUTER_BOUND ( 'NONE', #307, .T. ) ; +#1032 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1033 = EDGE_CURVE ( 'NONE', #1012, #439, #2360, .T. ) ; +#1034 = CARTESIAN_POINT ( 'NONE', ( -39.95819837980552336, -6.700000000000000178, -46.10008445871442717 ) ) ; +#1035 = AXIS2_PLACEMENT_3D ( 'NONE', #4019, #4973, #5619 ) ; +#1036 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1037 = EDGE_CURVE ( 'NONE', #124, #1007, #3996, .T. ) ; +#1038 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, -8.000000000000000000, 63.49999999999972289 ) ) ; +#1039 = CARTESIAN_POINT ( 'NONE', ( 40.45517745126431919, -6.700000000000000178, -44.98475983471188755 ) ) ; +#1040 = AXIS2_PLACEMENT_3D ( 'NONE', #5757, #249, #3513 ) ; +#1041 = VERTEX_POINT ( 'NONE', #2928 ) ; +#1042 = ORIENTED_EDGE ( 'NONE', *, *, #2308, .F. ) ; +#1043 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1044 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, -3.083952846180982984E-15 ) ) ; +#1045 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -5.500000000000000000, 51.94976107412009725 ) ) ; +#1046 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1047 = VECTOR ( 'NONE', #4457, 1000.000000000000000 ) ; +#1048 = ORIENTED_EDGE ( 'NONE', *, *, #6530, .T. ) ; +#1049 = ORIENTED_EDGE ( 'NONE', *, *, #4029, .F. ) ; +#1050 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -6.700000000000000178, 36.73402833653069166 ) ) ; +#1051 = CARTESIAN_POINT ( 'NONE', ( -11.76972587644091739, -2.200000000000000622, 40.17369852021979426 ) ) ; +#1052 = ORIENTED_EDGE ( 'NONE', *, *, #4485, .F. ) ; +#1053 = EDGE_LOOP ( 'NONE', ( #5082, #5564 ) ) ; +#1054 = EDGE_LOOP ( 'NONE', ( #6013, #4119, #3656, #4285 ) ) ; +#1055 = EDGE_CURVE ( 'NONE', #4547, #3239, #2309, .T. ) ; +#1056 = CARTESIAN_POINT ( 'NONE', ( -27.93000000000074579, -8.000000000000000000, -62.00000000000002132 ) ) ; +#1057 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000026290, 0.000000000000000000, -33.49999999999970868 ) ) ; +#1058 = CARTESIAN_POINT ( 'NONE', ( 4.157457896306343770, -2.200000000000000622, -1.722075445645189218 ) ) ; +#1059 = CARTESIAN_POINT ( 'NONE', ( 5.799999999999728928, -2.200000000000000622, -57.00000000000000000 ) ) ; +#1060 = VECTOR ( 'NONE', #3186, 1000.000000000000000 ) ; +#1061 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1062 = ORIENTED_EDGE ( 'NONE', *, *, #4357, .F. ) ; +#1063 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, -1.000000000000000000, -21.43027221244439673 ) ) ; +#1064 = CARTESIAN_POINT ( 'NONE', ( -36.15552248038325445, -5.899999999999999467, -21.47046096781793167 ) ) ; +#1065 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1066 = VECTOR ( 'NONE', #2614, 1000.000000000000000 ) ; +#1067 = CYLINDRICAL_SURFACE ( 'NONE', #5722, 0.5999999999999998668 ) ; +#1068 = EDGE_CURVE ( 'NONE', #6827, #6798, #2393, .T. ) ; +#1069 = VECTOR ( 'NONE', #3243, 1000.000000000000000 ) ; +#1070 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063502565, -6.700000000000000178, 21.43027221244042124 ) ) ; +#1071 = EDGE_CURVE ( 'NONE', #5344, #2463, #512, .T. ) ; +#1072 = ADVANCED_FACE ( 'NONE', ( #2965, #6226, #5671, #823, #5138 ), #277, .F. ) ; +#1073 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1074 = ORIENTED_EDGE ( 'NONE', *, *, #5703, .T. ) ; +#1075 = AXIS2_PLACEMENT_3D ( 'NONE', #6440, #3209, #5386 ) ; +#1076 = ORIENTED_EDGE ( 'NONE', *, *, #6618, .F. ) ; +#1077 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1078 = VECTOR ( 'NONE', #5697, 1000.000000000000000 ) ; +#1079 = CARTESIAN_POINT ( 'NONE', ( -17.27281431613930351, -2.200000000000000622, 53.45932926627803283 ) ) ; +#1080 = CARTESIAN_POINT ( 'NONE', ( -2.680147770384166961E-13, -2.200000000000000622, -51.94976107412088595 ) ) ; +#1081 = AXIS2_PLACEMENT_3D ( 'NONE', #6946, #4255, #3316 ) ; +#1082 = DIRECTION ( 'NONE', ( -0.9238795325112892920, 0.000000000000000000, 0.3826834323650834535 ) ) ; +#1083 = VECTOR ( 'NONE', #497, 1000.000000000000000 ) ; +#1084 = AXIS2_PLACEMENT_3D ( 'NONE', #4515, #138, #6060 ) ; +#1085 = VECTOR ( 'NONE', #2157, 1000.000000000000000 ) ; +#1086 = VECTOR ( 'NONE', #2470, 1000.000000000000000 ) ; +#1087 = ORIENTED_EDGE ( 'NONE', *, *, #407, .F. ) ; +#1088 = VERTEX_POINT ( 'NONE', #1703 ) ; +#1089 = CARTESIAN_POINT ( 'NONE', ( 53.45932926627796888, -2.200000000000000622, 17.27281431613949181 ) ) ; +#1090 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1091 = LINE ( 'NONE', #1222, #6638 ) ; +#1092 = ADVANCED_FACE ( 'NONE', ( #3869, #6457 ), #4373, .F. ) ; +#1093 = AXIS2_PLACEMENT_3D ( 'NONE', #6018, #6628, #5646 ) ; +#1094 = ORIENTED_EDGE ( 'NONE', *, *, #5800, .F. ) ; +#1095 = AXIS2_PLACEMENT_3D ( 'NONE', #1468, #5221, #4694 ) ; +#1096 = ORIENTED_EDGE ( 'NONE', *, *, #2049, .F. ) ; +#1097 = ORIENTED_EDGE ( 'NONE', *, *, #4163, .F. ) ; +#1098 = LINE ( 'NONE', #6332, #5732 ) ; +#1099 = AXIS2_PLACEMENT_3D ( 'NONE', #1659, #627, #156 ) ; +#1100 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1101 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1102 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, -1.000000000000000000, -22.03027221244439460 ) ) ; +#1103 = ORIENTED_EDGE ( 'NONE', *, *, #3815, .T. ) ; +#1104 = CARTESIAN_POINT ( 'NONE', ( -28.93000000000074579, -2.200000000000000622, -55.49999999999972289 ) ) ; +#1105 = CARTESIAN_POINT ( 'NONE', ( 31.73239677215937249, -5.899999999999999467, 8.643989109626145861 ) ) ; +#1106 = CARTESIAN_POINT ( 'NONE', ( -25.78180162019543786, -2.200000000000000622, -60.50000000000001421 ) ) ; +#1107 = EDGE_CURVE ( 'NONE', #6922, #1793, #1764, .T. ) ; +#1108 = DIRECTION ( 'NONE', ( 0.3826834323650869507, -0.000000000000000000, 0.9238795325112878487 ) ) ; +#1109 = CARTESIAN_POINT ( 'NONE', ( 50.01517837498825259, -2.200000000000000622, 25.58773010874907783 ) ) ; +#1110 = VECTOR ( 'NONE', #3408, 1000.000000000000000 ) ; +#1111 = VERTEX_POINT ( 'NONE', #2098 ) ; +#1112 = ORIENTED_EDGE ( 'NONE', *, *, #766, .F. ) ; +#1113 = VERTEX_POINT ( 'NONE', #1576 ) ; +#1114 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1115 = ADVANCED_FACE ( 'NONE', ( #4264 ), #6019, .T. ) ; +#1116 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1117 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000026290, -8.000000000000000000, 33.49999999999970868 ) ) ; +#1118 = EDGE_CURVE ( 'NONE', #939, #4185, #3728, .T. ) ; +#1119 = CARTESIAN_POINT ( 'NONE', ( 34.86578921711019774, -5.899999999999999467, -20.70457056468765700 ) ) ; +#1120 = ORIENTED_EDGE ( 'NONE', *, *, #2844, .T. ) ; +#1121 = CARTESIAN_POINT ( 'NONE', ( 3.098356401842803508E-15, -2.299999999999999822, 25.30000000000000071 ) ) ; +#1122 = CYLINDRICAL_SURFACE ( 'NONE', #6089, 0.6000000000000033085 ) ; +#1123 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1124 = EDGE_CURVE ( 'NONE', #1959, #4331, #5119, .T. ) ; +#1125 = AXIS2_PLACEMENT_3D ( 'NONE', #6445, #81, #6369 ) ; +#1126 = EDGE_LOOP ( 'NONE', ( #1915, #1013, #3925, #6248 ) ) ; +#1127 = VERTEX_POINT ( 'NONE', #3259 ) ; +#1128 = ORIENTED_EDGE ( 'NONE', *, *, #3300, .F. ) ; +#1129 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, 0.000000000000000000, 21.43027221244568992 ) ) ; +#1130 = AXIS2_PLACEMENT_3D ( 'NONE', #3198, #1090, #581 ) ; +#1131 = CARTESIAN_POINT ( 'NONE', ( 36.15552248038181204, -5.899999999999999467, -21.47046096782034752 ) ) ; +#1132 = CARTESIAN_POINT ( 'NONE', ( 33.50000000000029132, -8.000000000000000000, 63.49999999999972289 ) ) ; +#1133 = VECTOR ( 'NONE', #6876, 1000.000000000000000 ) ; +#1134 = ORIENTED_EDGE ( 'NONE', *, *, #6740, .T. ) ; +#1135 = LINE ( 'NONE', #2750, #875 ) ; +#1136 = DIRECTION ( 'NONE', ( 8.659560562355154725E-17, -0.7071067811865293651, 0.7071067811865656694 ) ) ; +#1137 = CARTESIAN_POINT ( 'NONE', ( 48.50000000000026290, -8.000000000000000000, 47.49999999999972289 ) ) ; +#1138 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1139 = ORIENTED_EDGE ( 'NONE', *, *, #72, .F. ) ; +#1140 = ORIENTED_EDGE ( 'NONE', *, *, #1795, .T. ) ; +#1141 = CARTESIAN_POINT ( 'NONE', ( 17.27281431614158080, -2.200000000000000622, 53.45932926627654069 ) ) ; +#1142 = CARTESIAN_POINT ( 'NONE', ( -4.300000000000265388, -2.200000000000000622, -51.94976107412088595 ) ) ; +#1143 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000026290, -8.000000000000000000, -33.49999999999970868 ) ) ; +#1144 = EDGE_CURVE ( 'NONE', #3543, #2936, #3810, .T. ) ; +#1145 = DIRECTION ( 'NONE', ( 0.3826834323650943892, 0.000000000000000000, -0.9238795325112847401 ) ) ; +#1146 = AXIS2_PLACEMENT_3D ( 'NONE', #3077, #4693, #2973 ) ; +#1147 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#1148 = ORIENTED_EDGE ( 'NONE', *, *, #5092, .T. ) ; +#1149 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -5.500000000000000000, 0.000000000000000000 ) ) ; +#1150 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1151 = VECTOR ( 'NONE', #700, 1000.000000000000000 ) ; +#1152 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1153 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ÈκÎ', '', #162, .NOT_KNOWN. ) ; +#1154 = EDGE_CURVE ( 'NONE', #1731, #2375, #3157, .T. ) ; +#1155 = ORIENTED_EDGE ( 'NONE', *, *, #5841, .T. ) ; +#1156 = ORIENTED_EDGE ( 'NONE', *, *, #5345, .F. ) ; +#1157 = VERTEX_POINT ( 'NONE', #1610 ) ; +#1158 = CYLINDRICAL_SURFACE ( 'NONE', #3571, 4.500000000000010658 ) ; +#1159 = CYLINDRICAL_SURFACE ( 'NONE', #4473, 4.500000000000010658 ) ; +#1160 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000026290, 0.000000000000000000, 33.49999999999970868 ) ) ; +#1161 = ORIENTED_EDGE ( 'NONE', *, *, #3965, .F. ) ; +#1162 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1163 = DIRECTION ( 'NONE', ( 0.7071067811865485719, 0.000000000000000000, 0.7071067811865465735 ) ) ; +#1164 = CARTESIAN_POINT ( 'NONE', ( 52.69999999572387139, 0.000000000000000000, -63.49999999999969447 ) ) ; +#1165 = EDGE_CURVE ( 'NONE', #2354, #4117, #3765, .T. ) ; +#1166 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -5.899999999999999467, 25.96370172317529423 ) ) ; +#1167 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -5.500000000000000000, 36.73402833653069166 ) ) ; +#1168 = EDGE_LOOP ( 'NONE', ( #141, #1219, #4240, #1288 ) ) ; +#1169 = ORIENTED_EDGE ( 'NONE', *, *, #3176, .F. ) ; +#1170 = ORIENTED_EDGE ( 'NONE', *, *, #6823, .T. ) ; +#1171 = ORIENTED_EDGE ( 'NONE', *, *, #3178, .T. ) ; +#1172 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, -1.000000000000000000, 22.53027221243705114 ) ) ; +#1173 = CONICAL_SURFACE ( 'NONE', #605, 1.100000000000017630, 0.7853981633974739252 ) ; +#1174 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -6.700000000000000178, 0.000000000000000000 ) ) ; +#1175 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1176 = VECTOR ( 'NONE', #5327, 1000.000000000000000 ) ; +#1177 = CARTESIAN_POINT ( 'NONE', ( -22.78180162019543786, -8.000000000000000000, -58.50000000000000000 ) ) ; +#1178 = VECTOR ( 'NONE', #3541, 1000.000000000000000 ) ; +#1179 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063502565, -1.000000000000000000, 21.43027221244042124 ) ) ; +#1180 = ORIENTED_EDGE ( 'NONE', *, *, #6786, .T. ) ; +#1181 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.299999999999999822, 0.000000000000000000 ) ) ; +#1182 = AXIS2_PLACEMENT_3D ( 'NONE', #3515, #6163, #3475 ) ; +#1183 = CARTESIAN_POINT ( 'NONE', ( 10.38390657767673275, -5.899999999999999467, 40.74772366876675278 ) ) ; +#1184 = CIRCLE ( 'NONE', #2197, 1.500000000002881029 ) ; +#1185 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1186 = AXIS2_PLACEMENT_3D ( 'NONE', #4984, #5096, #1343 ) ; +#1187 = AXIS2_PLACEMENT_3D ( 'NONE', #715, #2404, #6703 ) ; +#1188 = EDGE_CURVE ( 'NONE', #2331, #2289, #6906, .T. ) ; +#1189 = ORIENTED_EDGE ( 'NONE', *, *, #5404, .T. ) ; +#1190 = ORIENTED_EDGE ( 'NONE', *, *, #6642, .T. ) ; +#1191 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1192 = ADVANCED_FACE ( 'NONE', ( #2729 ), #4902, .F. ) ; +#1193 = ORIENTED_EDGE ( 'NONE', *, *, #2492, .T. ) ; +#1194 = CIRCLE ( 'NONE', #5943, 4.500000000000010658 ) ; +#1195 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1196 = ADVANCED_FACE ( 'NONE', ( #4933 ), #2194, .T. ) ; +#1197 = EDGE_CURVE ( 'NONE', #2354, #5081, #3847, .T. ) ; +#1198 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1199 = CIRCLE ( 'NONE', #2100, 4.500000000000232703 ) ; +#1200 = CYLINDRICAL_SURFACE ( 'NONE', #3407, 1.500000000000001332 ) ; +#1201 = VERTEX_POINT ( 'NONE', #6556 ) ; +#1202 = FACE_OUTER_BOUND ( 'NONE', #6720, .T. ) ; +#1203 = CARTESIAN_POINT ( 'NONE', ( 33.45447221780229086, -2.200000000000000622, 8.986531213325664069 ) ) ; +#1204 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1205 = AXIS2_PLACEMENT_3D ( 'NONE', #892, #1831, #780 ) ; +#1206 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1207 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1208 = EDGE_CURVE ( 'NONE', #2106, #2757, #6790, .T. ) ; +#1209 = VERTEX_POINT ( 'NONE', #2763 ) ; +#1210 = ORIENTED_EDGE ( 'NONE', *, *, #5699, .F. ) ; +#1211 = ORIENTED_EDGE ( 'NONE', *, *, #4008, .T. ) ; +#1212 = CARTESIAN_POINT ( 'NONE', ( 33.50000000000029132, -8.000000000000000000, 63.49999999999972289 ) ) ; +#1213 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1214 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#1215 = LINE ( 'NONE', #136, #2787 ) ; +#1216 = ADVANCED_FACE ( 'NONE', ( #3292 ), #5461, .F. ) ; +#1217 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1218 = ORIENTED_EDGE ( 'NONE', *, *, #4721, .T. ) ; +#1219 = ORIENTED_EDGE ( 'NONE', *, *, #2576, .T. ) ; +#1220 = CYLINDRICAL_SURFACE ( 'NONE', #809, 5.025000000000002132 ) ; +#1221 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1222 = CARTESIAN_POINT ( 'NONE', ( -22.78180162019543786, -2.200000000000000622, -58.50000000000000000 ) ) ; +#1223 = VERTEX_POINT ( 'NONE', #5669 ) ; +#1224 = VERTEX_POINT ( 'NONE', #4613 ) ; +#1225 = DIRECTION ( 'NONE', ( -0.3826834323650976089, 0.000000000000000000, 0.9238795325112835188 ) ) ; +#1226 = VERTEX_POINT ( 'NONE', #2261 ) ; +#1227 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1228 = ADVANCED_FACE ( 'NONE', ( #2469 ), #1424, .F. ) ; +#1229 = EDGE_CURVE ( 'NONE', #1127, #4043, #3271, .T. ) ; +#1230 = AXIS2_PLACEMENT_3D ( 'NONE', #3715, #961, #5879 ) ; +#1231 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1232 = EDGE_CURVE ( 'NONE', #1842, #4101, #274, .T. ) ; +#1233 = CARTESIAN_POINT ( 'NONE', ( -52.50000000000027001, -8.000000000000000000, -44.49999999999971578 ) ) ; +#1234 = ORIENTED_EDGE ( 'NONE', *, *, #5479, .F. ) ; +#1235 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #1371 ) ; +#1236 = AXIS2_PLACEMENT_3D ( 'NONE', #3980, #6709, #1255 ) ; +#1237 = CARTESIAN_POINT ( 'NONE', ( -4.300000000000265388, -5.499999999999998224, -51.94976107412088595 ) ) ; +#1238 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1239 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#1240 = CYLINDRICAL_SURFACE ( 'NONE', #6495, 4.500000000000010658 ) ; +#1241 = ADVANCED_FACE ( 'NONE', ( #680 ), #4650, .F. ) ; +#1242 = EDGE_LOOP ( 'NONE', ( #709, #6220 ) ) ; +#1243 = EDGE_LOOP ( 'NONE', ( #5420, #5668, #4471, #3213 ) ) ; +#1244 = VERTEX_POINT ( 'NONE', #4434 ) ; +#1245 = ORIENTED_EDGE ( 'NONE', *, *, #213, .T. ) ; +#1246 = CARTESIAN_POINT ( 'NONE', ( 39.95819837980705813, -2.200000000000000622, -32.00000000000000000 ) ) ; +#1247 = LINE ( 'NONE', #2905, #3805 ) ; +#1248 = FACE_OUTER_BOUND ( 'NONE', #2710, .T. ) ; +#1249 = EDGE_CURVE ( 'NONE', #3358, #5562, #5178, .T. ) ; +#1250 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1251 = CIRCLE ( 'NONE', #2495, 1.500000000000001332 ) ; +#1252 = ORIENTED_EDGE ( 'NONE', *, *, #1591, .T. ) ; +#1253 = ORIENTED_EDGE ( 'NONE', *, *, #6335, .T. ) ; +#1254 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1255 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1256 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#1257 = AXIS2_PLACEMENT_3D ( 'NONE', #1321, #4398, #642 ) ; +#1258 = EDGE_CURVE ( 'NONE', #5377, #5160, #4076, .T. ) ; +#1259 = ORIENTED_EDGE ( 'NONE', *, *, #2372, .T. ) ; +#1260 = EDGE_LOOP ( 'NONE', ( #1922, #348, #5227, #5701 ) ) ; +#1261 = PLANE ( 'NONE', #6433 ) ; +#1262 = ORIENTED_EDGE ( 'NONE', *, *, #3126, .T. ) ; +#1263 = CARTESIAN_POINT ( 'NONE', ( -4.300000000000265388, -5.500000000000000000, -57.00000000000000000 ) ) ; +#1264 = AXIS2_PLACEMENT_3D ( 'NONE', #22, #2211, #4389 ) ; +#1265 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1266 = ORIENTED_EDGE ( 'NONE', *, *, #7018, .F. ) ; +#1267 = ADVANCED_FACE ( 'NONE', ( #5500 ), #4475, .F. ) ; +#1268 = LINE ( 'NONE', #1723, #6372 ) ; +#1269 = ORIENTED_EDGE ( 'NONE', *, *, #587, .F. ) ; +#1270 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -2.400000000000000355, 36.73402833653069166 ) ) ; +#1271 = CARTESIAN_POINT ( 'NONE', ( -36.15552248038196126, -5.899999999999999467, 19.97046096782009883 ) ) ; +#1272 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1273 = FACE_OUTER_BOUND ( 'NONE', #3897, .T. ) ; +#1274 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1275 = ADVANCED_FACE ( 'NONE', ( #2963 ), #2509, .F. ) ; +#1276 = VERTEX_POINT ( 'NONE', #6259 ) ; +#1277 = ORIENTED_EDGE ( 'NONE', *, *, #2708, .T. ) ; +#1278 = ORIENTED_EDGE ( 'NONE', *, *, #4265, .F. ) ; +#1279 = ORIENTED_EDGE ( 'NONE', *, *, #6547, .T. ) ; +#1280 = CARTESIAN_POINT ( 'NONE', ( -48.50000000000026290, -3.000000000000000000, 52.52499999999972147 ) ) ; +#1281 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1282 = EDGE_CURVE ( 'NONE', #4867, #989, #4038, .T. ) ; +#1283 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1284 = EDGE_CURVE ( 'NONE', #3546, #5793, #2707, .T. ) ; +#1285 = EDGE_CURVE ( 'NONE', #4569, #4676, #6629, .T. ) ; +#1286 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1287 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1288 = ORIENTED_EDGE ( 'NONE', *, *, #904, .F. ) ; +#1289 = EDGE_LOOP ( 'NONE', ( #5576, #5742 ) ) ; +#1290 = CYLINDRICAL_SURFACE ( 'NONE', #3167, 4.500000000000003553 ) ; +#1291 = AXIS2_PLACEMENT_3D ( 'NONE', #3017, #216, #2942 ) ; +#1292 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -5.500000000000000000, 36.73402833653069166 ) ) ; +#1293 = LINE ( 'NONE', #767, #653 ) ; +#1294 = CIRCLE ( 'NONE', #5720, 40.55000000000109139 ) ; +#1295 = ORIENTED_EDGE ( 'NONE', *, *, #516, .F. ) ; +#1296 = VERTEX_POINT ( 'NONE', #3499 ) ; +#1297 = CIRCLE ( 'NONE', #4710, 1.099999999999962119 ) ; +#1298 = ORIENTED_EDGE ( 'NONE', *, *, #3301, .F. ) ; +#1299 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063086897, -1.000000000000000000, 21.43027221245048253 ) ) ; +#1300 = EDGE_CURVE ( 'NONE', #5081, #2809, #856, .T. ) ; +#1301 = AXIS2_PLACEMENT_3D ( 'NONE', #6327, #2041, #4206 ) ; +#1302 = EDGE_LOOP ( 'NONE', ( #3706, #1266 ) ) ; +#1303 = FACE_BOUND ( 'NONE', #1768, .T. ) ; +#1304 = VECTOR ( 'NONE', #4588, 1000.000000000000000 ) ; +#1305 = CIRCLE ( 'NONE', #4590, 1.500000000000001332 ) ; +#1306 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -2.400000000000000355, 36.73402833653069166 ) ) ; +#1307 = ORIENTED_EDGE ( 'NONE', *, *, #5800, .T. ) ; +#1308 = B_SPLINE_SURFACE_WITH_KNOTS ( 'NONE', 4, 1, ( + ( #3280, #5485 ), + ( #4949, #3380 ), + ( #5450, #87 ), + ( #6613, #4890 ), + ( #594, #1160 ) ), + .UNSPECIFIED., .F., .F., .F., + ( 5, 5 ), + ( 2, 2 ), + ( 0.000000000000000000, 1.000000000000000000 ), + ( 0.000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#1309 = CARTESIAN_POINT ( 'NONE', ( 33.50000000000029132, -8.000000000000000000, 63.49999999999972289 ) ) ; +#1310 = ORIENTED_EDGE ( 'NONE', *, *, #2490, .T. ) ; +#1311 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1312 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#1313 = AXIS2_PLACEMENT_3D ( 'NONE', #543, #2163, #606 ) ; +#1314 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, -1.000000000000000000, -21.43027221245303338 ) ) ; +#1315 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, -1.000000000000000000, -51.73725382063397404 ) ) ; +#1316 = EDGE_LOOP ( 'NONE', ( #6505, #4315, #2631, #4995, #3323, #6389 ) ) ; +#1317 = LINE ( 'NONE', #2515, #1633 ) ; +#1318 = EDGE_LOOP ( 'NONE', ( #5437, #1686, #3511, #340 ) ) ; +#1319 = ORIENTED_EDGE ( 'NONE', *, *, #4846, .T. ) ; +#1320 = ORIENTED_EDGE ( 'NONE', *, *, #4150, .T. ) ; +#1321 = CARTESIAN_POINT ( 'NONE', ( 31.73239677215483567, -2.200000000000000622, -13.14398910963733691 ) ) ; +#1322 = AXIS2_PLACEMENT_3D ( 'NONE', #5977, #6616, #1163 ) ; +#1323 = CARTESIAN_POINT ( 'NONE', ( 33.50000000000029132, 0.000000000000000000, -63.49999999999972289 ) ) ; +#1324 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -5.500000000000000000, 36.73402833653069166 ) ) ; +#1325 = EDGE_CURVE ( 'NONE', #2593, #1415, #5705, .T. ) ; +#1326 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, -1.000000000000000000, 51.73725382062663414 ) ) ; +#1327 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1328 = EDGE_CURVE ( 'NONE', #2488, #818, #6803, .T. ) ; +#1329 = EDGE_LOOP ( 'NONE', ( #4525, #3780, #2290, #515 ) ) ; +#1330 = EDGE_LOOP ( 'NONE', ( #1504, #1382 ) ) ; +#1331 = ADVANCED_FACE ( 'NONE', ( #4111 ), #3578, .F. ) ; +#1332 = LINE ( 'NONE', #764, #2042 ) ; +#1333 = EDGE_CURVE ( 'NONE', #2275, #3299, #891, .T. ) ; +#1334 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1335 = CARTESIAN_POINT ( 'NONE', ( -1.722075445643978187, -6.700000000000000178, -4.157457896303463407 ) ) ; +#1336 = VECTOR ( 'NONE', #4486, 1000.000000000000000 ) ; +#1337 = ORIENTED_EDGE ( 'NONE', *, *, #3137, .F. ) ; +#1338 = CIRCLE ( 'NONE', #6422, 1.500000000000001332 ) ; +#1339 = ORIENTED_EDGE ( 'NONE', *, *, #4237, .T. ) ; +#1340 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1341 = EDGE_LOOP ( 'NONE', ( #4017, #40, #5159, #323 ) ) ; +#1342 = ADVANCED_FACE ( 'NONE', ( #7007 ), #1557, .F. ) ; +#1343 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1344 = EDGE_LOOP ( 'NONE', ( #2399, #2388, #1804, #3224, #5233, #5652 ) ) ; +#1345 = CARTESIAN_POINT ( 'NONE', ( 48.50000000000026290, -3.000000000000000000, 42.47499999999972431 ) ) ; +#1346 = ORIENTED_EDGE ( 'NONE', *, *, #5049, .F. ) ; +#1347 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1348 = DIRECTION ( 'NONE', ( 0.7071067811865487940, 0.000000000000000000, 0.7071067811865463515 ) ) ; +#1349 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -5.500000000000000000, 45.94976107412009725 ) ) ; +#1350 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063502565, -1.000000000000000000, -25.93027221244043190 ) ) ; +#1351 = CARTESIAN_POINT ( 'NONE', ( -36.72954762893090219, -5.899999999999999467, -20.08464166905100612 ) ) ; +#1352 = EDGE_LOOP ( 'NONE', ( #2845, #5846 ) ) ; +#1353 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1354 = ORIENTED_EDGE ( 'NONE', *, *, #1685, .T. ) ; +#1355 = VECTOR ( 'NONE', #6320, 1000.000000000000000 ) ; +#1356 = ORIENTED_EDGE ( 'NONE', *, *, #2526, .T. ) ; +#1357 = ORIENTED_EDGE ( 'NONE', *, *, #6554, .T. ) ; +#1358 = FACE_BOUND ( 'NONE', #2849, .T. ) ; +#1359 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1360 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -6.700000000000000178, 0.000000000000000000 ) ) ; +#1361 = AXIS2_PLACEMENT_3D ( 'NONE', #4841, #6993, #4300 ) ; +#1362 = FACE_OUTER_BOUND ( 'NONE', #3479, .T. ) ; +#1363 = CARTESIAN_POINT ( 'NONE', ( -2.680147770384166961E-13, -5.500000000000000000, -53.44976107412088595 ) ) ; +#1364 = ORIENTED_EDGE ( 'NONE', *, *, #6490, .T. ) ; +#1365 = ORIENTED_EDGE ( 'NONE', *, *, #6091, .T. ) ; +#1366 = EDGE_CURVE ( 'NONE', #1088, #829, #6905, .T. ) ; +#1367 = PLANE ( 'NONE', #1928 ) ; +#1368 = AXIS2_PLACEMENT_3D ( 'NONE', #5285, #5814, #624 ) ; +#1369 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, 0.000000000000000000 ) ) ; +#1370 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1371 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ; +#1372 = ORIENTED_EDGE ( 'NONE', *, *, #1791, .T. ) ; +#1373 = ORIENTED_EDGE ( 'NONE', *, *, #3743, .T. ) ; +#1374 = CYLINDRICAL_SURFACE ( 'NONE', #3262, 0.6000000000000033085 ) ; +#1375 = VECTOR ( 'NONE', #604, 1000.000000000000000 ) ; +#1376 = ORIENTED_EDGE ( 'NONE', *, *, #4267, .F. ) ; +#1377 = EDGE_CURVE ( 'NONE', #2541, #429, #6095, .T. ) ; +#1378 = FACE_OUTER_BOUND ( 'NONE', #4172, .T. ) ; +#1379 = VECTOR ( 'NONE', #3936, 1000.000000000000000 ) ; +#1380 = VERTEX_POINT ( 'NONE', #3135 ) ; +#1381 = CARTESIAN_POINT ( 'NONE', ( -24.28180162019543786, -2.200000000000000622, -60.50000000000001421 ) ) ; +#1382 = ORIENTED_EDGE ( 'NONE', *, *, #6212, .F. ) ; +#1383 = APPROVAL_DATE_TIME ( #3610, #1546 ) ; +#1384 = CARTESIAN_POINT ( 'NONE', ( -36.30999999999903594, -2.200000000000000622, -56.49999999999972289 ) ) ; +#1385 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245065661, -1.000000000000000000, 51.73725382063078371 ) ) ; +#1386 = AXIS2_PLACEMENT_3D ( 'NONE', #6106, #3417, #5591 ) ; +#1387 = FACE_OUTER_BOUND ( 'NONE', #6255, .T. ) ; +#1388 = CC_DESIGN_APPROVAL ( #1546, ( #373 ) ) ; +#1389 = CYLINDRICAL_SURFACE ( 'NONE', #3561, 1.500000000000001332 ) ; +#1390 = ORIENTED_EDGE ( 'NONE', *, *, #3229, .F. ) ; +#1391 = CARTESIAN_POINT ( 'NONE', ( -40.74772366876740648, -6.700000000000000178, -10.38390657767414282 ) ) ; +#1392 = VERTEX_POINT ( 'NONE', #2578 ) ; +#1393 = ORIENTED_EDGE ( 'NONE', *, *, #4276, .F. ) ; +#1394 = ORIENTED_EDGE ( 'NONE', *, *, #4487, .T. ) ; +#1395 = CARTESIAN_POINT ( 'NONE', ( 52.69999999572387139, -8.000000000000000000, -63.49999999999969447 ) ) ; +#1396 = CARTESIAN_POINT ( 'NONE', ( -53.45932926627325799, -6.700000000000000178, 17.27281431614946428 ) ) ; +#1397 = EDGE_CURVE ( 'NONE', #1760, #2161, #802, .T. ) ; +#1398 = CYLINDRICAL_SURFACE ( 'NONE', #4135, 1.500000000000001332 ) ; +#1399 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000026290, -8.000000000000000000, -33.49999999999970868 ) ) ; +#1400 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1401 = ORIENTED_EDGE ( 'NONE', *, *, #1377, .T. ) ; +#1402 = EDGE_LOOP ( 'NONE', ( #3518, #5307, #1630, #194 ) ) ; +#1403 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000026290, -8.000000000000000000, -5.551115123125782702E-14 ) ) ; +#1404 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, 0.000000000000000000, 20.83027221244568850 ) ) ; +#1405 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.800000000000000488, 25.96370172317529423 ) ) ; +#1406 = AXIS2_PLACEMENT_3D ( 'NONE', #2126, #4765, #6988 ) ; +#1407 = VERTEX_POINT ( 'NONE', #2012 ) ; +#1408 = ORIENTED_EDGE ( 'NONE', *, *, #3714, .T. ) ; +#1409 = CARTESIAN_POINT ( 'NONE', ( 5.799999999999728928, -5.500000000000000000, -57.00000000000000000 ) ) ; +#1410 = AXIS2_PLACEMENT_3D ( 'NONE', #1667, #6306, #6809 ) ; +#1411 = VERTEX_POINT ( 'NONE', #923 ) ; +#1412 = AXIS2_PLACEMENT_3D ( 'NONE', #1834, #2472, #2898 ) ; +#1413 = ADVANCED_FACE ( 'NONE', ( #4748 ), #2609, .F. ) ; +#1414 = FACE_BOUND ( 'NONE', #3373, .T. ) ; +#1415 = VERTEX_POINT ( 'NONE', #4719 ) ; +#1416 = ADVANCED_FACE ( 'NONE', ( #2077 ), #4178, .F. ) ; +#1417 = CIRCLE ( 'NONE', #6497, 0.6000000000000033085 ) ; +#1418 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1419 = ORIENTED_EDGE ( 'NONE', *, *, #2448, .F. ) ; +#1420 = CALENDAR_DATE ( 2026, 29, 9 ) ; +#1421 = EDGE_CURVE ( 'NONE', #4115, #3009, #3169, .T. ) ; +#1422 = AXIS2_PLACEMENT_3D ( 'NONE', #5789, #3685, #3550 ) ; +#1423 = EDGE_CURVE ( 'NONE', #1669, #5344, #5277, .T. ) ; +#1424 = PLANE ( 'NONE', #5658 ) ; +#1425 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#1426 = AXIS2_PLACEMENT_3D ( 'NONE', #5612, #6165, #872 ) ; +#1427 = VECTOR ( 'NONE', #6648, 1000.000000000000000 ) ; +#1428 = DIRECTION ( 'NONE', ( -7.709882115452076833E-16, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1429 = CIRCLE ( 'NONE', #4713, 40.55000000000109139 ) ; +#1430 = VECTOR ( 'NONE', #5904, 1000.000000000000000 ) ; +#1431 = FACE_OUTER_BOUND ( 'NONE', #5527, .T. ) ; +#1432 = ORIENTED_EDGE ( 'NONE', *, *, #2251, .F. ) ; +#1433 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -6.700000000000000178, 0.000000000000000000 ) ) ; +#1434 = ORIENTED_EDGE ( 'NONE', *, *, #3570, .T. ) ; +#1435 = ORIENTED_EDGE ( 'NONE', *, *, #5012, .T. ) ; +#1436 = FACE_BOUND ( 'NONE', #5512, .T. ) ; +#1437 = FACE_OUTER_BOUND ( 'NONE', #4158, .T. ) ; +#1438 = DIRECTION ( 'NONE', ( -0.3826834323650867842, 0.000000000000000000, -0.9238795325112879597 ) ) ; +#1439 = VECTOR ( 'NONE', #290, 1000.000000000000000 ) ; +#1440 = ADVANCED_FACE ( 'NONE', ( #5346 ), #2680, .F. ) ; +#1441 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1442 = LINE ( 'NONE', #4664, #3558 ) ; +#1443 = ORIENTED_EDGE ( 'NONE', *, *, #5401, .T. ) ; +#1444 = AXIS2_PLACEMENT_3D ( 'NONE', #3314, #91, #5066 ) ; +#1445 = EDGE_LOOP ( 'NONE', ( #3418, #3339, #806, #2254 ) ) ; +#1446 = CARTESIAN_POINT ( 'NONE', ( -48.50000000000026290, -8.000000000000000000, 47.49999999999972289 ) ) ; +#1447 = DIRECTION ( 'NONE', ( 0.3826834323650942227, 0.000000000000000000, -0.9238795325112848511 ) ) ; +#1448 = EDGE_CURVE ( 'NONE', #5737, #6399, #1522, .T. ) ; +#1449 = CARTESIAN_POINT ( 'NONE', ( 31.73239677215937249, -2.200000000000000622, 13.14398910962637856 ) ) ; +#1450 = VECTOR ( 'NONE', #83, 1000.000000000000000 ) ; +#1451 = EDGE_LOOP ( 'NONE', ( #837, #909 ) ) ; +#1452 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1453 = VERTEX_POINT ( 'NONE', #444 ) ; +#1454 = AXIS2_PLACEMENT_3D ( 'NONE', #654, #7002, #3814 ) ; +#1455 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1456 = ORIENTED_EDGE ( 'NONE', *, *, #3799, .F. ) ; +#1457 = EDGE_CURVE ( 'NONE', #2516, #2630, #5777, .T. ) ; +#1458 = AXIS2_PLACEMENT_3D ( 'NONE', #1577, #1046, #71 ) ; +#1459 = LINE ( 'NONE', #2544, #1133 ) ; +#1460 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1461 = CYLINDRICAL_SURFACE ( 'NONE', #5021, 0.6000000000000033085 ) ; +#1462 = ADVANCED_FACE ( 'NONE', ( #4822 ), #3708, .F. ) ; +#1463 = CARTESIAN_POINT ( 'NONE', ( -39.95819837980435096, -8.000000000000000000, -60.50000000000001421 ) ) ; +#1464 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1465 = ORIENTED_EDGE ( 'NONE', *, *, #3110, .F. ) ; +#1466 = ORIENTED_EDGE ( 'NONE', *, *, #1629, .T. ) ; +#1467 = FACE_OUTER_BOUND ( 'NONE', #5328, .T. ) ; +#1468 = CARTESIAN_POINT ( 'NONE', ( 41.45819837980317146, -6.700000000000000178, -46.10008445871670091 ) ) ; +#1469 = CARTESIAN_POINT ( 'NONE', ( -2.680147770384166961E-13, -5.500000000000000000, -51.94976107412088595 ) ) ; +#1470 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, -1.000000000000000000, -20.33027221245304617 ) ) ; +#1471 = EDGE_CURVE ( 'NONE', #82, #1717, #2147, .T. ) ; +#1472 = CIRCLE ( 'NONE', #5976, 1.000000000000000888 ) ; +#1473 = DIRECTION ( 'NONE', ( 0.3826834323650868397, 0.000000000000000000, 0.9238795325112879597 ) ) ; +#1474 = ORIENTED_EDGE ( 'NONE', *, *, #6108, .F. ) ; +#1475 = EDGE_LOOP ( 'NONE', ( #1211, #4852, #6685, #1253, #3768, #750, #2074, #4537 ) ) ; +#1476 = FACE_OUTER_BOUND ( 'NONE', #5603, .T. ) ; +#1477 = LINE ( 'NONE', #6787, #4865 ) ; +#1478 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.200000000000000622, 0.000000000000000000 ) ) ; +#1479 = VECTOR ( 'NONE', #1447, 1000.000000000000000 ) ; +#1480 = AXIS2_PLACEMENT_3D ( 'NONE', #2164, #4336, #6487 ) ; +#1481 = ORIENTED_EDGE ( 'NONE', *, *, #1124, .T. ) ; +#1482 = LINE ( 'NONE', #4173, #3371 ) ; +#1483 = VERTEX_POINT ( 'NONE', #1056 ) ; +#1484 = EDGE_CURVE ( 'NONE', #6169, #1226, #5778, .T. ) ; +#1485 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1486 = CONICAL_SURFACE ( 'NONE', #6227, 1.099999999999989875, 0.7853981633974267407 ) ; +#1487 = ORIENTED_EDGE ( 'NONE', *, *, #4951, .F. ) ; +#1488 = CARTESIAN_POINT ( 'NONE', ( -1.722075445643978409, -5.899999999999999467, -4.157457896303463407 ) ) ; +#1489 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, 0.000000000000000000 ) ) ; +#1490 = CIRCLE ( 'NONE', #5444, 1.500000000000001332 ) ; +#1491 = EDGE_CURVE ( 'NONE', #3519, #3536, #1459, .T. ) ; +#1492 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1493 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, 0.000000000000000000 ) ) ; +#1494 = FACE_OUTER_BOUND ( 'NONE', #5676, .T. ) ; +#1495 = ORIENTED_EDGE ( 'NONE', *, *, #3387, .F. ) ; +#1496 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -6.700000000000000178, -6.000000000000001776 ) ) ; +#1497 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000026290, 0.000000000000000000, -33.49999999999970868 ) ) ; +#1498 = VECTOR ( 'NONE', #3874, 1000.000000000000000 ) ; +#1499 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1500 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1501 = EDGE_CURVE ( 'NONE', #4030, #3343, #2037, .T. ) ; +#1502 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980431544, -8.000000000000000000, -58.50000000000000000 ) ) ; +#1503 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ; +#1504 = ORIENTED_EDGE ( 'NONE', *, *, #6307, .F. ) ; +#1505 = VERTEX_POINT ( 'NONE', #4759 ) ; +#1506 = LOCAL_TIME ( 22, 35, 51.00000000000000000, #922 ) ; +#1507 = CYLINDRICAL_SURFACE ( 'NONE', #4661, 5.025000000000002132 ) ; +#1508 = ADVANCED_FACE ( 'NONE', ( #5847 ), #3113, .F. ) ; +#1509 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1510 = ADVANCED_FACE ( 'NONE', ( #3180 ), #2362, .F. ) ; +#1511 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -2.400000000000000355, 38.23402833653069877 ) ) ; +#1512 = EDGE_CURVE ( 'NONE', #3376, #502, #1688, .T. ) ; +#1513 = VERTEX_POINT ( 'NONE', #3214 ) ; +#1514 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1515 = ORIENTED_EDGE ( 'NONE', *, *, #3110, .T. ) ; +#1516 = EDGE_CURVE ( 'NONE', #4104, #6649, #2246, .T. ) ; +#1517 = DIRECTION ( 'NONE', ( 0.9238795325112836299, -0.000000000000000000, 0.3826834323650974423 ) ) ; +#1518 = ADVANCED_FACE ( 'NONE', ( #1031, #3649 ), #1597, .F. ) ; +#1519 = CIRCLE ( 'NONE', #38, 6.000000000002864375 ) ; +#1520 = ORIENTED_EDGE ( 'NONE', *, *, #5401, .F. ) ; +#1521 = AXIS2_PLACEMENT_3D ( 'NONE', #4126, #295, #1473 ) ; +#1522 = LINE ( 'NONE', #4279, #4974 ) ; +#1523 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1524 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.800000000000000488, -25.96370172317620018 ) ) ; +#1525 = VECTOR ( 'NONE', #3821, 1000.000000000000000 ) ; +#1526 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, 0.000000000000000000, -63.49999999999972289 ) ) ; +#1527 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1528 = ORIENTED_EDGE ( 'NONE', *, *, #5130, .T. ) ; +#1529 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1530 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, 0.000000000000000000, 51.13725382062663272 ) ) ; +#1531 = CONICAL_SURFACE ( 'NONE', #4817, 28.64999999999999147, 0.7494424430768475975 ) ; +#1532 = LINE ( 'NONE', #4761, #522 ) ; +#1533 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1534 = FACE_OUTER_BOUND ( 'NONE', #4874, .T. ) ; +#1535 = AXIS2_PLACEMENT_3D ( 'NONE', #3929, #2822, #2789 ) ; +#1536 = CARTESIAN_POINT ( 'NONE', ( -29.36379310344975480, -6.700000000000000178, -27.96551724137933803 ) ) ; +#1537 = ORIENTED_EDGE ( 'NONE', *, *, #6711, .F. ) ; +#1538 = ORIENTED_EDGE ( 'NONE', *, *, #2181, .F. ) ; +#1539 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -6.700000000000000178, 0.000000000000000000 ) ) ; +#1540 = AXIS2_PLACEMENT_3D ( 'NONE', #6312, #2519, #5787 ) ; +#1541 = CARTESIAN_POINT ( 'NONE', ( -33.45447221780123215, -2.200000000000000622, 8.986531213328042611 ) ) ; +#1542 = EDGE_CURVE ( 'NONE', #6101, #3061, #104, .T. ) ; +#1543 = CYLINDRICAL_SURFACE ( 'NONE', #3131, 4.500000000000232703 ) ; +#1544 = AXIS2_PLACEMENT_3D ( 'NONE', #756, #1702, #2334 ) ; +#1545 = EDGE_CURVE ( 'NONE', #1223, #6756, #5663, .T. ) ; +#1546 = APPROVAL ( #3383, 'δָ¶¨' ) ; +#1547 = ORIENTED_EDGE ( 'NONE', *, *, #5266, .T. ) ; +#1548 = EDGE_LOOP ( 'NONE', ( #6214, #4082, #4548, #1139, #1556, #2241 ) ) ; +#1549 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1550 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1551 = VERTEX_POINT ( 'NONE', #4252 ) ; +#1552 = CIRCLE ( 'NONE', #5740, 4.500000000000013323 ) ; +#1553 = FACE_OUTER_BOUND ( 'NONE', #5148, .T. ) ; +#1554 = EDGE_CURVE ( 'NONE', #5476, #2970, #2023, .T. ) ; +#1555 = ORIENTED_EDGE ( 'NONE', *, *, #826, .F. ) ; +#1556 = ORIENTED_EDGE ( 'NONE', *, *, #158, .F. ) ; +#1557 = CYLINDRICAL_SURFACE ( 'NONE', #914, 6.000000000000001776 ) ; +#1558 = LINE ( 'NONE', #2112, #1869 ) ; +#1559 = ADVANCED_FACE ( 'NONE', ( #4944 ), #6339, .F. ) ; +#1560 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1561 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1562 = VECTOR ( 'NONE', #1145, 1000.000000000000227 ) ; +#1563 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1564 = VERTEX_POINT ( 'NONE', #2121 ) ; +#1565 = VECTOR ( 'NONE', #6710, 1000.000000000000000 ) ; +#1566 = DIRECTION ( 'NONE', ( 0.7071067811865439090, 0.000000000000000000, -0.7071067811865512365 ) ) ; +#1567 = PLANE ( 'NONE', #1706 ) ; +#1568 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, -1.000000000000000000, 50.63725382063018543 ) ) ; +#1569 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1570 = FACE_BOUND ( 'NONE', #1242, .T. ) ; +#1571 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1572 = ORIENTED_EDGE ( 'NONE', *, *, #1796, .F. ) ; +#1573 = EDGE_LOOP ( 'NONE', ( #74, #816, #4095, #1218 ) ) ; +#1574 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -25.30000000000000071 ) ) ; +#1575 = FACE_BOUND ( 'NONE', #3761, .T. ) ; +#1576 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.800000000000000488, 22.96370172317529068 ) ) ; +#1577 = CARTESIAN_POINT ( 'NONE', ( -13.14398910962626843, -2.200000000000000622, 31.73239677215942223 ) ) ; +#1578 = CIRCLE ( 'NONE', #5086, 1.500000000000001332 ) ; +#1579 = EDGE_CURVE ( 'NONE', #3671, #4166, #445, .T. ) ; +#1580 = ORIENTED_EDGE ( 'NONE', *, *, #2351, .T. ) ; +#1581 = ORIENTED_EDGE ( 'NONE', *, *, #5087, .T. ) ; +#1582 = LINE ( 'NONE', #4406, #1498 ) ; +#1583 = CONICAL_SURFACE ( 'NONE', #2704, 1.100000000000017630, 0.7853981633974739252 ) ; +#1584 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, -1.000000000000000000, -51.73725382063397404 ) ) ; +#1585 = ORIENTED_EDGE ( 'NONE', *, *, #4267, .T. ) ; +#1586 = AXIS2_PLACEMENT_3D ( 'NONE', #5001, #2798, #4684 ) ; +#1587 = VERTEX_POINT ( 'NONE', #4829 ) ; +#1588 = VERTEX_POINT ( 'NONE', #2052 ) ; +#1589 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ; +#1590 = FACE_OUTER_BOUND ( 'NONE', #3440, .T. ) ; +#1591 = EDGE_CURVE ( 'NONE', #787, #6640, #4521, .T. ) ; +#1592 = DIRECTION ( 'NONE', ( -0.3826834323650869507, 0.000000000000000000, -0.9238795325112878487 ) ) ; +#1593 = AXIS2_PLACEMENT_3D ( 'NONE', #9, #2168, #4483 ) ; +#1594 = CYLINDRICAL_SURFACE ( 'NONE', #4705, 1.000000000000000888 ) ; +#1595 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1596 = VERTEX_POINT ( 'NONE', #3142 ) ; +#1597 = PLANE ( 'NONE', #3158 ) ; +#1598 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -5.500000000000000000, 6.000000000000001776 ) ) ; +#1599 = CARTESIAN_POINT ( 'NONE', ( 36.15552248038325445, -5.899999999999999467, 21.47046096781793167 ) ) ; +#1600 = AXIS2_PLACEMENT_3D ( 'NONE', #2796, #6054, #3431 ) ; +#1601 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000027711, 0.000000000000000000, -52.69999999572329585 ) ) ; +#1602 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1603 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1604 = AXIS2_PLACEMENT_3D ( 'NONE', #565, #4893, #4952 ) ; +#1605 = ORIENTED_EDGE ( 'NONE', *, *, #5561, .F. ) ; +#1606 = VERTEX_POINT ( 'NONE', #1496 ) ; +#1607 = EDGE_CURVE ( 'NONE', #1613, #2777, #783, .T. ) ; +#1608 = CARTESIAN_POINT ( 'NONE', ( 41.45819837980317146, -8.000000000000000000, -46.10008445871670091 ) ) ; +#1609 = CARTESIAN_POINT ( 'NONE', ( -22.78180162019543786, -2.200000000000000622, -58.50000000000000000 ) ) ; +#1610 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, 0.000000000000000000, -22.03027221245303480 ) ) ; +#1611 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1612 = CIRCLE ( 'NONE', #6117, 4.500000000000003553 ) ; +#1613 = VERTEX_POINT ( 'NONE', #6033 ) ; +#1614 = ORIENTED_EDGE ( 'NONE', *, *, #5696, .F. ) ; +#1615 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, -0.4999999999999886202, 21.43027221244568992 ) ) ; +#1616 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1617 = PLANE ( 'NONE', #2907 ) ; +#1618 = ORIENTED_EDGE ( 'NONE', *, *, #6037, .F. ) ; +#1619 = EDGE_LOOP ( 'NONE', ( #2302, #1161 ) ) ; +#1620 = EDGE_LOOP ( 'NONE', ( #4845, #1401 ) ) ; +#1621 = CARTESIAN_POINT ( 'NONE', ( -40.74772366876740648, -5.899999999999999467, -10.38390657767414282 ) ) ; +#1622 = EDGE_CURVE ( 'NONE', #5644, #6511, #3144, .T. ) ; +#1623 = CARTESIAN_POINT ( 'NONE', ( 30.45000000000150564, -5.899999999999999467, -29.00000000000000000 ) ) ; +#1624 = EDGE_CURVE ( 'NONE', #5688, #2506, #1578, .T. ) ; +#1625 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -5.500000000000000000, -6.000000000000001776 ) ) ; +#1626 = EDGE_CURVE ( 'NONE', #4166, #6471, #5529, .T. ) ; +#1627 = AXIS2_PLACEMENT_3D ( 'NONE', #5456, #2328, #5525 ) ; +#1628 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1629 = EDGE_CURVE ( 'NONE', #82, #6623, #1862, .T. ) ; +#1630 = ORIENTED_EDGE ( 'NONE', *, *, #6114, .T. ) ; +#1631 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1632 = LINE ( 'NONE', #6914, #755 ) ; +#1633 = VECTOR ( 'NONE', #1464, 1000.000000000000000 ) ; +#1634 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, -1.000000000000000000, -21.43027221244439673 ) ) ; +#1635 = CIRCLE ( 'NONE', #4130, 4.500000000000010658 ) ; +#1636 = PLANE ( 'NONE', #621 ) ; +#1637 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1638 = ORIENTED_EDGE ( 'NONE', *, *, #663, .F. ) ; +#1639 = AXIS2_PLACEMENT_3D ( 'NONE', #2221, #6550, #5492 ) ; +#1640 = ORIENTED_EDGE ( 'NONE', *, *, #600, .F. ) ; +#1641 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -2.400000000000000355, 1.500000000000004219 ) ) ; +#1642 = AXIS2_PLACEMENT_3D ( 'NONE', #5836, #6933, #3639 ) ; +#1643 = CARTESIAN_POINT ( 'NONE', ( -52.50000000000027001, -3.000000000000000000, -49.52499999999971436 ) ) ; +#1644 = CARTESIAN_POINT ( 'NONE', ( -52.69999999572387139, -8.000000000000000000, 63.49999999999969447 ) ) ; +#1645 = CIRCLE ( 'NONE', #5599, 1.500000000000001332 ) ; +#1646 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1647 = EDGE_CURVE ( 'NONE', #5397, #4003, #4639, .T. ) ; +#1648 = CIRCLE ( 'NONE', #6499, 0.6000000000000033085 ) ; +#1649 = CIRCLE ( 'NONE', #3448, 6.000000000000001776 ) ; +#1650 = VECTOR ( 'NONE', #953, 1000.000000000000000 ) ; +#1651 = ORIENTED_EDGE ( 'NONE', *, *, #6793, .T. ) ; +#1652 = CARTESIAN_POINT ( 'NONE', ( -30.01032132651300799, -5.899999999999999467, -17.30144700593542595 ) ) ; +#1653 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1654 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1655 = CIRCLE ( 'NONE', #976, 60.49999999999994316 ) ; +#1656 = ORIENTED_EDGE ( 'NONE', *, *, #3171, .T. ) ; +#1657 = ORIENTED_EDGE ( 'NONE', *, *, #691, .F. ) ; +#1658 = ORIENTED_EDGE ( 'NONE', *, *, #4453, .F. ) ; +#1659 = CARTESIAN_POINT ( 'NONE', ( -21.43027221245029068, -2.200000000000000622, -51.73725382063096134 ) ) ; +#1660 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063086897, -1.000000000000000000, 21.43027221245048253 ) ) ; +#1661 = ADVANCED_FACE ( 'NONE', ( #1752 ), #2347, .F. ) ; +#1662 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1663 = ORIENTED_EDGE ( 'NONE', *, *, #72, .T. ) ; +#1664 = CARTESIAN_POINT ( 'NONE', ( 50.01517837498774810, -2.200000000000000622, -25.58773010875176013 ) ) ; +#1665 = LINE ( 'NONE', #4254, #982 ) ; +#1666 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1667 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, -1.000000000000000000, -21.43027221245303338 ) ) ; +#1668 = FACE_OUTER_BOUND ( 'NONE', #3597, .T. ) ; +#1669 = VERTEX_POINT ( 'NONE', #5547 ) ; +#1670 = EDGE_LOOP ( 'NONE', ( #2146, #3823, #1435, #1993 ) ) ; +#1671 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -5.899999999999999467, 25.96370172317529423 ) ) ; +#1672 = CARTESIAN_POINT ( 'NONE', ( 1.722075445645174341, -2.200000000000000622, 4.157457896306349987 ) ) ; +#1673 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -6.700000000000000178, 0.000000000000000000 ) ) ; +#1674 = FACE_OUTER_BOUND ( 'NONE', #5912, .T. ) ; +#1675 = ADVANCED_FACE ( 'NONE', ( #117 ), #3454, .F. ) ; +#1676 = CARTESIAN_POINT ( 'NONE', ( 13.14398910963723033, -2.200000000000000622, 27.23239677215464383 ) ) ; +#1677 = VERTEX_POINT ( 'NONE', #5626 ) ; +#1678 = LINE ( 'NONE', #3161, #4780 ) ; +#1679 = FACE_OUTER_BOUND ( 'NONE', #6998, .T. ) ; +#1680 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063502565, -2.200000000000000622, -21.43027221244042124 ) ) ; +#1681 = VECTOR ( 'NONE', #4564, 1000.000000000000000 ) ; +#1682 = AXIS2_PLACEMENT_3D ( 'NONE', #5655, #688, #1713 ) ; +#1683 = VERTEX_POINT ( 'NONE', #4528 ) ; +#1684 = EDGE_LOOP ( 'NONE', ( #4447, #1740, #1656, #1790 ) ) ; +#1685 = EDGE_CURVE ( 'NONE', #6101, #6756, #6641, .T. ) ; +#1686 = ORIENTED_EDGE ( 'NONE', *, *, #805, .F. ) ; +#1687 = LINE ( 'NONE', #5971, #1450 ) ; +#1688 = CIRCLE ( 'NONE', #5324, 5.999999999999998224 ) ; +#1689 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1690 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1691 = ORIENTED_EDGE ( 'NONE', *, *, #3090, .T. ) ; +#1692 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1693 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1694 = LINE ( 'NONE', #3184, #5028 ) ; +#1695 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1696 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, -0.4999999999999886202, 20.83027221243706251 ) ) ; +#1697 = EDGE_LOOP ( 'NONE', ( #3402, #2479, #5318, #3605, #6500, #5813 ) ) ; +#1698 = ORIENTED_EDGE ( 'NONE', *, *, #1037, .F. ) ; +#1699 = EDGE_LOOP ( 'NONE', ( #5247, #3231, #119, #6723 ) ) ; +#1700 = VECTOR ( 'NONE', #5765, 1000.000000000000000 ) ; +#1701 = DIRECTION ( 'NONE', ( -0.3826834323650942227, 0.000000000000000000, 0.9238795325112848511 ) ) ; +#1702 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1703 = CARTESIAN_POINT ( 'NONE', ( -28.93000000000074579, -1.800000000000000711, -55.49999999999972289 ) ) ; +#1704 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1705 = ADVANCED_FACE ( 'NONE', ( #6100 ), #3986, .F. ) ; +#1706 = AXIS2_PLACEMENT_3D ( 'NONE', #2617, #3143, #3790 ) ; +#1707 = PLANE ( 'NONE', #6857 ) ; +#1708 = ADVANCED_FACE ( 'NONE', ( #2885 ), #1374, .F. ) ; +#1709 = EDGE_LOOP ( 'NONE', ( #3395, #1234, #3006, #284 ) ) ; +#1710 = EDGE_CURVE ( 'NONE', #4937, #938, #1011, .T. ) ; +#1711 = CARTESIAN_POINT ( 'NONE', ( -39.95819837980435096, -2.200000000000000622, -60.50000000000001421 ) ) ; +#1712 = ADVANCED_FACE ( 'NONE', ( #5015 ), #1261, .F. ) ; +#1713 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1714 = CIRCLE ( 'NONE', #822, 4.500000000000010658 ) ; +#1715 = FACE_OUTER_BOUND ( 'NONE', #3411, .T. ) ; +#1716 = ORIENTED_EDGE ( 'NONE', *, *, #6519, .T. ) ; +#1717 = VERTEX_POINT ( 'NONE', #729 ) ; +#1718 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1719 = ORIENTED_EDGE ( 'NONE', *, *, #2976, .T. ) ; +#1720 = CARTESIAN_POINT ( 'NONE', ( -10.38390657767399894, -5.899999999999999467, 39.24772366876744201 ) ) ; +#1721 = EDGE_CURVE ( 'NONE', #3547, #5407, #2586, .T. ) ; +#1722 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063086897, -6.700000000000000178, 21.43027221245048253 ) ) ; +#1723 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000026290, -8.000000000000000000, 33.49999999999970868 ) ) ; +#1724 = ORIENTED_EDGE ( 'NONE', *, *, #6129, .T. ) ; +#1725 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000026290, -8.000000000000000000, -33.49999999999970868 ) ) ; +#1726 = FACE_OUTER_BOUND ( 'NONE', #4529, .T. ) ; +#1727 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.800000000000000488, -24.46370172317620018 ) ) ; +#1728 = DIRECTION ( 'NONE', ( 0.7071067811865441310, 0.000000000000000000, -0.7071067811865510144 ) ) ; +#1729 = ORIENTED_EDGE ( 'NONE', *, *, #620, .T. ) ; +#1730 = ORIENTED_EDGE ( 'NONE', *, *, #6197, .T. ) ; +#1731 = VERTEX_POINT ( 'NONE', #3375 ) ; +#1732 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000026290, 0.000000000000000000, 33.49999999999970868 ) ) ; +#1733 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1734 = CARTESIAN_POINT ( 'NONE', ( -41.45819837980560862, -6.700000000000000178, -46.10008445871534377 ) ) ; +#1735 = VECTOR ( 'NONE', #4836, 1000.000000000000000 ) ; +#1736 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1737 = AXIS2_PLACEMENT_3D ( 'NONE', #3894, #1766, #3253 ) ; +#1738 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1739 = CIRCLE ( 'NONE', #2080, 0.6000000000000033085 ) ; +#1740 = ORIENTED_EDGE ( 'NONE', *, *, #1626, .T. ) ; +#1741 = ORIENTED_EDGE ( 'NONE', *, *, #1875, .F. ) ; +#1742 = EDGE_CURVE ( 'NONE', #3529, #3367, #6898, .T. ) ; +#1743 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -2.200000000000000622, -30.50000000000000355 ) ) ; +#1744 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1745 = VECTOR ( 'NONE', #3353, 1000.000000000000000 ) ; +#1746 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1747 = VECTOR ( 'NONE', #344, 1000.000000000000000 ) ; +#1748 = EDGE_CURVE ( 'NONE', #1415, #1088, #1472, .T. ) ; +#1749 = CIRCLE ( 'NONE', #2656, 40.55000000000109139 ) ; +#1750 = ORIENTED_EDGE ( 'NONE', *, *, #6948, .T. ) ; +#1751 = VERTEX_POINT ( 'NONE', #6177 ) ; +#1752 = FACE_OUTER_BOUND ( 'NONE', #4911, .T. ) ; +#1753 = ORIENTED_EDGE ( 'NONE', *, *, #6695, .T. ) ; +#1754 = VECTOR ( 'NONE', #3433, 1000.000000000000000 ) ; +#1755 = CYLINDRICAL_SURFACE ( 'NONE', #5382, 1.500000000000001332 ) ; +#1756 = EDGE_CURVE ( 'NONE', #2757, #4185, #4961, .T. ) ; +#1757 = PLANE ( 'NONE', #6386 ) ; +#1758 = AXIS2_PLACEMENT_3D ( 'NONE', #5779, #3464, #1907 ) ; +#1759 = LINE ( 'NONE', #5553, #1151 ) ; +#1760 = VERTEX_POINT ( 'NONE', #6605 ) ; +#1761 = EDGE_CURVE ( 'NONE', #6126, #4527, #6896, .T. ) ; +#1762 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1763 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, -1.000000000000000000 ) ) ; +#1764 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 4, + ( #6957, #1644, #607, #5433, #1117 ), + .UNSPECIFIED., .F., .F., + ( 5, 5 ), + ( 0.000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#1765 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1766 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1767 = ORIENTED_EDGE ( 'NONE', *, *, #5053, .T. ) ; +#1768 = EDGE_LOOP ( 'NONE', ( #2784, #3168 ) ) ; +#1769 = VERTEX_POINT ( 'NONE', #226 ) ; +#1770 = VERTEX_POINT ( 'NONE', #2420 ) ; +#1771 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, 0.000000000000000000, 63.49999999999972289 ) ) ; +#1772 = CARTESIAN_POINT ( 'NONE', ( -30.45000000000150564, -5.899999999999999467, -29.00000000000000000 ) ) ; +#1773 = ADVANCED_FACE ( 'NONE', ( #4604 ), #4067, .F. ) ; +#1774 = CYLINDRICAL_SURFACE ( 'NONE', #6387, 1.500000000002881029 ) ; +#1775 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1776 = ORIENTED_EDGE ( 'NONE', *, *, #3171, .F. ) ; +#1777 = ORIENTED_EDGE ( 'NONE', *, *, #2756, .F. ) ; +#1778 = FACE_BOUND ( 'NONE', #3480, .T. ) ; +#1779 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1780 = LINE ( 'NONE', #2307, #6179 ) ; +#1781 = ADVANCED_FACE ( 'NONE', ( #306 ), #3637, .F. ) ; +#1782 = ORIENTED_EDGE ( 'NONE', *, *, #2888, .T. ) ; +#1783 = ORIENTED_EDGE ( 'NONE', *, *, #1154, .T. ) ; +#1784 = DIRECTION ( 'NONE', ( 0.7071067811865490160, 0.000000000000000000, 0.7071067811865460184 ) ) ; +#1785 = ORIENTED_EDGE ( 'NONE', *, *, #4809, .T. ) ; +#1786 = LINE ( 'NONE', #3377, #2657 ) ; +#1787 = EDGE_CURVE ( 'NONE', #5605, #827, #6539, .T. ) ; +#1788 = AXIS2_PLACEMENT_3D ( 'NONE', #4028, #6678, #2810 ) ; +#1789 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ; +#1790 = ORIENTED_EDGE ( 'NONE', *, *, #3021, .T. ) ; +#1791 = EDGE_CURVE ( 'NONE', #2995, #3311, #2499, .T. ) ; +#1792 = CYLINDRICAL_SURFACE ( 'NONE', #1386, 1.500000000000084599 ) ; +#1793 = VERTEX_POINT ( 'NONE', #2071 ) ; +#1794 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .AHEAD. ) ; +#1795 = EDGE_CURVE ( 'NONE', #4647, #6737, #980, .T. ) ; +#1796 = EDGE_CURVE ( 'NONE', #1415, #5714, #1482, .T. ) ; +#1797 = CIRCLE ( 'NONE', #1015, 0.6000000000000033085 ) ; +#1798 = CYLINDRICAL_SURFACE ( 'NONE', #297, 0.5999999999999998668 ) ; +#1799 = CARTESIAN_POINT ( 'NONE', ( 29.36379310344975480, -5.899999999999999467, -27.96551724137933803 ) ) ; +#1800 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ; +#1801 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -5.500000000000000000, 36.73402833653069166 ) ) ; +#1802 = ORIENTED_EDGE ( 'NONE', *, *, #1144, .T. ) ; +#1803 = ORIENTED_EDGE ( 'NONE', *, *, #4402, .T. ) ; +#1804 = ORIENTED_EDGE ( 'NONE', *, *, #3057, .T. ) ; +#1805 = ORIENTED_EDGE ( 'NONE', *, *, #2483, .T. ) ; +#1806 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1807 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1808 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1809 = CARTESIAN_POINT ( 'NONE', ( -56.17257376090169174, 0.000000000000000000, 56.17257376090111620 ) ) ; +#1810 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, 0.000000000000000000, 21.43027221243706038 ) ) ; +#1811 = EDGE_CURVE ( 'NONE', #726, #6291, #5304, .T. ) ; +#1812 = CIRCLE ( 'NONE', #113, 1.500000000000001332 ) ; +#1813 = ORIENTED_EDGE ( 'NONE', *, *, #2114, .F. ) ; +#1814 = EDGE_LOOP ( 'NONE', ( #4204, #23 ) ) ; +#1815 = FACE_OUTER_BOUND ( 'NONE', #4700, .T. ) ; +#1816 = CYLINDRICAL_SURFACE ( 'NONE', #1236, 4.500000000000232703 ) ; +#1817 = CARTESIAN_POINT ( 'NONE', ( -10.38390657767399894, -5.899999999999999467, 40.74772366876744201 ) ) ; +#1818 = CIRCLE ( 'NONE', #3172, 1.500000000000001332 ) ; +#1819 = EDGE_LOOP ( 'NONE', ( #4118, #5183, #400, #3159 ) ) ; +#1820 = ORIENTED_EDGE ( 'NONE', *, *, #2141, .F. ) ; +#1821 = CIRCLE ( 'NONE', #2166, 1.500000000000001332 ) ; +#1822 = ORIENTED_EDGE ( 'NONE', *, *, #6077, .T. ) ; +#1823 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1824 = ORIENTED_EDGE ( 'NONE', *, *, #5905, .T. ) ; +#1825 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#1826 = CARTESIAN_POINT ( 'NONE', ( -29.36379310344975480, -5.899999999999999467, -27.96551724137933803 ) ) ; +#1827 = ORIENTED_EDGE ( 'NONE', *, *, #1607, .F. ) ; +#1828 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000027711, 0.000000000000000000, 52.69999999572329585 ) ) ; +#1829 = ORIENTED_EDGE ( 'NONE', *, *, #4460, .F. ) ; +#1830 = EDGE_CURVE ( 'NONE', #1717, #5160, #3491, .T. ) ; +#1831 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1832 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1833 = EDGE_CURVE ( 'NONE', #675, #2440, #6660, .T. ) ; +#1834 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063071265, -1.000000000000000000, -21.43027221245083425 ) ) ; +#1835 = EDGE_CURVE ( 'NONE', #4799, #2005, #5422, .T. ) ; +#1836 = EDGE_CURVE ( 'NONE', #4331, #1959, #434, .T. ) ; +#1837 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1838 = ORIENTED_EDGE ( 'NONE', *, *, #987, .T. ) ; +#1839 = LINE ( 'NONE', #4002, #2980 ) ; +#1840 = ORIENTED_EDGE ( 'NONE', *, *, #5572, .T. ) ; +#1841 = VERTEX_POINT ( 'NONE', #2568 ) ; +#1842 = VERTEX_POINT ( 'NONE', #4711 ) ; +#1843 = CARTESIAN_POINT ( 'NONE', ( -27.93000000000074579, -2.109999999999944365, -55.49999999999972289 ) ) ; +#1844 = LINE ( 'NONE', #4511, #6168 ) ; +#1845 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1846 = FACE_OUTER_BOUND ( 'NONE', #4272, .T. ) ; +#1847 = CARTESIAN_POINT ( 'NONE', ( -4.157457896303456302, -6.700000000000000178, 1.722075445643992841 ) ) ; +#1848 = EDGE_LOOP ( 'NONE', ( #6043, #2637, #5305, #3403 ) ) ; +#1849 = CIRCLE ( 'NONE', #492, 40.55000000000109139 ) ; +#1850 = ORIENTED_EDGE ( 'NONE', *, *, #1258, .F. ) ; +#1851 = CARTESIAN_POINT ( 'NONE', ( 4.157457896306330447, -2.200000000000000622, 1.722075445645222525 ) ) ; +#1852 = AXIS2_PLACEMENT_3D ( 'NONE', #4165, #6280, #1327 ) ; +#1853 = EDGE_CURVE ( 'NONE', #2496, #6308, #3946, .T. ) ; +#1854 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1855 = LINE ( 'NONE', #6173, #2460 ) ; +#1856 = VECTOR ( 'NONE', #283, 1000.000000000000000 ) ; +#1857 = CIRCLE ( 'NONE', #495, 4.500000000000010658 ) ; +#1858 = EDGE_CURVE ( 'NONE', #5928, #571, #6324, .T. ) ; +#1859 = ORIENTED_EDGE ( 'NONE', *, *, #560, .F. ) ; +#1860 = ORIENTED_EDGE ( 'NONE', *, *, #810, .F. ) ; +#1861 = CIRCLE ( 'NONE', #47, 0.6000000000000033085 ) ; +#1862 = LINE ( 'NONE', #5661, #4746 ) ; +#1863 = AXIS2_PLACEMENT_3D ( 'NONE', #716, #1287, #5463 ) ; +#1864 = ORIENTED_EDGE ( 'NONE', *, *, #2014, .F. ) ; +#1865 = CIRCLE ( 'NONE', #2304, 1.500000000000001332 ) ; +#1866 = LINE ( 'NONE', #2994, #1427 ) ; +#1867 = ORIENTED_EDGE ( 'NONE', *, *, #4011, .F. ) ; +#1868 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1869 = VECTOR ( 'NONE', #1025, 999.9999999999998863 ) ; +#1870 = EDGE_LOOP ( 'NONE', ( #4621, #6675, #1618, #1052 ) ) ; +#1871 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#1872 = FACE_OUTER_BOUND ( 'NONE', #1344, .T. ) ; +#1873 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1874 = VECTOR ( 'NONE', #5719, 1000.000000000000000 ) ; +#1875 = EDGE_CURVE ( 'NONE', #2145, #6157, #5803, .T. ) ; +#1876 = PLANE ( 'NONE', #3678 ) ; +#1877 = LINE ( 'NONE', #4042, #5472 ) ; +#1878 = ORIENTED_EDGE ( 'NONE', *, *, #6755, .F. ) ; +#1879 = CARTESIAN_POINT ( 'NONE', ( -36.30999999999903594, -1.800000000000000711, -63.43772963087289440 ) ) ; +#1880 = EDGE_LOOP ( 'NONE', ( #3609, #1277, #4196, #6593 ) ) ; +#1881 = ORIENTED_EDGE ( 'NONE', *, *, #2759, .F. ) ; +#1882 = VERTEX_POINT ( 'NONE', #2602 ) ; +#1883 = DIRECTION ( 'NONE', ( -0.3826834323650942227, 0.000000000000000000, 0.9238795325112848511 ) ) ; +#1884 = VECTOR ( 'NONE', #4218, 1000.000000000000000 ) ; +#1885 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, -0.4999999999999886202, 20.83027221244568850 ) ) ; +#1886 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1887 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1888 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1889 = ORIENTED_EDGE ( 'NONE', *, *, #3092, .T. ) ; +#1890 = ORIENTED_EDGE ( 'NONE', *, *, #6307, .T. ) ; +#1891 = DIRECTION ( 'NONE', ( 0.3826834323650942782, 0.000000000000000000, -0.9238795325112848511 ) ) ; +#1892 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1893 = EDGE_CURVE ( 'NONE', #286, #1209, #2462, .T. ) ; +#1894 = CARTESIAN_POINT ( 'NONE', ( -36.72954762892958058, -5.899999999999999467, 20.08464166905316262 ) ) ; +#1895 = AXIS2_PLACEMENT_3D ( 'NONE', #1680, #4409, #6565 ) ; +#1896 = VERTEX_POINT ( 'NONE', #2039 ) ; +#1897 = CIRCLE ( 'NONE', #4628, 40.55000000000109139 ) ; +#1898 = ORIENTED_EDGE ( 'NONE', *, *, #1471, .T. ) ; +#1899 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1900 = ORIENTED_EDGE ( 'NONE', *, *, #3702, .T. ) ; +#1901 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1902 = EDGE_CURVE ( 'NONE', #6291, #3750, #4640, .T. ) ; +#1903 = VERTEX_POINT ( 'NONE', #4202 ) ; +#1904 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, -1.000000000000000000, -21.43027221245303338 ) ) ; +#1905 = ORIENTED_EDGE ( 'NONE', *, *, #2608, .F. ) ; +#1906 = CARTESIAN_POINT ( 'NONE', ( -39.29417823468537563, -5.899999999999999467, -10.01349373899374129 ) ) ; +#1907 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1908 = CARTESIAN_POINT ( 'NONE', ( -40.74772366876678120, -5.899999999999999467, 10.38390657767658531 ) ) ; +#1909 = AXIS2_PLACEMENT_3D ( 'NONE', #1299, #5057, #1784 ) ; +#1910 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#1911 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -5.899999999999999467, -25.96370172317620018 ) ) ; +#1912 = ORIENTED_EDGE ( 'NONE', *, *, #3485, .T. ) ; +#1913 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, -1.000000000000000000, 20.33027221244569915 ) ) ; +#1914 = ORIENTED_EDGE ( 'NONE', *, *, #6954, .F. ) ; +#1915 = ORIENTED_EDGE ( 'NONE', *, *, #1023, .F. ) ; +#1916 = VERTEX_POINT ( 'NONE', #6794 ) ; +#1917 = FACE_OUTER_BOUND ( 'NONE', #5073, .T. ) ; +#1918 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1919 = CARTESIAN_POINT ( 'NONE', ( -34.92266447387282113, -2.200000000000000622, -37.03553390593243222 ) ) ; +#1920 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1921 = CARTESIAN_POINT ( 'NONE', ( 50.01517837498769836, -6.700000000000000178, -25.58773010875173526 ) ) ; +#1922 = ORIENTED_EDGE ( 'NONE', *, *, #2036, .F. ) ; +#1923 = ORIENTED_EDGE ( 'NONE', *, *, #4555, .F. ) ; +#1924 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1925 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -5.500000000000000000, 45.94976107412009725 ) ) ; +#1926 = EDGE_CURVE ( 'NONE', #4709, #124, #4066, .T. ) ; +#1927 = CYLINDRICAL_SURFACE ( 'NONE', #2572, 1.500000000000001332 ) ; +#1928 = AXIS2_PLACEMENT_3D ( 'NONE', #1403, #1997, #3520 ) ; +#1929 = ADVANCED_FACE ( 'NONE', ( #342 ), #5205, .F. ) ; +#1930 = ADVANCED_FACE ( 'NONE', ( #5439 ), #1583, .F. ) ; +#1931 = EDGE_CURVE ( 'NONE', #2489, #6707, #2771, .T. ) ; +#1932 = ORIENTED_EDGE ( 'NONE', *, *, #2535, .F. ) ; +#1933 = EDGE_LOOP ( 'NONE', ( #2257, #6552 ) ) ; +#1934 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1935 = AXIS2_PLACEMENT_3D ( 'NONE', #931, #2554, #962 ) ; +#1936 = ORIENTED_EDGE ( 'NONE', *, *, #691, .T. ) ; +#1937 = FACE_OUTER_BOUND ( 'NONE', #4251, .T. ) ; +#1938 = ORIENTED_EDGE ( 'NONE', *, *, #3939, .T. ) ; +#1939 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063502565, -2.200000000000000622, 21.43027221244042124 ) ) ; +#1940 = EDGE_LOOP ( 'NONE', ( #305, #4313 ) ) ; +#1941 = APPROVAL_ROLE ( '' ) ; +#1942 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -5.500000000000000000, 42.73402833653069166 ) ) ; +#1943 = LINE ( 'NONE', #5312, #3108 ) ; +#1944 = ADVANCED_FACE ( 'NONE', ( #1679 ), #3233, .F. ) ; +#1945 = VECTOR ( 'NONE', #853, 1000.000000000000114 ) ; +#1946 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1947 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1948 = ORIENTED_EDGE ( 'NONE', *, *, #5905, .F. ) ; +#1949 = ADVANCED_FACE ( 'NONE', ( #6531 ), #4906, .F. ) ; +#1950 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1951 = ORIENTED_EDGE ( 'NONE', *, *, #2171, .F. ) ; +#1952 = EDGE_LOOP ( 'NONE', ( #711, #4305 ) ) ; +#1953 = EDGE_LOOP ( 'NONE', ( #2451, #1134, #343, #2458 ) ) ; +#1954 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1955 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1956 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1957 = FACE_BOUND ( 'NONE', #5869, .T. ) ; +#1958 = FACE_OUTER_BOUND ( 'NONE', #4963, .T. ) ; +#1959 = VERTEX_POINT ( 'NONE', #10 ) ; +#1960 = ORIENTED_EDGE ( 'NONE', *, *, #2574, .T. ) ; +#1961 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, -8.000000000000000000, -63.49999999999972289 ) ) ; +#1962 = LINE ( 'NONE', #1079, #4146 ) ; +#1963 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1964 = EDGE_CURVE ( 'NONE', #6911, #4261, #6789, .T. ) ; +#1965 = VECTOR ( 'NONE', #3517, 1000.000000000000000 ) ; +#1966 = ORIENTED_EDGE ( 'NONE', *, *, #2574, .F. ) ; +#1967 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1968 = VECTOR ( 'NONE', #5845, 1000.000000000000000 ) ; +#1969 = ORIENTED_EDGE ( 'NONE', *, *, #4532, .T. ) ; +#1970 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1971 = AXIS2_PLACEMENT_3D ( 'NONE', #1059, #6405, #4688 ) ; +#1972 = ORIENTED_EDGE ( 'NONE', *, *, #6961, .T. ) ; +#1973 = AXIS2_PLACEMENT_3D ( 'NONE', #3608, #4143, #5774 ) ; +#1974 = VERTEX_POINT ( 'NONE', #6427 ) ; +#1975 = AXIS2_PLACEMENT_3D ( 'NONE', #6852, #934, #4626 ) ; +#1976 = CARTESIAN_POINT ( 'NONE', ( -48.50000000000026290, -3.000000000000000000, 47.49999999999972289 ) ) ; +#1977 = PLANE ( 'NONE', #3915 ) ; +#1978 = ADVANCED_FACE ( 'NONE', ( #6969 ), #476, .F. ) ; +#1979 = CIRCLE ( 'NONE', #2306, 1.500000000000001332 ) ; +#1980 = AXIS2_PLACEMENT_3D ( 'NONE', #2299, #5574, #2265 ) ; +#1981 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1982 = AXIS2_PLACEMENT_3D ( 'NONE', #3826, #6448, #5916 ) ; +#1983 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#1984 = CARTESIAN_POINT ( 'NONE', ( -34.23611499550307258, -1.800000000000001155, -63.49999999999972289 ) ) ; +#1985 = ORIENTED_EDGE ( 'NONE', *, *, #3603, .T. ) ; +#1986 = ORIENTED_EDGE ( 'NONE', *, *, #4892, .T. ) ; +#1987 = CYLINDRICAL_SURFACE ( 'NONE', #1146, 6.000000000002864375 ) ; +#1988 = CYLINDRICAL_SURFACE ( 'NONE', #4153, 1.500000000000004219 ) ; +#1989 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, -1.000000000000000000, -51.73725382063752676 ) ) ; +#1990 = AXIS2_PLACEMENT_3D ( 'NONE', #3764, #3835, #5922 ) ; +#1991 = LINE ( 'NONE', #4733, #1083 ) ; +#1992 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000026290, -8.000000000000000000, 33.49999999999970868 ) ) ; +#1993 = ORIENTED_EDGE ( 'NONE', *, *, #4597, .T. ) ; +#1994 = CIRCLE ( 'NONE', #178, 25.30000000000000071 ) ; +#1995 = VERTEX_POINT ( 'NONE', #4939 ) ; +#1996 = EDGE_CURVE ( 'NONE', #1769, #3519, #2138, .T. ) ; +#1997 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#1998 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ; +#1999 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2000 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2001 = AXIS2_PLACEMENT_3D ( 'NONE', #1129, #4983, #2846 ) ; +#2002 = VERTEX_POINT ( 'NONE', #2675 ) ; +#2003 = CARTESIAN_POINT ( 'NONE', ( 48.50000000000026290, -3.000000000000000000, 47.49999999999972289 ) ) ; +#2004 = ADVANCED_FACE ( 'NONE', ( #2633 ), #1122, .F. ) ; +#2005 = VERTEX_POINT ( 'NONE', #5897 ) ; +#2006 = EDGE_CURVE ( 'NONE', #2474, #6658, #6564, .T. ) ; +#2007 = AXIS2_PLACEMENT_3D ( 'NONE', #3945, #3370, #2455 ) ; +#2008 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2009 = ORIENTED_EDGE ( 'NONE', *, *, #4788, .T. ) ; +#2010 = CIRCLE ( 'NONE', #4503, 0.6000000000000033085 ) ; +#2011 = PERSON_AND_ORGANIZATION ( #2507, #6702 ) ; +#2012 = CARTESIAN_POINT ( 'NONE', ( -21.43027221245029068, -1.000000000000000000, -56.23725382063096845 ) ) ; +#2013 = CARTESIAN_POINT ( 'NONE', ( -53.11446046239787222, -8.000000000000000000, -62.67179302806228947 ) ) ; +#2014 = EDGE_CURVE ( 'NONE', #5784, #762, #4184, .T. ) ; +#2015 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -8.000000000000000000, -62.00000000000002132 ) ) ; +#2016 = ADVANCED_FACE ( 'NONE', ( #5371 ), #518, .F. ) ; +#2017 = CARTESIAN_POINT ( 'NONE', ( 1.722075445644006830, -2.200000000000000622, 4.157457896303450973 ) ) ; +#2018 = EDGE_CURVE ( 'NONE', #6658, #4104, #5873, .T. ) ; +#2019 = CYLINDRICAL_SURFACE ( 'NONE', #3202, 60.49999999999994316 ) ; +#2020 = EDGE_CURVE ( 'NONE', #548, #710, #2202, .T. ) ; +#2021 = ORIENTED_EDGE ( 'NONE', *, *, #6601, .T. ) ; +#2022 = ORIENTED_EDGE ( 'NONE', *, *, #596, .T. ) ; +#2023 = LINE ( 'NONE', #999, #6560 ) ; +#2024 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#2025 = LINE ( 'NONE', #4730, #6619 ) ; +#2026 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2027 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2028 = PLANE ( 'NONE', #2746 ) ; +#2029 = ORIENTED_EDGE ( 'NONE', *, *, #1647, .T. ) ; +#2030 = VERTEX_POINT ( 'NONE', #2233 ) ; +#2031 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2032 = CARTESIAN_POINT ( 'NONE', ( 4.299999999999722711, -5.500000000000000000, 5.693922795112557560E-16 ) ) ; +#2033 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2034 = AXIS2_PLACEMENT_3D ( 'NONE', #4811, #3734, #3845 ) ; +#2035 = EDGE_CURVE ( 'NONE', #1041, #6070, #3699, .T. ) ; +#2036 = EDGE_CURVE ( 'NONE', #4622, #4450, #5313, .T. ) ; +#2037 = CIRCLE ( 'NONE', #5987, 1.500000000000001332 ) ; +#2038 = EDGE_LOOP ( 'NONE', ( #3919, #3471, #3881, #2811 ) ) ; +#2039 = CARTESIAN_POINT ( 'NONE', ( -39.95819837980435096, -6.700000000000000178, -32.00000000000000000 ) ) ; +#2040 = VERTEX_POINT ( 'NONE', #4408 ) ; +#2041 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2042 = VECTOR ( 'NONE', #3943, 1000.000000000000000 ) ; +#2043 = ORIENTED_EDGE ( 'NONE', *, *, #5302, .F. ) ; +#2044 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -2.400000000000000355, 36.73402833653069166 ) ) ; +#2045 = LINE ( 'NONE', #2078, #4715 ) ; +#2046 = VECTOR ( 'NONE', #5567, 1000.000000000000000 ) ; +#2047 = CARTESIAN_POINT ( 'NONE', ( 17.30144700593796259, -2.200000000000000622, 30.01032132651201323 ) ) ; +#2048 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2049 = EDGE_CURVE ( 'NONE', #4883, #3463, #3148, .T. ) ; +#2050 = FACE_OUTER_BOUND ( 'NONE', #3289, .T. ) ; +#2051 = VERTEX_POINT ( 'NONE', #5048 ) ; +#2052 = CARTESIAN_POINT ( 'NONE', ( 11.76972587644366719, -5.899999999999999467, 40.17369852021911925 ) ) ; +#2053 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, 0.000000000000000000 ) ) ; +#2054 = VECTOR ( 'NONE', #4847, 1000.000000000000000 ) ; +#2055 = CARTESIAN_POINT ( 'NONE', ( -53.45932926627796888, -2.200000000000000622, -17.27281431613949181 ) ) ; +#2056 = ADVANCED_FACE ( 'NONE', ( #3944 ), #2412, .F. ) ; +#2057 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#2058 = APPROVAL_PERSON_ORGANIZATION ( #6802, #5751, #5135 ) ; +#2059 = ADVANCED_FACE ( 'NONE', ( #221 ), #5543, .F. ) ; +#2060 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #6145, #4148, ( #5902 ) ) ; +#2061 = PLANE ( 'NONE', #510 ) ; +#2062 = CARTESIAN_POINT ( 'NONE', ( -1.722075445645237179, -5.899999999999999467, 4.157457896306325118 ) ) ; +#2063 = EDGE_LOOP ( 'NONE', ( #2266, #1364, #428, #1932, #4338, #6362, #3305 ) ) ; +#2064 = ORIENTED_EDGE ( 'NONE', *, *, #813, .F. ) ; +#2065 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2066 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244024005, -1.000000000000000000, 51.73725382063510381 ) ) ; +#2067 = FACE_OUTER_BOUND ( 'NONE', #228, .T. ) ; +#2068 = ORIENTED_EDGE ( 'NONE', *, *, #6503, .T. ) ; +#2069 = ADVANCED_FACE ( 'NONE', ( #5507, #187 ), #803, .F. ) ; +#2070 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -6.700000000000000178, 30.73402833653069521 ) ) ; +#2071 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000026290, -8.000000000000000000, 33.49999999999970868 ) ) ; +#2072 = ORIENTED_EDGE ( 'NONE', *, *, #6261, .F. ) ; +#2073 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -5.899999999999999467, 24.46370172317529068 ) ) ; +#2074 = ORIENTED_EDGE ( 'NONE', *, *, #3689, .F. ) ; +#2075 = ORIENTED_EDGE ( 'NONE', *, *, #945, .F. ) ; +#2076 = CIRCLE ( 'NONE', #5586, 4.500000000000230926 ) ; +#2077 = FACE_OUTER_BOUND ( 'NONE', #1053, .T. ) ; +#2078 = CARTESIAN_POINT ( 'NONE', ( -10.01349373899360629, -5.899999999999999467, 39.29417823468541116 ) ) ; +#2079 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2080 = AXIS2_PLACEMENT_3D ( 'NONE', #2612, #956, #2513 ) ; +#2081 = FACE_OUTER_BOUND ( 'NONE', #3864, .T. ) ; +#2082 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -5.899999999999999467, 22.96370172317529068 ) ) ; +#2083 = EDGE_LOOP ( 'NONE', ( #346, #6453, #2501, #6068 ) ) ; +#2084 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2085 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2086 = VECTOR ( 'NONE', #4857, 1000.000000000000000 ) ; +#2087 = LINE ( 'NONE', #7016, #635 ) ; +#2088 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -6.700000000000000178, 42.73402833653069166 ) ) ; +#2089 = ADVANCED_FACE ( 'NONE', ( #6130 ), #1816, .F. ) ; +#2090 = AXIS2_PLACEMENT_3D ( 'NONE', #2820, #4991, #6692 ) ; +#2091 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2092 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, -1.000000000000000000, 51.73725382062663414 ) ) ; +#2093 = ORIENTED_EDGE ( 'NONE', *, *, #3312, .F. ) ; +#2094 = ORIENTED_EDGE ( 'NONE', *, *, #1685, .F. ) ; +#2095 = CARTESIAN_POINT ( 'NONE', ( -34.92266447387282113, -3.200000000000000622, -35.53553390593242511 ) ) ; +#2096 = VECTOR ( 'NONE', #6555, 1000.000000000000000 ) ; +#2097 = DIRECTION ( 'NONE', ( -0.9238795325112892920, 0.000000000000000000, 0.3826834323650836200 ) ) ; +#2098 = CARTESIAN_POINT ( 'NONE', ( 13.14398910963723033, -5.899999999999999467, 27.23239677215464383 ) ) ; +#2099 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2100 = AXIS2_PLACEMENT_3D ( 'NONE', #5137, #2927, #1311 ) ; +#2101 = ORIENTED_EDGE ( 'NONE', *, *, #2232, .F. ) ; +#2102 = VERTEX_POINT ( 'NONE', #3482 ) ; +#2103 = ADVANCED_FACE ( 'NONE', ( #5124 ), #3335, .T. ) ; +#2104 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, -1.000000000000000000, -21.43027221244439673 ) ) ; +#2105 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#2106 = VERTEX_POINT ( 'NONE', #6096 ) ; +#2107 = AXIS2_PLACEMENT_3D ( 'NONE', #6839, #6146, #239 ) ; +#2108 = CARTESIAN_POINT ( 'NONE', ( 10.38390657767673275, -6.700000000000000178, 40.74772366876675278 ) ) ; +#2109 = VERTEX_POINT ( 'NONE', #4021 ) ; +#2110 = ORIENTED_EDGE ( 'NONE', *, *, #2873, .F. ) ; +#2111 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -5.500000000000000000, 0.000000000000000000 ) ) ; +#2112 = CARTESIAN_POINT ( 'NONE', ( 1.722075445644006830, -6.700000000000000178, 4.157457896303450973 ) ) ; +#2113 = AXIS2_PLACEMENT_3D ( 'NONE', #2140, #1746, #3911 ) ; +#2114 = EDGE_CURVE ( 'NONE', #408, #1483, #3444, .T. ) ; +#2115 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980706524, -2.200000000000000622, -56.99999999999999289 ) ) ; +#2116 = FACE_OUTER_BOUND ( 'NONE', #1302, .T. ) ; +#2117 = VECTOR ( 'NONE', #2566, 1000.000000000000000 ) ; +#2118 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387191874, -2.200000000000000622, -53.46446609406757489 ) ) ; +#2119 = ORIENTED_EDGE ( 'NONE', *, *, #5243, .F. ) ; +#2120 = CIRCLE ( 'NONE', #6532, 1.500000000000001332 ) ; +#2121 = CARTESIAN_POINT ( 'NONE', ( 55.89471171693502782, -6.700000000000000178, 23.15234765808252604 ) ) ; +#2122 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2123 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2124 = FACE_OUTER_BOUND ( 'NONE', #685, .T. ) ; +#2125 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2126 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -5.500000000000000000, 0.000000000000000000 ) ) ; +#2127 = VERTEX_POINT ( 'NONE', #146 ) ; +#2128 = EDGE_LOOP ( 'NONE', ( #1481, #5744, #67, #865 ) ) ; +#2129 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2130 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, -0.5000000000000092149, -51.13725382063752534 ) ) ; +#2131 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#2132 = FACE_OUTER_BOUND ( 'NONE', #1709, .T. ) ; +#2133 = AXIS2_PLACEMENT_3D ( 'NONE', #3412, #1899, #4980 ) ; +#2134 = ORIENTED_EDGE ( 'NONE', *, *, #3890, .F. ) ; +#2135 = EDGE_LOOP ( 'NONE', ( #4411, #6754, #287, #4382 ) ) ; +#2136 = EDGE_CURVE ( 'NONE', #374, #1606, #4598, .T. ) ; +#2137 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2138 = CIRCLE ( 'NONE', #6544, 0.5999999999999998668 ) ; +#2139 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2140 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -6.700000000000000178, 0.000000000000000000 ) ) ; +#2141 = EDGE_CURVE ( 'NONE', #6203, #889, #3372, .T. ) ; +#2142 = EDGE_CURVE ( 'NONE', #762, #5784, #5773, .T. ) ; +#2143 = EDGE_CURVE ( 'NONE', #2440, #6941, #2477, .T. ) ; +#2144 = AXIS2_PLACEMENT_3D ( 'NONE', #135, #4649, #820 ) ; +#2145 = VERTEX_POINT ( 'NONE', #4976 ) ; +#2146 = ORIENTED_EDGE ( 'NONE', *, *, #167, .F. ) ; +#2147 = LINE ( 'NONE', #5903, #563 ) ; +#2148 = CARTESIAN_POINT ( 'NONE', ( 48.50000000000026290, -3.000000000000000000, 47.49999999999972289 ) ) ; +#2149 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2150 = AXIS2_PLACEMENT_3D ( 'NONE', #4667, #6785, #4129 ) ; +#2151 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2152 = CARTESIAN_POINT ( 'NONE', ( -24.28180162019543786, -8.000000000000000000, -60.50000000000001421 ) ) ; +#2153 = ORIENTED_EDGE ( 'NONE', *, *, #4069, .F. ) ; +#2154 = EDGE_CURVE ( 'NONE', #4641, #4345, #437, .T. ) ; +#2155 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2156 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2157 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2158 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063086897, -1.000000000000000000, 21.43027221245048253 ) ) ; +#2159 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, 0.000000000000000000, -22.03027221244439460 ) ) ; +#2160 = EDGE_LOOP ( 'NONE', ( #3141, #6337, #3569, #3160 ) ) ; +#2161 = VERTEX_POINT ( 'NONE', #5008 ) ; +#2162 = FACE_OUTER_BOUND ( 'NONE', #6195, .T. ) ; +#2163 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2164 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, -0.5000000000000092149, -51.73725382063752676 ) ) ; +#2165 = FACE_OUTER_BOUND ( 'NONE', #1243, .T. ) ; +#2166 = AXIS2_PLACEMENT_3D ( 'NONE', #4232, #1868, #3698 ) ; +#2167 = ORIENTED_EDGE ( 'NONE', *, *, #3570, .F. ) ; +#2168 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2169 = CARTESIAN_POINT ( 'NONE', ( 39.29417823468537563, -5.899999999999999467, 10.01349373899374129 ) ) ; +#2170 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2171 = EDGE_CURVE ( 'NONE', #1296, #1588, #765, .T. ) ; +#2172 = ORIENTED_EDGE ( 'NONE', *, *, #255, .F. ) ; +#2173 = VERTEX_POINT ( 'NONE', #2305 ) ; +#2174 = EDGE_LOOP ( 'NONE', ( #5415, #6792, #5034, #5089 ) ) ; +#2175 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2176 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2177 = CIRCLE ( 'NONE', #2411, 6.000000000000001776 ) ; +#2178 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063502565, -1.000000000000000000, 16.93027221244040703 ) ) ; +#2179 = EDGE_LOOP ( 'NONE', ( #2368, #4565, #2422, #773 ) ) ; +#2180 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, 0.000000000000000000, -21.43027221245303338 ) ) ; +#2181 = EDGE_CURVE ( 'NONE', #1551, #59, #4484, .T. ) ; +#2182 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2183 = CIRCLE ( 'NONE', #6599, 5.999999999999998224 ) ; +#2184 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2185 = CIRCLE ( 'NONE', #957, 4.500000000000010658 ) ; +#2186 = DIRECTION ( 'NONE', ( -0.9238795325112892920, 0.000000000000000000, 0.3826834323650836200 ) ) ; +#2187 = FACE_OUTER_BOUND ( 'NONE', #2319, .T. ) ; +#2188 = ORIENTED_EDGE ( 'NONE', *, *, #560, .T. ) ; +#2189 = CONICAL_SURFACE ( 'NONE', #393, 1.100000000000017630, 0.7853981633974739252 ) ; +#2190 = ORIENTED_EDGE ( 'NONE', *, *, #2251, .T. ) ; +#2191 = CARTESIAN_POINT ( 'NONE', ( 30.01032132651300799, -2.200000000000000622, 17.30144700593542595 ) ) ; +#2192 = CIRCLE ( 'NONE', #511, 5.025000000000002132 ) ; +#2193 = PLANE ( 'NONE', #2428 ) ; +#2194 = PLANE ( 'NONE', #4531 ) ; +#2195 = AXIS2_PLACEMENT_3D ( 'NONE', #5251, #3014, #2557 ) ; +#2196 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2197 = AXIS2_PLACEMENT_3D ( 'NONE', #3147, #2125, #4796 ) ; +#2198 = ADVANCED_FACE ( 'NONE', ( #3406 ), #5578, .F. ) ; +#2199 = AXIS2_PLACEMENT_3D ( 'NONE', #3674, #6907, #5416 ) ; +#2200 = ORIENTED_EDGE ( 'NONE', *, *, #4237, .F. ) ; +#2201 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000026290, 0.000000000000000000, -33.49999999999970868 ) ) ; +#2202 = LINE ( 'NONE', #6463, #559 ) ; +#2203 = CARTESIAN_POINT ( 'NONE', ( -48.50000000000026290, -3.000000000000000000, 42.47499999999972431 ) ) ; +#2204 = CIRCLE ( 'NONE', #5490, 4.500000000000230926 ) ; +#2205 = VERTEX_POINT ( 'NONE', #5733 ) ; +#2206 = CIRCLE ( 'NONE', #6174, 1.500000000000001332 ) ; +#2207 = ORIENTED_EDGE ( 'NONE', *, *, #1926, .T. ) ; +#2208 = ORIENTED_EDGE ( 'NONE', *, *, #1448, .T. ) ; +#2209 = CARTESIAN_POINT ( 'NONE', ( -40.17369852021916188, -5.899999999999999467, 11.76972587644351620 ) ) ; +#2210 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -2.400000000000000355, 36.73402833653069166 ) ) ; +#2211 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2212 = EDGE_LOOP ( 'NONE', ( #6415, #2920 ) ) ; +#2213 = EDGE_CURVE ( 'NONE', #1021, #3376, #5295, .T. ) ; +#2214 = DIRECTION ( 'NONE', ( -0.9238795325112867385, 0.000000000000000000, 0.3826834323650899483 ) ) ; +#2215 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#2216 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2217 = ADVANCED_FACE ( 'NONE', ( #301 ), #5098, .T. ) ; +#2218 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2219 = EDGE_CURVE ( 'NONE', #5868, #124, #3599, .T. ) ; +#2220 = EDGE_CURVE ( 'NONE', #4430, #6658, #6863, .T. ) ; +#2221 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -55.49999999999972289 ) ) ; +#2222 = CONICAL_SURFACE ( 'NONE', #4386, 1.100000000000017630, 0.7853981633974739252 ) ; +#2223 = ORIENTED_EDGE ( 'NONE', *, *, #5699, .T. ) ; +#2224 = EDGE_LOOP ( 'NONE', ( #6217, #2437, #6866, #2678 ) ) ; +#2225 = CARTESIAN_POINT ( 'NONE', ( 50.01517837499159924, -6.700000000000000178, 25.58773010874100606 ) ) ; +#2226 = CARTESIAN_POINT ( 'NONE', ( 36.15552248038181204, -6.700000000000000178, -21.47046096782034752 ) ) ; +#2227 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2228 = CARTESIAN_POINT ( 'NONE', ( -31.73239677215937249, -2.200000000000000622, -13.14398910962637856 ) ) ; +#2229 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2230 = VERTEX_POINT ( 'NONE', #1404 ) ; +#2231 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, -1.000000000000000000, -21.43027221244439673 ) ) ; +#2232 = EDGE_CURVE ( 'NONE', #2289, #1007, #6206, .T. ) ; +#2233 = CARTESIAN_POINT ( 'NONE', ( 20.08464166905329762, -5.899999999999999467, 36.72954762892951663 ) ) ; +#2234 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2235 = VECTOR ( 'NONE', #3094, 1000.000000000000114 ) ; +#2236 = ADVANCED_FACE ( 'NONE', ( #4739 ), #6894, .F. ) ; +#2237 = AXIS2_PLACEMENT_3D ( 'NONE', #6288, #1999, #3056 ) ; +#2238 = ORIENTED_EDGE ( 'NONE', *, *, #1579, .F. ) ; +#2239 = ORIENTED_EDGE ( 'NONE', *, *, #137, .T. ) ; +#2240 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -6.700000000000000178, 51.94976107412009725 ) ) ; +#2241 = ORIENTED_EDGE ( 'NONE', *, *, #105, .F. ) ; +#2242 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2243 = AXIS2_PLACEMENT_3D ( 'NONE', #952, #4210, #3103 ) ; +#2244 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2245 = CARTESIAN_POINT ( 'NONE', ( -4.300000000000265388, 11.64513216797408823, 0.000000000000000000 ) ) ; +#2246 = CIRCLE ( 'NONE', #6218, 1.500000000000001332 ) ; +#2247 = ORIENTED_EDGE ( 'NONE', *, *, #6210, .F. ) ; +#2248 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387191874, -3.200000000000000622, -51.96446609406757489 ) ) ; +#2249 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2250 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2251 = EDGE_CURVE ( 'NONE', #2884, #5443, #4198, .T. ) ; +#2252 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -5.500000000000000000, 51.94976107412009725 ) ) ; +#2253 = CARTESIAN_POINT ( 'NONE', ( -30.45000000000150564, -6.700000000000000178, -30.50000000000000355 ) ) ; +#2254 = ORIENTED_EDGE ( 'NONE', *, *, #1282, .F. ) ; +#2255 = EDGE_LOOP ( 'NONE', ( #6735, #883 ) ) ; +#2256 = ORIENTED_EDGE ( 'NONE', *, *, #1423, .F. ) ; +#2257 = ORIENTED_EDGE ( 'NONE', *, *, #4012, .F. ) ; +#2258 = VECTOR ( 'NONE', #219, 1000.000000000000000 ) ; +#2259 = LINE ( 'NONE', #6553, #3741 ) ; +#2260 = FACE_OUTER_BOUND ( 'NONE', #1260, .T. ) ; +#2261 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244847169, -2.200000000000000622, -47.23725382063096134 ) ) ; +#2262 = ADVANCED_FACE ( 'NONE', ( #2454 ), #4703, .F. ) ; +#2263 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2264 = AXIS2_PLACEMENT_3D ( 'NONE', #4869, #4225, #6485 ) ; +#2265 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2266 = ORIENTED_EDGE ( 'NONE', *, *, #6478, .T. ) ; +#2267 = ORIENTED_EDGE ( 'NONE', *, *, #1284, .T. ) ; +#2268 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, -0.5000000000000369704, 52.33725382062663556 ) ) ; +#2269 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2270 = ADVANCED_FACE ( 'NONE', ( #6751 ), #90, .F. ) ; +#2271 = CIRCLE ( 'NONE', #3182, 4.299999999999998046 ) ; +#2272 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063071265, -6.700000000000000178, -25.93027221245084490 ) ) ; +#2273 = AXIS2_PLACEMENT_3D ( 'NONE', #4988, #702, #2850 ) ; +#2274 = EDGE_CURVE ( 'NONE', #5495, #2936, #3022, .T. ) ; +#2275 = VERTEX_POINT ( 'NONE', #4061 ) ; +#2276 = VERTEX_POINT ( 'NONE', #6245 ) ; +#2277 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2278 = ORIENTED_EDGE ( 'NONE', *, *, #3676, .F. ) ; +#2279 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2280 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -5.500000000000000000, 30.73402833652782817 ) ) ; +#2281 = CARTESIAN_POINT ( 'NONE', ( 29.36379310344975480, -5.899999999999999467, -27.96551724137933803 ) ) ; +#2282 = VERTEX_POINT ( 'NONE', #3521 ) ; +#2283 = PERSON_AND_ORGANIZATION_ROLE ( 'design_owner' ) ; +#2284 = CARTESIAN_POINT ( 'NONE', ( 21.47046096782023028, -6.700000000000000178, 36.15552248038188310 ) ) ; +#2285 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, 0.000000000000000000 ) ) ; +#2286 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2287 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2288 = ORIENTED_EDGE ( 'NONE', *, *, #6210, .T. ) ; +#2289 = VERTEX_POINT ( 'NONE', #2493 ) ; +#2290 = ORIENTED_EDGE ( 'NONE', *, *, #3251, .F. ) ; +#2291 = DIRECTION ( 'NONE', ( 8.659560562354744271E-17, -0.7071067811865627828, 0.7071067811865322517 ) ) ; +#2292 = AXIS2_PLACEMENT_3D ( 'NONE', #1391, #5108, #4044 ) ; +#2293 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2294 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980431544, -2.200000000000000622, -58.50000000000000000 ) ) ; +#2295 = EDGE_CURVE ( 'NONE', #4527, #3966, #1477, .T. ) ; +#2296 = AXIS2_PLACEMENT_3D ( 'NONE', #1623, #2713, #2244 ) ; +#2297 = LINE ( 'NONE', #2940, #4355 ) ; +#2298 = AXIS2_PLACEMENT_3D ( 'NONE', #354, #6153, #786 ) ; +#2299 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -5.500000000000000000, 36.73402833653069166 ) ) ; +#2300 = AXIS2_PLACEMENT_3D ( 'NONE', #5172, #310, #1901 ) ; +#2301 = ORIENTED_EDGE ( 'NONE', *, *, #158, .T. ) ; +#2302 = ORIENTED_EDGE ( 'NONE', *, *, #7, .F. ) ; +#2303 = CARTESIAN_POINT ( 'NONE', ( -22.78180162019543786, -8.000000000000000000, -58.50000000000000000 ) ) ; +#2304 = AXIS2_PLACEMENT_3D ( 'NONE', #4190, #6238, #4695 ) ; +#2305 = CARTESIAN_POINT ( 'NONE', ( -36.30999999999903594, -2.200000000000000622, -62.00000000000002132 ) ) ; +#2306 = AXIS2_PLACEMENT_3D ( 'NONE', #636, #1206, #64 ) ; +#2307 = CARTESIAN_POINT ( 'NONE', ( -4.300000000000265388, -5.500000000000000000, 0.000000000000000000 ) ) ; +#2308 = EDGE_CURVE ( 'NONE', #4666, #2884, #974, .T. ) ; +#2309 = CIRCLE ( 'NONE', #6965, 0.5999999999999998668 ) ; +#2310 = EDGE_CURVE ( 'NONE', #2824, #140, #1797, .T. ) ; +#2311 = EDGE_CURVE ( 'NONE', #401, #6846, #2997, .T. ) ; +#2312 = EDGE_LOOP ( 'NONE', ( #863, #3724, #4580, #4018, #5055, #2607, #3949, #4808, #3452, #269, #1269, #4005, #1827, #5265, #1148, #3254, #2075, #3237, #88, #6008, #3554, #4208, #1339, #2021, #257, #4940, #1528, #6845, #5855, #6416, #4429, #2288, #2346, #500, #6119, #1156, #1376, #6874, #6234, #6812, #2452, #2497, #3955, #4718, #6897, #3878, #3968, #357 ) ) ; +#2313 = ORIENTED_EDGE ( 'NONE', *, *, #2815, .F. ) ; +#2314 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2315 = ORIENTED_EDGE ( 'NONE', *, *, #6683, .F. ) ; +#2316 = AXIS2_PLACEMENT_3D ( 'NONE', #4870, #2728, #6383 ) ; +#2317 = CARTESIAN_POINT ( 'NONE', ( -13.14398910962626843, -5.899999999999999467, 27.23239677215919130 ) ) ; +#2318 = CARTESIAN_POINT ( 'NONE', ( 20.70457056468754686, -5.899999999999999467, 34.86578921711026879 ) ) ; +#2319 = EDGE_LOOP ( 'NONE', ( #4766, #3234, #6585, #2376 ) ) ; +#2320 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2321 = VERTEX_POINT ( 'NONE', #4098 ) ; +#2322 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2323 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, -1.000000000000000000, -20.33027221244440597 ) ) ; +#2324 = CARTESIAN_POINT ( 'NONE', ( 34.86578921711019774, -6.700000000000000178, -20.70457056468765700 ) ) ; +#2325 = EDGE_CURVE ( 'NONE', #675, #4430, #1962, .T. ) ; +#2326 = VECTOR ( 'NONE', #6937, 1000.000000000000000 ) ; +#2327 = CARTESIAN_POINT ( 'NONE', ( -39.95819837980435096, -2.200000000000000622, -60.50000000000001421 ) ) ; +#2328 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2329 = ORIENTED_EDGE ( 'NONE', *, *, #4055, .T. ) ; +#2330 = ORIENTED_EDGE ( 'NONE', *, *, #784, .F. ) ; +#2331 = VERTEX_POINT ( 'NONE', #1142 ) ; +#2332 = VERTEX_POINT ( 'NONE', #5460 ) ; +#2333 = LINE ( 'NONE', #4510, #2948 ) ; +#2334 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2335 = CARTESIAN_POINT ( 'NONE', ( -34.92266447387282113, -3.200000000000000622, -37.03553390593243222 ) ) ; +#2336 = FACE_BOUND ( 'NONE', #4603, .T. ) ; +#2337 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2338 = ORIENTED_EDGE ( 'NONE', *, *, #4051, .F. ) ; +#2339 = VERTEX_POINT ( 'NONE', #6486 ) ; +#2340 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2341 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -5.500000000000000000, -6.000000000000001776 ) ) ; +#2342 = CARTESIAN_POINT ( 'NONE', ( 10.01349373899624062, -5.899999999999999467, 39.29417823468473614 ) ) ; +#2343 = EDGE_CURVE ( 'NONE', #2871, #2593, #3332, .T. ) ; +#2344 = ORIENTED_EDGE ( 'NONE', *, *, #754, .F. ) ; +#2345 = ORIENTED_EDGE ( 'NONE', *, *, #1626, .F. ) ; +#2346 = ORIENTED_EDGE ( 'NONE', *, *, #5570, .F. ) ; +#2347 = PLANE ( 'NONE', #554 ) ; +#2348 = EDGE_CURVE ( 'NONE', #3357, #2356, #5275, .T. ) ; +#2349 = ORIENTED_EDGE ( 'NONE', *, *, #4880, .T. ) ; +#2350 = FACE_OUTER_BOUND ( 'NONE', #1475, .T. ) ; +#2351 = EDGE_CURVE ( 'NONE', #1244, #2835, #4931, .T. ) ; +#2352 = AXIS2_PLACEMENT_3D ( 'NONE', #375, #6359, #2533 ) ; +#2353 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2354 = VERTEX_POINT ( 'NONE', #2130 ) ; +#2355 = CARTESIAN_POINT ( 'NONE', ( 31.73239677215937249, -2.200000000000000622, 8.643989109626145861 ) ) ; +#2356 = VERTEX_POINT ( 'NONE', #2695 ) ; +#2357 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063502565, -1.000000000000000000, -21.43027221244042124 ) ) ; +#2358 = AXIS2_PLACEMENT_3D ( 'NONE', #614, #5338, #3771 ) ; +#2359 = DIRECTION ( 'NONE', ( 8.659560562355154725E-17, -0.7071067811865293651, 0.7071067811865656694 ) ) ; +#2360 = LINE ( 'NONE', #4542, #6041 ) ; +#2361 = CARTESIAN_POINT ( 'NONE', ( -31.73239677215492804, -5.899999999999999467, 13.14398910963711486 ) ) ; +#2362 = CONICAL_SURFACE ( 'NONE', #6549, 1.099999999999989875, 0.7853981633974267407 ) ; +#2363 = LINE ( 'NONE', #6694, #954 ) ; +#2364 = EDGE_CURVE ( 'NONE', #3985, #473, #3456, .T. ) ; +#2365 = EDGE_LOOP ( 'NONE', ( #48, #4972, #6061, #3489 ) ) ; +#2366 = VERTEX_POINT ( 'NONE', #2 ) ; +#2367 = ORIENTED_EDGE ( 'NONE', *, *, #5470, .F. ) ; +#2368 = ORIENTED_EDGE ( 'NONE', *, *, #4555, .T. ) ; +#2369 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063071265, -1.000000000000000000, -25.93027221245084490 ) ) ; +#2370 = CARTESIAN_POINT ( 'NONE', ( -52.50000000000027001, -8.000000000000000000, -39.47499999999971010 ) ) ; +#2371 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2372 = EDGE_CURVE ( 'NONE', #5120, #1974, #4248, .T. ) ; +#2373 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -2.200000000000000622, -30.50000000000000000 ) ) ; +#2374 = FACE_OUTER_BOUND ( 'NONE', #718, .T. ) ; +#2375 = VERTEX_POINT ( 'NONE', #1541 ) ; +#2376 = ORIENTED_EDGE ( 'NONE', *, *, #6779, .F. ) ; +#2377 = CARTESIAN_POINT ( 'NONE', ( -36.30999999999903594, -2.200000000000000622, -60.50000000000001421 ) ) ; +#2378 = CARTESIAN_POINT ( 'NONE', ( -25.78180162019543786, -2.200000000000000622, -60.50000000000001421 ) ) ; +#2379 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -2.400000000000000355, 36.73402833653069166 ) ) ; +#2380 = CIRCLE ( 'NONE', #4100, 28.64999999999999147 ) ; +#2381 = ORIENTED_EDGE ( 'NONE', *, *, #3092, .F. ) ; +#2382 = ORIENTED_EDGE ( 'NONE', *, *, #5009, .F. ) ; +#2383 = CIRCLE ( 'NONE', #240, 1.099999999999989875 ) ; +#2384 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -2.400000000000000355, 51.94976107412009725 ) ) ; +#2385 = ORIENTED_EDGE ( 'NONE', *, *, #2731, .F. ) ; +#2386 = EDGE_CURVE ( 'NONE', #2551, #6583, #34, .T. ) ; +#2387 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2388 = ORIENTED_EDGE ( 'NONE', *, *, #2779, .T. ) ; +#2389 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2390 = EDGE_LOOP ( 'NONE', ( #2649, #1698, #4469, #1076 ) ) ; +#2391 = APPROVAL_DATE_TIME ( #5240, #5751 ) ; +#2392 = PLANE ( 'NONE', #2433 ) ; +#2393 = LINE ( 'NONE', #3503, #3903 ) ; +#2394 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -5.500000000000000000, 36.73402833653069166 ) ) ; +#2395 = LINE ( 'NONE', #1351, #501 ) ; +#2396 = ADVANCED_FACE ( 'NONE', ( #4901 ), #4372, .T. ) ; +#2397 = ORIENTED_EDGE ( 'NONE', *, *, #6247, .F. ) ; +#2398 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -2.400000000000000355, 0.000000000000000000 ) ) ; +#2399 = ORIENTED_EDGE ( 'NONE', *, *, #1249, .F. ) ; +#2400 = ORIENTED_EDGE ( 'NONE', *, *, #4314, .T. ) ; +#2401 = ORIENTED_EDGE ( 'NONE', *, *, #2912, .F. ) ; +#2402 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2403 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2404 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#2405 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063071265, -2.200000000000000622, -21.43027221245083425 ) ) ; +#2406 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -5.500000000000000000, 0.000000000000000000 ) ) ; +#2407 = VERTEX_POINT ( 'NONE', #3291 ) ; +#2408 = CIRCLE ( 'NONE', #724, 5.025000000000002132 ) ; +#2409 = ORIENTED_EDGE ( 'NONE', *, *, #3957, .F. ) ; +#2410 = CARTESIAN_POINT ( 'NONE', ( -8.986531213325546830, -5.899999999999999467, 33.45447221780232638 ) ) ; +#2411 = AXIS2_PLACEMENT_3D ( 'NONE', #2406, #4054, #6202 ) ; +#2412 = CYLINDRICAL_SURFACE ( 'NONE', #5088, 1.500000000000001332 ) ; +#2413 = FACE_OUTER_BOUND ( 'NONE', #5006, .T. ) ; +#2414 = AXIS2_PLACEMENT_3D ( 'NONE', #1801, #1274, #861 ) ; +#2415 = EDGE_CURVE ( 'NONE', #5688, #6203, #3806, .T. ) ; +#2416 = CIRCLE ( 'NONE', #39, 1.500000000000001332 ) ; +#2417 = ORIENTED_EDGE ( 'NONE', *, *, #5442, .F. ) ; +#2418 = ORIENTED_EDGE ( 'NONE', *, *, #1448, .F. ) ; +#2419 = VECTOR ( 'NONE', #1441, 1000.000000000000000 ) ; +#2420 = CARTESIAN_POINT ( 'NONE', ( -36.30999999999903594, -1.800000000000000711, -63.43772963087289440 ) ) ; +#2421 = AXIS2_PLACEMENT_3D ( 'NONE', #2210, #2176, #6540 ) ; +#2422 = ORIENTED_EDGE ( 'NONE', *, *, #5872, .F. ) ; +#2423 = CIRCLE ( 'NONE', #2988, 4.500000000000010658 ) ; +#2424 = VECTOR ( 'NONE', #3828, 1000.000000000000000 ) ; +#2425 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2426 = ORIENTED_EDGE ( 'NONE', *, *, #1421, .T. ) ; +#2427 = CARTESIAN_POINT ( 'NONE', ( 4.299999999999729816, -5.500000000000000000, -51.94976107412088595 ) ) ; +#2428 = AXIS2_PLACEMENT_3D ( 'NONE', #5362, #5959, #6456 ) ; +#2429 = ORIENTED_EDGE ( 'NONE', *, *, #2739, .F. ) ; +#2430 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2431 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.800000000000000488, -22.96370172317620018 ) ) ; +#2432 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -2.200000000000000622, -60.50000000000001421 ) ) ; +#2433 = AXIS2_PLACEMENT_3D ( 'NONE', #6766, #924, #1425 ) ; +#2434 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2435 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -2.400000000000000355, 51.94976107412009725 ) ) ; +#2436 = EDGE_CURVE ( 'NONE', #59, #2275, #2204, .T. ) ; +#2437 = ORIENTED_EDGE ( 'NONE', *, *, #233, .T. ) ; +#2438 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2439 = ORIENTED_EDGE ( 'NONE', *, *, #4149, .T. ) ; +#2440 = VERTEX_POINT ( 'NONE', #4335 ) ; +#2441 = ORIENTED_EDGE ( 'NONE', *, *, #3587, .T. ) ; +#2442 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2443 = VECTOR ( 'NONE', #125, 1000.000000000000000 ) ; +#2444 = FACE_OUTER_BOUND ( 'NONE', #7005, .T. ) ; +#2445 = EDGE_CURVE ( 'NONE', #939, #6632, #1194, .T. ) ; +#2446 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2447 = ADVANCED_FACE ( 'NONE', ( #1575, #3190 ), #2193, .F. ) ; +#2448 = EDGE_CURVE ( 'NONE', #3463, #429, #3258, .T. ) ; +#2449 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2450 = CARTESIAN_POINT ( 'NONE', ( 56.16019669858830810, -8.000000000000000000, 56.16019669858773966 ) ) ; +#2451 = ORIENTED_EDGE ( 'NONE', *, *, #6444, .F. ) ; +#2452 = ORIENTED_EDGE ( 'NONE', *, *, #955, .F. ) ; +#2453 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2454 = FACE_OUTER_BOUND ( 'NONE', #5056, .T. ) ; +#2455 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2456 = AXIS2_PLACEMENT_3D ( 'NONE', #5440, #1654, #1152 ) ; +#2457 = AXIS2_PLACEMENT_3D ( 'NONE', #4740, #6895, #2033 ) ; +#2458 = ORIENTED_EDGE ( 'NONE', *, *, #5831, .T. ) ; +#2459 = ADVANCED_FACE ( 'NONE', ( #2666 ), #5857, .F. ) ; +#2460 = VECTOR ( 'NONE', #2915, 1000.000000000000000 ) ; +#2461 = EDGE_LOOP ( 'NONE', ( #4001, #6868, #3803, #6158 ) ) ; +#2462 = LINE ( 'NONE', #917, #4396 ) ; +#2463 = VERTEX_POINT ( 'NONE', #6525 ) ; +#2464 = EDGE_CURVE ( 'NONE', #6632, #939, #5045, .T. ) ; +#2465 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#2466 = ORIENTED_EDGE ( 'NONE', *, *, #2782, .T. ) ; +#2467 = CARTESIAN_POINT ( 'NONE', ( -39.95819837980552336, -6.700000000000000178, -46.10008445871442717 ) ) ; +#2468 = ORIENTED_EDGE ( 'NONE', *, *, #810, .T. ) ; +#2469 = FACE_OUTER_BOUND ( 'NONE', #640, .T. ) ; +#2470 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#2471 = AXIS2_PLACEMENT_3D ( 'NONE', #6135, #6757, #2314 ) ; +#2472 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2473 = FACE_OUTER_BOUND ( 'NONE', #4056, .T. ) ; +#2474 = VERTEX_POINT ( 'NONE', #5984 ) ; +#2475 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2476 = ORIENTED_EDGE ( 'NONE', *, *, #2800, .T. ) ; +#2477 = CIRCLE ( 'NONE', #7009, 4.500000000000010658 ) ; +#2478 = ORIENTED_EDGE ( 'NONE', *, *, #4439, .T. ) ; +#2479 = ORIENTED_EDGE ( 'NONE', *, *, #5470, .T. ) ; +#2480 = CARTESIAN_POINT ( 'NONE', ( 39.95819837980705813, -6.700000000000000178, -32.00000000000000000 ) ) ; +#2481 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#2482 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2483 = EDGE_CURVE ( 'NONE', #218, #6378, #3154, .T. ) ; +#2484 = VECTOR ( 'NONE', #5136, 1000.000000000000000 ) ; +#2485 = CYLINDRICAL_SURFACE ( 'NONE', #3106, 1.500000000000001332 ) ; +#2486 = EDGE_CURVE ( 'NONE', #3096, #2005, #4474, .T. ) ; +#2487 = CARTESIAN_POINT ( 'NONE', ( 30.45000000000150564, -6.700000000000000178, -29.00000000000000000 ) ) ; +#2488 = VERTEX_POINT ( 'NONE', #4433 ) ; +#2489 = VERTEX_POINT ( 'NONE', #2797 ) ; +#2490 = EDGE_CURVE ( 'NONE', #6662, #2692, #1844, .T. ) ; +#2491 = CYLINDRICAL_SURFACE ( 'NONE', #572, 25.30000000000000071 ) ; +#2492 = EDGE_CURVE ( 'NONE', #3671, #5144, #679, .T. ) ; +#2493 = CARTESIAN_POINT ( 'NONE', ( 4.299999999999729816, -2.200000000000000622, -51.94976107412088595 ) ) ; +#2494 = FACE_OUTER_BOUND ( 'NONE', #256, .T. ) ; +#2495 = AXIS2_PLACEMENT_3D ( 'NONE', #3334, #3368, #3979 ) ; +#2496 = VERTEX_POINT ( 'NONE', #6161 ) ; +#2497 = ORIENTED_EDGE ( 'NONE', *, *, #6028, .T. ) ; +#2498 = EDGE_CURVE ( 'NONE', #4043, #2002, #5837, .T. ) ; +#2499 = LINE ( 'NONE', #4678, #3613 ) ; +#2500 = AXIS2_PLACEMENT_3D ( 'NONE', #1843, #100, #713 ) ; +#2501 = ORIENTED_EDGE ( 'NONE', *, *, #524, .T. ) ; +#2502 = EDGE_CURVE ( 'NONE', #3009, #3966, #871, .T. ) ; +#2503 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2504 = CIRCLE ( 'NONE', #5569, 1.500000000000001332 ) ; +#2505 = ORIENTED_EDGE ( 'NONE', *, *, #2154, .T. ) ; +#2506 = VERTEX_POINT ( 'NONE', #714 ) ; +#2507 = PERSON ( 'δָ¶¨', 'δָ¶¨', 'δָ¶¨', ('δָ¶¨'), ('δָ¶¨'), ('δָ¶¨') ) ; +#2508 = DATE_AND_TIME ( #5177, #4435 ) ; +#2509 = PLANE ( 'NONE', #6672 ) ; +#2510 = LINE ( 'NONE', #4152, #880 ) ; +#2511 = CIRCLE ( 'NONE', #6467, 1.099999999999989875 ) ; +#2512 = EDGE_CURVE ( 'NONE', #2517, #1012, #6048, .T. ) ; +#2513 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2514 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2515 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -2.400000000000000355, 50.44976107412009725 ) ) ; +#2516 = VERTEX_POINT ( 'NONE', #101 ) ; +#2517 = VERTEX_POINT ( 'NONE', #3474 ) ; +#2518 = CARTESIAN_POINT ( 'NONE', ( 40.17369852021909793, -5.899999999999999467, -11.76972587644380752 ) ) ; +#2519 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2520 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2521 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2522 = CARTESIAN_POINT ( 'NONE', ( -36.15552248038196126, -6.700000000000000178, 19.97046096782009883 ) ) ; +#2523 = ORIENTED_EDGE ( 'NONE', *, *, #2622, .T. ) ; +#2524 = ADVANCED_FACE ( 'NONE', ( #2260 ), #5607, .T. ) ; +#2525 = ORIENTED_EDGE ( 'NONE', *, *, #6345, .T. ) ; +#2526 = EDGE_CURVE ( 'NONE', #3299, #2517, #643, .T. ) ; +#2527 = LINE ( 'NONE', #1961, #1700 ) ; +#2528 = CARTESIAN_POINT ( 'NONE', ( 4.157457896306330447, -6.700000000000000178, 1.722075445645222525 ) ) ; +#2529 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -5.500000000000000000, -6.000000000000001776 ) ) ; +#2530 = CIRCLE ( 'NONE', #3091, 1.500000000000001332 ) ; +#2531 = ORIENTED_EDGE ( 'NONE', *, *, #3445, .T. ) ; +#2532 = ADVANCED_FACE ( 'NONE', ( #5000 ), #6701, .F. ) ; +#2533 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2534 = ORIENTED_EDGE ( 'NONE', *, *, #1710, .F. ) ; +#2535 = EDGE_CURVE ( 'NONE', #2692, #2106, #56, .T. ) ; +#2536 = EDGE_CURVE ( 'NONE', #5771, #5920, #1247, .T. ) ; +#2537 = EDGE_CURVE ( 'NONE', #50, #4377, #6865, .T. ) ; +#2538 = LINE ( 'NONE', #5274, #1747 ) ; +#2539 = AXIS2_PLACEMENT_3D ( 'NONE', #6081, #601, #2287 ) ; +#2540 = AXIS2_PLACEMENT_3D ( 'NONE', #699, #1231, #230 ) ; +#2541 = VERTEX_POINT ( 'NONE', #2370 ) ; +#2542 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ; +#2543 = AXIS2_PLACEMENT_3D ( 'NONE', #3048, #6816, #1956 ) ; +#2544 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, -1.000000000000000000, -20.83027221244439531 ) ) ; +#2545 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2546 = CARTESIAN_POINT ( 'NONE', ( -30.45000000000150564, -2.200000000000000622, -30.50000000000000355 ) ) ; +#2547 = VECTOR ( 'NONE', #1136, 1000.000000000000000 ) ; +#2548 = CIRCLE ( 'NONE', #4141, 40.55000000000109139 ) ; +#2549 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2550 = CARTESIAN_POINT ( 'NONE', ( -34.94909399646870440, -1.800000000000001155, -63.48921119623098264 ) ) ; +#2551 = VERTEX_POINT ( 'NONE', #5533 ) ; +#2552 = VERTEX_POINT ( 'NONE', #1323 ) ; +#2553 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063502565, -1.000000000000000000, -21.43027221244042124 ) ) ; +#2554 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2555 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2556 = EDGE_CURVE ( 'NONE', #811, #6085, #4601, .T. ) ; +#2557 = DIRECTION ( 'NONE', ( 0.9238795325112835188, 0.000000000000000000, 0.3826834323650974423 ) ) ; +#2558 = AXIS2_PLACEMENT_3D ( 'NONE', #933, #5189, #1955 ) ; +#2559 = PLANE ( 'NONE', #3566 ) ; +#2560 = FACE_OUTER_BOUND ( 'NONE', #3856, .T. ) ; +#2561 = VERTEX_POINT ( 'NONE', #3937 ) ; +#2562 = VECTOR ( 'NONE', #1762, 1000.000000000000000 ) ; +#2563 = ORIENTED_EDGE ( 'NONE', *, *, #5193, .F. ) ; +#2564 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2565 = DIRECTION ( 'NONE', ( 1.324168091886726789E-16, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2566 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2567 = EDGE_LOOP ( 'NONE', ( #656, #4025, #3977, #950 ) ) ; +#2568 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -2.400000000000000355, 38.23402833653357646 ) ) ; +#2569 = CIRCLE ( 'NONE', #3601, 25.30000000000000071 ) ; +#2570 = ORIENTED_EDGE ( 'NONE', *, *, #5517, .T. ) ; +#2571 = ADVANCED_FACE ( 'NONE', ( #69 ), #6087, .F. ) ; +#2572 = AXIS2_PLACEMENT_3D ( 'NONE', #1817, #302, #4520 ) ; +#2573 = CARTESIAN_POINT ( 'NONE', ( 39.95819837980343436, -6.700000000000000178, -46.10008445871692828 ) ) ; +#2574 = EDGE_CURVE ( 'NONE', #1564, #6126, #1655, .T. ) ; +#2575 = ORIENTED_EDGE ( 'NONE', *, *, #5106, .F. ) ; +#2576 = EDGE_CURVE ( 'NONE', #2824, #3547, #5037, .T. ) ; +#2577 = EDGE_CURVE ( 'NONE', #1793, #5443, #2025, .T. ) ; +#2578 = CARTESIAN_POINT ( 'NONE', ( 17.27281431614158080, -2.200000000000000622, 53.45932926627654069 ) ) ; +#2579 = CARTESIAN_POINT ( 'NONE', ( -21.43027221245029068, -2.200000000000000622, -47.23725382063096134 ) ) ; +#2580 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#2581 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -8.000000000000000000, -60.50000000000001421 ) ) ; +#2582 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2583 = ORIENTED_EDGE ( 'NONE', *, *, #3834, .T. ) ; +#2584 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2585 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2586 = CIRCLE ( 'NONE', #2471, 0.6000000000000033085 ) ; +#2587 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2588 = LINE ( 'NONE', #5222, #3211 ) ; +#2589 = EDGE_CURVE ( 'NONE', #1613, #2836, #3651, .T. ) ; +#2590 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2591 = AXIS2_PLACEMENT_3D ( 'NONE', #721, #2877, #3632 ) ; +#2592 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.800000000000000488, 25.96370172317529423 ) ) ; +#2593 = VERTEX_POINT ( 'NONE', #6777 ) ; +#2594 = ORIENTED_EDGE ( 'NONE', *, *, #2492, .F. ) ; +#2595 = CARTESIAN_POINT ( 'NONE', ( -52.50000000000027001, -3.000000000000000000, -44.49999999999971578 ) ) ; +#2596 = CARTESIAN_POINT ( 'NONE', ( -52.69999999572387139, -8.000000000000000000, -63.49999999999969447 ) ) ; +#2597 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2598 = AXIS2_PLACEMENT_3D ( 'NONE', #2553, #1718, #1529 ) ; +#2599 = AXIS2_PLACEMENT_3D ( 'NONE', #3342, #422, #2584 ) ; +#2600 = VERTEX_POINT ( 'NONE', #3013 ) ; +#2601 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2602 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -5.500000000000000000, 1.500000000000004219 ) ) ; +#2603 = VERTEX_POINT ( 'NONE', #6274 ) ; +#2604 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#2605 = ORIENTED_EDGE ( 'NONE', *, *, #2800, .F. ) ; +#2606 = VECTOR ( 'NONE', #651, 1000.000000000000000 ) ; +#2607 = ORIENTED_EDGE ( 'NONE', *, *, #2436, .F. ) ; +#2608 = EDGE_CURVE ( 'NONE', #4481, #6624, #5114, .T. ) ; +#2609 = CYLINDRICAL_SURFACE ( 'NONE', #4873, 1.500000000000001332 ) ; +#2610 = PLANE ( 'NONE', #164 ) ; +#2611 = VECTOR ( 'NONE', #2717, 1000.000000000000000 ) ; +#2612 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, -0.5000000000000092149, -51.73725382063752676 ) ) ; +#2613 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2614 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2615 = ORIENTED_EDGE ( 'NONE', *, *, #4754, .F. ) ; +#2616 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2617 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063086897, -1.000000000000000000, 21.43027221245048253 ) ) ; +#2618 = CIRCLE ( 'NONE', #6240, 1.099999999999989875 ) ; +#2619 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063071265, -1.000000000000000000, -21.43027221245083425 ) ) ; +#2620 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -5.899999999999999467, -22.96370172317620018 ) ) ; +#2621 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063502565, -1.000000000000000000, 21.43027221244042124 ) ) ; +#2622 = EDGE_CURVE ( 'NONE', #2407, #502, #4660, .T. ) ; +#2623 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.7071067811865627828, -0.7071067811865322517 ) ) ; +#2624 = ORIENTED_EDGE ( 'NONE', *, *, #1893, .F. ) ; +#2625 = ORIENTED_EDGE ( 'NONE', *, *, #1118, .T. ) ; +#2626 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063071265, -1.000000000000000000, -16.93027221245082359 ) ) ; +#2627 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2628 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2629 = FACE_OUTER_BOUND ( 'NONE', #2390, .T. ) ; +#2630 = VERTEX_POINT ( 'NONE', #6886 ) ; +#2631 = ORIENTED_EDGE ( 'NONE', *, *, #770, .F. ) ; +#2632 = LINE ( 'NONE', #41, #3863 ) ; +#2633 = FACE_OUTER_BOUND ( 'NONE', #3607, .T. ) ; +#2634 = ORIENTED_EDGE ( 'NONE', *, *, #2310, .T. ) ; +#2635 = EDGE_CURVE ( 'NONE', #571, #5928, #5616, .T. ) ; +#2636 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -5.500000000000000000, 36.73402833653069166 ) ) ; +#2637 = ORIENTED_EDGE ( 'NONE', *, *, #2608, .T. ) ; +#2638 = AXIS2_PLACEMENT_3D ( 'NONE', #2245, #58, #630 ) ; +#2639 = VERTEX_POINT ( 'NONE', #394 ) ; +#2640 = VECTOR ( 'NONE', #4404, 999.9999999999998863 ) ; +#2641 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2642 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, -8.000000000000000000, 63.49999999999972289 ) ) ; +#2643 = ADVANCED_FACE ( 'NONE', ( #2444 ), #2938, .T. ) ; +#2644 = LINE ( 'NONE', #926, #5590 ) ; +#2645 = VECTOR ( 'NONE', #4387, 1000.000000000000114 ) ; +#2646 = FACE_OUTER_BOUND ( 'NONE', #79, .T. ) ; +#2647 = AXIS2_PLACEMENT_3D ( 'NONE', #5535, #5647, #795 ) ; +#2648 = DIRECTION ( 'NONE', ( -0.9238795325112835188, 0.000000000000000000, -0.3826834323650976089 ) ) ; +#2649 = ORIENTED_EDGE ( 'NONE', *, *, #4846, .F. ) ; +#2650 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2651 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2652 = VECTOR ( 'NONE', #2091, 1000.000000000000000 ) ; +#2653 = LINE ( 'NONE', #3792, #5951 ) ; +#2654 = AXIS2_PLACEMENT_3D ( 'NONE', #5238, #6871, #3132 ) ; +#2655 = CARTESIAN_POINT ( 'NONE', ( -52.50000000000027001, -3.000000000000000000, -44.49999999999971578 ) ) ; +#2656 = AXIS2_PLACEMENT_3D ( 'NONE', #3961, #6727, #6580 ) ; +#2657 = VECTOR ( 'NONE', #2242, 1000.000000000000000 ) ; +#2658 = EDGE_CURVE ( 'NONE', #6763, #5509, #629, .T. ) ; +#2659 = CYLINDRICAL_SURFACE ( 'NONE', #6726, 40.55000000000109139 ) ; +#2660 = FACE_OUTER_BOUND ( 'NONE', #6783, .T. ) ; +#2661 = ORIENTED_EDGE ( 'NONE', *, *, #6181, .F. ) ; +#2662 = ORIENTED_EDGE ( 'NONE', *, *, #6335, .F. ) ; +#2663 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2664 = ADVANCED_FACE ( 'NONE', ( #326 ), #3621, .F. ) ; +#2665 = AXIS2_PLACEMENT_3D ( 'NONE', #2293, #6056, #1213 ) ; +#2666 = FACE_OUTER_BOUND ( 'NONE', #472, .T. ) ; +#2667 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000026290, -8.000000000000000000, -33.49999999999970868 ) ) ; +#2668 = EDGE_CURVE ( 'NONE', #98, #2995, #170, .T. ) ; +#2669 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -5.899999999999999467, 24.46370172317529068 ) ) ; +#2670 = ADVANCED_FACE ( 'NONE', ( #5250 ), #5681, .F. ) ; +#2671 = AXIS2_PLACEMENT_3D ( 'NONE', #833, #2974, #3549 ) ; +#2672 = ORIENTED_EDGE ( 'NONE', *, *, #1491, .F. ) ; +#2673 = ORIENTED_EDGE ( 'NONE', *, *, #4439, .F. ) ; +#2674 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, -0.4999999999999886202, 22.03027221244568779 ) ) ; +#2675 = CARTESIAN_POINT ( 'NONE', ( -53.45932926627796888, -6.700000000000000178, -17.27281431613948826 ) ) ; +#2676 = FACE_BOUND ( 'NONE', #2826, .T. ) ; +#2677 = ADVANCED_FACE ( 'NONE', ( #1437 ), #4587, .F. ) ; +#2678 = ORIENTED_EDGE ( 'NONE', *, *, #3982, .F. ) ; +#2679 = VERTEX_POINT ( 'NONE', #360 ) ; +#2680 = PLANE ( 'NONE', #1019 ) ; +#2681 = CARTESIAN_POINT ( 'NONE', ( -52.69999999572387139, 0.000000000000000000, -63.49999999999969447 ) ) ; +#2682 = ADVANCED_FACE ( 'NONE', ( #6237 ), #5758, .F. ) ; +#2683 = LINE ( 'NONE', #6473, #3204 ) ; +#2684 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, 0.000000000000000000 ) ) ; +#2685 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -6.700000000000000178, 36.73402833653069166 ) ) ; +#2686 = VERTEX_POINT ( 'NONE', #1885 ) ; +#2687 = CARTESIAN_POINT ( 'NONE', ( 33.45447221780229086, -5.899999999999999467, 8.986531213325664069 ) ) ; +#2688 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.299999999999999822, 0.000000000000000000 ) ) ; +#2689 = LINE ( 'NONE', #4895, #6853 ) ; +#2690 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, -1.000000000000000000, 20.83027221244568850 ) ) ; +#2691 = CARTESIAN_POINT ( 'NONE', ( 30.01032132651195639, -2.200000000000000622, -17.30144700593806917 ) ) ; +#2692 = VERTEX_POINT ( 'NONE', #1396 ) ; +#2693 = ORIENTED_EDGE ( 'NONE', *, *, #142, .F. ) ; +#2694 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063086897, -1.000000000000000000, 25.93027221245049319 ) ) ; +#2695 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, -1.000000000000000000, -52.83725382063754239 ) ) ; +#2696 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, -1.000000000000000000, -51.13725382063752534 ) ) ; +#2697 = EDGE_CURVE ( 'NONE', #2561, #5692, #3459, .T. ) ; +#2698 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#2699 = EDGE_CURVE ( 'NONE', #4647, #4527, #5051, .T. ) ; +#2700 = AXIS2_PLACEMENT_3D ( 'NONE', #6216, #3029, #3665 ) ; +#2701 = ADVANCED_FACE ( 'NONE', ( #6849 ), #1988, .F. ) ; +#2702 = ORIENTED_EDGE ( 'NONE', *, *, #5434, .F. ) ; +#2703 = LINE ( 'NONE', #1014, #2054 ) ; +#2704 = AXIS2_PLACEMENT_3D ( 'NONE', #1584, #3162, #2139 ) ; +#2705 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980706524, -2.200000000000000622, -30.50000000000000355 ) ) ; +#2706 = FACE_BOUND ( 'NONE', #5496, .T. ) ; +#2707 = CIRCLE ( 'NONE', #1586, 28.64999999999999147 ) ; +#2708 = EDGE_CURVE ( 'NONE', #6030, #2603, #1994, .T. ) ; +#2709 = ORIENTED_EDGE ( 'NONE', *, *, #3055, .F. ) ; +#2710 = EDGE_LOOP ( 'NONE', ( #1829, #1803, #109, #4259 ) ) ; +#2711 = VERTEX_POINT ( 'NONE', #5915 ) ; +#2712 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2713 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2714 = CIRCLE ( 'NONE', #5997, 25.30000000000000071 ) ; +#2715 = CARTESIAN_POINT ( 'NONE', ( -39.95819837980435096, -2.200000000000000622, -60.50000000000001421 ) ) ; +#2716 = VERTEX_POINT ( 'NONE', #3183 ) ; +#2717 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2718 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, -1.000000000000000000, -21.43027221245303338 ) ) ; +#2719 = CIRCLE ( 'NONE', #5112, 1.500000000000001332 ) ; +#2720 = FACE_OUTER_BOUND ( 'NONE', #3688, .T. ) ; +#2721 = EDGE_CURVE ( 'NONE', #2603, #3546, #2653, .T. ) ; +#2722 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2723 = CYLINDRICAL_SURFACE ( 'NONE', #6837, 1.500000000000001332 ) ; +#2724 = EDGE_LOOP ( 'NONE', ( #1048, #3817, #6747, #6015 ) ) ; +#2725 = VECTOR ( 'NONE', #271, 999.9999999999998863 ) ; +#2726 = ORIENTED_EDGE ( 'NONE', *, *, #6114, .F. ) ; +#2727 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2728 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2729 = FACE_OUTER_BOUND ( 'NONE', #1684, .T. ) ; +#2730 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2731 = EDGE_CURVE ( 'NONE', #6640, #787, #2890, .T. ) ; +#2732 = VERTEX_POINT ( 'NONE', #5881 ) ; +#2733 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2734 = CARTESIAN_POINT ( 'NONE', ( -30.45000000000150564, -6.700000000000000178, -29.00000000000000000 ) ) ; +#2735 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2736 = EDGE_CURVE ( 'NONE', #1380, #4632, #63, .T. ) ; +#2737 = ORIENTED_EDGE ( 'NONE', *, *, #3539, .F. ) ; +#2738 = VERTEX_POINT ( 'NONE', #1034 ) ; +#2739 = EDGE_CURVE ( 'NONE', #1021, #2407, #3912, .T. ) ; +#2740 = ORIENTED_EDGE ( 'NONE', *, *, #4442, .T. ) ; +#2741 = CARTESIAN_POINT ( 'NONE', ( -50.01517837498793995, -2.200000000000000622, 25.58773010875140841 ) ) ; +#2742 = EDGE_CURVE ( 'NONE', #6632, #2440, #4793, .T. ) ; +#2743 = EDGE_CURVE ( 'NONE', #5784, #2366, #1532, .T. ) ; +#2744 = CARTESIAN_POINT ( 'NONE', ( -29.36379310344975480, -5.899999999999999467, -27.96551724137933803 ) ) ; +#2745 = CONICAL_SURFACE ( 'NONE', #3555, 1.099999999999962119, 0.7853981633974463916 ) ; +#2746 = AXIS2_PLACEMENT_3D ( 'NONE', #4194, #1503, #5884 ) ; +#2747 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063502565, -6.700000000000000178, 25.93027221244043190 ) ) ; +#2748 = ORIENTED_EDGE ( 'NONE', *, *, #3834, .F. ) ; +#2749 = MECHANICAL_CONTEXT ( 'NONE', #1371, 'mechanical' ) ; +#2750 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -2.400000000000000355, -1.500000000000004219 ) ) ; +#2751 = VECTOR ( 'NONE', #2514, 1000.000000000000000 ) ; +#2752 = LINE ( 'NONE', #4392, #3102 ) ; +#2753 = VECTOR ( 'NONE', #6508, 1000.000000000000000 ) ; +#2754 = CARTESIAN_POINT ( 'NONE', ( -40.17369852021978005, -6.700000000000000178, -11.76972587644107371 ) ) ; +#2755 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, 0.000000000000000000, 63.49999999999972289 ) ) ; +#2756 = EDGE_CURVE ( 'NONE', #1677, #2002, #3684, .T. ) ; +#2757 = VERTEX_POINT ( 'NONE', #4831 ) ; +#2758 = ORIENTED_EDGE ( 'NONE', *, *, #546, .F. ) ; +#2759 = EDGE_CURVE ( 'NONE', #2463, #2051, #2087, .T. ) ; +#2760 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2761 = AXIS2_PLACEMENT_3D ( 'NONE', #5587, #5665, #3379 ) ; +#2762 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.800000000000000488, -22.96370172317620018 ) ) ; +#2763 = CARTESIAN_POINT ( 'NONE', ( 10.38390657767673275, -6.700000000000000178, 39.24772366876674567 ) ) ; +#2764 = CIRCLE ( 'NONE', #46, 1.500000000000001332 ) ; +#2765 = CYLINDRICAL_SURFACE ( 'NONE', #333, 4.500000000000232703 ) ; +#2766 = VECTOR ( 'NONE', #568, 1000.000000000000000 ) ; +#2767 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2768 = CIRCLE ( 'NONE', #6742, 6.000000000002864375 ) ; +#2769 = ORIENTED_EDGE ( 'NONE', *, *, #6129, .F. ) ; +#2770 = CARTESIAN_POINT ( 'NONE', ( -33.45447221780229086, -2.200000000000000622, -8.986531213325664069 ) ) ; +#2771 = LINE ( 'NONE', #2169, #790 ) ; +#2772 = LINE ( 'NONE', #2203, #417 ) ; +#2773 = VERTEX_POINT ( 'NONE', #6514 ) ; +#2774 = VECTOR ( 'NONE', #5522, 1000.000000000000000 ) ; +#2775 = ORIENTED_EDGE ( 'NONE', *, *, #4535, .T. ) ; +#2776 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2777 = VERTEX_POINT ( 'NONE', #1105 ) ; +#2778 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, -0.4999999999999886202, -21.43027221245303338 ) ) ; +#2779 = EDGE_CURVE ( 'NONE', #3358, #977, #1552, .T. ) ; +#2780 = CYLINDRICAL_SURFACE ( 'NONE', #1186, 1.500000000000001332 ) ; +#2781 = EDGE_CURVE ( 'NONE', #898, #1224, #1632, .T. ) ; +#2782 = EDGE_CURVE ( 'NONE', #374, #4397, #5393, .T. ) ; +#2783 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.7071067811865627828, -0.7071067811865322517 ) ) ; +#2784 = ORIENTED_EDGE ( 'NONE', *, *, #4737, .T. ) ; +#2785 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2786 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -6.700000000000000178, -6.000000000000001776 ) ) ; +#2787 = VECTOR ( 'NONE', #5609, 1000.000000000000000 ) ; +#2788 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2789 = DIRECTION ( 'NONE', ( 3.083952846180830733E-15, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2790 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2791 = AXIS2_PLACEMENT_3D ( 'NONE', #804, #5011, #188 ) ; +#2792 = EDGE_CURVE ( 'NONE', #4166, #1111, #1665, .T. ) ; +#2793 = ORIENTED_EDGE ( 'NONE', *, *, #5790, .T. ) ; +#2794 = ORIENTED_EDGE ( 'NONE', *, *, #280, .F. ) ; +#2795 = VERTEX_POINT ( 'NONE', #3248 ) ; +#2796 = CARTESIAN_POINT ( 'NONE', ( 10.38390657767673275, -5.899999999999999467, 40.74772366876675278 ) ) ; +#2797 = CARTESIAN_POINT ( 'NONE', ( 39.29417823468537563, -6.700000000000000178, 10.01349373899374307 ) ) ; +#2798 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2799 = FACE_OUTER_BOUND ( 'NONE', #838, .T. ) ; +#2800 = EDGE_CURVE ( 'NONE', #5838, #2773, #5423, .T. ) ; +#2801 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#2802 = ORIENTED_EDGE ( 'NONE', *, *, #620, .F. ) ; +#2803 = ORIENTED_EDGE ( 'NONE', *, *, #1285, .F. ) ; +#2804 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2805 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#2806 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2807 = AXIS2_PLACEMENT_3D ( 'NONE', #4968, #6527, #1082 ) ; +#2808 = ORIENTED_EDGE ( 'NONE', *, *, #2743, .F. ) ; +#2809 = VERTEX_POINT ( 'NONE', #457 ) ; +#2810 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2811 = ORIENTED_EDGE ( 'NONE', *, *, #1607, .T. ) ; +#2812 = CARTESIAN_POINT ( 'NONE', ( -48.50000000000026290, -3.000000000000000000, 47.49999999999972289 ) ) ; +#2813 = AXIS2_PLACEMENT_3D ( 'NONE', #544, #3191, #467 ) ; +#2814 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -6.700000000000000178, 0.000000000000000000 ) ) ; +#2815 = EDGE_CURVE ( 'NONE', #1841, #5928, #6479, .T. ) ; +#2816 = CARTESIAN_POINT ( 'NONE', ( -27.93000000000074579, -1.800000000000000711, -63.49999999999972289 ) ) ; +#2817 = EDGE_LOOP ( 'NONE', ( #5255, #313 ) ) ; +#2818 = PERSON_AND_ORGANIZATION ( #2507, #6702 ) ; +#2819 = CARTESIAN_POINT ( 'NONE', ( 48.50000000000026290, -3.000000000000000000, 52.52499999999972147 ) ) ; +#2820 = CARTESIAN_POINT ( 'NONE', ( -2.680147770384166961E-13, 11.64513216797408823, -51.94976107412088595 ) ) ; +#2821 = VECTOR ( 'NONE', #6024, 1000.000000000000000 ) ; +#2822 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#2823 = CARTESIAN_POINT ( 'NONE', ( -2.680147770384166961E-13, 11.64513216797408823, -51.94976107412088595 ) ) ; +#2824 = VERTEX_POINT ( 'NONE', #6944 ) ; +#2825 = ORIENTED_EDGE ( 'NONE', *, *, #1835, .F. ) ; +#2826 = EDGE_LOOP ( 'NONE', ( #1189, #3866 ) ) ; +#2827 = AXIS2_PLACEMENT_3D ( 'NONE', #423, #4359, #4253 ) ; +#2828 = CYLINDRICAL_SURFACE ( 'NONE', #1257, 4.500000000000230926 ) ; +#2829 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063502565, -6.700000000000000178, -21.43027221244042124 ) ) ; +#2830 = CARTESIAN_POINT ( 'NONE', ( 1.722075445645174341, -2.200000000000000622, 4.157457896306349987 ) ) ; +#2831 = CARTESIAN_POINT ( 'NONE', ( -48.50000000000026290, -3.000000000000000000, 42.47499999999972431 ) ) ; +#2832 = ADVANCED_FACE ( 'NONE', ( #566 ), #4361, .F. ) ; +#2833 = AXIS2_PLACEMENT_3D ( 'NONE', #1064, #2122, #6446 ) ; +#2834 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2835 = VERTEX_POINT ( 'NONE', #1568 ) ; +#2836 = VERTEX_POINT ( 'NONE', #3216 ) ; +#2837 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, 0.000000000000000000, 22.03027221243706180 ) ) ; +#2838 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#2839 = AXIS2_PLACEMENT_3D ( 'NONE', #1050, #5993, #4905 ) ; +#2840 = LINE ( 'NONE', #5621, #5297 ) ; +#2841 = ORIENTED_EDGE ( 'NONE', *, *, #770, .T. ) ; +#2842 = ORIENTED_EDGE ( 'NONE', *, *, #238, .F. ) ; +#2843 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2844 = EDGE_CURVE ( 'NONE', #6326, #4332, #3857, .T. ) ; +#2845 = ORIENTED_EDGE ( 'NONE', *, *, #6112, .F. ) ; +#2846 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2847 = CYLINDRICAL_SURFACE ( 'NONE', #4134, 40.55000000000109139 ) ; +#2848 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -5.500000000000000000, 30.73402833653069521 ) ) ; +#2849 = EDGE_LOOP ( 'NONE', ( #2267, #3150 ) ) ; +#2850 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2851 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2852 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2853 = CARTESIAN_POINT ( 'NONE', ( -8.986531213325546830, -2.200000000000000622, 33.45447221780232638 ) ) ; +#2854 = AXIS2_PLACEMENT_3D ( 'NONE', #4295, #3760, #1073 ) ; +#2855 = CYLINDRICAL_SURFACE ( 'NONE', #1627, 1.500000000000001332 ) ; +#2856 = ORIENTED_EDGE ( 'NONE', *, *, #6740, .F. ) ; +#2857 = ORIENTED_EDGE ( 'NONE', *, *, #6520, .T. ) ; +#2858 = ORIENTED_EDGE ( 'NONE', *, *, #5988, .F. ) ; +#2859 = EDGE_LOOP ( 'NONE', ( #6351, #638, #3895, #3887, #4838, #5601 ) ) ; +#2860 = CARTESIAN_POINT ( 'NONE', ( -1.722075445644041469, -2.200000000000000622, 4.157457896303436762 ) ) ; +#2861 = AXIS2_PLACEMENT_3D ( 'NONE', #4183, #2582, #6880 ) ; +#2862 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2863 = AXIS2_PLACEMENT_3D ( 'NONE', #5215, #4824, #385 ) ; +#2864 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 4, + ( #3719, #1164, #6986, #1601, #3218 ), + .UNSPECIFIED., .F., .F., + ( 5, 5 ), + ( 0.000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#2865 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, -8.000000000000000000, -63.49999999999972289 ) ) ; +#2866 = ADVANCED_FACE ( 'NONE', ( #5556 ), #1798, .F. ) ; +#2867 = CIRCLE ( 'NONE', #2414, 1.500000000000001332 ) ; +#2868 = CARTESIAN_POINT ( 'NONE', ( -21.43027221245029068, -1.000000000000000000, -51.73725382063096134 ) ) ; +#2869 = EDGE_CURVE ( 'NONE', #3519, #6083, #4541, .T. ) ; +#2870 = AXIS2_PLACEMENT_3D ( 'NONE', #6718, #4566, #2425 ) ; +#2871 = VERTEX_POINT ( 'NONE', #2895 ) ; +#2872 = ORIENTED_EDGE ( 'NONE', *, *, #5087, .F. ) ; +#2873 = EDGE_CURVE ( 'NONE', #726, #1276, #5452, .T. ) ; +#2874 = DIRECTION ( 'NONE', ( -0.7071067811865536790, 0.000000000000000000, -0.7071067811865414665 ) ) ; +#2875 = AXIS2_PLACEMENT_3D ( 'NONE', #3284, #2184, #6411 ) ; +#2876 = EDGE_CURVE ( 'NONE', #4744, #6771, #6516, .T. ) ; +#2877 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2878 = AXIS2_PLACEMENT_3D ( 'NONE', #1326, #3477, #2941 ) ; +#2879 = FACE_OUTER_BOUND ( 'NONE', #296, .T. ) ; +#2880 = AXIS2_PLACEMENT_3D ( 'NONE', #2868, #682, #1147 ) ; +#2881 = CIRCLE ( 'NONE', #6861, 1.500000000000001332 ) ; +#2882 = CIRCLE ( 'NONE', #2001, 0.5999999999999998668 ) ; +#2883 = ORIENTED_EDGE ( 'NONE', *, *, #127, .T. ) ; +#2884 = VERTEX_POINT ( 'NONE', #3927 ) ; +#2885 = FACE_OUTER_BOUND ( 'NONE', #1168, .T. ) ; +#2886 = ORIENTED_EDGE ( 'NONE', *, *, #4051, .T. ) ; +#2887 = CYLINDRICAL_SURFACE ( 'NONE', #5399, 1.499999999999999556 ) ; +#2888 = EDGE_CURVE ( 'NONE', #3061, #1223, #3960, .T. ) ; +#2889 = CARTESIAN_POINT ( 'NONE', ( 39.95819837980343436, -8.000000000000000000, -46.10008445871692828 ) ) ; +#2890 = CIRCLE ( 'NONE', #4033, 4.500000000000013323 ) ; +#2891 = ORIENTED_EDGE ( 'NONE', *, *, #4909, .F. ) ; +#2892 = LINE ( 'NONE', #3535, #1945 ) ; +#2893 = ORIENTED_EDGE ( 'NONE', *, *, #632, .F. ) ; +#2894 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2895 = CARTESIAN_POINT ( 'NONE', ( -28.93000000000074579, -2.200000000000000622, -55.49999999999972289 ) ) ; +#2896 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244847169, -1.000000000000000000, -47.23725382063096134 ) ) ; +#2897 = AXIS2_PLACEMENT_3D ( 'NONE', #4914, #4887, #3306 ) ; +#2898 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2899 = PLANE ( 'NONE', #2298 ) ; +#2900 = VERTEX_POINT ( 'NONE', #6078 ) ; +#2901 = ORIENTED_EDGE ( 'NONE', *, *, #4375, .T. ) ; +#2902 = ORIENTED_EDGE ( 'NONE', *, *, #1033, .T. ) ; +#2903 = VERTEX_POINT ( 'NONE', #6690 ) ; +#2904 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -5.500000000000000000, 51.94976107412009725 ) ) ; +#2905 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -5.500000000000000000, 30.73402833653069521 ) ) ; +#2906 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2907 = AXIS2_PLACEMENT_3D ( 'NONE', #4850, #3846, #2806 ) ; +#2908 = CARTESIAN_POINT ( 'NONE', ( -5.800000000000267164, -2.200000000000000622, -58.50000000000000000 ) ) ; +#2909 = CARTESIAN_POINT ( 'NONE', ( -33.45447221780229086, -5.899999999999999467, -8.986531213325664069 ) ) ; +#2910 = ORIENTED_EDGE ( 'NONE', *, *, #3250, .F. ) ; +#2911 = ORIENTED_EDGE ( 'NONE', *, *, #536, .T. ) ; +#2912 = EDGE_CURVE ( 'NONE', #2561, #6882, #3888, .T. ) ; +#2913 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2914 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2915 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2916 = ORIENTED_EDGE ( 'NONE', *, *, #2876, .T. ) ; +#2917 = VERTEX_POINT ( 'NONE', #597 ) ; +#2918 = AXIS2_PLACEMENT_3D ( 'NONE', #5319, #6571, #6983 ) ; +#2919 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -6.700000000000000178, 0.000000000000000000 ) ) ; +#2920 = ORIENTED_EDGE ( 'NONE', *, *, #5745, .F. ) ; +#2921 = EDGE_CURVE ( 'NONE', #14, #827, #5488, .T. ) ; +#2922 = CARTESIAN_POINT ( 'NONE', ( 53.45932926627796888, -6.700000000000000178, 17.27281431613948826 ) ) ; +#2923 = ORIENTED_EDGE ( 'NONE', *, *, #5442, .T. ) ; +#2924 = CARTESIAN_POINT ( 'NONE', ( -36.15552248038196126, -6.700000000000000178, 21.47046096782009883 ) ) ; +#2925 = ORIENTED_EDGE ( 'NONE', *, *, #6682, .T. ) ; +#2926 = AXIS2_PLACEMENT_3D ( 'NONE', #111, #2838, #2269 ) ; +#2927 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#2928 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980706524, -2.200000000000000622, -30.50000000000000355 ) ) ; +#2929 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2930 = VECTOR ( 'NONE', #4784, 999.9999999999998863 ) ; +#2931 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2932 = ORIENTED_EDGE ( 'NONE', *, *, #3301, .T. ) ; +#2933 = CARTESIAN_POINT ( 'NONE', ( -40.74772366876678120, -5.899999999999999467, 10.38390657767658531 ) ) ; +#2934 = ORIENTED_EDGE ( 'NONE', *, *, #6430, .T. ) ; +#2935 = VERTEX_POINT ( 'NONE', #4924 ) ; +#2936 = VERTEX_POINT ( 'NONE', #1725 ) ; +#2937 = LINE ( 'NONE', #5076, #5551 ) ; +#2938 = PLANE ( 'NONE', #6290 ) ; +#2939 = EDGE_CURVE ( 'NONE', #4632, #6257, #6009, .T. ) ; +#2940 = CARTESIAN_POINT ( 'NONE', ( 1.722075445645237179, -5.899999999999999467, -4.157457896306325118 ) ) ; +#2941 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2942 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2943 = EDGE_LOOP ( 'NONE', ( #3935, #2886, #1278, #1112 ) ) ; +#2944 = ORIENTED_EDGE ( 'NONE', *, *, #1366, .T. ) ; +#2945 = LINE ( 'NONE', #4558, #4773 ) ; +#2946 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2947 = LINE ( 'NONE', #5544, #1336 ) ; +#2948 = VECTOR ( 'NONE', #3899, 1000.000000000000000 ) ; +#2949 = EDGE_LOOP ( 'NONE', ( #6716, #246, #5615, #3033 ) ) ; +#2950 = VERTEX_POINT ( 'NONE', #1237 ) ; +#2951 = CIRCLE ( 'NONE', #6926, 0.6000000000000033085 ) ; +#2952 = CARTESIAN_POINT ( 'NONE', ( -1.722075445644041469, -2.200000000000000622, 4.157457896303436762 ) ) ; +#2953 = ORIENTED_EDGE ( 'NONE', *, *, #6517, .F. ) ; +#2954 = EDGE_CURVE ( 'NONE', #5562, #1731, #4376, .T. ) ; +#2955 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#2956 = ORIENTED_EDGE ( 'NONE', *, *, #3922, .F. ) ; +#2957 = EDGE_CURVE ( 'NONE', #1453, #5605, #1135, .T. ) ; +#2958 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2959 = VERTEX_POINT ( 'NONE', #2786 ) ; +#2960 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .AHEAD. ) ; +#2961 = EDGE_CURVE ( 'NONE', #2106, #3916, #6627, .T. ) ; +#2962 = EDGE_CURVE ( 'NONE', #2917, #897, #5171, .T. ) ; +#2963 = FACE_OUTER_BOUND ( 'NONE', #6502, .T. ) ; +#2964 = LINE ( 'NONE', #4614, #1086 ) ; +#2965 = FACE_BOUND ( 'NONE', #1451, .T. ) ; +#2966 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2967 = LINE ( 'NONE', #3425, #1178 ) ; +#2968 = EDGE_LOOP ( 'NONE', ( #4201, #6105, #1605, #1741, #1948, #2301 ) ) ; +#2969 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000026290, 0.000000000000000000, 33.49999999999970868 ) ) ; +#2970 = VERTEX_POINT ( 'NONE', #4391 ) ; +#2971 = ORIENTED_EDGE ( 'NONE', *, *, #1811, .F. ) ; +#2972 = ORIENTED_EDGE ( 'NONE', *, *, #6534, .F. ) ; +#2973 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2974 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2975 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063086897, -1.000000000000000000, 16.93027221245046832 ) ) ; +#2976 = EDGE_CURVE ( 'NONE', #1113, #265, #2206, .T. ) ; +#2977 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#2978 = LINE ( 'NONE', #3553, #951 ) ; +#2979 = VERTEX_POINT ( 'NONE', #6046 ) ; +#2980 = VECTOR ( 'NONE', #2475, 1000.000000000000000 ) ; +#2981 = ORIENTED_EDGE ( 'NONE', *, *, #2136, .F. ) ; +#2982 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, -8.000000000000000000, 63.49999999999972289 ) ) ; +#2983 = VECTOR ( 'NONE', #937, 1000.000000000000000 ) ; +#2984 = CARTESIAN_POINT ( 'NONE', ( -52.69999999572387139, 0.000000000000000000, -63.49999999999969447 ) ) ; +#2985 = PLANE ( 'NONE', #4941 ) ; +#2986 = VECTOR ( 'NONE', #3646, 1000.000000000000000 ) ; +#2987 = VECTOR ( 'NONE', #3783, 999.9999999999998863 ) ; +#2988 = AXIS2_PLACEMENT_3D ( 'NONE', #4090, #2520, #1003 ) ; +#2989 = ORIENTED_EDGE ( 'NONE', *, *, #3714, .F. ) ; +#2990 = ORIENTED_EDGE ( 'NONE', *, *, #6823, .F. ) ; +#2991 = CIRCLE ( 'NONE', #3791, 4.500000000000013323 ) ; +#2992 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#2993 = ORIENTED_EDGE ( 'NONE', *, *, #2343, .F. ) ; +#2994 = CARTESIAN_POINT ( 'NONE', ( -39.95819837980435096, -2.200000000000000622, -32.00000000000000000 ) ) ; +#2995 = VERTEX_POINT ( 'NONE', #3350 ) ; +#2996 = FACE_OUTER_BOUND ( 'NONE', #6758, .T. ) ; +#2997 = CIRCLE ( 'NONE', #406, 5.025000000000002132 ) ; +#2998 = ORIENTED_EDGE ( 'NONE', *, *, #6972, .F. ) ; +#2999 = EDGE_CURVE ( 'NONE', #4261, #2679, #666, .T. ) ; +#3000 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .AHEAD. ) ; +#3001 = CARTESIAN_POINT ( 'NONE', ( 53.45932926627647674, -2.200000000000000622, -17.27281431614175844 ) ) ; +#3002 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3003 = CARTESIAN_POINT ( 'NONE', ( -52.50000000000027001, -3.000000000000000000, -49.52499999999971436 ) ) ; +#3004 = EDGE_CURVE ( 'NONE', #1201, #3394, #4989, .T. ) ; +#3005 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3006 = ORIENTED_EDGE ( 'NONE', *, *, #3584, .F. ) ; +#3007 = CYLINDRICAL_SURFACE ( 'NONE', #264, 1.499999999999999556 ) ; +#3008 = ORIENTED_EDGE ( 'NONE', *, *, #6091, .F. ) ; +#3009 = VERTEX_POINT ( 'NONE', #5024 ) ; +#3010 = ORIENTED_EDGE ( 'NONE', *, *, #6645, .F. ) ; +#3011 = FACE_OUTER_BOUND ( 'NONE', #4920, .T. ) ; +#3012 = AXIS2_PLACEMENT_3D ( 'NONE', #3995, #5242, #3501 ) ; +#3013 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -2.400000000000000355, 38.23402833653069877 ) ) ; +#3014 = DIRECTION ( 'NONE', ( -0.3826834323650974978, 0.000000000000000000, 0.9238795325112836299 ) ) ; +#3015 = FACE_BOUND ( 'NONE', #184, .T. ) ; +#3016 = ADVANCED_FACE ( 'NONE', ( #168 ), #2392, .F. ) ; +#3017 = CARTESIAN_POINT ( 'NONE', ( -41.45819837980560862, -6.700000000000000178, -46.10008445871534377 ) ) ; +#3018 = ORIENTED_EDGE ( 'NONE', *, *, #5243, .T. ) ; +#3019 = ORIENTED_EDGE ( 'NONE', *, *, #6637, .T. ) ; +#3020 = FACE_OUTER_BOUND ( 'NONE', #3585, .T. ) ; +#3021 = EDGE_CURVE ( 'NONE', #1296, #1111, #1199, .T. ) ; +#3022 = LINE ( 'NONE', #3659, #3947 ) ; +#3023 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3024 = AXIS2_PLACEMENT_3D ( 'NONE', #2669, #3766, #2263 ) ; +#3025 = ORIENTED_EDGE ( 'NONE', *, *, #5325, .T. ) ; +#3026 = AXIS2_PLACEMENT_3D ( 'NONE', #2379, #3660, #6384 ) ; +#3027 = EDGE_LOOP ( 'NONE', ( #947, #198 ) ) ; +#3028 = MANIFOLD_SOLID_BREP ( 'Բ½Ç5', #6310 ) ; +#3029 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3030 = ORIENTED_EDGE ( 'NONE', *, *, #2759, .T. ) ; +#3031 = ADVANCED_FACE ( 'NONE', ( #5748 ), #3037, .F. ) ; +#3032 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, -1.000000000000000000, -51.73725382063397404 ) ) ; +#3033 = ORIENTED_EDGE ( 'NONE', *, *, #3251, .T. ) ; +#3034 = EDGE_LOOP ( 'NONE', ( #1860, #1408, #413, #4369, #1390, #3707, #5379, #6676 ) ) ; +#3035 = SECURITY_CLASSIFICATION_LEVEL ( 'unclassified' ) ; +#3036 = CARTESIAN_POINT ( 'NONE', ( -1.722075445645203429, -5.899999999999999467, -4.157457896306338441 ) ) ; +#3037 = CYLINDRICAL_SURFACE ( 'NONE', #1758, 5.025000000000002132 ) ; +#3038 = AXIS2_PLACEMENT_3D ( 'NONE', #5834, #6393, #3567 ) ; +#3039 = ADVANCED_FACE ( 'NONE', ( #5635 ), #4112, .T. ) ; +#3040 = CARTESIAN_POINT ( 'NONE', ( 36.72954762893090219, -5.899999999999999467, 20.08464166905100612 ) ) ; +#3041 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3042 = CYLINDRICAL_SURFACE ( 'NONE', #5139, 1.500000000000001332 ) ; +#3043 = AXIS2_PLACEMENT_3D ( 'NONE', #1292, #6673, #2805 ) ; +#3044 = EDGE_LOOP ( 'NONE', ( #4583, #2625, #5471, #4322, #3430, #7006, #5360 ) ) ; +#3045 = ORIENTED_EDGE ( 'NONE', *, *, #2181, .T. ) ; +#3046 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.800000000000000488, -24.46370172317620018 ) ) ; +#3047 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3048 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387191874, -3.200000000000000622, -53.46446609406757489 ) ) ; +#3049 = EDGE_CURVE ( 'NONE', #548, #4910, #4833, .T. ) ; +#3050 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3051 = CARTESIAN_POINT ( 'NONE', ( 33.50000000000029132, -8.000000000000000000, 63.49999999999972289 ) ) ; +#3052 = ORIENTED_EDGE ( 'NONE', *, *, #3090, .F. ) ; +#3053 = ORIENTED_EDGE ( 'NONE', *, *, #3870, .T. ) ; +#3054 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.800000000000000488, 22.96370172317529068 ) ) ; +#3055 = EDGE_CURVE ( 'NONE', #1041, #6623, #5173, .T. ) ; +#3056 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3057 = EDGE_CURVE ( 'NONE', #977, #6662, #6059, .T. ) ; +#3058 = PLANE ( 'NONE', #998 ) ; +#3059 = ADVANCED_FACE ( 'NONE', ( #4078, #6300 ), #4685, .F. ) ; +#3060 = VECTOR ( 'NONE', #2663, 1000.000000000000000 ) ; +#3061 = VERTEX_POINT ( 'NONE', #351 ) ; +#3062 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3063 = VECTOR ( 'NONE', #4334, 1000.000000000000000 ) ; +#3064 = ORIENTED_EDGE ( 'NONE', *, *, #57, .T. ) ; +#3065 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3066 = CIRCLE ( 'NONE', #11, 1.499999999999994449 ) ; +#3067 = ADVANCED_FACE ( 'NONE', ( #382 ), #1977, .F. ) ; +#3068 = ORIENTED_EDGE ( 'NONE', *, *, #3653, .T. ) ; +#3069 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .AHEAD. ) ; +#3070 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3071 = CARTESIAN_POINT ( 'NONE', ( -34.92266447387282113, -3.200000000000000622, -35.53553390593242511 ) ) ; +#3072 = LINE ( 'NONE', #4154, #3434 ) ; +#3073 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063502565, -1.000000000000000000, -16.93027221244040703 ) ) ; +#3074 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3075 = ORIENTED_EDGE ( 'NONE', *, *, #3502, .T. ) ; +#3076 = EDGE_LOOP ( 'NONE', ( #4605, #6318, #174, #3201 ) ) ; +#3077 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -5.500000000000000000, 36.73402833653069166 ) ) ; +#3078 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3079 = PLANE ( 'NONE', #2195 ) ; +#3080 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3081 = CARTESIAN_POINT ( 'NONE', ( -36.15552248038196126, -5.899999999999999467, 21.47046096782009883 ) ) ; +#3082 = ORIENTED_EDGE ( 'NONE', *, *, #6490, .F. ) ; +#3083 = ORIENTED_EDGE ( 'NONE', *, *, #5962, .T. ) ; +#3084 = CYLINDRICAL_SURFACE ( 'NONE', #5103, 1.500000000000001332 ) ; +#3085 = CARTESIAN_POINT ( 'NONE', ( -56.16019669858830810, 0.000000000000000000, -56.16019669858773966 ) ) ; +#3086 = EDGE_CURVE ( 'NONE', #889, #6203, #4260, .T. ) ; +#3087 = CARTESIAN_POINT ( 'NONE', ( 52.50000000000027001, -3.000000000000000000, -39.47499999999971720 ) ) ; +#3088 = EDGE_CURVE ( 'NONE', #2716, #1683, #2510, .T. ) ; +#3089 = AXIS2_PLACEMENT_3D ( 'NONE', #4690, #4156, #5246 ) ; +#3090 = EDGE_CURVE ( 'NONE', #6378, #4332, #6402, .T. ) ; +#3091 = AXIS2_PLACEMENT_3D ( 'NONE', #4438, #1217, #6631 ) ; +#3092 = EDGE_CURVE ( 'NONE', #4665, #6669, #316, .T. ) ; +#3093 = ORIENTED_EDGE ( 'NONE', *, *, #1002, .F. ) ; +#3094 = DIRECTION ( 'NONE', ( 8.659560562354915602E-17, -0.7071067811865489050, 0.7071067811865461294 ) ) ; +#3095 = AXIS2_PLACEMENT_3D ( 'NONE', #1433, #3586, #5754 ) ; +#3096 = VERTEX_POINT ( 'NONE', #2431 ) ; +#3097 = VECTOR ( 'NONE', #6404, 1000.000000000000114 ) ; +#3098 = CARTESIAN_POINT ( 'NONE', ( 52.50000000000027001, -3.000000000000000000, -44.49999999999972289 ) ) ; +#3099 = AXIS2_PLACEMENT_3D ( 'NONE', #4897, #1637, #4394 ) ; +#3100 = AXIS2_PLACEMENT_3D ( 'NONE', #1179, #3294, #646 ) ; +#3101 = ORIENTED_EDGE ( 'NONE', *, *, #4150, .F. ) ; +#3102 = VECTOR ( 'NONE', #3757, 1000.000000000000000 ) ; +#3103 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3104 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, 0.000000000000000000, -63.49999999999972289 ) ) ; +#3105 = ADVANCED_FACE ( 'NONE', ( #1872 ), #4651, .F. ) ; +#3106 = AXIS2_PLACEMENT_3D ( 'NONE', #4091, #4663, #6704 ) ; +#3107 = CARTESIAN_POINT ( 'NONE', ( 30.45000000000150919, -2.200000000000000622, -30.50000000000000355 ) ) ; +#3108 = VECTOR ( 'NONE', #6437, 1000.000000000000000 ) ; +#3109 = PLANE ( 'NONE', #5718 ) ; +#3110 = EDGE_CURVE ( 'NONE', #6669, #5134, #4720, .T. ) ; +#3111 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.800000000000000488, -24.46370172317620018 ) ) ; +#3112 = EDGE_LOOP ( 'NONE', ( #2429, #751 ) ) ; +#3113 = CYLINDRICAL_SURFACE ( 'NONE', #2598, 4.500000000000010658 ) ; +#3114 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3115 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3116 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3117 = VECTOR ( 'NONE', #5402, 1000.000000000000000 ) ; +#3118 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3119 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3120 = ORIENTED_EDGE ( 'NONE', *, *, #3752, .T. ) ; +#3121 = VECTOR ( 'NONE', #3145, 1000.000000000000000 ) ; +#3122 = ORIENTED_EDGE ( 'NONE', *, *, #3795, .T. ) ; +#3123 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, 0.000000000000000000, -63.49999999999972289 ) ) ; +#3124 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3125 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3126 = EDGE_CURVE ( 'NONE', #2331, #2950, #2964, .T. ) ; +#3127 = ORIENTED_EDGE ( 'NONE', *, *, #1328, .T. ) ; +#3128 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#3129 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, -0.5000000000000369704, 51.73725382062663414 ) ) ; +#3130 = VERTEX_POINT ( 'NONE', #6804 ) ; +#3131 = AXIS2_PLACEMENT_3D ( 'NONE', #1449, #4803, #5333 ) ; +#3132 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3133 = ORIENTED_EDGE ( 'NONE', *, *, #6637, .F. ) ; +#3134 = ORIENTED_EDGE ( 'NONE', *, *, #1071, .F. ) ; +#3135 = CARTESIAN_POINT ( 'NONE', ( 36.15552248038325445, -5.899999999999999467, 19.97046096781792812 ) ) ; +#3136 = CARTESIAN_POINT ( 'NONE', ( -24.28180162019544142, -2.200000000000000622, -60.00000000000001421 ) ) ; +#3137 = EDGE_CURVE ( 'NONE', #2639, #3246, #1943, .T. ) ; +#3138 = LINE ( 'NONE', #4247, #3097 ) ; +#3139 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063502565, -1.000000000000000000, -21.43027221244042124 ) ) ; +#3140 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3141 = ORIENTED_EDGE ( 'NONE', *, *, #3653, .F. ) ; +#3142 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063071265, -2.200000000000000622, -16.93027221245082359 ) ) ; +#3143 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3144 = CIRCLE ( 'NONE', #4861, 1.500000000000001332 ) ; +#3145 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3146 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3147 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -2.400000000000000355, 36.73402833653069166 ) ) ; +#3148 = CIRCLE ( 'NONE', #3840, 5.025000000000002132 ) ; +#3149 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ; +#3150 = ORIENTED_EDGE ( 'NONE', *, *, #6832, .T. ) ; +#3151 = ORIENTED_EDGE ( 'NONE', *, *, #2635, .F. ) ; +#3152 = EDGE_CURVE ( 'NONE', #2773, #2979, #4854, .T. ) ; +#3153 = CYLINDRICAL_SURFACE ( 'NONE', #920, 1.500000000000001332 ) ; +#3154 = LINE ( 'NONE', #5331, #5385 ) ; +#3155 = CARTESIAN_POINT ( 'NONE', ( -10.38390657767399894, -5.899999999999999467, 40.74772366876744201 ) ) ; +#3156 = CARTESIAN_POINT ( 'NONE', ( -27.93000000000074579, -8.000000000000000000, -63.49999999999972289 ) ) ; +#3157 = CIRCLE ( 'NONE', #1361, 4.500000000000232703 ) ; +#3158 = AXIS2_PLACEMENT_3D ( 'NONE', #3751, #5511, #489 ) ; +#3159 = ORIENTED_EDGE ( 'NONE', *, *, #5202, .F. ) ; +#3160 = ORIENTED_EDGE ( 'NONE', *, *, #1377, .F. ) ; +#3161 = CARTESIAN_POINT ( 'NONE', ( -36.30999999999903594, -1.800000000000000711, -55.49999999999972289 ) ) ; +#3162 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#3163 = ORIENTED_EDGE ( 'NONE', *, *, #2310, .F. ) ; +#3164 = CIRCLE ( 'NONE', #3755, 4.500000000000010658 ) ; +#3165 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3166 = ORIENTED_EDGE ( 'NONE', *, *, #1037, .T. ) ; +#3167 = AXIS2_PLACEMENT_3D ( 'NONE', #3442, #6923, #6824 ) ; +#3168 = ORIENTED_EDGE ( 'NONE', *, *, #3405, .T. ) ; +#3169 = LINE ( 'NONE', #481, #7013 ) ; +#3170 = CARTESIAN_POINT ( 'NONE', ( -36.30999999999903594, -8.000000000000000000, -63.43772963083818439 ) ) ; +#3171 = EDGE_CURVE ( 'NONE', #6471, #1296, #5347, .T. ) ; +#3172 = AXIS2_PLACEMENT_3D ( 'NONE', #3046, #2402, #4729 ) ; +#3173 = CARTESIAN_POINT ( 'NONE', ( 1.722075445644006830, -5.899999999999999467, 4.157457896303450973 ) ) ; +#3174 = EDGE_CURVE ( 'NONE', #4136, #1606, #182, .T. ) ; +#3175 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3176 = EDGE_CURVE ( 'NONE', #6922, #4645, #446, .T. ) ; +#3177 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3178 = EDGE_CURVE ( 'NONE', #6338, #2884, #6328, .T. ) ; +#3179 = ORIENTED_EDGE ( 'NONE', *, *, #1002, .T. ) ; +#3180 = FACE_OUTER_BOUND ( 'NONE', #1870, .T. ) ; +#3181 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3182 = AXIS2_PLACEMENT_3D ( 'NONE', #6529, #7000, #517 ) ; +#3183 = CARTESIAN_POINT ( 'NONE', ( 40.17369852021976584, -5.899999999999999467, 11.76972587644106660 ) ) ; +#3184 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -6.700000000000000178, -30.50000000000000355 ) ) ; +#3185 = FACE_OUTER_BOUND ( 'NONE', #2949, .T. ) ; +#3186 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3187 = ORIENTED_EDGE ( 'NONE', *, *, #585, .F. ) ; +#3188 = EDGE_LOOP ( 'NONE', ( #320, #1169, #3984, #4929 ) ) ; +#3189 = LINE ( 'NONE', #1141, #3063 ) ; +#3190 = FACE_OUTER_BOUND ( 'NONE', #5580, .T. ) ; +#3191 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3192 = LINE ( 'NONE', #576, #1562 ) ; +#3193 = ADVANCED_FACE ( 'NONE', ( #4749 ), #2610, .F. ) ; +#3194 = ORIENTED_EDGE ( 'NONE', *, *, #769, .F. ) ; +#3195 = EDGE_LOOP ( 'NONE', ( #5970, #3906, #4085, #3272, #3596, #4110, #175 ) ) ; +#3196 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3197 = EDGE_CURVE ( 'NONE', #6707, #771, #2548, .T. ) ; +#3198 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245065661, -1.000000000000000000, 51.73725382063078371 ) ) ; +#3199 = ORIENTED_EDGE ( 'NONE', *, *, #4955, .T. ) ; +#3200 = VECTOR ( 'NONE', #399, 1000.000000000000000 ) ; +#3201 = ORIENTED_EDGE ( 'NONE', *, *, #5573, .F. ) ; +#3202 = AXIS2_PLACEMENT_3D ( 'NONE', #3647, #4755, #6981 ) ; +#3203 = VERTEX_POINT ( 'NONE', #6977 ) ; +#3204 = VECTOR ( 'NONE', #1592, 1000.000000000000114 ) ; +#3205 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3206 = FACE_OUTER_BOUND ( 'NONE', #1445, .T. ) ; +#3207 = CIRCLE ( 'NONE', #1971, 1.500000000000001332 ) ; +#3208 = CYLINDRICAL_SURFACE ( 'NONE', #2296, 1.500000000000001332 ) ; +#3209 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3210 = ADVANCED_FACE ( 'NONE', ( #4179 ), #4245, .F. ) ; +#3211 = VECTOR ( 'NONE', #361, 1000.000000000000000 ) ; +#3212 = LINE ( 'NONE', #487, #1066 ) ; +#3213 = ORIENTED_EDGE ( 'NONE', *, *, #4303, .T. ) ; +#3214 = CARTESIAN_POINT ( 'NONE', ( 30.45000000000150919, -6.700000000000000178, -30.50000000000000355 ) ) ; +#3215 = LINE ( 'NONE', #1104, #6813 ) ; +#3216 = CARTESIAN_POINT ( 'NONE', ( 36.72954762893090219, -5.899999999999999467, 20.08464166905100612 ) ) ; +#3217 = AXIS2_PLACEMENT_3D ( 'NONE', #1810, #1738, #5989 ) ; +#3218 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000026290, 0.000000000000000000, -33.49999999999970868 ) ) ; +#3219 = AXIS2_PLACEMENT_3D ( 'NONE', #2432, #5891, #4802 ) ; +#3220 = AXIS2_PLACEMENT_3D ( 'NONE', #2361, #318, #3466 ) ; +#3221 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3222 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -2.200000000000000622, -62.00000000000002132 ) ) ; +#3223 = ORIENTED_EDGE ( 'NONE', *, *, #1300, .T. ) ; +#3224 = ORIENTED_EDGE ( 'NONE', *, *, #5969, .T. ) ; +#3225 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3226 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3227 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3228 = FACE_OUTER_BOUND ( 'NONE', #557, .T. ) ; +#3229 = EDGE_CURVE ( 'NONE', #3472, #4622, #1098, .T. ) ; +#3230 = ORIENTED_EDGE ( 'NONE', *, *, #13, .F. ) ; +#3231 = ORIENTED_EDGE ( 'NONE', *, *, #2486, .T. ) ; +#3232 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3233 = PLANE ( 'NONE', #2034 ) ; +#3234 = ORIENTED_EDGE ( 'NONE', *, *, #5092, .F. ) ; +#3235 = VECTOR ( 'NONE', #3781, 1000.000000000000000 ) ; +#3236 = ORIENTED_EDGE ( 'NONE', *, *, #6225, .T. ) ; +#3237 = ORIENTED_EDGE ( 'NONE', *, *, #3584, .T. ) ; +#3238 = ADVANCED_FACE ( 'NONE', ( #1590 ), #4316, .T. ) ; +#3239 = VERTEX_POINT ( 'NONE', #3643 ) ; +#3240 = CARTESIAN_POINT ( 'NONE', ( -36.15552248038196126, -5.899999999999999467, 21.47046096782009883 ) ) ; +#3241 = CIRCLE ( 'NONE', #772, 1.499999999999999556 ) ; +#3242 = CIRCLE ( 'NONE', #4741, 40.55000000000109139 ) ; +#3243 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3244 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3245 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#3246 = VERTEX_POINT ( 'NONE', #2579 ) ; +#3247 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3248 = CARTESIAN_POINT ( 'NONE', ( -30.01032132651207718, -5.899999999999999467, 17.30144700593785956 ) ) ; +#3249 = CARTESIAN_POINT ( 'NONE', ( 39.29417823468470061, -5.899999999999999467, -10.01349373899637207 ) ) ; +#3250 = EDGE_CURVE ( 'NONE', #6801, #771, #4477, .T. ) ; +#3251 = EDGE_CURVE ( 'NONE', #6649, #4030, #2045, .T. ) ; +#3252 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3253 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3254 = ORIENTED_EDGE ( 'NONE', *, *, #2736, .T. ) ; +#3255 = ORIENTED_EDGE ( 'NONE', *, *, #5696, .T. ) ; +#3256 = ORIENTED_EDGE ( 'NONE', *, *, #549, .F. ) ; +#3257 = CARTESIAN_POINT ( 'NONE', ( 8.986531213328159851, -2.200000000000000622, 33.45447221780118952 ) ) ; +#3258 = LINE ( 'NONE', #1643, #6748 ) ; +#3259 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063502565, -6.700000000000000178, -25.93027221244043190 ) ) ; +#3260 = FACE_OUTER_BOUND ( 'NONE', #737, .T. ) ; +#3261 = EDGE_CURVE ( 'NONE', #578, #4666, #4668, .T. ) ; +#3262 = AXIS2_PLACEMENT_3D ( 'NONE', #695, #2843, #153 ) ; +#3263 = EDGE_CURVE ( 'NONE', #4676, #5865, #1558, .T. ) ; +#3264 = ORIENTED_EDGE ( 'NONE', *, *, #6918, .F. ) ; +#3265 = EDGE_CURVE ( 'NONE', #5714, #4086, #4280, .T. ) ; +#3266 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3267 = ADVANCED_FACE ( 'NONE', ( #3206 ), #5383, .T. ) ; +#3268 = VECTOR ( 'NONE', #5690, 1000.000000000000000 ) ; +#3269 = CARTESIAN_POINT ( 'NONE', ( -10.38390657767399894, -6.700000000000000178, 40.74772366876744201 ) ) ; +#3270 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3271 = CIRCLE ( 'NONE', #2144, 4.500000000000010658 ) ; +#3272 = ORIENTED_EDGE ( 'NONE', *, *, #2756, .T. ) ; +#3273 = ORIENTED_EDGE ( 'NONE', *, *, #813, .T. ) ; +#3274 = ORIENTED_EDGE ( 'NONE', *, *, #6590, .T. ) ; +#3275 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3276 = EDGE_CURVE ( 'NONE', #401, #4545, #1786, .T. ) ; +#3277 = ADVANCED_FACE ( 'NONE', ( #3952 ), #3920, .F. ) ; +#3278 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, -1.000000000000000000, 52.83725382062659293 ) ) ; +#3279 = CIRCLE ( 'NONE', #227, 0.5999999999999998668 ) ; +#3280 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, -8.000000000000000000, 63.49999999999972289 ) ) ; +#3281 = EDGE_LOOP ( 'NONE', ( #888, #4534 ) ) ; +#3282 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3283 = AXIS2_PLACEMENT_3D ( 'NONE', #4262, #6417, #6991 ) ; +#3284 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -5.500000000000000000, 0.000000000000000000 ) ) ; +#3285 = LINE ( 'NONE', #5426, #2424 ) ; +#3286 = FACE_OUTER_BOUND ( 'NONE', #5046, .T. ) ; +#3287 = ORIENTED_EDGE ( 'NONE', *, *, #3126, .F. ) ; +#3288 = CIRCLE ( 'NONE', #5448, 1.499999999999999556 ) ; +#3289 = EDGE_LOOP ( 'NONE', ( #5486, #3958 ) ) ; +#3290 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3291 = CARTESIAN_POINT ( 'NONE', ( -2.086137553520610372E-12, -5.500000000000000000, 57.94976107412009725 ) ) ; +#3292 = FACE_OUTER_BOUND ( 'NONE', #5712, .T. ) ; +#3293 = CYLINDRICAL_SURFACE ( 'NONE', #4967, 1.500000000000001332 ) ; +#3294 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3295 = EDGE_LOOP ( 'NONE', ( #1432, #1042, #523, #6584 ) ) ; +#3296 = EDGE_CURVE ( 'NONE', #3246, #6822, #6614, .T. ) ; +#3297 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3298 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3299 = VERTEX_POINT ( 'NONE', #5513 ) ; +#3300 = EDGE_CURVE ( 'NONE', #2321, #5344, #4348, .T. ) ; +#3301 = EDGE_CURVE ( 'NONE', #6782, #5107, #3882, .T. ) ; +#3302 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #2818, #2283, ( #162 ) ) ; +#3303 = ORIENTED_EDGE ( 'NONE', *, *, #1811, .T. ) ; +#3304 = ORIENTED_EDGE ( 'NONE', *, *, #3300, .T. ) ; +#3305 = ORIENTED_EDGE ( 'NONE', *, *, #618, .F. ) ; +#3306 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3307 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3308 = CIRCLE ( 'NONE', #845, 1.500000000000001332 ) ; +#3309 = AXIS2_PLACEMENT_3D ( 'NONE', #6241, #7020, #5358 ) ; +#3310 = LINE ( 'NONE', #3956, #5563 ) ; +#3311 = VERTEX_POINT ( 'NONE', #2317 ) ; +#3312 = EDGE_CURVE ( 'NONE', #6782, #3203, #5058, .T. ) ; +#3313 = PLANE ( 'NONE', #4672 ) ; +#3314 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063086897, -6.700000000000000178, 21.43027221245048253 ) ) ; +#3315 = CIRCLE ( 'NONE', #6603, 1.500000000000001332 ) ; +#3316 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3317 = CIRCLE ( 'NONE', #270, 1.099999999999989875 ) ; +#3318 = FACE_OUTER_BOUND ( 'NONE', #6182, .T. ) ; +#3319 = PLANE ( 'NONE', #1639 ) ; +#3320 = EDGE_LOOP ( 'NONE', ( #1936, #6688, #996, #2575 ) ) ; +#3321 = CIRCLE ( 'NONE', #968, 1.500000000000001332 ) ; +#3322 = ORIENTED_EDGE ( 'NONE', *, *, #5207, .F. ) ; +#3323 = ORIENTED_EDGE ( 'NONE', *, *, #4573, .F. ) ; +#3324 = CARTESIAN_POINT ( 'NONE', ( -48.50000000000026290, -8.000000000000000000, 47.49999999999972289 ) ) ; +#3325 = VECTOR ( 'NONE', #1517, 999.9999999999998863 ) ; +#3326 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3327 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3328 = CIRCLE ( 'NONE', #619, 1.500000000000004219 ) ; +#3329 = LINE ( 'NONE', #5892, #6314 ) ; +#3330 = VECTOR ( 'NONE', #1108, 1000.000000000000114 ) ; +#3331 = LINE ( 'NONE', #4970, #2640 ) ; +#3332 = CIRCLE ( 'NONE', #2316, 1.000000000000000888 ) ; +#3333 = VERTEX_POINT ( 'NONE', #3820 ) ; +#3334 = CARTESIAN_POINT ( 'NONE', ( -21.47046096781780733, -5.899999999999999467, 36.15552248038332550 ) ) ; +#3335 = CYLINDRICAL_SURFACE ( 'NONE', #665, 1.500000000000001332 ) ; +#3336 = PLANE ( 'NONE', #6414 ) ; +#3337 = AXIS2_PLACEMENT_3D ( 'NONE', #424, #4894, #5949 ) ; +#3338 = ADVANCED_FACE ( 'NONE', ( #6608 ), #1755, .T. ) ; +#3339 = ORIENTED_EDGE ( 'NONE', *, *, #6687, .F. ) ; +#3340 = AXIS2_PLACEMENT_3D ( 'NONE', #3071, #5214, #6224 ) ; +#3341 = ORIENTED_EDGE ( 'NONE', *, *, #4487, .F. ) ; +#3342 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, -1.000000000000000000, -51.73725382063397404 ) ) ; +#3343 = VERTEX_POINT ( 'NONE', #1720 ) ; +#3344 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3345 = LINE ( 'NONE', #4948, #1525 ) ; +#3346 = CARTESIAN_POINT ( 'NONE', ( -40.17369852021976584, -5.899999999999999467, -11.76972587644106660 ) ) ; +#3347 = ORIENTED_EDGE ( 'NONE', *, *, #5911, .F. ) ; +#3348 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3349 = EDGE_CURVE ( 'NONE', #3576, #1127, #1687, .T. ) ; +#3350 = CARTESIAN_POINT ( 'NONE', ( -13.14398910962626843, -2.200000000000000622, 27.23239677215919130 ) ) ; +#3351 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3352 = AXIS2_PLACEMENT_3D ( 'NONE', #3838, #4872, #1704 ) ; +#3353 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3354 = CARTESIAN_POINT ( 'NONE', ( 52.50000000000027001, -8.000000000000000000, -39.47499999999971720 ) ) ; +#3355 = VECTOR ( 'NONE', #5085, 1000.000000000000000 ) ; +#3356 = ORIENTED_EDGE ( 'NONE', *, *, #826, .T. ) ; +#3357 = VERTEX_POINT ( 'NONE', #3852 ) ; +#3358 = VERTEX_POINT ( 'NONE', #2741 ) ; +#3359 = ORIENTED_EDGE ( 'NONE', *, *, #705, .F. ) ; +#3360 = LINE ( 'NONE', #4472, #1379 ) ; +#3361 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3362 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3363 = CARTESIAN_POINT ( 'NONE', ( -4.300000000000265388, -2.200000000000000622, 0.000000000000000000 ) ) ; +#3364 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -6.700000000000000178, 51.94976107412009725 ) ) ; +#3365 = EDGE_CURVE ( 'NONE', #2230, #1995, #2882, .T. ) ; +#3366 = ORIENTED_EDGE ( 'NONE', *, *, #4975, .T. ) ; +#3367 = VERTEX_POINT ( 'NONE', #6573 ) ; +#3368 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3369 = CARTESIAN_POINT ( 'NONE', ( -4.157457896303456302, -5.899999999999999467, 1.722075445643993064 ) ) ; +#3370 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#3371 = VECTOR ( 'NONE', #5694, 1000.000000000000000 ) ; +#3372 = CIRCLE ( 'NONE', #1682, 1.500000000000001332 ) ; +#3373 = EDGE_LOOP ( 'NONE', ( #8, #2726 ) ) ; +#3374 = ORIENTED_EDGE ( 'NONE', *, *, #2274, .T. ) ; +#3375 = CARTESIAN_POINT ( 'NONE', ( -31.73239677215492804, -2.200000000000000622, 8.643989109636883938 ) ) ; +#3376 = VERTEX_POINT ( 'NONE', #6507 ) ; +#3377 = CARTESIAN_POINT ( 'NONE', ( 52.50000000000027001, -3.000000000000000000, -39.47499999999971720 ) ) ; +#3378 = AXIS2_PLACEMENT_3D ( 'NONE', #1673, #3836, #5985 ) ; +#3379 = DIRECTION ( 'NONE', ( -0.9238795325112835188, 0.000000000000000000, -0.3826834323650974423 ) ) ; +#3380 = CARTESIAN_POINT ( 'NONE', ( -52.69999999572387139, 0.000000000000000000, 63.49999999999969447 ) ) ; +#3381 = ORIENTED_EDGE ( 'NONE', *, *, #5931, .F. ) ; +#3382 = EDGE_CURVE ( 'NONE', #639, #6568, #6164, .T. ) ; +#3383 = APPROVAL_STATUS ( 'not_yet_approved' ) ; +#3384 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, -1.000000000000000000, 21.43027221244568992 ) ) ; +#3385 = CYLINDRICAL_SURFACE ( 'NONE', #5939, 5.025000000000002132 ) ; +#3386 = VECTOR ( 'NONE', #6205, 1000.000000000000000 ) ; +#3387 = EDGE_CURVE ( 'NONE', #2835, #1244, #740, .T. ) ; +#3388 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, 0.000000000000000000, -20.83027221244439531 ) ) ; +#3389 = ADVANCED_FACE ( 'NONE', ( #120 ), #1158, .F. ) ; +#3390 = ADVANCED_FACE ( 'NONE', ( #5549 ), #697, .F. ) ; +#3391 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3392 = ORIENTED_EDGE ( 'NONE', *, *, #6657, .F. ) ; +#3393 = ORIENTED_EDGE ( 'NONE', *, *, #5988, .T. ) ; +#3394 = VERTEX_POINT ( 'NONE', #1263 ) ; +#3395 = ORIENTED_EDGE ( 'NONE', *, *, #2962, .F. ) ; +#3396 = CIRCLE ( 'NONE', #2264, 40.55000000000109139 ) ; +#3397 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000026290, -8.000000000000000000, 33.49999999999970868 ) ) ; +#3398 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3399 = CARTESIAN_POINT ( 'NONE', ( -36.30999999999903594, -8.000000000000000000, -63.43772963083818439 ) ) ; +#3400 = VECTOR ( 'NONE', #2214, 999.9999999999998863 ) ; +#3401 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3402 = ORIENTED_EDGE ( 'NONE', *, *, #6390, .F. ) ; +#3403 = ORIENTED_EDGE ( 'NONE', *, *, #4375, .F. ) ; +#3404 = CARTESIAN_POINT ( 'NONE', ( 34.86578921711158330, -6.700000000000000178, 20.70457056468532286 ) ) ; +#3405 = EDGE_CURVE ( 'NONE', #6443, #2959, #626, .T. ) ; +#3406 = FACE_OUTER_BOUND ( 'NONE', #2212, .T. ) ; +#3407 = AXIS2_PLACEMENT_3D ( 'NONE', #4497, #661, #4986 ) ; +#3408 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3409 = EDGE_CURVE ( 'NONE', #1012, #4269, #4161, .T. ) ; +#3410 = ORIENTED_EDGE ( 'NONE', *, *, #5723, .F. ) ; +#3411 = EDGE_LOOP ( 'NONE', ( #3663, #1938, #6651, #3470, #6713, #97, #1373, #6975, #1691, #3083 ) ) ; +#3412 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, 0.000000000000000000 ) ) ; +#3413 = EDGE_LOOP ( 'NONE', ( #1337, #4440, #6900, #4886 ) ) ; +#3414 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -6.700000000000000178, 0.000000000000000000 ) ) ; +#3415 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -2.200000000000000622, -62.00000000000002132 ) ) ; +#3416 = ORIENTED_EDGE ( 'NONE', *, *, #1761, .F. ) ; +#3417 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3418 = ORIENTED_EDGE ( 'NONE', *, *, #5493, .F. ) ; +#3419 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#3420 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.7071067811865489050, -0.7071067811865461294 ) ) ; +#3421 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -2.400000000000000355, 51.94976107412009725 ) ) ; +#3422 = ADVANCED_FACE ( 'NONE', ( #5477 ), #2887, .T. ) ; +#3423 = PLANE ( 'NONE', #5152 ) ; +#3424 = VECTOR ( 'NONE', #5762, 1000.000000000000114 ) ; +#3425 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063502565, -1.000000000000000000, 25.93027221244043190 ) ) ; +#3426 = ADVANCED_FACE ( 'NONE', ( #2350, #1303 ), #5628, .F. ) ; +#3427 = ORIENTED_EDGE ( 'NONE', *, *, #4444, .F. ) ; +#3428 = ORIENTED_EDGE ( 'NONE', *, *, #6374, .F. ) ; +#3429 = ORIENTED_EDGE ( 'NONE', *, *, #2219, .F. ) ; +#3430 = ORIENTED_EDGE ( 'NONE', *, *, #5703, .F. ) ; +#3431 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3432 = AXIS2_PLACEMENT_3D ( 'NONE', #3544, #5713, #4116 ) ; +#3433 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3434 = VECTOR ( 'NONE', #893, 1000.000000000000000 ) ; +#3435 = LINE ( 'NONE', #214, #6820 ) ; +#3436 = FACE_BOUND ( 'NONE', #6795, .T. ) ; +#3437 = CIRCLE ( 'NONE', #4133, 1.500000000000001332 ) ; +#3438 = FACE_OUTER_BOUND ( 'NONE', #3076, .T. ) ; +#3439 = VECTOR ( 'NONE', #5209, 1000.000000000000000 ) ; +#3440 = EDGE_LOOP ( 'NONE', ( #701, #5109, #4420, #443 ) ) ; +#3441 = ORIENTED_EDGE ( 'NONE', *, *, #1853, .F. ) ; +#3442 = CARTESIAN_POINT ( 'NONE', ( -21.43027221245029068, -1.000000000000000000, -51.73725382063096134 ) ) ; +#3443 = AXIS2_PLACEMENT_3D ( 'NONE', #5289, #6887, #3593 ) ; +#3444 = LINE ( 'NONE', #5084, #6438 ) ; +#3445 = EDGE_CURVE ( 'NONE', #771, #4556, #3988, .T. ) ; +#3446 = AXIS2_PLACEMENT_3D ( 'NONE', #3516, #2977, #2449 ) ; +#3447 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3448 = AXIS2_PLACEMENT_3D ( 'NONE', #4572, #2788, #6617 ) ; +#3449 = B_SPLINE_SURFACE_WITH_KNOTS ( 'NONE', 4, 1, ( + ( #3051, #5195 ), + ( #330, #907 ), + ( #2450, #4015 ), + ( #5225, #5118 ), + ( #1992, #6166 ) ), + .UNSPECIFIED., .F., .F., .F., + ( 5, 5 ), + ( 2, 2 ), + ( 0.000000000000000000, 1.000000000000000000 ), + ( 0.000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#3450 = AXIS2_PLACEMENT_3D ( 'NONE', #2812, #2175, #6538 ) ; +#3451 = ORIENTED_EDGE ( 'NONE', *, *, #3086, .T. ) ; +#3452 = ORIENTED_EDGE ( 'NONE', *, *, #3197, .F. ) ; +#3453 = ORIENTED_EDGE ( 'NONE', *, *, #3405, .F. ) ; +#3454 = CYLINDRICAL_SURFACE ( 'NONE', #4288, 1.500000000000001332 ) ; +#3455 = EDGE_LOOP ( 'NONE', ( #4526, #1805, #3865, #6633, #3830, #5729 ) ) ; +#3456 = CIRCLE ( 'NONE', #1313, 1.500000000000001332 ) ; +#3457 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3458 = PLANE ( 'NONE', #2761 ) ; +#3459 = CIRCLE ( 'NONE', #2671, 4.500000000000232703 ) ; +#3460 = EDGE_CURVE ( 'NONE', #1916, #3696, #2768, .T. ) ; +#3461 = EDGE_LOOP ( 'NONE', ( #6604, #6067, #2910, #4658 ) ) ; +#3462 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, -1.000000000000000000, 51.73725382062663414 ) ) ; +#3463 = VERTEX_POINT ( 'NONE', #3003 ) ; +#3464 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3465 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3466 = DIRECTION ( 'NONE', ( -3.083952846180832311E-15, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3467 = CARTESIAN_POINT ( 'NONE', ( 3.098356401842803508E-15, 0.000000000000000000, 25.30000000000000071 ) ) ; +#3468 = ORIENTED_EDGE ( 'NONE', *, *, #4193, .F. ) ; +#3469 = FACE_OUTER_BOUND ( 'NONE', #1819, .T. ) ; +#3470 = ORIENTED_EDGE ( 'NONE', *, *, #668, .T. ) ; +#3471 = ORIENTED_EDGE ( 'NONE', *, *, #6997, .T. ) ; +#3472 = VERTEX_POINT ( 'NONE', #4080 ) ; +#3473 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244024005, -1.000000000000000000, 47.23725382063509670 ) ) ; +#3474 = CARTESIAN_POINT ( 'NONE', ( 36.72954762892944558, -6.700000000000000178, -20.08464166905341841 ) ) ; +#3475 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3476 = VECTOR ( 'NONE', #1963, 1000.000000000000000 ) ; +#3477 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3478 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3479 = EDGE_LOOP ( 'NONE', ( #1298, #5239, #3122, #918 ) ) ; +#3480 = EDGE_LOOP ( 'NONE', ( #4492, #5168 ) ) ; +#3481 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#3482 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -25.30000000000000071 ) ) ; +#3483 = ADVANCED_FACE ( 'NONE', ( #1387, #204 ), #1876, .F. ) ; +#3484 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3485 = EDGE_CURVE ( 'NONE', #1669, #2282, #3592, .T. ) ; +#3486 = EDGE_CURVE ( 'NONE', #2995, #5695, #527, .T. ) ; +#3487 = EDGE_CURVE ( 'NONE', #1111, #5144, #6297, .T. ) ; +#3488 = ORIENTED_EDGE ( 'NONE', *, *, #1542, .T. ) ; +#3489 = ORIENTED_EDGE ( 'NONE', *, *, #5192, .F. ) ; +#3490 = EDGE_CURVE ( 'NONE', #2366, #5120, #1635, .T. ) ; +#3491 = CIRCLE ( 'NONE', #329, 1.500000000000001332 ) ; +#3492 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#3493 = ORIENTED_EDGE ( 'NONE', *, *, #5536, .F. ) ; +#3494 = AXIS2_PLACEMENT_3D ( 'NONE', #2734, #4379, #5466 ) ; +#3495 = LINE ( 'NONE', #2318, #154 ) ; +#3496 = EDGE_LOOP ( 'NONE', ( #6528, #5030 ) ) ; +#3497 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000026290, 0.000000000000000000, 33.49999999999970868 ) ) ; +#3498 = ORIENTED_EDGE ( 'NONE', *, *, #1188, .T. ) ; +#3499 = CARTESIAN_POINT ( 'NONE', ( 8.986531213328159851, -5.899999999999999467, 33.45447221780118952 ) ) ; +#3500 = VECTOR ( 'NONE', #6185, 1000.000000000000000 ) ; +#3501 = DIRECTION ( 'NONE', ( 0.7071067811865490160, 0.000000000000000000, 0.7071067811865460184 ) ) ; +#3502 = EDGE_CURVE ( 'NONE', #4195, #4034, #4041, .T. ) ; +#3503 = CARTESIAN_POINT ( 'NONE', ( -1.722075445645203207, -2.200000000000000622, -4.157457896306338441 ) ) ; +#3504 = EDGE_CURVE ( 'NONE', #4657, #5107, #3317, .T. ) ; +#3505 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, -28.64999999999999147 ) ) ; +#3506 = AXIS2_PLACEMENT_3D ( 'NONE', #4187, #4216, #1566 ) ; +#3507 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#3508 = ORIENTED_EDGE ( 'NONE', *, *, #1457, .F. ) ; +#3509 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3510 = ORIENTED_EDGE ( 'NONE', *, *, #6466, .F. ) ; +#3511 = ORIENTED_EDGE ( 'NONE', *, *, #3739, .T. ) ; +#3512 = EDGE_LOOP ( 'NONE', ( #5886, #3393, #2043, #1614, #2911, #5659 ) ) ; +#3513 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3514 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, -1.000000000000000000, -51.73725382063397404 ) ) ; +#3515 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063502565, -6.700000000000000178, 21.43027221244042124 ) ) ; +#3516 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, -1.000000000000000000, -21.43027221245303338 ) ) ; +#3517 = DIRECTION ( 'NONE', ( -0.3826834323650868397, 0.000000000000000000, -0.9238795325112879597 ) ) ; +#3518 = ORIENTED_EDGE ( 'NONE', *, *, #4220, .T. ) ; +#3519 = VERTEX_POINT ( 'NONE', #859 ) ; +#3520 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3521 = CARTESIAN_POINT ( 'NONE', ( -31.73239677215492804, -5.899999999999999467, 8.643989109636883938 ) ) ; +#3522 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, -0.5000000000000092149, 52.33725382063020959 ) ) ; +#3523 = AXIS2_PLACEMENT_3D ( 'NONE', #3804, #1077, #1 ) ; +#3524 = ADVANCED_FACE ( 'NONE', ( #4575 ), #4652, .F. ) ; +#3525 = ORIENTED_EDGE ( 'NONE', *, *, #4689, .F. ) ; +#3526 = ORIENTED_EDGE ( 'NONE', *, *, #2502, .F. ) ; +#3527 = AXIS2_PLACEMENT_3D ( 'NONE', #5465, #4270, #5438 ) ; +#3528 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -2.400000000000000355, 0.000000000000000000 ) ) ; +#3529 = VERTEX_POINT ( 'NONE', #5070 ) ; +#3530 = CC_DESIGN_APPROVAL ( #5751, ( #5902 ) ) ; +#3531 = EDGE_CURVE ( 'NONE', #6157, #4296, #4456, .T. ) ; +#3532 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #819, #2542, ( #1153 ) ) ; +#3533 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, -0.5000000000000369704, 51.73725382062663414 ) ) ; +#3534 = ORIENTED_EDGE ( 'NONE', *, *, #6108, .T. ) ; +#3535 = CARTESIAN_POINT ( 'NONE', ( 1.722075445644041469, -2.200000000000000622, -4.157457896303436762 ) ) ; +#3536 = VERTEX_POINT ( 'NONE', #3388 ) ; +#3537 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3538 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3539 = EDGE_CURVE ( 'NONE', #98, #6178, #706, .T. ) ; +#3540 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3541 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3542 = ADVANCED_FACE ( 'NONE', ( #6728 ), #6693, .T. ) ; +#3543 = VERTEX_POINT ( 'NONE', #6769 ) ; +#3544 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, -1.000000000000000000, 21.43027221244568992 ) ) ; +#3545 = ORIENTED_EDGE ( 'NONE', *, *, #6005, .F. ) ; +#3546 = VERTEX_POINT ( 'NONE', #3505 ) ; +#3547 = VERTEX_POINT ( 'NONE', #6151 ) ; +#3548 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980706524, -2.200000000000000622, -32.00000000000000000 ) ) ; +#3549 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3550 = DIRECTION ( 'NONE', ( -0.9238795325112835188, 0.000000000000000000, -0.3826834323650976089 ) ) ; +#3551 = CONICAL_SURFACE ( 'NONE', #6029, 1.099999999999962119, 0.7853981633974463916 ) ; +#3552 = CARTESIAN_POINT ( 'NONE', ( -36.15552248038325445, -5.899999999999999467, -21.47046096781793167 ) ) ; +#3553 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -2.200000000000000622, -30.50000000000000000 ) ) ; +#3554 = ORIENTED_EDGE ( 'NONE', *, *, #3021, .F. ) ; +#3555 = AXIS2_PLACEMENT_3D ( 'NONE', #285, #1950, #2438 ) ; +#3556 = ORIENTED_EDGE ( 'NONE', *, *, #3702, .F. ) ; +#3557 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3558 = VECTOR ( 'NONE', #3595, 1000.000000000000000 ) ; +#3559 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000026290, 0.000000000000000000, -33.49999999999970868 ) ) ; +#3560 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3561 = AXIS2_PLACEMENT_3D ( 'NONE', #6656, #2931, #748 ) ; +#3562 = CIRCLE ( 'NONE', #6264, 1.500000000000001332 ) ; +#3563 = CIRCLE ( 'NONE', #4815, 4.500000000000010658 ) ; +#3564 = ORIENTED_EDGE ( 'NONE', *, *, #4145, .T. ) ; +#3565 = VERTEX_POINT ( 'NONE', #5104 ) ; +#3566 = AXIS2_PLACEMENT_3D ( 'NONE', #426, #5253, #6854 ) ; +#3567 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3568 = AXIS2_PLACEMENT_3D ( 'NONE', #5004, #3401, #106 ) ; +#3569 = ORIENTED_EDGE ( 'NONE', *, *, #2448, .T. ) ; +#3570 = EDGE_CURVE ( 'NONE', #2686, #6133, #6955, .T. ) ; +#3571 = AXIS2_PLACEMENT_3D ( 'NONE', #5447, #592, #2279 ) ; +#3572 = LINE ( 'NONE', #6396, #3325 ) ; +#3573 = ORIENTED_EDGE ( 'NONE', *, *, #5002, .F. ) ; +#3574 = CARTESIAN_POINT ( 'NONE', ( -2.678310800185446060E-13, -5.500000000000000000, -50.44976107412088595 ) ) ; +#3575 = VECTOR ( 'NONE', #6588, 1000.000000000000000 ) ; +#3576 = VERTEX_POINT ( 'NONE', #1350 ) ; +#3577 = APPROVAL_STATUS ( 'not_yet_approved' ) ; +#3578 = CYLINDRICAL_SURFACE ( 'NONE', #339, 0.5999999999999998668 ) ; +#3579 = CARTESIAN_POINT ( 'NONE', ( 50.01517837498825259, -2.200000000000000622, 25.58773010874907783 ) ) ; +#3580 = AXIS2_PLACEMENT_3D ( 'NONE', #3514, #900, #3047 ) ; +#3581 = LINE ( 'NONE', #2546, #3891 ) ; +#3582 = ADVANCED_FACE ( 'NONE', ( #1273 ), #3423, .F. ) ; +#3583 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3584 = EDGE_CURVE ( 'NONE', #2900, #2030, #6491, .T. ) ; +#3585 = EDGE_LOOP ( 'NONE', ( #6407, #3410, #3374, #5126 ) ) ; +#3586 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3587 = EDGE_CURVE ( 'NONE', #3311, #6178, #725, .T. ) ; +#3588 = ORIENTED_EDGE ( 'NONE', *, *, #6786, .F. ) ; +#3589 = ORIENTED_EDGE ( 'NONE', *, *, #754, .T. ) ; +#3590 = PLANE ( 'NONE', #1935 ) ; +#3591 = CARTESIAN_POINT ( 'NONE', ( -13.14398910962626843, -2.200000000000000622, 31.73239677215942223 ) ) ; +#3592 = CIRCLE ( 'NONE', #3220, 4.500000000000230926 ) ; +#3593 = DIRECTION ( 'NONE', ( 1.734723475976805517E-15, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3594 = FACE_OUTER_BOUND ( 'NONE', #6269, .T. ) ; +#3595 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#3596 = ORIENTED_EDGE ( 'NONE', *, *, #2498, .F. ) ; +#3597 = EDGE_LOOP ( 'NONE', ( #3849, #4428, #1456, #4778 ) ) ; +#3598 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -2.400000000000000355, 35.23402833653069166 ) ) ; +#3599 = LINE ( 'NONE', #2032, #1355 ) ; +#3600 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, -1.000000000000000000, 51.73725382063020817 ) ) ; +#3601 = AXIS2_PLACEMENT_3D ( 'NONE', #553, #1185, #78 ) ; +#3602 = AXIS2_PLACEMENT_3D ( 'NONE', #2865, #4050, #3938 ) ; +#3603 = EDGE_CURVE ( 'NONE', #2630, #4563, #2644, .T. ) ; +#3604 = AXIS2_PLACEMENT_3D ( 'NONE', #4229, #4199, #5858 ) ; +#3605 = ORIENTED_EDGE ( 'NONE', *, *, #3261, .T. ) ; +#3606 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#3607 = EDGE_LOOP ( 'NONE', ( #540, #4176, #4692, #4582 ) ) ; +#3608 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, -1.000000000000000000, -21.43027221245303338 ) ) ; +#3609 = ORIENTED_EDGE ( 'NONE', *, *, #4772, .F. ) ; +#3610 = DATE_AND_TIME ( #3959, #4209 ) ; +#3611 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3612 = CARTESIAN_POINT ( 'NONE', ( -36.15552248038196126, -6.700000000000000178, 21.47046096782009883 ) ) ; +#3613 = VECTOR ( 'NONE', #1967, 1000.000000000000000 ) ; +#3614 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3615 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -5.500000000000000000, 51.94976107412009725 ) ) ; +#3616 = ADVANCED_FACE ( 'NONE', ( #5348 ), #5244, .F. ) ; +#3617 = CARTESIAN_POINT ( 'NONE', ( -34.86578921711158330, -5.899999999999999467, -20.70457056468532286 ) ) ; +#3618 = ORIENTED_EDGE ( 'NONE', *, *, #2815, .T. ) ; +#3619 = EDGE_LOOP ( 'NONE', ( #556, #2971, #17, #4637 ) ) ; +#3620 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245065661, -2.200000000000000622, 47.23725382063076950 ) ) ; +#3621 = CYLINDRICAL_SURFACE ( 'NONE', #6509, 1.500000000000001332 ) ; +#3622 = ADVANCED_FACE ( 'NONE', ( #4282 ), #6979, .F. ) ; +#3623 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -5.500000000000000000, 0.000000000000000000 ) ) ; +#3624 = EDGE_CURVE ( 'NONE', #473, #4622, #3581, .T. ) ; +#3625 = EDGE_CURVE ( 'NONE', #5081, #2354, #1739, .T. ) ; +#3626 = VECTOR ( 'NONE', #5923, 1000.000000000000000 ) ; +#3627 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3628 = LINE ( 'NONE', #5792, #3200 ) ; +#3629 = ORIENTED_EDGE ( 'NONE', *, *, #6590, .F. ) ; +#3630 = ORIENTED_EDGE ( 'NONE', *, *, #5106, .T. ) ; +#3631 = CARTESIAN_POINT ( 'NONE', ( -20.70457056468520562, -6.700000000000000178, 34.86578921711165435 ) ) ; +#3632 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#3633 = CARTESIAN_POINT ( 'NONE', ( 5.799999999999728928, -2.200000000000000622, -57.00000000000000000 ) ) ; +#3634 = CIRCLE ( 'NONE', #4089, 4.500000000000003553 ) ; +#3635 = ORIENTED_EDGE ( 'NONE', *, *, #549, .T. ) ; +#3636 = ADVANCED_FACE ( 'NONE', ( #4786 ), #5749, .F. ) ; +#3637 = CYLINDRICAL_SURFACE ( 'NONE', #5649, 5.025000000000002132 ) ; +#3638 = ORIENTED_EDGE ( 'NONE', *, *, #5357, .T. ) ; +#3639 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3640 = CIRCLE ( 'NONE', #2839, 5.999999999999998224 ) ; +#3641 = ORIENTED_EDGE ( 'NONE', *, *, #4000, .T. ) ; +#3642 = CARTESIAN_POINT ( 'NONE', ( -10.38390657767399894, -5.899999999999999467, 40.74772366876744201 ) ) ; +#3643 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, -0.4999999999999886202, 22.03027221243706180 ) ) ; +#3644 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3645 = CIRCLE ( 'NONE', #5237, 4.500000000000232703 ) ; +#3646 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#3647 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -6.700000000000000178, 0.000000000000000000 ) ) ; +#3648 = ORIENTED_EDGE ( 'NONE', *, *, #4310, .T. ) ; +#3649 = FACE_BOUND ( 'NONE', #4774, .T. ) ; +#3650 = CARTESIAN_POINT ( 'NONE', ( 33.50000000000029132, 0.000000000000000000, -63.49999999999972289 ) ) ; +#3651 = LINE ( 'NONE', #4088, #1874 ) ; +#3652 = FACE_OUTER_BOUND ( 'NONE', #2859, .T. ) ; +#3653 = EDGE_CURVE ( 'NONE', #4883, #2541, #3072, .T. ) ; +#3654 = CARTESIAN_POINT ( 'NONE', ( 3.098356401842803508E-15, 0.000000000000000000, 25.30000000000000071 ) ) ; +#3655 = FACE_OUTER_BOUND ( 'NONE', #2943, .T. ) ; +#3656 = ORIENTED_EDGE ( 'NONE', *, *, #5404, .F. ) ; +#3657 = ORIENTED_EDGE ( 'NONE', *, *, #4317, .T. ) ; +#3658 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3659 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000026290, -8.000000000000000000, -5.551115123125782702E-14 ) ) ; +#3660 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3661 = CIRCLE ( 'NONE', #148, 1.500000000000001332 ) ; +#3662 = AXIS2_PLACEMENT_3D ( 'NONE', #6582, #2790, #1728 ) ; +#3663 = ORIENTED_EDGE ( 'NONE', *, *, #1853, .T. ) ; +#3664 = EDGE_CURVE ( 'NONE', #5134, #2836, #6841, .T. ) ; +#3665 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3666 = ORIENTED_EDGE ( 'NONE', *, *, #2343, .T. ) ; +#3667 = AXIS2_PLACEMENT_3D ( 'NONE', #171, #1946, #2929 ) ; +#3668 = LINE ( 'NONE', #2573, #3439 ) ; +#3669 = VECTOR ( 'NONE', #3221, 1000.000000000000000 ) ; +#3670 = CIRCLE ( 'NONE', #1301, 0.5999999999999998668 ) ; +#3671 = VERTEX_POINT ( 'NONE', #2047 ) ; +#3672 = AXIS2_PLACEMENT_3D ( 'NONE', #6778, #2057, #870 ) ; +#3673 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3674 = CARTESIAN_POINT ( 'NONE', ( 40.74772366876671725, -5.899999999999999467, -10.38390657767686953 ) ) ; +#3675 = AXIS2_PLACEMENT_3D ( 'NONE', #2158, #1765, #5524 ) ; +#3676 = EDGE_CURVE ( 'NONE', #1483, #4563, #483, .T. ) ; +#3677 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -6.700000000000000178, 0.000000000000000000 ) ) ; +#3678 = AXIS2_PLACEMENT_3D ( 'NONE', #5559, #5027, #1910 ) ; +#3679 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3680 = LINE ( 'NONE', #2715, #1968 ) ; +#3681 = ORIENTED_EDGE ( 'NONE', *, *, #4570, .T. ) ; +#3682 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#3683 = CYLINDRICAL_SURFACE ( 'NONE', #3746, 1.500000000000001332 ) ; +#3684 = LINE ( 'NONE', #2055, #6055 ) ; +#3685 = DIRECTION ( 'NONE', ( 0.3826834323650976089, 0.000000000000000000, -0.9238795325112835188 ) ) ; +#3686 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3687 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#3688 = EDGE_LOOP ( 'NONE', ( #6572, #4998, #3630, #3453 ) ) ; +#3689 = EDGE_CURVE ( 'NONE', #4043, #2106, #611, .T. ) ; +#3690 = VECTOR ( 'NONE', #703, 1000.000000000000000 ) ; +#3691 = EDGE_LOOP ( 'NONE', ( #6282, #1767, #3451, #4128 ) ) ; +#3692 = LINE ( 'NONE', #5361, #1375 ) ; +#3693 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#3694 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#3695 = ORIENTED_EDGE ( 'NONE', *, *, #6645, .T. ) ; +#3696 = VERTEX_POINT ( 'NONE', #5280 ) ; +#3697 = ADVANCED_FACE ( 'NONE', ( #448 ), #1461, .F. ) ; +#3698 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3699 = LINE ( 'NONE', #2705, #3722 ) ; +#3700 = ORIENTED_EDGE ( 'NONE', *, *, #3815, .F. ) ; +#3701 = EDGE_CURVE ( 'NONE', #5539, #4799, #6365, .T. ) ; +#3702 = EDGE_CURVE ( 'NONE', #897, #6257, #1294, .T. ) ; +#3703 = EDGE_CURVE ( 'NONE', #200, #4960, #3138, .T. ) ; +#3704 = AXIS2_PLACEMENT_3D ( 'NONE', #433, #3560, #3023 ) ; +#3705 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -5.500000000000000000, 0.000000000000000000 ) ) ; +#3706 = ORIENTED_EDGE ( 'NONE', *, *, #416, .F. ) ; +#3707 = ORIENTED_EDGE ( 'NONE', *, *, #4281, .F. ) ; +#3708 = PLANE ( 'NONE', #220 ) ; +#3709 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000026290, -8.000000000000000000, -33.49999999999970868 ) ) ; +#3710 = DIRECTION ( 'NONE', ( 2.312964634635740689E-15, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3711 = LINE ( 'NONE', #958, #850 ) ; +#3712 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, -3.491481338843133355E-15 ) ) ; +#3713 = EDGE_LOOP ( 'NONE', ( #749, #304 ) ) ; +#3714 = EDGE_CURVE ( 'NONE', #1513, #4937, #5843, .T. ) ; +#3715 = CARTESIAN_POINT ( 'NONE', ( 13.14398910963723033, -2.200000000000000622, 31.73239677215487831 ) ) ; +#3716 = LINE ( 'NONE', #1598, #6920 ) ; +#3717 = AXIS2_PLACEMENT_3D ( 'NONE', #3129, #5738, #4233 ) ; +#3718 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3719 = CARTESIAN_POINT ( 'NONE', ( 33.50000000000029132, 0.000000000000000000, -63.49999999999972289 ) ) ; +#3720 = FACE_OUTER_BOUND ( 'NONE', #3188, .T. ) ; +#3721 = EDGE_CURVE ( 'NONE', #1209, #30, #2416, .T. ) ; +#3722 = VECTOR ( 'NONE', #4877, 1000.000000000000000 ) ; +#3723 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -2.200000000000000622, -62.00000000000002132 ) ) ; +#3724 = ORIENTED_EDGE ( 'NONE', *, *, #1710, .T. ) ; +#3725 = EDGE_LOOP ( 'NONE', ( #6577, #4507 ) ) ; +#3726 = LINE ( 'NONE', #4930, #6235 ) ; +#3727 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, -1.000000000000000000, -51.73725382063752676 ) ) ; +#3728 = LINE ( 'NONE', #6419, #5731 ) ; +#3729 = CARTESIAN_POINT ( 'NONE', ( -1.722075445645203207, -2.200000000000000622, -4.157457896306338441 ) ) ; +#3730 = VECTOR ( 'NONE', #3902, 1000.000000000000000 ) ; +#3731 = ORIENTED_EDGE ( 'NONE', *, *, #3382, .F. ) ; +#3732 = ORIENTED_EDGE ( 'NONE', *, *, #213, .F. ) ; +#3733 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3734 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3735 = ORIENTED_EDGE ( 'NONE', *, *, #4276, .T. ) ; +#3736 = CIRCLE ( 'NONE', #2150, 1.499999999999999556 ) ; +#3737 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 4, + ( #5099, #979, #5633, #1828, #3497 ), + .UNSPECIFIED., .F., .F., + ( 5, 5 ), + ( 0.000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#3738 = EDGE_CURVE ( 'NONE', #59, #6801, #5874, .T. ) ; +#3739 = EDGE_CURVE ( 'NONE', #3696, #4345, #85, .T. ) ; +#3740 = EDGE_LOOP ( 'NONE', ( #5584, #5445, #5127, #378 ) ) ; +#3741 = VECTOR ( 'NONE', #1701, 1000.000000000000000 ) ; +#3742 = ORIENTED_EDGE ( 'NONE', *, *, #6207, .F. ) ; +#3743 = EDGE_CURVE ( 'NONE', #3916, #1587, #2185, .T. ) ; +#3744 = DIRECTION ( 'NONE', ( -0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3745 = CARTESIAN_POINT ( 'NONE', ( -27.93000000000074579, -1.800000000000000711, -63.49999999999972289 ) ) ; +#3746 = AXIS2_PLACEMENT_3D ( 'NONE', #5320, #532, #1032 ) ; +#3747 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -2.200000000000000622, -30.50000000000000355 ) ) ; +#3748 = LINE ( 'NONE', #3073, #4812 ) ; +#3749 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#3750 = VERTEX_POINT ( 'NONE', #3278 ) ; +#3751 = CARTESIAN_POINT ( 'NONE', ( -41.45819837980560862, -6.700000000000000178, -46.10008445871534377 ) ) ; +#3752 = EDGE_CURVE ( 'NONE', #4556, #5865, #5367, .T. ) ; +#3753 = CARTESIAN_POINT ( 'NONE', ( -25.58773010874890375, -2.200000000000000622, 50.01517837498834496 ) ) ; +#3754 = EDGE_CURVE ( 'NONE', #6126, #50, #1857, .T. ) ; +#3755 = AXIS2_PLACEMENT_3D ( 'NONE', #739, #4035, #436 ) ; +#3756 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3757 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#3758 = ADVANCED_FACE ( 'NONE', ( #122 ), #660, .T. ) ; +#3759 = CARTESIAN_POINT ( 'NONE', ( 36.72954762893090219, -6.700000000000000178, 20.08464166905100612 ) ) ; +#3760 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3761 = EDGE_LOOP ( 'NONE', ( #6659, #272 ) ) ; +#3762 = ORIENTED_EDGE ( 'NONE', *, *, #5270, .F. ) ; +#3763 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3764 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244024005, -1.000000000000000000, 51.73725382063510381 ) ) ; +#3765 = LINE ( 'NONE', #2696, #3626 ) ; +#3766 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#3767 = EDGE_CURVE ( 'NONE', #4744, #3671, #5906, .T. ) ; +#3768 = ORIENTED_EDGE ( 'NONE', *, *, #145, .F. ) ; +#3769 = ORIENTED_EDGE ( 'NONE', *, *, #901, .T. ) ; +#3770 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, -0.5000000000000092149, -52.33725382063397547 ) ) ; +#3771 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#3772 = LINE ( 'NONE', #4907, #309 ) ; +#3773 = CIRCLE ( 'NONE', #5018, 1.500000000000001332 ) ; +#3774 = ORIENTED_EDGE ( 'NONE', *, *, #6358, .F. ) ; +#3775 = AXIS2_PLACEMENT_3D ( 'NONE', #3855, #6074, #4419 ) ; +#3776 = EDGE_CURVE ( 'NONE', #1959, #6169, #5516, .T. ) ; +#3777 = ORIENTED_EDGE ( 'NONE', *, *, #6779, .T. ) ; +#3778 = ADVANCED_FACE ( 'NONE', ( #5942 ), #3208, .T. ) ; +#3779 = AXIS2_PLACEMENT_3D ( 'NONE', #2115, #6908, #6333 ) ; +#3780 = ORIENTED_EDGE ( 'NONE', *, *, #1501, .F. ) ; +#3781 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3782 = AXIS2_PLACEMENT_3D ( 'NONE', #1167, #5029, #4466 ) ; +#3783 = DIRECTION ( 'NONE', ( 0.9238795325112867385, 0.000000000000000000, -0.3826834323650899483 ) ) ; +#3784 = AXIS2_PLACEMENT_3D ( 'NONE', #3705, #3165, #4107 ) ; +#3785 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, 0.000000000000000000, 51.73725382063020817 ) ) ; +#3786 = VECTOR ( 'NONE', #2906, 1000.000000000000000 ) ; +#3787 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244024005, -1.000000000000000000, 51.73725382063510381 ) ) ; +#3788 = ORIENTED_EDGE ( 'NONE', *, *, #2035, .F. ) ; +#3789 = EDGE_CURVE ( 'NONE', #4450, #3985, #3853, .T. ) ; +#3790 = DIRECTION ( 'NONE', ( 0.7071067811865487940, 0.000000000000000000, 0.7071067811865463515 ) ) ; +#3791 = AXIS2_PLACEMENT_3D ( 'NONE', #2405, #1887, #4589 ) ; +#3792 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, -28.64999999999999147 ) ) ; +#3793 = AXIS2_PLACEMENT_3D ( 'NONE', #3905, #3940, #6125 ) ; +#3794 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, -1.000000000000000000, -50.63725382063751113 ) ) ; +#3795 = EDGE_CURVE ( 'NONE', #3203, #4657, #3345, .T. ) ; +#3796 = VECTOR ( 'NONE', #5017, 1000.000000000000000 ) ; +#3797 = CARTESIAN_POINT ( 'NONE', ( 4.157457896306343770, -2.200000000000000622, -1.722075445645189218 ) ) ; +#3798 = EDGE_CURVE ( 'NONE', #6881, #1903, #5475, .T. ) ; +#3799 = EDGE_CURVE ( 'NONE', #439, #3299, #3562, .T. ) ; +#3800 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, 0.000000000000000000, -21.43027221245303338 ) ) ; +#3801 = EDGE_LOOP ( 'NONE', ( #3525, #4498, #5531, #4747 ) ) ; +#3802 = EDGE_LOOP ( 'NONE', ( #591, #477, #5369, #5005 ) ) ; +#3803 = ORIENTED_EDGE ( 'NONE', *, *, #6512, .T. ) ; +#3804 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063502565, -2.200000000000000622, -21.43027221244042124 ) ) ; +#3805 = VECTOR ( 'NONE', #3361, 1000.000000000000000 ) ; +#3806 = LINE ( 'NONE', #4263, #3117 ) ; +#3807 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3808 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3809 = VECTOR ( 'NONE', #5354, 1000.000000000000000 ) ; +#3810 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 4, + ( #5363, #5960, #506, #6526, #2667 ), + .UNSPECIFIED., .F., .F., + ( 5, 5 ), + ( 0.000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#3811 = ORIENTED_EDGE ( 'NONE', *, *, #3913, .F. ) ; +#3812 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, -0.4999999999999886202, -21.43027221245303338 ) ) ; +#3813 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3814 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3815 = EDGE_CURVE ( 'NONE', #1974, #2917, #2683, .T. ) ; +#3816 = VECTOR ( 'NONE', #4617, 1000.000000000000000 ) ; +#3817 = ORIENTED_EDGE ( 'NONE', *, *, #2295, .F. ) ; +#3818 = ORIENTED_EDGE ( 'NONE', *, *, #4265, .T. ) ; +#3819 = ORIENTED_EDGE ( 'NONE', *, *, #2351, .F. ) ; +#3820 = CARTESIAN_POINT ( 'NONE', ( -34.86578921711034695, -5.899999999999999467, 20.70457056468741541 ) ) ; +#3821 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.7071067811865627828, -0.7071067811865322517 ) ) ; +#3822 = FACE_OUTER_BOUND ( 'NONE', #3802, .T. ) ; +#3823 = ORIENTED_EDGE ( 'NONE', *, *, #6044, .T. ) ; +#3824 = FACE_BOUND ( 'NONE', #4036, .T. ) ; +#3825 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -2.400000000000000355, 1.500000000000004219 ) ) ; +#3826 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -5.500000000000000000, 51.94976107412009725 ) ) ; +#3827 = ADVANCED_FACE ( 'NONE', ( #5449 ), #4856, .F. ) ; +#3828 = DIRECTION ( 'NONE', ( 8.659560562354744271E-17, -0.7071067811865627828, 0.7071067811865322517 ) ) ; +#3829 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, 0.000000000000000000, 21.43027221243706038 ) ) ; +#3830 = ORIENTED_EDGE ( 'NONE', *, *, #1249, .T. ) ; +#3831 = AXIS2_PLACEMENT_3D ( 'NONE', #193, #3492, #1340 ) ; +#3832 = ORIENTED_EDGE ( 'NONE', *, *, #496, .F. ) ; +#3833 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -2.200000000000000622, -60.50000000000001421 ) ) ; +#3834 = EDGE_CURVE ( 'NONE', #4115, #4043, #5483, .T. ) ; +#3835 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3836 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3837 = EDGE_CURVE ( 'NONE', #2600, #2040, #5830, .T. ) ; +#3838 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245065661, -1.000000000000000000, 51.73725382063078371 ) ) ; +#3839 = ADVANCED_FACE ( 'NONE', ( #6575 ), #1159, .F. ) ; +#3840 = AXIS2_PLACEMENT_3D ( 'NONE', #5864, #4559, #4519 ) ; +#3841 = FACE_OUTER_BOUND ( 'NONE', #1330, .T. ) ; +#3842 = ORIENTED_EDGE ( 'NONE', *, *, #6601, .F. ) ; +#3843 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3844 = AXIS2_PLACEMENT_3D ( 'NONE', #4340, #76, #3813 ) ; +#3845 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#3846 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#3847 = CIRCLE ( 'NONE', #1480, 0.6000000000000033085 ) ; +#3848 = ADVANCED_FACE ( 'NONE', ( #5482 ), #2780, .F. ) ; +#3849 = ORIENTED_EDGE ( 'NONE', *, *, #2512, .F. ) ; +#3850 = VERTEX_POINT ( 'NONE', #3989 ) ; +#3851 = EDGE_LOOP ( 'NONE', ( #4215, #183, #1585, #6775 ) ) ; +#3852 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, -1.000000000000000000, -50.63725382063751113 ) ) ; +#3853 = LINE ( 'NONE', #2744, #6606 ) ; +#3854 = CIRCLE ( 'NONE', #6679, 1.500000000000004219 ) ; +#3855 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -5.500000000000000000, 36.73402833653069166 ) ) ; +#3856 = EDGE_LOOP ( 'NONE', ( #3508, #4781, #915, #5451 ) ) ; +#3857 = LINE ( 'NONE', #1271, #2562 ) ; +#3858 = CONICAL_SURFACE ( 'NONE', #4884, 1.099999999999989875, 0.7853981633974267407 ) ; +#3859 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3860 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3861 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3862 = ORIENTED_EDGE ( 'NONE', *, *, #5831, .F. ) ; +#3863 = VECTOR ( 'NONE', #4810, 1000.000000000000000 ) ; +#3864 = EDGE_LOOP ( 'NONE', ( #5981, #2902, #2439, #4064 ) ) ; +#3865 = ORIENTED_EDGE ( 'NONE', *, *, #6211, .F. ) ; +#3866 = ORIENTED_EDGE ( 'NONE', *, *, #3982, .T. ) ; +#3867 = CARTESIAN_POINT ( 'NONE', ( -53.45932926627660464, -2.200000000000000622, 17.27281431614138896 ) ) ; +#3868 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3869 = FACE_BOUND ( 'NONE', #6661, .T. ) ; +#3870 = EDGE_CURVE ( 'NONE', #897, #2900, #3495, .T. ) ; +#3871 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3872 = PLANE ( 'NONE', #2880 ) ; +#3873 = EDGE_LOOP ( 'NONE', ( #2662, #1881, #3134, #1128 ) ) ; +#3874 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.7071067811865293651, -0.7071067811865656694 ) ) ; +#3875 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245065661, -1.000000000000000000, 51.73725382063078371 ) ) ; +#3876 = CARTESIAN_POINT ( 'NONE', ( 31.73239677215937249, -2.200000000000000622, 13.14398910962637856 ) ) ; +#3877 = ADVANCED_FACE ( 'NONE', ( #4032 ), #6760, .T. ) ; +#3878 = ORIENTED_EDGE ( 'NONE', *, *, #5020, .T. ) ; +#3879 = VERTEX_POINT ( 'NONE', #2922 ) ; +#3880 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3881 = ORIENTED_EDGE ( 'NONE', *, *, #238, .T. ) ; +#3882 = LINE ( 'NONE', #6035, #5610 ) ; +#3883 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#3884 = VECTOR ( 'NONE', #2648, 1000.000000000000000 ) ; +#3885 = VECTOR ( 'NONE', #4222, 999.9999999999998863 ) ; +#3886 = PLANE ( 'NONE', #3775 ) ; +#3887 = ORIENTED_EDGE ( 'NONE', *, *, #6150, .F. ) ; +#3888 = LINE ( 'NONE', #1203, #2443 ) ; +#3889 = FACE_OUTER_BOUND ( 'NONE', #4962, .T. ) ; +#3890 = EDGE_CURVE ( 'NONE', #1731, #2282, #6103, .T. ) ; +#3891 = VECTOR ( 'NONE', #4723, 1000.000000000000000 ) ; +#3892 = CYLINDRICAL_SURFACE ( 'NONE', #4599, 4.500000000000010658 ) ; +#3893 = AXIS2_PLACEMENT_3D ( 'NONE', #1469, #3116, #2446 ) ; +#3894 = CARTESIAN_POINT ( 'NONE', ( 36.15552248038325445, -5.899999999999999467, 21.47046096781793167 ) ) ; +#3895 = ORIENTED_EDGE ( 'NONE', *, *, #4246, .F. ) ; +#3896 = AXIS2_PLACEMENT_3D ( 'NONE', #2621, #3118, #5820 ) ; +#3897 = EDGE_LOOP ( 'NONE', ( #5575, #3166, #2101, #1307 ) ) ; +#3898 = ORIENTED_EDGE ( 'NONE', *, *, #5357, .F. ) ; +#3899 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3900 = CIRCLE ( 'NONE', #858, 1.500000000000001332 ) ; +#3901 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3902 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#3903 = VECTOR ( 'NONE', #4615, 1000.000000000000114 ) ; +#3904 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3905 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -2.400000000000000355, 0.000000000000000000 ) ) ; +#3906 = ORIENTED_EDGE ( 'NONE', *, *, #4843, .T. ) ; +#3907 = AXIS2_PLACEMENT_3D ( 'NONE', #2226, #1733, #5077 ) ; +#3908 = VERTEX_POINT ( 'NONE', #5061 ) ; +#3909 = LINE ( 'NONE', #801, #2258 ) ; +#3910 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, -3.083952846180982984E-15 ) ) ; +#3911 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3912 = CIRCLE ( 'NONE', #3337, 5.999999999999998224 ) ; +#3913 = EDGE_CURVE ( 'NONE', #2109, #1896, #1866, .T. ) ; +#3914 = ORIENTED_EDGE ( 'NONE', *, *, #6961, .F. ) ; +#3915 = AXIS2_PLACEMENT_3D ( 'NONE', #4571, #275, #6260 ) ; +#3916 = VERTEX_POINT ( 'NONE', #5019 ) ; +#3917 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3918 = ADVANCED_FACE ( 'NONE', ( #4454 ), #1757, .F. ) ; +#3919 = ORIENTED_EDGE ( 'NONE', *, *, #5909, .F. ) ; +#3920 = CYLINDRICAL_SURFACE ( 'NONE', #6872, 5.025000000000002132 ) ; +#3921 = ADVANCED_FACE ( 'NONE', ( #1378 ), #3458, .T. ) ; +#3922 = EDGE_CURVE ( 'NONE', #2516, #2593, #5631, .T. ) ; +#3923 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3924 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245065661, -1.000000000000000000, 56.23725382063079081 ) ) ; +#3925 = ORIENTED_EDGE ( 'NONE', *, *, #3776, .T. ) ; +#3926 = PERSON_AND_ORGANIZATION ( #2507, #6702 ) ; +#3927 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000026290, 0.000000000000000000, -33.49999999999970868 ) ) ; +#3928 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063071265, -2.200000000000000622, -21.43027221245083425 ) ) ; +#3929 = CARTESIAN_POINT ( 'NONE', ( 31.73239677215937249, -5.899999999999999467, 13.14398910962637856 ) ) ; +#3930 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000026290, -8.000000000000000000, -33.49999999999970868 ) ) ; +#3931 = ADVANCED_FACE ( 'NONE', ( #814 ), #776, .F. ) ; +#3932 = VERTEX_POINT ( 'NONE', #3954 ) ; +#3933 = ORIENTED_EDGE ( 'NONE', *, *, #5552, .F. ) ; +#3934 = ORIENTED_EDGE ( 'NONE', *, *, #3701, .T. ) ; +#3935 = ORIENTED_EDGE ( 'NONE', *, *, #847, .T. ) ; +#3936 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3937 = CARTESIAN_POINT ( 'NONE', ( 33.45447221780229086, -2.200000000000000622, 8.986531213325664069 ) ) ; +#3938 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ; +#3939 = EDGE_CURVE ( 'NONE', #6308, #4960, #395, .T. ) ; +#3940 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3941 = ORIENTED_EDGE ( 'NONE', *, *, #6207, .T. ) ; +#3942 = ORIENTED_EDGE ( 'NONE', *, *, #4096, .T. ) ; +#3943 = DIRECTION ( 'NONE', ( 0.9238795325112892920, 0.000000000000000000, -0.3826834323650836200 ) ) ; +#3944 = FACE_OUTER_BOUND ( 'NONE', #2083, .T. ) ; +#3945 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, -1.000000000000000000, -51.73725382063752676 ) ) ; +#3946 = CIRCLE ( 'NONE', #5867, 40.55000000000109139 ) ; +#3947 = VECTOR ( 'NONE', #335, 1000.000000000000000 ) ; +#3948 = ORIENTED_EDGE ( 'NONE', *, *, #6875, .T. ) ; +#3949 = ORIENTED_EDGE ( 'NONE', *, *, #3738, .T. ) ; +#3950 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3951 = VERTEX_POINT ( 'NONE', #2889 ) ; +#3952 = FACE_OUTER_BOUND ( 'NONE', #2160, .T. ) ; +#3953 = ADVANCED_FACE ( 'NONE', ( #267 ), #2847, .F. ) ; +#3954 = CARTESIAN_POINT ( 'NONE', ( 52.50000000000027001, -8.000000000000000000, -49.52499999999972147 ) ) ; +#3955 = ORIENTED_EDGE ( 'NONE', *, *, #4522, .F. ) ; +#3956 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, -1.000000000000000000, 20.33027221244569915 ) ) ; +#3957 = EDGE_CURVE ( 'NONE', #6291, #726, #1417, .T. ) ; +#3958 = ORIENTED_EDGE ( 'NONE', *, *, #2445, .F. ) ; +#3959 = CALENDAR_DATE ( 2026, 29, 9 ) ; +#3960 = LINE ( 'NONE', #633, #4256 ) ; +#3961 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, 0.000000000000000000 ) ) ; +#3962 = CIRCLE ( 'NONE', #458, 4.500000000000013323 ) ; +#3963 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, -0.4999999999999886202, 21.43027221244568992 ) ) ; +#3964 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -2.200000000000000622, -32.00000000000000000 ) ) ; +#3965 = EDGE_CURVE ( 'NONE', #5228, #2102, #4819, .T. ) ; +#3966 = VERTEX_POINT ( 'NONE', #4607 ) ; +#3967 = ORIENTED_EDGE ( 'NONE', *, *, #6994, .F. ) ; +#3968 = ORIENTED_EDGE ( 'NONE', *, *, #4578, .F. ) ; +#3969 = VERTEX_POINT ( 'NONE', #6684 ) ; +#3970 = CIRCLE ( 'NONE', #6104, 1.500000000000001332 ) ; +#3971 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387191874, -2.200000000000000622, -54.96446609406757489 ) ) ; +#3972 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3973 = CARTESIAN_POINT ( 'NONE', ( -27.93000000000074579, -2.109999999999944365, -63.49999999999972289 ) ) ; +#3974 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3975 = VECTOR ( 'NONE', #2733, 1000.000000000000000 ) ; +#3976 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244024005, -6.700000000000000178, 56.23725382063511802 ) ) ; +#3977 = ORIENTED_EDGE ( 'NONE', *, *, #31, .F. ) ; +#3978 = EDGE_LOOP ( 'NONE', ( #4546, #5898, #4942, #6810 ) ) ; +#3979 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3980 = CARTESIAN_POINT ( 'NONE', ( -13.14398910962626843, -2.200000000000000622, 31.73239677215942223 ) ) ; +#3981 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3982 = EDGE_CURVE ( 'NONE', #2679, #232, #5378, .T. ) ; +#3983 = ORIENTED_EDGE ( 'NONE', *, *, #3721, .T. ) ; +#3984 = ORIENTED_EDGE ( 'NONE', *, *, #6358, .T. ) ; +#3985 = VERTEX_POINT ( 'NONE', #1826 ) ; +#3986 = CYLINDRICAL_SURFACE ( 'NONE', #2133, 40.55000000000109139 ) ; +#3987 = ORIENTED_EDGE ( 'NONE', *, *, #4721, .F. ) ; +#3988 = LINE ( 'NONE', #6137, #3816 ) ; +#3989 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, -1.000000000000000000, -22.53027221244438394 ) ) ; +#3990 = EDGE_CURVE ( 'NONE', #1505, #531, #4071, .T. ) ; +#3991 = ORIENTED_EDGE ( 'NONE', *, *, #6517, .T. ) ; +#3992 = EDGE_CURVE ( 'NONE', #1683, #2489, #6040, .T. ) ; +#3993 = CARTESIAN_POINT ( 'NONE', ( -36.30999999999903594, -2.200000000000000622, -62.00000000000002132 ) ) ; +#3994 = EDGE_LOOP ( 'NONE', ( #3392, #588, #155, #6835 ) ) ; +#3995 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063086897, -2.200000000000000622, 21.43027221245048253 ) ) ; +#3996 = LINE ( 'NONE', #6148, #4821 ) ; +#3997 = DIRECTION ( 'NONE', ( -0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3998 = CIRCLE ( 'NONE', #3662, 4.500000000000010658 ) ; +#3999 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#4000 = EDGE_CURVE ( 'NONE', #4448, #3536, #3670, .T. ) ; +#4001 = ORIENTED_EDGE ( 'NONE', *, *, #4750, .F. ) ; +#4002 = CARTESIAN_POINT ( 'NONE', ( 20.08464166905329762, -2.200000000000000622, 36.72954762892951663 ) ) ; +#4003 = VERTEX_POINT ( 'NONE', #377 ) ; +#4004 = EDGE_LOOP ( 'NONE', ( #3082, #5604, #960, #4431, #6127, #4837 ) ) ; +#4005 = ORIENTED_EDGE ( 'NONE', *, *, #5325, .F. ) ; +#4006 = DIRECTION ( 'NONE', ( -0.9238795325112835188, 0.000000000000000000, -0.3826834323650976089 ) ) ; +#4007 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4008 = EDGE_CURVE ( 'NONE', #2002, #5335, #3572, .T. ) ; +#4009 = AXIS2_PLACEMENT_3D ( 'NONE', #4687, #6878, #6938 ) ; +#4010 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -2.400000000000000355, 36.73402833653069166 ) ) ; +#4011 = EDGE_CURVE ( 'NONE', #4960, #1224, #948, .T. ) ; +#4012 = EDGE_CURVE ( 'NONE', #6846, #401, #2192, .T. ) ; +#4013 = CYLINDRICAL_SURFACE ( 'NONE', #2878, 0.6000000000000033085 ) ; +#4014 = AXIS2_PLACEMENT_3D ( 'NONE', #6229, #3583, #5711 ) ; +#4015 = CARTESIAN_POINT ( 'NONE', ( 56.16019669858830810, 0.000000000000000000, 56.16019669858773966 ) ) ; +#4016 = CIRCLE ( 'NONE', #1863, 4.500000000000010658 ) ; +#4017 = ORIENTED_EDGE ( 'NONE', *, *, #2921, .F. ) ; +#4018 = ORIENTED_EDGE ( 'NONE', *, *, #3799, .T. ) ; +#4019 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -6.700000000000000178, -32.00000000000000000 ) ) ; +#4020 = CIRCLE ( 'NONE', #966, 1.000000000000000888 ) ; +#4021 = CARTESIAN_POINT ( 'NONE', ( -39.95819837980435096, -2.200000000000000622, -32.00000000000000000 ) ) ; +#4022 = VECTOR ( 'NONE', #3686, 1000.000000000000000 ) ; +#4023 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980706524, -2.200000000000000622, -56.99999999999999289 ) ) ; +#4024 = AXIS2_PLACEMENT_3D ( 'NONE', #3612, #4039, #3002 ) ; +#4025 = ORIENTED_EDGE ( 'NONE', *, *, #3088, .F. ) ; +#4026 = ADVANCED_FACE ( 'NONE', ( #5741 ), #4917, .F. ) ; +#4027 = ORIENTED_EDGE ( 'NONE', *, *, #1748, .F. ) ; +#4028 = CARTESIAN_POINT ( 'NONE', ( 30.45000000000150564, -5.899999999999999467, -29.00000000000000000 ) ) ; +#4029 = EDGE_CURVE ( 'NONE', #4647, #3951, #3668, .T. ) ; +#4030 = VERTEX_POINT ( 'NONE', #5805 ) ; +#4031 = AXIS2_PLACEMENT_3D ( 'NONE', #6664, #212, #1281 ) ; +#4032 = FACE_OUTER_BOUND ( 'NONE', #5885, .T. ) ; +#4033 = AXIS2_PLACEMENT_3D ( 'NONE', #2619, #2587, #25 ) ; +#4034 = VERTEX_POINT ( 'NONE', #4779 ) ; +#4035 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4036 = EDGE_LOOP ( 'NONE', ( #3818, #5982 ) ) ; +#4037 = APPROVAL_STATUS ( 'not_yet_approved' ) ; +#4038 = LINE ( 'NONE', #1906, #2484 ) ; +#4039 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#4040 = CARTESIAN_POINT ( 'NONE', ( 4.299999999999729816, -2.200000000000000622, -57.00000000000000000 ) ) ; +#4041 = LINE ( 'NONE', #5709, #6721 ) ; +#4042 = CARTESIAN_POINT ( 'NONE', ( 3.508613079557166097E-15, -5.899999999999999467, 28.64999999999999147 ) ) ; +#4043 = VERTEX_POINT ( 'NONE', #887 ) ; +#4044 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4045 = EDGE_LOOP ( 'NONE', ( #2794, #4047 ) ) ; +#4046 = ORIENTED_EDGE ( 'NONE', *, *, #1545, .F. ) ; +#4047 = ORIENTED_EDGE ( 'NONE', *, *, #4096, .F. ) ; +#4048 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000027711, 0.000000000000000000, -52.69999999572329585 ) ) ; +#4049 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4050 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4051 = EDGE_CURVE ( 'NONE', #3969, #5929, #2538, .T. ) ; +#4052 = CONICAL_SURFACE ( 'NONE', #2791, 1.100000000000017630, 0.7853981633974739252 ) ; +#4053 = FACE_OUTER_BOUND ( 'NONE', #5064, .T. ) ; +#4054 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4055 = EDGE_CURVE ( 'NONE', #6756, #1223, #6149, .T. ) ; +#4056 = EDGE_LOOP ( 'NONE', ( #2661, #3811, #2223, #6075 ) ) ; +#4057 = ORIENTED_EDGE ( 'NONE', *, *, #4795, .T. ) ; +#4058 = ADVANCED_FACE ( 'NONE', ( #4681 ), #919, .F. ) ; +#4059 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, -1.000000000000000000, -52.33725382063397547 ) ) ; +#4060 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #6724, #890, ( #373 ) ) ; +#4061 = CARTESIAN_POINT ( 'NONE', ( 30.01032132651195639, -5.899999999999999467, -17.30144700593806917 ) ) ; +#4062 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -2.400000000000000355, 35.23402833652781396 ) ) ; +#4063 = ORIENTED_EDGE ( 'NONE', *, *, #3152, .F. ) ; +#4064 = ORIENTED_EDGE ( 'NONE', *, *, #5798, .T. ) ; +#4065 = ADVANCED_FACE ( 'NONE', ( #1937 ), #986, .F. ) ; +#4066 = CIRCLE ( 'NONE', #6201, 1.500000000000001332 ) ; +#4067 = CYLINDRICAL_SURFACE ( 'NONE', #2700, 4.500000000000232703 ) ; +#4068 = ORIENTED_EDGE ( 'NONE', *, *, #1902, .T. ) ; +#4069 = EDGE_CURVE ( 'NONE', #5756, #1564, #5727, .T. ) ; +#4070 = AXIS2_PLACEMENT_3D ( 'NONE', #2378, #2914, #2946 ) ; +#4071 = LINE ( 'NONE', #6219, #1078 ) ; +#4072 = ORIENTED_EDGE ( 'NONE', *, *, #596, .F. ) ; +#4073 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4074 = ORIENTED_EDGE ( 'NONE', *, *, #585, .T. ) ; +#4075 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ; +#4076 = LINE ( 'NONE', #2294, #3500 ) ; +#4077 = VECTOR ( 'NONE', #5311, 999.9999999999998863 ) ; +#4078 = FACE_BOUND ( 'NONE', #5947, .T. ) ; +#4079 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4080 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -6.700000000000000178, -30.50000000000000355 ) ) ; +#4081 = CYLINDRICAL_SURFACE ( 'NONE', #43, 1.500000000000001332 ) ; +#4082 = ORIENTED_EDGE ( 'NONE', *, *, #7018, .T. ) ; +#4083 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4084 = EDGE_LOOP ( 'NONE', ( #6551, #3264 ) ) ; +#4085 = ORIENTED_EDGE ( 'NONE', *, *, #6554, .F. ) ; +#4086 = VERTEX_POINT ( 'NONE', #4643 ) ; +#4087 = CARTESIAN_POINT ( 'NONE', ( 25.58773010875156473, -2.200000000000000622, 50.01517837498778363 ) ) ; +#4088 = CARTESIAN_POINT ( 'NONE', ( -1.722075445644041469, -5.899999999999999467, 4.157457896303436762 ) ) ; +#4089 = AXIS2_PLACEMENT_3D ( 'NONE', #6170, #5007, #143 ) ; +#4090 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244024005, -6.700000000000000178, 51.73725382063510381 ) ) ; +#4091 = CARTESIAN_POINT ( 'NONE', ( -34.92266447387282113, -3.200000000000000622, -35.53553390593242511 ) ) ; +#4092 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -5.500000000000000000, 6.000000000000001776 ) ) ; +#4093 = AXIS2_PLACEMENT_3D ( 'NONE', #6128, #258, #2804 ) ; +#4094 = ORIENTED_EDGE ( 'NONE', *, *, #5611, .T. ) ; +#4095 = ORIENTED_EDGE ( 'NONE', *, *, #6429, .T. ) ; +#4096 = EDGE_CURVE ( 'NONE', #3096, #5539, #5935, .T. ) ; +#4097 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4098 = CARTESIAN_POINT ( 'NONE', ( -40.17369852021918319, -6.700000000000000178, 11.76972587644352508 ) ) ; +#4099 = LINE ( 'NONE', #5164, #1110 ) ; +#4100 = AXIS2_PLACEMENT_3D ( 'NONE', #2053, #3114, #5421 ) ; +#4101 = VERTEX_POINT ( 'NONE', #4175 ) ; +#4102 = ORIENTED_EDGE ( 'NONE', *, *, #1893, .T. ) ; +#4103 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4104 = VERTEX_POINT ( 'NONE', #4716 ) ; +#4105 = APPROVAL_PERSON_ORGANIZATION ( #236, #5952, #1941 ) ; +#4106 = EDGE_CURVE ( 'NONE', #4003, #5397, #3900, .T. ) ; +#4107 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#4108 = ORIENTED_EDGE ( 'NONE', *, *, #5945, .F. ) ; +#4109 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387191874, -3.200000000000000622, -53.46446609406757489 ) ) ; +#4110 = ORIENTED_EDGE ( 'NONE', *, *, #1229, .F. ) ; +#4111 = FACE_OUTER_BOUND ( 'NONE', #866, .T. ) ; +#4112 = CYLINDRICAL_SURFACE ( 'NONE', #2107, 1.500000000000001332 ) ; +#4113 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245065661, -6.700000000000000178, 51.73725382063078371 ) ) ; +#4114 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -6.700000000000000178, 0.000000000000000000 ) ) ; +#4115 = VERTEX_POINT ( 'NONE', #6902 ) ; +#4116 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4117 = VERTEX_POINT ( 'NONE', #4238 ) ; +#4118 = ORIENTED_EDGE ( 'NONE', *, *, #6295, .T. ) ; +#4119 = ORIENTED_EDGE ( 'NONE', *, *, #2999, .T. ) ; +#4120 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4121 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4122 = ADVANCED_FACE ( 'NONE', ( #1020, #1553 ), #6797, .F. ) ; +#4123 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4124 = AXIS2_PLACEMENT_3D ( 'NONE', #2636, #4816, #610 ) ; +#4125 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.800000000000000488, -22.96370172317620018 ) ) ; +#4126 = CARTESIAN_POINT ( 'NONE', ( -4.157457896303456302, -2.200000000000000622, 1.722075445643992841 ) ) ; +#4127 = ORIENTED_EDGE ( 'NONE', *, *, #1068, .T. ) ; +#4128 = ORIENTED_EDGE ( 'NONE', *, *, #2415, .F. ) ; +#4129 = DIRECTION ( 'NONE', ( -4.625929269271486900E-15, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4130 = AXIS2_PLACEMENT_3D ( 'NONE', #4113, #279, #5180 ) ; +#4131 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000026290, -8.000000000000000000, -33.49999999999970868 ) ) ; +#4132 = LINE ( 'NONE', #5200, #5515 ) ; +#4133 = AXIS2_PLACEMENT_3D ( 'NONE', #3615, #4249, #5811 ) ; +#4134 = AXIS2_PLACEMENT_3D ( 'NONE', #197, #5131, #160 ) ; +#4135 = AXIS2_PLACEMENT_3D ( 'NONE', #4662, #3146, #4123 ) ; +#4136 = VERTEX_POINT ( 'NONE', #6254 ) ; +#4137 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244847169, -1.000000000000000000, -51.73725382063096134 ) ) ; +#4138 = CIRCLE ( 'NONE', #848, 1.500000000000001332 ) ; +#4139 = ORIENTED_EDGE ( 'NONE', *, *, #2020, .F. ) ; +#4140 = AXIS2_PLACEMENT_3D ( 'NONE', #1045, #2628, #2131 ) ; +#4141 = AXIS2_PLACEMENT_3D ( 'NONE', #1489, #2712, #4823 ) ; +#4142 = ADVANCED_FACE ( 'NONE', ( #1414, #6834 ), #478, .F. ) ; +#4143 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#4144 = ORIENTED_EDGE ( 'NONE', *, *, #2589, .F. ) ; +#4145 = EDGE_CURVE ( 'NONE', #502, #3376, #4706, .T. ) ; +#4146 = VECTOR ( 'NONE', #4769, 1000.000000000000000 ) ; +#4147 = EDGE_LOOP ( 'NONE', ( #2417, #1782, #6615, #2094 ) ) ; +#4148 = PERSON_AND_ORGANIZATION_ROLE ( 'classification_officer' ) ; +#4149 = EDGE_CURVE ( 'NONE', #439, #938, #4592, .T. ) ; +#4150 = EDGE_CURVE ( 'NONE', #5737, #4488, #5263, .T. ) ; +#4151 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4152 = CARTESIAN_POINT ( 'NONE', ( 40.17369852021977294, -2.200000000000000622, 11.76972587644106660 ) ) ; +#4153 = AXIS2_PLACEMENT_3D ( 'NONE', #4160, #5391, #3756 ) ; +#4154 = CARTESIAN_POINT ( 'NONE', ( -52.50000000000027001, -3.000000000000000000, -39.47499999999971010 ) ) ; +#4155 = DIRECTION ( 'NONE', ( 0.3826834323650900038, 0.000000000000000000, 0.9238795325112867385 ) ) ; +#4156 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#4157 = EDGE_LOOP ( 'NONE', ( #3010, #1357, #6594, #1824, #5283 ) ) ; +#4158 = EDGE_LOOP ( 'NONE', ( #4027, #5627, #2993, #4562 ) ) ; +#4159 = CARTESIAN_POINT ( 'NONE', ( 56.16019669858830810, -8.000000000000000000, -56.16019669858773966 ) ) ; +#4160 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -2.400000000000000355, 0.000000000000000000 ) ) ; +#4161 = CIRCLE ( 'NONE', #2897, 40.55000000000109139 ) ; +#4162 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4163 = EDGE_CURVE ( 'NONE', #4185, #4430, #4016, .T. ) ; +#4164 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4165 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, -1.000000000000000000, -21.43027221244439673 ) ) ; +#4166 = VERTEX_POINT ( 'NONE', #1676 ) ; +#4167 = ORIENTED_EDGE ( 'NONE', *, *, #3990, .F. ) ; +#4168 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4169 = CARTESIAN_POINT ( 'NONE', ( 52.50000000000027001, -3.000000000000000000, -44.49999999999972289 ) ) ; +#4170 = ADVANCED_FACE ( 'NONE', ( #6592 ), #1707, .F. ) ; +#4171 = FACE_OUTER_BOUND ( 'NONE', #5736, .T. ) ; +#4172 = EDGE_LOOP ( 'NONE', ( #4470, #5566, #5854, #1777, #3695, #6523 ) ) ; +#4173 = CARTESIAN_POINT ( 'NONE', ( -27.93000000000074579, -1.800000000000000711, -55.49999999999972289 ) ) ; +#4174 = ORIENTED_EDGE ( 'NONE', *, *, #372, .F. ) ; +#4175 = CARTESIAN_POINT ( 'NONE', ( -36.30999999999903594, -2.200000000000000622, -56.49999999999972289 ) ) ; +#4176 = ORIENTED_EDGE ( 'NONE', *, *, #6247, .T. ) ; +#4177 = ADVANCED_FACE ( 'NONE', ( #6668 ), #5538, .F. ) ; +#4178 = PLANE ( 'NONE', #94 ) ; +#4179 = FACE_OUTER_BOUND ( 'NONE', #5388, .T. ) ; +#4180 = VECTOR ( 'NONE', #1514, 1000.000000000000000 ) ; +#4181 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, -1.000000000000000000, -51.73725382063752676 ) ) ; +#4182 = CARTESIAN_POINT ( 'NONE', ( -21.43027221245029068, -2.200000000000000622, -51.73725382063096134 ) ) ; +#4183 = CARTESIAN_POINT ( 'NONE', ( 31.73239677215483567, -2.200000000000000622, -13.14398910963733691 ) ) ; +#4184 = CIRCLE ( 'NONE', #1130, 4.500000000000010658 ) ; +#4185 = VERTEX_POINT ( 'NONE', #3976 ) ; +#4186 = ORIENTED_EDGE ( 'NONE', *, *, #1188, .F. ) ; +#4187 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.200000000000000622, 0.000000000000000000 ) ) ; +#4188 = FACE_BOUND ( 'NONE', #908, .T. ) ; +#4189 = CARTESIAN_POINT ( 'NONE', ( 52.50000000000027001, -3.000000000000000000, -44.49999999999972289 ) ) ; +#4190 = CARTESIAN_POINT ( 'NONE', ( -34.92266447387282113, -2.200000000000000622, -35.53553390593242511 ) ) ; +#4191 = AXIS2_PLACEMENT_3D ( 'NONE', #5870, #1024, #3673 ) ; +#4192 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ; +#4193 = EDGE_CURVE ( 'NONE', #2488, #5771, #5937, .T. ) ; +#4194 = CARTESIAN_POINT ( 'NONE', ( -24.28180162019543786, -2.200000000000000622, -60.50000000000001421 ) ) ; +#4195 = VERTEX_POINT ( 'NONE', #4478 ) ; +#4196 = ORIENTED_EDGE ( 'NONE', *, *, #2721, .T. ) ; +#4197 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4198 = LINE ( 'NONE', #3559, #6209 ) ; +#4199 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#4200 = VECTOR ( 'NONE', #6455, 1000.000000000000000 ) ; +#4201 = ORIENTED_EDGE ( 'NONE', *, *, #2386, .T. ) ; +#4202 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, 0.000000000000000000, 52.33725382062663556 ) ) ; +#4203 = VECTOR ( 'NONE', #6776, 1000.000000000000000 ) ; +#4204 = ORIENTED_EDGE ( 'NONE', *, *, #2782, .F. ) ; +#4205 = ADVANCED_FACE ( 'NONE', ( #6432, #3841 ), #3872, .F. ) ; +#4206 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4207 = CIRCLE ( 'NONE', #5117, 0.5999999999999998668 ) ; +#4208 = ORIENTED_EDGE ( 'NONE', *, *, #2171, .T. ) ; +#4209 = LOCAL_TIME ( 22, 35, 51.00000000000000000, #1794 ) ; +#4210 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4211 = CARTESIAN_POINT ( 'NONE', ( -56.71221406934213149, -8.000000000000000000, -55.87173750811967210 ) ) ; +#4212 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4213 = PLANE ( 'NONE', #6379 ) ; +#4214 = CYLINDRICAL_SURFACE ( 'NONE', #5468, 0.5999999999999998668 ) ; +#4215 = ORIENTED_EDGE ( 'NONE', *, *, #2954, .T. ) ; +#4216 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4217 = LINE ( 'NONE', #6370, #2611 ) ; +#4218 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4219 = CARTESIAN_POINT ( 'NONE', ( 52.50000000000027001, -3.000000000000000000, -49.52499999999972147 ) ) ; +#4220 = EDGE_CURVE ( 'NONE', #1453, #14, #5036, .T. ) ; +#4221 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4222 = DIRECTION ( 'NONE', ( -0.9238795325112836299, 0.000000000000000000, -0.3826834323650974423 ) ) ; +#4223 = ORIENTED_EDGE ( 'NONE', *, *, #3539, .T. ) ; +#4224 = EDGE_LOOP ( 'NONE', ( #4383, #2857, #3441, #5666 ) ) ; +#4225 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4226 = EDGE_CURVE ( 'NONE', #2332, #6193, #6281, .T. ) ; +#4227 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245065661, -6.700000000000000178, 51.73725382063078371 ) ) ; +#4228 = ADVANCED_FACE ( 'NONE', ( #3438 ), #6021, .F. ) ; +#4229 = CARTESIAN_POINT ( 'NONE', ( -2.680147770384166961E-13, 11.64513216797408823, -51.94976107412088595 ) ) ; +#4230 = EDGE_CURVE ( 'NONE', #874, #1209, #4138, .T. ) ; +#4231 = ORIENTED_EDGE ( 'NONE', *, *, #2781, .F. ) ; +#4232 = CARTESIAN_POINT ( 'NONE', ( -22.78180162019543786, -2.200000000000000622, -60.00000000000001421 ) ) ; +#4233 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4234 = AXIS2_PLACEMENT_3D ( 'NONE', #3800, #5560, #4994 ) ; +#4235 = ORIENTED_EDGE ( 'NONE', *, *, #5374, .T. ) ; +#4236 = AXIS2_PLACEMENT_3D ( 'NONE', #2327, #1800, #3997 ) ; +#4237 = EDGE_CURVE ( 'NONE', #1588, #286, #5141, .T. ) ; +#4238 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, 0.000000000000000000, -51.13725382063752534 ) ) ; +#4239 = VECTOR ( 'NONE', #3050, 1000.000000000000000 ) ; +#4240 = ORIENTED_EDGE ( 'NONE', *, *, #1721, .T. ) ; +#4241 = AXIS2_PLACEMENT_3D ( 'NONE', #412, #2604, #1485 ) ; +#4242 = EDGE_LOOP ( 'NONE', ( #3769, #3068, #5822, #1419 ) ) ; +#4243 = CIRCLE ( 'NONE', #4596, 6.000000000000001776 ) ; +#4244 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#4245 = CYLINDRICAL_SURFACE ( 'NONE', #403, 0.6000000000000033085 ) ; +#4246 = EDGE_CURVE ( 'NONE', #3879, #1683, #3331, .T. ) ; +#4247 = CARTESIAN_POINT ( 'NONE', ( -4.157457896303442979, -6.700000000000000178, -1.722075445644026814 ) ) ; +#4248 = CIRCLE ( 'NONE', #4606, 4.500000000000010658 ) ; +#4249 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#4250 = CYLINDRICAL_SURFACE ( 'NONE', #6840, 1.500000000000001332 ) ; +#4251 = EDGE_LOOP ( 'NONE', ( #4758, #5504, #6598, #1030, #4458, #3133 ) ) ; +#4252 = CARTESIAN_POINT ( 'NONE', ( 33.45447221780116820, -2.200000000000000622, -8.986531213328273537 ) ) ; +#4253 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4254 = CARTESIAN_POINT ( 'NONE', ( 13.14398910963723033, -2.200000000000000622, 27.23239677215464383 ) ) ; +#4255 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4256 = VECTOR ( 'NONE', #2359, 1000.000000000000000 ) ; +#4257 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4258 = FACE_OUTER_BOUND ( 'NONE', #3320, .T. ) ; +#4259 = ORIENTED_EDGE ( 'NONE', *, *, #1622, .T. ) ; +#4260 = CIRCLE ( 'NONE', #6978, 1.500000000000001332 ) ; +#4261 = VERTEX_POINT ( 'NONE', #6561 ) ; +#4262 = CARTESIAN_POINT ( 'NONE', ( -4.157457896303442979, -2.200000000000000622, -1.722075445644026814 ) ) ; +#4263 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.800000000000000488, -25.96370172317620018 ) ) ; +#4264 = FACE_OUTER_BOUND ( 'NONE', #1329, .T. ) ; +#4265 = EDGE_CURVE ( 'NONE', #4390, #5929, #2530, .T. ) ; +#4266 = LINE ( 'NONE', #4770, #3476 ) ; +#4267 = EDGE_CURVE ( 'NONE', #2282, #2795, #2076, .T. ) ; +#4268 = ORIENTED_EDGE ( 'NONE', *, *, #3504, .F. ) ; +#4269 = VERTEX_POINT ( 'NONE', #6856 ) ; +#4270 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4271 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4272 = EDGE_LOOP ( 'NONE', ( #2397, #3303, #2009, #6774 ) ) ; +#4273 = CIRCLE ( 'NONE', #2457, 4.500000000000010658 ) ; +#4274 = CIRCLE ( 'NONE', #6996, 1.500000000000001332 ) ; +#4275 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#4276 = EDGE_CURVE ( 'NONE', #3130, #2711, #1442, .T. ) ; +#4277 = VERTEX_POINT ( 'NONE', #798 ) ; +#4278 = ORIENTED_EDGE ( 'NONE', *, *, #955, .T. ) ; +#4279 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063502565, -1.000000000000000000, 16.93027221244040703 ) ) ; +#4280 = LINE ( 'NONE', #3745, #1430 ) ; +#4281 = EDGE_CURVE ( 'NONE', #5062, #3472, #2978, .T. ) ; +#4282 = FACE_OUTER_BOUND ( 'NONE', #4441, .T. ) ; +#4283 = CARTESIAN_POINT ( 'NONE', ( -34.92266447387282113, -3.200000000000000622, -34.03553390593242511 ) ) ; +#4284 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4285 = ORIENTED_EDGE ( 'NONE', *, *, #5887, .F. ) ; +#4286 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#4287 = CYLINDRICAL_SURFACE ( 'NONE', #2833, 1.500000000000001332 ) ; +#4288 = AXIS2_PLACEMENT_3D ( 'NONE', #2384, #657, #3950 ) ; +#4289 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4290 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4291 = VECTOR ( 'NONE', #508, 1000.000000000000000 ) ; +#4292 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 4, + ( #1771, #6017, #4432, #177, #1732 ), + .UNSPECIFIED., .F., .F., + ( 5, 5 ), + ( 0.000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#4293 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, 0.000000000000000000 ) ) ; +#4294 = AXIS2_PLACEMENT_3D ( 'NONE', #4634, #4669, #368 ) ; +#4295 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -5.500000000000000000, 0.000000000000000000 ) ) ; +#4296 = VERTEX_POINT ( 'NONE', #2909 ) ; +#4297 = ORIENTED_EDGE ( 'NONE', *, *, #475, .T. ) ; +#4298 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#4299 = DIRECTION ( 'NONE', ( -0.3826834323650836756, 0.000000000000000000, -0.9238795325112894030 ) ) ; +#4300 = DIRECTION ( 'NONE', ( 0.7071067811865485719, 0.000000000000000000, 0.7071067811865465735 ) ) ; +#4301 = CARTESIAN_POINT ( 'NONE', ( 21.47046096782023028, -5.899999999999999467, 36.15552248038188310 ) ) ; +#4302 = AXIS2_PLACEMENT_3D ( 'NONE', #4400, #3227, #5403 ) ; +#4303 = EDGE_CURVE ( 'NONE', #898, #3311, #4806, .T. ) ; +#4304 = ORIENTED_EDGE ( 'NONE', *, *, #945, .T. ) ; +#4305 = ORIENTED_EDGE ( 'NONE', *, *, #5629, .T. ) ; +#4306 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, 0.000000000000000000, 51.73725382062663414 ) ) ; +#4307 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4308 = CYLINDRICAL_SURFACE ( 'NONE', #4381, 4.500000000000232703 ) ; +#4309 = VECTOR ( 'NONE', #1891, 1000.000000000000114 ) ; +#4310 = EDGE_CURVE ( 'NONE', #4269, #1513, #5252, .T. ) ; +#4311 = ORIENTED_EDGE ( 'NONE', *, *, #1875, .T. ) ; +#4312 = AXIS2_PLACEMENT_3D ( 'NONE', #1608, #2760, #2065 ) ; +#4313 = ORIENTED_EDGE ( 'NONE', *, *, #3460, .T. ) ; +#4314 = EDGE_CURVE ( 'NONE', #696, #30, #4697, .T. ) ; +#4315 = ORIENTED_EDGE ( 'NONE', *, *, #2743, .T. ) ; +#4316 = CYLINDRICAL_SURFACE ( 'NONE', #4731, 1.500000000000001332 ) ; +#4317 = EDGE_CURVE ( 'NONE', #4115, #2738, #6488, .T. ) ; +#4318 = EDGE_CURVE ( 'NONE', #2276, #2561, #4591, .T. ) ; +#4319 = CARTESIAN_POINT ( 'NONE', ( -21.43027221245029068, -1.000000000000000000, -51.73725382063096134 ) ) ; +#4320 = CARTESIAN_POINT ( 'NONE', ( -20.08464166905088533, -6.700000000000000178, 36.72954762893098035 ) ) ; +#4321 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4322 = ORIENTED_EDGE ( 'NONE', *, *, #668, .F. ) ; +#4323 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4324 = AXIS2_PLACEMENT_3D ( 'NONE', #5299, #6391, #817 ) ; +#4325 = CARTESIAN_POINT ( 'NONE', ( -24.28180162019543786, -2.200000000000000622, -60.50000000000001421 ) ) ; +#4326 = LINE ( 'NONE', #3794, #2547 ) ; +#4327 = VECTOR ( 'NONE', #2785, 1000.000000000000000 ) ; +#4328 = DIRECTION ( 'NONE', ( -0.9238795325112879597, 0.000000000000000000, 0.3826834323650870062 ) ) ; +#4329 = DIRECTION ( 'NONE', ( -0.9238795325112867385, 0.000000000000000000, 0.3826834323650901148 ) ) ; +#4330 = ORIENTED_EDGE ( 'NONE', *, *, #3276, .F. ) ; +#4331 = VERTEX_POINT ( 'NONE', #5650 ) ; +#4332 = VERTEX_POINT ( 'NONE', #2522 ) ; +#4333 = ADVANCED_FACE ( 'NONE', ( #1958 ), #6746, .F. ) ; +#4334 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4335 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244024005, -2.200000000000000622, 47.23725382063509670 ) ) ; +#4336 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#4337 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#4338 = ORIENTED_EDGE ( 'NONE', *, *, #2490, .F. ) ; +#4339 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980706524, -6.700000000000000178, -30.50000000000000711 ) ) ; +#4340 = CARTESIAN_POINT ( 'NONE', ( 48.50000000000026290, -3.000000000000000000, 47.49999999999972289 ) ) ; +#4341 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#4342 = AXIS2_PLACEMENT_3D ( 'NONE', #2487, #5613, #5080 ) ; +#4343 = ORIENTED_EDGE ( 'NONE', *, *, #1858, .F. ) ; +#4344 = VECTOR ( 'NONE', #828, 1000.000000000000000 ) ; +#4345 = VERTEX_POINT ( 'NONE', #836 ) ; +#4346 = VECTOR ( 'NONE', #5781, 1000.000000000000000 ) ; +#4347 = ORIENTED_EDGE ( 'NONE', *, *, #5798, .F. ) ; +#4348 = LINE ( 'NONE', #2209, #3796 ) ; +#4349 = ADVANCED_FACE ( 'NONE', ( #2374 ), #3449, .T. ) ; +#4350 = AXIS2_PLACEMENT_3D ( 'NONE', #2581, #6366, #3679 ) ; +#4351 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4352 = EDGE_CURVE ( 'NONE', #4545, #3932, #6717, .T. ) ; +#4353 = AXIS2_PLACEMENT_3D ( 'NONE', #1306, #6180, #2955 ) ; +#4354 = ADVANCED_FACE ( 'NONE', ( #5726 ), #5710, .F. ) ; +#4355 = VECTOR ( 'NONE', #5115, 999.9999999999998863 ) ; +#4356 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.800000000000000488, 24.46370172317529068 ) ) ; +#4357 = EDGE_CURVE ( 'NONE', #4397, #4136, #4630, .T. ) ; +#4358 = ORIENTED_EDGE ( 'NONE', *, *, #142, .T. ) ; +#4359 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4360 = CONICAL_SURFACE ( 'NONE', #3446, 1.099999999999989875, 0.7853981633974267407 ) ; +#4361 = CYLINDRICAL_SURFACE ( 'NONE', #5622, 0.5999999999999998668 ) ; +#4362 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.000000000000000000, 0.000000000000000000 ) ) ; +#4363 = AXIS2_PLACEMENT_3D ( 'NONE', #4502, #2852, #1204 ) ; +#4364 = AXIS2_PLACEMENT_3D ( 'NONE', #6002, #1227, #1195 ) ; +#4365 = PLANE ( 'NONE', #5156 ) ; +#4366 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063502565, -1.000000000000000000, 21.43027221244042124 ) ) ; +#4367 = ORIENTED_EDGE ( 'NONE', *, *, #3086, .F. ) ; +#4368 = ORIENTED_EDGE ( 'NONE', *, *, #6994, .T. ) ; +#4369 = ORIENTED_EDGE ( 'NONE', *, *, #3624, .T. ) ; +#4370 = LINE ( 'NONE', #6381, #4418 ) ; +#4371 = AXIS2_PLACEMENT_3D ( 'NONE', #3727, #1116, #3226 ) ; +#4372 = PLANE ( 'NONE', #6971 ) ; +#4373 = PLANE ( 'NONE', #4140 ) ; +#4374 = PLANE ( 'NONE', #2807 ) ; +#4375 = EDGE_CURVE ( 'NONE', #6982, #5093, #254, .T. ) ; +#4376 = CIRCLE ( 'NONE', #1322, 4.500000000000232703 ) ; +#4377 = VERTEX_POINT ( 'NONE', #1921 ) ; +#4378 = CARTESIAN_POINT ( 'NONE', ( 55.89471171693035956, -6.700000000000000178, -23.15234765809377748 ) ) ; +#4379 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#4380 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4381 = AXIS2_PLACEMENT_3D ( 'NONE', #3876, #2735, #2170 ) ; +#4382 = ORIENTED_EDGE ( 'NONE', *, *, #768, .F. ) ; +#4383 = ORIENTED_EDGE ( 'NONE', *, *, #5570, .T. ) ; +#4384 = ORIENTED_EDGE ( 'NONE', *, *, #6005, .T. ) ; +#4385 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4386 = AXIS2_PLACEMENT_3D ( 'NONE', #3600, #912, #5767 ) ; +#4387 = DIRECTION ( 'NONE', ( -0.3826834323650868952, 0.000000000000000000, -0.9238795325112879597 ) ) ; +#4388 = EDGE_CURVE ( 'NONE', #616, #4979, #2177, .T. ) ; +#4389 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4390 = VERTEX_POINT ( 'NONE', #1363 ) ; +#4391 = CARTESIAN_POINT ( 'NONE', ( -34.86578921711158330, -6.700000000000000178, -20.70457056468532286 ) ) ; +#4392 = CARTESIAN_POINT ( 'NONE', ( -50.01517837498788310, -2.200000000000000622, 25.58773010875139420 ) ) ; +#4393 = CARTESIAN_POINT ( 'NONE', ( -40.17369852021918319, -5.899999999999999467, 11.76972587644352508 ) ) ; +#4394 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4395 = ORIENTED_EDGE ( 'NONE', *, *, #1144, .F. ) ; +#4396 = VECTOR ( 'NONE', #2992, 1000.000000000000000 ) ; +#4397 = VERTEX_POINT ( 'NONE', #4092 ) ; +#4398 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4399 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.800000000000000488, 24.46370172317529068 ) ) ; +#4400 = CARTESIAN_POINT ( 'NONE', ( 13.14398910963723033, -2.200000000000000622, 31.73239677215487831 ) ) ; +#4401 = FACE_OUTER_BOUND ( 'NONE', #846, .T. ) ; +#4402 = EDGE_CURVE ( 'NONE', #206, #2732, #6596, .T. ) ; +#4403 = VECTOR ( 'NONE', #2565, 1000.000000000000000 ) ; +#4404 = DIRECTION ( 'NONE', ( -0.9238795325112836299, 0.000000000000000000, -0.3826834323650974423 ) ) ; +#4405 = ORIENTED_EDGE ( 'NONE', *, *, #1516, .T. ) ; +#4406 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, -1.000000000000000000, 50.63725382063018543 ) ) ; +#4407 = AXIS2_PLACEMENT_3D ( 'NONE', #5212, #1347, #3362 ) ; +#4408 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -2.400000000000000355, 35.23402833653069166 ) ) ; +#4409 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#4410 = AXIS2_PLACEMENT_3D ( 'NONE', #6942, #6884, #2650 ) ; +#4411 = ORIENTED_EDGE ( 'NONE', *, *, #4012, .T. ) ; +#4412 = ORIENTED_EDGE ( 'NONE', *, *, #447, .F. ) ; +#4413 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4414 = ADVANCED_FACE ( 'NONE', ( #5291 ), #3551, .F. ) ; +#4415 = ORIENTED_EDGE ( 'NONE', *, *, #3265, .F. ) ; +#4416 = CARTESIAN_POINT ( 'NONE', ( -34.92266447387282113, -3.200000000000000622, -35.53553390593242511 ) ) ; +#4417 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063071265, -6.700000000000000178, -21.43027221245083425 ) ) ; +#4418 = VECTOR ( 'NONE', #6953, 1000.000000000000000 ) ; +#4419 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, -1.000000000000000000 ) ) ; +#4420 = ORIENTED_EDGE ( 'NONE', *, *, #6003, .F. ) ; +#4421 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244847169, -1.000000000000000000, -51.73725382063096134 ) ) ; +#4422 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4423 = AXIS2_PLACEMENT_3D ( 'NONE', #3548, #4120, #5717 ) ; +#4424 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4425 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #2322, 'distance_accuracy_value', 'NONE'); +#4426 = CYLINDRICAL_SURFACE ( 'NONE', #1410, 0.5999999999999998668 ) ; +#4427 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4428 = ORIENTED_EDGE ( 'NONE', *, *, #2526, .F. ) ; +#4429 = ORIENTED_EDGE ( 'NONE', *, *, #2781, .T. ) ; +#4430 = VERTEX_POINT ( 'NONE', #6451 ) ; +#4431 = ORIENTED_EDGE ( 'NONE', *, *, #2779, .F. ) ; +#4432 = CARTESIAN_POINT ( 'NONE', ( -56.16019669858830810, 0.000000000000000000, 56.16019669858773966 ) ) ; +#4433 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -5.500000000000000000, 42.73402833653069166 ) ) ; +#4434 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, -1.000000000000000000, 52.83725382063022380 ) ) ; +#4435 = LOCAL_TIME ( 22, 35, 51.00000000000000000, #2960 ) ; +#4436 = LINE ( 'NONE', #291, #4501 ) ; +#4437 = EDGE_CURVE ( 'NONE', #6118, #5957, #6413, .T. ) ; +#4438 = CARTESIAN_POINT ( 'NONE', ( -2.680147770384166961E-13, -5.500000000000000000, -51.94976107412088595 ) ) ; +#4439 = EDGE_CURVE ( 'NONE', #6798, #2275, #969, .T. ) ; +#4440 = ORIENTED_EDGE ( 'NONE', *, *, #6212, .T. ) ; +#4441 = EDGE_LOOP ( 'NONE', ( #6680, #479, #6204, #1245 ) ) ; +#4442 = EDGE_CURVE ( 'NONE', #4377, #2517, #4866, .T. ) ; +#4443 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -2.400000000000000355, 0.000000000000000000 ) ) ; +#4444 = EDGE_CURVE ( 'NONE', #3394, #2339, #486, .T. ) ; +#4445 = DIRECTION ( 'NONE', ( 0.3826834323650868397, -0.000000000000000000, 0.9238795325112879597 ) ) ; +#4446 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#4447 = ORIENTED_EDGE ( 'NONE', *, *, #2792, .F. ) ; +#4448 = VERTEX_POINT ( 'NONE', #2159 ) ; +#4449 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4450 = VERTEX_POINT ( 'NONE', #1536 ) ; +#4451 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4452 = CIRCLE ( 'NONE', #2854, 6.000000000000001776 ) ; +#4453 = EDGE_CURVE ( 'NONE', #6326, #218, #3773, .T. ) ; +#4454 = FACE_OUTER_BOUND ( 'NONE', #2179, .T. ) ; +#4455 = AXIS2_PLACEMENT_3D ( 'NONE', #1137, #2722, #4896 ) ; +#4456 = CIRCLE ( 'NONE', #3667, 4.500000000000232703 ) ; +#4457 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4458 = ORIENTED_EDGE ( 'NONE', *, *, #2537, .F. ) ; +#4459 = CYLINDRICAL_SURFACE ( 'NONE', #2273, 4.500000000000010658 ) ; +#4460 = EDGE_CURVE ( 'NONE', #206, #6511, #4797, .T. ) ; +#4461 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4462 = CIRCLE ( 'NONE', #6147, 1.500000000000001332 ) ; +#4463 = CARTESIAN_POINT ( 'NONE', ( 52.50000000000027001, -3.000000000000000000, -44.49999999999972289 ) ) ; +#4464 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4465 = CIRCLE ( 'NONE', #1081, 6.000000000002864375 ) ; +#4466 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4467 = ORIENTED_EDGE ( 'NONE', *, *, #4352, .T. ) ; +#4468 = AXIS2_PLACEMENT_3D ( 'NONE', #2684, #3244, #5944 ) ; +#4469 = ORIENTED_EDGE ( 'NONE', *, *, #1926, .F. ) ; +#4470 = ORIENTED_EDGE ( 'NONE', *, *, #4522, .T. ) ; +#4471 = ORIENTED_EDGE ( 'NONE', *, *, #372, .T. ) ; +#4472 = CARTESIAN_POINT ( 'NONE', ( 40.17369852021908372, -5.899999999999999467, -11.76972587644379864 ) ) ; +#4473 = AXIS2_PLACEMENT_3D ( 'NONE', #1660, #593, #3307 ) ; +#4474 = LINE ( 'NONE', #2762, #3575 ) ; +#4475 = PLANE ( 'NONE', #672 ) ; +#4476 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4477 = CIRCLE ( 'NONE', #2199, 1.499999999999999556 ) ; +#4478 = CARTESIAN_POINT ( 'NONE', ( -2.086688644580226895E-12, -2.400000000000000355, 53.44976107412009725 ) ) ; +#4479 = ORIENTED_EDGE ( 'NONE', *, *, #3263, .T. ) ; +#4480 = VECTOR ( 'NONE', #4049, 1000.000000000000000 ) ; +#4481 = VERTEX_POINT ( 'NONE', #5254 ) ; +#4482 = EDGE_CURVE ( 'NONE', #5634, #2979, #461, .T. ) ; +#4483 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4484 = LINE ( 'NONE', #6635, #6901 ) ; +#4485 = EDGE_CURVE ( 'NONE', #1769, #3850, #499, .T. ) ; +#4486 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4487 = EDGE_CURVE ( 'NONE', #531, #578, #3628, .T. ) ; +#4488 = VERTEX_POINT ( 'NONE', #5853 ) ; +#4489 = ORIENTED_EDGE ( 'NONE', *, *, #4795, .F. ) ; +#4490 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#4491 = AXIS2_PLACEMENT_3D ( 'NONE', #5140, #3540, #747 ) ; +#4492 = ORIENTED_EDGE ( 'NONE', *, *, #3504, .T. ) ; +#4493 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -2.400000000000000355, 0.000000000000000000 ) ) ; +#4494 = ADVANCED_FACE ( 'NONE', ( #2560 ), #1005, .F. ) ; +#4495 = CARTESIAN_POINT ( 'NONE', ( -31.73239677215492804, -2.200000000000000622, 8.643989109636883938 ) ) ; +#4496 = ORIENTED_EDGE ( 'NONE', *, *, #4804, .F. ) ; +#4497 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.800000000000000488, -24.46370172317620018 ) ) ; +#4498 = ORIENTED_EDGE ( 'NONE', *, *, #5412, .T. ) ; +#4499 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #1998 ) ; +#4500 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, -1.000000000000000000, 50.63725382062666824 ) ) ; +#4501 = VECTOR ( 'NONE', #1283, 1000.000000000000000 ) ; +#4502 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, -1.000000000000000000, -51.73725382063752676 ) ) ; +#4503 = AXIS2_PLACEMENT_3D ( 'NONE', #6489, #2698, #2196 ) ; +#4504 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4505 = LINE ( 'NONE', #6621, #608 ) ; +#4506 = ORIENTED_EDGE ( 'NONE', *, *, #5827, .F. ) ; +#4507 = ORIENTED_EDGE ( 'NONE', *, *, #524, .F. ) ; +#4508 = ORIENTED_EDGE ( 'NONE', *, *, #2537, .T. ) ; +#4509 = ORIENTED_EDGE ( 'NONE', *, *, #4357, .T. ) ; +#4510 = CARTESIAN_POINT ( 'NONE', ( -40.17369852021977294, -2.200000000000000622, -11.76972587644106660 ) ) ; +#4511 = CARTESIAN_POINT ( 'NONE', ( -53.45932926627660464, -2.200000000000000622, 17.27281431614138896 ) ) ; +#4512 = ADVANCED_FACE ( 'NONE', ( #4258 ), #6890, .F. ) ; +#4513 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4514 = FACE_BOUND ( 'NONE', #1619, .T. ) ; +#4515 = CARTESIAN_POINT ( 'NONE', ( 52.50000000000027001, -3.000000000000000000, -44.49999999999972289 ) ) ; +#4516 = ORIENTED_EDGE ( 'NONE', *, *, #7, .T. ) ; +#4517 = ORIENTED_EDGE ( 'NONE', *, *, #4230, .T. ) ; +#4518 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4519 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4520 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4521 = CIRCLE ( 'NONE', #1125, 4.500000000000013323 ) ; +#4522 = EDGE_CURVE ( 'NONE', #4296, #5763, #427, .T. ) ; +#4523 = ADVANCED_FACE ( 'NONE', ( #2660 ), #2028, .F. ) ; +#4524 = VECTOR ( 'NONE', #42, 1000.000000000000000 ) ; +#4525 = ORIENTED_EDGE ( 'NONE', *, *, #6875, .F. ) ; +#4526 = ORIENTED_EDGE ( 'NONE', *, *, #5345, .T. ) ; +#4527 = VERTEX_POINT ( 'NONE', #1039 ) ; +#4528 = CARTESIAN_POINT ( 'NONE', ( 40.17369852021978005, -6.700000000000000178, 11.76972587644107371 ) ) ; +#4529 = EDGE_LOOP ( 'NONE', ( #4330, #6394, #6434, #5368 ) ) ; +#4530 = CARTESIAN_POINT ( 'NONE', ( -41.45819837980560862, -6.700000000000000178, -46.10008445871534377 ) ) ; +#4531 = AXIS2_PLACEMENT_3D ( 'NONE', #1143, #4871, #3 ) ; +#4532 = EDGE_CURVE ( 'NONE', #4397, #374, #4452, .T. ) ; +#4533 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#4534 = ORIENTED_EDGE ( 'NONE', *, *, #233, .F. ) ; +#4535 = EDGE_CURVE ( 'NONE', #811, #2173, #6348, .T. ) ; +#4536 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4537 = ORIENTED_EDGE ( 'NONE', *, *, #2498, .T. ) ; +#4538 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4539 = ADVANCED_FACE ( 'NONE', ( #3655 ), #2723, .F. ) ; +#4540 = ADVANCED_FACE ( 'NONE', ( #1668 ), #2855, .T. ) ; +#4541 = LINE ( 'NONE', #2323, #411 ) ; +#4542 = CARTESIAN_POINT ( 'NONE', ( 34.86578921711020485, -5.899999999999999467, -20.70457056468766055 ) ) ; +#4543 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4544 = CARTESIAN_POINT ( 'NONE', ( 53.45932926627313719, -6.700000000000000178, -17.27281431614983376 ) ) ; +#4545 = VERTEX_POINT ( 'NONE', #3354 ) ; +#4546 = ORIENTED_EDGE ( 'NONE', *, *, #2622, .F. ) ; +#4547 = VERTEX_POINT ( 'NONE', #1696 ) ; +#4548 = ORIENTED_EDGE ( 'NONE', *, *, #3349, .T. ) ; +#4549 = CIRCLE ( 'NONE', #4985, 5.025000000000002132 ) ; +#4550 = CARTESIAN_POINT ( 'NONE', ( 56.16019669858830810, -8.000000000000000000, 56.16019669858773966 ) ) ; +#4551 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063086897, -6.700000000000000178, 21.43027221245048253 ) ) ; +#4552 = LINE ( 'NONE', #251, #3786 ) ; +#4553 = CYLINDRICAL_SURFACE ( 'NONE', #4923, 0.5999999999999998668 ) ; +#4554 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4555 = EDGE_CURVE ( 'NONE', #811, #1505, #4927, .T. ) ; +#4556 = VERTEX_POINT ( 'NONE', #707 ) ; +#4557 = EDGE_LOOP ( 'NONE', ( #131, #6460, #2934, #341 ) ) ; +#4558 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, -1.000000000000000000, -52.83725382063754239 ) ) ; +#4559 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4560 = LINE ( 'NONE', #2342, #3355 ) ; +#4561 = LOCAL_TIME ( 22, 35, 51.00000000000000000, #3000 ) ; +#4562 = ORIENTED_EDGE ( 'NONE', *, *, #6948, .F. ) ; +#4563 = VERTEX_POINT ( 'NONE', #65 ) ; +#4564 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.7071067811865293651, -0.7071067811865656694 ) ) ; +#4565 = ORIENTED_EDGE ( 'NONE', *, *, #3990, .T. ) ; +#4566 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4567 = ORIENTED_EDGE ( 'NONE', *, *, #6023, .F. ) ; +#4568 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4569 = VERTEX_POINT ( 'NONE', #673 ) ; +#4570 = EDGE_CURVE ( 'NONE', #6193, #2332, #36, .T. ) ; +#4571 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.800000000000000488, -24.46370172317620018 ) ) ; +#4572 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -6.700000000000000178, 0.000000000000000000 ) ) ; +#4573 = EDGE_CURVE ( 'NONE', #6771, #1392, #3998, .T. ) ; +#4574 = CIRCLE ( 'NONE', #6945, 1.500000000000001332 ) ; +#4575 = FACE_OUTER_BOUND ( 'NONE', #5075, .T. ) ; +#4576 = EDGE_CURVE ( 'NONE', #762, #6771, #4505, .T. ) ; +#4577 = CIRCLE ( 'NONE', #3099, 40.55000000000109139 ) ; +#4578 = EDGE_CURVE ( 'NONE', #3985, #5476, #4577, .T. ) ; +#4579 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4580 = ORIENTED_EDGE ( 'NONE', *, *, #4149, .F. ) ; +#4581 = CARTESIAN_POINT ( 'NONE', ( -41.45819837980560862, -8.000000000000000000, -46.10008445871534377 ) ) ; +#4582 = ORIENTED_EDGE ( 'NONE', *, *, #4788, .F. ) ; +#4583 = ORIENTED_EDGE ( 'NONE', *, *, #2464, .T. ) ; +#4584 = ORIENTED_EDGE ( 'NONE', *, *, #1124, .F. ) ; +#4585 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#4586 = CIRCLE ( 'NONE', #4234, 0.5999999999999998668 ) ; +#4587 = CYLINDRICAL_SURFACE ( 'NONE', #4608, 1.000000000000000888 ) ; +#4588 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4589 = DIRECTION ( 'NONE', ( -0.7071067811865536790, 0.000000000000000000, -0.7071067811865413555 ) ) ; +#4590 = AXIS2_PLACEMENT_3D ( 'NONE', #6347, #5852, #4164 ) ; +#4591 = LINE ( 'NONE', #873, #3424 ) ; +#4592 = CIRCLE ( 'NONE', #3568, 40.55000000000109139 ) ; +#4593 = ORIENTED_EDGE ( 'NONE', *, *, #536, .F. ) ; +#4594 = EDGE_LOOP ( 'NONE', ( #1898, #1443, #1049, #1140, #3967, #4820 ) ) ; +#4595 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -5.899999999999999467, -25.96370172317620018 ) ) ; +#4596 = AXIS2_PLACEMENT_3D ( 'NONE', #3623, #1500, #4162 ) ; +#4597 = EDGE_CURVE ( 'NONE', #247, #1157, #4586, .T. ) ; +#4598 = LINE ( 'NONE', #2341, #338 ) ; +#4599 = AXIS2_PLACEMENT_3D ( 'NONE', #4956, #1695, #2218 ) ; +#4600 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4601 = CIRCLE ( 'NONE', #1093, 1.500000000000001332 ) ; +#4602 = ORIENTED_EDGE ( 'NONE', *, *, #6954, .T. ) ; +#4603 = EDGE_LOOP ( 'NONE', ( #3573, #366 ) ) ; +#4604 = FACE_OUTER_BOUND ( 'NONE', #6051, .T. ) ; +#4605 = ORIENTED_EDGE ( 'NONE', *, *, #1328, .F. ) ; +#4606 = AXIS2_PLACEMENT_3D ( 'NONE', #4227, #4801, #574 ) ; +#4607 = CARTESIAN_POINT ( 'NONE', ( 40.45517745126431919, -8.000000000000000000, -44.98475983471188755 ) ) ; +#4608 = AXIS2_PLACEMENT_3D ( 'NONE', #6341, #1918, #2403 ) ; +#4609 = EDGE_LOOP ( 'NONE', ( #2329, #555 ) ) ; +#4610 = LINE ( 'NONE', #2467, #4996 ) ; +#4611 = EDGE_LOOP ( 'NONE', ( #5201, #3075, #6435, #2702 ) ) ; +#4612 = DATE_TIME_ROLE ( 'classification_date' ) ; +#4613 = CARTESIAN_POINT ( 'NONE', ( -20.08464166905088533, -5.899999999999999467, 36.72954762893098035 ) ) ; +#4614 = CARTESIAN_POINT ( 'NONE', ( -4.300000000000265388, 11.64513216797408823, -51.94976107412088595 ) ) ; +#4615 = DIRECTION ( 'NONE', ( -0.9238795325112866275, 0.000000000000000000, 0.3826834323650901148 ) ) ; +#4616 = ADVANCED_FACE ( 'NONE', ( #28 ), #129, .F. ) ; +#4617 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4618 = CARTESIAN_POINT ( 'NONE', ( 25.58773010875158604, -2.200000000000000622, 50.01517837498784047 ) ) ; +#4619 = ORIENTED_EDGE ( 'NONE', *, *, #53, .F. ) ; +#4620 = FACE_OUTER_BOUND ( 'NONE', #6622, .T. ) ; +#4621 = ORIENTED_EDGE ( 'NONE', *, *, #579, .F. ) ; +#4622 = VERTEX_POINT ( 'NONE', #2253 ) ; +#4623 = ORIENTED_EDGE ( 'NONE', *, *, #5611, .F. ) ; +#4624 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, -1.000000000000000000, 22.53027221244568068 ) ) ; +#4625 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#4626 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4627 = AXIS2_PLACEMENT_3D ( 'NONE', #3729, #4, #6020 ) ; +#4628 = AXIS2_PLACEMENT_3D ( 'NONE', #5411, #5050, #3484 ) ; +#4629 = LINE ( 'NONE', #6780, #4022 ) ; +#4630 = LINE ( 'NONE', #6316, #5819 ) ; +#4631 = ORIENTED_EDGE ( 'NONE', *, *, #632, .T. ) ; +#4632 = VERTEX_POINT ( 'NONE', #6012 ) ; +#4633 = CARTESIAN_POINT ( 'NONE', ( -20.70457056468520562, -5.899999999999999467, 34.86578921711165435 ) ) ; +#4634 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.200000000000000622, 0.000000000000000000 ) ) ; +#4635 = EDGE_CURVE ( 'NONE', #5771, #2488, #963, .T. ) ; +#4636 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#4637 = ORIENTED_EDGE ( 'NONE', *, *, #4957, .F. ) ; +#4638 = ORIENTED_EDGE ( 'NONE', *, *, #3922, .T. ) ; +#4639 = CIRCLE ( 'NONE', #3831, 1.500000000000001332 ) ; +#4640 = LINE ( 'NONE', #946, #2235 ) ; +#4641 = VERTEX_POINT ( 'NONE', #172 ) ; +#4642 = VECTOR ( 'NONE', #5231, 1000.000000000000000 ) ; +#4643 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, -1.800000000000000711, -63.49999999999972289 ) ) ; +#4644 = ADVANCED_FACE ( 'NONE', ( #2187 ), #5427, .T. ) ; +#4645 = VERTEX_POINT ( 'NONE', #2755 ) ; +#4646 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4647 = VERTEX_POINT ( 'NONE', #5954 ) ; +#4648 = APPROVAL_DATE_TIME ( #6764, #5952 ) ; +#4649 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4650 = CONICAL_SURFACE ( 'NONE', #4407, 1.099999999999989875, 0.7853981633974267407 ) ; +#4651 = PLANE ( 'NONE', #513 ) ; +#4652 = CYLINDRICAL_SURFACE ( 'NONE', #1412, 4.500000000000010658 ) ; +#4653 = LINE ( 'NONE', #3467, #2751 ) ; +#4654 = ORIENTED_EDGE ( 'NONE', *, *, #4437, .F. ) ; +#4655 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4656 = ORIENTED_EDGE ( 'NONE', *, *, #1761, .T. ) ; +#4657 = VERTEX_POINT ( 'NONE', #5980 ) ; +#4658 = ORIENTED_EDGE ( 'NONE', *, *, #6642, .F. ) ; +#4659 = FACE_BOUND ( 'NONE', #3725, .T. ) ; +#4660 = LINE ( 'NONE', #6198, #1439 ) ; +#4661 = AXIS2_PLACEMENT_3D ( 'NONE', #2595, #6319, #5198 ) ; +#4662 = CARTESIAN_POINT ( 'NONE', ( 36.15552248038325445, -5.899999999999999467, 21.47046096781793167 ) ) ; +#4663 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4664 = CARTESIAN_POINT ( 'NONE', ( -22.78180162019543786, -2.200000000000000622, -58.50000000000000000 ) ) ; +#4665 = VERTEX_POINT ( 'NONE', #1109 ) ; +#4666 = VERTEX_POINT ( 'NONE', #3930 ) ; +#4667 = CARTESIAN_POINT ( 'NONE', ( -40.74772366876678120, -6.700000000000000178, 10.38390657767658531 ) ) ; +#4668 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 4, + ( #3170, #2013, #4211, #991, #3709 ), + .UNSPECIFIED., .F., .F., + ( 5, 5 ), + ( 0.03833932269099839252, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#4669 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4670 = ADVANCED_FACE ( 'NONE', ( #6050 ), #1240, .F. ) ; +#4671 = FACE_OUTER_BOUND ( 'NONE', #930, .T. ) ; +#4672 = AXIS2_PLACEMENT_3D ( 'NONE', #4421, #2894, #3419 ) ; +#4673 = ADVANCED_FACE ( 'NONE', ( #3286 ), #3319, .T. ) ; +#4674 = ADVANCED_FACE ( 'NONE', ( #637 ), #5216, .T. ) ; +#4675 = ADVANCED_FACE ( 'NONE', ( #1431 ), #1389, .T. ) ; +#4676 = VERTEX_POINT ( 'NONE', #4544 ) ; +#4677 = CIRCLE ( 'NONE', #4324, 1.500000000000004219 ) ; +#4678 = CARTESIAN_POINT ( 'NONE', ( -13.14398910962626843, -2.200000000000000622, 27.23239677215919130 ) ) ; +#4679 = EDGE_LOOP ( 'NONE', ( #5429, #5540, #2505, #6483 ) ) ; +#4680 = LOCAL_TIME ( 22, 35, 51.00000000000000000, #3069 ) ; +#4681 = FACE_OUTER_BOUND ( 'NONE', #777, .T. ) ; +#4682 = ORIENTED_EDGE ( 'NONE', *, *, #4310, .F. ) ; +#4683 = ORIENTED_EDGE ( 'NONE', *, *, #19, .T. ) ; +#4684 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4685 = PLANE ( 'NONE', #303 ) ; +#4686 = ADVANCED_FACE ( 'NONE', ( #2473 ), #4081, .F. ) ; +#4687 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -2.400000000000000355, 51.94976107412009725 ) ) ; +#4688 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4689 = EDGE_CURVE ( 'NONE', #6568, #842, #2363, .T. ) ; +#4690 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, -0.5000000000000092149, -51.73725382063397404 ) ) ; +#4691 = ORIENTED_EDGE ( 'NONE', *, *, #6181, .T. ) ; +#4692 = ORIENTED_EDGE ( 'NONE', *, *, #3798, .T. ) ; +#4693 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4694 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4695 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4696 = LINE ( 'NONE', #2690, #6038 ) ; +#4697 = LINE ( 'NONE', #1847, #1965 ) ; +#4698 = ORIENTED_EDGE ( 'NONE', *, *, #901, .F. ) ; +#4699 = AXIS2_PLACEMENT_3D ( 'NONE', #896, #4725, #321 ) ; +#4700 = EDGE_LOOP ( 'NONE', ( #1890, #5510, #1487, #3832 ) ) ; +#4701 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -5.899999999999999467, -24.46370172317620018 ) ) ; +#4702 = AXIS2_PLACEMENT_3D ( 'NONE', #3963, #5638, #6113 ) ; +#4703 = PLANE ( 'NONE', #4294 ) ; +#4704 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387191874, -2.200000000000000622, -53.46446609406757489 ) ) ; +#4705 = AXIS2_PLACEMENT_3D ( 'NONE', #5349, #2048, #5782 ) ; +#4706 = CIRCLE ( 'NONE', #6611, 5.999999999999998224 ) ; +#4707 = ADVANCED_FACE ( 'NONE', ( #6115 ), #2899, .F. ) ; +#4708 = CIRCLE ( 'NONE', #397, 1.000000000000000888 ) ; +#4709 = VERTEX_POINT ( 'NONE', #6190 ) ; +#4710 = AXIS2_PLACEMENT_3D ( 'NONE', #5844, #4787, #1561 ) ; +#4711 = CARTESIAN_POINT ( 'NONE', ( -36.30999999999903594, -1.800000000000000711, -56.49999999999972289 ) ) ; +#4712 = ORIENTED_EDGE ( 'NONE', *, *, #3382, .T. ) ; +#4713 = AXIS2_PLACEMENT_3D ( 'NONE', #2285, #2250, #1873 ) ; +#4714 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'detail', '', ( #162 ) ) ; +#4715 = VECTOR ( 'NONE', #6877, 1000.000000000000000 ) ; +#4716 = CARTESIAN_POINT ( 'NONE', ( -10.38390657767399894, -6.700000000000000178, 39.24772366876744201 ) ) ; +#4717 = AXIS2_PLACEMENT_3D ( 'NONE', #4399, #3868, #3398 ) ; +#4718 = ORIENTED_EDGE ( 'NONE', *, *, #3531, .F. ) ; +#4719 = CARTESIAN_POINT ( 'NONE', ( -27.93000000000074579, -1.800000000000000711, -56.49999999999972289 ) ) ; +#4720 = LINE ( 'NONE', #5670, #761 ) ; +#4721 = EDGE_CURVE ( 'NONE', #2935, #4277, #2867, .T. ) ; +#4722 = AXIS2_PLACEMENT_3D ( 'NONE', #1001, #6985, #2156 ) ; +#4723 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4724 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -5.500000000000000000, 36.73402833653069166 ) ) ; +#4725 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4726 = EDGE_LOOP ( 'NONE', ( #2385, #6283 ) ) ; +#4727 = ORIENTED_EDGE ( 'NONE', *, *, #5012, .F. ) ; +#4728 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4729 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4730 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000026290, -8.000000000000000000, 33.49999999999970868 ) ) ; +#4731 = AXIS2_PLACEMENT_3D ( 'NONE', #3240, #7008, #6401 ) ; +#4732 = FACE_OUTER_BOUND ( 'NONE', #3851, .T. ) ; +#4733 = CARTESIAN_POINT ( 'NONE', ( -0.000000000000000000, -5.500000000000000000, -58.50000000000039790 ) ) ; +#4734 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4735 = ORIENTED_EDGE ( 'NONE', *, *, #736, .T. ) ; +#4736 = ORIENTED_EDGE ( 'NONE', *, *, #6466, .T. ) ; +#4737 = EDGE_CURVE ( 'NONE', #2959, #6443, #5595, .T. ) ; +#4738 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4739 = FACE_OUTER_BOUND ( 'NONE', #6974, .T. ) ; +#4740 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063502565, -1.000000000000000000, -21.43027221244042124 ) ) ; +#4741 = AXIS2_PLACEMENT_3D ( 'NONE', #1360, #4513, #4476 ) ; +#4742 = EDGE_LOOP ( 'NONE', ( #1262, #1724, #1094, #4186 ) ) ; +#4743 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4744 = VERTEX_POINT ( 'NONE', #4618 ) ; +#4745 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4746 = VECTOR ( 'NONE', #2277, 1000.000000000000000 ) ; +#4747 = ORIENTED_EDGE ( 'NONE', *, *, #6425, .F. ) ; +#4748 = FACE_OUTER_BOUND ( 'NONE', #5651, .T. ) ; +#4749 = FACE_OUTER_BOUND ( 'NONE', #3281, .T. ) ; +#4750 = EDGE_CURVE ( 'NONE', #5228, #6030, #4653, .T. ) ; +#4751 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4752 = EDGE_CURVE ( 'NONE', #4488, #5756, #2967, .T. ) ; +#4753 = CYLINDRICAL_SURFACE ( 'NONE', #151, 5.999999999999998224 ) ; +#4754 = EDGE_CURVE ( 'NONE', #2970, #6583, #3315, .T. ) ; +#4755 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4756 = ADVANCED_FACE ( 'NONE', ( #6265 ), #2189, .F. ) ; +#4757 = AXIS2_PLACEMENT_3D ( 'NONE', #6299, #3205, #5381 ) ; +#4758 = ORIENTED_EDGE ( 'NONE', *, *, #2731, .T. ) ; +#4759 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -8.000000000000000000, -62.00000000000002132 ) ) ; +#4760 = FACE_BOUND ( 'NONE', #176, .T. ) ; +#4761 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245065661, -1.000000000000000000, 56.23725382063079081 ) ) ; +#4762 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4763 = VECTOR ( 'NONE', #6400, 1000.000000000000000 ) ; +#4764 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, 0.000000000000000000, -51.73725382063752676 ) ) ; +#4765 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4766 = ORIENTED_EDGE ( 'NONE', *, *, #127, .F. ) ; +#4767 = ORIENTED_EDGE ( 'NONE', *, *, #407, .T. ) ; +#4768 = LINE ( 'NONE', #2982, #3386 ) ; +#4769 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4770 = CARTESIAN_POINT ( 'NONE', ( -17.30144700593532292, -2.200000000000000622, 30.01032132651306483 ) ) ; +#4771 = EDGE_CURVE ( 'NONE', #6583, #6175, #2395, .T. ) ; +#4772 = EDGE_CURVE ( 'NONE', #6030, #5793, #1877, .T. ) ; +#4773 = VECTOR ( 'NONE', #719, 1000.000000000000000 ) ; +#4774 = EDGE_LOOP ( 'NONE', ( #5940, #288 ) ) ; +#4775 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244847169, -2.200000000000000622, -51.73725382063096134 ) ) ; +#4776 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, -3.083952846180982984E-15 ) ) ; +#4777 = CIRCLE ( 'NONE', #3523, 4.500000000000010658 ) ; +#4778 = ORIENTED_EDGE ( 'NONE', *, *, #1033, .F. ) ; +#4779 = CARTESIAN_POINT ( 'NONE', ( -2.086688644580226895E-12, -5.500000000000000000, 53.44976107412009725 ) ) ; +#4780 = VECTOR ( 'NONE', #6968, 1000.000000000000000 ) ; +#4781 = ORIENTED_EDGE ( 'NONE', *, *, #469, .F. ) ; +#4782 = EDGE_LOOP ( 'NONE', ( #4235, #390, #3700, #1017, #5878, #1193 ) ) ; +#4783 = APPROVAL_PERSON_ORGANIZATION ( #3926, #1546, #5555 ) ; +#4784 = DIRECTION ( 'NONE', ( 0.9238795325112867385, 0.000000000000000000, -0.3826834323650901148 ) ) ; +#4785 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#4786 = FACE_OUTER_BOUND ( 'NONE', #4611, .T. ) ; +#4787 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4788 = EDGE_CURVE ( 'NONE', #6291, #1903, #825, .T. ) ; +#4789 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#4790 = EDGE_LOOP ( 'NONE', ( #4997, #6022, #4496, #2891 ) ) ; +#4791 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.800000000000000488, -24.46370172317620018 ) ) ; +#4792 = CARTESIAN_POINT ( 'NONE', ( -21.43027221245029068, -2.200000000000000622, -56.23725382063096845 ) ) ; +#4793 = LINE ( 'NONE', #533, #3809 ) ; +#4794 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4795 = EDGE_CURVE ( 'NONE', #4195, #2903, #4462, .T. ) ; +#4796 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4797 = LINE ( 'NONE', #2592, #1176 ) ; +#4798 = ORIENTED_EDGE ( 'NONE', *, *, #1512, .T. ) ; +#4799 = VERTEX_POINT ( 'NONE', #1911 ) ; +#4800 = FACE_OUTER_BOUND ( 'NONE', #5174, .T. ) ; +#4801 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4802 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#4803 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4804 = EDGE_CURVE ( 'NONE', #463, #5804, #268, .T. ) ; +#4805 = VECTOR ( 'NONE', #1662, 1000.000000000000000 ) ; +#4806 = CIRCLE ( 'NONE', #266, 4.500000000000232703 ) ; +#4807 = EDGE_LOOP ( 'NONE', ( #2172, #4489 ) ) ; +#4808 = ORIENTED_EDGE ( 'NONE', *, *, #3250, .T. ) ; +#4809 = EDGE_CURVE ( 'NONE', #5678, #2145, #6719, .T. ) ; +#4810 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4811 = CARTESIAN_POINT ( 'NONE', ( -52.50000000000027001, -3.000000000000000000, -44.49999999999971578 ) ) ; +#4812 = VECTOR ( 'NONE', #2549, 1000.000000000000000 ) ; +#4813 = EDGE_LOOP ( 'NONE', ( #5176, #5129, #2972, #5269 ) ) ; +#4814 = AXIS2_PLACEMENT_3D ( 'NONE', #3747, #2149, #6439 ) ; +#4815 = AXIS2_PLACEMENT_3D ( 'NONE', #6916, #6373, #1533 ) ; +#4816 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4817 = AXIS2_PLACEMENT_3D ( 'NONE', #967, #3080, #2590 ) ; +#4818 = ORIENTED_EDGE ( 'NONE', *, *, #5573, .T. ) ; +#4819 = CIRCLE ( 'NONE', #2870, 25.30000000000000071 ) ; +#4820 = ORIENTED_EDGE ( 'NONE', *, *, #1629, .F. ) ; +#4821 = VECTOR ( 'NONE', #782, 1000.000000000000000 ) ; +#4822 = FACE_OUTER_BOUND ( 'NONE', #4594, .T. ) ; +#4823 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4824 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4825 = AXIS2_PLACEMENT_3D ( 'NONE', #6956, #4840, #2627 ) ; +#4826 = FACE_OUTER_BOUND ( 'NONE', #5794, .T. ) ; +#4827 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -5.500000000000000000, -1.500000000000004219 ) ) ; +#4828 = ORIENTED_EDGE ( 'NONE', *, *, #881, .T. ) ; +#4829 = CARTESIAN_POINT ( 'NONE', ( -50.01517837498788310, -6.700000000000000178, 25.58773010875139420 ) ) ; +#4830 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, -8.000000000000000000, 63.49999999999972289 ) ) ; +#4831 = CARTESIAN_POINT ( 'NONE', ( -23.15234765808233064, -6.700000000000000178, 55.89471171693511309 ) ) ; +#4832 = FACE_OUTER_BOUND ( 'NONE', #3978, .T. ) ; +#4833 = CIRCLE ( 'NONE', #3340, 1.500000000000001332 ) ; +#4834 = ADVANCED_FACE ( 'NONE', ( #319 ), #927, .F. ) ; +#4835 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4836 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4837 = ORIENTED_EDGE ( 'NONE', *, *, #3743, .F. ) ; +#4838 = ORIENTED_EDGE ( 'NONE', *, *, #4318, .T. ) ; +#4839 = LINE ( 'NONE', #2694, #5788 ) ; +#4840 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4841 = CARTESIAN_POINT ( 'NONE', ( -31.73239677215492804, -2.200000000000000622, 13.14398910963711486 ) ) ; +#4842 = CARTESIAN_POINT ( 'NONE', ( -36.30999999999903594, -8.000000000000000000, -62.00000000000002132 ) ) ; +#4843 = EDGE_CURVE ( 'NONE', #5625, #1411, #3748, .T. ) ; +#4844 = ORIENTED_EDGE ( 'NONE', *, *, #5478, .F. ) ; +#4845 = ORIENTED_EDGE ( 'NONE', *, *, #5707, .T. ) ; +#4846 = EDGE_CURVE ( 'NONE', #1007, #5132, #3207, .T. ) ; +#4847 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#4848 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -2.400000000000000355, 0.000000000000000000 ) ) ; +#4849 = CIRCLE ( 'NONE', #1454, 1.099999999999989875 ) ; +#4850 = CARTESIAN_POINT ( 'NONE', ( -36.30999999999903594, -1.800000000000000711, -55.49999999999972289 ) ) ; +#4851 = EDGE_LOOP ( 'NONE', ( #1859, #694, #4631, #3681 ) ) ; +#4852 = ORIENTED_EDGE ( 'NONE', *, *, #5493, .T. ) ; +#4853 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -2.200000000000000622, -62.00000000000002132 ) ) ; +#4854 = LINE ( 'NONE', #3136, #3235 ) ; +#4855 = ADVANCED_FACE ( 'NONE', ( #2081 ), #419, .F. ) ; +#4856 = CYLINDRICAL_SURFACE ( 'NONE', #6275, 4.500000000000003553 ) ; +#4857 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#4858 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4859 = EDGE_LOOP ( 'NONE', ( #1320, #5236, #6116, #2381, #3347, #2418 ) ) ; +#4860 = CARTESIAN_POINT ( 'NONE', ( 52.50000000000027001, -3.000000000000000000, -49.52499999999972147 ) ) ; +#4861 = AXIS2_PLACEMENT_3D ( 'NONE', #455, #1191, #2616 ) ; +#4862 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.7320688075339150114, -0.6812306958996136030 ) ) ; +#4863 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4864 = LINE ( 'NONE', #7019, #1745 ) ; +#4865 = VECTOR ( 'NONE', #5766, 1000.000000000000000 ) ; +#4866 = LINE ( 'NONE', #538, #6258 ) ; +#4867 = VERTEX_POINT ( 'NONE', #1028 ) ; +#4868 = ORIENTED_EDGE ( 'NONE', *, *, #4069, .T. ) ; +#4869 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -6.700000000000000178, 0.000000000000000000 ) ) ; +#4870 = CARTESIAN_POINT ( 'NONE', ( -28.93000000000074579, -2.200000000000000622, -56.49999999999972289 ) ) ; +#4871 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#4872 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4873 = AXIS2_PLACEMENT_3D ( 'NONE', #2044, #525, #3611 ) ; +#4874 = EDGE_LOOP ( 'NONE', ( #6677, #3120, #311, #3366, #1966, #4074, #570, #192 ) ) ; +#4875 = ADVANCED_FACE ( 'NONE', ( #4826 ), #1594, .F. ) ; +#4876 = CYLINDRICAL_SURFACE ( 'NONE', #1593, 1.499999999999999556 ) ; +#4877 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4878 = FACE_BOUND ( 'NONE', #1620, .T. ) ; +#4879 = AXIS2_PLACEMENT_3D ( 'NONE', #6063, #2340, #2874 ) ; +#4880 = EDGE_CURVE ( 'NONE', #6338, #2552, #529, .T. ) ; +#4881 = ADVANCED_FACE ( 'NONE', ( #484, #2116 ), #4213, .F. ) ; +#4882 = ADVANCED_FACE ( 'NONE', ( #2646 ), #4753, .F. ) ; +#4883 = VERTEX_POINT ( 'NONE', #6980 ) ; +#4884 = AXIS2_PLACEMENT_3D ( 'NONE', #5113, #4585, #2442 ) ; +#4885 = EDGE_LOOP ( 'NONE', ( #799, #1372, #2441, #2737 ) ) ; +#4886 = ORIENTED_EDGE ( 'NONE', *, *, #3296, .F. ) ; +#4887 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4888 = VECTOR ( 'NONE', #6800, 1000.000000000000000 ) ; +#4889 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#4890 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000027711, 0.000000000000000000, 52.69999999572329585 ) ) ; +#4891 = ORIENTED_EDGE ( 'NONE', *, *, #2325, .T. ) ; +#4892 = EDGE_CURVE ( 'NONE', #6706, #4034, #3437, .T. ) ; +#4893 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4894 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4895 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, -1.000000000000000000, 52.83725382063022380 ) ) ; +#4896 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4897 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, 0.000000000000000000 ) ) ; +#4898 = ORIENTED_EDGE ( 'NONE', *, *, #1742, .F. ) ; +#4899 = ORIENTED_EDGE ( 'NONE', *, *, #3265, .T. ) ; +#4900 = LINE ( 'NONE', #2626, #7023 ) ; +#4901 = FACE_OUTER_BOUND ( 'NONE', #3455, .T. ) ; +#4902 = CYLINDRICAL_SURFACE ( 'NONE', #4302, 4.500000000000232703 ) ; +#4903 = CYLINDRICAL_SURFACE ( 'NONE', #1458, 4.500000000000232703 ) ; +#4904 = ORIENTED_EDGE ( 'NONE', *, *, #3703, .T. ) ; +#4905 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4906 = PLANE ( 'NONE', #2358 ) ; +#4907 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, -8.000000000000000000, -63.49999999999972289 ) ) ; +#4908 = AXIS2_PLACEMENT_3D ( 'NONE', #5783, #3074, #6156 ) ; +#4909 = EDGE_CURVE ( 'NONE', #4547, #463, #3711, .T. ) ; +#4910 = VERTEX_POINT ( 'NONE', #4283 ) ; +#4911 = EDGE_LOOP ( 'NONE', ( #791, #2856 ) ) ; +#4912 = AXIS2_PLACEMENT_3D ( 'NONE', #4916, #3883, #1689 ) ; +#4913 = EDGE_LOOP ( 'NONE', ( #6821, #6360, #541, #5687, #1520, #5147, #1295, #981, #150, #3179, #2278, #1813, #4683, #1802, #763, #3629, #3774, #684, #1346, #6132, #3341, #4167, #3199 ) ) ; +#4914 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -6.700000000000000178, 0.000000000000000000 ) ) ; +#4915 = CIRCLE ( 'NONE', #5481, 5.025000000000002132 ) ; +#4916 = CARTESIAN_POINT ( 'NONE', ( 40.74772366876671725, -6.700000000000000178, -10.38390657767686953 ) ) ; +#4917 = CONICAL_SURFACE ( 'NONE', #1973, 1.099999999999989875, 0.7853981633974267407 ) ; +#4918 = CIRCLE ( 'NONE', #5039, 5.025000000000002132 ) ; +#4919 = FACE_OUTER_BOUND ( 'NONE', #262, .T. ) ; +#4920 = EDGE_LOOP ( 'NONE', ( #6242, #6270, #4395, #4767 ) ) ; +#4921 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4922 = ADVANCED_FACE ( 'NONE', ( #5315 ), #3109, .F. ) ; +#4923 = AXIS2_PLACEMENT_3D ( 'NONE', #797, #3974, #293 ) ; +#4924 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -5.500000000000000000, 35.23402833653069166 ) ) ; +#4925 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4926 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4927 = LINE ( 'NONE', #95, #380 ) ; +#4928 = ORIENTED_EDGE ( 'NONE', *, *, #2386, .F. ) ; +#4929 = ORIENTED_EDGE ( 'NONE', *, *, #5750, .T. ) ; +#4930 = CARTESIAN_POINT ( 'NONE', ( -20.70457056468520918, -5.899999999999999467, 34.86578921711165435 ) ) ; +#4931 = CIRCLE ( 'NONE', #4825, 1.100000000000017630 ) ; +#4932 = CARTESIAN_POINT ( 'NONE', ( 36.72954762892944558, -2.200000000000000622, -20.08464166905341841 ) ) ; +#4933 = FACE_OUTER_BOUND ( 'NONE', #3295, .T. ) ; +#4934 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4935 = CARTESIAN_POINT ( 'NONE', ( 10.38390657767673275, -5.899999999999999467, 40.74772366876675278 ) ) ; +#4936 = EDGE_CURVE ( 'NONE', #3536, #4448, #6848, .T. ) ; +#4937 = VERTEX_POINT ( 'NONE', #6909 ) ; +#4938 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#4939 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, 0.000000000000000000, 22.03027221244568779 ) ) ; +#4940 = ORIENTED_EDGE ( 'NONE', *, *, #1501, .T. ) ; +#4941 = AXIS2_PLACEMENT_3D ( 'NONE', #5579, #3447, #1256 ) ; +#4942 = ORIENTED_EDGE ( 'NONE', *, *, #2213, .T. ) ; +#4943 = EDGE_LOOP ( 'NONE', ( #435, #752, #1354, #4046 ) ) ; +#4944 = FACE_OUTER_BOUND ( 'NONE', #5167, .T. ) ; +#4945 = VERTEX_POINT ( 'NONE', #1463 ) ; +#4946 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4947 = CIRCLE ( 'NONE', #6767, 5.025000000000002132 ) ; +#4948 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, -1.000000000000000000, -22.53027221245302414 ) ) ; +#4949 = CARTESIAN_POINT ( 'NONE', ( -52.69999999572387139, -8.000000000000000000, 63.49999999999969447 ) ) ; +#4950 = ORIENTED_EDGE ( 'NONE', *, *, #5750, .F. ) ; +#4951 = EDGE_CURVE ( 'NONE', #6822, #3246, #5025, .T. ) ; +#4952 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4953 = DIRECTION ( 'NONE', ( 8.659560562354744271E-17, -0.7071067811865627828, 0.7071067811865322517 ) ) ; +#4954 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, 0.000000000000000000, 63.49999999999972289 ) ) ; +#4955 = EDGE_CURVE ( 'NONE', #1505, #4945, #5933, .T. ) ; +#4956 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244024005, -1.000000000000000000, 51.73725382063510381 ) ) ; +#4957 = EDGE_CURVE ( 'NONE', #3750, #1276, #1297, .T. ) ; +#4958 = EDGE_CURVE ( 'NONE', #4937, #473, #994, .T. ) ; +#4959 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4960 = VERTEX_POINT ( 'NONE', #4320 ) ; +#4961 = CIRCLE ( 'NONE', #5769, 4.500000000000010658 ) ; +#4962 = EDGE_LOOP ( 'NONE', ( #1572, #6136, #2944, #3356, #1365, #2367, #4415 ) ) ; +#4963 = EDGE_LOOP ( 'NONE', ( #2400, #331, #1951, #1776, #2344, #1716 ) ) ; +#4964 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000027711, -8.000000000000000000, 52.69999999572329585 ) ) ; +#4965 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4966 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4967 = AXIS2_PLACEMENT_3D ( 'NONE', #4301, #5365, #645 ) ; +#4968 = CARTESIAN_POINT ( 'NONE', ( -1.722075445643978187, -2.200000000000000622, -4.157457896303463407 ) ) ; +#4969 = AXIS2_PLACEMENT_3D ( 'NONE', #1369, #5826, #1509 ) ; +#4970 = CARTESIAN_POINT ( 'NONE', ( 1.722075445645237179, -6.700000000000000178, -4.157457896306324230 ) ) ; +#4971 = ORIENTED_EDGE ( 'NONE', *, *, #766, .T. ) ; +#4972 = ORIENTED_EDGE ( 'NONE', *, *, #5270, .T. ) ; +#4973 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4974 = VECTOR ( 'NONE', #3070, 1000.000000000000000 ) ; +#4975 = EDGE_CURVE ( 'NONE', #4676, #6126, #734, .T. ) ; +#4976 = CARTESIAN_POINT ( 'NONE', ( -30.01032132651300799, -2.200000000000000622, -17.30144700593542595 ) ) ; +#4977 = FACE_OUTER_BOUND ( 'NONE', #4913, .T. ) ; +#4978 = ORIENTED_EDGE ( 'NONE', *, *, #3004, .T. ) ; +#4979 = VERTEX_POINT ( 'NONE', #1625 ) ; +#4980 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4981 = CIRCLE ( 'NONE', #5888, 4.500000000000003553 ) ; +#4982 = ORIENTED_EDGE ( 'NONE', *, *, #5002, .T. ) ; +#4983 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4984 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.800000000000000488, 24.46370172317529068 ) ) ; +#4985 = AXIS2_PLACEMENT_3D ( 'NONE', #3324, #1806, #6121 ) ; +#4986 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4987 = EDGE_LOOP ( 'NONE', ( #2119, #3588 ) ) ; +#4988 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245065661, -1.000000000000000000, 51.73725382063078371 ) ) ; +#4989 = LINE ( 'NONE', #744, #6753 ) ; +#4990 = VECTOR ( 'NONE', #5390, 1000.000000000000000 ) ; +#4991 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#4992 = EDGE_CURVE ( 'NONE', #4030, #5802, #6855, .T. ) ; +#4993 = CARTESIAN_POINT ( 'NONE', ( 39.95819837980705103, -8.000000000000000000, -56.99999999999999289 ) ) ; +#4994 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4995 = ORIENTED_EDGE ( 'NONE', *, *, #6519, .F. ) ; +#4996 = VECTOR ( 'NONE', #5700, 1000.000000000000000 ) ; +#4997 = ORIENTED_EDGE ( 'NONE', *, *, #6503, .F. ) ; +#4998 = ORIENTED_EDGE ( 'NONE', *, *, #4388, .T. ) ; +#4999 = LINE ( 'NONE', #2860, #6569 ) ; +#5000 = FACE_OUTER_BOUND ( 'NONE', #15, .T. ) ; +#5001 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, 0.000000000000000000 ) ) ; +#5002 = EDGE_CURVE ( 'NONE', #5407, #3547, #1648, .T. ) ; +#5003 = FACE_OUTER_BOUND ( 'NONE', #2968, .T. ) ; +#5004 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, 0.000000000000000000 ) ) ; +#5005 = ORIENTED_EDGE ( 'NONE', *, *, #3176, .T. ) ; +#5006 = EDGE_LOOP ( 'NONE', ( #6921, #442, #5861, #6951 ) ) ; +#5007 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5008 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, 0.000000000000000000, -51.13725382063397262 ) ) ; +#5009 = EDGE_CURVE ( 'NONE', #2339, #2711, #5194, .T. ) ; +#5010 = ADVANCED_FACE ( 'NONE', ( #328 ), #2485, .T. ) ; +#5011 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#5012 = EDGE_CURVE ( 'NONE', #6782, #247, #905, .T. ) ; +#5013 = EDGE_LOOP ( 'NONE', ( #2808, #210, #1022, #5218, #1651, #6317, #5974 ) ) ; +#5014 = ORIENTED_EDGE ( 'NONE', *, *, #4752, .F. ) ; +#5015 = FACE_OUTER_BOUND ( 'NONE', #6357, .T. ) ; +#5016 = ORIENTED_EDGE ( 'NONE', *, *, #6390, .T. ) ; +#5017 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5018 = AXIS2_PLACEMENT_3D ( 'NONE', #3081, #3119, #1571 ) ; +#5019 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063086897, -6.700000000000000178, 25.93027221245049319 ) ) ; +#5020 = EDGE_CURVE ( 'NONE', #6175, #5476, #6279, .T. ) ; +#5021 = AXIS2_PLACEMENT_3D ( 'NONE', #4181, #3614, #2079 ) ; +#5022 = CARTESIAN_POINT ( 'NONE', ( 10.01349373899624062, -5.899999999999999467, 39.29417823468473614 ) ) ; +#5023 = ORIENTED_EDGE ( 'NONE', *, *, #6962, .F. ) ; +#5024 = CARTESIAN_POINT ( 'NONE', ( -40.45517745126328890, -8.000000000000000000, -44.98475983471281126 ) ) ; +#5025 = CIRCLE ( 'NONE', #727, 4.500000000000003553 ) ; +#5026 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5027 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5028 = VECTOR ( 'NONE', #4362, 1000.000000000000000 ) ; +#5029 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5030 = ORIENTED_EDGE ( 'NONE', *, *, #2348, .T. ) ; +#5031 = AXIS2_PLACEMENT_3D ( 'NONE', #1070, #362, #2521 ) ; +#5032 = EDGE_LOOP ( 'NONE', ( #1985, #3093, #2693, #4828 ) ) ; +#5033 = ORIENTED_EDGE ( 'NONE', *, *, #847, .F. ) ; +#5034 = ORIENTED_EDGE ( 'NONE', *, *, #671, .F. ) ; +#5035 = CARTESIAN_POINT ( 'NONE', ( 33.50000000000029132, 0.000000000000000000, 63.49999999999972289 ) ) ; +#5036 = CIRCLE ( 'NONE', #3793, 1.500000000000004219 ) ; +#5037 = LINE ( 'NONE', #179, #520 ) ; +#5038 = ADVANCED_FACE ( 'NONE', ( #5724 ), #5224, .F. ) ; +#5039 = AXIS2_PLACEMENT_3D ( 'NONE', #2655, #5978, #4863 ) ; +#5040 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #373 ) ; +#5041 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -5.500000000000000000, 6.000000000000001776 ) ) ; +#5042 = AXIS2_PLACEMENT_3D ( 'NONE', #1621, #526, #3275 ) ; +#5043 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#5044 = ORIENTED_EDGE ( 'NONE', *, *, #5020, .F. ) ; +#5045 = CIRCLE ( 'NONE', #1990, 4.500000000000010658 ) ; +#5046 = EDGE_LOOP ( 'NONE', ( #332, #1750, #6761, #3635 ) ) ; +#5047 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5048 = CARTESIAN_POINT ( 'NONE', ( -39.29417823468477167, -6.700000000000000178, 10.01349373899609851 ) ) ; +#5049 = EDGE_CURVE ( 'NONE', #4666, #1793, #215, .T. ) ; +#5050 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5051 = CIRCLE ( 'NONE', #1095, 1.499999999999737543 ) ; +#5052 = ADVANCED_FACE ( 'NONE', ( #3436, #5155, #1957, #835, #6278, #2336, #759, #3015, #4514, #4053 ), #6239, .T. ) ; +#5053 = EDGE_CURVE ( 'NONE', #2506, #889, #253, .T. ) ; +#5054 = ADVANCED_FACE ( 'NONE', ( #3594 ), #4553, .F. ) ; +#5055 = ORIENTED_EDGE ( 'NONE', *, *, #1333, .F. ) ; +#5056 = EDGE_LOOP ( 'NONE', ( #5340, #1838, #1581, #1972, #4623 ) ) ; +#5057 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5058 = CIRCLE ( 'NONE', #6506, 0.5999999999999998668 ) ; +#5059 = EDGE_LOOP ( 'NONE', ( #867, #6230 ) ) ; +#5060 = CARTESIAN_POINT ( 'NONE', ( 40.74772366876671725, -5.899999999999999467, -10.38390657767686953 ) ) ; +#5061 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -2.400000000000000355, -1.500000000000004219 ) ) ; +#5062 = VERTEX_POINT ( 'NONE', #2373 ) ; +#5063 = LINE ( 'NONE', #2355, #107 ) ; +#5064 = EDGE_LOOP ( 'NONE', ( #2315, #775, #6492, #4654, #2330, #5359, #1171, #2190 ) ) ; +#5065 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5066 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5067 = CIRCLE ( 'NONE', #2456, 1.500000000000001332 ) ; +#5068 = FACE_OUTER_BOUND ( 'NONE', #4807, .T. ) ; +#5069 = ADVANCED_FACE ( 'NONE', ( #1846 ), #4013, .F. ) ; +#5070 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063086897, -1.000000000000000000, 25.93027221245049319 ) ) ; +#5071 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5072 = ORIENTED_EDGE ( 'NONE', *, *, #2792, .T. ) ; +#5073 = EDGE_LOOP ( 'NONE', ( #5210, #3788, #6144, #4368 ) ) ; +#5074 = ORIENTED_EDGE ( 'NONE', *, *, #4754, .T. ) ; +#5075 = EDGE_LOOP ( 'NONE', ( #29, #1252, #3019, #622, #988, #2803, #2872 ) ) ; +#5076 = CARTESIAN_POINT ( 'NONE', ( 5.799999999999728928, -5.500000000000000000, -58.50000000000000000 ) ) ; +#5077 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5078 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -5.500000000000000000, 35.23402833652781396 ) ) ; +#5079 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#5080 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5081 = VERTEX_POINT ( 'NONE', #5116 ) ; +#5082 = ORIENTED_EDGE ( 'NONE', *, *, #6557, .F. ) ; +#5083 = LINE ( 'NONE', #1851, #4309 ) ; +#5084 = CARTESIAN_POINT ( 'NONE', ( -27.93000000000074579, -8.000000000000000000, 56.17257376090111620 ) ) ; +#5085 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5086 = AXIS2_PLACEMENT_3D ( 'NONE', #4791, #2084, #6408 ) ; +#5087 = EDGE_CURVE ( 'NONE', #1596, #4569, #2991, .T. ) ; +#5088 = AXIS2_PLACEMENT_3D ( 'NONE', #6597, #1744, #1221 ) ; +#5089 = ORIENTED_EDGE ( 'NONE', *, *, #5273, .F. ) ; +#5090 = ORIENTED_EDGE ( 'NONE', *, *, #4597, .F. ) ; +#5091 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5092 = EDGE_CURVE ( 'NONE', #2836, #1380, #3321, .T. ) ; +#5093 = VERTEX_POINT ( 'NONE', #6745 ) ; +#5094 = ADVANCED_FACE ( 'NONE', ( #1362 ), #4360, .F. ) ; +#5095 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #5776, #4075, ( #373 ) ) ; +#5096 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5097 = ORIENTED_EDGE ( 'NONE', *, *, #5629, .F. ) ; +#5098 = B_SPLINE_SURFACE_WITH_KNOTS ( 'NONE', 4, 1, ( + ( #878, #942 ), + ( #2596, #2984 ), + ( #5260, #3085 ), + ( #5199, #6353 ), + ( #4131, #5797 ) ), + .UNSPECIFIED., .F., .F., .F., + ( 5, 5 ), + ( 2, 2 ), + ( 0.000000000000000000, 1.000000000000000000 ), + ( 0.000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#5099 = CARTESIAN_POINT ( 'NONE', ( 33.50000000000029132, 0.000000000000000000, 63.49999999999972289 ) ) ; +#5100 = ORIENTED_EDGE ( 'NONE', *, *, #3754, .T. ) ; +#5101 = DIRECTION ( 'NONE', ( 0.7071067811865439090, 0.000000000000000000, -0.7071067811865512365 ) ) ; +#5102 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, -0.4999999999999886202, 21.43027221243706038 ) ) ; +#5103 = AXIS2_PLACEMENT_3D ( 'NONE', #402, #4738, #4197 ) ; +#5104 = CARTESIAN_POINT ( 'NONE', ( -34.92266447387282113, -2.200000000000000622, -34.03553390593242511 ) ) ; +#5105 = CARTESIAN_POINT ( 'NONE', ( -36.15552248038196126, -5.899999999999999467, 21.47046096782009883 ) ) ; +#5106 = EDGE_CURVE ( 'NONE', #4979, #2959, #4629, .T. ) ; +#5107 = VERTEX_POINT ( 'NONE', #1470 ) ; +#5108 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#5109 = ORIENTED_EDGE ( 'NONE', *, *, #5780, .F. ) ; +#5110 = ORIENTED_EDGE ( 'NONE', *, *, #1836, .F. ) ; +#5111 = ORIENTED_EDGE ( 'NONE', *, *, #5288, .T. ) ; +#5112 = AXIS2_PLACEMENT_3D ( 'NONE', #2904, #2024, #6738 ) ; +#5113 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, -1.000000000000000000, 21.43027221243706038 ) ) ; +#5114 = LINE ( 'NONE', #794, #4480 ) ; +#5115 = DIRECTION ( 'NONE', ( 0.9238795325112836299, -0.000000000000000000, 0.3826834323650974423 ) ) ; +#5116 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, -0.5000000000000092149, -52.33725382063752818 ) ) ; +#5117 = AXIS2_PLACEMENT_3D ( 'NONE', #3812, #4938, #3196 ) ; +#5118 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000027711, 0.000000000000000000, 52.69999999572329585 ) ) ; +#5119 = CIRCLE ( 'NONE', #2813, 4.500000000000003553 ) ; +#5120 = VERTEX_POINT ( 'NONE', #398 ) ; +#5121 = ORIENTED_EDGE ( 'NONE', *, *, #4317, .F. ) ; +#5122 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4425 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2322, #3348, #4921 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5123 = FACE_OUTER_BOUND ( 'NONE', #3195, .T. ) ; +#5124 = FACE_OUTER_BOUND ( 'NONE', #6836, .T. ) ; +#5125 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5126 = ORIENTED_EDGE ( 'NONE', *, *, #237, .T. ) ; +#5127 = ORIENTED_EDGE ( 'NONE', *, *, #2415, .T. ) ; +#5128 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244024005, -6.700000000000000178, 51.73725382063510381 ) ) ; +#5129 = ORIENTED_EDGE ( 'NONE', *, *, #1554, .T. ) ; +#5130 = EDGE_CURVE ( 'NONE', #3343, #2474, #1305, .T. ) ; +#5131 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5132 = VERTEX_POINT ( 'NONE', #5290 ) ; +#5133 = LINE ( 'NONE', #6221, #2725 ) ; +#5134 = VERTEX_POINT ( 'NONE', #3759 ) ; +#5135 = APPROVAL_ROLE ( '' ) ; +#5136 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#5137 = CARTESIAN_POINT ( 'NONE', ( 13.14398910963723033, -5.899999999999999467, 31.73239677215487831 ) ) ; +#5138 = FACE_OUTER_BOUND ( 'NONE', #5807, .T. ) ; +#5139 = AXIS2_PLACEMENT_3D ( 'NONE', #6772, #4083, #6231 ) ; +#5140 = CARTESIAN_POINT ( 'NONE', ( -13.14398910962626843, -2.200000000000000622, 31.73239677215942223 ) ) ; +#5141 = CIRCLE ( 'NONE', #720, 1.500000000000001332 ) ; +#5142 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, -1.000000000000000000, 52.33725382062663556 ) ) ; +#5143 = EDGE_CURVE ( 'NONE', #4488, #5737, #5267, .T. ) ; +#5144 = VERTEX_POINT ( 'NONE', #6987 ) ; +#5145 = FACE_OUTER_BOUND ( 'NONE', #6535, .T. ) ; +#5146 = ORIENTED_EDGE ( 'NONE', *, *, #1833, .F. ) ; +#5147 = ORIENTED_EDGE ( 'NONE', *, *, #1830, .T. ) ; +#5148 = EDGE_LOOP ( 'NONE', ( #1657, #248 ) ) ; +#5149 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, -0.4999999999999886202, -20.83027221245303551 ) ) ; +#5150 = AXIS2_PLACEMENT_3D ( 'NONE', #1493, #3175, #5875 ) ; +#5151 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.800000000000000488, -24.46370172317620018 ) ) ; +#5152 = AXIS2_PLACEMENT_3D ( 'NONE', #5598, #242, #5672 ) ; +#5153 = LINE ( 'NONE', #3973, #6036 ) ; +#5154 = VECTOR ( 'NONE', #4762, 1000.000000000000000 ) ; +#5155 = FACE_BOUND ( 'NONE', #4987, .T. ) ; +#5156 = AXIS2_PLACEMENT_3D ( 'NONE', #1727, #4926, #1239 ) ; +#5157 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#5158 = VECTOR ( 'NONE', #6139, 1000.000000000000000 ) ; +#5159 = ORIENTED_EDGE ( 'NONE', *, *, #2957, .T. ) ; +#5160 = VERTEX_POINT ( 'NONE', #1502 ) ; +#5161 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063502565, -2.200000000000000622, 16.93027221244040703 ) ) ; +#5162 = VECTOR ( 'NONE', #1438, 1000.000000000000114 ) ; +#5163 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5164 = CARTESIAN_POINT ( 'NONE', ( -24.28180162019543786, -2.200000000000000622, -60.50000000000001421 ) ) ; +#5165 = ADVANCED_FACE ( 'NONE', ( #3720 ), #2061, .T. ) ; +#5166 = AXIS2_PLACEMENT_3D ( 'NONE', #1772, #3901, #3972 ) ; +#5167 = EDGE_LOOP ( 'NONE', ( #5276, #2916, #6309, #3589, #2345, #2238 ) ) ; +#5168 = ORIENTED_EDGE ( 'NONE', *, *, #5907, .T. ) ; +#5169 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5170 = ORIENTED_EDGE ( 'NONE', *, *, #4163, .T. ) ; +#5171 = CIRCLE ( 'NONE', #5279, 1.500000000000001332 ) ; +#5172 = CARTESIAN_POINT ( 'NONE', ( 48.50000000000026290, -8.000000000000000000, 47.49999999999972289 ) ) ; +#5173 = CIRCLE ( 'NONE', #1205, 1.499999999999994449 ) ; +#5174 = EDGE_LOOP ( 'NONE', ( #5023, #3618, #5186, #3742 ) ) ; +#5175 = CYLINDRICAL_SURFACE ( 'NONE', #6004, 1.500000000000001332 ) ; +#5176 = ORIENTED_EDGE ( 'NONE', *, *, #4578, .T. ) ; +#5177 = CALENDAR_DATE ( 2026, 29, 9 ) ; +#5178 = LINE ( 'NONE', #2830, #6331 ) ; +#5179 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -5.899999999999999467, -24.46370172317620018 ) ) ; +#5180 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5181 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5182 = ADVANCED_FACE ( 'NONE', ( #1534, #1570 ), #2559, .F. ) ; +#5183 = ORIENTED_EDGE ( 'NONE', *, *, #6444, .T. ) ; +#5184 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5185 = ORIENTED_EDGE ( 'NONE', *, *, #1282, .T. ) ; +#5186 = ORIENTED_EDGE ( 'NONE', *, *, #1858, .T. ) ; +#5187 = ORIENTED_EDGE ( 'NONE', *, *, #5790, .F. ) ; +#5188 = CARTESIAN_POINT ( 'NONE', ( 33.50000000000029132, -8.000000000000000000, -63.49999999999972289 ) ) ; +#5189 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5190 = EDGE_CURVE ( 'NONE', #235, #1841, #1184, .T. ) ; +#5191 = CARTESIAN_POINT ( 'NONE', ( -17.27281431613932483, -2.200000000000000622, 53.45932926627808257 ) ) ; +#5192 = EDGE_CURVE ( 'NONE', #6133, #1995, #1004, .T. ) ; +#5193 = EDGE_CURVE ( 'NONE', #3061, #2161, #5356, .T. ) ; +#5194 = LINE ( 'NONE', #2908, #615 ) ; +#5195 = CARTESIAN_POINT ( 'NONE', ( 33.50000000000029132, 0.000000000000000000, 63.49999999999972289 ) ) ; +#5196 = EDGE_LOOP ( 'NONE', ( #152, #3638, #3493, #5187 ) ) ; +#5197 = ORIENTED_EDGE ( 'NONE', *, *, #4402, .F. ) ; +#5198 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5199 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000027711, -8.000000000000000000, -52.69999999572329585 ) ) ; +#5200 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.800000000000000488, 22.96370172317529068 ) ) ; +#5201 = ORIENTED_EDGE ( 'NONE', *, *, #255, .T. ) ; +#5202 = EDGE_CURVE ( 'NONE', #3908, #1751, #936, .T. ) ; +#5203 = ORIENTED_EDGE ( 'NONE', *, *, #1197, .T. ) ; +#5204 = AXIS2_PLACEMENT_3D ( 'NONE', #2919, #263, #5091 ) ; +#5205 = CYLINDRICAL_SURFACE ( 'NONE', #5208, 0.5999999999999998668 ) ; +#5206 = EDGE_LOOP ( 'NONE', ( #3898, #2167, #2793, #5592 ) ) ; +#5207 = EDGE_CURVE ( 'NONE', #2339, #4709, #1991, .T. ) ; +#5208 = AXIS2_PLACEMENT_3D ( 'NONE', #6829, #409, #4743 ) ; +#5209 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5210 = ORIENTED_EDGE ( 'NONE', *, *, #5925, .F. ) ; +#5211 = ORIENTED_EDGE ( 'NONE', *, *, #1795, .F. ) ; +#5212 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, -1.000000000000000000, 21.43027221243706038 ) ) ; +#5213 = VECTOR ( 'NONE', #2430, 1000.000000000000000 ) ; +#5214 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5215 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, 0.000000000000000000 ) ) ; +#5216 = CYLINDRICAL_SURFACE ( 'NONE', #5372, 1.500000000000001332 ) ; +#5217 = LINE ( 'NONE', #355, #3884 ) ; +#5218 = ORIENTED_EDGE ( 'NONE', *, *, #2876, .F. ) ; +#5219 = ORIENTED_EDGE ( 'NONE', *, *, #3795, .F. ) ; +#5220 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, -1.000000000000000000, -52.83725382063398968 ) ) ; +#5221 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5222 = CARTESIAN_POINT ( 'NONE', ( -2.680147770384166961E-13, 11.64513216797408823, -53.44976107412088595 ) ) ; +#5223 = ADVANCED_FACE ( 'NONE', ( #6376 ), #6315, .F. ) ; +#5224 = CYLINDRICAL_SURFACE ( 'NONE', #1426, 40.55000000000109139 ) ; +#5225 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000027711, -8.000000000000000000, 52.69999999572329585 ) ) ; +#5226 = CIRCLE ( 'NONE', #4312, 1.499999999999737543 ) ; +#5227 = ORIENTED_EDGE ( 'NONE', *, *, #2364, .F. ) ; +#5228 = VERTEX_POINT ( 'NONE', #3654 ) ; +#5229 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5230 = ADVANCED_FACE ( 'NONE', ( #5791 ), #1531, .F. ) ; +#5231 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5232 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5233 = ORIENTED_EDGE ( 'NONE', *, *, #1154, .F. ) ; +#5234 = EDGE_CURVE ( 'NONE', #3932, #4545, #4915, .T. ) ; +#5235 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -5.500000000000000000, 36.73402833653069166 ) ) ; +#5236 = ORIENTED_EDGE ( 'NONE', *, *, #4752, .T. ) ; +#5237 = AXIS2_PLACEMENT_3D ( 'NONE', #166, #664, #6578 ) ; +#5238 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063502565, -6.700000000000000178, 21.43027221244042124 ) ) ; +#5239 = ORIENTED_EDGE ( 'NONE', *, *, #6044, .F. ) ; +#5240 = DATE_AND_TIME ( #5702, #4680 ) ; +#5241 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#5242 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5243 = EDGE_CURVE ( 'NONE', #4117, #2809, #1861, .T. ) ; +#5244 = CYLINDRICAL_SURFACE ( 'NONE', #2863, 40.55000000000109139 ) ; +#5245 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5246 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5247 = ORIENTED_EDGE ( 'NONE', *, *, #280, .T. ) ; +#5248 = EDGE_LOOP ( 'NONE', ( #4638, #5428, #5565, #2802, #6267, #5617 ) ) ; +#5249 = CARTESIAN_POINT ( 'NONE', ( 4.157457896306330447, -2.200000000000000622, 1.722075445645222525 ) ) ; +#5250 = FACE_OUTER_BOUND ( 'NONE', #1933, .T. ) ; +#5251 = CARTESIAN_POINT ( 'NONE', ( 1.722075445645237179, -2.200000000000000622, -4.157457896306324230 ) ) ; +#5252 = CIRCLE ( 'NONE', #4342, 1.500000000000001332 ) ; +#5253 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5254 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387191874, -3.200000000000000622, -54.96446609406757489 ) ) ; +#5255 = ORIENTED_EDGE ( 'NONE', *, *, #1484, .T. ) ; +#5256 = CIRCLE ( 'NONE', #3432, 1.099999999999989875 ) ; +#5257 = ORIENTED_EDGE ( 'NONE', *, *, #1624, .F. ) ; +#5258 = ADVANCED_FACE ( 'NONE', ( #3185 ), #2659, .F. ) ; +#5259 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5260 = CARTESIAN_POINT ( 'NONE', ( -56.16019669858830810, -8.000000000000000000, -56.16019669858773966 ) ) ; +#5261 = LINE ( 'NONE', #405, #2117 ) ; +#5262 = AXIS2_PLACEMENT_3D ( 'NONE', #4114, #3041, #4579 ) ; +#5263 = CIRCLE ( 'NONE', #3100, 4.500000000000010658 ) ; +#5264 = AXIS2_PLACEMENT_3D ( 'NONE', #425, #2026, #327 ) ; +#5265 = ORIENTED_EDGE ( 'NONE', *, *, #2589, .T. ) ; +#5266 = EDGE_CURVE ( 'NONE', #6669, #5756, #6385, .T. ) ; +#5267 = CIRCLE ( 'NONE', #3896, 4.500000000000010658 ) ; +#5268 = CARTESIAN_POINT ( 'NONE', ( 39.95819837980705103, -6.700000000000000178, -56.99999999999999289 ) ) ; +#5269 = ORIENTED_EDGE ( 'NONE', *, *, #3789, .T. ) ; +#5270 = EDGE_CURVE ( 'NONE', #2686, #2230, #4696, .T. ) ; +#5271 = AXIS2_PLACEMENT_3D ( 'NONE', #4493, #4385, #6644 ) ; +#5272 = ADVANCED_FACE ( 'NONE', ( #6581 ), #4365, .F. ) ; +#5273 = EDGE_CURVE ( 'NONE', #4910, #3565, #4864, .T. ) ; +#5274 = CARTESIAN_POINT ( 'NONE', ( -2.678310800185446060E-13, 11.64513216797408823, -50.44976107412088595 ) ) ; +#5275 = CIRCLE ( 'NONE', #4371, 1.100000000000017630 ) ; +#5276 = ORIENTED_EDGE ( 'NONE', *, *, #3767, .F. ) ; +#5277 = LINE ( 'NONE', #1488, #4077 ) ; +#5278 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, -1.000000000000000000, -51.73725382063397404 ) ) ; +#5279 = AXIS2_PLACEMENT_3D ( 'NONE', #2284, #2215, #2249 ) ; +#5280 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -5.500000000000000000, 30.73402833652782817 ) ) ; +#5281 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5282 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#5283 = ORIENTED_EDGE ( 'NONE', *, *, #4809, .F. ) ; +#5284 = EDGE_CURVE ( 'NONE', #1916, #4641, #128, .T. ) ; +#5285 = CARTESIAN_POINT ( 'NONE', ( 13.14398910963723033, -2.200000000000000622, 31.73239677215487831 ) ) ; +#5286 = CARTESIAN_POINT ( 'NONE', ( 50.01517837498769836, -2.200000000000000622, -25.58773010875173881 ) ) ; +#5287 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5288 = EDGE_CURVE ( 'NONE', #2979, #6249, #1979, .T. ) ; +#5289 = CARTESIAN_POINT ( 'NONE', ( -5.800000000000265388, -2.200000000000000622, -57.00000000000000000 ) ) ; +#5290 = CARTESIAN_POINT ( 'NONE', ( 5.799999999999728928, -2.200000000000000622, -58.50000000000000000 ) ) ; +#5291 = FACE_OUTER_BOUND ( 'NONE', #3619, .T. ) ; +#5292 = ORIENTED_EDGE ( 'NONE', *, *, #4011, .T. ) ; +#5293 = ORIENTED_EDGE ( 'NONE', *, *, #916, .T. ) ; +#5294 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5295 = LINE ( 'NONE', #1925, #4642 ) ; +#5296 = CARTESIAN_POINT ( 'NONE', ( 10.38390657767673275, -5.899999999999999467, 39.24772366876674567 ) ) ; +#5297 = VECTOR ( 'NONE', #841, 1000.000000000000000 ) ; +#5298 = ORIENTED_EDGE ( 'NONE', *, *, #4444, .T. ) ; +#5299 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -5.500000000000000000, 0.000000000000000000 ) ) ; +#5300 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5301 = ORIENTED_EDGE ( 'NONE', *, *, #1579, .T. ) ; +#5302 = EDGE_CURVE ( 'NONE', #4945, #6184, #5455, .T. ) ; +#5303 = CARTESIAN_POINT ( 'NONE', ( -20.08464166905088177, -5.899999999999999467, 36.72954762893097325 ) ) ; +#5304 = CIRCLE ( 'NONE', #3717, 0.6000000000000033085 ) ; +#5305 = ORIENTED_EDGE ( 'NONE', *, *, #383, .F. ) ; +#5306 = ADVANCED_FACE ( 'NONE', ( #5953 ), #3892, .F. ) ; +#5307 = ORIENTED_EDGE ( 'NONE', *, *, #2921, .T. ) ; +#5308 = CIRCLE ( 'NONE', #3024, 1.500000000000001332 ) ; +#5309 = ADVANCED_FACE ( 'NONE', ( #3318 ), #6080, .F. ) ; +#5310 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #2508, #4612, ( #5902 ) ) ; +#5311 = DIRECTION ( 'NONE', ( -0.9238795325112894030, 0.000000000000000000, 0.3826834323650834535 ) ) ; +#5312 = CARTESIAN_POINT ( 'NONE', ( -21.43027221245029068, -1.000000000000000000, -47.23725382063096134 ) ) ; +#5313 = CIRCLE ( 'NONE', #3494, 1.500000000000001332 ) ; +#5314 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#5315 = FACE_OUTER_BOUND ( 'NONE', #602, .T. ) ; +#5316 = PLANE ( 'NONE', #6027 ) ; +#5317 = VECTOR ( 'NONE', #6363, 1000.000000000000000 ) ; +#5318 = ORIENTED_EDGE ( 'NONE', *, *, #547, .T. ) ; +#5319 = CARTESIAN_POINT ( 'NONE', ( 31.73239677215937249, -5.899999999999999467, 13.14398910962637856 ) ) ; +#5320 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.800000000000000488, -24.46370172317620018 ) ) ; +#5321 = ADVANCED_FACE ( 'NONE', ( #5979 ), #6518, .F. ) ; +#5322 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5323 = CARTESIAN_POINT ( 'NONE', ( -4.157457896303456302, -2.200000000000000622, 1.722075445643992841 ) ) ; +#5324 = AXIS2_PLACEMENT_3D ( 'NONE', #2240, #2776, #3880 ) ; +#5325 = EDGE_CURVE ( 'NONE', #2777, #6882, #6392, .T. ) ; +#5326 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, -1.000000000000000000, -51.13725382063397262 ) ) ; +#5327 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5328 = EDGE_LOOP ( 'NONE', ( #2925, #5414, #6791, #5464, #1730, #4223 ) ) ; +#5329 = ORIENTED_EDGE ( 'NONE', *, *, #13, .T. ) ; +#5330 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5331 = CARTESIAN_POINT ( 'NONE', ( -36.72954762892958058, -2.200000000000000622, 20.08464166905316617 ) ) ; +#5332 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5333 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5334 = VECTOR ( 'NONE', #2564, 1000.000000000000000 ) ; +#5335 = VERTEX_POINT ( 'NONE', #2754 ) ; +#5336 = ORIENTED_EDGE ( 'NONE', *, *, #4750, .T. ) ; +#5337 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5338 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5339 = VECTOR ( 'NONE', #6587, 1000.000000000000114 ) ; +#5340 = ORIENTED_EDGE ( 'NONE', *, *, #1068, .F. ) ; +#5341 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.800000000000000488, -24.46370172317620018 ) ) ; +#5342 = AXIS2_PLACEMENT_3D ( 'NONE', #1149, #6426, #3733 ) ; +#5343 = ORIENTED_EDGE ( 'NONE', *, *, #2018, .T. ) ; +#5344 = VERTEX_POINT ( 'NONE', #4393 ) ; +#5345 = EDGE_CURVE ( 'NONE', #2795, #218, #6049, .T. ) ; +#5346 = FACE_OUTER_BOUND ( 'NONE', #4084, .T. ) ; +#5347 = LINE ( 'NONE', #5809, #1650 ) ; +#5348 = FACE_OUTER_BOUND ( 'NONE', #261, .T. ) ; +#5349 = CARTESIAN_POINT ( 'NONE', ( -35.30999999999903594, 0.000000000000000000, -56.49999999999972289 ) ) ; +#5350 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -2.200000000000000622, -32.00000000000000000 ) ) ; +#5351 = ORIENTED_EDGE ( 'NONE', *, *, #345, .T. ) ; +#5352 = CARTESIAN_POINT ( 'NONE', ( -10.38390657767399894, -6.700000000000000178, 40.74772366876744201 ) ) ; +#5353 = CARTESIAN_POINT ( 'NONE', ( 11.76972587644366541, -5.899999999999999467, 40.17369852021911925 ) ) ; +#5354 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5355 = CYLINDRICAL_SURFACE ( 'NONE', #2875, 6.000000000000001776 ) ; +#5356 = LINE ( 'NONE', #5326, #2652 ) ; +#5357 = EDGE_CURVE ( 'NONE', #6133, #6763, #3285, .T. ) ; +#5358 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5359 = ORIENTED_EDGE ( 'NONE', *, *, #4880, .F. ) ; +#5360 = ORIENTED_EDGE ( 'NONE', *, *, #2742, .F. ) ; +#5361 = CARTESIAN_POINT ( 'NONE', ( -22.78180162019543786, -2.200000000000000622, -58.50000000000000000 ) ) ; +#5362 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063502565, -1.000000000000000000, 21.43027221244042124 ) ) ; +#5363 = CARTESIAN_POINT ( 'NONE', ( 33.50000000000029132, -8.000000000000000000, -63.49999999999972289 ) ) ; +#5364 = VECTOR ( 'NONE', #5396, 1000.000000000000000 ) ; +#5365 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5366 = CIRCLE ( 'NONE', #3089, 0.6000000000000033085 ) ; +#5367 = CIRCLE ( 'NONE', #4912, 1.499999999999999556 ) ; +#5368 = ORIENTED_EDGE ( 'NONE', *, *, #4352, .F. ) ; +#5369 = ORIENTED_EDGE ( 'NONE', *, *, #1107, .F. ) ; +#5370 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5371 = FACE_OUTER_BOUND ( 'NONE', #1953, .T. ) ; +#5372 = AXIS2_PLACEMENT_3D ( 'NONE', #5105, #1947, #205 ) ; +#5373 = CARTESIAN_POINT ( 'NONE', ( -56.17257376090169174, -8.000000000000000000, 56.17257376090111620 ) ) ; +#5374 = EDGE_CURVE ( 'NONE', #5144, #2030, #599, .T. ) ; +#5375 = AXIS2_PLACEMENT_3D ( 'NONE', #6610, #6296, #1970 ) ; +#5376 = AXIS2_PLACEMENT_3D ( 'NONE', #1809, #5648, #5079 ) ; +#5377 = VERTEX_POINT ( 'NONE', #6548 ) ; +#5378 = CIRCLE ( 'NONE', #2300, 5.025000000000002132 ) ; +#5379 = ORIENTED_EDGE ( 'NONE', *, *, #6252, .T. ) ; +#5380 = AXIS2_PLACEMENT_3D ( 'NONE', #3421, #5596, #745 ) ; +#5381 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5382 = AXIS2_PLACEMENT_3D ( 'NONE', #4416, #659, #18 ) ; +#5383 = CYLINDRICAL_SURFACE ( 'NONE', #5042, 1.499999999999999556 ) ; +#5384 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5385 = VECTOR ( 'NONE', #134, 1000.000000000000000 ) ; +#5386 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5387 = FACE_BOUND ( 'NONE', #521, .T. ) ; +#5388 = EDGE_LOOP ( 'NONE', ( #2923, #2525, #800, #2563 ) ) ; +#5389 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5390 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5391 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5392 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, -1.000000000000000000, 52.33725382063020959 ) ) ; +#5393 = CIRCLE ( 'NONE', #4722, 6.000000000000001776 ) ; +#5394 = ADVANCED_FACE ( 'NONE', ( #6011 ), #1636, .T. ) ; +#5395 = CARTESIAN_POINT ( 'NONE', ( 1.722075445645174563, -5.899999999999999467, 4.157457896306349987 ) ) ; +#5396 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#5397 = VERTEX_POINT ( 'NONE', #1166 ) ; +#5398 = ORIENTED_EDGE ( 'NONE', *, *, #6425, .T. ) ; +#5399 = AXIS2_PLACEMENT_3D ( 'NONE', #5060, #3457, #195 ) ; +#5400 = CYLINDRICAL_SURFACE ( 'NONE', #6342, 1.500000000002881029 ) ; +#5401 = EDGE_CURVE ( 'NONE', #1717, #3951, #93, .T. ) ; +#5402 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5403 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5404 = EDGE_CURVE ( 'NONE', #232, #2679, #6140, .T. ) ; +#5405 = FACE_OUTER_BOUND ( 'NONE', #5206, .T. ) ; +#5406 = ADVANCED_FACE ( 'NONE', ( #27 ), #4426, .F. ) ; +#5407 = VERTEX_POINT ( 'NONE', #5675 ) ; +#5408 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244847169, -2.200000000000000622, -56.23725382063096845 ) ) ; +#5409 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#5410 = AXIS2_PLACEMENT_3D ( 'NONE', #5966, #1123, #3270 ) ; +#5411 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -6.700000000000000178, 0.000000000000000000 ) ) ; +#5412 = EDGE_CURVE ( 'NONE', #6568, #639, #5926, .T. ) ; +#5413 = ORIENTED_EDGE ( 'NONE', *, *, #1165, .T. ) ; +#5414 = ORIENTED_EDGE ( 'NONE', *, *, #2006, .T. ) ; +#5415 = ORIENTED_EDGE ( 'NONE', *, *, #6557, .T. ) ; +#5416 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5417 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5418 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5419 = CARTESIAN_POINT ( 'NONE', ( -17.30144700593532292, -2.200000000000000622, 30.01032132651306483 ) ) ; +#5420 = ORIENTED_EDGE ( 'NONE', *, *, #1791, .F. ) ; +#5421 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5422 = CIRCLE ( 'NONE', #2352, 1.500000000000001332 ) ; +#5423 = LINE ( 'NONE', #4325, #1884 ) ; +#5424 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -2.200000000000000622, -62.00000000000002132 ) ) ; +#5425 = VECTOR ( 'NONE', #3808, 1000.000000000000000 ) ; +#5426 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, -1.000000000000000000, 22.53027221244568068 ) ) ; +#5427 = CYLINDRICAL_SURFACE ( 'NONE', #1737, 1.500000000000001332 ) ; +#5428 = ORIENTED_EDGE ( 'NONE', *, *, #1325, .T. ) ; +#5429 = ORIENTED_EDGE ( 'NONE', *, *, #3460, .F. ) ; +#5430 = ORIENTED_EDGE ( 'NONE', *, *, #2635, .T. ) ; +#5431 = DIRECTION ( 'NONE', ( 0.7071067811865490160, 0.000000000000000000, 0.7071067811865460184 ) ) ; +#5432 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5433 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000027711, -8.000000000000000000, 52.69999999572329585 ) ) ; +#5434 = EDGE_CURVE ( 'NONE', #2903, #6706, #1317, .T. ) ; +#5435 = PLANE ( 'NONE', #3602 ) ; +#5436 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 4, + ( #928, #1984, #2550, #6734, #1879 ), + .UNSPECIFIED., .F., .F., + ( 5, 5 ), + ( 0.000000000000000000, 0.03833932269097584805 ), + .UNSPECIFIED. ) ; +#5437 = ORIENTED_EDGE ( 'NONE', *, *, #5284, .F. ) ; +#5438 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5439 = FACE_OUTER_BOUND ( 'NONE', #4147, .T. ) ; +#5440 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -5.500000000000000000, 36.73402833653069166 ) ) ; +#5441 = CIRCLE ( 'NONE', #6566, 5.025000000000002132 ) ; +#5442 = EDGE_CURVE ( 'NONE', #3061, #6101, #5366, .T. ) ; +#5443 = VERTEX_POINT ( 'NONE', #2969 ) ; +#5444 = AXIS2_PLACEMENT_3D ( 'NONE', #5786, #1954, #6196 ) ; +#5445 = ORIENTED_EDGE ( 'NONE', *, *, #6755, .T. ) ; +#5446 = ORIENTED_EDGE ( 'NONE', *, *, #1491, .T. ) ; +#5447 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063502565, -1.000000000000000000, 21.43027221244042124 ) ) ; +#5448 = AXIS2_PLACEMENT_3D ( 'NONE', #5964, #5337, #613 ) ; +#5449 = FACE_OUTER_BOUND ( 'NONE', #3413, .T. ) ; +#5450 = CARTESIAN_POINT ( 'NONE', ( -56.16019669858830810, -8.000000000000000000, 56.16019669858773966 ) ) ; +#5451 = ORIENTED_EDGE ( 'NONE', *, *, #3603, .F. ) ; +#5452 = LINE ( 'NONE', #4500, #5842 ) ; +#5453 = CARTESIAN_POINT ( 'NONE', ( -35.30999999999903594, -1.800000000000000711, -55.49999999999972289 ) ) ; +#5454 = EDGE_CURVE ( 'NONE', #2871, #6052, #5641, .T. ) ; +#5455 = LINE ( 'NONE', #5491, #159 ) ; +#5456 = CARTESIAN_POINT ( 'NONE', ( 36.15552248038181204, -5.899999999999999467, -21.47046096782034752 ) ) ; +#5457 = EDGE_LOOP ( 'NONE', ( #5662, #5074, #4928, #1663, #712, #2748, #3657, #464, #4691, #5862, #99 ) ) ; +#5458 = EDGE_LOOP ( 'NONE', ( #4844, #5197 ) ) ; +#5459 = CARTESIAN_POINT ( 'NONE', ( -2.680147770384166961E-13, -2.200000000000000622, -53.44976107412088595 ) ) ; +#5460 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, 0.000000000000000000, 20.83027221243706251 ) ) ; +#5461 = CYLINDRICAL_SURFACE ( 'NONE', #5877, 5.025000000000002132 ) ; +#5462 = CARTESIAN_POINT ( 'NONE', ( -21.43027221245029068, -1.000000000000000000, -56.23725382063096845 ) ) ; +#5463 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5464 = ORIENTED_EDGE ( 'NONE', *, *, #2325, .F. ) ; +#5465 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, 0.000000000000000000, 21.43027221244568992 ) ) ; +#5466 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5467 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -2.400000000000000355, 1.500000000000004219 ) ) ; +#5468 = AXIS2_PLACEMENT_3D ( 'NONE', #6441, #5282, #1628 ) ; +#5469 = VECTOR ( 'NONE', #3478, 1000.000000000000000 ) ; +#5470 = EDGE_CURVE ( 'NONE', #4086, #1770, #5436, .T. ) ; +#5471 = ORIENTED_EDGE ( 'NONE', *, *, #1756, .F. ) ; +#5472 = VECTOR ( 'NONE', #5673, 999.9999999999998863 ) ; +#5473 = EDGE_LOOP ( 'NONE', ( #2466, #4509, #5674, #2981 ) ) ; +#5474 = ADVANCED_FACE ( 'NONE', ( #864 ), #3007, .T. ) ; +#5475 = CIRCLE ( 'NONE', #6382, 0.6000000000000033085 ) ; +#5476 = VERTEX_POINT ( 'NONE', #3617 ) ; +#5477 = FACE_OUTER_BOUND ( 'NONE', #3461, .T. ) ; +#5478 = EDGE_CURVE ( 'NONE', #2732, #206, #949, .T. ) ; +#5479 = EDGE_CURVE ( 'NONE', #2030, #2917, #1839, .T. ) ; +#5480 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 4, + ( #1212, #6160, #4550, #4964, #3397 ), + .UNSPECIFIED., .F., .F., + ( 5, 5 ), + ( 0.000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#5481 = AXIS2_PLACEMENT_3D ( 'NONE', #6889, #6412, #2027 ) ; +#5482 = FACE_OUTER_BOUND ( 'NONE', #4557, .T. ) ; +#5483 = CIRCLE ( 'NONE', #45, 60.49999999999994316 ) ; +#5484 = CIRCLE ( 'NONE', #1182, 4.500000000000010658 ) ; +#5485 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, 0.000000000000000000, 63.49999999999972289 ) ) ; +#5486 = ORIENTED_EDGE ( 'NONE', *, *, #2464, .F. ) ; +#5487 = FACE_OUTER_BOUND ( 'NONE', #5013, .T. ) ; +#5488 = LINE ( 'NONE', #3825, #2774 ) ; +#5489 = CARTESIAN_POINT ( 'NONE', ( -27.93000000000074579, -1.800000000000000711, -55.49999999999972289 ) ) ; +#5490 = AXIS2_PLACEMENT_3D ( 'NONE', #466, #3693, #5890 ) ; +#5491 = CARTESIAN_POINT ( 'NONE', ( -39.95819837980435096, -8.000000000000000000, -60.50000000000001421 ) ) ; +#5492 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#5493 = EDGE_CURVE ( 'NONE', #5335, #4867, #5708, .T. ) ; +#5494 = ORIENTED_EDGE ( 'NONE', *, *, #6647, .T. ) ; +#5495 = VERTEX_POINT ( 'NONE', #788 ) ; +#5496 = EDGE_LOOP ( 'NONE', ( #1753, #5398 ) ) ; +#5497 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -5.500000000000000000, 50.44976107412009725 ) ) ; +#5498 = AXIS2_PLACEMENT_3D ( 'NONE', #6653, #6110, #202 ) ; +#5499 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5500 = FACE_OUTER_BOUND ( 'NONE', #4157, .T. ) ; +#5501 = PLANE ( 'NONE', #4627 ) ; +#5502 = VECTOR ( 'NONE', #2851, 1000.000000000000000 ) ; +#5503 = DIRECTION ( 'NONE', ( 1.156482317317870344E-14, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5504 = ORIENTED_EDGE ( 'NONE', *, *, #6450, .T. ) ; +#5505 = ORIENTED_EDGE ( 'NONE', *, *, #5723, .T. ) ; +#5506 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5507 = FACE_BOUND ( 'NONE', #5545, .T. ) ; +#5508 = FACE_BOUND ( 'NONE', #692, .T. ) ; +#5509 = VERTEX_POINT ( 'NONE', #1913 ) ; +#5510 = ORIENTED_EDGE ( 'NONE', *, *, #3137, .T. ) ; +#5511 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5512 = EDGE_LOOP ( 'NONE', ( #2825, #3428 ) ) ; +#5513 = CARTESIAN_POINT ( 'NONE', ( 36.72954762892944558, -5.899999999999999467, -20.08464166905342196 ) ) ; +#5514 = ADVANCED_FACE ( 'NONE', ( #3469 ), #245, .F. ) ; +#5515 = VECTOR ( 'NONE', #2597, 1000.000000000000000 ) ; +#5516 = LINE ( 'NONE', #528, #2753 ) ; +#5517 = EDGE_CURVE ( 'NONE', #3009, #6184, #6262, .T. ) ; +#5518 = PLANE ( 'NONE', #2638 ) ; +#5519 = ADVANCED_FACE ( 'NONE', ( #5145 ), #2745, .F. ) ; +#5520 = ORIENTED_EDGE ( 'NONE', *, *, #2536, .F. ) ; +#5521 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#5522 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5523 = DIRECTION ( 'NONE', ( -0.7071067811865536790, 0.000000000000000000, -0.7071067811865413555 ) ) ; +#5524 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5525 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5526 = ADVANCED_FACE ( 'NONE', ( #4620 ), #3042, .T. ) ; +#5527 = EDGE_LOOP ( 'NONE', ( #1905, #4735, #2901, #5097 ) ) ; +#5528 = EDGE_LOOP ( 'NONE', ( #5257, #1878 ) ) ; +#5529 = CIRCLE ( 'NONE', #1230, 4.500000000000230926 ) ; +#5530 = ORIENTED_EDGE ( 'NONE', *, *, #5925, .T. ) ; +#5531 = ORIENTED_EDGE ( 'NONE', *, *, #86, .T. ) ; +#5532 = LINE ( 'NONE', #678, #5339 ) ; +#5533 = CARTESIAN_POINT ( 'NONE', ( -50.01517837499159924, -6.700000000000000178, -25.58773010874100606 ) ) ; +#5534 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5535 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.800000000000000488, 24.46370172317529068 ) ) ; +#5536 = EDGE_CURVE ( 'NONE', #5509, #6763, #5256, .T. ) ; +#5537 = AXIS2_PLACEMENT_3D ( 'NONE', #6494, #1150, #5965 ) ; +#5538 = CYLINDRICAL_SURFACE ( 'NONE', #1084, 5.025000000000002132 ) ; +#5539 = VERTEX_POINT ( 'NONE', #6268 ) ; +#5540 = ORIENTED_EDGE ( 'NONE', *, *, #5284, .T. ) ; +#5541 = FACE_OUTER_BOUND ( 'NONE', #4726, .T. ) ; +#5542 = VECTOR ( 'NONE', #3537, 1000.000000000000000 ) ; +#5543 = CYLINDRICAL_SURFACE ( 'NONE', #4070, 1.500000000000001332 ) ; +#5544 = CARTESIAN_POINT ( 'NONE', ( 36.15552248038325445, -5.899999999999999467, 19.97046096781792812 ) ) ; +#5545 = EDGE_LOOP ( 'NONE', ( #3987, #3230 ) ) ; +#5546 = ORIENTED_EDGE ( 'NONE', *, *, #1284, .F. ) ; +#5547 = CARTESIAN_POINT ( 'NONE', ( -33.45447221780123215, -5.899999999999999467, 8.986531213328042611 ) ) ; +#5548 = ORIENTED_EDGE ( 'NONE', *, *, #4482, .T. ) ; +#5549 = FACE_OUTER_BOUND ( 'NONE', #1402, .T. ) ; +#5550 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5551 = VECTOR ( 'NONE', #133, 1000.000000000000000 ) ; +#5552 = EDGE_CURVE ( 'NONE', #5120, #1564, #6715, .T. ) ; +#5553 = CARTESIAN_POINT ( 'NONE', ( 4.299999999999729816, 11.64513216797408823, -51.94976107412088595 ) ) ; +#5554 = ORIENTED_EDGE ( 'NONE', *, *, #2445, .T. ) ; +#5555 = APPROVAL_ROLE ( '' ) ; +#5556 = FACE_OUTER_BOUND ( 'NONE', #717, .T. ) ; +#5557 = AXIS2_PLACEMENT_3D ( 'NONE', #1270, #1162, #4538 ) ; +#5558 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063086897, -2.200000000000000622, 16.93027221245046832 ) ) ; +#5559 = CARTESIAN_POINT ( 'NONE', ( -41.45819837980560862, -6.700000000000000178, -46.10008445871534377 ) ) ; +#5560 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5561 = EDGE_CURVE ( 'NONE', #6157, #6175, #5217, .T. ) ; +#5562 = VERTEX_POINT ( 'NONE', #5946 ) ; +#5563 = VECTOR ( 'NONE', #2783, 1000.000000000000000 ) ; +#5564 = ORIENTED_EDGE ( 'NONE', *, *, #3049, .F. ) ; +#5565 = ORIENTED_EDGE ( 'NONE', *, *, #1796, .T. ) ; +#5566 = ORIENTED_EDGE ( 'NONE', *, *, #6687, .T. ) ; +#5567 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5568 = CARTESIAN_POINT ( 'NONE', ( 17.30144700593796259, -2.200000000000000622, 30.01032132651201323 ) ) ; +#5569 = AXIS2_PLACEMENT_3D ( 'NONE', #60, #5065, #5593 ) ; +#5570 = EDGE_CURVE ( 'NONE', #3333, #6424, #1849, .T. ) ; +#5571 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -5.500000000000000000, 0.000000000000000000 ) ) ; +#5572 = EDGE_CURVE ( 'NONE', #1769, #4448, #420, .T. ) ; +#5573 = EDGE_CURVE ( 'NONE', #818, #5920, #2183, .T. ) ; +#5574 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5575 = ORIENTED_EDGE ( 'NONE', *, *, #2219, .T. ) ; +#5576 = ORIENTED_EDGE ( 'NONE', *, *, #6066, .F. ) ; +#5577 = CARTESIAN_POINT ( 'NONE', ( -39.95819837980552336, -8.000000000000000000, -46.10008445871442717 ) ) ; +#5578 = PLANE ( 'NONE', #2591 ) ; +#5579 = CARTESIAN_POINT ( 'NONE', ( -41.45819837980560862, -6.700000000000000178, -46.10008445871534377 ) ) ; +#5580 = EDGE_LOOP ( 'NONE', ( #3101, #6093 ) ) ; +#5581 = ORIENTED_EDGE ( 'NONE', *, *, #1835, .T. ) ; +#5582 = DIRECTION ( 'NONE', ( 0.9238795325112835188, 0.000000000000000000, 0.3826834323650976089 ) ) ; +#5583 = EDGE_CURVE ( 'NONE', #4345, #4641, #1519, .T. ) ; +#5584 = ORIENTED_EDGE ( 'NONE', *, *, #5053, .F. ) ; +#5585 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5586 = AXIS2_PLACEMENT_3D ( 'NONE', #6090, #1250, #5686 ) ; +#5587 = CARTESIAN_POINT ( 'NONE', ( -1.722075445645237179, -2.200000000000000622, 4.157457896306324230 ) ) ; +#5588 = AXIS2_PLACEMENT_3D ( 'NONE', #4581, #3509, #1353 ) ; +#5589 = ORIENTED_EDGE ( 'NONE', *, *, #6870, .T. ) ; +#5590 = VECTOR ( 'NONE', #4751, 1000.000000000000000 ) ; +#5591 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5592 = ORIENTED_EDGE ( 'NONE', *, *, #2658, .F. ) ; +#5593 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5594 = CARTESIAN_POINT ( 'NONE', ( 34.86578921711159040, -5.899999999999999467, 20.70457056468532642 ) ) ; +#5595 = CIRCLE ( 'NONE', #5262, 6.000000000000001776 ) ; +#5596 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5597 = AXIS2_PLACEMENT_3D ( 'NONE', #849, #2353, #5550 ) ; +#5598 = CARTESIAN_POINT ( 'NONE', ( 4.299999999999722711, 11.64513216797408823, 5.693922795112557560E-16 ) ) ; +#5599 = AXIS2_PLACEMENT_3D ( 'NONE', #5950, #3859, #4290 ) ; +#5600 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5601 = ORIENTED_EDGE ( 'NONE', *, *, #2912, .T. ) ; +#5602 = AXIS2_PLACEMENT_3D ( 'NONE', #3552, #5760, #6817 ) ; +#5603 = EDGE_LOOP ( 'NONE', ( #66, #2382, #3427, #356 ) ) ; +#5604 = ORIENTED_EDGE ( 'NONE', *, *, #1742, .T. ) ; +#5605 = VERTEX_POINT ( 'NONE', #4827 ) ; +#5606 = CARTESIAN_POINT ( 'NONE', ( -50.01517837498825259, -2.200000000000000622, -25.58773010874907783 ) ) ; +#5607 = CYLINDRICAL_SURFACE ( 'NONE', #5166, 1.500000000000001332 ) ; +#5608 = VECTOR ( 'NONE', #203, 1000.000000000000000 ) ; +#5609 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#5610 = VECTOR ( 'NONE', #6071, 1000.000000000000000 ) ; +#5611 = EDGE_CURVE ( 'NONE', #6798, #1551, #33, .T. ) ; +#5612 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, 0.000000000000000000 ) ) ; +#5613 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#5614 = ADVANCED_FACE ( 'NONE', ( #6336 ), #4250, .F. ) ; +#5615 = ORIENTED_EDGE ( 'NONE', *, *, #6547, .F. ) ; +#5616 = CIRCLE ( 'NONE', #1540, 1.500000000002881029 ) ; +#5617 = ORIENTED_EDGE ( 'NONE', *, *, #469, .T. ) ; +#5618 = ADVANCED_FACE ( 'NONE', ( #1494 ), #2019, .F. ) ; +#5619 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5620 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5621 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, -1.000000000000000000, -22.03027221245303480 ) ) ; +#5622 = AXIS2_PLACEMENT_3D ( 'NONE', #2718, #1065, #6410 ) ; +#5623 = ORIENTED_EDGE ( 'NONE', *, *, #2697, .T. ) ; +#5624 = ORIENTED_EDGE ( 'NONE', *, *, #6478, .F. ) ; +#5625 = VERTEX_POINT ( 'NONE', #6406 ) ; +#5626 = CARTESIAN_POINT ( 'NONE', ( -53.45932926627801862, -2.200000000000000622, -17.27281431613950957 ) ) ; +#5627 = ORIENTED_EDGE ( 'NONE', *, *, #1325, .F. ) ; +#5628 = PLANE ( 'NONE', #973 ) ; +#5629 = EDGE_CURVE ( 'NONE', #6624, #5093, #3661, .T. ) ; +#5630 = CIRCLE ( 'NONE', #2113, 60.49999999999994316 ) ; +#5631 = LINE ( 'NONE', #735, #5158 ) ; +#5632 = EDGE_LOOP ( 'NONE', ( #2615, #929, #5044, #6001 ) ) ; +#5633 = CARTESIAN_POINT ( 'NONE', ( 56.16019669858830810, 0.000000000000000000, 56.16019669858773966 ) ) ; +#5634 = VERTEX_POINT ( 'NONE', #2152 ) ; +#5635 = FACE_OUTER_BOUND ( 'NONE', #1848, .T. ) ; +#5636 = AXIS2_PLACEMENT_3D ( 'NONE', #3633, #6960, #2099 ) ; +#5637 = FACE_OUTER_BOUND ( 'NONE', #6452, .T. ) ; +#5638 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#5639 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5640 = ORIENTED_EDGE ( 'NONE', *, *, #2006, .F. ) ; +#5641 = LINE ( 'NONE', #389, #4344 ) ; +#5642 = ORIENTED_EDGE ( 'NONE', *, *, #5945, .T. ) ; +#5643 = ORIENTED_EDGE ( 'NONE', *, *, #5909, .T. ) ; +#5644 = VERTEX_POINT ( 'NONE', #2082 ) ; +#5645 = LINE ( 'NONE', #2369, #2046 ) ; +#5646 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5647 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5648 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5649 = AXIS2_PLACEMENT_3D ( 'NONE', #2003, #1452, #6930 ) ; +#5650 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244847169, -1.000000000000000000, -47.23725382063096134 ) ) ; +#5651 = EDGE_LOOP ( 'NONE', ( #6159, #5351, #5329, #454 ) ) ; +#5652 = ORIENTED_EDGE ( 'NONE', *, *, #2954, .F. ) ; +#5653 = ADVANCED_FACE ( 'NONE', ( #452 ), #1173, .F. ) ; +#5654 = LINE ( 'NONE', #2377, #2606 ) ; +#5655 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -5.899999999999999467, -24.46370172317620018 ) ) ; +#5656 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5657 = VECTOR ( 'NONE', #4445, 1000.000000000000000 ) ; +#5658 = AXIS2_PLACEMENT_3D ( 'NONE', #1976, #6057, #1214 ) ; +#5659 = ORIENTED_EDGE ( 'NONE', *, *, #3913, .T. ) ; +#5660 = ORIENTED_EDGE ( 'NONE', *, *, #6023, .T. ) ; +#5661 = CARTESIAN_POINT ( 'NONE', ( 39.95819837980705103, -2.200000000000000622, -56.99999999999999289 ) ) ; +#5662 = ORIENTED_EDGE ( 'NONE', *, *, #6534, .T. ) ; +#5663 = CIRCLE ( 'NONE', #2599, 1.100000000000017630 ) ; +#5664 = ADVANCED_FACE ( 'NONE', ( #6475 ), #4214, .F. ) ; +#5665 = DIRECTION ( 'NONE', ( 0.3826834323650974978, 0.000000000000000000, -0.9238795325112836299 ) ) ; +#5666 = ORIENTED_EDGE ( 'NONE', *, *, #6003, .T. ) ; +#5667 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000026290, 0.000000000000000000, 33.49999999999970868 ) ) ; +#5668 = ORIENTED_EDGE ( 'NONE', *, *, #3486, .T. ) ; +#5669 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, -1.000000000000000000, -50.63725382063395841 ) ) ; +#5670 = CARTESIAN_POINT ( 'NONE', ( -1.722075445644041469, -6.700000000000000178, 4.157457896303436762 ) ) ; +#5671 = FACE_BOUND ( 'NONE', #3713, .T. ) ; +#5672 = DIRECTION ( 'NONE', ( -1.324168091886726789E-16, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5673 = DIRECTION ( 'NONE', ( 8.342669912143859328E-17, -0.7320688075339150114, 0.6812306958996136030 ) ) ; +#5674 = ORIENTED_EDGE ( 'NONE', *, *, #935, .F. ) ; +#5675 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, 0.000000000000000000, 52.33725382063020959 ) ) ; +#5676 = EDGE_LOOP ( 'NONE', ( #1960, #4656, #421, #3526, #6014, #2583, #365, #7014, #6062, #209 ) ) ; +#5677 = ORIENTED_EDGE ( 'NONE', *, *, #6253, .F. ) ; +#5678 = VERTEX_POINT ( 'NONE', #5876 ) ; +#5679 = CIRCLE ( 'NONE', #577, 1.500000000000004219 ) ; +#5680 = CARTESIAN_POINT ( 'NONE', ( 56.16019669858830810, 0.000000000000000000, -56.16019669858773966 ) ) ; +#5681 = PLANE ( 'NONE', #6398 ) ; +#5682 = ADVANCED_FACE ( 'NONE', ( #6910, #2050 ), #5316, .F. ) ; +#5683 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5684 = CARTESIAN_POINT ( 'NONE', ( 36.15552248038325445, -5.899999999999999467, 21.47046096781793167 ) ) ; +#5685 = CIRCLE ( 'NONE', #6818, 1.099999999999962119 ) ; +#5686 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5687 = ORIENTED_EDGE ( 'NONE', *, *, #6530, .F. ) ; +#5688 = VERTEX_POINT ( 'NONE', #995 ) ; +#5689 = CARTESIAN_POINT ( 'NONE', ( -21.43027221245029068, -1.000000000000000000, -51.73725382063096134 ) ) ; +#5690 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5691 = DIRECTION ( 'NONE', ( 0.9238795325112894030, 0.000000000000000000, -0.3826834323650834535 ) ) ; +#5692 = VERTEX_POINT ( 'NONE', #5910 ) ; +#5693 = ORIENTED_EDGE ( 'NONE', *, *, #2736, .F. ) ; +#5694 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, -1.000000000000000000 ) ) ; +#5695 = VERTEX_POINT ( 'NONE', #5419 ) ; +#5696 = EDGE_CURVE ( 'NONE', #6085, #4945, #3680, .T. ) ; +#5697 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#5698 = EDGE_LOOP ( 'NONE', ( #3862, #1640 ) ) ; +#5699 = EDGE_CURVE ( 'NONE', #2109, #5062, #4574, .T. ) ; +#5700 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5701 = ORIENTED_EDGE ( 'NONE', *, *, #3789, .F. ) ; +#5702 = CALENDAR_DATE ( 2026, 29, 9 ) ; +#5703 = EDGE_CURVE ( 'NONE', #6941, #200, #3212, .T. ) ; +#5704 = ADVANCED_FACE ( 'NONE', ( #5387, #530 ), #3886, .T. ) ; +#5705 = LINE ( 'NONE', #6838, #6442 ) ; +#5706 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#5707 = EDGE_CURVE ( 'NONE', #429, #2541, #2408, .T. ) ; +#5708 = CIRCLE ( 'NONE', #2292, 1.499999999999999556 ) ; +#5709 = CARTESIAN_POINT ( 'NONE', ( -2.086688644580226895E-12, -2.400000000000000355, 53.44976107412009725 ) ) ; +#5710 = CONICAL_SURFACE ( 'NONE', #1852, 1.099999999999989875, 0.7853981633974267407 ) ; +#5711 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5712 = EDGE_LOOP ( 'NONE', ( #4712, #674, #6034, #851 ) ) ; +#5713 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5714 = VERTEX_POINT ( 'NONE', #2816 ) ; +#5715 = ORIENTED_EDGE ( 'NONE', *, *, #6252, .F. ) ; +#5716 = ORIENTED_EDGE ( 'NONE', *, *, #2486, .F. ) ; +#5717 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5718 = AXIS2_PLACEMENT_3D ( 'NONE', #2017, #4155, #450 ) ; +#5719 = DIRECTION ( 'NONE', ( 0.9238795325112835188, -0.000000000000000000, 0.3826834323650976089 ) ) ; +#5720 = AXIS2_PLACEMENT_3D ( 'NONE', #3677, #3644, #1026 ) ; +#5721 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5722 = AXIS2_PLACEMENT_3D ( 'NONE', #1634, #534, #1569 ) ; +#5723 = EDGE_CURVE ( 'NONE', #5495, #5957, #1268, .T. ) ; +#5724 = FACE_OUTER_BOUND ( 'NONE', #6698, .T. ) ; +#5725 = VECTOR ( 'NONE', #3860, 1000.000000000000000 ) ; +#5726 = FACE_OUTER_BOUND ( 'NONE', #6570, .T. ) ; +#5727 = CIRCLE ( 'NONE', #2654, 4.500000000000010658 ) ; +#5728 = ORIENTED_EDGE ( 'NONE', *, *, #3486, .F. ) ; +#5729 = ORIENTED_EDGE ( 'NONE', *, *, #273, .T. ) ; +#5730 = LINE ( 'NONE', #4059, #5334 ) ; +#5731 = VECTOR ( 'NONE', #2227, 1000.000000000000000 ) ; +#5732 = VECTOR ( 'NONE', #6472, 1000.000000000000000 ) ; +#5733 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -2.400000000000000355, 1.500000000000004219 ) ) ; +#5734 = LINE ( 'NONE', #1511, #6187 ) ; +#5735 = AXIS2_PLACEMENT_3D ( 'NONE', #4551, #4007, #6122 ) ; +#5736 = EDGE_LOOP ( 'NONE', ( #4412, #3273, #1495, #4567 ) ) ; +#5737 = VERTEX_POINT ( 'NONE', #2178 ) ; +#5738 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#5739 = ORIENTED_EDGE ( 'NONE', *, *, #1756, .T. ) ; +#5740 = AXIS2_PLACEMENT_3D ( 'NONE', #5849, #2123, #964 ) ; +#5741 = FACE_OUTER_BOUND ( 'NONE', #6154, .T. ) ; +#5742 = ORIENTED_EDGE ( 'NONE', *, *, #3798, .F. ) ; +#5743 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5744 = ORIENTED_EDGE ( 'NONE', *, *, #1023, .T. ) ; +#5745 = EDGE_CURVE ( 'NONE', #265, #1113, #3308, .T. ) ; +#5746 = CALENDAR_DATE ( 2026, 29, 9 ) ; +#5747 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, -1.000000000000000000, -21.43027221244439673 ) ) ; +#5748 = FACE_OUTER_BOUND ( 'NONE', #3801, .T. ) ; +#5749 = CYLINDRICAL_SURFACE ( 'NONE', #4009, 1.500000000000001332 ) ; +#5750 = EDGE_CURVE ( 'NONE', #5936, #6586, #6007, .T. ) ; +#5751 = APPROVAL ( #3577, 'δָ¶¨' ) ; +#5752 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5753 = ORIENTED_EDGE ( 'NONE', *, *, #2939, .F. ) ; +#5754 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5755 = EDGE_LOOP ( 'NONE', ( #4798, #3564 ) ) ; +#5756 = VERTEX_POINT ( 'NONE', #2747 ) ; +#5757 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, 0.000000000000000000, -51.73725382063752676 ) ) ; +#5758 = CYLINDRICAL_SURFACE ( 'NONE', #3580, 0.6000000000000033085 ) ; +#5759 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245065661, -1.000000000000000000, 47.23725382063076950 ) ) ; +#5760 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5761 = ADVANCED_FACE ( 'NONE', ( #3822 ), #1308, .F. ) ; +#5762 = DIRECTION ( 'NONE', ( -0.9238795325112835188, 0.000000000000000000, -0.3826834323650974978 ) ) ; +#5763 = VERTEX_POINT ( 'NONE', #3346 ) ; +#5764 = ORIENTED_EDGE ( 'NONE', *, *, #3738, .F. ) ; +#5765 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5766 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5767 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5768 = EDGE_LOOP ( 'NONE', ( #2534, #2989, #4682, #4347 ) ) ; +#5769 = AXIS2_PLACEMENT_3D ( 'NONE', #5128, #1823, #4449 ) ; +#5770 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980706524, -8.000000000000000000, -56.99999999999999289 ) ) ; +#5771 = VERTEX_POINT ( 'NONE', #2848 ) ; +#5772 = ADVANCED_FACE ( 'NONE', ( #4919 ), #5518, .T. ) ; +#5773 = CIRCLE ( 'NONE', #6666, 4.500000000000010658 ) ; +#5774 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5775 = EDGE_LOOP ( 'NONE', ( #595, #3488, #6092, #4602 ) ) ; +#5776 = PERSON_AND_ORGANIZATION ( #2507, #6702 ) ; +#5777 = LINE ( 'NONE', #4853, #4763 ) ; +#5778 = CIRCLE ( 'NONE', #4757, 4.500000000000003553 ) ; +#5779 = CARTESIAN_POINT ( 'NONE', ( -48.50000000000026290, -3.000000000000000000, 47.49999999999972289 ) ) ; +#5780 = EDGE_CURVE ( 'NONE', #3333, #6326, #582, .T. ) ; +#5781 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5782 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5783 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.800000000000000488, 24.46370172317529068 ) ) ; +#5784 = VERTEX_POINT ( 'NONE', #3924 ) ; +#5785 = ORIENTED_EDGE ( 'NONE', *, *, #3502, .F. ) ; +#5786 = CARTESIAN_POINT ( 'NONE', ( 36.15552248038325445, -6.700000000000000178, 21.47046096781793167 ) ) ; +#5787 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5788 = VECTOR ( 'NONE', #4298, 1000.000000000000000 ) ; +#5789 = CARTESIAN_POINT ( 'NONE', ( 1.722075445644041469, -2.200000000000000622, -4.157457896303436762 ) ) ; +#5790 = EDGE_CURVE ( 'NONE', #2686, #5509, #3310, .T. ) ; +#5791 = FACE_OUTER_BOUND ( 'NONE', #1880, .T. ) ; +#5792 = CARTESIAN_POINT ( 'NONE', ( -36.30999999999903594, -8.000000000000000000, 56.17257376090111620 ) ) ; +#5793 = VERTEX_POINT ( 'NONE', #6576 ) ; +#5794 = EDGE_LOOP ( 'NONE', ( #6323, #6934, #1555, #3256 ) ) ; +#5795 = LINE ( 'NONE', #3054, #6454 ) ; +#5796 = ADVANCED_FACE ( 'NONE', ( #6042 ), #1200, .F. ) ; +#5797 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000026290, 0.000000000000000000, -33.49999999999970868 ) ) ; +#5798 = EDGE_CURVE ( 'NONE', #938, #4269, #123, .T. ) ; +#5799 = CYLINDRICAL_SURFACE ( 'NONE', #3704, 1.499999999999737543 ) ; +#5800 = EDGE_CURVE ( 'NONE', #2289, #5868, #1759, .T. ) ; +#5801 = CIRCLE ( 'NONE', #6355, 1.500000000000001332 ) ; +#5802 = VERTEX_POINT ( 'NONE', #5022 ) ; +#5803 = LINE ( 'NONE', #6867, #4180 ) ; +#5804 = VERTEX_POINT ( 'NONE', #163 ) ; +#5805 = CARTESIAN_POINT ( 'NONE', ( -10.01349373899360451, -5.899999999999999467, 39.29417823468541116 ) ) ; +#5806 = ADVANCED_FACE ( 'NONE', ( #6650 ), #1792, .T. ) ; +#5807 = EDGE_LOOP ( 'NONE', ( #6749, #1319, #3064, #3732, #1466, #2709, #5715, #1210, #4593, #114, #2775, #5677, #116, #6891, #3666, #2956, #6970, #6388, #2476, #1155, #3735, #6271, #4072, #3498 ) ) ; +#5808 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5809 = CARTESIAN_POINT ( 'NONE', ( 8.986531213328159851, -2.200000000000000622, 33.45447221780118952 ) ) ; +#5810 = CARTESIAN_POINT ( 'NONE', ( -13.14398910962626843, -5.899999999999999467, 31.73239677215942223 ) ) ; +#5811 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5812 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, -1.000000000000000000, 51.73725382063020817 ) ) ; +#5813 = ORIENTED_EDGE ( 'NONE', *, *, #3178, .F. ) ; +#5814 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5815 = PLANE ( 'NONE', #231 ) ; +#5816 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#5817 = AXIS2_PLACEMENT_3D ( 'NONE', #2398, #4655, #6192 ) ; +#5818 = FACE_OUTER_BOUND ( 'NONE', #410, .T. ) ; +#5819 = VECTOR ( 'NONE', #760, 1000.000000000000000 ) ; +#5820 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5821 = CARTESIAN_POINT ( 'NONE', ( -5.800000000000265388, -5.499999999999998224, -57.00000000000000000 ) ) ; +#5822 = ORIENTED_EDGE ( 'NONE', *, *, #5707, .F. ) ; +#5823 = ORIENTED_EDGE ( 'NONE', *, *, #3487, .T. ) ; +#5824 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -6.700000000000000178, 6.000000000000001776 ) ) ; +#5825 = AXIS2_PLACEMENT_3D ( 'NONE', #824, #2966, #1981 ) ; +#5826 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5827 = EDGE_CURVE ( 'NONE', #2276, #6399, #3164, .T. ) ; +#5828 = CARTESIAN_POINT ( 'NONE', ( -52.50000000000027001, -8.000000000000000000, -49.52499999999971436 ) ) ; +#5829 = EDGE_CURVE ( 'NONE', #6982, #4481, #932, .T. ) ; +#5830 = CIRCLE ( 'NONE', #2421, 1.500000000000001332 ) ; +#5831 = EDGE_CURVE ( 'NONE', #1751, #1882, #4677, .T. ) ; +#5832 = EDGE_LOOP ( 'NONE', ( #5033, #6032 ) ) ; +#5833 = AXIS2_PLACEMENT_3D ( 'NONE', #2252, #4464, #6620 ) ; +#5834 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -5.500000000000000000, 0.000000000000000000 ) ) ; +#5835 = ORIENTED_EDGE ( 'NONE', *, *, #6833, .F. ) ; +#5836 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063071265, -1.000000000000000000, -21.43027221245083425 ) ) ; +#5837 = CIRCLE ( 'NONE', #292, 4.500000000000010658 ) ; +#5838 = VERTEX_POINT ( 'NONE', #1381 ) ; +#5839 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5840 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000027711, 0.000000000000000000, -52.69999999572329585 ) ) ; +#5841 = EDGE_CURVE ( 'NONE', #2773, #3130, #1821, .T. ) ; +#5842 = VECTOR ( 'NONE', #3420, 1000.000000000000114 ) ; +#5843 = LINE ( 'NONE', #3107, #852 ) ; +#5844 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, -1.000000000000000000, 51.73725382062663414 ) ) ; +#5845 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5846 = ORIENTED_EDGE ( 'NONE', *, *, #3365, .F. ) ; +#5847 = FACE_OUTER_BOUND ( 'NONE', #1548, .T. ) ; +#5848 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.500000000000000000, 0.000000000000000000 ) ) ; +#5849 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063086897, -2.200000000000000622, 21.43027221245048253 ) ) ; +#5850 = FACE_OUTER_BOUND ( 'NONE', #1573, .T. ) ; +#5851 = DESIGN_CONTEXT ( 'detailed design', #1998, 'design' ) ; +#5852 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5853 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063502565, -1.000000000000000000, 25.93027221244043190 ) ) ; +#5854 = ORIENTED_EDGE ( 'NONE', *, *, #4008, .F. ) ; +#5855 = ORIENTED_EDGE ( 'NONE', *, *, #3587, .F. ) ; +#5856 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5857 = PLANE ( 'NONE', #6395 ) ; +#5858 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5859 = VECTOR ( 'NONE', #4636, 1000.000000000000000 ) ; +#5860 = EDGE_CURVE ( 'NONE', #1226, #6169, #1612, .T. ) ; +#5861 = ORIENTED_EDGE ( 'NONE', *, *, #6261, .T. ) ; +#5862 = ORIENTED_EDGE ( 'NONE', *, *, #3229, .T. ) ; +#5863 = LINE ( 'NONE', #1345, #363 ) ; +#5864 = CARTESIAN_POINT ( 'NONE', ( -52.50000000000027001, -3.000000000000000000, -44.49999999999971578 ) ) ; +#5865 = VERTEX_POINT ( 'NONE', #6256 ) ; +#5866 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5867 = AXIS2_PLACEMENT_3D ( 'NONE', #6899, #1550, #6292 ) ; +#5868 = VERTEX_POINT ( 'NONE', #2427 ) ; +#5869 = EDGE_LOOP ( 'NONE', ( #5090, #2990 ) ) ; +#5870 = CARTESIAN_POINT ( 'NONE', ( -52.50000000000027001, -8.000000000000000000, -44.49999999999971578 ) ) ; +#5871 = CARTESIAN_POINT ( 'NONE', ( -56.16019669858830810, 0.000000000000000000, -56.16019669858773966 ) ) ; +#5872 = EDGE_CURVE ( 'NONE', #2173, #531, #6183, .T. ) ; +#5873 = CIRCLE ( 'NONE', #913, 1.500000000000001332 ) ; +#5874 = LINE ( 'NONE', #3173, #2987 ) ; +#5875 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5876 = CARTESIAN_POINT ( 'NONE', ( -33.45447221780229086, -2.200000000000000622, -8.986531213325664069 ) ) ; +#5877 = AXIS2_PLACEMENT_3D ( 'NONE', #70, #5534, #4151 ) ; +#5878 = ORIENTED_EDGE ( 'NONE', *, *, #3767, .T. ) ; +#5879 = DIRECTION ( 'NONE', ( 0.7071067811865437980, 0.000000000000000000, -0.7071067811865511255 ) ) ; +#5880 = FACE_OUTER_BOUND ( 'NONE', #5900, .T. ) ; +#5881 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.800000000000000488, 22.96370172317529068 ) ) ; +#5882 = CARTESIAN_POINT ( 'NONE', ( 10.01349373899624062, -6.700000000000000178, 39.29417823468473614 ) ) ; +#5883 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5884 = DIRECTION ( 'NONE', ( -0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5885 = EDGE_LOOP ( 'NONE', ( #6107, #5111, #2953, #677 ) ) ; +#5886 = ORIENTED_EDGE ( 'NONE', *, *, #185, .F. ) ; +#5887 = EDGE_CURVE ( 'NONE', #6911, #232, #5863, .T. ) ; +#5888 = AXIS2_PLACEMENT_3D ( 'NONE', #5689, #3557, #5229 ) ; +#5889 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5890 = DIRECTION ( 'NONE', ( -3.083952846180832311E-15, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5891 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5892 = CARTESIAN_POINT ( 'NONE', ( -27.93000000000074579, -2.200000000000000622, -62.00000000000002132 ) ) ; +#5893 = AXIS2_PLACEMENT_3D ( 'NONE', #5848, #2585, #2085 ) ; +#5894 = ORIENTED_EDGE ( 'NONE', *, *, #167, .T. ) ; +#5895 = ORIENTED_EDGE ( 'NONE', *, *, #6647, .F. ) ; +#5896 = LINE ( 'NONE', #2770, #3975 ) ; +#5897 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -5.899999999999999467, -22.96370172317620018 ) ) ; +#5898 = ORIENTED_EDGE ( 'NONE', *, *, #6346, .T. ) ; +#5899 = AXIS2_PLACEMENT_3D ( 'NONE', #1615, #75, #3843 ) ; +#5900 = EDGE_LOOP ( 'NONE', ( #5716, #3942, #3934, #5581 ) ) ; +#5901 = ORIENTED_EDGE ( 'NONE', *, *, #1512, .F. ) ; +#5902 = SECURITY_CLASSIFICATION ( '', '', #3035 ) ; +#5903 = CARTESIAN_POINT ( 'NONE', ( 39.95819837980705103, -2.200000000000000622, -56.99999999999999289 ) ) ; +#5904 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#5905 = EDGE_CURVE ( 'NONE', #6696, #2145, #2892, .T. ) ; +#5906 = LINE ( 'NONE', #1058, #2645 ) ; +#5907 = EDGE_CURVE ( 'NONE', #5107, #4657, #2511, .T. ) ; +#5908 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, 0.000000000000000000 ) ) ; +#5909 = EDGE_CURVE ( 'NONE', #5692, #2777, #5063, .T. ) ; +#5910 = CARTESIAN_POINT ( 'NONE', ( 31.73239677215937249, -2.200000000000000622, 8.643989109626145861 ) ) ; +#5911 = EDGE_CURVE ( 'NONE', #6399, #4665, #1714, .T. ) ; +#5912 = EDGE_LOOP ( 'NONE', ( #514, #49, #1785, #4311 ) ) ; +#5913 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5914 = LINE ( 'NONE', #5353, #4990 ) ; +#5915 = CARTESIAN_POINT ( 'NONE', ( -5.800000000000267164, -2.200000000000000622, -58.50000000000000000 ) ) ; +#5916 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5917 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -2.400000000000000355, -1.500000000000004219 ) ) ; +#5918 = CARTESIAN_POINT ( 'NONE', ( -24.28180162019543786, -8.000000000000000000, -60.50000000000001421 ) ) ; +#5919 = ORIENTED_EDGE ( 'NONE', *, *, #2658, .T. ) ; +#5920 = VERTEX_POINT ( 'NONE', #2070 ) ; +#5921 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#5922 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, -3.083952846180982984E-15 ) ) ; +#5923 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#5924 = LINE ( 'NONE', #5462, #5425 ) ; +#5925 = EDGE_CURVE ( 'NONE', #6070, #6737, #3066, .T. ) ; +#5926 = CIRCLE ( 'NONE', #4699, 5.025000000000002132 ) ; +#5927 = VECTOR ( 'NONE', #6655, 1000.000000000000000 ) ; +#5928 = VERTEX_POINT ( 'NONE', #6686 ) ; +#5929 = VERTEX_POINT ( 'NONE', #3574 ) ; +#5930 = LINE ( 'NONE', #1089, #121 ) ; +#5931 = EDGE_CURVE ( 'NONE', #6586, #5957, #3737, .T. ) ; +#5932 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, -0.4999999999999886202, -21.43027221244439673 ) ) ; +#5933 = CIRCLE ( 'NONE', #4350, 1.500000000000001332 ) ; +#5934 = CARTESIAN_POINT ( 'NONE', ( 11.76972587644366719, -6.700000000000000178, 40.17369852021911925 ) ) ; +#5935 = CIRCLE ( 'NONE', #6851, 1.500000000000001332 ) ; +#5936 = VERTEX_POINT ( 'NONE', #1309 ) ; +#5937 = CIRCLE ( 'NONE', #1980, 5.999999999999998224 ) ; +#5938 = ORIENTED_EDGE ( 'NONE', *, *, #4000, .F. ) ; +#5939 = AXIS2_PLACEMENT_3D ( 'NONE', #4463, #4424, #1238 ) ; +#5940 = ORIENTED_EDGE ( 'NONE', *, *, #5583, .F. ) ; +#5941 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5942 = FACE_OUTER_BOUND ( 'NONE', #5768, .T. ) ; +#5943 = AXIS2_PLACEMENT_3D ( 'NONE', #2066, #6418, #1044 ) ; +#5944 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5945 = EDGE_CURVE ( 'NONE', #1276, #3750, #5685, .T. ) ; +#5946 = CARTESIAN_POINT ( 'NONE', ( -30.01032132651207718, -2.200000000000000622, 17.30144700593785956 ) ) ; +#5947 = EDGE_LOOP ( 'NONE', ( #5642, #648 ) ) ; +#5948 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5949 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5950 = CARTESIAN_POINT ( 'NONE', ( -2.680147770384166961E-13, -2.200000000000000622, -51.94976107412088595 ) ) ; +#5951 = VECTOR ( 'NONE', #4862, 999.9999999999998863 ) ; +#5952 = APPROVAL ( #4037, 'δָ¶¨' ) ; +#5953 = FACE_OUTER_BOUND ( 'NONE', #3044, .T. ) ; +#5954 = CARTESIAN_POINT ( 'NONE', ( 39.95819837980343436, -6.700000000000000178, -46.10008445871692828 ) ) ; +#5955 = ORIENTED_EDGE ( 'NONE', *, *, #705, .T. ) ; +#5956 = ORIENTED_EDGE ( 'NONE', *, *, #3939, .F. ) ; +#5957 = VERTEX_POINT ( 'NONE', #5667 ) ; +#5958 = FACE_OUTER_BOUND ( 'NONE', #944, .T. ) ; +#5959 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5960 = CARTESIAN_POINT ( 'NONE', ( 52.69999999572387139, -8.000000000000000000, -63.49999999999969447 ) ) ; +#5961 = LINE ( 'NONE', #1177, #4291 ) ; +#5962 = EDGE_CURVE ( 'NONE', #4332, #2496, #5801, .T. ) ; +#5963 = ORIENTED_EDGE ( 'NONE', *, *, #4485, .T. ) ; +#5964 = CARTESIAN_POINT ( 'NONE', ( -40.74772366876740648, -5.899999999999999467, -10.38390657767414282 ) ) ; +#5965 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#5966 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063502565, -6.700000000000000178, -21.43027221244042124 ) ) ; +#5967 = EDGE_LOOP ( 'NONE', ( #4384, #4818 ) ) ; +#5968 = ORIENTED_EDGE ( 'NONE', *, *, #1333, .T. ) ; +#5969 = EDGE_CURVE ( 'NONE', #6662, #2375, #5133, .T. ) ; +#5970 = ORIENTED_EDGE ( 'NONE', *, *, #416, .T. ) ; +#5971 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063502565, -1.000000000000000000, -25.93027221244043190 ) ) ; +#5972 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5973 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5974 = ORIENTED_EDGE ( 'NONE', *, *, #3490, .F. ) ; +#5975 = CYLINDRICAL_SURFACE ( 'NONE', #6349, 4.500000000000003553 ) ; +#5976 = AXIS2_PLACEMENT_3D ( 'NONE', #774, #6714, #808 ) ; +#5977 = CARTESIAN_POINT ( 'NONE', ( -31.73239677215492804, -2.200000000000000622, 13.14398910963711486 ) ) ; +#5978 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5979 = FACE_OUTER_BOUND ( 'NONE', #2063, .T. ) ; +#5980 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, -1.000000000000000000, -22.53027221245302414 ) ) ; +#5981 = ORIENTED_EDGE ( 'NONE', *, *, #3409, .F. ) ; +#5982 = ORIENTED_EDGE ( 'NONE', *, *, #769, .T. ) ; +#5983 = LINE ( 'NONE', #1574, #4200 ) ; +#5984 = CARTESIAN_POINT ( 'NONE', ( -11.76972587644092272, -5.899999999999999467, 40.17369852021980137 ) ) ; +#5985 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5986 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, -1.000000000000000000, 20.33027221243706961 ) ) ; +#5987 = AXIS2_PLACEMENT_3D ( 'NONE', #3642, #5389, #6912 ) ; +#5988 = EDGE_CURVE ( 'NONE', #2738, #6184, #4610, .T. ) ; +#5989 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#5990 = ADVANCED_FACE ( 'NONE', ( #2996 ), #5175, .T. ) ; +#5991 = ORIENTED_EDGE ( 'NONE', *, *, #4230, .F. ) ; +#5992 = EDGE_CURVE ( 'NONE', #5678, #4296, #5896, .T. ) ; +#5993 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#5994 = EDGE_CURVE ( 'NONE', #6133, #2686, #6691, .T. ) ; +#5995 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, -1.000000000000000000, 51.73725382062663414 ) ) ; +#5996 = CARTESIAN_POINT ( 'NONE', ( 40.74772366876740648, -5.899999999999999467, 10.38390657767414282 ) ) ; +#5997 = AXIS2_PLACEMENT_3D ( 'NONE', #1181, #2913, #5506 ) ; +#5998 = EDGE_LOOP ( 'NONE', ( #5785, #4057, #6602, #1986 ) ) ; +#5999 = VECTOR ( 'NONE', #6984, 1000.000000000000000 ) ; +#6000 = ORIENTED_EDGE ( 'NONE', *, *, #5872, .T. ) ; +#6001 = ORIENTED_EDGE ( 'NONE', *, *, #4771, .F. ) ; +#6002 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, -1.000000000000000000, 51.73725382063020817 ) ) ; +#6003 = EDGE_CURVE ( 'NONE', #2496, #3333, #2703, .T. ) ; +#6004 = AXIS2_PLACEMENT_3D ( 'NONE', #312, #4646, #6493 ) ; +#6005 = EDGE_CURVE ( 'NONE', #5920, #818, #3640, .T. ) ; +#6006 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6007 = LINE ( 'NONE', #1132, #4805 ) ; +#6008 = ORIENTED_EDGE ( 'NONE', *, *, #3487, .F. ) ; +#6009 = LINE ( 'NONE', #5594, #3690 ) ; +#6010 = DIRECTION ( 'NONE', ( 8.659560562355154725E-17, -0.7071067811865293651, 0.7071067811865656694 ) ) ; +#6011 = FACE_OUTER_BOUND ( 'NONE', #4782, .T. ) ; +#6012 = CARTESIAN_POINT ( 'NONE', ( 34.86578921711158330, -5.899999999999999467, 20.70457056468532286 ) ) ; +#6013 = ORIENTED_EDGE ( 'NONE', *, *, #1964, .T. ) ; +#6014 = ORIENTED_EDGE ( 'NONE', *, *, #1421, .F. ) ; +#6015 = ORIENTED_EDGE ( 'NONE', *, *, #4029, .T. ) ; +#6016 = ORIENTED_EDGE ( 'NONE', *, *, #2556, .T. ) ; +#6017 = CARTESIAN_POINT ( 'NONE', ( -52.69999999572387139, 0.000000000000000000, 63.49999999999969447 ) ) ; +#6018 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -2.200000000000000622, -60.50000000000001421 ) ) ; +#6019 = CYLINDRICAL_SURFACE ( 'NONE', #738, 1.500000000000001332 ) ; +#6020 = DIRECTION ( 'NONE', ( 0.9238795325112867385, 0.000000000000000000, -0.3826834323650901148 ) ) ; +#6021 = CYLINDRICAL_SURFACE ( 'NONE', #4124, 5.999999999999998224 ) ; +#6022 = ORIENTED_EDGE ( 'NONE', *, *, #6657, .T. ) ; +#6023 = EDGE_CURVE ( 'NONE', #2824, #2835, #1582, .T. ) ; +#6024 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6025 = DIRECTION ( 'NONE', ( 0.7071067811865441310, 0.000000000000000000, -0.7071067811865510144 ) ) ; +#6026 = FACE_BOUND ( 'NONE', #5967, .T. ) ; +#6027 = AXIS2_PLACEMENT_3D ( 'NONE', #3787, #1527, #3712 ) ; +#6028 = EDGE_CURVE ( 'NONE', #989, #5763, #3288, .T. ) ; +#6029 = AXIS2_PLACEMENT_3D ( 'NONE', #2092, #3687, #4734 ) ; +#6030 = VERTEX_POINT ( 'NONE', #1121 ) ; +#6031 = AXIS2_PLACEMENT_3D ( 'NONE', #5908, #1983, #5245 ) ; +#6032 = ORIENTED_EDGE ( 'NONE', *, *, #6870, .F. ) ; +#6033 = CARTESIAN_POINT ( 'NONE', ( 30.01032132651300799, -5.899999999999999467, 17.30144700593542595 ) ) ; +#6034 = ORIENTED_EDGE ( 'NONE', *, *, #6695, .F. ) ; +#6035 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, -1.000000000000000000, -20.33027221245304617 ) ) ; +#6036 = VECTOR ( 'NONE', #3904, 1000.000000000000000 ) ; +#6037 = EDGE_CURVE ( 'NONE', #3850, #6083, #2383, .T. ) ; +#6038 = VECTOR ( 'NONE', #3252, 1000.000000000000000 ) ; +#6039 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, 0.000000000000000000, 51.73725382062663414 ) ) ; +#6040 = CIRCLE ( 'NONE', #5375, 1.499999999999999556 ) ; +#6041 = VECTOR ( 'NONE', #1832, 1000.000000000000000 ) ; +#6042 = FACE_OUTER_BOUND ( 'NONE', #3691, .T. ) ; +#6043 = ORIENTED_EDGE ( 'NONE', *, *, #5829, .T. ) ; +#6044 = EDGE_CURVE ( 'NONE', #3203, #6782, #4207, .T. ) ; +#6045 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6046 = CARTESIAN_POINT ( 'NONE', ( -24.28180162019544142, -8.000000000000000000, -60.00000000000001421 ) ) ; +#6047 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244024005, -1.000000000000000000, 56.23725382063511802 ) ) ; +#6048 = CIRCLE ( 'NONE', #3907, 1.500000000000001332 ) ; +#6049 = LINE ( 'NONE', #5395, #6733 ) ; +#6050 = FACE_OUTER_BOUND ( 'NONE', #4859, .T. ) ; +#6051 = EDGE_LOOP ( 'NONE', ( #5301, #5072, #5823, #2594 ) ) ; +#6052 = VERTEX_POINT ( 'NONE', #580 ) ; +#6053 = EDGE_LOOP ( 'NONE', ( #6222, #3534 ) ) ; +#6054 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6055 = VECTOR ( 'NONE', #5322, 1000.000000000000000 ) ; +#6056 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6057 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6058 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, -1.000000000000000000, 22.03027221243706180 ) ) ; +#6059 = CIRCLE ( 'NONE', #3012, 4.500000000000013323 ) ; +#6060 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6061 = ORIENTED_EDGE ( 'NONE', *, *, #3365, .T. ) ; +#6062 = ORIENTED_EDGE ( 'NONE', *, *, #53, .T. ) ; +#6063 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063071265, -1.000000000000000000, -21.43027221245083425 ) ) ; +#6064 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6065 = FACE_OUTER_BOUND ( 'NONE', #2038, .T. ) ; +#6066 = EDGE_CURVE ( 'NONE', #1903, #6881, #2951, .T. ) ; +#6067 = ORIENTED_EDGE ( 'NONE', *, *, #3445, .F. ) ; +#6068 = ORIENTED_EDGE ( 'NONE', *, *, #300, .F. ) ; +#6069 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, -1.000000000000000000, -52.83725382063398968 ) ) ; +#6070 = VERTEX_POINT ( 'NONE', #4339 ) ; +#6071 = DIRECTION ( 'NONE', ( 8.659560562354744271E-17, -0.7071067811865627828, 0.7071067811865322517 ) ) ; +#6072 = VECTOR ( 'NONE', #3694, 1000.000000000000000 ) ; +#6073 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6074 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6075 = ORIENTED_EDGE ( 'NONE', *, *, #4281, .T. ) ; +#6076 = LINE ( 'NONE', #743, #4327 ) ; +#6077 = EDGE_CURVE ( 'NONE', #265, #5397, #2632, .T. ) ; +#6078 = CARTESIAN_POINT ( 'NONE', ( 20.70457056468754686, -5.899999999999999467, 34.86578921711026879 ) ) ; +#6079 = CYLINDRICAL_SURFACE ( 'NONE', #2090, 4.299999999999998046 ) ; +#6080 = CYLINDRICAL_SURFACE ( 'NONE', #5833, 5.999999999999998224 ) ; +#6081 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, -1.000000000000000000, 51.73725382063020817 ) ) ; +#6082 = ORIENTED_EDGE ( 'NONE', *, *, #4936, .T. ) ; +#6083 = VERTEX_POINT ( 'NONE', #6462 ) ; +#6084 = ORIENTED_EDGE ( 'NONE', *, *, #4226, .T. ) ; +#6085 = VERTEX_POINT ( 'NONE', #1711 ) ; +#6086 = CARTESIAN_POINT ( 'NONE', ( -10.01349373899360451, -6.700000000000000178, 39.29417823468541116 ) ) ; +#6087 = CYLINDRICAL_SURFACE ( 'NONE', #4717, 1.500000000000001332 ) ; +#6088 = CYLINDRICAL_SURFACE ( 'NONE', #855, 6.000000000002864375 ) ; +#6089 = AXIS2_PLACEMENT_3D ( 'NONE', #5995, #1016, #4271 ) ; +#6090 = CARTESIAN_POINT ( 'NONE', ( -31.73239677215492804, -5.899999999999999467, 13.14398910963711486 ) ) ; +#6091 = EDGE_CURVE ( 'NONE', #1842, #1770, #1678, .T. ) ; +#6092 = ORIENTED_EDGE ( 'NONE', *, *, #5193, .T. ) ; +#6093 = ORIENTED_EDGE ( 'NONE', *, *, #5143, .F. ) ; +#6094 = CARTESIAN_POINT ( 'NONE', ( 48.50000000000026290, -3.000000000000000000, 47.49999999999972289 ) ) ; +#6095 = CIRCLE ( 'NONE', #4191, 5.025000000000002132 ) ; +#6096 = CARTESIAN_POINT ( 'NONE', ( -55.89471171693052298, -6.700000000000000178, 23.15234765809339379 ) ) ; +#6097 = LINE ( 'NONE', #260, #5859 ) ; +#6098 = ORIENTED_EDGE ( 'NONE', *, *, #3625, .T. ) ; +#6099 = EDGE_LOOP ( 'NONE', ( #3008, #6329, #173, #6000, #1394, #831 ) ) ; +#6100 = FACE_OUTER_BOUND ( 'NONE', #4813, .T. ) ; +#6101 = VERTEX_POINT ( 'NONE', #3770 ) ; +#6102 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#6103 = LINE ( 'NONE', #4495, #6964 ) ; +#6104 = AXIS2_PLACEMENT_3D ( 'NONE', #2095, #5889, #3225 ) ; +#6105 = ORIENTED_EDGE ( 'NONE', *, *, #4771, .T. ) ; +#6106 = CARTESIAN_POINT ( 'NONE', ( -41.45819837980560862, -6.700000000000000178, -46.10008445871534377 ) ) ; +#6107 = ORIENTED_EDGE ( 'NONE', *, *, #3152, .T. ) ; +#6108 = EDGE_CURVE ( 'NONE', #6083, #3850, #2618, .T. ) ; +#6109 = FACE_BOUND ( 'NONE', #3496, .T. ) ; +#6110 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6111 = CARTESIAN_POINT ( 'NONE', ( -25.78180162019543786, -8.000000000000000000, -60.50000000000001421 ) ) ; +#6112 = EDGE_CURVE ( 'NONE', #1995, #2230, #6574, .T. ) ; +#6113 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6114 = EDGE_CURVE ( 'NONE', #827, #5605, #470, .T. ) ; +#6115 = FACE_OUTER_BOUND ( 'NONE', #3027, .T. ) ; +#6116 = ORIENTED_EDGE ( 'NONE', *, *, #5266, .F. ) ; +#6117 = AXIS2_PLACEMENT_3D ( 'NONE', #4775, #1549, #2958 ) ; +#6118 = VERTEX_POINT ( 'NONE', #2201 ) ; +#6119 = ORIENTED_EDGE ( 'NONE', *, *, #4453, .T. ) ; +#6120 = ORIENTED_EDGE ( 'NONE', *, *, #3664, .T. ) ; +#6121 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6122 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6123 = PLANE ( 'NONE', #1422 ) ; +#6124 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#6125 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6126 = VERTEX_POINT ( 'NONE', #4378 ) ; +#6127 = ORIENTED_EDGE ( 'NONE', *, *, #862, .T. ) ; +#6128 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063502565, -1.000000000000000000, -21.43027221244042124 ) ) ; +#6129 = EDGE_CURVE ( 'NONE', #2950, #5868, #2271, .T. ) ; +#6130 = FACE_OUTER_BOUND ( 'NONE', #4885, .T. ) ; +#6131 = LINE ( 'NONE', #6208, #1565 ) ; +#6132 = ORIENTED_EDGE ( 'NONE', *, *, #3261, .F. ) ; +#6133 = VERTEX_POINT ( 'NONE', #2674 ) ; +#6134 = ORIENTED_EDGE ( 'NONE', *, *, #2697, .F. ) ; +#6135 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, 0.000000000000000000, 51.73725382063020817 ) ) ; +#6136 = ORIENTED_EDGE ( 'NONE', *, *, #1748, .T. ) ; +#6137 = CARTESIAN_POINT ( 'NONE', ( 39.29417823468470061, -5.899999999999999467, -10.01349373899637385 ) ) ; +#6138 = AXIS2_PLACEMENT_3D ( 'NONE', #3723, #6950, #3149 ) ; +#6139 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6140 = CIRCLE ( 'NONE', #4455, 5.025000000000002132 ) ; +#6141 = ORIENTED_EDGE ( 'NONE', *, *, #5969, .F. ) ; +#6142 = VECTOR ( 'NONE', #993, 1000.000000000000000 ) ; +#6143 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6144 = ORIENTED_EDGE ( 'NONE', *, *, #3055, .T. ) ; +#6145 = PERSON_AND_ORGANIZATION ( #2507, #6702 ) ; +#6146 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6147 = AXIS2_PLACEMENT_3D ( 'NONE', #2435, #6770, #6807 ) ; +#6148 = CARTESIAN_POINT ( 'NONE', ( 4.299999999999729816, -2.200000000000000622, -57.00000000000000000 ) ) ; +#6149 = CIRCLE ( 'NONE', #278, 1.100000000000017630 ) ; +#6150 = EDGE_CURVE ( 'NONE', #2276, #3879, #5930, .T. ) ; +#6151 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, 0.000000000000000000, 51.13725382063020675 ) ) ; +#6152 = CIRCLE ( 'NONE', #1975, 1.500000000000001332 ) ; +#6153 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6154 = EDGE_LOOP ( 'NONE', ( #2093, #2932, #4268, #5219 ) ) ; +#6155 = VECTOR ( 'NONE', #3627, 1000.000000000000000 ) ; +#6156 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6157 = VERTEX_POINT ( 'NONE', #1652 ) ; +#6158 = ORIENTED_EDGE ( 'NONE', *, *, #2708, .F. ) ; +#6159 = ORIENTED_EDGE ( 'NONE', *, *, #252, .T. ) ; +#6160 = CARTESIAN_POINT ( 'NONE', ( 52.69999999572387139, -8.000000000000000000, 63.49999999999969447 ) ) ; +#6161 = CARTESIAN_POINT ( 'NONE', ( -34.86578921711034695, -6.700000000000000178, 20.70457056468741541 ) ) ; +#6162 = B_SPLINE_SURFACE_WITH_KNOTS ( 'NONE', 4, 1, ( + ( #5188, #3650 ), + ( #1395, #6885 ), + ( #4159, #5680 ), + ( #832, #4048 ), + ( #868, #1497 ) ), + .UNSPECIFIED., .F., .F., .F., + ( 5, 5 ), + ( 2, 2 ), + ( 0.000000000000000000, 1.000000000000000000 ), + ( 0.000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#6163 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6164 = CIRCLE ( 'NONE', #3450, 5.025000000000002132 ) ; +#6165 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6166 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000026290, 0.000000000000000000, 33.49999999999970868 ) ) ; +#6167 = ORIENTED_EDGE ( 'NONE', *, *, #6112, .T. ) ; +#6168 = VECTOR ( 'NONE', #1807, 1000.000000000000000 ) ; +#6169 = VERTEX_POINT ( 'NONE', #5408 ) ; +#6170 = CARTESIAN_POINT ( 'NONE', ( -21.43027221245029068, -1.000000000000000000, -51.73725382063096134 ) ) ; +#6171 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6172 = ADVANCED_FACE ( 'NONE', ( #550 ), #4876, .T. ) ; +#6173 = CARTESIAN_POINT ( 'NONE', ( 30.01032132651300799, -2.200000000000000622, 17.30144700593542595 ) ) ; +#6174 = AXIS2_PLACEMENT_3D ( 'NONE', #6545, #4422, #6579 ) ; +#6175 = VERTEX_POINT ( 'NONE', #686 ) ; +#6176 = ORIENTED_EDGE ( 'NONE', *, *, #6520, .F. ) ; +#6177 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -5.500000000000000000, -1.500000000000004219 ) ) ; +#6178 = VERTEX_POINT ( 'NONE', #2410 ) ; +#6179 = VECTOR ( 'NONE', #3981, 1000.000000000000000 ) ; +#6180 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6181 = EDGE_CURVE ( 'NONE', #1896, #3472, #347, .T. ) ; +#6182 = EDGE_LOOP ( 'NONE', ( #7022, #2523, #5901, #6639 ) ) ; +#6183 = LINE ( 'NONE', #3993, #4888 ) ; +#6184 = VERTEX_POINT ( 'NONE', #5577 ) ; +#6185 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6186 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.200000000000000622, 0.000000000000000000 ) ) ; +#6187 = VECTOR ( 'NONE', #6925, 1000.000000000000000 ) ; +#6188 = PLANE ( 'NONE', #5380 ) ; +#6189 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6190 = CARTESIAN_POINT ( 'NONE', ( 5.799999999999728928, -5.500000000000000000, -58.50000000000039790 ) ) ; +#6191 = ORIENTED_EDGE ( 'NONE', *, *, #2962, .T. ) ; +#6192 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6193 = VERTEX_POINT ( 'NONE', #2837 ) ; +#6194 = ORIENTED_EDGE ( 'NONE', *, *, #2220, .T. ) ; +#6195 = EDGE_LOOP ( 'NONE', ( #882, #2673, #4094, #3045 ) ) ; +#6196 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6197 = EDGE_CURVE ( 'NONE', #675, #98, #5083, .T. ) ; +#6198 = CARTESIAN_POINT ( 'NONE', ( -2.086137553520610372E-12, -5.500000000000000000, 57.94976107412009725 ) ) ; +#6199 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6200 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6201 = AXIS2_PLACEMENT_3D ( 'NONE', #1409, #1934, #4103 ) ; +#6202 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6203 = VERTEX_POINT ( 'NONE', #4595 ) ; +#6204 = ORIENTED_EDGE ( 'NONE', *, *, #1471, .F. ) ; +#6205 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#6206 = LINE ( 'NONE', #404, #4403 ) ; +#6207 = EDGE_CURVE ( 'NONE', #235, #571, #6595, .T. ) ; +#6208 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000026290, -8.000000000000000000, -33.49999999999970868 ) ) ; +#6209 = VECTOR ( 'NONE', #3124, 1000.000000000000000 ) ; +#6210 = EDGE_CURVE ( 'NONE', #1224, #6424, #1251, .T. ) ; +#6211 = EDGE_CURVE ( 'NONE', #1587, #6378, #1332, .T. ) ; +#6212 = EDGE_CURVE ( 'NONE', #2639, #1407, #3634, .T. ) ; +#6213 = AXIS2_PLACEMENT_3D ( 'NONE', #1080, #35, #575 ) ; +#6214 = ORIENTED_EDGE ( 'NONE', *, *, #4843, .F. ) ; +#6215 = ORIENTED_EDGE ( 'NONE', *, *, #6618, .T. ) ; +#6216 = CARTESIAN_POINT ( 'NONE', ( 13.14398910963723033, -2.200000000000000622, 31.73239677215487831 ) ) ; +#6217 = ORIENTED_EDGE ( 'NONE', *, *, #2999, .F. ) ; +#6218 = AXIS2_PLACEMENT_3D ( 'NONE', #5352, #4286, #4728 ) ; +#6219 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -8.000000000000000000, -62.00000000000002132 ) ) ; +#6220 = ORIENTED_EDGE ( 'NONE', *, *, #3174, .T. ) ; +#6221 = CARTESIAN_POINT ( 'NONE', ( -1.722075445643978187, -2.200000000000000622, -4.157457896303463407 ) ) ; +#6222 = ORIENTED_EDGE ( 'NONE', *, *, #6037, .T. ) ; +#6223 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244223668, -1.000000000000000000, -52.33725382063752818 ) ) ; +#6224 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6225 = EDGE_CURVE ( 'NONE', #2603, #6030, #2714, .T. ) ; +#6226 = FACE_BOUND ( 'NONE', #1952, .T. ) ; +#6227 = AXIS2_PLACEMENT_3D ( 'NONE', #6860, #299, #2453 ) ; +#6228 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6229 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, -1.000000000000000000, 21.43027221243706038 ) ) ; +#6230 = ORIENTED_EDGE ( 'NONE', *, *, #4226, .F. ) ; +#6231 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6232 = EDGE_LOOP ( 'NONE', ( #2239, #5298, #6712, #2207, #3429, #2769 ) ) ; +#6233 = ORIENTED_EDGE ( 'NONE', *, *, #1118, .F. ) ; +#6234 = ORIENTED_EDGE ( 'NONE', *, *, #1423, .T. ) ; +#6235 = VECTOR ( 'NONE', #3290, 1000.000000000000000 ) ; +#6236 = CYLINDRICAL_SURFACE ( 'NONE', #4423, 1.499999999999994449 ) ; +#6237 = FACE_OUTER_BOUND ( 'NONE', #5775, .T. ) ; +#6238 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6239 = PLANE ( 'NONE', #5376 ) ; +#6240 = AXIS2_PLACEMENT_3D ( 'NONE', #2104, #5370, #3266 ) ; +#6241 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.800000000000000488, 24.46370172317529068 ) ) ; +#6242 = ORIENTED_EDGE ( 'NONE', *, *, #784, .T. ) ; +#6243 = EDGE_LOOP ( 'NONE', ( #2064, #3163, #5660, #3819 ) ) ; +#6244 = LINE ( 'NONE', #3598, #6915 ) ; +#6245 = CARTESIAN_POINT ( 'NONE', ( 53.45932926627801862, -2.200000000000000622, 17.27281431613950957 ) ) ; +#6246 = CARTESIAN_POINT ( 'NONE', ( 48.50000000000026290, -8.000000000000000000, 42.47499999999972431 ) ) ; +#6247 = EDGE_CURVE ( 'NONE', #726, #6881, #3909, .T. ) ; +#6248 = ORIENTED_EDGE ( 'NONE', *, *, #5860, .F. ) ; +#6249 = VERTEX_POINT ( 'NONE', #2303 ) ; +#6250 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6251 = ORIENTED_EDGE ( 'NONE', *, *, #5009, .T. ) ; +#6252 = EDGE_CURVE ( 'NONE', #5062, #1041, #6634, .T. ) ; +#6253 = EDGE_CURVE ( 'NONE', #4101, #2173, #5654, .T. ) ; +#6254 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -6.700000000000000178, 6.000000000000001776 ) ) ; +#6255 = EDGE_LOOP ( 'NONE', ( #1279, #4517, #3983, #6989, #2841, #6859, #4619, #5739, #5170, #6194, #5343, #4405 ) ) ; +#6256 = CARTESIAN_POINT ( 'NONE', ( 40.17369852021909793, -6.700000000000000178, -11.76972587644380752 ) ) ; +#6257 = VERTEX_POINT ( 'NONE', #3404 ) ; +#6258 = VECTOR ( 'NONE', #4329, 999.9999999999998863 ) ; +#6259 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245089109, -1.000000000000000000, 50.63725382062666824 ) ) ; +#6260 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#6261 = EDGE_CURVE ( 'NONE', #5081, #2356, #2945, .T. ) ; +#6262 = CIRCLE ( 'NONE', #5588, 1.500000000000084599 ) ; +#6263 = CARTESIAN_POINT ( 'NONE', ( 13.14398910963723033, -5.899999999999999467, 31.73239677215487831 ) ) ; +#6264 = AXIS2_PLACEMENT_3D ( 'NONE', #1131, #5417, #561 ) ; +#6265 = FACE_OUTER_BOUND ( 'NONE', #4943, .T. ) ; +#6266 = ADVANCED_FACE ( 'NONE', ( #5123 ), #6708, .F. ) ; +#6267 = ORIENTED_EDGE ( 'NONE', *, *, #2114, .T. ) ; +#6268 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.800000000000000488, -25.96370172317620018 ) ) ; +#6269 = EDGE_LOOP ( 'NONE', ( #2068, #2188, #6084, #2893 ) ) ; +#6270 = ORIENTED_EDGE ( 'NONE', *, *, #237, .F. ) ; +#6271 = ORIENTED_EDGE ( 'NONE', *, *, #757, .T. ) ; +#6272 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -2.400000000000000355, 0.000000000000000000 ) ) ; +#6273 = AXIS2_PLACEMENT_3D ( 'NONE', #894, #3005, #5181 ) ; +#6274 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.299999999999999822, -25.30000000000000071 ) ) ; +#6275 = AXIS2_PLACEMENT_3D ( 'NONE', #4319, #628, #1198 ) ; +#6276 = LINE ( 'NONE', #5323, #5162 ) ; +#6277 = CIRCLE ( 'NONE', #2543, 1.500000000000001332 ) ; +#6278 = FACE_BOUND ( 'NONE', #1289, .T. ) ; +#6279 = CIRCLE ( 'NONE', #5602, 1.500000000000001332 ) ; +#6280 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#6281 = CIRCLE ( 'NONE', #3217, 0.5999999999999998668 ) ; +#6282 = ORIENTED_EDGE ( 'NONE', *, *, #1624, .T. ) ; +#6283 = ORIENTED_EDGE ( 'NONE', *, *, #1591, .F. ) ; +#6284 = ADVANCED_FACE ( 'NONE', ( #1778, #5541 ), #110, .F. ) ; +#6285 = FACE_OUTER_BOUND ( 'NONE', #5196, .T. ) ; +#6286 = AXIS2_PLACEMENT_3D ( 'NONE', #1908, #6768, #4079 ) ; +#6287 = AXIS2_PLACEMENT_3D ( 'NONE', #482, #5941, #1523 ) ; +#6288 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244024005, -1.000000000000000000, 51.73725382063510381 ) ) ; +#6289 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6290 = AXIS2_PLACEMENT_3D ( 'NONE', #250, #4121, #6815 ) ; +#6291 = VERTEX_POINT ( 'NONE', #2268 ) ; +#6292 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6293 = ORIENTED_EDGE ( 'NONE', *, *, #2576, .F. ) ; +#6294 = AXIS2_PLACEMENT_3D ( 'NONE', #3591, #1359, #869 ) ; +#6295 = EDGE_CURVE ( 'NONE', #3908, #2205, #3854, .T. ) ; +#6296 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#6297 = CIRCLE ( 'NONE', #149, 4.500000000000232703 ) ; +#6298 = ORIENTED_EDGE ( 'NONE', *, *, #137, .F. ) ; +#6299 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244847169, -2.200000000000000622, -51.73725382063096134 ) ) ; +#6300 = FACE_OUTER_BOUND ( 'NONE', #1006, .T. ) ; +#6301 = ADVANCED_FACE ( 'NONE', ( #186 ), #1220, .F. ) ; +#6302 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -6.700000000000000178, 0.000000000000000000 ) ) ; +#6303 = ADVANCED_FACE ( 'NONE', ( #1815 ), #1290, .F. ) ; +#6304 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#6305 = ADVANCED_FACE ( 'NONE', ( #3020 ), #1367, .F. ) ; +#6306 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#6307 = EDGE_CURVE ( 'NONE', #1407, #2639, #4981, .T. ) ; +#6308 = VERTEX_POINT ( 'NONE', #3631 ) ; +#6309 = ORIENTED_EDGE ( 'NONE', *, *, #4573, .T. ) ; +#6310 = CLOSED_SHELL ( 'NONE', ( #4674, #229, #2103, #722, #1342, #3390, #4512, #5514, #551, #6501, #5309, #3636, #4882, #1413, #4539, #5010, #3039, #139, #1930, #1510, #6403, #317, #5519, #6743, #4026, #1331, #5406, #5054, #2004, #1708, #5664, #3210, #3697, #6831, #6303, #294, #1773, #2089, #687, #2270, #2571, #5796, #2056, #5614, #1781, #1216, #6322, #4177, #2532, #6266, #5321, #5306, #449, #4670, #4065, #16, #1072, #2217, #535, #4494, #3918, #6784, #4855, #1705, #4834, #5258, #3616, #3953, #3524, #3389, #7003, #2236, #3839, #5038, #1508, #6343, #5761, #1196, #6744, #6305, #4349, #5165, #5052, #978, #2670, #3277, #1944, #3031, #1228, #6301, #3193, #6904, #3067, #586, #4170, #2664, #5272, #3848, #2198, #5230, #4881, #509, #3921, #647, #1267, #6284, #2447, #3059, #5682, #6873, #4058, #2396, #498, #3105, #453, #6759, #6559, #369, #1192, #5394, #4333, #1559, #55, #708, #1712, #1978, #6567, #451, #4922, #2262, #3827, #4205, #5223, #6958, #985, #2682, #2866, #4616, #5069, #1929, #2832, #781, #5094, #1241, #4414, #5653, #485, #4354, #4756, #196, #6470, #3542, #4686, #3758, #6796, #1462, #3622, #2459, #3877, #4523, #2059, #4675, #4707, #3338, #1416, #6646, #4673, #984, #6, #3582, #997, #5772, #6828, #1949, #388, #5618, #3016, #3426, #118, #3483, #1518, #5182, #1275, #5806, #336, #3931, #670, #2069, #4228, #1018, #1675, #1092, #903, #2643, #584, #5704, #6731, #1661, #2016, #4122, #812, #1440, #2701, #4142, #430, #3778, #2524, #3267, #6932, #4540, #3422, #6172, #4644, #494, #5990, #1115, #5526, #3238, #5474, #371, #6431, #2677, #4875 ) ) ; +#6311 = FACE_OUTER_BOUND ( 'NONE', #4790, .T. ) ; +#6312 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -5.500000000000000000, 36.73402833653069166 ) ) ; +#6313 = LINE ( 'NONE', #4219, #5154 ) ; +#6314 = VECTOR ( 'NONE', #1611, 1000.000000000000000 ) ; +#6315 = CYLINDRICAL_SURFACE ( 'NONE', #6609, 4.500000000000003553 ) ; +#6316 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -5.500000000000000000, 6.000000000000001776 ) ) ; +#6317 = ORIENTED_EDGE ( 'NONE', *, *, #2372, .F. ) ; +#6318 = ORIENTED_EDGE ( 'NONE', *, *, #4193, .T. ) ; +#6319 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6320 = DIRECTION ( 'NONE', ( 1.324168091886726789E-16, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6321 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.800000000000000488, -24.46370172317620018 ) ) ; +#6322 = ADVANCED_FACE ( 'NONE', ( #910 ), #1507, .F. ) ; +#6323 = ORIENTED_EDGE ( 'NONE', *, *, #895, .F. ) ; +#6324 = CIRCLE ( 'NONE', #208, 1.500000000002881029 ) ; +#6325 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6326 = VERTEX_POINT ( 'NONE', #877 ) ; +#6327 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, 0.000000000000000000, -21.43027221244439673 ) ) ; +#6328 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 4, + ( #3104, #2681, #5871, #5840, #1057 ), + .UNSPECIFIED., .F., .F., + ( 5, 5 ), + ( 0.000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#6329 = ORIENTED_EDGE ( 'NONE', *, *, #1232, .T. ) ; +#6330 = CARTESIAN_POINT ( 'NONE', ( -34.92266447387282113, -3.200000000000000622, -35.53553390593242511 ) ) ; +#6331 = VECTOR ( 'NONE', #350, 1000.000000000000114 ) ; +#6332 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980434386, -6.700000000000000178, -30.50000000000000355 ) ) ; +#6333 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6334 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6335 = EDGE_CURVE ( 'NONE', #2051, #2321, #3736, .T. ) ; +#6336 = FACE_OUTER_BOUND ( 'NONE', #1699, .T. ) ; +#6337 = ORIENTED_EDGE ( 'NONE', *, *, #2049, .T. ) ; +#6338 = VERTEX_POINT ( 'NONE', #3123 ) ; +#6339 = PLANE ( 'NONE', #3506 ) ; +#6340 = FACE_OUTER_BOUND ( 'NONE', #1318, .T. ) ; +#6341 = CARTESIAN_POINT ( 'NONE', ( -28.93000000000074579, 0.000000000000000000, -56.49999999999972289 ) ) ; +#6342 = AXIS2_PLACEMENT_3D ( 'NONE', #32, #5921, #1114 ) ; +#6343 = ADVANCED_FACE ( 'NONE', ( #6893 ), #2491, .F. ) ; +#6344 = CYLINDRICAL_SURFACE ( 'NONE', #5264, 1.500000000000001332 ) ; +#6345 = EDGE_CURVE ( 'NONE', #6101, #1760, #5730, .T. ) ; +#6346 = EDGE_CURVE ( 'NONE', #2407, #1021, #6799, .T. ) ; +#6347 = CARTESIAN_POINT ( 'NONE', ( -10.38390657767399894, -5.899999999999999467, 40.74772366876744201 ) ) ; +#6348 = LINE ( 'NONE', #3222, #5364 ) ; +#6349 = AXIS2_PLACEMENT_3D ( 'NONE', #24, #1631, #490 ) ; +#6350 = ORIENTED_EDGE ( 'NONE', *, *, #904, .T. ) ; +#6351 = ORIENTED_EDGE ( 'NONE', *, *, #587, .T. ) ; +#6352 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -5.500000000000000000, 51.94976107412009725 ) ) ; +#6353 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000027711, 0.000000000000000000, -52.69999999572329585 ) ) ; +#6354 = LINE ( 'NONE', #1010, #6072 ) ; +#6355 = AXIS2_PLACEMENT_3D ( 'NONE', #2924, #3128, #234 ) ; +#6356 = CC_DESIGN_APPROVAL ( #5952, ( #1153 ) ) ; +#6357 = EDGE_LOOP ( 'NONE', ( #1515, #6120, #4144, #2842, #5895, #1889 ) ) ; +#6358 = EDGE_CURVE ( 'NONE', #6922, #5936, #4768, .T. ) ; +#6359 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#6360 = ORIENTED_EDGE ( 'NONE', *, *, #5517, .F. ) ; +#6361 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6362 = ORIENTED_EDGE ( 'NONE', *, *, #3057, .F. ) ; +#6363 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#6364 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6365 = LINE ( 'NONE', #1524, #4346 ) ; +#6366 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6367 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6368 = EDGE_LOOP ( 'NONE', ( #2570, #2858, #5121, #2426 ) ) ; +#6369 = DIRECTION ( 'NONE', ( -0.7071067811865536790, 0.000000000000000000, -0.7071067811865413555 ) ) ; +#6370 = CARTESIAN_POINT ( 'NONE', ( -10.38390657767399894, -5.899999999999999467, 39.24772366876744201 ) ) ; +#6371 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6372 = VECTOR ( 'NONE', #5973, 1000.000000000000000 ) ; +#6373 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6374 = EDGE_CURVE ( 'NONE', #2005, #4799, #1812, .T. ) ; +#6375 = AXIS2_PLACEMENT_3D ( 'NONE', #364, #4554, #1888 ) ; +#6376 = FACE_OUTER_BOUND ( 'NONE', #1126, .T. ) ; +#6377 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000026290, 0.000000000000000000, -5.551115123125782702E-14 ) ) ; +#6378 = VERTEX_POINT ( 'NONE', #334 ) ; +#6379 = AXIS2_PLACEMENT_3D ( 'NONE', #3139, #6843, #6304 ) ; +#6380 = ORIENTED_EDGE ( 'NONE', *, *, #2869, .F. ) ; +#6381 = CARTESIAN_POINT ( 'NONE', ( -33.45447221780123215, -2.200000000000000622, 8.986531213328042611 ) ) ; +#6382 = AXIS2_PLACEMENT_3D ( 'NONE', #6039, #1100, #5972 ) ; +#6383 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6384 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6385 = CIRCLE ( 'NONE', #5031, 4.500000000000010658 ) ; +#6386 = AXIS2_PLACEMENT_3D ( 'NONE', #3415, #6073, #1789 ) ; +#6387 = AXIS2_PLACEMENT_3D ( 'NONE', #4010, #1736, #6199 ) ; +#6388 = ORIENTED_EDGE ( 'NONE', *, *, #881, .F. ) ; +#6389 = ORIENTED_EDGE ( 'NONE', *, *, #4576, .F. ) ; +#6390 = EDGE_CURVE ( 'NONE', #4086, #6338, #2527, .T. ) ; +#6391 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#6392 = CIRCLE ( 'NONE', #1535, 4.500000000000232703 ) ; +#6393 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#6394 = ORIENTED_EDGE ( 'NONE', *, *, #2311, .T. ) ; +#6395 = AXIS2_PLACEMENT_3D ( 'NONE', #1609, #5432, #1009 ) ; +#6396 = CARTESIAN_POINT ( 'NONE', ( -1.722075445645237179, -6.700000000000000178, 4.157457896306324230 ) ) ; +#6397 = EDGE_LOOP ( 'NONE', ( #488, #6697 ) ) ; +#6398 = AXIS2_PLACEMENT_3D ( 'NONE', #4189, #2555, #2481 ) ; +#6399 = VERTEX_POINT ( 'NONE', #5161 ) ; +#6400 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#6401 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6402 = CIRCLE ( 'NONE', #4024, 1.500000000000001332 ) ; +#6403 = ADVANCED_FACE ( 'NONE', ( #6285 ), #1486, .F. ) ; +#6404 = DIRECTION ( 'NONE', ( 0.3826834323650943337, 0.000000000000000000, -0.9238795325112847401 ) ) ; +#6405 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#6406 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063502565, -1.000000000000000000, -16.93027221244040703 ) ) ; +#6407 = ORIENTED_EDGE ( 'NONE', *, *, #4437, .T. ) ; +#6408 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6409 = FACE_OUTER_BOUND ( 'NONE', #6232, .T. ) ; +#6410 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6411 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6412 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6413 = LINE ( 'NONE', #6377, #1735 ) ; +#6414 = AXIS2_PLACEMENT_3D ( 'NONE', #5373, #44, #519 ) ; +#6415 = ORIENTED_EDGE ( 'NONE', *, *, #2976, .F. ) ; +#6416 = ORIENTED_EDGE ( 'NONE', *, *, #4303, .F. ) ; +#6417 = DIRECTION ( 'NONE', ( -0.9238795325112848511, 0.000000000000000000, -0.3826834323650943892 ) ) ; +#6418 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6419 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244024005, -1.000000000000000000, 56.23725382063511802 ) ) ; +#6420 = AXIS2_PLACEMENT_3D ( 'NONE', #6558, #2730, #4934 ) ; +#6421 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6422 = AXIS2_PLACEMENT_3D ( 'NONE', #6321, #468, #3125 ) ; +#6423 = EDGE_LOOP ( 'NONE', ( #108, #5894, #1170, #4727 ) ) ; +#6424 = VERTEX_POINT ( 'NONE', #4633 ) ; +#6425 = EDGE_CURVE ( 'NONE', #842, #7021, #5441, .T. ) ; +#6426 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#6427 = CARTESIAN_POINT ( 'NONE', ( 25.58773010875156828, -6.700000000000000178, 50.01517837498778363 ) ) ; +#6428 = EDGE_LOOP ( 'NONE', ( #3236, #589, #5546, #96 ) ) ; +#6429 = EDGE_CURVE ( 'NONE', #2040, #2935, #6244, .T. ) ; +#6430 = EDGE_CURVE ( 'NONE', #1113, #4003, #5795, .T. ) ; +#6431 = ADVANCED_FACE ( 'NONE', ( #1476 ), #3084, .F. ) ; +#6432 = FACE_BOUND ( 'NONE', #4609, .T. ) ; +#6433 = AXIS2_PLACEMENT_3D ( 'NONE', #2952, #1225, #5582 ) ; +#6434 = ORIENTED_EDGE ( 'NONE', *, *, #768, .T. ) ; +#6435 = ORIENTED_EDGE ( 'NONE', *, *, #6711, .T. ) ; +#6436 = CARTESIAN_POINT ( 'NONE', ( 39.95819837980705103, -2.200000000000000622, -56.99999999999999289 ) ) ; +#6437 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6438 = VECTOR ( 'NONE', #6171, 1000.000000000000000 ) ; +#6439 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ; +#6440 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, 0.000000000000000000, -21.43027221244439673 ) ) ; +#6441 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, -1.000000000000000000, 21.43027221244568992 ) ) ; +#6442 = VECTOR ( 'NONE', #315, 1000.000000000000000 ) ; +#6443 = VERTEX_POINT ( 'NONE', #5824 ) ; +#6444 = EDGE_CURVE ( 'NONE', #2205, #1882, #972, .T. ) ; +#6445 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063071265, -1.000000000000000000, -21.43027221245083425 ) ) ; +#6446 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6447 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -2.400000000000000355, 38.23402833653357646 ) ) ; +#6448 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6449 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6450 = EDGE_CURVE ( 'NONE', #787, #1596, #4900, .T. ) ; +#6451 = CARTESIAN_POINT ( 'NONE', ( -17.27281431613930351, -6.700000000000000178, 53.45932926627803283 ) ) ; +#6452 = EDGE_LOOP ( 'NONE', ( #971, #6098, #5413, #3018 ) ) ; +#6453 = ORIENTED_EDGE ( 'NONE', *, *, #4460, .T. ) ; +#6454 = VECTOR ( 'NONE', #4168, 1000.000000000000000 ) ; +#6455 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6456 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6457 = FACE_OUTER_BOUND ( 'NONE', #3112, .T. ) ; +#6458 = CYLINDRICAL_SURFACE ( 'NONE', #3352, 4.500000000000010658 ) ; +#6459 = CIRCLE ( 'NONE', #1040, 0.6000000000000033085 ) ; +#6460 = ORIENTED_EDGE ( 'NONE', *, *, #5745, .T. ) ; +#6461 = ORIENTED_EDGE ( 'NONE', *, *, #2742, .T. ) ; +#6462 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, -1.000000000000000000, -20.33027221244440597 ) ) ; +#6463 = CARTESIAN_POINT ( 'NONE', ( -34.92266447387282113, -3.200000000000000622, -37.03553390593243222 ) ) ; +#6464 = CIRCLE ( 'NONE', #5557, 1.500000000002881029 ) ; +#6465 = VERTEX_POINT ( 'NONE', #2191 ) ; +#6466 = EDGE_CURVE ( 'NONE', #2375, #1669, #4370, .T. ) ; +#6467 = AXIS2_PLACEMENT_3D ( 'NONE', #1904, #6143, #5743 ) ; +#6468 = ORIENTED_EDGE ( 'NONE', *, *, #2939, .T. ) ; +#6469 = ORIENTED_EDGE ( 'NONE', *, *, #5130, .F. ) ; +#6470 = ADVANCED_FACE ( 'NONE', ( #5958 ), #3153, .F. ) ; +#6471 = VERTEX_POINT ( 'NONE', #3257 ) ; +#6472 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.000000000000000000, 0.000000000000000000 ) ) ; +#6473 = CARTESIAN_POINT ( 'NONE', ( 4.157457896306343770, -6.700000000000000178, -1.722075445645189218 ) ) ; +#6474 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6475 = FACE_OUTER_BOUND ( 'NONE', #2365, .T. ) ; +#6476 = ORIENTED_EDGE ( 'NONE', *, *, #2018, .F. ) ; +#6477 = PLANE ( 'NONE', #5893 ) ; +#6478 = EDGE_CURVE ( 'NONE', #3367, #3529, #3962, .T. ) ; +#6479 = LINE ( 'NONE', #6447, #3121 ) ; +#6480 = CARTESIAN_POINT ( 'NONE', ( 20.70457056468754686, -6.700000000000000178, 34.86578921711026879 ) ) ; +#6481 = DIRECTION ( 'NONE', ( 0.3826834323650869507, 0.000000000000000000, 0.9238795325112878487 ) ) ; +#6482 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063233980, -1.000000000000000000, -22.53027221244438394 ) ) ; +#6483 = ORIENTED_EDGE ( 'NONE', *, *, #3739, .F. ) ; +#6484 = ORIENTED_EDGE ( 'NONE', *, *, #6225, .F. ) ; +#6485 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6486 = CARTESIAN_POINT ( 'NONE', ( -5.800000000000265388, -5.500000000000000000, -58.50000000000000000 ) ) ; +#6487 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6488 = CIRCLE ( 'NONE', #1291, 1.500000000000084599 ) ; +#6489 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, -0.5000000000000092149, 51.73725382063020817 ) ) ; +#6490 = EDGE_CURVE ( 'NONE', #3529, #3916, #4839, .T. ) ; +#6491 = CIRCLE ( 'NONE', #5825, 1.500000000000001332 ) ; +#6492 = ORIENTED_EDGE ( 'NONE', *, *, #5931, .T. ) ; +#6493 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6494 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.200000000000000622, 0.000000000000000000 ) ) ; +#6495 = AXIS2_PLACEMENT_3D ( 'NONE', #4366, #3391, #6521 ) ; +#6496 = CARTESIAN_POINT ( 'NONE', ( 33.45447221780116820, -5.899999999999999467, -8.986531213328273537 ) ) ; +#6497 = AXIS2_PLACEMENT_3D ( 'NONE', #3533, #4533, #2387 ) ; +#6498 = AXIS2_PLACEMENT_3D ( 'NONE', #1989, #5721, #2482 ) ; +#6499 = AXIS2_PLACEMENT_3D ( 'NONE', #3785, #1101, #5418 ) ; +#6500 = ORIENTED_EDGE ( 'NONE', *, *, #2308, .T. ) ; +#6501 = ADVANCED_FACE ( 'NONE', ( #4800 ), #5400, .F. ) ; +#6502 = EDGE_LOOP ( 'NONE', ( #2740, #6928, #6830, #3648, #2468, #5530, #5211, #728, #3416, #5100, #4508 ) ) ; +#6503 = EDGE_CURVE ( 'NONE', #3239, #4547, #3279, .T. ) ; +#6504 = AXIS2_PLACEMENT_3D ( 'NONE', #5489, #3465, #1763 ) ; +#6505 = ORIENTED_EDGE ( 'NONE', *, *, #2142, .T. ) ; +#6506 = AXIS2_PLACEMENT_3D ( 'NONE', #2778, #6102, #4451 ) ; +#6507 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -6.700000000000000178, 45.94976107412009725 ) ) ; +#6508 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6509 = AXIS2_PLACEMENT_3D ( 'NONE', #5151, #3078, #6739 ) ; +#6510 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6511 = VERTEX_POINT ( 'NONE', #1671 ) ; +#6512 = EDGE_CURVE ( 'NONE', #2102, #2603, #5983, .T. ) ; +#6513 = FACE_OUTER_BOUND ( 'NONE', #2128, .T. ) ; +#6514 = CARTESIAN_POINT ( 'NONE', ( -24.28180162019544142, -2.200000000000000622, -60.00000000000001421 ) ) ; +#6515 = CARTESIAN_POINT ( 'NONE', ( -48.50000000000026290, -8.000000000000000000, 52.52499999999972147 ) ) ; +#6516 = CIRCLE ( 'NONE', #5498, 4.500000000000010658 ) ; +#6517 = EDGE_CURVE ( 'NONE', #3130, #6249, #3692, .T. ) ; +#6518 = CYLINDRICAL_SURFACE ( 'NONE', #3675, 4.500000000000010658 ) ; +#6519 = EDGE_CURVE ( 'NONE', #1392, #696, #3189, .T. ) ; +#6520 = EDGE_CURVE ( 'NONE', #6424, #6308, #3726, .T. ) ; +#6521 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6522 = VERTEX_POINT ( 'NONE', #5459 ) ; +#6523 = ORIENTED_EDGE ( 'NONE', *, *, #5992, .T. ) ; +#6524 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6525 = CARTESIAN_POINT ( 'NONE', ( -39.29417823468477167, -5.899999999999999467, 10.01349373899609851 ) ) ; +#6526 = CARTESIAN_POINT ( 'NONE', ( 63.50000000000027711, -8.000000000000000000, -52.69999999572329585 ) ) ; +#6527 = DIRECTION ( 'NONE', ( -0.3826834323650835090, 0.000000000000000000, -0.9238795325112894030 ) ) ; +#6528 = ORIENTED_EDGE ( 'NONE', *, *, #663, .T. ) ; +#6529 = CARTESIAN_POINT ( 'NONE', ( -2.680147770384166961E-13, -5.500000000000000000, -51.94976107412088595 ) ) ; +#6530 = EDGE_CURVE ( 'NONE', #3951, #3966, #5226, .T. ) ; +#6531 = FACE_OUTER_BOUND ( 'NONE', #5832, .T. ) ; +#6532 = AXIS2_PLACEMENT_3D ( 'NONE', #975, #6289, #879 ) ; +#6533 = CARTESIAN_POINT ( 'NONE', ( -8.986531213325546830, -2.200000000000000622, 33.45447221780232638 ) ) ; +#6534 = EDGE_CURVE ( 'NONE', #4450, #2970, #3396, .T. ) ; +#6535 = EDGE_LOOP ( 'NONE', ( #2409, #4068, #4108, #2110 ) ) ; +#6536 = EDGE_LOOP ( 'NONE', ( #298, #3468 ) ) ; +#6537 = ORIENTED_EDGE ( 'NONE', *, *, #6430, .F. ) ; +#6538 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6539 = CIRCLE ( 'NONE', #3038, 1.500000000000004219 ) ; +#6540 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6541 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6542 = ORIENTED_EDGE ( 'NONE', *, *, #3721, .F. ) ; +#6543 = CARTESIAN_POINT ( 'NONE', ( -48.50000000000026290, -8.000000000000000000, 42.47499999999972431 ) ) ; +#6544 = AXIS2_PLACEMENT_3D ( 'NONE', #5932, #2105, #4307 ) ; +#6545 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.800000000000000488, 24.46370172317529068 ) ) ; +#6546 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063071265, -1.000000000000000000, -16.93027221245082359 ) ) ; +#6547 = EDGE_CURVE ( 'NONE', #6649, #874, #5, .T. ) ; +#6548 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980431544, -2.200000000000000622, -58.50000000000000000 ) ) ; +#6549 = AXIS2_PLACEMENT_3D ( 'NONE', #1063, #3682, #5913 ) ; +#6550 = DIRECTION ( 'NONE', ( -0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6551 = ORIENTED_EDGE ( 'NONE', *, *, #4220, .F. ) ; +#6552 = ORIENTED_EDGE ( 'NONE', *, *, #2311, .F. ) ; +#6553 = CARTESIAN_POINT ( 'NONE', ( 4.157457896306330447, -5.899999999999999467, 1.722075445645222080 ) ) ; +#6554 = EDGE_CURVE ( 'NONE', #1677, #1411, #4777, .T. ) ; +#6555 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6556 = CARTESIAN_POINT ( 'NONE', ( -4.300000000000265388, -2.200000000000000622, -57.00000000000000000 ) ) ; +#6557 = EDGE_CURVE ( 'NONE', #4910, #548, #3970, .T. ) ; +#6558 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -5.500000000000000000, 0.000000000000000000 ) ) ; +#6559 = ADVANCED_FACE ( 'NONE', ( #503 ), #1008, .F. ) ; +#6560 = VECTOR ( 'NONE', #4413, 1000.000000000000000 ) ; +#6561 = CARTESIAN_POINT ( 'NONE', ( 48.50000000000026290, -3.000000000000000000, 52.52499999999972147 ) ) ; +#6562 = ORIENTED_EDGE ( 'NONE', *, *, #6962, .T. ) ; +#6563 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6564 = LINE ( 'NONE', #1051, #4524 ) ; +#6565 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6566 = AXIS2_PLACEMENT_3D ( 'NONE', #1446, #3658, #1924 ) ; +#6567 = ADVANCED_FACE ( 'NONE', ( #2162 ), #2828, .F. ) ; +#6568 = VERTEX_POINT ( 'NONE', #1280 ) ; +#6569 = VECTOR ( 'NONE', #4006, 1000.000000000000114 ) ; +#6570 = EDGE_LOOP ( 'NONE', ( #6380, #6931, #5963, #1474 ) ) ; +#6571 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#6572 = ORIENTED_EDGE ( 'NONE', *, *, #6850, .F. ) ; +#6573 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063086897, -1.000000000000000000, 16.93027221245046832 ) ) ; +#6574 = CIRCLE ( 'NONE', #3527, 0.5999999999999998668 ) ; +#6575 = FACE_OUTER_BOUND ( 'NONE', #4004, .T. ) ; +#6576 = CARTESIAN_POINT ( 'NONE', ( 3.508613079557166097E-15, -5.899999999999999467, 28.64999999999999147 ) ) ; +#6577 = ORIENTED_EDGE ( 'NONE', *, *, #1622, .F. ) ; +#6578 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6579 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6580 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6581 = FACE_OUTER_BOUND ( 'NONE', #5528, .T. ) ; +#6582 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245065661, -2.200000000000000622, 51.73725382063078371 ) ) ; +#6583 = VERTEX_POINT ( 'NONE', #6663 ) ; +#6584 = ORIENTED_EDGE ( 'NONE', *, *, #2577, .T. ) ; +#6585 = ORIENTED_EDGE ( 'NONE', *, *, #3664, .F. ) ; +#6586 = VERTEX_POINT ( 'NONE', #5035 ) ; +#6587 = DIRECTION ( 'NONE', ( 0.9238795325112835188, 0.000000000000000000, 0.3826834323650974978 ) ) ; +#6588 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6589 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.200000000000000622, 0.000000000000000000 ) ) ; +#6590 = EDGE_CURVE ( 'NONE', #5936, #5495, #5480, .T. ) ; +#6591 = LINE ( 'NONE', #6058, #281 ) ; +#6592 = FACE_OUTER_BOUND ( 'NONE', #5458, .T. ) ; +#6593 = ORIENTED_EDGE ( 'NONE', *, *, #6832, .F. ) ; +#6594 = ORIENTED_EDGE ( 'NONE', *, *, #105, .T. ) ; +#6595 = LINE ( 'NONE', #6750, #2821 ) ; +#6596 = CIRCLE ( 'NONE', #3309, 1.500000000000001332 ) ; +#6597 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.800000000000000488, 24.46370172317529068 ) ) ; +#6598 = ORIENTED_EDGE ( 'NONE', *, *, #987, .F. ) ; +#6599 = AXIS2_PLACEMENT_3D ( 'NONE', #6940, #959, #1061 ) ; +#6600 = AXIS2_PLACEMENT_3D ( 'NONE', #5821, #6919, #1603 ) ; +#6601 = EDGE_CURVE ( 'NONE', #286, #5802, #925, .T. ) ; +#6602 = ORIENTED_EDGE ( 'NONE', *, *, #5434, .T. ) ; +#6603 = AXIS2_PLACEMENT_3D ( 'NONE', #6730, #3999, #5600 ) ; +#6604 = ORIENTED_EDGE ( 'NONE', *, *, #3752, .F. ) ; +#6605 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, 0.000000000000000000, -52.33725382063397547 ) ) ; +#6606 = VECTOR ( 'NONE', #4889, 1000.000000000000000 ) ; +#6607 = ORIENTED_EDGE ( 'NONE', *, *, #5911, .T. ) ; +#6608 = FACE_OUTER_BOUND ( 'NONE', #603, .T. ) ; +#6609 = AXIS2_PLACEMENT_3D ( 'NONE', #460, #4835, #4257 ) ; +#6610 = CARTESIAN_POINT ( 'NONE', ( 40.74772366876740648, -6.700000000000000178, 10.38390657767414282 ) ) ; +#6611 = AXIS2_PLACEMENT_3D ( 'NONE', #3364, #2337, #2834 ) ; +#6612 = CIRCLE ( 'NONE', #161, 4.500000000000013323 ) ; +#6613 = CARTESIAN_POINT ( 'NONE', ( -63.50000000000027711, -8.000000000000000000, 52.69999999572329585 ) ) ; +#6614 = CIRCLE ( 'NONE', #1099, 4.500000000000003553 ) ; +#6615 = ORIENTED_EDGE ( 'NONE', *, *, #4055, .F. ) ; +#6616 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6617 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6618 = EDGE_CURVE ( 'NONE', #5132, #4709, #2937, .T. ) ; +#6619 = VECTOR ( 'NONE', #1499, 1000.000000000000000 ) ; +#6620 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6621 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245065661, -1.000000000000000000, 47.23725382063076950 ) ) ; +#6622 = EDGE_LOOP ( 'NONE', ( #5956, #6176, #2247, #1867 ) ) ; +#6623 = VERTEX_POINT ( 'NONE', #1246 ) ; +#6624 = VERTEX_POINT ( 'NONE', #3971 ) ; +#6625 = ORIENTED_EDGE ( 'NONE', *, *, #2143, .T. ) ; +#6626 = CARTESIAN_POINT ( 'NONE', ( -11.76972587644091739, -6.700000000000000178, 40.17369852021979426 ) ) ; +#6627 = CIRCLE ( 'NONE', #1444, 4.500000000000010658 ) ; +#6628 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6629 = LINE ( 'NONE', #3001, #5213 ) ; +#6630 = LINE ( 'NONE', #3363, #1304 ) ; +#6631 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6632 = VERTEX_POINT ( 'NONE', #3473 ) ; +#6633 = ORIENTED_EDGE ( 'NONE', *, *, #862, .F. ) ; +#6634 = LINE ( 'NONE', #1743, #1027 ) ; +#6635 = CARTESIAN_POINT ( 'NONE', ( 33.45447221780116820, -2.200000000000000622, -8.986531213328273537 ) ) ; +#6636 = CARTESIAN_POINT ( 'NONE', ( 48.50000000000026290, -3.000000000000000000, 47.49999999999972289 ) ) ; +#6637 = EDGE_CURVE ( 'NONE', #6640, #50, #5645, .T. ) ; +#6638 = VECTOR ( 'NONE', #4341, 1000.000000000000000 ) ; +#6639 = ORIENTED_EDGE ( 'NONE', *, *, #2213, .F. ) ; +#6640 = VERTEX_POINT ( 'NONE', #211 ) ; +#6641 = LINE ( 'NONE', #6069, #1681 ) ; +#6642 = EDGE_CURVE ( 'NONE', #5865, #6801, #3360, .T. ) ; +#6643 = ORIENTED_EDGE ( 'NONE', *, *, #57, .F. ) ; +#6644 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6645 = EDGE_CURVE ( 'NONE', #1677, #5678, #5532, .T. ) ; +#6646 = ADVANCED_FACE ( 'NONE', ( #6700 ), #793, .T. ) ; +#6647 = EDGE_CURVE ( 'NONE', #4665, #6465, #4999, .T. ) ; +#6648 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6649 = VERTEX_POINT ( 'NONE', #6086 ) ; +#6650 = FACE_OUTER_BOUND ( 'NONE', #6368, .T. ) ; +#6651 = ORIENTED_EDGE ( 'NONE', *, *, #3703, .F. ) ; +#6652 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#6653 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245065661, -2.200000000000000622, 51.73725382063078371 ) ) ; +#6654 = CARTESIAN_POINT ( 'NONE', ( -39.29417823468537563, -5.899999999999999467, -10.01349373899374307 ) ) ; +#6655 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6656 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387191874, -3.200000000000000622, -53.46446609406757489 ) ) ; +#6657 = EDGE_CURVE ( 'NONE', #3239, #5804, #68, .T. ) ; +#6658 = VERTEX_POINT ( 'NONE', #6626 ) ; +#6659 = ORIENTED_EDGE ( 'NONE', *, *, #4804, .T. ) ; +#6660 = CIRCLE ( 'NONE', #84, 4.500000000000010658 ) ; +#6661 = EDGE_LOOP ( 'NONE', ( #649, #1537 ) ) ; +#6662 = VERTEX_POINT ( 'NONE', #3867 ) ; +#6663 = CARTESIAN_POINT ( 'NONE', ( -36.72954762893090219, -6.700000000000000178, -20.08464166905100612 ) ) ; +#6664 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063071265, -6.700000000000000178, -21.43027221245083425 ) ) ; +#6665 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6666 = AXIS2_PLACEMENT_3D ( 'NONE', #3875, #6064, #6025 ) ; +#6667 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, -1.000000000000000000, -20.83027221245303551 ) ) ; +#6668 = FACE_OUTER_BOUND ( 'NONE', #2135, .T. ) ; +#6669 = VERTEX_POINT ( 'NONE', #2225 ) ; +#6670 = ORIENTED_EDGE ( 'NONE', *, *, #3197, .T. ) ; +#6671 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6672 = AXIS2_PLACEMENT_3D ( 'NONE', #1734, #4966, #1871 ) ; +#6673 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6674 = CARTESIAN_POINT ( 'NONE', ( -25.58773010874083198, -6.700000000000000178, 50.01517837499169161 ) ) ; +#6675 = ORIENTED_EDGE ( 'NONE', *, *, #2869, .T. ) ; +#6676 = ORIENTED_EDGE ( 'NONE', *, *, #2035, .T. ) ; +#6677 = ORIENTED_EDGE ( 'NONE', *, *, #546, .T. ) ; +#6678 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6679 = AXIS2_PLACEMENT_3D ( 'NONE', #4443, #4518, #5047 ) ; +#6680 = ORIENTED_EDGE ( 'NONE', *, *, #1258, .T. ) ; +#6681 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6682 = EDGE_CURVE ( 'NONE', #6178, #2474, #2259, .T. ) ; +#6683 = EDGE_CURVE ( 'NONE', #4645, #5443, #4292, .T. ) ; +#6684 = CARTESIAN_POINT ( 'NONE', ( -2.678310800185446060E-13, -2.200000000000000622, -50.44976107412088595 ) ) ; +#6685 = ORIENTED_EDGE ( 'NONE', *, *, #189, .T. ) ; +#6686 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -5.500000000000000000, 38.23402833653357646 ) ) ; +#6687 = EDGE_CURVE ( 'NONE', #5763, #5335, #2333, .T. ) ; +#6688 = ORIENTED_EDGE ( 'NONE', *, *, #6850, .T. ) ; +#6689 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6690 = CARTESIAN_POINT ( 'NONE', ( -2.086872341600098935E-12, -2.400000000000000355, 50.44976107412009725 ) ) ; +#6691 = CIRCLE ( 'NONE', #5899, 0.5999999999999998668 ) ; +#6692 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6693 = PLANE ( 'NONE', #4236 ) ; +#6694 = CARTESIAN_POINT ( 'NONE', ( -48.50000000000026290, -3.000000000000000000, 52.52499999999972147 ) ) ; +#6695 = EDGE_CURVE ( 'NONE', #7021, #842, #4549, .T. ) ; +#6696 = VERTEX_POINT ( 'NONE', #5606 ) ; +#6697 = ORIENTED_EDGE ( 'NONE', *, *, #1647, .F. ) ; +#6698 = EDGE_LOOP ( 'NONE', ( #843, #5185, #4278, #3030 ) ) ; +#6699 = ORIENTED_EDGE ( 'NONE', *, *, #2483, .F. ) ; +#6700 = FACE_OUTER_BOUND ( 'NONE', #5248, .T. ) ; +#6701 = CYLINDRICAL_SURFACE ( 'NONE', #2665, 25.30000000000000071 ) ; +#6702 = ORGANIZATION ( 'δָ¶¨', 'δָ¶¨', '' ) ; +#6703 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6704 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6705 = DIRECTION ( 'NONE', ( 7.709882115452076833E-16, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6706 = VERTEX_POINT ( 'NONE', #5497 ) ; +#6707 = VERTEX_POINT ( 'NONE', #753 ) ; +#6708 = CYLINDRICAL_SURFACE ( 'NONE', #4093, 4.500000000000010658 ) ; +#6709 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6710 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6711 = EDGE_CURVE ( 'NONE', #4034, #6706, #2719, .T. ) ; +#6712 = ORIENTED_EDGE ( 'NONE', *, *, #5207, .T. ) ; +#6713 = ORIENTED_EDGE ( 'NONE', *, *, #1208, .F. ) ; +#6714 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6715 = CIRCLE ( 'NONE', #3095, 60.49999999999994316 ) ; +#6716 = ORIENTED_EDGE ( 'NONE', *, *, #4992, .T. ) ; +#6717 = CIRCLE ( 'NONE', #6375, 5.025000000000002132 ) ; +#6718 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#6719 = CIRCLE ( 'NONE', #6273, 4.500000000000232703 ) ; +#6720 = EDGE_LOOP ( 'NONE', ( #4584, #5110 ) ) ; +#6721 = VECTOR ( 'NONE', #4543, 1000.000000000000000 ) ; +#6722 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6723 = ORIENTED_EDGE ( 'NONE', *, *, #3701, .F. ) ; +#6724 = DATE_AND_TIME ( #5746, #4561 ) ; +#6725 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6726 = AXIS2_PLACEMENT_3D ( 'NONE', #4293, #6449, #1602 ) ; +#6727 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6728 = FACE_OUTER_BOUND ( 'NONE', #3512, .T. ) ; +#6729 = VECTOR ( 'NONE', #1808, 1000.000000000000000 ) ; +#6730 = CARTESIAN_POINT ( 'NONE', ( -36.15552248038325445, -6.700000000000000178, -21.47046096781793167 ) ) ; +#6731 = ADVANCED_FACE ( 'NONE', ( #6340 ), #1987, .F. ) ; +#6732 = ORIENTED_EDGE ( 'NONE', *, *, #579, .T. ) ; +#6733 = VECTOR ( 'NONE', #2186, 1000.000000000000000 ) ; +#6734 = CARTESIAN_POINT ( 'NONE', ( -35.64004265691768580, -1.800000000000001155, -63.46826585978279667 ) ) ; +#6735 = ORIENTED_EDGE ( 'NONE', *, *, #252, .F. ) ; +#6736 = ORIENTED_EDGE ( 'NONE', *, *, #475, .F. ) ; +#6737 = VERTEX_POINT ( 'NONE', #2480 ) ; +#6738 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6739 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6740 = EDGE_CURVE ( 'NONE', #2205, #3908, #5679, .T. ) ; +#6741 = FACE_OUTER_BOUND ( 'NONE', #80, .T. ) ; +#6742 = AXIS2_PLACEMENT_3D ( 'NONE', #2394, #4504, #6228 ) ; +#6743 = ADVANCED_FACE ( 'NONE', ( #6311 ), #3858, .F. ) ; +#6744 = ADVANCED_FACE ( 'NONE', ( #3011 ), #6162, .F. ) ; +#6745 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387191874, -2.200000000000000622, -51.96446609406757489 ) ) ; +#6746 = PLANE ( 'NONE', #1521 ) ; +#6747 = ORIENTED_EDGE ( 'NONE', *, *, #2699, .F. ) ; +#6748 = VECTOR ( 'NONE', #505, 1000.000000000000000 ) ; +#6749 = ORIENTED_EDGE ( 'NONE', *, *, #2232, .T. ) ; +#6750 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -2.400000000000000355, 35.23402833652781396 ) ) ; +#6751 = FACE_OUTER_BOUND ( 'NONE', #6428, .T. ) ; +#6752 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6753 = VECTOR ( 'NONE', #4461, 1000.000000000000000 ) ; +#6754 = ORIENTED_EDGE ( 'NONE', *, *, #3276, .T. ) ; +#6755 = EDGE_CURVE ( 'NONE', #2506, #5688, #1818, .T. ) ; +#6756 = VERTEX_POINT ( 'NONE', #5220 ) ; +#6757 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6758 = EDGE_LOOP ( 'NONE', ( #2624, #2200, #792, #6542 ) ) ; +#6759 = ADVANCED_FACE ( 'NONE', ( #1467 ), #5815, .T. ) ; +#6760 = CYLINDRICAL_SURFACE ( 'NONE', #5597, 1.500000000000001332 ) ; +#6761 = ORIENTED_EDGE ( 'NONE', *, *, #5454, .T. ) ; +#6762 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6763 = VERTEX_POINT ( 'NONE', #4624 ) ; +#6764 = DATE_AND_TIME ( #1420, #1506 ) ; +#6765 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6766 = CARTESIAN_POINT ( 'NONE', ( -41.45819837980560862, -6.700000000000000178, -46.10008445871534377 ) ) ; +#6767 = AXIS2_PLACEMENT_3D ( 'NONE', #6636, #6752, #5656 ) ; +#6768 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6769 = CARTESIAN_POINT ( 'NONE', ( 33.50000000000029132, -8.000000000000000000, -63.49999999999972289 ) ) ; +#6770 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6771 = VERTEX_POINT ( 'NONE', #3620 ) ; +#6772 = CARTESIAN_POINT ( 'NONE', ( -21.47046096781780733, -5.899999999999999467, 36.15552248038332550 ) ) ; +#6773 = ORIENTED_EDGE ( 'NONE', *, *, #1931, .T. ) ; +#6774 = ORIENTED_EDGE ( 'NONE', *, *, #6066, .T. ) ; +#6775 = ORIENTED_EDGE ( 'NONE', *, *, #273, .F. ) ; +#6776 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6777 = CARTESIAN_POINT ( 'NONE', ( -27.93000000000074579, -2.200000000000000622, -56.49999999999972289 ) ) ; +#6778 = CARTESIAN_POINT ( 'NONE', ( -31.73239677215492804, -2.200000000000000622, 13.14398910963711486 ) ) ; +#6779 = EDGE_CURVE ( 'NONE', #2127, #5134, #1490, .T. ) ; +#6780 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412088595, -5.500000000000000000, -6.000000000000001776 ) ) ; +#6781 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387191874, -3.200000000000000622, -51.96446609406757489 ) ) ; +#6782 = VERTEX_POINT ( 'NONE', #5149 ) ; +#6783 = EDGE_LOOP ( 'NONE', ( #4358, #5548, #4063, #2605 ) ) ; +#6784 = ADVANCED_FACE ( 'NONE', ( #1358, #325, #4188, #4659, #1436, #392 ), #3590, .F. ) ; +#6785 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#6786 = EDGE_CURVE ( 'NONE', #2809, #4117, #6459, .T. ) ; +#6787 = CARTESIAN_POINT ( 'NONE', ( 40.45517745126431919, -6.700000000000000178, -44.98475983471188755 ) ) ; +#6788 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.800000000000000488, 25.96370172317529423 ) ) ; +#6789 = CIRCLE ( 'NONE', #3844, 5.025000000000002132 ) ; +#6790 = CIRCLE ( 'NONE', #3378, 60.49999999999994316 ) ; +#6791 = ORIENTED_EDGE ( 'NONE', *, *, #2220, .F. ) ; +#6792 = ORIENTED_EDGE ( 'NONE', *, *, #2020, .T. ) ; +#6793 = EDGE_CURVE ( 'NONE', #4744, #1974, #289, .T. ) ; +#6794 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -5.500000000000000000, 42.73402833653355515 ) ) ; +#6795 = EDGE_LOOP ( 'NONE', ( #1914, #191 ) ) ; +#6796 = ADVANCED_FACE ( 'NONE', ( #1917 ), #6236, .F. ) ; +#6797 = PLANE ( 'NONE', #3784 ) ; +#6798 = VERTEX_POINT ( 'NONE', #899 ) ; +#6799 = CIRCLE ( 'NONE', #683, 5.999999999999998224 ) ; +#6800 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6801 = VERTEX_POINT ( 'NONE', #2518 ) ; +#6802 = PERSON_AND_ORGANIZATION ( #2507, #6702 ) ; +#6803 = LINE ( 'NONE', #1942, #440 ) ; +#6804 = CARTESIAN_POINT ( 'NONE', ( -22.78180162019543786, -2.200000000000000622, -58.50000000000000000 ) ) ; +#6805 = CIRCLE ( 'NONE', #358, 1.500000000000004219 ) ; +#6806 = DIRECTION ( 'NONE', ( 7.709882115452076833E-16, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6807 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6808 = ORIENTED_EDGE ( 'NONE', *, *, #3387, .T. ) ; +#6809 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6810 = ORIENTED_EDGE ( 'NONE', *, *, #4145, .F. ) ; +#6811 = ORIENTED_EDGE ( 'NONE', *, *, #3174, .F. ) ; +#6812 = ORIENTED_EDGE ( 'NONE', *, *, #1071, .T. ) ; +#6813 = VECTOR ( 'NONE', #3247, 1000.000000000000000 ) ; +#6814 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6815 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, -1.000000000000000000 ) ) ; +#6816 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6817 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6818 = AXIS2_PLACEMENT_3D ( 'NONE', #3462, #778, #2389 ) ; +#6819 = CARTESIAN_POINT ( 'NONE', ( -13.14398910962626843, -5.899999999999999467, 31.73239677215942223 ) ) ; +#6820 = VECTOR ( 'NONE', #5683, 1000.000000000000000 ) ; +#6821 = ORIENTED_EDGE ( 'NONE', *, *, #5302, .T. ) ; +#6822 = VERTEX_POINT ( 'NONE', #4792 ) ; +#6823 = EDGE_CURVE ( 'NONE', #1157, #247, #115, .T. ) ; +#6824 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6825 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6826 = CYLINDRICAL_SURFACE ( 'NONE', #5636, 1.500000000000001332 ) ; +#6827 = VERTEX_POINT ( 'NONE', #1664 ) ; +#6828 = ADVANCED_FACE ( 'NONE', ( #3824, #6409 ), #6477, .F. ) ; +#6829 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063540223, -1.000000000000000000, 21.43027221243706038 ) ) ; +#6830 = ORIENTED_EDGE ( 'NONE', *, *, #3409, .T. ) ; +#6831 = ADVANCED_FACE ( 'NONE', ( #6513 ), #5975, .F. ) ; +#6832 = EDGE_CURVE ( 'NONE', #5793, #3546, #2380, .T. ) ; +#6833 = EDGE_CURVE ( 'NONE', #6827, #4377, #1000, .T. ) ; +#6834 = FACE_OUTER_BOUND ( 'NONE', #1814, .T. ) ; +#6835 = ORIENTED_EDGE ( 'NONE', *, *, #20, .F. ) ; +#6836 = EDGE_LOOP ( 'NONE', ( #3842, #4102, #5991, #6967 ) ) ; +#6837 = AXIS2_PLACEMENT_3D ( 'NONE', #2823, #1207, #4959 ) ; +#6838 = CARTESIAN_POINT ( 'NONE', ( -27.93000000000074579, -1.800000000000000711, -56.49999999999972289 ) ) ; +#6839 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387191874, -3.200000000000000622, -53.46446609406757489 ) ) ; +#6840 = AXIS2_PLACEMENT_3D ( 'NONE', #3111, #562, #6367 ) ; +#6841 = LINE ( 'NONE', #3040, #6142 ) ; +#6842 = AXIS2_PLACEMENT_3D ( 'NONE', #5810, #5314, #1428 ) ; +#6843 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6844 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6845 = ORIENTED_EDGE ( 'NONE', *, *, #6682, .F. ) ; +#6846 = VERTEX_POINT ( 'NONE', #4860 ) ; +#6847 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6848 = CIRCLE ( 'NONE', #1075, 0.5999999999999998668 ) ; +#6849 = FACE_OUTER_BOUND ( 'NONE', #1341, .T. ) ; +#6850 = EDGE_CURVE ( 'NONE', #616, #6443, #3716, .T. ) ; +#6851 = AXIS2_PLACEMENT_3D ( 'NONE', #5341, #2008, #5866 ) ; +#6852 = CARTESIAN_POINT ( 'NONE', ( 36.15552248038325445, -6.700000000000000178, 21.47046096781793167 ) ) ; +#6853 = VECTOR ( 'NONE', #6010, 1000.000000000000000 ) ; +#6854 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#6855 = CIRCLE ( 'NONE', #4468, 40.55000000000109139 ) ; +#6856 = CARTESIAN_POINT ( 'NONE', ( 29.36379310344975480, -6.700000000000000178, -27.96551724137933803 ) ) ; +#6857 = AXIS2_PLACEMENT_3D ( 'NONE', #181, #2767, #2801 ) ; +#6858 = EDGE_LOOP ( 'NONE', ( #6670, #2531, #2758, #6773 ) ) ; +#6859 = ORIENTED_EDGE ( 'NONE', *, *, #3490, .T. ) ; +#6860 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, -1.000000000000000000, 21.43027221244568992 ) ) ; +#6861 = AXIS2_PLACEMENT_3D ( 'NONE', #6111, #1272, #5026 ) ; +#6862 = VECTOR ( 'NONE', #6725, 1000.000000000000000 ) ; +#6863 = LINE ( 'NONE', #2528, #1479 ) ; +#6864 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6865 = CIRCLE ( 'NONE', #4031, 4.500000000000010658 ) ; +#6866 = ORIENTED_EDGE ( 'NONE', *, *, #5887, .T. ) ; +#6867 = CARTESIAN_POINT ( 'NONE', ( -30.01032132651300799, -2.200000000000000622, -17.30144700593542595 ) ) ; +#6868 = ORIENTED_EDGE ( 'NONE', *, *, #3965, .T. ) ; +#6869 = AXIS2_PLACEMENT_3D ( 'NONE', #1599, #6371, #3718 ) ; +#6870 = EDGE_CURVE ( 'NONE', #3969, #6522, #815, .T. ) ; +#6871 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6872 = AXIS2_PLACEMENT_3D ( 'NONE', #732, #3344, #4946 ) ; +#6873 = ADVANCED_FACE ( 'NONE', ( #4760, #6913 ), #1567, .F. ) ; +#6874 = ORIENTED_EDGE ( 'NONE', *, *, #3485, .F. ) ; +#6875 = EDGE_CURVE ( 'NONE', #3343, #4104, #4217, .T. ) ; +#6876 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#6877 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#6878 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6879 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.7071067811865627828, -0.7071067811865322517 ) ) ; +#6880 = DIRECTION ( 'NONE', ( -0.7071067811865534569, 0.000000000000000000, -0.7071067811865414665 ) ) ; +#6881 = VERTEX_POINT ( 'NONE', #1530 ) ; +#6882 = VERTEX_POINT ( 'NONE', #2687 ) ; +#6883 = VECTOR ( 'NONE', #5691, 999.9999999999998863 ) ; +#6884 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#6885 = CARTESIAN_POINT ( 'NONE', ( 52.69999999572387139, 0.000000000000000000, -63.49999999999969447 ) ) ; +#6886 = CARTESIAN_POINT ( 'NONE', ( -25.78180162019543786, -2.200000000000000622, -62.00000000000001421 ) ) ; +#6887 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#6888 = EDGE_CURVE ( 'NONE', #30, #1588, #5914, .T. ) ; +#6889 = CARTESIAN_POINT ( 'NONE', ( 52.50000000000027001, -8.000000000000000000, -44.49999999999972289 ) ) ; +#6890 = CYLINDRICAL_SURFACE ( 'NONE', #1406, 6.000000000000001776 ) ; +#6891 = ORIENTED_EDGE ( 'NONE', *, *, #5454, .F. ) ; +#6892 = ORIENTED_EDGE ( 'NONE', *, *, #2142, .F. ) ; +#6893 = FACE_OUTER_BOUND ( 'NONE', #2461, .T. ) ; +#6894 = CYLINDRICAL_SURFACE ( 'NONE', #2237, 4.500000000000010658 ) ; +#6895 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6896 = CIRCLE ( 'NONE', #5204, 60.49999999999994316 ) ; +#6897 = ORIENTED_EDGE ( 'NONE', *, *, #5561, .T. ) ; +#6898 = CIRCLE ( 'NONE', #1909, 4.500000000000013323 ) ; +#6899 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -6.700000000000000178, 0.000000000000000000 ) ) ; +#6900 = ORIENTED_EDGE ( 'NONE', *, *, #496, .T. ) ; +#6901 = VECTOR ( 'NONE', #1779, 1000.000000000000000 ) ; +#6902 = CARTESIAN_POINT ( 'NONE', ( -40.45517745126328890, -6.700000000000000178, -44.98475983471281126 ) ) ; +#6903 = ORIENTED_EDGE ( 'NONE', *, *, #6197, .F. ) ; +#6904 = ADVANCED_FACE ( 'NONE', ( #5880 ), #3683, .F. ) ; +#6905 = LINE ( 'NONE', #6936, #5317 ) ; +#6906 = CIRCLE ( 'NONE', #6213, 4.299999999999998046 ) ; +#6907 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6908 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6909 = CARTESIAN_POINT ( 'NONE', ( 30.45000000000150564, -5.899999999999999467, -30.50000000000000355 ) ) ; +#6910 = FACE_BOUND ( 'NONE', #807, .T. ) ; +#6911 = VERTEX_POINT ( 'NONE', #7015 ) ; +#6912 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6913 = FACE_OUTER_BOUND ( 'NONE', #225, .T. ) ; +#6914 = CARTESIAN_POINT ( 'NONE', ( -4.157457896303442979, -5.899999999999999467, -1.722075445644026814 ) ) ; +#6915 = VECTOR ( 'NONE', #4097, 1000.000000000000000 ) ; +#6916 = CARTESIAN_POINT ( 'NONE', ( 21.43027221245065661, -6.700000000000000178, 51.73725382063078371 ) ) ; +#6917 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6918 = EDGE_CURVE ( 'NONE', #14, #1453, #6805, .T. ) ; +#6919 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#6920 = VECTOR ( 'NONE', #3181, 1000.000000000000000 ) ; +#6921 = ORIENTED_EDGE ( 'NONE', *, *, #916, .F. ) ; +#6922 = VERTEX_POINT ( 'NONE', #4830 ) ; +#6923 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6924 = DIRECTION ( 'NONE', ( 0.9238795325112835188, -0.000000000000000000, 0.3826834323650976089 ) ) ; +#6925 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6926 = AXIS2_PLACEMENT_3D ( 'NONE', #4306, #6563, #3297 ) ; +#6927 = AXIS2_PLACEMENT_3D ( 'NONE', #5521, #1692, #6652 ) ; +#6928 = ORIENTED_EDGE ( 'NONE', *, *, #2512, .T. ) ; +#6929 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980706524, -6.700000000000000178, -32.00000000000000000 ) ) ; +#6930 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6931 = ORIENTED_EDGE ( 'NONE', *, *, #1996, .F. ) ; +#6932 = ADVANCED_FACE ( 'NONE', ( #6943 ), #4287, .T. ) ; +#6933 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6934 = ORIENTED_EDGE ( 'NONE', *, *, #1232, .F. ) ; +#6935 = ORIENTED_EDGE ( 'NONE', *, *, #6512, .F. ) ; +#6936 = CARTESIAN_POINT ( 'NONE', ( -27.93000000000074579, -1.800000000000000711, -55.49999999999972289 ) ) ; +#6937 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6938 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6939 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.899999999999999467, -30.50000000000000355 ) ) ; +#6940 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653317145, -6.700000000000000178, 36.73402833653069166 ) ) ; +#6941 = VERTEX_POINT ( 'NONE', #3753 ) ; +#6942 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244782154, -0.5000000000000092149, -51.73725382063397404 ) ) ; +#6943 = FACE_OUTER_BOUND ( 'NONE', #5632, .T. ) ; +#6944 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, -0.5000000000000092149, 51.13725382063020675 ) ) ; +#6945 = AXIS2_PLACEMENT_3D ( 'NONE', #5350, #3177, #3140 ) ; +#6946 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653317145, -5.500000000000000000, 36.73402833653069166 ) ) ; +#6947 = VECTOR ( 'NONE', #2623, 1000.000000000000000 ) ; +#6948 = EDGE_CURVE ( 'NONE', #1088, #2871, #3215, .T. ) ; +#6949 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, -1.000000000000000000, 22.03027221244568779 ) ) ; +#6950 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6951 = ORIENTED_EDGE ( 'NONE', *, *, #2348, .F. ) ; +#6952 = EDGE_LOOP ( 'NONE', ( #5203, #3223, #1180, #885 ) ) ; +#6953 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#6954 = EDGE_CURVE ( 'NONE', #2161, #1760, #693, .T. ) ; +#6955 = CIRCLE ( 'NONE', #4702, 0.5999999999999998668 ) ; +#6956 = CARTESIAN_POINT ( 'NONE', ( -21.43027221243918845, -1.000000000000000000, 51.73725382063020817 ) ) ; +#6957 = CARTESIAN_POINT ( 'NONE', ( -33.50000000000029132, -8.000000000000000000, 63.49999999999972289 ) ) ; +#6958 = ADVANCED_FACE ( 'NONE', ( #6109, #1202 ), #3313, .F. ) ; +#6959 = CIRCLE ( 'NONE', #3893, 1.500000000000001332 ) ; +#6960 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6961 = EDGE_CURVE ( 'NONE', #4569, #1551, #89, .T. ) ; +#6962 = EDGE_CURVE ( 'NONE', #1841, #235, #6464, .T. ) ; +#6963 = AXIS2_PLACEMENT_3D ( 'NONE', #7011, #2151, #6474 ) ; +#6964 = VECTOR ( 'NONE', #1265, 1000.000000000000000 ) ; +#6965 = AXIS2_PLACEMENT_3D ( 'NONE', #5102, #241, #634 ) ; +#6966 = ORIENTED_EDGE ( 'NONE', *, *, #5190, .F. ) ; +#6967 = ORIENTED_EDGE ( 'NONE', *, *, #223, .F. ) ; +#6968 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, -1.000000000000000000 ) ) ; +#6969 = FACE_OUTER_BOUND ( 'NONE', #854, .T. ) ; +#6970 = ORIENTED_EDGE ( 'NONE', *, *, #1457, .T. ) ; +#6971 = AXIS2_PLACEMENT_3D ( 'NONE', #1672, #4299, #2097 ) ; +#6972 = EDGE_CURVE ( 'NONE', #710, #3565, #2504, .T. ) ; +#6973 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412088595, -5.500000000000000000, 0.000000000000000000 ) ) ; +#6974 = EDGE_LOOP ( 'NONE', ( #6233, #5554, #6461, #5146, #4891, #1097 ) ) ; +#6975 = ORIENTED_EDGE ( 'NONE', *, *, #6211, .T. ) ; +#6976 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6977 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063179268, -0.4999999999999886202, -22.03027221245303480 ) ) ; +#6978 = AXIS2_PLACEMENT_3D ( 'NONE', #5179, #5706, #857 ) ; +#6979 = CYLINDRICAL_SURFACE ( 'NONE', #3779, 1.500000000000001332 ) ; +#6980 = CARTESIAN_POINT ( 'NONE', ( -52.50000000000027001, -3.000000000000000000, -39.47499999999971010 ) ) ; +#6981 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6982 = VERTEX_POINT ( 'NONE', #2248 ) ; +#6983 = DIRECTION ( 'NONE', ( 1.541976423090415367E-15, 0.000000000000000000, 1.000000000000000000 ) ) ; +#6984 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#6985 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6986 = CARTESIAN_POINT ( 'NONE', ( 56.16019669858830810, 0.000000000000000000, -56.16019669858773966 ) ) ; +#6987 = CARTESIAN_POINT ( 'NONE', ( 17.30144700593796259, -5.899999999999999467, 30.01032132651201323 ) ) ; +#6988 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#6989 = ORIENTED_EDGE ( 'NONE', *, *, #4314, .F. ) ; +#6990 = EDGE_LOOP ( 'NONE', ( #5014, #224, #2208, #4506, #132, #3187, #2153 ) ) ; +#6991 = DIRECTION ( 'NONE', ( -0.3826834323650943337, 0.000000000000000000, 0.9238795325112847401 ) ) ; +#6992 = CARTESIAN_POINT ( 'NONE', ( 1.722075445644041469, -6.700000000000000178, -4.157457896303436762 ) ) ; +#6993 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#6994 = EDGE_CURVE ( 'NONE', #6623, #6737, #6076, .T. ) ; +#6995 = CARTESIAN_POINT ( 'NONE', ( -51.73725382062877287, -1.000000000000000000, 21.43027221244568992 ) ) ; +#6996 = AXIS2_PLACEMENT_3D ( 'NONE', #4023, #4600, #1370 ) ; +#6997 = EDGE_CURVE ( 'NONE', #5692, #6465, #3645, .T. ) ; +#6998 = EDGE_LOOP ( 'NONE', ( #4698, #1096 ) ) ; +#6999 = ORIENTED_EDGE ( 'NONE', *, *, #4318, .F. ) ; +#7000 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#7001 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#7002 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#7003 = ADVANCED_FACE ( 'NONE', ( #5487 ), #4459, .F. ) ; +#7004 = AXIS2_PLACEMENT_3D ( 'NONE', #4137, #438, #6250 ) ; +#7005 = EDGE_LOOP ( 'NONE', ( #391, #6562 ) ) ; +#7006 = ORIENTED_EDGE ( 'NONE', *, *, #2143, .F. ) ; +#7007 = FACE_OUTER_BOUND ( 'NONE', #5473, .T. ) ; +#7008 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#7009 = AXIS2_PLACEMENT_3D ( 'NONE', #652, #5620, #3910 ) ; +#7010 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#7011 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063071265, -6.700000000000000178, -21.43027221245083425 ) ) ; +#7012 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#7013 = VECTOR ( 'NONE', #6976, 1000.000000000000000 ) ; +#7014 = ORIENTED_EDGE ( 'NONE', *, *, #1208, .T. ) ; +#7015 = CARTESIAN_POINT ( 'NONE', ( 48.50000000000026290, -3.000000000000000000, 42.47499999999972431 ) ) ; +#7016 = CARTESIAN_POINT ( 'NONE', ( -39.29417823468477167, -5.899999999999999467, 10.01349373899609674 ) ) ; +#7017 = CYLINDRICAL_SURFACE ( 'NONE', #1982, 5.999999999999998224 ) ; +#7018 = EDGE_CURVE ( 'NONE', #5625, #3576, #940, .T. ) ; +#7019 = CARTESIAN_POINT ( 'NONE', ( -34.92266447387282113, -3.200000000000000622, -34.03553390593242511 ) ) ; +#7020 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#7021 = VERTEX_POINT ( 'NONE', #6543 ) ; +#7022 = ORIENTED_EDGE ( 'NONE', *, *, #2739, .T. ) ; +#7023 = VECTOR ( 'NONE', #5856, 1000.000000000000000 ) ; +ENDSEC; +END-ISO-10303-21; diff --git a/SHELL_STEP/README.md b/SHELL_STEP/README.md new file mode 100644 index 0000000..86e4f79 --- /dev/null +++ b/SHELL_STEP/README.md @@ -0,0 +1,18 @@ +# 外壳制作注意事项 + + +## 改进注意事项 +- CNC铝壳体为了尽量符合嘉立创优惠条件,螺丝孔没有攻螺纹,USB开孔没有使用侧面特征。如您预算充足,可以直接编辑step文件把这些加上去。 +- 喷砂选择如果可以选择,尽量选择高目数喷砂,光泽会更好。 +- 彩色阳极氧化不建议尝试,和Macmini 搭配起来视觉效果很奇怪。 +- 中央玻璃可以使用亚克力替代,但是成本并不会差多少,建议使用玻璃 +- 底盖是可选项,不安装底盖不影响功能和美观 +- 螺丝安装孔、玻璃窗安装孔、磁铁安装孔都使用间隙配合,安装时候需要使用些AB胶 + + + +## 冷门物料购买链接 +[防尘网-银色](https://item.taobao.com/item.htm?id=991287626434&mi_id=0000MWlLTD0B9qUh7QNOCLdP-8aqg2Med4XmxzD8oB5FGq4&spm=tbpc.boughtlist.suborder_itemtitle.1.67002e8dkLCuOH) +[M2铜柱3mm\*4 M2铜柱4mm\*6](https://detail.tmall.com/item.htm?id=520010420898&mi_id=0000FAzSvyZ15wBuFyr55BddZXGQAmrDSwo1xUA7ZJ2c_24&spm=tbpc.boughtlist.suborder_itemtitle.1.3b022e8dl4WFlU) +[M2螺丝3mm\*4 M2螺丝4mm\*6](https://detail.tmall.com/item.htm?id=643512747051&mi_id=0000eZqmYQaG_N9qvKxcEfvHcJf2Uu8JZGzvpVRsHmBE4b8&spm=tbpc.boughtlist.suborder_itemtitle.1.3b022e8dl4WFlU) +[磁铁 直径10mm厚度5mm*4颗](https://detail.tmall.com/item.htm?id=670224869282&mi_id=0000qwxNHelRFOowcJTOYNSwjPLVlNjDwktnjOvE8b0st9g&spm=tbpc.boughtlist.suborder_itemtitle.1.3b022e8dl4WFlU) \ No newline at end of file diff --git a/SHELL_STEP/底盖.STEP b/SHELL_STEP/底盖.STEP new file mode 100644 index 0000000..450699a --- /dev/null +++ b/SHELL_STEP/底盖.STEP @@ -0,0 +1,4366 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION (( 'STEP AP203' ), + '1' ); +FILE_NAME ('µ׸Ç.STEP', + '2026-09-29T14:36:17', + ( '' ), + ( '' ), + 'SwSTEP 2.0', + 'SolidWorks 2021', + '' ); +FILE_SCHEMA (( 'CONFIG_CONTROL_DESIGN' )); +ENDSEC; + +DATA; +#1 = EDGE_LOOP ( 'NONE', ( #3399, #3719 ) ) ; +#2 = VERTEX_POINT ( 'NONE', #2787 ) ; +#3 = LINE ( 'NONE', #2291, #1282 ) ; +#4 = EDGE_CURVE ( 'NONE', #3793, #1096, #54, .T. ) ; +#5 = ORIENTED_EDGE ( 'NONE', *, *, #1673, .F. ) ; +#6 = ORIENTED_EDGE ( 'NONE', *, *, #2734, .F. ) ; +#7 = DIRECTION ( 'NONE', ( -6.314330739953384296E-16, 0.000000000000000000, 1.000000000000000000 ) ) ; +#8 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#9 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#10 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#11 = ADVANCED_FACE ( 'NONE', ( #1516 ), #104, .F. ) ; +#12 = PLANE ( 'NONE', #1515 ) ; +#13 = AXIS2_PLACEMENT_3D ( 'NONE', #2319, #258, #4252 ) ; +#14 = CYLINDRICAL_SURFACE ( 'NONE', #3622, 3.000000000000002665 ) ; +#15 = VECTOR ( 'NONE', #1196, 1000.000000000000000 ) ; +#16 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#17 = ORIENTED_EDGE ( 'NONE', *, *, #3973, .F. ) ; +#18 = FACE_OUTER_BOUND ( 'NONE', #874, .T. ) ; +#19 = CIRCLE ( 'NONE', #588, 2.000000000000001776 ) ; +#20 = EDGE_CURVE ( 'NONE', #2665, #3864, #1040, .T. ) ; +#21 = ORIENTED_EDGE ( 'NONE', *, *, #4346, .T. ) ; +#22 = ORIENTED_EDGE ( 'NONE', *, *, #454, .F. ) ; +#23 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -2.399999999999999911, 37.73402833653108246 ) ) ; +#24 = EDGE_CURVE ( 'NONE', #341, #1722, #3484, .T. ) ; +#25 = EDGE_CURVE ( 'NONE', #3979, #2223, #526, .T. ) ; +#26 = ORIENTED_EDGE ( 'NONE', *, *, #3642, .F. ) ; +#27 = VERTEX_POINT ( 'NONE', #126 ) ; +#28 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#29 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#30 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#31 = PLANE ( 'NONE', #3792 ) ; +#32 = FACE_OUTER_BOUND ( 'NONE', #1552, .T. ) ; +#33 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -1.199999999999999734, 18.43027221244937763 ) ) ; +#34 = CARTESIAN_POINT ( 'NONE', ( 36.21295323236918762, -1.199999999999999956, -46.01087987044774508 ) ) ; +#35 = ORIENTED_EDGE ( 'NONE', *, *, #668, .T. ) ; +#36 = CARTESIAN_POINT ( 'NONE', ( 28.01295323236935886, -2.299999999999999822, -0.000000000000000000 ) ) ; +#37 = SECURITY_CLASSIFICATION_LEVEL ( 'unclassified' ) ; +#38 = AXIS2_PLACEMENT_3D ( 'NONE', #692, #8, #2028 ) ; +#39 = CIRCLE ( 'NONE', #3687, 3.000000000000002665 ) ; +#40 = EDGE_LOOP ( 'NONE', ( #3104, #2690, #1844, #4345 ) ) ; +#41 = ORIENTED_EDGE ( 'NONE', *, *, #3995, .T. ) ; +#42 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#43 = AXIS2_PLACEMENT_3D ( 'NONE', #2057, #734, #778 ) ; +#44 = ORIENTED_EDGE ( 'NONE', *, *, #1798, .F. ) ; +#45 = ORIENTED_EDGE ( 'NONE', *, *, #2946, .T. ) ; +#46 = LINE ( 'NONE', #1748, #1031 ) ; +#47 = EDGE_CURVE ( 'NONE', #3640, #2481, #2767, .T. ) ; +#48 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#49 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#50 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#51 = ADVANCED_FACE ( 'NONE', ( #1471 ), #4143, .F. ) ; +#52 = AXIS2_PLACEMENT_3D ( 'NONE', #946, #3332, #3948 ) ; +#53 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -4.500000000000000000, -21.43027221244073743 ) ) ; +#54 = CIRCLE ( 'NONE', #121, 2.000000000000001776 ) ; +#55 = VERTEX_POINT ( 'NONE', #2831 ) ; +#56 = EDGE_LOOP ( 'NONE', ( #2725, #35 ) ) ; +#57 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#58 = AXIS2_PLACEMENT_3D ( 'NONE', #3173, #1254, #2587 ) ; +#59 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#60 = VERTEX_POINT ( 'NONE', #2108 ) ; +#61 = CARTESIAN_POINT ( 'NONE', ( 39.75819837980361626, -4.299999999999999822, -53.62639461200842561 ) ) ; +#62 = ORIENTED_EDGE ( 'NONE', *, *, #1475, .F. ) ; +#63 = ORIENTED_EDGE ( 'NONE', *, *, #2680, .F. ) ; +#64 = CIRCLE ( 'NONE', #4281, 1.000000000000000888 ) ; +#65 = ORIENTED_EDGE ( 'NONE', *, *, #2814, .T. ) ; +#66 = EDGE_LOOP ( 'NONE', ( #1841, #2832, #3582, #899 ) ) ; +#67 = ORIENTED_EDGE ( 'NONE', *, *, #3728, .T. ) ; +#68 = LINE ( 'NONE', #1022, #177 ) ; +#69 = DIRECTION ( 'NONE', ( -6.314330739953384296E-16, 0.000000000000000000, 1.000000000000000000 ) ) ; +#70 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#71 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#72 = AXIS2_PLACEMENT_3D ( 'NONE', #4130, #2400, #1130 ) ; +#73 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#74 = ADVANCED_FACE ( 'NONE', ( #2472 ), #3810, .F. ) ; +#75 = ORIENTED_EDGE ( 'NONE', *, *, #3996, .F. ) ; +#76 = ORIENTED_EDGE ( 'NONE', *, *, #2488, .T. ) ; +#77 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#78 = ADVANCED_FACE ( 'NONE', ( #1104, #3155 ), #2432, .F. ) ; +#79 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -1.199999999999999956, 36.73402833653108246 ) ) ; +#80 = ORIENTED_EDGE ( 'NONE', *, *, #4346, .F. ) ; +#81 = ADVANCED_FACE ( 'NONE', ( #483 ), #150, .F. ) ; +#82 = VECTOR ( 'NONE', #3872, 1000.000000000000000 ) ; +#83 = CIRCLE ( 'NONE', #3512, 2.300000000000003375 ) ; +#84 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#85 = AXIS2_PLACEMENT_3D ( 'NONE', #99, #1160, #478 ) ; +#86 = EDGE_CURVE ( 'NONE', #1672, #3107, #2499, .T. ) ; +#87 = VERTEX_POINT ( 'NONE', #3177 ) ; +#88 = EDGE_LOOP ( 'NONE', ( #423, #3614, #2078, #3601 ) ) ; +#89 = CARTESIAN_POINT ( 'NONE', ( 39.75819837980361626, 0.000000000000000000, -60.50000000000000000 ) ) ; +#90 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#91 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -4.500000000000000000, -24.43027221244074099 ) ) ; +#92 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#93 = CARTESIAN_POINT ( 'NONE', ( -37.73125606114251696, -4.500000000000000000, -43.43130005367003577 ) ) ; +#94 = ORIENTED_EDGE ( 'NONE', *, *, #4031, .F. ) ; +#95 = EDGE_LOOP ( 'NONE', ( #865, #3468 ) ) ; +#96 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -2.399999999999999911, 36.73402833653108246 ) ) ; +#97 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980525335, -1.199999999999999956, -58.30000000000018190 ) ) ; +#98 = ORIENTED_EDGE ( 'NONE', *, *, #326, .T. ) ; +#99 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -2.399999999999999911, 36.73402833653108246 ) ) ; +#100 = EDGE_CURVE ( 'NONE', #4313, #1161, #3880, .T. ) ; +#101 = ADVANCED_FACE ( 'NONE', ( #1214 ), #4217, .T. ) ; +#102 = EDGE_CURVE ( 'NONE', #1743, #1722, #3564, .T. ) ; +#103 = AXIS2_PLACEMENT_3D ( 'NONE', #3406, #2092, #3429 ) ; +#104 = CYLINDRICAL_SURFACE ( 'NONE', #621, 2.300000000000010481 ) ; +#105 = ORIENTED_EDGE ( 'NONE', *, *, #481, .F. ) ; +#106 = AXIS2_PLACEMENT_3D ( 'NONE', #3018, #2374, #3715 ) ; +#107 = VECTOR ( 'NONE', #1508, 1000.000000000000000 ) ; +#108 = LOCAL_TIME ( 22, 36, 17.00000000000000000, #836 ) ; +#109 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .AHEAD. ) ; +#110 = PLANE ( 'NONE', #3196 ) ; +#111 = ORIENTED_EDGE ( 'NONE', *, *, #2901, .T. ) ; +#112 = FACE_BOUND ( 'NONE', #1114, .T. ) ; +#113 = CIRCLE ( 'NONE', #1249, 1.300000000000189893 ) ; +#114 = CIRCLE ( 'NONE', #3274, 2.300000000000006484 ) ; +#115 = LINE ( 'NONE', #3780, #2952 ) ; +#116 = ORIENTED_EDGE ( 'NONE', *, *, #140, .F. ) ; +#117 = VERTEX_POINT ( 'NONE', #564 ) ; +#118 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#119 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#120 = EDGE_LOOP ( 'NONE', ( #1065, #857, #3631, #1464 ) ) ; +#121 = AXIS2_PLACEMENT_3D ( 'NONE', #1783, #1865, #173 ) ; +#122 = AXIS2_PLACEMENT_3D ( 'NONE', #990, #3681, #2324 ) ; +#123 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#124 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#125 = EDGE_CURVE ( 'NONE', #1398, #539, #3496, .T. ) ; +#126 = CARTESIAN_POINT ( 'NONE', ( 29.18020398454808628, -2.399999999999995470, -62.10000000000018616 ) ) ; +#127 = EDGE_LOOP ( 'NONE', ( #3162, #3560, #1681, #3818 ) ) ; +#128 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ; +#129 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#130 = CIRCLE ( 'NONE', #2599, 2.299999999999996270 ) ; +#131 = ORIENTED_EDGE ( 'NONE', *, *, #3404, .T. ) ; +#132 = CYLINDRICAL_SURFACE ( 'NONE', #931, 3.000000000000002665 ) ; +#133 = ADVANCED_FACE ( 'NONE', ( #1903 ), #2842, .F. ) ; +#134 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#135 = ORIENTED_EDGE ( 'NONE', *, *, #2019, .T. ) ; +#136 = ORIENTED_EDGE ( 'NONE', *, *, #3427, .T. ) ; +#137 = CARTESIAN_POINT ( 'NONE', ( 36.21295323236918051, -2.299999999999999822, 0.000000000000000000 ) ) ; +#138 = CIRCLE ( 'NONE', #642, 1.000000000000000888 ) ; +#139 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#140 = EDGE_CURVE ( 'NONE', #884, #2226, #2321, .T. ) ; +#141 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -1.199999999999999734, 21.43027221244074099 ) ) ; +#142 = ORIENTED_EDGE ( 'NONE', *, *, #2901, .F. ) ; +#143 = CARTESIAN_POINT ( 'NONE', ( 24.47431442974228943, -1.199999999999999956, -60.15937500000008242 ) ) ; +#144 = AXIS2_PLACEMENT_3D ( 'NONE', #1999, #1940, #253 ) ; +#145 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -2.399999999999999911, 35.73402833653108246 ) ) ; +#146 = LINE ( 'NONE', #3770, #3950 ) ; +#147 = ORIENTED_EDGE ( 'NONE', *, *, #1643, .T. ) ; +#148 = LINE ( 'NONE', #1042, #3126 ) ; +#149 = CIRCLE ( 'NONE', #4010, 2.299999999999999822 ) ; +#150 = CYLINDRICAL_SURFACE ( 'NONE', #1744, 2.299999999999996270 ) ; +#151 = EDGE_CURVE ( 'NONE', #708, #1672, #2106, .T. ) ; +#152 = AXIS2_PLACEMENT_3D ( 'NONE', #794, #3182, #1525 ) ; +#153 = ORIENTED_EDGE ( 'NONE', *, *, #1461, .F. ) ; +#154 = PERSON_AND_ORGANIZATION ( #1235, #2283 ) ; +#155 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -4.500000000000000000, -51.94976107412048805 ) ) ; +#156 = VECTOR ( 'NONE', #1580, 1000.000000000000000 ) ; +#157 = ORIENTED_EDGE ( 'NONE', *, *, #3221, .F. ) ; +#158 = EDGE_CURVE ( 'NONE', #3498, #686, #4156, .T. ) ; +#159 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#160 = EDGE_CURVE ( 'NONE', #1747, #1742, #4213, .T. ) ; +#161 = CARTESIAN_POINT ( 'NONE', ( 25.96770808493670302, -1.199999999999999956, -60.30000000000018900 ) ) ; +#162 = ADVANCED_FACE ( 'NONE', ( #846 ), #4136, .T. ) ; +#163 = ORIENTED_EDGE ( 'NONE', *, *, #3030, .T. ) ; +#164 = ORIENTED_EDGE ( 'NONE', *, *, #4023, .T. ) ; +#165 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -4.500000000000000000, -23.43027221244938474 ) ) ; +#166 = FACE_BOUND ( 'NONE', #95, .T. ) ; +#167 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#168 = LINE ( 'NONE', #3171, #2712 ) ; +#169 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#170 = CARTESIAN_POINT ( 'NONE', ( -1.818843520099016230E-12, -2.399999999999999911, -52.94976107412048805 ) ) ; +#171 = ORIENTED_EDGE ( 'NONE', *, *, #1150, .T. ) ; +#172 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.500000000000000000, 24.46370172317528713 ) ) ; +#173 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#174 = EDGE_LOOP ( 'NONE', ( #3670, #595 ) ) ; +#175 = ADVANCED_FACE ( 'NONE', ( #4180 ), #212, .T. ) ; +#176 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#177 = VECTOR ( 'NONE', #710, 1000.000000000000000 ) ; +#178 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#179 = ORIENTED_EDGE ( 'NONE', *, *, #3746, .T. ) ; +#180 = FACE_BOUND ( 'NONE', #957, .T. ) ; +#181 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#182 = AXIS2_PLACEMENT_3D ( 'NONE', #3943, #1627, #3962 ) ; +#183 = EDGE_LOOP ( 'NONE', ( #1569, #2087 ) ) ; +#185 = VECTOR ( 'NONE', #3759, 1000.000000000000000 ) ; +#184 = AXIS2_PLACEMENT_3D ( 'NONE', #3794, #2811, #814 ) ; +#186 = EDGE_CURVE ( 'NONE', #1020, #4223, #2679, .T. ) ; +#187 = EDGE_LOOP ( 'NONE', ( #422, #1764, #1644, #62 ) ) ; +#188 = LINE ( 'NONE', #891, #743 ) ; +#189 = CIRCLE ( 'NONE', #3974, 5.799999999999999822 ) ; +#190 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#191 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -4.500000000000000000, 19.43027221244074099 ) ) ; +#192 = LINE ( 'NONE', #2186, #3898 ) ; +#193 = AXIS2_PLACEMENT_3D ( 'NONE', #4155, #1176, #2509 ) ; +#194 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#195 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#196 = VERTEX_POINT ( 'NONE', #2139 ) ; +#197 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#198 = CIRCLE ( 'NONE', #2431, 5.799999999999999822 ) ; +#199 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#200 = VECTOR ( 'NONE', #3875, 1000.000000000000000 ) ; +#201 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.500000000000000000, 24.46370172317528713 ) ) ; +#202 = VERTEX_POINT ( 'NONE', #2822 ) ; +#203 = PERSON_AND_ORGANIZATION ( #1235, #2283 ) ; +#204 = FACE_BOUND ( 'NONE', #3205, .T. ) ; +#205 = ORIENTED_EDGE ( 'NONE', *, *, #2148, .F. ) ; +#206 = FACE_BOUND ( 'NONE', #3279, .T. ) ; +#207 = VERTEX_POINT ( 'NONE', #2870 ) ; +#208 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#209 = EDGE_LOOP ( 'NONE', ( #3006, #1554, #3926, #3230 ) ) ; +#210 = ORIENTED_EDGE ( 'NONE', *, *, #887, .F. ) ; +#211 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -4.500000000000000000, -18.43027221244073743 ) ) ; +#212 = CYLINDRICAL_SURFACE ( 'NONE', #1771, 1.499999999999987566 ) ; +#213 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#214 = EDGE_CURVE ( 'NONE', #4200, #2402, #3475, .T. ) ; +#215 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -1.199999999999999956, 0.000000000000000000 ) ) ; +#216 = AXIS2_PLACEMENT_3D ( 'NONE', #2215, #3929, #1890 ) ; +#217 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -1.199999999999999734, -33.87880010381454099 ) ) ; +#218 = DIRECTION ( 'NONE', ( -0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#219 = VERTEX_POINT ( 'NONE', #2892 ) ; +#220 = EDGE_CURVE ( 'NONE', #1215, #839, #4230, .T. ) ; +#221 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#222 = FACE_OUTER_BOUND ( 'NONE', #2466, .T. ) ; +#223 = ORIENTED_EDGE ( 'NONE', *, *, #2601, .F. ) ; +#224 = VECTOR ( 'NONE', #1135, 1000.000000000000000 ) ; +#225 = ADVANCED_FACE ( 'NONE', ( #1815, #894, #3893, #868, #3540, #3169, #2557, #2231, #1485, #1154, #2483, #3823, #166, #2161, #1506, #4340, #2337, #1665, #2649, #2937 ), #2274, .F. ) ; +#226 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .AHEAD. ) ; +#227 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#228 = AXIS2_PLACEMENT_3D ( 'NONE', #2458, #468, #1109 ) ; +#229 = VERTEX_POINT ( 'NONE', #1646 ) ; +#230 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -4.299999999999999822, 0.000000000000000000 ) ) ; +#231 = VERTEX_POINT ( 'NONE', #2298 ) ; +#232 = CARTESIAN_POINT ( 'NONE', ( -1.422690090735478918E-12, -1.199999999999999956, 3.757844729834758368E-13 ) ) ; +#233 = ORIENTED_EDGE ( 'NONE', *, *, #1448, .T. ) ; +#234 = EDGE_LOOP ( 'NONE', ( #4085, #3538 ) ) ; +#235 = LINE ( 'NONE', #1247, #3762 ) ; +#236 = AXIS2_PLACEMENT_3D ( 'NONE', #2803, #3443, #2783 ) ; +#237 = CARTESIAN_POINT ( 'NONE', ( 38.69635322281465761, -1.200000000000000622, -53.62639461200842561 ) ) ; +#238 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -4.500000000000000000, 51.73725382063413036 ) ) ; +#239 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.199999999999999956, -24.46370172317620373 ) ) ; +#240 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#241 = FACE_OUTER_BOUND ( 'NONE', #2889, .T. ) ; +#242 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#243 = VERTEX_POINT ( 'NONE', #4007 ) ; +#244 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.500000000000000000, 25.50000000000000000 ) ) ; +#245 = EDGE_CURVE ( 'NONE', #1524, #4128, #2535, .T. ) ; +#246 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#247 = EDGE_CURVE ( 'NONE', #685, #733, #322, .T. ) ; +#248 = PRODUCT_DEFINITION ( 'δ֪', '', #2350, #925 ) ; +#249 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#250 = ORIENTED_EDGE ( 'NONE', *, *, #333, .T. ) ; +#251 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#252 = ORIENTED_EDGE ( 'NONE', *, *, #2816, .F. ) ; +#253 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#254 = ORIENTED_EDGE ( 'NONE', *, *, #2936, .T. ) ; +#255 = VERTEX_POINT ( 'NONE', #4274 ) ; +#256 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -4.500000000000000000, 23.43027221244074454 ) ) ; +#257 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -1.199999999999999956, 36.73402833653108246 ) ) ; +#258 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#259 = VECTOR ( 'NONE', #1965, 1000.000000000000000 ) ; +#260 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#261 = CIRCLE ( 'NONE', #395, 2.299999999999999822 ) ; +#262 = AXIS2_PLACEMENT_3D ( 'NONE', #215, #3896, #1906 ) ; +#263 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#264 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.199999999999999956, -22.16370172317620302 ) ) ; +#265 = ORIENTED_EDGE ( 'NONE', *, *, #3390, .F. ) ; +#266 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#267 = CIRCLE ( 'NONE', #1521, 3.000000000000002665 ) ; +#268 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#269 = VECTOR ( 'NONE', #59, 1000.000000000000000 ) ; +#270 = EDGE_CURVE ( 'NONE', #4128, #1294, #2327, .T. ) ; +#271 = AXIS2_PLACEMENT_3D ( 'NONE', #779, #1690, #3374 ) ; +#272 = CYLINDRICAL_SURFACE ( 'NONE', #2241, 5.800000000000027356 ) ; +#273 = ORIENTED_EDGE ( 'NONE', *, *, #355, .T. ) ; +#274 = CARTESIAN_POINT ( 'NONE', ( 29.18020398454808628, -2.399999999999995470, -63.80000000000018900 ) ) ; +#275 = ORIENTED_EDGE ( 'NONE', *, *, #3404, .F. ) ; +#276 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#277 = VERTEX_POINT ( 'NONE', #237 ) ; +#278 = ORIENTED_EDGE ( 'NONE', *, *, #2488, .F. ) ; +#279 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.199999999999999956, 25.50000000000000000 ) ) ; +#280 = LINE ( 'NONE', #2977, #2427 ) ; +#281 = LINE ( 'NONE', #915, #3938 ) ; +#282 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, 0.000000000000000000, 0.000000000000000000 ) ) ; +#283 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#284 = EDGE_CURVE ( 'NONE', #1083, #1747, #2252, .T. ) ; +#285 = FACE_OUTER_BOUND ( 'NONE', #983, .T. ) ; +#286 = ORIENTED_EDGE ( 'NONE', *, *, #4100, .T. ) ; +#287 = AXIS2_PLACEMENT_3D ( 'NONE', #1936, #2660, #3997 ) ; +#288 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#289 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#290 = AXIS2_PLACEMENT_3D ( 'NONE', #53, #2733, #4094 ) ; +#291 = AXIS2_PLACEMENT_3D ( 'NONE', #1875, #3212, #134 ) ; +#292 = LINE ( 'NONE', #2947, #3082 ) ; +#293 = ORIENTED_EDGE ( 'NONE', *, *, #4164, .F. ) ; +#294 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#295 = ORIENTED_EDGE ( 'NONE', *, *, #943, .T. ) ; +#296 = LINE ( 'NONE', #2332, #707 ) ; +#297 = ORIENTED_EDGE ( 'NONE', *, *, #477, .F. ) ; +#298 = AXIS2_PLACEMENT_3D ( 'NONE', #3587, #3988, #1297 ) ; +#299 = ORIENTED_EDGE ( 'NONE', *, *, #1212, .F. ) ; +#300 = CARTESIAN_POINT ( 'NONE', ( 1.224646799147353454E-16, -2.399999999999999911, 50.94976107412048094 ) ) ; +#301 = EDGE_CURVE ( 'NONE', #1416, #1998, #2616, .T. ) ; +#302 = EDGE_CURVE ( 'NONE', #2280, #3902, #311, .T. ) ; +#303 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -4.500000000000000000, -18.43027221244073743 ) ) ; +#304 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.399999999999999911, 51.94976107412048805 ) ) ; +#305 = EDGE_CURVE ( 'NONE', #1398, #3640, #373, .T. ) ; +#306 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#307 = AXIS2_PLACEMENT_3D ( 'NONE', #3422, #1098, #2429 ) ; +#308 = FACE_OUTER_BOUND ( 'NONE', #1015, .T. ) ; +#309 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#310 = ORIENTED_EDGE ( 'NONE', *, *, #1158, .F. ) ; +#311 = CIRCLE ( 'NONE', #1293, 5.799999999999999822 ) ; +#312 = FACE_OUTER_BOUND ( 'NONE', #1827, .T. ) ; +#313 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#314 = VERTEX_POINT ( 'NONE', #2914 ) ; +#315 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#316 = ORIENTED_EDGE ( 'NONE', *, *, #982, .F. ) ; +#317 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.199999999999999956, 57.74976107412048520 ) ) ; +#318 = ORIENTED_EDGE ( 'NONE', *, *, #4299, .F. ) ; +#319 = ORIENTED_EDGE ( 'NONE', *, *, #4045, .T. ) ; +#320 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#321 = CARTESIAN_POINT ( 'NONE', ( -38.53125606114191726, -4.500000000000000000, -42.63130005366996755 ) ) ; +#322 = LINE ( 'NONE', #672, #3093 ) ; +#323 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#324 = ADVANCED_FACE ( 'NONE', ( #4250 ), #1625, .T. ) ; +#325 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -1.199999999999999734, 19.43027221244074099 ) ) ; +#326 = EDGE_CURVE ( 'NONE', #1722, #4280, #3920, .T. ) ; +#327 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#328 = CIRCLE ( 'NONE', #2143, 2.299999999999996270 ) ; +#329 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#330 = ORIENTED_EDGE ( 'NONE', *, *, #1305, .T. ) ; +#331 = CIRCLE ( 'NONE', #4323, 1.000000000000000888 ) ; +#332 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#333 = EDGE_CURVE ( 'NONE', #947, #1784, #941, .T. ) ; +#334 = AXIS2_PLACEMENT_3D ( 'NONE', #1373, #2392, #2805 ) ; +#335 = CIRCLE ( 'NONE', #2928, 25.50000000000000000 ) ; +#336 = ADVANCED_FACE ( 'NONE', ( #2605, #634 ), #1924, .T. ) ; +#337 = ORIENTED_EDGE ( 'NONE', *, *, #770, .F. ) ; +#338 = ORIENTED_EDGE ( 'NONE', *, *, #3480, .F. ) ; +#339 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#340 = AXIS2_PLACEMENT_3D ( 'NONE', #1993, #920, #594 ) ; +#341 = VERTEX_POINT ( 'NONE', #1966 ) ; +#342 = VERTEX_POINT ( 'NONE', #2958 ) ; +#343 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -4.500000000000000000, -21.43027221244073743 ) ) ; +#344 = PLANE ( 'NONE', #1319 ) ; +#345 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#346 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#347 = FACE_OUTER_BOUND ( 'NONE', #3795, .T. ) ; +#348 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -4.500000000000000000, -24.43027221244938474 ) ) ; +#349 = EDGE_CURVE ( 'NONE', #4021, #387, #607, .T. ) ; +#350 = CARTESIAN_POINT ( 'NONE', ( 28.01295323236935886, -1.199999999999999956, -61.80000000000018900 ) ) ; +#351 = ORIENTED_EDGE ( 'NONE', *, *, #2122, .T. ) ; +#352 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -1.199999999999999956, 0.9999999999999981126 ) ) ; +#353 = VECTOR ( 'NONE', #1263, 1000.000000000000000 ) ; +#354 = EDGE_CURVE ( 'NONE', #4061, #1832, #280, .T. ) ; +#355 = EDGE_CURVE ( 'NONE', #2433, #4336, #3408, .T. ) ; +#356 = ORIENTED_EDGE ( 'NONE', *, *, #458, .F. ) ; +#357 = ORIENTED_EDGE ( 'NONE', *, *, #125, .T. ) ; +#358 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#359 = CIRCLE ( 'NONE', #1696, 1.269999999999969154 ) ; +#360 = ORIENTED_EDGE ( 'NONE', *, *, #1941, .T. ) ; +#361 = ORIENTED_EDGE ( 'NONE', *, *, #3836, .F. ) ; +#362 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#363 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#364 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#365 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#366 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -4.500000000000000000, 21.43027221244074099 ) ) ; +#367 = VECTOR ( 'NONE', #346, 1000.000000000000000 ) ; +#368 = CARTESIAN_POINT ( 'NONE', ( 3.663396254163732824, -1.199999999999999956, -48.84822469919829047 ) ) ; +#369 = AXIS2_PLACEMENT_3D ( 'NONE', #2030, #2755, #3433 ) ; +#370 = LINE ( 'NONE', #34, #3986 ) ; +#371 = ORIENTED_EDGE ( 'NONE', *, *, #3882, .T. ) ; +#372 = CARTESIAN_POINT ( 'NONE', ( 22.78180162019453192, -1.199999999999999956, -58.30000000000019611 ) ) ; +#373 = CIRCLE ( 'NONE', #937, 0.8000000000001825651 ) ; +#374 = AXIS2_PLACEMENT_3D ( 'NONE', #765, #3830, #1741 ) ; +#375 = EDGE_CURVE ( 'NONE', #3671, #1195, #538, .T. ) ; +#376 = EDGE_CURVE ( 'NONE', #441, #3782, #2988, .T. ) ; +#377 = ORIENTED_EDGE ( 'NONE', *, *, #4329, .F. ) ; +#378 = ORIENTED_EDGE ( 'NONE', *, *, #2688, .F. ) ; +#379 = PLANE ( 'NONE', #3199 ) ; +#380 = ORIENTED_EDGE ( 'NONE', *, *, #3085, .F. ) ; +#381 = ORIENTED_EDGE ( 'NONE', *, *, #2196, .T. ) ; +#382 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -4.500000000000000000, 51.73725382063049238 ) ) ; +#383 = CARTESIAN_POINT ( 'NONE', ( -1.422690090735478918E-12, 0.000000000000000000, 60.30000000000110560 ) ) ; +#384 = CARTESIAN_POINT ( 'NONE', ( 1.224646799147352714E-16, -1.199999999999999956, 50.94976107412048094 ) ) ; +#385 = CYLINDRICAL_SURFACE ( 'NONE', #2456, 5.799999999999999822 ) ; +#386 = LINE ( 'NONE', #3081, #4135 ) ; +#387 = VERTEX_POINT ( 'NONE', #427 ) ; +#388 = VERTEX_POINT ( 'NONE', #2029 ) ; +#389 = FACE_OUTER_BOUND ( 'NONE', #2133, .T. ) ; +#390 = FACE_OUTER_BOUND ( 'NONE', #2182, .T. ) ; +#391 = EDGE_LOOP ( 'NONE', ( #1846, #3811 ) ) ; +#392 = AXIS2_PLACEMENT_3D ( 'NONE', #791, #1218, #2197 ) ; +#393 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#394 = VECTOR ( 'NONE', #1858, 1000.000000000000000 ) ; +#396 = CIRCLE ( 'NONE', #2850, 2.299999999999998934 ) ; +#395 = AXIS2_PLACEMENT_3D ( 'NONE', #1706, #48, #1400 ) ; +#397 = VECTOR ( 'NONE', #2237, 1000.000000000000000 ) ; +#398 = AXIS2_PLACEMENT_3D ( 'NONE', #3438, #77, #3766 ) ; +#399 = VERTEX_POINT ( 'NONE', #1089 ) ; +#400 = ORIENTED_EDGE ( 'NONE', *, *, #2434, .T. ) ; +#401 = ADVANCED_FACE ( 'NONE', ( #1768 ), #1378, .F. ) ; +#402 = VERTEX_POINT ( 'NONE', #712 ) ; +#403 = AXIS2_PLACEMENT_3D ( 'NONE', #1152, #1226, #1814 ) ; +#404 = VERTEX_POINT ( 'NONE', #754 ) ; +#405 = EDGE_LOOP ( 'NONE', ( #1426, #1546, #223, #452 ) ) ; +#406 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#407 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.299999999999999822, -57.80000000000018190 ) ) ; +#408 = LINE ( 'NONE', #4028, #3618 ) ; +#409 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -1.199999999999999734, -24.43027221244938474 ) ) ; +#410 = EDGE_CURVE ( 'NONE', #921, #1874, #408, .T. ) ; +#411 = CIRCLE ( 'NONE', #52, 2.299999999999999822 ) ; +#412 = FACE_OUTER_BOUND ( 'NONE', #1374, .T. ) ; +#413 = ORIENTED_EDGE ( 'NONE', *, *, #1324, .T. ) ; +#414 = ORIENTED_EDGE ( 'NONE', *, *, #2039, .F. ) ; +#415 = CYLINDRICAL_SURFACE ( 'NONE', #3412, 1.000000000000000888 ) ; +#416 = AXIS2_PLACEMENT_3D ( 'NONE', #4233, #169, #3545 ) ; +#417 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980525335, -1.199999999999999956, -56.99999999999999289 ) ) ; +#418 = ORIENTED_EDGE ( 'NONE', *, *, #829, .T. ) ; +#419 = ADVANCED_FACE ( 'NONE', ( #4109 ), #1048, .T. ) ; +#420 = CARTESIAN_POINT ( 'NONE', ( 36.21295323236918051, -2.299999999999999822, 0.000000000000000000 ) ) ; +#421 = EDGE_LOOP ( 'NONE', ( #4335, #3072, #2391, #1418 ) ) ; +#422 = ORIENTED_EDGE ( 'NONE', *, *, #3179, .F. ) ; +#423 = ORIENTED_EDGE ( 'NONE', *, *, #2585, .T. ) ; +#424 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -2.399999999999999911, 36.73402833653108246 ) ) ; +#425 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -1.199999999999999734, 21.43027221244074099 ) ) ; +#426 = AXIS2_PLACEMENT_3D ( 'NONE', #2510, #190, #2207 ) ; +#427 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -1.199999999999999734, -18.43027221244073743 ) ) ; +#428 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -2.399999999999999911, 0.000000000000000000 ) ) ; +#429 = AXIS2_PLACEMENT_3D ( 'NONE', #1753, #2053, #3391 ) ; +#430 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, 0.000000000000000000, 0.000000000000000000 ) ) ; +#431 = EDGE_LOOP ( 'NONE', ( #4312, #1529 ) ) ; +#432 = EDGE_CURVE ( 'NONE', #2881, #3814, #3099, .T. ) ; +#433 = APPROVAL ( #4167, 'δָ¶¨' ) ; +#434 = ORIENTED_EDGE ( 'NONE', *, *, #1956, .T. ) ; +#435 = CARTESIAN_POINT ( 'NONE', ( -38.53125606114191726, -4.500000000000000000, -42.63130005366996755 ) ) ; +#436 = ADVANCED_FACE ( 'NONE', ( #3777 ), #2710, .F. ) ; +#437 = LINE ( 'NONE', #1075, #2085 ) ; +#438 = ORIENTED_EDGE ( 'NONE', *, *, #158, .F. ) ; +#439 = PLANE ( 'NONE', #85 ) ; +#440 = AXIS2_PLACEMENT_3D ( 'NONE', #1584, #548, #3243 ) ; +#441 = VERTEX_POINT ( 'NONE', #4072 ) ; +#442 = ORIENTED_EDGE ( 'NONE', *, *, #2229, .T. ) ; +#443 = LINE ( 'NONE', #1785, #4103 ) ; +#444 = PLANE ( 'NONE', #3897 ) ; +#445 = ORIENTED_EDGE ( 'NONE', *, *, #2688, .T. ) ; +#446 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#447 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -2.399999999999999911, 0.000000000000000000 ) ) ; +#448 = ORIENTED_EDGE ( 'NONE', *, *, #2361, .T. ) ; +#449 = ORIENTED_EDGE ( 'NONE', *, *, #3855, .F. ) ; +#450 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -1.199999999999999734, -24.43027221244074099 ) ) ; +#451 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#452 = ORIENTED_EDGE ( 'NONE', *, *, #214, .F. ) ; +#453 = EDGE_CURVE ( 'NONE', #3185, #2, #1519, .T. ) ; +#454 = EDGE_CURVE ( 'NONE', #3103, #1084, #396, .T. ) ; +#455 = EDGE_CURVE ( 'NONE', #1550, #1175, #966, .T. ) ; +#456 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, 0.000000000000000000, 2.300000000000006484 ) ) ; +#457 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#458 = EDGE_CURVE ( 'NONE', #1718, #3648, #1401, .T. ) ; +#459 = CIRCLE ( 'NONE', #807, 0.9999999999999981126 ) ; +#460 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, 0.000000000000000000, -51.94976107412048805 ) ) ; +#461 = ORIENTED_EDGE ( 'NONE', *, *, #2366, .T. ) ; +#462 = AXIS2_PLACEMENT_3D ( 'NONE', #753, #1024, #69 ) ; +#463 = CIRCLE ( 'NONE', #3968, 2.099999999999997868 ) ; +#464 = ADVANCED_FACE ( 'NONE', ( #728, #4092 ), #3041, .F. ) ; +#465 = APPROVAL_STATUS ( 'not_yet_approved' ) ; +#466 = FACE_OUTER_BOUND ( 'NONE', #183, .T. ) ; +#467 = VERTEX_POINT ( 'NONE', #384 ) ; +#468 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#469 = CIRCLE ( 'NONE', #398, 1.000000000000000888 ) ; +#470 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -1.199999999999999956, 36.73402833653108246 ) ) ; +#471 = ORIENTED_EDGE ( 'NONE', *, *, #4299, .T. ) ; +#472 = ORIENTED_EDGE ( 'NONE', *, *, #1857, .F. ) ; +#473 = LINE ( 'NONE', #3187, #4328 ) ; +#474 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -1.199999999999999956, 34.43402833653198769 ) ) ; +#475 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.199999999999999956, -24.46370172317620373 ) ) ; +#476 = ORIENTED_EDGE ( 'NONE', *, *, #3561, .F. ) ; +#477 = EDGE_CURVE ( 'NONE', #2824, #1742, #2094, .T. ) ; +#478 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#479 = FACE_BOUND ( 'NONE', #174, .T. ) ; +#480 = EDGE_CURVE ( 'NONE', #2118, #2954, #658, .T. ) ; +#481 = EDGE_CURVE ( 'NONE', #1718, #534, #1011, .T. ) ; +#482 = ADVANCED_FACE ( 'NONE', ( #1751 ), #3079, .T. ) ; +#483 = FACE_OUTER_BOUND ( 'NONE', #3606, .T. ) ; +#484 = ORIENTED_EDGE ( 'NONE', *, *, #2221, .T. ) ; +#485 = APPROVAL_DATE_TIME ( #3488, #433 ) ; +#486 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#487 = VECTOR ( 'NONE', #2285, 1000.000000000000000 ) ; +#488 = ORIENTED_EDGE ( 'NONE', *, *, #3461, .T. ) ; +#489 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -4.500000000000000000, 51.73725382063049238 ) ) ; +#490 = FACE_OUTER_BOUND ( 'NONE', #88, .T. ) ; +#491 = ORIENTED_EDGE ( 'NONE', *, *, #2980, .T. ) ; +#492 = ORIENTED_EDGE ( 'NONE', *, *, #2872, .F. ) ; +#493 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#494 = AXIS2_PLACEMENT_3D ( 'NONE', #4113, #1071, #2378 ) ; +#495 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -4.299999999999999822, -53.62639461200842561 ) ) ; +#496 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#497 = ORIENTED_EDGE ( 'NONE', *, *, #2257, .T. ) ; +#498 = CARTESIAN_POINT ( 'NONE', ( 36.21295323236918051, -2.299999999999999822, -62.10000000000018616 ) ) ; +#499 = CYLINDRICAL_SURFACE ( 'NONE', #1330, 60.30000000000072902 ) ; +#500 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#501 = ORIENTED_EDGE ( 'NONE', *, *, #100, .T. ) ; +#502 = EDGE_CURVE ( 'NONE', #277, #2481, #3595, .T. ) ; +#503 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#504 = AXIS2_PLACEMENT_3D ( 'NONE', #141, #870, #3565 ) ; +#505 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#506 = AXIS2_PLACEMENT_3D ( 'NONE', #1460, #159, #4199 ) ; +#507 = EDGE_LOOP ( 'NONE', ( #2563, #472 ) ) ; +#508 = EDGE_CURVE ( 'NONE', #3026, #3073, #1711, .T. ) ; +#509 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#510 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#511 = VECTOR ( 'NONE', #1274, 1000.000000000000000 ) ; +#512 = EDGE_LOOP ( 'NONE', ( #2443, #866 ) ) ; +#513 = FACE_BOUND ( 'NONE', #512, .T. ) ; +#514 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.500000000000000000, 24.46370172317528713 ) ) ; +#515 = ORIENTED_EDGE ( 'NONE', *, *, #2142, .T. ) ; +#516 = VERTEX_POINT ( 'NONE', #456 ) ; +#517 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#518 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#519 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -4.500000000000000000, 23.43027221244074454 ) ) ; +#520 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -1.199999999999999956, 37.73402833653199906 ) ) ; +#521 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -1.199999999999999956, 37.73402833653108246 ) ) ; +#522 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -1.199999999999999956, -2.300000000000006484 ) ) ; +#523 = VERTEX_POINT ( 'NONE', #828 ) ; +#524 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#525 = CYLINDRICAL_SURFACE ( 'NONE', #2032, 3.000000000000002665 ) ; +#526 = LINE ( 'NONE', #4194, #1608 ) ; +#527 = ORIENTED_EDGE ( 'NONE', *, *, #662, .F. ) ; +#528 = MECHANICAL_CONTEXT ( 'NONE', #3945, 'mechanical' ) ; +#529 = VECTOR ( 'NONE', #4047, 1000.000000000000000 ) ; +#530 = ADVANCED_FACE ( 'NONE', ( #3150, #4161 ), #439, .F. ) ; +#531 = CARTESIAN_POINT ( 'NONE', ( -41.25819837980453286, -1.199999999999999956, -46.01087987044774508 ) ) ; +#532 = VERTEX_POINT ( 'NONE', #1781 ) ; +#533 = CARTESIAN_POINT ( 'NONE', ( -39.75819837980453286, -4.500000000000000000, 0.000000000000000000 ) ) ; +#534 = VERTEX_POINT ( 'NONE', #1449 ) ; +#535 = CARTESIAN_POINT ( 'NONE', ( -38.53125606114259227, -1.199999999999999734, -43.43130005367003577 ) ) ; +#536 = CIRCLE ( 'NONE', #4077, 2.300000000000003375 ) ; +#537 = ORIENTED_EDGE ( 'NONE', *, *, #1405, .T. ) ; +#538 = CIRCLE ( 'NONE', #2639, 2.299999999999999822 ) ; +#539 = VERTEX_POINT ( 'NONE', #61 ) ; +#540 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#541 = EDGE_CURVE ( 'NONE', #1415, #1997, #2826, .T. ) ; +#542 = VECTOR ( 'NONE', #2830, 1000.000000000000000 ) ; +#543 = AXIS2_PLACEMENT_3D ( 'NONE', #2138, #2913, #4248 ) ; +#544 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#545 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#546 = LINE ( 'NONE', #3522, #886 ) ; +#547 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -2.399999999999999911, 36.73402833653199906 ) ) ; +#548 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#549 = ORIENTED_EDGE ( 'NONE', *, *, #3427, .F. ) ; +#550 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#551 = CIRCLE ( 'NONE', #3981, 2.000000000000001776 ) ; +#552 = EDGE_CURVE ( 'NONE', #523, #1998, #146, .T. ) ; +#553 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#554 = CIRCLE ( 'NONE', #271, 3.000000000000002665 ) ; +#555 = ORIENTED_EDGE ( 'NONE', *, *, #4020, .F. ) ; +#556 = FACE_OUTER_BOUND ( 'NONE', #1853, .T. ) ; +#557 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -1.199999999999999956, 2.299999999999998934 ) ) ; +#558 = EDGE_LOOP ( 'NONE', ( #2508, #2267, #41, #2974 ) ) ; +#559 = CYLINDRICAL_SURFACE ( 'NONE', #2582, 2.000000000000001776 ) ; +#560 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -1.199999999999999956, 36.73402833653199906 ) ) ; +#561 = ORIENTED_EDGE ( 'NONE', *, *, #4082, .T. ) ; +#562 = ORIENTED_EDGE ( 'NONE', *, *, #943, .F. ) ; +#563 = PLANE ( 'NONE', #2644 ) ; +#564 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -4.500000000000000000, 19.43027221244074099 ) ) ; +#565 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#566 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -1.199999999999999956, 39.03402833653201043 ) ) ; +#567 = EDGE_CURVE ( 'NONE', #202, #2223, #1119, .T. ) ; +#568 = EDGE_CURVE ( 'NONE', #404, #2433, #4140, .T. ) ; +#569 = CIRCLE ( 'NONE', #3021, 0.8000000000000645484 ) ; +#570 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#571 = ADVANCED_FACE ( 'NONE', ( #1796 ), #3129, .F. ) ; +#572 = FACE_BOUND ( 'NONE', #3033, .T. ) ; +#573 = ORIENTED_EDGE ( 'NONE', *, *, #1409, .F. ) ; +#574 = CIRCLE ( 'NONE', #144, 1.656733802117886567 ) ; +#575 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#576 = EDGE_CURVE ( 'NONE', #1874, #2411, #2125, .T. ) ; +#577 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#578 = CIRCLE ( 'NONE', #2259, 2.299999999999999822 ) ; +#579 = FACE_OUTER_BOUND ( 'NONE', #2528, .T. ) ; +#580 = AXIS2_PLACEMENT_3D ( 'NONE', #3865, #4110, #446 ) ; +#581 = EDGE_LOOP ( 'NONE', ( #1763, #3957, #4272, #4158 ) ) ; +#582 = CYLINDRICAL_SURFACE ( 'NONE', #3702, 2.299999999999999822 ) ; +#583 = EDGE_LOOP ( 'NONE', ( #3693, #278 ) ) ; +#584 = FACE_OUTER_BOUND ( 'NONE', #1803, .T. ) ; +#585 = ORIENTED_EDGE ( 'NONE', *, *, #3788, .T. ) ; +#586 = ORIENTED_EDGE ( 'NONE', *, *, #2491, .T. ) ; +#587 = CARTESIAN_POINT ( 'NONE', ( 39.75819837980377258, -1.199999999999999956, -46.01087987045168859 ) ) ; +#588 = AXIS2_PLACEMENT_3D ( 'NONE', #4188, #1541, #500 ) ; +#589 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#590 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -4.500000000000000000, 48.73725382063048528 ) ) ; +#591 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#592 = FACE_BOUND ( 'NONE', #2480, .T. ) ; +#593 = EDGE_CURVE ( 'NONE', #1804, #1264, #3101, .T. ) ; +#594 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#595 = ORIENTED_EDGE ( 'NONE', *, *, #3310, .T. ) ; +#596 = LINE ( 'NONE', #3247, #892 ) ; +#597 = CYLINDRICAL_SURFACE ( 'NONE', #2518, 0.9999999999999981126 ) ; +#598 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#599 = ORIENTED_EDGE ( 'NONE', *, *, #2980, .F. ) ; +#600 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#601 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -1.199999999999999956, -51.94976107412048805 ) ) ; +#602 = EDGE_CURVE ( 'NONE', #4021, #2881, #1141, .T. ) ; +#603 = ORIENTED_EDGE ( 'NONE', *, *, #3250, .T. ) ; +#604 = AXIS2_PLACEMENT_3D ( 'NONE', #3466, #3510, #3861 ) ; +#605 = ORIENTED_EDGE ( 'NONE', *, *, #1673, .T. ) ; +#606 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#607 = LINE ( 'NONE', #303, #1738 ) ; +#608 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#609 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2239 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1522, #4196, #1870 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#610 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -4.500000000000000000, 51.73725382063049238 ) ) ; +#611 = AXIS2_PLACEMENT_3D ( 'NONE', #2848, #1256, #2258 ) ; +#612 = CIRCLE ( 'NONE', #2424, 2.299999999999996270 ) ; +#613 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#614 = CARTESIAN_POINT ( 'NONE', ( 38.69635322281465761, -1.199999999999999734, -51.54561984842757738 ) ) ; +#615 = ORIENTED_EDGE ( 'NONE', *, *, #4018, .F. ) ; +#616 = DIRECTION ( 'NONE', ( 4.789037458359139614E-16, 0.000000000000000000, 1.000000000000000000 ) ) ; +#617 = VECTOR ( 'NONE', #2674, 1000.000000000000000 ) ; +#618 = EDGE_CURVE ( 'NONE', #1281, #2223, #1760, .T. ) ; +#619 = LINE ( 'NONE', #3879, #1269 ) ; +#620 = CIRCLE ( 'NONE', #1810, 0.8000000000001894485 ) ; +#621 = AXIS2_PLACEMENT_3D ( 'NONE', #4121, #3464, #3791 ) ; +#622 = EDGE_CURVE ( 'NONE', #4044, #3664, #3871, .T. ) ; +#623 = EDGE_CURVE ( 'NONE', #1894, #889, #3666, .T. ) ; +#624 = AXIS2_PLACEMENT_3D ( 'NONE', #2234, #897, #194 ) ; +#625 = EDGE_CURVE ( 'NONE', #539, #3537, #4120, .T. ) ; +#626 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#627 = ORIENTED_EDGE ( 'NONE', *, *, #1299, .T. ) ; +#628 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#629 = ORIENTED_EDGE ( 'NONE', *, *, #2708, .F. ) ; +#630 = LINE ( 'NONE', #1640, #3372 ) ; +#631 = ORIENTED_EDGE ( 'NONE', *, *, #1079, .T. ) ; +#632 = EDGE_LOOP ( 'NONE', ( #3517, #1062, #319, #3318 ) ) ; +#633 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#634 = FACE_BOUND ( 'NONE', #760, .T. ) ; +#635 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, 0.000000000000000000, -24.46370172317620373 ) ) ; +#636 = CYLINDRICAL_SURFACE ( 'NONE', #1317, 2.299999999999999822 ) ; +#637 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -1.199999999999999734, 51.73725382063049238 ) ) ; +#638 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#639 = ORIENTED_EDGE ( 'NONE', *, *, #20, .T. ) ; +#640 = AXIS2_PLACEMENT_3D ( 'NONE', #3229, #1306, #1238 ) ; +#641 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.000000000000000000, 0.000000000000000000 ) ) ; +#642 = AXIS2_PLACEMENT_3D ( 'NONE', #1481, #3492, #864 ) ; +#643 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#644 = EDGE_LOOP ( 'NONE', ( #2996, #2199, #4321, #2063 ) ) ; +#645 = ADVANCED_FACE ( 'NONE', ( #2763 ), #3789, .F. ) ; +#646 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.199999999999999956, -24.46370172317620373 ) ) ; +#647 = ORIENTED_EDGE ( 'NONE', *, *, #3677, .F. ) ; +#648 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#649 = AXIS2_PLACEMENT_3D ( 'NONE', #986, #3675, #3987 ) ; +#650 = ORIENTED_EDGE ( 'NONE', *, *, #453, .T. ) ; +#651 = AXIS2_PLACEMENT_3D ( 'NONE', #1049, #4073, #2007 ) ; +#652 = VERTEX_POINT ( 'NONE', #2144 ) ; +#653 = CYLINDRICAL_SURFACE ( 'NONE', #3049, 3.000000000000002665 ) ; +#654 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -2.399999999999999911, 0.000000000000000000 ) ) ; +#655 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#656 = CARTESIAN_POINT ( 'NONE', ( -1.422690090735478918E-12, 0.000000000000000000, 3.757844729834758368E-13 ) ) ; +#657 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#658 = CIRCLE ( 'NONE', #2542, 0.8000000000001200595 ) ; +#659 = CARTESIAN_POINT ( 'NONE', ( 28.01295323236935886, -3.169574499512514798, -62.10000000000018616 ) ) ; +#660 = CYLINDRICAL_SURFACE ( 'NONE', #1111, 5.799999999999999822 ) ; +#661 = ORIENTED_EDGE ( 'NONE', *, *, #4211, .T. ) ; +#662 = EDGE_CURVE ( 'NONE', #3405, #2950, #3479, .T. ) ; +#663 = LINE ( 'NONE', #3334, #4002 ) ; +#664 = ORIENTED_EDGE ( 'NONE', *, *, #770, .T. ) ; +#665 = VERTEX_POINT ( 'NONE', #522 ) ; +#666 = CARTESIAN_POINT ( 'NONE', ( 28.01295323236935886, -2.299999999999999822, 0.000000000000000000 ) ) ; +#667 = ORIENTED_EDGE ( 'NONE', *, *, #859, .F. ) ; +#668 = EDGE_CURVE ( 'NONE', #4046, #2970, #2055, .T. ) ; +#669 = EDGE_LOOP ( 'NONE', ( #1003, #777, #1586, #2236 ) ) ; +#670 = CYLINDRICAL_SURFACE ( 'NONE', #2214, 1.000000000000000888 ) ; +#671 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -1.199999999999999956, 0.9999999999999981126 ) ) ; +#672 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -4.500000000000000000, 24.43027221244074454 ) ) ; +#673 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#674 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#675 = ADVANCED_FACE ( 'NONE', ( #572, #1185 ), #1340, .F. ) ; +#676 = CARTESIAN_POINT ( 'NONE', ( -38.53125606114259227, -4.500000000000000000, -44.71207481725014787 ) ) ; +#677 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#678 = ORIENTED_EDGE ( 'NONE', *, *, #1576, .F. ) ; +#679 = AXIS2_PLACEMENT_3D ( 'NONE', #172, #2854, #3526 ) ; +#680 = APPROVAL_PERSON_ORGANIZATION ( #929, #758, #3706 ) ; +#681 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#682 = AXIS2_PLACEMENT_3D ( 'NONE', #2686, #687, #124 ) ; +#683 = AXIS2_PLACEMENT_3D ( 'NONE', #2940, #4318, #1650 ) ; +#684 = ADVANCED_FACE ( 'NONE', ( #241 ), #1561, .F. ) ; +#685 = VERTEX_POINT ( 'NONE', #1986 ) ; +#686 = VERTEX_POINT ( 'NONE', #1909 ) ; +#687 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#688 = AXIS2_PLACEMENT_3D ( 'NONE', #1972, #2982, #3966 ) ; +#689 = VERTEX_POINT ( 'NONE', #170 ) ; +#690 = EDGE_LOOP ( 'NONE', ( #476, #1717, #434, #4259 ) ) ; +#691 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, 0.000000000000000000, 36.73402833653108246 ) ) ; +#692 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -1.199999999999999734, -21.43027221244073743 ) ) ; +#693 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#694 = CARTESIAN_POINT ( 'NONE', ( -3.663396254167309962, -4.500000000000000000, -48.84822469919821941 ) ) ; +#695 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#696 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#697 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#698 = ORIENTED_EDGE ( 'NONE', *, *, #1272, .F. ) ; +#699 = EDGE_CURVE ( 'NONE', #1398, #277, #3901, .T. ) ; +#700 = EDGE_CURVE ( 'NONE', #2136, #3450, #2588, .T. ) ; +#701 = FACE_OUTER_BOUND ( 'NONE', #863, .T. ) ; +#702 = AXIS2_PLACEMENT_3D ( 'NONE', #3511, #3276, #953 ) ; +#703 = VECTOR ( 'NONE', #2722, 1000.000000000000000 ) ; +#704 = ORIENTED_EDGE ( 'NONE', *, *, #3400, .T. ) ; +#705 = ORIENTED_EDGE ( 'NONE', *, *, #284, .F. ) ; +#706 = CYLINDRICAL_SURFACE ( 'NONE', #1102, 0.9999999999999981126 ) ; +#707 = VECTOR ( 'NONE', #1310, 1000.000000000000000 ) ; +#708 = VERTEX_POINT ( 'NONE', #321 ) ; +#709 = ORIENTED_EDGE ( 'NONE', *, *, #3335, .T. ) ; +#710 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#711 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#712 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -2.399999999999999911, 35.73402833653108246 ) ) ; +#713 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#714 = PLANE ( 'NONE', #429 ) ; +#715 = VERTEX_POINT ( 'NONE', #2918 ) ; +#716 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#717 = CIRCLE ( 'NONE', #369, 2.000000000000001776 ) ; +#718 = LINE ( 'NONE', #3045, #1885 ) ; +#719 = EDGE_LOOP ( 'NONE', ( #2124, #561, #3236, #1093 ) ) ; +#720 = ADVANCED_FACE ( 'NONE', ( #1231 ), #4257, .T. ) ; +#721 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -2.399999999999999911, 5.799999999999999822 ) ) ; +#722 = ORIENTED_EDGE ( 'NONE', *, *, #2366, .F. ) ; +#723 = EDGE_LOOP ( 'NONE', ( #3694, #501, #491, #2795 ) ) ; +#724 = ORIENTED_EDGE ( 'NONE', *, *, #354, .F. ) ; +#725 = VERTEX_POINT ( 'NONE', #1206 ) ; +#726 = FACE_OUTER_BOUND ( 'NONE', #3984, .T. ) ; +#727 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -1.199999999999999734, 49.73725382063049238 ) ) ; +#728 = FACE_BOUND ( 'NONE', #3843, .T. ) ; +#729 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -1.199999999999999734, 21.43027221244938119 ) ) ; +#730 = EDGE_CURVE ( 'NONE', #55, #839, #1915, .T. ) ; +#731 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#732 = VERTEX_POINT ( 'NONE', #3502 ) ; +#733 = VERTEX_POINT ( 'NONE', #4210 ) ; +#734 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#735 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -1.199999999999999956, -51.94976107412048805 ) ) ; +#736 = ORIENTED_EDGE ( 'NONE', *, *, #2361, .F. ) ; +#737 = AXIS2_PLACEMENT_3D ( 'NONE', #3672, #2297, #3959 ) ; +#738 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#739 = AXIS2_PLACEMENT_3D ( 'NONE', #1303, #288, #3292 ) ; +#741 = AXIS2_PLACEMENT_3D ( 'NONE', #1422, #1025, #2439 ) ; +#740 = CIRCLE ( 'NONE', #184, 2.099999999999997868 ) ; +#742 = CIRCLE ( 'NONE', #2778, 2.299999999999999822 ) ; +#743 = VECTOR ( 'NONE', #3539, 1000.000000000000000 ) ; +#744 = ORIENTED_EDGE ( 'NONE', *, *, #2734, .T. ) ; +#745 = EDGE_LOOP ( 'NONE', ( #2602, #1879 ) ) ; +#746 = EDGE_LOOP ( 'NONE', ( #330, #233, #1311, #3398 ) ) ; +#747 = EDGE_CURVE ( 'NONE', #2970, #4046, #19, .T. ) ; +#748 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #203, #3883, ( #1347 ) ) ; +#749 = AXIS2_PLACEMENT_3D ( 'NONE', #821, #3844, #493 ) ; +#750 = ADVANCED_FACE ( 'NONE', ( #1664 ), #3174, .T. ) ; +#751 = ORIENTED_EDGE ( 'NONE', *, *, #1721, .T. ) ; +#752 = CARTESIAN_POINT ( 'NONE', ( 7.102951435054647665E-16, -2.399999999999999911, 46.14976107412048378 ) ) ; +#753 = CARTESIAN_POINT ( 'NONE', ( -39.75819837980543525, -1.199999999999999956, -56.99999999999999289 ) ) ; +#754 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -4.500000000000000000, 53.73725382063413036 ) ) ; +#755 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#756 = AXIS2_PLACEMENT_3D ( 'NONE', #883, #3319, #955 ) ; +#757 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -1.199999999999999734, 48.73725382063048528 ) ) ; +#758 = APPROVAL ( #3908, 'δָ¶¨' ) ; +#759 = ORIENTED_EDGE ( 'NONE', *, *, #3857, .T. ) ; +#760 = EDGE_LOOP ( 'NONE', ( #2551, #1131 ) ) ; +#761 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#762 = AXIS2_PLACEMENT_3D ( 'NONE', #2490, #3829, #2847 ) ; +#763 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#764 = EDGE_LOOP ( 'NONE', ( #2749, #1714, #381, #1678 ) ) ; +#765 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.199999999999999956, 51.94976107412048805 ) ) ; +#766 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -4.500000000000000000, 21.43027221244074099 ) ) ; +#767 = ORIENTED_EDGE ( 'NONE', *, *, #4239, .F. ) ; +#768 = EDGE_CURVE ( 'NONE', #1045, #1682, #3035, .T. ) ; +#769 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#770 = EDGE_CURVE ( 'NONE', #4336, #2433, #810, .T. ) ; +#771 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.199999999999999956, -26.76370172317620444 ) ) ; +#772 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -4.500000000000000000, 21.43027221244938119 ) ) ; +#773 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#774 = AXIS2_PLACEMENT_3D ( 'NONE', #3867, #4224, #1897 ) ; +#775 = CARTESIAN_POINT ( 'NONE', ( 3.122849337825750222E-15, 0.000000000000000000, -25.50000000000000000 ) ) ; +#776 = ORIENTED_EDGE ( 'NONE', *, *, #2701, .T. ) ; +#777 = ORIENTED_EDGE ( 'NONE', *, *, #4031, .T. ) ; +#778 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#779 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -4.500000000000000000, 21.43027221244074099 ) ) ; +#780 = EDGE_LOOP ( 'NONE', ( #3531, #1736, #2364, #2389 ) ) ; +#781 = AXIS2_PLACEMENT_3D ( 'NONE', #1666, #1967, #3000 ) ; +#782 = EDGE_CURVE ( 'NONE', #2689, #3935, #4038, .T. ) ; +#783 = AXIS2_PLACEMENT_3D ( 'NONE', #2625, #589, #1296 ) ; +#784 = AXIS2_PLACEMENT_3D ( 'NONE', #2224, #2971, #2619 ) ; +#785 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -1.199999999999999956, -51.94976107412048805 ) ) ; +#786 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#787 = ADVANCED_FACE ( 'NONE', ( #3850 ), #1887, .T. ) ; +#788 = VECTOR ( 'NONE', #2104, 1000.000000000000000 ) ; +#789 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980342726, 0.000000000000000000, -60.50000000000000000 ) ) ; +#790 = VERTEX_POINT ( 'NONE', #2562 ) ; +#791 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#792 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -2.399999999999999911, -51.94976107412048805 ) ) ; +#793 = ORIENTED_EDGE ( 'NONE', *, *, #2375, .T. ) ; +#794 = CARTESIAN_POINT ( 'NONE', ( -41.25819837980453286, 0.000000000000000000, -46.01087987044774508 ) ) ; +#795 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -4.500000000000000000, -33.87880010381454099 ) ) ; +#796 = ADVANCED_FACE ( 'NONE', ( #898 ), #2235, .T. ) ; +#797 = VERTEX_POINT ( 'NONE', #671 ) ; +#798 = VERTEX_POINT ( 'NONE', #2709 ) ; +#799 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.000000000000000000, 0.000000000000000000 ) ) ; +#800 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#801 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -2.399999999999999911, 36.73402833653108246 ) ) ; +#802 = ORIENTED_EDGE ( 'NONE', *, *, #2701, .F. ) ; +#803 = EDGE_CURVE ( 'NONE', #4064, #1435, #1239, .T. ) ; +#804 = ADVANCED_FACE ( 'NONE', ( #2005, #3674 ), #3431, .T. ) ; +#805 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#806 = LINE ( 'NONE', #2147, #542 ) ; +#807 = AXIS2_PLACEMENT_3D ( 'NONE', #1624, #3917, #3585 ) ; +#808 = ORIENTED_EDGE ( 'NONE', *, *, #3596, .T. ) ; +#809 = ORIENTED_EDGE ( 'NONE', *, *, #1431, .F. ) ; +#810 = CIRCLE ( 'NONE', #611, 2.000000000000001776 ) ; +#811 = AXIS2_PLACEMENT_3D ( 'NONE', #3192, #4182, #3827 ) ; +#812 = CC_DESIGN_SECURITY_CLASSIFICATION ( #3688, ( #2350 ) ) ; +#813 = CALENDAR_DATE ( 2026, 29, 9 ) ; +#814 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#815 = ORIENTED_EDGE ( 'NONE', *, *, #3480, .T. ) ; +#816 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -2.399999999999999911, 42.53402833653199622 ) ) ; +#817 = CIRCLE ( 'NONE', #3201, 2.000000000000001776 ) ; +#818 = CARTESIAN_POINT ( 'NONE', ( 28.01295323236935886, -3.169574499512514798, -63.50000000000018474 ) ) ; +#819 = ORIENTED_EDGE ( 'NONE', *, *, #1800, .T. ) ; +#820 = VERTEX_POINT ( 'NONE', #3758 ) ; +#821 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -2.399999999999999911, 0.000000000000000000 ) ) ; +#822 = CARTESIAN_POINT ( 'NONE', ( -1.422690090735478918E-12, -1.199999999999999956, 60.30000000000110560 ) ) ; +#823 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#824 = ORIENTED_EDGE ( 'NONE', *, *, #3852, .T. ) ; +#825 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#826 = AXIS2_PLACEMENT_3D ( 'NONE', #872, #4186, #2539 ) ; +#827 = FACE_BOUND ( 'NONE', #2909, .T. ) ; +#828 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -2.399999999999999911, -0.9999999999999981126 ) ) ; +#829 = EDGE_CURVE ( 'NONE', #4280, #790, #1438, .T. ) ; +#830 = EDGE_LOOP ( 'NONE', ( #3175, #2064 ) ) ; +#831 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#832 = EDGE_CURVE ( 'NONE', #219, #399, #4048, .T. ) ; +#833 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -1.199999999999999956, 36.73402833653108246 ) ) ; +#834 = ORIENTED_EDGE ( 'NONE', *, *, #2985, .F. ) ; +#835 = ADVANCED_FACE ( 'NONE', ( #1047 ), #344, .T. ) ; +#836 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .AHEAD. ) ; +#837 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#838 = VECTOR ( 'NONE', #903, 1000.000000000000000 ) ; +#839 = VERTEX_POINT ( 'NONE', #383 ) ; +#840 = LINE ( 'NONE', #4170, #2117 ) ; +#841 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -2.399999999999999911, -50.94976107412048094 ) ) ; +#842 = EDGE_LOOP ( 'NONE', ( #45, #3375 ) ) ; +#843 = ORIENTED_EDGE ( 'NONE', *, *, #3570, .T. ) ; +#844 = CYLINDRICAL_SURFACE ( 'NONE', #737, 0.9999999999999981126 ) ; +#845 = VECTOR ( 'NONE', #3641, 1000.000000000000000 ) ; +#846 = FACE_OUTER_BOUND ( 'NONE', #3064, .T. ) ; +#847 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#848 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 4.789037458359139614E-16 ) ) ; +#849 = AXIS2_PLACEMENT_3D ( 'NONE', #1850, #1528, #3233 ) ; +#850 = LINE ( 'NONE', #145, #1395 ) ; +#851 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#852 = EDGE_LOOP ( 'NONE', ( #815, #1555 ) ) ; +#853 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -4.500000000000000000, -21.43027221244938119 ) ) ; +#854 = EDGE_CURVE ( 'NONE', #387, #3814, #3756, .T. ) ; +#855 = CIRCLE ( 'NONE', #3790, 1.000000000000000888 ) ; +#856 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#857 = ORIENTED_EDGE ( 'NONE', *, *, #1409, .T. ) ; +#858 = EDGE_LOOP ( 'NONE', ( #378, #3653, #3605, #497, #1746 ) ) ; +#859 = EDGE_CURVE ( 'NONE', #3937, #2383, #1518, .T. ) ; +#860 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#861 = ORIENTED_EDGE ( 'NONE', *, *, #4270, .T. ) ; +#862 = FACE_BOUND ( 'NONE', #1041, .T. ) ; +#863 = EDGE_LOOP ( 'NONE', ( #555, #3083, #3460, #2575 ) ) ; +#864 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#865 = ORIENTED_EDGE ( 'NONE', *, *, #3536, .T. ) ; +#866 = ORIENTED_EDGE ( 'NONE', *, *, #3509, .F. ) ; +#867 = DIRECTION ( 'NONE', ( -6.314330739953384296E-16, 0.000000000000000000, 1.000000000000000000 ) ) ; +#868 = FACE_BOUND ( 'NONE', #2412, .T. ) ; +#869 = EDGE_CURVE ( 'NONE', #733, #3555, #3057, .T. ) ; +#870 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#871 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.000000000000000000, 0.000000000000000000 ) ) ; +#872 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -1.199999999999999956, 0.000000000000000000 ) ) ; +#873 = CARTESIAN_POINT ( 'NONE', ( -41.25819837980453286, -1.199999999999999956, -57.80000000000018190 ) ) ; +#874 = EDGE_LOOP ( 'NONE', ( #3178, #3181 ) ) ; +#875 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#876 = CYLINDRICAL_SURFACE ( 'NONE', #992, 3.000000000000002665 ) ; +#877 = ORIENTED_EDGE ( 'NONE', *, *, #86, .T. ) ; +#878 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #1088 ) ; +#879 = AXIS2_PLACEMENT_3D ( 'NONE', #3714, #176, #3159 ) ; +#880 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#881 = ORIENTED_EDGE ( 'NONE', *, *, #2453, .F. ) ; +#882 = EDGE_CURVE ( 'NONE', #1808, #1302, #2770, .T. ) ; +#883 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -4.500000000000000000, 21.43027221244938119 ) ) ; +#884 = VERTEX_POINT ( 'NONE', #2730 ) ; +#885 = CYLINDRICAL_SURFACE ( 'NONE', #3370, 60.30000000000072902 ) ; +#886 = VECTOR ( 'NONE', #3543, 1000.000000000000000 ) ; +#887 = EDGE_CURVE ( 'NONE', #2271, #1195, #4027, .T. ) ; +#888 = CC_DESIGN_APPROVAL ( #433, ( #2350 ) ) ; +#889 = VERTEX_POINT ( 'NONE', #2692 ) ; +#890 = VERTEX_POINT ( 'NONE', #1767 ) ; +#891 = CARTESIAN_POINT ( 'NONE', ( 39.75819837980377258, -1.199999999999999956, -46.01087987045168859 ) ) ; +#892 = VECTOR ( 'NONE', #616, 1000.000000000000000 ) ; +#893 = CIRCLE ( 'NONE', #4111, 3.000000000000002665 ) ; +#894 = FACE_BOUND ( 'NONE', #391, .T. ) ; +#895 = CYLINDRICAL_SURFACE ( 'NONE', #1975, 3.000000000000002665 ) ; +#896 = LINE ( 'NONE', #4254, #2567 ) ; +#897 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#898 = FACE_OUTER_BOUND ( 'NONE', #558, .T. ) ; +#899 = ORIENTED_EDGE ( 'NONE', *, *, #349, .F. ) ; +#900 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#901 = CIRCLE ( 'NONE', #1038, 1.000000000000000888 ) ; +#902 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#903 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#904 = ORIENTED_EDGE ( 'NONE', *, *, #3131, .T. ) ; +#905 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#906 = ORIENTED_EDGE ( 'NONE', *, *, #3070, .F. ) ; +#907 = CARTESIAN_POINT ( 'NONE', ( 36.21295323236918051, 0.000000000000000000, -63.50000000000018474 ) ) ; +#908 = EDGE_CURVE ( 'NONE', #467, #3704, #4174, .T. ) ; +#909 = ORIENTED_EDGE ( 'NONE', *, *, #3644, .T. ) ; +#910 = ADVANCED_FACE ( 'NONE', ( #1750 ), #2336, .F. ) ; +#911 = CIRCLE ( 'NONE', #1549, 1.000000000000000888 ) ; +#912 = ORIENTED_EDGE ( 'NONE', *, *, #502, .T. ) ; +#913 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#914 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.500000000000000000, 22.16370172317528642 ) ) ; +#915 = CARTESIAN_POINT ( 'NONE', ( 7.102951435054647665E-16, -2.399999999999999911, 46.14976107412048378 ) ) ; +#916 = LINE ( 'NONE', #2537, #1386 ) ; +#917 = VECTOR ( 'NONE', #1327, 1000.000000000000000 ) ; +#918 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#919 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980525335, -1.199999999999999956, -58.30000000000018190 ) ) ; +#920 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#921 = VERTEX_POINT ( 'NONE', #3696 ) ; +#922 = EDGE_CURVE ( 'NONE', #890, #947, #261, .T. ) ; +#923 = AXIS2_PLACEMENT_3D ( 'NONE', #1980, #2621, #3956 ) ; +#924 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980342726, 0.000000000000000000, -61.80000000000018900 ) ) ; +#925 = DESIGN_CONTEXT ( 'detailed design', #1088, 'design' ) ; +#926 = LINE ( 'NONE', #1612, #1194 ) ; +#927 = EDGE_CURVE ( 'NONE', #3424, #207, #2079, .T. ) ; +#928 = AXIS2_PLACEMENT_3D ( 'NONE', #2185, #451, #119 ) ; +#929 = PERSON_AND_ORGANIZATION ( #1235, #2283 ) ; +#930 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -2.399999999999999911, -51.94976107412048805 ) ) ; +#931 = AXIS2_PLACEMENT_3D ( 'NONE', #489, #2836, #1479 ) ; +#932 = ORIENTED_EDGE ( 'NONE', *, *, #3088, .F. ) ; +#933 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, 0.000000000000000000, -2.300000000000006484 ) ) ; +#934 = ORIENTED_EDGE ( 'NONE', *, *, #2278, .F. ) ; +#935 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -1.199999999999999734, -21.43027221244938119 ) ) ; +#936 = EDGE_LOOP ( 'NONE', ( #1930, #1018 ) ) ; +#937 = AXIS2_PLACEMENT_3D ( 'NONE', #3608, #961, #3307 ) ; +#938 = VERTEX_POINT ( 'NONE', #727 ) ; +#939 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -1.199999999999999734, 54.73725382063413036 ) ) ; +#940 = AXIS2_PLACEMENT_3D ( 'NONE', #3808, #3109, #1433 ) ; +#941 = LINE ( 'NONE', #914, #511 ) ; +#942 = FACE_OUTER_BOUND ( 'NONE', #431, .T. ) ; +#943 = EDGE_CURVE ( 'NONE', #3424, #1672, #2067, .T. ) ; +#944 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -1.199999999999999956, 36.73402833653108246 ) ) ; +#945 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -4.500000000000000000, 21.43027221244938119 ) ) ; +#946 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, 0.000000000000000000, 24.46370172317528713 ) ) ; +#947 = VERTEX_POINT ( 'NONE', #3114 ) ; +#948 = ADVANCED_FACE ( 'NONE', ( #2525 ), #3862, .T. ) ; +#949 = EDGE_CURVE ( 'NONE', #2530, #2174, #1737, .T. ) ; +#950 = LINE ( 'NONE', #244, #2568 ) ; +#951 = EDGE_CURVE ( 'NONE', #2383, #1415, #3137, .T. ) ; +#952 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#953 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#954 = EDGE_LOOP ( 'NONE', ( #3690, #254, #3340, #1143 ) ) ; +#955 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#956 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#957 = EDGE_LOOP ( 'NONE', ( #3354, #4096 ) ) ; +#958 = APPROVAL_PERSON_ORGANIZATION ( #154, #2442, #3553 ) ; +#959 = ORIENTED_EDGE ( 'NONE', *, *, #3944, .F. ) ; +#960 = CARTESIAN_POINT ( 'NONE', ( 37.89635322281446861, -4.299999999999999822, 0.000000000000000000 ) ) ; +#961 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#962 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#963 = AXIS2_PLACEMENT_3D ( 'NONE', #3658, #1364, #1991 ) ; +#964 = FACE_BOUND ( 'NONE', #998, .T. ) ; +#966 = CIRCLE ( 'NONE', #4326, 25.50000000000000000 ) ; +#965 = VECTOR ( 'NONE', #2176, 1000.000000000000000 ) ; +#967 = EDGE_CURVE ( 'NONE', #516, #3050, #2923, .T. ) ; +#968 = VECTOR ( 'NONE', #2878, 1000.000000000000000 ) ; +#969 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#970 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#971 = ORIENTED_EDGE ( 'NONE', *, *, #782, .T. ) ; +#972 = CIRCLE ( 'NONE', #2857, 3.000000000000002665 ) ; +#973 = ADVANCED_FACE ( 'NONE', ( #1124 ), #110, .F. ) ; +#974 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.299999999999999822, 0.000000000000000000 ) ) ; +#975 = CIRCLE ( 'NONE', #4263, 5.799999999999999822 ) ; +#976 = VECTOR ( 'NONE', #4098, 1000.000000000000000 ) ; +#977 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#978 = VERTEX_POINT ( 'NONE', #3207 ) ; +#979 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#980 = ORIENTED_EDGE ( 'NONE', *, *, #2515, .F. ) ; +#981 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#982 = EDGE_CURVE ( 'NONE', #2867, #3793, #4197, .T. ) ; +#983 = EDGE_LOOP ( 'NONE', ( #2452, #1595, #3396, #3011 ) ) ; +#984 = ORIENTED_EDGE ( 'NONE', *, *, #2019, .F. ) ; +#985 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -4.500000000000000000, -21.43027221244938119 ) ) ; +#986 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -4.500000000000000000, -51.94976107412048805 ) ) ; +#987 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#988 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -4.500000000000000000, -21.43027221244073743 ) ) ; +#989 = FACE_OUTER_BOUND ( 'NONE', #2227, .T. ) ; +#990 = CARTESIAN_POINT ( 'NONE', ( 29.18020398454808628, -3.669999999999962625, -63.80000000000018900 ) ) ; +#991 = VERTEX_POINT ( 'NONE', #1458 ) ; +#992 = AXIS2_PLACEMENT_3D ( 'NONE', #1914, #268, #952 ) ; +#993 = VECTOR ( 'NONE', #544, 1000.000000000000000 ) ; +#994 = LINE ( 'NONE', #4305, #4349 ) ; +#995 = AXIS2_PLACEMENT_3D ( 'NONE', #1261, #577, #3598 ) ; +#996 = ADVANCED_FACE ( 'NONE', ( #2198, #204 ), #444, .T. ) ; +#997 = CARTESIAN_POINT ( 'NONE', ( -1.422690090735478918E-12, -1.199999999999999956, 60.30000000000110560 ) ) ; +#998 = EDGE_LOOP ( 'NONE', ( #2965, #2347 ) ) ; +#999 = AXIS2_PLACEMENT_3D ( 'NONE', #238, #3942, #3609 ) ; +#1000 = ORIENTED_EDGE ( 'NONE', *, *, #3727, .T. ) ; +#1001 = FACE_BOUND ( 'NONE', #2663, .T. ) ; +#1002 = EDGE_CURVE ( 'NONE', #1411, #4336, #1806, .T. ) ; +#1003 = ORIENTED_EDGE ( 'NONE', *, *, #220, .F. ) ; +#1004 = AXIS2_PLACEMENT_3D ( 'NONE', #801, #2484, #3873 ) ; +#1005 = EDGE_LOOP ( 'NONE', ( #3913, #1357, #1326, #351 ) ) ; +#1006 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -2.399999999999999911, 0.000000000000000000 ) ) ; +#1007 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#1008 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1009 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -2.399999999999999911, 0.000000000000000000 ) ) ; +#1010 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -1.199999999999999956, 0.000000000000000000 ) ) ; +#1011 = CIRCLE ( 'NONE', #2899, 1.269999999999969154 ) ; +#1012 = CARTESIAN_POINT ( 'NONE', ( 35.02020398454638439, -3.670000000000002593, -63.50000000000018474 ) ) ; +#1013 = EDGE_CURVE ( 'NONE', #978, #2911, #740, .T. ) ; +#1014 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.199999999999999956, 24.46370172317528713 ) ) ; +#1015 = EDGE_LOOP ( 'NONE', ( #4145, #1434 ) ) ; +#1016 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1017 = ORIENTED_EDGE ( 'NONE', *, *, #301, .T. ) ; +#1018 = ORIENTED_EDGE ( 'NONE', *, *, #2360, .T. ) ; +#1019 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1020 = VERTEX_POINT ( 'NONE', #1786 ) ; +#1021 = EDGE_LOOP ( 'NONE', ( #3054, #971 ) ) ; +#1022 = CARTESIAN_POINT ( 'NONE', ( -39.75819837980453286, -1.199999999999999956, -46.01087987044774508 ) ) ; +#1023 = ADVANCED_FACE ( 'NONE', ( #466 ), #1145, .F. ) ; +#1024 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, -6.314330739953384296E-16 ) ) ; +#1025 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1026 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1027 = ADVANCED_FACE ( 'NONE', ( #1477 ), #2885, .F. ) ; +#1028 = LINE ( 'NONE', #3001, #2637 ) ; +#1029 = PLANE ( 'NONE', #2293 ) ; +#1030 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #3684, #2570, ( #2350 ) ) ; +#1031 = VECTOR ( 'NONE', #2027, 1000.000000000000000 ) ; +#1032 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1033 = ORIENTED_EDGE ( 'NONE', *, *, #1110, .F. ) ; +#1034 = VECTOR ( 'NONE', #178, 1000.000000000000000 ) ; +#1035 = AXIS2_PLACEMENT_3D ( 'NONE', #282, #674, #2320 ) ; +#1036 = CYLINDRICAL_SURFACE ( 'NONE', #3787, 1.000000000000000888 ) ; +#1037 = VECTOR ( 'NONE', #2445, 1000.000000000000000 ) ; +#1038 = AXIS2_PLACEMENT_3D ( 'NONE', #735, #763, #1445 ) ; +#1039 = VERTEX_POINT ( 'NONE', #1107 ) ; +#1040 = CIRCLE ( 'NONE', #2430, 2.099999999999997868 ) ; +#1041 = EDGE_LOOP ( 'NONE', ( #4226, #1072 ) ) ; +#1042 = CARTESIAN_POINT ( 'NONE', ( -1.818843520099016230E-12, -2.399999999999999911, -52.94976107412048805 ) ) ; +#1043 = AXIS2_PLACEMENT_3D ( 'NONE', #1054, #3744, #1735 ) ; +#1044 = VERTEX_POINT ( 'NONE', #3776 ) ; +#1045 = VERTEX_POINT ( 'NONE', #1193 ) ; +#1046 = CYLINDRICAL_SURFACE ( 'NONE', #3267, 2.000000000000001776 ) ; +#1047 = FACE_OUTER_BOUND ( 'NONE', #2073, .T. ) ; +#1048 = CYLINDRICAL_SURFACE ( 'NONE', #1868, 5.799999999999999822 ) ; +#1049 = CARTESIAN_POINT ( 'NONE', ( 22.78180162019453192, -1.199999999999999956, -58.30000000000018190 ) ) ; +#1050 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -4.500000000000000000, -51.94976107412048805 ) ) ; +#1051 = EDGE_CURVE ( 'NONE', #1435, #4064, #1797, .T. ) ; +#1052 = ORIENTED_EDGE ( 'NONE', *, *, #3158, .F. ) ; +#1053 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -1.199999999999999956, 0.000000000000000000 ) ) ; +#1054 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -2.399999999999999911, 0.000000000000000000 ) ) ; +#1055 = VERTEX_POINT ( 'NONE', #771 ) ; +#1056 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -1.199999999999999734, 48.73725382063412326 ) ) ; +#1057 = DATE_TIME_ROLE ( 'classification_date' ) ; +#1058 = CIRCLE ( 'NONE', #3643, 3.000000000000002665 ) ; +#1059 = AXIS2_PLACEMENT_3D ( 'NONE', #2714, #695, #3371 ) ; +#1060 = EDGE_CURVE ( 'NONE', #2261, #3138, #3472, .T. ) ; +#1061 = ORIENTED_EDGE ( 'NONE', *, *, #24, .T. ) ; +#1062 = ORIENTED_EDGE ( 'NONE', *, *, #2471, .T. ) ; +#1063 = FACE_OUTER_BOUND ( 'NONE', #421, .T. ) ; +#1064 = AXIS2_PLACEMENT_3D ( 'NONE', #470, #1811, #4152 ) ; +#1065 = ORIENTED_EDGE ( 'NONE', *, *, #699, .T. ) ; +#1066 = EDGE_LOOP ( 'NONE', ( #153, #2953, #1372, #2395, #1983, #4162 ) ) ; +#1067 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -4.500000000000000000, 48.73725382063412326 ) ) ; +#1068 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1069 = CARTESIAN_POINT ( 'NONE', ( 29.18020398454808628, -3.669999999999962625, -63.50000000000018474 ) ) ; +#1070 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -4.500000000000000000, -24.43027221244074099 ) ) ; +#1071 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1072 = ORIENTED_EDGE ( 'NONE', *, *, #4306, .F. ) ; +#1073 = EDGE_LOOP ( 'NONE', ( #286, #1307 ) ) ; +#1074 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -1.199999999999999734, 23.43027221244938474 ) ) ; +#1075 = CARTESIAN_POINT ( 'NONE', ( -3.663396254167309962, -4.500000000000000000, -48.84822469919821941 ) ) ; +#1076 = ORIENTED_EDGE ( 'NONE', *, *, #2039, .T. ) ; +#1077 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1078 = ADVANCED_FACE ( 'NONE', ( #1826 ), #3160, .T. ) ; +#1079 = EDGE_CURVE ( 'NONE', #3344, #2410, #3148, .T. ) ; +#1080 = EDGE_CURVE ( 'NONE', #2911, #3864, #3600, .T. ) ; +#1081 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'detail', '', ( #1347 ) ) ; +#1082 = ORIENTED_EDGE ( 'NONE', *, *, #2340, .T. ) ; +#1083 = VERTEX_POINT ( 'NONE', #2617 ) ; +#1084 = VERTEX_POINT ( 'NONE', #557 ) ; +#1085 = ORIENTED_EDGE ( 'NONE', *, *, #3482, .F. ) ; +#1086 = CYLINDRICAL_SURFACE ( 'NONE', #3964, 1.500000000007918555 ) ; +#1087 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1088 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ; +#1089 = CARTESIAN_POINT ( 'NONE', ( -39.75819837980544236, 0.000000000000000000, -46.01087987044774508 ) ) ; +#1090 = FACE_OUTER_BOUND ( 'NONE', #4173, .T. ) ; +#1091 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1092 = EDGE_LOOP ( 'NONE', ( #4003, #1962, #2368, #877 ) ) ; +#1093 = ORIENTED_EDGE ( 'NONE', *, *, #1121, .F. ) ; +#1094 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1095 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#1096 = VERTEX_POINT ( 'NONE', #1893 ) ; +#1097 = AXIS2_PLACEMENT_3D ( 'NONE', #3366, #28, #3077 ) ; +#1098 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1099 = CIRCLE ( 'NONE', #1667, 0.8000000000001894485 ) ; +#1100 = EDGE_CURVE ( 'NONE', #3103, #2751, #292, .T. ) ; +#1101 = ADVANCED_FACE ( 'NONE', ( #3976 ), #3577, .F. ) ; +#1102 = AXIS2_PLACEMENT_3D ( 'NONE', #2045, #786, #1842 ) ; +#1103 = AXIS2_PLACEMENT_3D ( 'NONE', #2033, #716, #1792 ) ; +#1104 = FACE_BOUND ( 'NONE', #3494, .T. ) ; +#1105 = ORIENTED_EDGE ( 'NONE', *, *, #2021, .T. ) ; +#1106 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1107 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -4.500000000000000000, 18.43027221244074099 ) ) ; +#1108 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1109 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1110 = EDGE_CURVE ( 'NONE', #4122, #2661, #1622, .T. ) ; +#1111 = AXIS2_PLACEMENT_3D ( 'NONE', #3925, #1280, #677 ) ; +#1112 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1113 = VERTEX_POINT ( 'NONE', #3251 ) ; +#1114 = EDGE_LOOP ( 'NONE', ( #1577, #736 ) ) ; +#1115 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1116 = ADVANCED_FACE ( 'NONE', ( #3624 ), #272, .T. ) ; +#1117 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1118 = ORIENTED_EDGE ( 'NONE', *, *, #1276, .F. ) ; +#1119 = LINE ( 'NONE', #420, #4017 ) ; +#1120 = ORIENTED_EDGE ( 'NONE', *, *, #3256, .T. ) ; +#1121 = EDGE_CURVE ( 'NONE', #3814, #387, #1058, .T. ) ; +#1122 = ORIENTED_EDGE ( 'NONE', *, *, #3454, .T. ) ; +#1123 = AXIS2_PLACEMENT_3D ( 'NONE', #974, #2306, #1995 ) ; +#1124 = FACE_OUTER_BOUND ( 'NONE', #120, .T. ) ; +#1125 = AXIS2_PLACEMENT_3D ( 'NONE', #1855, #139, #1882 ) ; +#1126 = VERTEX_POINT ( 'NONE', #2638 ) ; +#1127 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980525335, 0.000000000000000000, -58.30000000000018190 ) ) ; +#1128 = VECTOR ( 'NONE', #2866, 1000.000000000000000 ) ; +#1129 = ADVANCED_FACE ( 'NONE', ( #579 ), #2309, .F. ) ; +#1130 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1131 = ORIENTED_EDGE ( 'NONE', *, *, #2409, .T. ) ; +#1132 = ORIENTED_EDGE ( 'NONE', *, *, #376, .T. ) ; +#1133 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.199999999999999956, 0.000000000000000000 ) ) ; +#1134 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1135 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.000000000000000000, 0.000000000000000000 ) ) ; +#1136 = ORIENTED_EDGE ( 'NONE', *, *, #305, .F. ) ; +#1137 = VECTOR ( 'NONE', #565, 1000.000000000000000 ) ; +#1138 = CIRCLE ( 'NONE', #2613, 4.799999999999964295 ) ; +#1139 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, 0.000000000000000000, -24.46370172317620373 ) ) ; +#1140 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1141 = CIRCLE ( 'NONE', #307, 3.000000000000002665 ) ; +#1142 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -4.299999999999999822, -50.74561984842738838 ) ) ; +#1143 = ORIENTED_EDGE ( 'NONE', *, *, #2170, .F. ) ; +#1144 = DATE_TIME_ROLE ( 'creation_date' ) ; +#1145 = PLANE ( 'NONE', #2004 ) ; +#1146 = ORIENTED_EDGE ( 'NONE', *, *, #859, .T. ) ; +#1147 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1148 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -1.199999999999999734, 53.73725382063049238 ) ) ; +#1149 = ORIENTED_EDGE ( 'NONE', *, *, #3836, .T. ) ; +#1150 = EDGE_CURVE ( 'NONE', #3937, #1997, #4264, .T. ) ; +#1151 = EDGE_LOOP ( 'NONE', ( #297, #252, #4246, #3436 ) ) ; +#1152 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.399999999999999911, 51.94976107412048805 ) ) ; +#1153 = EDGE_CURVE ( 'NONE', #2555, #1892, #2594, .T. ) ; +#1154 = FACE_BOUND ( 'NONE', #2727, .T. ) ; +#1155 = LINE ( 'NONE', #3824, #3403 ) ; +#1156 = ORIENTED_EDGE ( 'NONE', *, *, #2633, .T. ) ; +#1157 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, 0.000000000000000000, 34.43402833653108530 ) ) ; +#1158 = EDGE_CURVE ( 'NONE', #1718, #3339, #3932, .T. ) ; +#1159 = CARTESIAN_POINT ( 'NONE', ( -1.422690090735478918E-12, -1.199999999999999956, 3.757844729834758368E-13 ) ) ; +#1160 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1161 = VERTEX_POINT ( 'NONE', #1957 ) ; +#1162 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -4.500000000000000000, 21.43027221244074099 ) ) ; +#1163 = AXIS2_PLACEMENT_3D ( 'NONE', #2603, #3940, #2273 ) ; +#1164 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1165 = ORIENTED_EDGE ( 'NONE', *, *, #214, .T. ) ; +#1167 = AXIS2_PLACEMENT_3D ( 'NONE', #2356, #1439, #3368 ) ; +#1166 = AXIS2_PLACEMENT_3D ( 'NONE', #3367, #2355, #363 ) ; +#1168 = CIRCLE ( 'NONE', #2846, 2.299999999999999822 ) ; +#1169 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -1.199999999999999956, 0.000000000000000000 ) ) ; +#1170 = EDGE_LOOP ( 'NONE', ( #2426, #147, #3933, #2620 ) ) ; +#1171 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1172 = VECTOR ( 'NONE', #2738, 1000.000000000000000 ) ; +#1173 = PLANE ( 'NONE', #849 ) ; +#1174 = EDGE_LOOP ( 'NONE', ( #1225, #442, #3885, #2304 ) ) ; +#1175 = VERTEX_POINT ( 'NONE', #1571 ) ; +#1176 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1177 = VECTOR ( 'NONE', #1333, 1000.000000000000000 ) ; +#1178 = CARTESIAN_POINT ( 'NONE', ( 25.96770808493670302, -1.199999999999999956, -60.30000000000018900 ) ) ; +#1179 = LINE ( 'NONE', #1835, #2076 ) ; +#1180 = ADVANCED_FACE ( 'NONE', ( #1655 ), #1976, .F. ) ; +#1181 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -4.500000000000000000, 48.73725382063048528 ) ) ; +#1182 = VECTOR ( 'NONE', #1843, 1000.000000000000000 ) ; +#1183 = AXIS2_PLACEMENT_3D ( 'NONE', #4209, #3591, #3923 ) ; +#1184 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1185 = FACE_OUTER_BOUND ( 'NONE', #1530, .T. ) ; +#1186 = ORIENTED_EDGE ( 'NONE', *, *, #4124, .F. ) ; +#1187 = EDGE_CURVE ( 'NONE', #689, #2048, #64, .T. ) ; +#1188 = CARTESIAN_POINT ( 'NONE', ( 2.816687638038910084E-16, -1.199999999999999956, 49.64976107412048378 ) ) ; +#1189 = LINE ( 'NONE', #4238, #3927 ) ; +#1190 = ORIENTED_EDGE ( 'NONE', *, *, #2196, .F. ) ; +#1191 = ORIENTED_EDGE ( 'NONE', *, *, #623, .F. ) ; +#1192 = EDGE_CURVE ( 'NONE', #2314, #3405, #1614, .T. ) ; +#1193 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -4.500000000000000000, -37.19226770805031634 ) ) ; +#1194 = VECTOR ( 'NONE', #4216, 1000.000000000000000 ) ; +#1195 = VERTEX_POINT ( 'NONE', #2969 ) ; +#1196 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1197 = ORIENTED_EDGE ( 'NONE', *, *, #768, .F. ) ; +#1198 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -2.399999999999999911, 42.53402833653107962 ) ) ; +#1199 = EDGE_LOOP ( 'NONE', ( #2719, #861, #2372, #3210 ) ) ; +#1200 = ORIENTED_EDGE ( 'NONE', *, *, #2172, .T. ) ; +#1201 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -1.199999999999999956, 5.799999999999999822 ) ) ; +#1202 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -4.500000000000000000, -18.43027221244937763 ) ) ; +#1203 = CARTESIAN_POINT ( 'NONE', ( -1.422690090735478918E-12, -1.199999999999999956, 3.757844729834758368E-13 ) ) ; +#1204 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1205 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1206 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -2.399999999999999911, 30.93402833653108175 ) ) ; +#1207 = ORIENTED_EDGE ( 'NONE', *, *, #3965, .F. ) ; +#1208 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1209 = AXIS2_PLACEMENT_3D ( 'NONE', #729, #1440, #3698 ) ; +#1210 = EDGE_CURVE ( 'NONE', #4118, #2684, #1916, .T. ) ; +#1211 = FACE_OUTER_BOUND ( 'NONE', #746, .T. ) ; +#1212 = EDGE_CURVE ( 'NONE', #4099, #117, #2315, .T. ) ; +#1213 = EDGE_CURVE ( 'NONE', #1430, #219, #1963, .T. ) ; +#1214 = FACE_OUTER_BOUND ( 'NONE', #2618, .T. ) ; +#1215 = VERTEX_POINT ( 'NONE', #997 ) ; +#1216 = AXIS2_PLACEMENT_3D ( 'NONE', #3546, #851, #1007 ) ; +#1217 = EDGE_CURVE ( 'NONE', #732, #1416, #2987, .T. ) ; +#1218 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1219 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1220 = EDGE_LOOP ( 'NONE', ( #1618, #1370, #639, #4198 ) ) ; +#1221 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1222 = ORIENTED_EDGE ( 'NONE', *, *, #908, .T. ) ; +#1223 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1224 = ORIENTED_EDGE ( 'NONE', *, *, #1536, .T. ) ; +#1225 = ORIENTED_EDGE ( 'NONE', *, *, #2148, .T. ) ; +#1226 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1227 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1228 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1229 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -4.500000000000000000, 54.73725382063413036 ) ) ; +#1230 = LINE ( 'NONE', #1583, #200 ) ; +#1231 = FACE_OUTER_BOUND ( 'NONE', #780, .T. ) ; +#1232 = EDGE_LOOP ( 'NONE', ( #295, #4203, #1082, #4088, #1702, #2086 ) ) ; +#1233 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1234 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1235 = PERSON ( 'δָ¶¨', 'δָ¶¨', 'δָ¶¨', ('δָ¶¨'), ('δָ¶¨'), ('δָ¶¨') ) ; +#1236 = ADVANCED_FACE ( 'NONE', ( #222 ), #597, .F. ) ; +#1237 = EDGE_CURVE ( 'NONE', #202, #3450, #619, .T. ) ; +#1238 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1239 = CIRCLE ( 'NONE', #3686, 3.000000000000002665 ) ; +#1240 = ORIENTED_EDGE ( 'NONE', *, *, #3310, .F. ) ; +#1241 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -2.399999999999999911, -51.94976107412048805 ) ) ; +#1242 = ORIENTED_EDGE ( 'NONE', *, *, #662, .T. ) ; +#1243 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980342726, 0.000000000000000000, -61.80000000000018900 ) ) ; +#1244 = AXIS2_PLACEMENT_3D ( 'NONE', #988, #657, #2300 ) ; +#1245 = ORIENTED_EDGE ( 'NONE', *, *, #1080, .T. ) ; +#1246 = ORIENTED_EDGE ( 'NONE', *, *, #2713, .T. ) ; +#1247 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.400000000000000799, -63.50000000000018474 ) ) ; +#1248 = EDGE_CURVE ( 'NONE', #921, #4235, #2735, .T. ) ; +#1249 = AXIS2_PLACEMENT_3D ( 'NONE', #4236, #2213, #2564 ) ; +#1250 = VECTOR ( 'NONE', #4032, 1000.000000000000000 ) ; +#1251 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1252 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1253 = FACE_OUTER_BOUND ( 'NONE', #1919, .T. ) ; +#1254 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1255 = EDGE_CURVE ( 'NONE', #1758, #4044, #926, .T. ) ; +#1256 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1257 = CYLINDRICAL_SURFACE ( 'NONE', #122, 1.269999999999969154 ) ; +#1258 = EDGE_LOOP ( 'NONE', ( #2840, #3734, #1511, #2334 ) ) ; +#1259 = FACE_OUTER_BOUND ( 'NONE', #3320, .T. ) ; +#1260 = AXIS2_PLACEMENT_3D ( 'NONE', #2654, #3639, #3313 ) ; +#1261 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -4.500000000000000000, 21.43027221244938119 ) ) ; +#1262 = ADVANCED_FACE ( 'NONE', ( #1211 ), #876, .T. ) ; +#1263 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1264 = VERTEX_POINT ( 'NONE', #1933 ) ; +#1265 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -2.399999999999999911, 0.000000000000000000 ) ) ; +#1266 = ORIENTED_EDGE ( 'NONE', *, *, #2166, .F. ) ; +#1267 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, 0.000000000000000000, 22.16370172317528642 ) ) ; +#1268 = ORIENTED_EDGE ( 'NONE', *, *, #1336, .F. ) ; +#1269 = VECTOR ( 'NONE', #2545, 1000.000000000000000 ) ; +#1270 = VERTEX_POINT ( 'NONE', #2945 ) ; +#1271 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -4.500000000000000000, -19.43027221244938119 ) ) ; +#1272 = EDGE_CURVE ( 'NONE', #2099, #87, #2856, .T. ) ; +#1273 = EDGE_CURVE ( 'NONE', #2048, #689, #911, .T. ) ; +#1274 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1275 = CYLINDRICAL_SURFACE ( 'NONE', #3377, 1.000000000000000888 ) ; +#1276 = EDGE_CURVE ( 'NONE', #2824, #1083, #2802, .T. ) ; +#1277 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -1.199999999999999734, 53.73725382063413036 ) ) ; +#1278 = AXIS2_PLACEMENT_3D ( 'NONE', #3203, #199, #902 ) ; +#1279 = FACE_OUTER_BOUND ( 'NONE', #2890, .T. ) ; +#1280 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1281 = VERTEX_POINT ( 'NONE', #3952 ) ; +#1282 = VECTOR ( 'NONE', #2992, 1000.000000000000000 ) ; +#1283 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1284 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1285 = VECTOR ( 'NONE', #2536, 1000.000000000000000 ) ; +#1286 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1287 = CIRCLE ( 'NONE', #3730, 3.000000000000002665 ) ; +#1288 = ORIENTED_EDGE ( 'NONE', *, *, #2708, .T. ) ; +#1289 = PLANE ( 'NONE', #2367 ) ; +#1290 = ORIENTED_EDGE ( 'NONE', *, *, #623, .T. ) ; +#1291 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1292 = ORIENTED_EDGE ( 'NONE', *, *, #455, .F. ) ; +#1293 = AXIS2_PLACEMENT_3D ( 'NONE', #2006, #3941, #3586 ) ; +#1294 = VERTEX_POINT ( 'NONE', #2902 ) ; +#1295 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1296 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#1297 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1298 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1299 = EDGE_CURVE ( 'NONE', #4280, #1892, #3249, .T. ) ; +#1300 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1301 = CYLINDRICAL_SURFACE ( 'NONE', #1260, 1.300000000000189893 ) ; +#1302 = VERTEX_POINT ( 'NONE', #3620 ) ; +#1303 = CARTESIAN_POINT ( 'NONE', ( 41.25819837981169513, 0.000000000000000000, -46.01087987045021066 ) ) ; +#1304 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1305 = EDGE_CURVE ( 'NONE', #685, #1039, #3709, .T. ) ; +#1306 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#1307 = ORIENTED_EDGE ( 'NONE', *, *, #3482, .T. ) ; +#1308 = LINE ( 'NONE', #274, #3241 ) ; +#1309 = VERTEX_POINT ( 'NONE', #3550 ) ; +#1310 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1311 = ORIENTED_EDGE ( 'NONE', *, *, #869, .F. ) ; +#1312 = AXIS2_PLACEMENT_3D ( 'NONE', #343, #2647, #3284 ) ; +#1313 = ORIENTED_EDGE ( 'NONE', *, *, #354, .T. ) ; +#1314 = PLANE ( 'NONE', #3612 ) ; +#1315 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -1.199999999999999734, 51.73725382063413036 ) ) ; +#1316 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1317 = AXIS2_PLACEMENT_3D ( 'NONE', #2979, #4297, #2009 ) ; +#1318 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#1320 = AXIS2_PLACEMENT_3D ( 'NONE', #1315, #1988, #3327 ) ; +#1319 = AXIS2_PLACEMENT_3D ( 'NONE', #407, #3058, #1361 ) ; +#1321 = CIRCLE ( 'NONE', #682, 5.799999999999999822 ) ; +#1322 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -4.500000000000000000, 24.43027221244938474 ) ) ; +#1323 = AXIS2_PLACEMENT_3D ( 'NONE', #2608, #3946, #613 ) ; +#1324 = EDGE_CURVE ( 'NONE', #1175, #1550, #1688, .T. ) ; +#1325 = CYLINDRICAL_SURFACE ( 'NONE', #1329, 0.5000000000000350830 ) ; +#1326 = ORIENTED_EDGE ( 'NONE', *, *, #2764, .T. ) ; +#1327 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1328 = ADVANCED_FACE ( 'NONE', ( #1589 ), #525, .T. ) ; +#1329 = AXIS2_PLACEMENT_3D ( 'NONE', #2015, #4279, #4344 ) ; +#1330 = AXIS2_PLACEMENT_3D ( 'NONE', #1159, #918, #1839 ) ; +#1331 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1332 = ORIENTED_EDGE ( 'NONE', *, *, #2852, .T. ) ; +#1333 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1334 = ORIENTED_EDGE ( 'NONE', *, *, #245, .F. ) ; +#1335 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1336 = EDGE_CURVE ( 'NONE', #1743, #790, #1189, .T. ) ; +#1337 = ORIENTED_EDGE ( 'NONE', *, *, #2471, .F. ) ; +#1338 = ORIENTED_EDGE ( 'NONE', *, *, #1299, .F. ) ; +#1339 = PLANE ( 'NONE', #1163 ) ; +#1340 = PLANE ( 'NONE', #1779 ) ; +#1341 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1342 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1343 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -1.199999999999999956, -51.94976107412048805 ) ) ; +#1344 = LINE ( 'NONE', #1322, #1250 ) ; +#1345 = LINE ( 'NONE', #4320, #2653 ) ; +#1346 = ORIENTED_EDGE ( 'NONE', *, *, #3900, .F. ) ; +#1347 = PRODUCT ( 'µ׸Ç', 'µ׸Ç', '', ( #528 ) ) ; +#1348 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -2.399999999999999911, -5.799999999999999822 ) ) ; +#1349 = AXIS2_PLACEMENT_3D ( 'NONE', #3047, #2387, #2038 ) ; +#1350 = EDGE_CURVE ( 'NONE', #1113, #2333, #130, .T. ) ; +#1351 = ADVANCED_FACE ( 'NONE', ( #4262 ), #1864, .T. ) ; +#1352 = EDGE_LOOP ( 'NONE', ( #843, #1704, #4331, #2413 ) ) ; +#1353 = AXIS2_PLACEMENT_3D ( 'NONE', #1203, #1507, #4181 ) ; +#1354 = ORIENTED_EDGE ( 'NONE', *, *, #1213, .T. ) ; +#1355 = PLANE ( 'NONE', #2179 ) ; +#1356 = ADVANCED_FACE ( 'NONE', ( #2264 ), #3572, .F. ) ; +#1357 = ORIENTED_EDGE ( 'NONE', *, *, #922, .F. ) ; +#1358 = AXIS2_PLACEMENT_3D ( 'NONE', #2178, #4150, #3815 ) ; +#1359 = ORIENTED_EDGE ( 'NONE', *, *, #1891, .F. ) ; +#1360 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -2.399999999999999911, 30.93402833653108175 ) ) ; +#1361 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#1362 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -1.199999999999999734, 21.43027221244938119 ) ) ; +#1363 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -1.199999999999999734, 21.43027221244938119 ) ) ; +#1364 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1365 = VECTOR ( 'NONE', #2448, 1000.000000000000000 ) ; +#1366 = CARTESIAN_POINT ( 'NONE', ( 36.21295323236918051, -3.233824310835499816, -63.80000000000018900 ) ) ; +#1367 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.199999999999999956, 51.94976107412048805 ) ) ; +#1368 = EDGE_LOOP ( 'NONE', ( #3889, #2864 ) ) ; +#1369 = LINE ( 'NONE', #4036, #4284 ) ; +#1370 = ORIENTED_EDGE ( 'NONE', *, *, #3722, .T. ) ; +#1371 = EDGE_CURVE ( 'NONE', #3979, #3958, #4327, .T. ) ; +#1372 = ORIENTED_EDGE ( 'NONE', *, *, #2628, .F. ) ; +#1373 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -4.500000000000000000, -51.94976107412048805 ) ) ; +#1374 = EDGE_LOOP ( 'NONE', ( #1977, #1224, #3426, #698 ) ) ; +#1375 = ORIENTED_EDGE ( 'NONE', *, *, #3973, .T. ) ; +#1376 = PLANE ( 'NONE', #2636 ) ; +#1377 = CARTESIAN_POINT ( 'NONE', ( 36.21295323236918051, -1.199999999999999956, -61.80000000000018900 ) ) ; +#1378 = PLANE ( 'NONE', #741 ) ; +#1379 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1380 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1381 = EDGE_LOOP ( 'NONE', ( #2521, #1765 ) ) ; +#1382 = CARTESIAN_POINT ( 'NONE', ( 3.663396254163752364, -4.500000000000000000, -48.84822469919815546 ) ) ; +#1383 = LINE ( 'NONE', #2739, #269 ) ; +#1384 = ORIENTED_EDGE ( 'NONE', *, *, #2585, .F. ) ; +#1385 = VECTOR ( 'NONE', #4108, 1000.000000000000000 ) ; +#1386 = VECTOR ( 'NONE', #825, 1000.000000000000000 ) ; +#1387 = ADVANCED_FACE ( 'NONE', ( #2017 ), #2659, .F. ) ; +#1388 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -1.199999999999999956, 39.03402833653107962 ) ) ; +#1389 = APPROVAL_DATE_TIME ( #2593, #758 ) ; +#1390 = VECTOR ( 'NONE', #4097, 1000.000000000000000 ) ; +#1391 = CIRCLE ( 'NONE', #2302, 2.299999999999999822 ) ; +#1392 = EDGE_LOOP ( 'NONE', ( #1017, #4333 ) ) ; +#1393 = EDGE_LOOP ( 'NONE', ( #3186, #2102, #664, #1487 ) ) ; +#1394 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1395 = VECTOR ( 'NONE', #1184, 1000.000000000000000 ) ; +#1396 = VERTEX_POINT ( 'NONE', #1388 ) ; +#1397 = EDGE_CURVE ( 'NONE', #2507, #2481, #2635, .T. ) ; +#1398 = VERTEX_POINT ( 'NONE', #2968 ) ; +#1399 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -2.399999999999999911, 42.53402833653199622 ) ) ; +#1400 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1401 = LINE ( 'NONE', #3019, #3971 ) ; +#1402 = CARTESIAN_POINT ( 'NONE', ( 2.816687638038910084E-16, 0.000000000000000000, 49.64976107412048378 ) ) ; +#1403 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -4.500000000000000000, -21.43027221244073743 ) ) ; +#1404 = ORIENTED_EDGE ( 'NONE', *, *, #2577, .T. ) ; +#1405 = EDGE_CURVE ( 'NONE', #2750, #2930, #663, .T. ) ; +#1406 = ADVANCED_FACE ( 'NONE', ( #701 ), #3972, .F. ) ; +#1407 = ORIENTED_EDGE ( 'NONE', *, *, #4212, .F. ) ; +#1408 = CARTESIAN_POINT ( 'NONE', ( 37.89635322281446861, -4.299999999999999822, -51.54561984842757738 ) ) ; +#1409 = EDGE_CURVE ( 'NONE', #277, #3537, #2699, .T. ) ; +#1410 = CARTESIAN_POINT ( 'NONE', ( 39.75819837980361626, -1.199999999999999956, -60.50000000000000000 ) ) ; +#1411 = VERTEX_POINT ( 'NONE', #3705 ) ; +#1412 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1413 = AXIS2_PLACEMENT_3D ( 'NONE', #155, #3838, #837 ) ; +#1414 = CIRCLE ( 'NONE', #3573, 2.300000000000003375 ) ; +#1415 = VERTEX_POINT ( 'NONE', #1715 ) ; +#1416 = VERTEX_POINT ( 'NONE', #352 ) ; +#1417 = ORIENTED_EDGE ( 'NONE', *, *, #1654, .F. ) ; +#1418 = ORIENTED_EDGE ( 'NONE', *, *, #1255, .F. ) ; +#1419 = ORIENTED_EDGE ( 'NONE', *, *, #1217, .F. ) ; +#1420 = CARTESIAN_POINT ( 'NONE', ( 40.25678579777259358, -1.199999999999999956, -44.89411094154993975 ) ) ; +#1421 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -1.199999999999999956, 36.73402833653199906 ) ) ; +#1422 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -4.500000000000000000, -42.63130005366996755 ) ) ; +#1423 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1424 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, 0.000000000000000000, 36.73402833653199906 ) ) ; +#1425 = CIRCLE ( 'NONE', #3161, 3.000000000000002665 ) ; +#1426 = ORIENTED_EDGE ( 'NONE', *, *, #4124, .T. ) ; +#1427 = ORIENTED_EDGE ( 'NONE', *, *, #3335, .F. ) ; +#1428 = LINE ( 'NONE', #435, #3905 ) ; +#1429 = CARTESIAN_POINT ( 'NONE', ( 38.69635322281465051, -4.299999999999999822, -50.74561984842738838 ) ) ; +#1430 = VERTEX_POINT ( 'NONE', #2060 ) ; +#1431 = EDGE_CURVE ( 'NONE', #2314, #798, #3397, .T. ) ; +#1432 = AXIS2_PLACEMENT_3D ( 'NONE', #3924, #3876, #2211 ) ; +#1433 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1434 = ORIENTED_EDGE ( 'NONE', *, *, #2839, .F. ) ; +#1435 = VERTEX_POINT ( 'NONE', #1056 ) ; +#1436 = EDGE_CURVE ( 'NONE', #665, #314, #1824, .T. ) ; +#1437 = CARTESIAN_POINT ( 'NONE', ( 36.21295323236918051, 0.000000000000000000, -61.80000000000018900 ) ) ; +#1438 = LINE ( 'NONE', #1377, #1937 ) ; +#1439 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1440 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1441 = CARTESIAN_POINT ( 'NONE', ( 35.02020398454638439, -3.670000000000002593, -62.10000000000018616 ) ) ; +#1442 = ORIENTED_EDGE ( 'NONE', *, *, #2877, .F. ) ; +#1443 = ORIENTED_EDGE ( 'NONE', *, *, #3748, .F. ) ; +#1444 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1445 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1446 = ORIENTED_EDGE ( 'NONE', *, *, #4035, .F. ) ; +#1447 = CIRCLE ( 'NONE', #2844, 2.299999999999998934 ) ; +#1448 = EDGE_CURVE ( 'NONE', #1039, #3555, #994, .T. ) ; +#1449 = CARTESIAN_POINT ( 'NONE', ( 29.18020398454808628, -2.400000000000000799, -63.50000000000018474 ) ) ; +#1450 = AXIS2_PLACEMENT_3D ( 'NONE', #792, #129, #510 ) ; +#1451 = CIRCLE ( 'NONE', #262, 0.9999999999999981126 ) ; +#1452 = EDGE_CURVE ( 'NONE', #196, #3902, #3683, .T. ) ; +#1453 = CIRCLE ( 'NONE', #2292, 5.799999999999999822 ) ; +#1454 = AXIS2_PLACEMENT_3D ( 'NONE', #96, #2777, #2404 ) ; +#1455 = ORIENTED_EDGE ( 'NONE', *, *, #4164, .T. ) ; +#1456 = ORIENTED_EDGE ( 'NONE', *, *, #3458, .T. ) ; +#1457 = CALENDAR_DATE ( 2026, 29, 9 ) ; +#1458 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, 0.000000000000000000, 26.76370172317528784 ) ) ; +#1459 = ORIENTED_EDGE ( 'NONE', *, *, #3188, .F. ) ; +#1460 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -1.199999999999999734, 21.43027221244074099 ) ) ; +#1461 = EDGE_CURVE ( 'NONE', #2118, #3107, #1634, .T. ) ; +#1462 = FACE_OUTER_BOUND ( 'NONE', #66, .T. ) ; +#1463 = EDGE_LOOP ( 'NONE', ( #615, #2204 ) ) ; +#1464 = ORIENTED_EDGE ( 'NONE', *, *, #125, .F. ) ; +#1465 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -1.199999999999999956, 35.73402833653108246 ) ) ; +#1466 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#1467 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1468 = ORIENTED_EDGE ( 'NONE', *, *, #3401, .T. ) ; +#1469 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1470 = LINE ( 'NONE', #3832, #3761 ) ; +#1471 = FACE_OUTER_BOUND ( 'NONE', #3362, .T. ) ; +#1472 = ORIENTED_EDGE ( 'NONE', *, *, #4329, .T. ) ; +#1473 = EDGE_CURVE ( 'NONE', #3138, #4076, #1369, .T. ) ; +#1474 = AXIS2_PLACEMENT_3D ( 'NONE', #514, #2529, #208 ) ; +#1475 = EDGE_CURVE ( 'NONE', #1396, #1113, #1974, .T. ) ; +#1476 = CALENDAR_DATE ( 2026, 29, 9 ) ; +#1477 = FACE_OUTER_BOUND ( 'NONE', #2862, .T. ) ; +#1478 = EDGE_LOOP ( 'NONE', ( #2495, #809, #2451, #1242 ) ) ; +#1479 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1480 = AXIS2_PLACEMENT_3D ( 'NONE', #3604, #2313, #1619 ) ; +#1481 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -2.399999999999999911, 36.73402833653108246 ) ) ; +#1482 = ORIENTED_EDGE ( 'NONE', *, *, #2683, .T. ) ; +#1483 = ORIENTED_EDGE ( 'NONE', *, *, #3030, .F. ) ; +#1484 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1485 = FACE_BOUND ( 'NONE', #1, .T. ) ; +#1486 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1487 = ORIENTED_EDGE ( 'NONE', *, *, #568, .F. ) ; +#1488 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1489 = AXIS2_PLACEMENT_3D ( 'NONE', #3497, #496, #3476 ) ; +#1490 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1491 = CIRCLE ( 'NONE', #1703, 2.300000000000003375 ) ; +#1492 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -4.500000000000000000, 53.73725382063413036 ) ) ; +#1493 = VERTEX_POINT ( 'NONE', #2345 ) ; +#1494 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1495 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1496 = ORIENTED_EDGE ( 'NONE', *, *, #3644, .F. ) ; +#1497 = DATE_AND_TIME ( #1457, #2072 ) ; +#1498 = ADVANCED_FACE ( 'NONE', ( #312 ), #1036, .F. ) ; +#1499 = DIRECTION ( 'NONE', ( -0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1500 = EDGE_LOOP ( 'NONE', ( #3208, #4166, #105, #3068, #2380, #3667 ) ) ; +#1501 = FACE_OUTER_BOUND ( 'NONE', #3745, .T. ) ; +#1502 = CYLINDRICAL_SURFACE ( 'NONE', #1474, 2.299999999999999822 ) ; +#1503 = EDGE_LOOP ( 'NONE', ( #2933, #2310, #4287, #414 ) ) ; +#1504 = ORIENTED_EDGE ( 'NONE', *, *, #618, .F. ) ; +#1505 = FACE_OUTER_BOUND ( 'NONE', #1900, .T. ) ; +#1506 = FACE_BOUND ( 'NONE', #2503, .T. ) ; +#1507 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1508 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1509 = FACE_OUTER_BOUND ( 'NONE', #2876, .T. ) ; +#1510 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1511 = ORIENTED_EDGE ( 'NONE', *, *, #951, .T. ) ; +#1512 = LINE ( 'NONE', #924, #968 ) ; +#1513 = EDGE_CURVE ( 'NONE', #947, #890, #3442, .T. ) ; +#1514 = CIRCLE ( 'NONE', #3542, 3.000000000000002665 ) ; +#1515 = AXIS2_PLACEMENT_3D ( 'NONE', #610, #3678, #1318 ) ; +#1516 = FACE_OUTER_BOUND ( 'NONE', #2137, .T. ) ; +#1517 = EDGE_LOOP ( 'NONE', ( #3820, #3646 ) ) ; +#1519 = CIRCLE ( 'NONE', #2287, 3.000000000000002665 ) ; +#1518 = CIRCLE ( 'NONE', #106, 1.000000000000000888 ) ; +#1520 = AXIS2_PLACEMENT_3D ( 'NONE', #3691, #1019, #2497 ) ; +#1521 = AXIS2_PLACEMENT_3D ( 'NONE', #3802, #3563, #2821 ) ; +#1522 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1523 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1524 = VERTEX_POINT ( 'NONE', #2984 ) ; +#1525 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#1526 = ORIENTED_EDGE ( 'NONE', *, *, #552, .T. ) ; +#1527 = VECTOR ( 'NONE', #1484, 1000.000000000000000 ) ; +#1528 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1529 = ORIENTED_EDGE ( 'NONE', *, *, #3430, .F. ) ; +#1530 = EDGE_LOOP ( 'NONE', ( #205, #1197 ) ) ; +#1531 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1532 = AXIS2_PLACEMENT_3D ( 'NONE', #2964, #970, #4013 ) ; +#1533 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -2.399999999999999911, -51.94976107412048805 ) ) ; +#1534 = CARTESIAN_POINT ( 'NONE', ( 38.69635322281465761, -4.299999999999999822, -51.54561984842757738 ) ) ; +#1535 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -1.199999999999999956, -5.799999999999999822 ) ) ; +#1536 = EDGE_CURVE ( 'NONE', #1823, #3416, #3009, .T. ) ; +#1537 = ADVANCED_FACE ( 'NONE', ( #18 ), #3740, .F. ) ; +#1538 = VECTOR ( 'NONE', #1117, 1000.000000000000000 ) ; +#1539 = FACE_OUTER_BOUND ( 'NONE', #842, .T. ) ; +#1540 = ADVANCED_FACE ( 'NONE', ( #412 ), #3453, .T. ) ; +#1541 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1542 = EDGE_LOOP ( 'NONE', ( #1791, #3781, #371, #3257 ) ) ; +#1543 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1544 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, 0.000000000000000000, 36.73402833653108246 ) ) ; +#1545 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -4.500000000000000000, -47.14976107412051931 ) ) ; +#1546 = ORIENTED_EDGE ( 'NONE', *, *, #2515, .T. ) ; +#1547 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, 0.000000000000000000, -24.46370172317620373 ) ) ; +#1548 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -4.299999999999999822, -53.62639461200842561 ) ) ; +#1549 = AXIS2_PLACEMENT_3D ( 'NONE', #2924, #1284, #2282 ) ; +#1550 = VERTEX_POINT ( 'NONE', #775 ) ; +#1551 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -1.199999999999999956, 36.73402833653199906 ) ) ; +#1552 = EDGE_LOOP ( 'NONE', ( #802, #2685, #1455, #2775 ) ) ; +#1553 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980342726, -1.199999999999999956, -61.80000000000018900 ) ) ; +#1554 = ORIENTED_EDGE ( 'NONE', *, *, #2103, .T. ) ; +#1555 = ORIENTED_EDGE ( 'NONE', *, *, #3800, .T. ) ; +#1556 = LINE ( 'NONE', #2891, #4185 ) ; +#1557 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1558 = CARTESIAN_POINT ( 'NONE', ( 36.21295323236918051, -3.233824310835499816, -63.50000000000018474 ) ) ; +#1559 = CARTESIAN_POINT ( 'NONE', ( -41.25819837980453286, -1.199999999999999956, -46.01087987044774508 ) ) ; +#1560 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1561 = CYLINDRICAL_SURFACE ( 'NONE', #440, 4.799999999999964295 ) ; +#1562 = EDGE_CURVE ( 'NONE', #1270, #2868, #1414, .T. ) ; +#1563 = EDGE_CURVE ( 'NONE', #4313, #2245, #4074, .T. ) ; +#1564 = CIRCLE ( 'NONE', #2748, 0.5000000000000350830 ) ; +#1565 = ORIENTED_EDGE ( 'NONE', *, *, #3520, .F. ) ; +#1566 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -2.399999999999999911, -50.94976107412048094 ) ) ; +#1567 = AXIS2_PLACEMENT_3D ( 'NONE', #533, #2440, #1147 ) ; +#1568 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1569 = ORIENTED_EDGE ( 'NONE', *, *, #4, .F. ) ; +#1570 = ADVANCED_FACE ( 'NONE', ( #2031 ), #2441, .F. ) ; +#1571 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 25.50000000000000000 ) ) ; +#1572 = ORIENTED_EDGE ( 'NONE', *, *, #2633, .F. ) ; +#1573 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1574 = ORIENTED_EDGE ( 'NONE', *, *, #3857, .F. ) ; +#1575 = FACE_OUTER_BOUND ( 'NONE', #40, .T. ) ; +#1576 = EDGE_CURVE ( 'NONE', #532, #797, #115, .T. ) ; +#1577 = ORIENTED_EDGE ( 'NONE', *, *, #3008, .F. ) ; +#1578 = ORIENTED_EDGE ( 'NONE', *, *, #927, .T. ) ; +#1579 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -4.500000000000000000, -36.53553390593242511 ) ) ; +#1580 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1581 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1582 = PLANE ( 'NONE', #1739 ) ; +#1583 = CARTESIAN_POINT ( 'NONE', ( -39.75819837980453286, -4.500000000000000000, -45.51207481725032267 ) ) ; +#1584 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -4.500000000000000000, -51.94976107412048805 ) ) ; +#1585 = LINE ( 'NONE', #2919, #3133 ) ; +#1586 = ORIENTED_EDGE ( 'NONE', *, *, #4239, .T. ) ; +#1587 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -2.399999999999999911, 5.799999999999999822 ) ) ; +#1588 = ADVANCED_FACE ( 'NONE', ( #1462 ), #3062, .T. ) ; +#1589 = FACE_OUTER_BOUND ( 'NONE', #954, .T. ) ; +#1590 = EDGE_CURVE ( 'NONE', #4235, #921, #2673, .T. ) ; +#1591 = EDGE_CURVE ( 'NONE', #231, #2280, #3718, .T. ) ; +#1592 = CALENDAR_DATE ( 2026, 29, 9 ) ; +#1593 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -4.500000000000000000, -51.94976107412048805 ) ) ; +#1594 = AXIS2_PLACEMENT_3D ( 'NONE', #4168, #3449, #2861 ) ; +#1595 = ORIENTED_EDGE ( 'NONE', *, *, #2011, .F. ) ; +#1596 = CARTESIAN_POINT ( 'NONE', ( -41.25819837980453286, 0.000000000000000000, -46.01087987044774508 ) ) ; +#1597 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1598 = AXIS2_PLACEMENT_3D ( 'NONE', #2651, #2695, #3989 ) ; +#1599 = ORIENTED_EDGE ( 'NONE', *, *, #1891, .T. ) ; +#1600 = ORIENTED_EDGE ( 'NONE', *, *, #2548, .F. ) ; +#1601 = FACE_OUTER_BOUND ( 'NONE', #3015, .T. ) ; +#1602 = AXIS2_PLACEMENT_3D ( 'NONE', #3024, #2981, #2652 ) ; +#1603 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1604 = LINE ( 'NONE', #4093, #3312 ) ; +#1605 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -1.199999999999999956, 34.43402833653108530 ) ) ; +#1606 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, 0.000000000000000000, 22.16370172317528642 ) ) ; +#1607 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.199999999999999956, 51.94976107412048805 ) ) ; +#1608 = VECTOR ( 'NONE', #2149, 1000.000000000000000 ) ; +#1609 = ORIENTED_EDGE ( 'NONE', *, *, #410, .F. ) ; +#1610 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, 0.000000000000000000, 24.46370172317528713 ) ) ; +#1611 = CIRCLE ( 'NONE', #2305, 5.799999999999999822 ) ; +#1612 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -2.399999999999999911, 42.53402833653107962 ) ) ; +#1613 = ADVANCED_FACE ( 'NONE', ( #32 ), #2459, .F. ) ; +#1614 = LINE ( 'NONE', #2242, #4208 ) ; +#1615 = ORIENTED_EDGE ( 'NONE', *, *, #47, .T. ) ; +#1616 = ADVANCED_FACE ( 'NONE', ( #2071 ), #2419, .T. ) ; +#1617 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1618 = ORIENTED_EDGE ( 'NONE', *, *, #1013, .F. ) ; +#1619 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1620 = ADVANCED_FACE ( 'NONE', ( #3413 ), #714, .T. ) ; +#1621 = VERTEX_POINT ( 'NONE', #757 ) ; +#1622 = CIRCLE ( 'NONE', #3435, 1.500000000007918555 ) ; +#1623 = ORIENTED_EDGE ( 'NONE', *, *, #3729, .F. ) ; +#1624 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -2.399999999999999911, 0.000000000000000000 ) ) ; +#1625 = CYLINDRICAL_SURFACE ( 'NONE', #2401, 0.8000000000000645484 ) ; +#1626 = LINE ( 'NONE', #2626, #2538 ) ; +#1627 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1628 = AXIS2_PLACEMENT_3D ( 'NONE', #430, #1770, #3102 ) ; +#1629 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1630 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -1.199999999999999734, -21.43027221244938119 ) ) ; +#1631 = EDGE_LOOP ( 'NONE', ( #629, #136, #1346, #1496 ) ) ; +#1632 = AXIS2_PLACEMENT_3D ( 'NONE', #560, #2888, #4171 ) ; +#1633 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.199999999999999956, 22.16370172317528642 ) ) ; +#1634 = LINE ( 'NONE', #3028, #845 ) ; +#1635 = CIRCLE ( 'NONE', #2963, 2.300000000000010481 ) ; +#1636 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1637 = VERTEX_POINT ( 'NONE', #2097 ) ; +#1638 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -2.399999999999999911, 35.73402833653199906 ) ) ; +#1639 = EDGE_LOOP ( 'NONE', ( #2163, #527, #135, #3223 ) ) ; +#1640 = CARTESIAN_POINT ( 'NONE', ( 2.816687638038913042E-16, -1.199999999999999956, 49.64976107412048378 ) ) ; +#1641 = VECTOR ( 'NONE', #2189, 1000.000000000000000 ) ; +#1642 = ORIENTED_EDGE ( 'NONE', *, *, #2544, .T. ) ; +#1643 = EDGE_CURVE ( 'NONE', #665, #3050, #386, .T. ) ; +#1644 = ORIENTED_EDGE ( 'NONE', *, *, #4306, .T. ) ; +#1645 = LINE ( 'NONE', #1271, #259 ) ; +#1646 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -1.199999999999999734, -46.14976107412045536 ) ) ; +#1647 = PLANE ( 'NONE', #13 ) ; +#1648 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1649 = EDGE_CURVE ( 'NONE', #2600, #686, #1969, .T. ) ; +#1650 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1651 = FACE_OUTER_BOUND ( 'NONE', #2044, .T. ) ; +#1652 = ORIENTED_EDGE ( 'NONE', *, *, #668, .F. ) ; +#1653 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1654 = EDGE_CURVE ( 'NONE', #3050, #516, #2882, .T. ) ; +#1655 = FACE_OUTER_BOUND ( 'NONE', #1393, .T. ) ; +#1656 = ORIENTED_EDGE ( 'NONE', *, *, #2905, .F. ) ; +#1657 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1658 = ORIENTED_EDGE ( 'NONE', *, *, #2784, .T. ) ; +#1659 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -2.399999999999999911, -51.94976107412048805 ) ) ; +#1660 = ORIENTED_EDGE ( 'NONE', *, *, #2742, .T. ) ; +#1661 = VECTOR ( 'NONE', #1663, 1000.000000000000000 ) ; +#1662 = ORIENTED_EDGE ( 'NONE', *, *, #576, .T. ) ; +#1663 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1664 = FACE_OUTER_BOUND ( 'NONE', #4024, .T. ) ; +#1665 = FACE_BOUND ( 'NONE', #4153, .T. ) ; +#1666 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -1.199999999999999956, -51.94976107412048805 ) ) ; +#1667 = AXIS2_PLACEMENT_3D ( 'NONE', #2560, #1204, #3499 ) ; +#1668 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#1669 = FACE_BOUND ( 'NONE', #1073, .T. ) ; +#1670 = CIRCLE ( 'NONE', #403, 1.000000000000000888 ) ; +#1671 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1672 = VERTEX_POINT ( 'NONE', #93 ) ; +#1673 = EDGE_CURVE ( 'NONE', #2930, #1281, #2247, .T. ) ; +#1674 = EDGE_CURVE ( 'NONE', #3864, #2665, #2804, .T. ) ; +#1675 = ADVANCED_FACE ( 'NONE', ( #490 ), #885, .T. ) ; +#1676 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.199999999999999956, 24.46370172317528713 ) ) ; +#1677 = ADVANCED_FACE ( 'NONE', ( #1575 ), #3816, .T. ) ; +#1678 = ORIENTED_EDGE ( 'NONE', *, *, #4324, .T. ) ; +#1679 = EDGE_LOOP ( 'NONE', ( #3859, #605, #2807, #4068, #2091, #2746 ) ) ; +#1680 = PLANE ( 'NONE', #3931 ) ; +#1681 = ORIENTED_EDGE ( 'NONE', *, *, #1709, .T. ) ; +#1682 = VERTEX_POINT ( 'NONE', #795 ) ; +#1683 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#1684 = CARTESIAN_POINT ( 'NONE', ( -39.75819837980544236, -1.199999999999999956, -46.01087987044774508 ) ) ; +#1685 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1686 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1687 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -1.199999999999999734, -18.43027221244937763 ) ) ; +#1688 = CIRCLE ( 'NONE', #3361, 25.50000000000000000 ) ; +#1689 = LINE ( 'NONE', #3263, #2994 ) ; +#1690 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1691 = ORIENTED_EDGE ( 'NONE', *, *, #1110, .T. ) ; +#1692 = ADVANCED_FACE ( 'NONE', ( #4201 ), #1502, .F. ) ; +#1693 = EDGE_CURVE ( 'NONE', #4118, #3107, #569, .T. ) ; +#1694 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1695 = CALENDAR_DATE ( 2026, 29, 9 ) ; +#1696 = AXIS2_PLACEMENT_3D ( 'NONE', #3798, #2135, #2506 ) ; +#1697 = ORIENTED_EDGE ( 'NONE', *, *, #3746, .F. ) ; +#1698 = CIRCLE ( 'NONE', #1004, 5.799999999999999822 ) ; +#1699 = ORIENTED_EDGE ( 'NONE', *, *, #1002, .F. ) ; +#1700 = CYLINDRICAL_SURFACE ( 'NONE', #334, 4.799999999999964295 ) ; +#1701 = EDGE_CURVE ( 'NONE', #243, #402, #138, .T. ) ; +#1702 = ORIENTED_EDGE ( 'NONE', *, *, #2883, .T. ) ; +#1703 = AXIS2_PLACEMENT_3D ( 'NONE', #2200, #3163, #2815 ) ; +#1704 = ORIENTED_EDGE ( 'NONE', *, *, #2628, .T. ) ; +#1705 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1706 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.199999999999999956, 24.46370172317528713 ) ) ; +#1707 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1708 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -4.500000000000000000, 51.73725382063049238 ) ) ; +#1709 = EDGE_CURVE ( 'NONE', #1637, #60, #3091, .T. ) ; +#1710 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1711 = CIRCLE ( 'NONE', #2687, 2.299999999999999822 ) ; +#1712 = CARTESIAN_POINT ( 'NONE', ( -39.75819837980453286, -4.500000000000000000, -45.51207481725032267 ) ) ; +#1713 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1714 = ORIENTED_EDGE ( 'NONE', *, *, #2467, .F. ) ; +#1715 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -1.199999999999999734, -34.53553390593242511 ) ) ; +#1716 = EDGE_CURVE ( 'NONE', #2248, #3498, #3720, .T. ) ; +#1717 = ORIENTED_EDGE ( 'NONE', *, *, #1701, .F. ) ; +#1718 = VERTEX_POINT ( 'NONE', #818 ) ; +#1719 = LINE ( 'NONE', #4141, #2781 ) ; +#1720 = ADVANCED_FACE ( 'NONE', ( #2553, #2817 ), #1173, .F. ) ; +#1721 = EDGE_CURVE ( 'NONE', #314, #516, #3888, .T. ) ; +#1722 = VERTEX_POINT ( 'NONE', #1243 ) ; +#1723 = EDGE_CURVE ( 'NONE', #3648, #27, #359, .T. ) ; +#1724 = ORIENTED_EDGE ( 'NONE', *, *, #4100, .F. ) ; +#1725 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1726 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1727 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -4.500000000000000000, -23.43027221244074099 ) ) ; +#1728 = FACE_OUTER_BOUND ( 'NONE', #1478, .T. ) ; +#1729 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1730 = AXIS2_PLACEMENT_3D ( 'NONE', #4125, #2833, #2884 ) ; +#1731 = EDGE_LOOP ( 'NONE', ( #3146, #3992 ) ) ; +#1732 = ORIENTED_EDGE ( 'NONE', *, *, #1405, .F. ) ; +#1733 = LINE ( 'NONE', #3122, #1037 ) ; +#1734 = AXIS2_PLACEMENT_3D ( 'NONE', #1559, #2209, #2894 ) ; +#1735 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1736 = ORIENTED_EDGE ( 'NONE', *, *, #1591, .T. ) ; +#1738 = VECTOR ( 'NONE', #1946, 1000.000000000000000 ) ; +#1737 = CIRCLE ( 'NONE', #1450, 4.799999999999970512 ) ; +#1739 = AXIS2_PLACEMENT_3D ( 'NONE', #2873, #848, #3874 ) ; +#1740 = CIRCLE ( 'NONE', #683, 5.799999999999999822 ) ; +#1741 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1742 = VERTEX_POINT ( 'NONE', #3164 ) ; +#1743 = VERTEX_POINT ( 'NONE', #1553 ) ; +#1744 = AXIS2_PLACEMENT_3D ( 'NONE', #833, #1495, #1164 ) ; +#1745 = EDGE_LOOP ( 'NONE', ( #2886, #599, #3949 ) ) ; +#1746 = ORIENTED_EDGE ( 'NONE', *, *, #1935, .T. ) ; +#1747 = VERTEX_POINT ( 'NONE', #2180 ) ; +#1748 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -4.500000000000000000, 19.43027221244938119 ) ) ; +#1749 = ADVANCED_FACE ( 'NONE', ( #3470 ), #3841, .F. ) ; +#1750 = FACE_OUTER_BOUND ( 'NONE', #1170, .T. ) ; +#1751 = FACE_OUTER_BOUND ( 'NONE', #3012, .T. ) ; +#1752 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -1.199999999999999734, -51.94976107412048805 ) ) ; +#1753 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980342726, -1.199999999999999956, -61.80000000000018900 ) ) ; +#1754 = ORIENTED_EDGE ( 'NONE', *, *, #2061, .F. ) ; +#1755 = EDGE_LOOP ( 'NONE', ( #2791, #3156 ) ) ; +#1756 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -1.199999999999999956, 36.73402833653199906 ) ) ; +#1757 = CYLINDRICAL_SURFACE ( 'NONE', #3483, 1.300000000000189893 ) ; +#1758 = VERTEX_POINT ( 'NONE', #1198 ) ; +#1759 = EDGE_CURVE ( 'NONE', #2048, #3935, #3140, .T. ) ; +#1760 = LINE ( 'NONE', #3071, #788 ) ; +#1761 = VECTOR ( 'NONE', #3270, 1000.000000000000000 ) ; +#1762 = VECTOR ( 'NONE', #3726, 1000.000000000000000 ) ; +#1763 = ORIENTED_EDGE ( 'NONE', *, *, #2936, .F. ) ; +#1764 = ORIENTED_EDGE ( 'NONE', *, *, #1849, .T. ) ; +#1765 = ORIENTED_EDGE ( 'NONE', *, *, #3294, .F. ) ; +#1766 = CARTESIAN_POINT ( 'NONE', ( -41.25819837980453286, -1.199999999999999956, -46.01087987044774508 ) ) ; +#1767 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.199999999999999956, 26.76370172317528784 ) ) ; +#1768 = FACE_OUTER_BOUND ( 'NONE', #3465, .T. ) ; +#1769 = CYLINDRICAL_SURFACE ( 'NONE', #4142, 2.099999999999997868 ) ; +#1770 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1771 = AXIS2_PLACEMENT_3D ( 'NONE', #1178, #3189, #2464 ) ; +#1772 = ADVANCED_FACE ( 'NONE', ( #2202 ), #3535, .F. ) ; +#1773 = CIRCLE ( 'NONE', #1489, 1.000000000000000888 ) ; +#1774 = ORIENTED_EDGE ( 'NONE', *, *, #967, .T. ) ; +#1775 = VERTEX_POINT ( 'NONE', #1148 ) ; +#1776 = CARTESIAN_POINT ( 'NONE', ( -37.73125606114251696, -4.500000000000000000, -44.71207481725070210 ) ) ; +#1777 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1778 = EDGE_LOOP ( 'NONE', ( #3490, #1122, #4165, #1572 ) ) ; +#1779 = AXIS2_PLACEMENT_3D ( 'NONE', #4234, #3195, #195 ) ; +#1780 = ADVANCED_FACE ( 'NONE', ( #2973 ), #2270, .F. ) ; +#1781 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -2.399999999999999911, 0.9999999999999981126 ) ) ; +#1782 = EDGE_CURVE ( 'NONE', #3593, #1044, #574, .T. ) ; +#1783 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -1.199999999999999734, 21.43027221244938119 ) ) ; +#1784 = VERTEX_POINT ( 'NONE', #1267 ) ; +#1785 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.199999999999999956, 54.24976107412048520 ) ) ; +#1786 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -4.500000000000000000, 54.73725382063413036 ) ) ; +#1787 = ORIENTED_EDGE ( 'NONE', *, *, #1961, .T. ) ; +#1788 = CARTESIAN_POINT ( 'NONE', ( 38.69635322281465051, -4.299999999999999822, -50.74561984842738838 ) ) ; +#1789 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1790 = ORIENTED_EDGE ( 'NONE', *, *, #3131, .F. ) ; +#1791 = ORIENTED_EDGE ( 'NONE', *, *, #2229, .F. ) ; +#1792 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#1793 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1794 = EDGE_LOOP ( 'NONE', ( #2578, #4138 ) ) ; +#1795 = AXIS2_PLACEMENT_3D ( 'NONE', #1006, #3654, #913 ) ; +#1796 = FACE_OUTER_BOUND ( 'NONE', #3708, .T. ) ; +#1797 = CIRCLE ( 'NONE', #2145, 3.000000000000002665 ) ; +#1798 = EDGE_CURVE ( 'NONE', #820, #2141, #2604, .T. ) ; +#1799 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#1800 = EDGE_CURVE ( 'NONE', #2530, #3825, #4289, .T. ) ; +#1801 = CIRCLE ( 'NONE', #2569, 2.000000000000001776 ) ; +#1802 = EDGE_CURVE ( 'NONE', #2130, #3026, #296, .T. ) ; +#1803 = EDGE_LOOP ( 'NONE', ( #3282, #1787, #3513, #3503 ) ) ; +#1804 = VERTEX_POINT ( 'NONE', #4001 ) ; +#1805 = APPROVAL_DATE_TIME ( #1497, #2442 ) ; +#1806 = LINE ( 'NONE', #3467, #965 ) ; +#1807 = VECTOR ( 'NONE', #4104, 1000.000000000000000 ) ; +#1808 = VERTEX_POINT ( 'NONE', #4269 ) ; +#1809 = FACE_OUTER_BOUND ( 'NONE', #3860, .T. ) ; +#1810 = AXIS2_PLACEMENT_3D ( 'NONE', #614, #2303, #309 ) ; +#1811 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1812 = ORIENTED_EDGE ( 'NONE', *, *, #1473, .T. ) ; +#1813 = ORIENTED_EDGE ( 'NONE', *, *, #1590, .F. ) ; +#1814 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1815 = FACE_BOUND ( 'NONE', #1942, .T. ) ; +#1816 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1817 = VERTEX_POINT ( 'NONE', #2598 ) ; +#1818 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1819 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1820 = EDGE_CURVE ( 'NONE', #3528, #3774, #3023, .T. ) ; +#1821 = VECTOR ( 'NONE', #643, 1000.000000000000000 ) ; +#1822 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1823 = VERTEX_POINT ( 'NONE', #3936 ) ; +#1824 = CIRCLE ( 'NONE', #3302, 2.300000000000006484 ) ; +#1825 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #3945 ) ; +#1826 = FACE_OUTER_BOUND ( 'NONE', #1199, .T. ) ; +#1827 = EDGE_LOOP ( 'NONE', ( #2056, #1191, #4214, #1910 ) ) ; +#1828 = PLANE ( 'NONE', #1358 ) ; +#1829 = AXIS2_PLACEMENT_3D ( 'NONE', #601, #3280, #3649 ) ; +#1830 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1831 = ORIENTED_EDGE ( 'NONE', *, *, #3509, .T. ) ; +#1832 = VERTEX_POINT ( 'NONE', #3914 ) ; +#1833 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1834 = CARTESIAN_POINT ( 'NONE', ( -41.25819837980453286, -1.199999999999999956, -46.01087987044774508 ) ) ; +#1835 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -4.500000000000000000, 53.73725382063049238 ) ) ; +#1836 = ORIENTED_EDGE ( 'NONE', *, *, #2238, .F. ) ; +#1837 = CARTESIAN_POINT ( 'NONE', ( 38.69635322281465051, -1.200000000000000622, -50.74561984842738838 ) ) ; +#1838 = CIRCLE ( 'NONE', #928, 5.800000000000027356 ) ; +#1839 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1840 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1841 = ORIENTED_EDGE ( 'NONE', *, *, #602, .T. ) ; +#1842 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1843 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1844 = ORIENTED_EDGE ( 'NONE', *, *, #102, .F. ) ; +#1845 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1846 = ORIENTED_EDGE ( 'NONE', *, *, #2808, .T. ) ; +#1847 = ADVANCED_FACE ( 'NONE', ( #584 ), #3980, .F. ) ; +#1848 = FACE_OUTER_BOUND ( 'NONE', #3232, .T. ) ; +#1849 = EDGE_CURVE ( 'NONE', #2403, #2333, #3, .T. ) ; +#1850 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -4.500000000000000000, -21.43027221244938119 ) ) ; +#1851 = ADVANCED_FACE ( 'NONE', ( #4334, #2576 ), #3301, .T. ) ; +#1852 = ORIENTED_EDGE ( 'NONE', *, *, #1563, .T. ) ; +#1853 = EDGE_LOOP ( 'NONE', ( #63, #2762, #2920, #1754 ) ) ; +#1854 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -4.500000000000000000, 21.43027221244938119 ) ) ; +#1855 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -1.199999999999999956, 36.73402833653199906 ) ) ; +#1856 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1857 = EDGE_CURVE ( 'NONE', #686, #2600, #4139, .T. ) ; +#1858 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1859 = LINE ( 'NONE', #3194, #2090 ) ; +#1860 = CARTESIAN_POINT ( 'NONE', ( 38.69635322281465761, -4.299999999999999822, -53.62639461200842561 ) ) ; +#1861 = ORIENTED_EDGE ( 'NONE', *, *, #1649, .T. ) ; +#1862 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.199999999999999956, -22.16370172317620302 ) ) ; +#1863 = VECTOR ( 'NONE', #2396, 1000.000000000000000 ) ; +#1864 = CYLINDRICAL_SURFACE ( 'NONE', #1278, 3.000000000000002665 ) ; +#1865 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1866 = ORIENTED_EDGE ( 'NONE', *, *, #2985, .T. ) ; +#1868 = AXIS2_PLACEMENT_3D ( 'NONE', #3716, #1685, #3432 ) ; +#1867 = AXIS2_PLACEMENT_3D ( 'NONE', #3222, #218, #2897 ) ; +#1869 = CIRCLE ( 'NONE', #1602, 0.9999999999999981126 ) ; +#1870 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1871 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1872 = ORIENTED_EDGE ( 'NONE', *, *, #2680, .T. ) ; +#1873 = FACE_OUTER_BOUND ( 'NONE', #2776, .T. ) ; +#1874 = VERTEX_POINT ( 'NONE', #317 ) ; +#1875 = CARTESIAN_POINT ( 'NONE', ( 32.10020398454726376, -2.400000000000000799, -63.80000000000018900 ) ) ; +#1876 = EDGE_CURVE ( 'NONE', #3142, #1743, #2251, .T. ) ; +#1877 = EDGE_LOOP ( 'NONE', ( #80, #3562, #2089, #4302, #819 ) ) ; +#1878 = ADVANCED_FACE ( 'NONE', ( #3628 ), #1960, .T. ) ; +#1879 = ORIENTED_EDGE ( 'NONE', *, *, #3454, .F. ) ; +#1880 = LINE ( 'NONE', #2228, #1945 ) ; +#1881 = CIRCLE ( 'NONE', #2501, 2.299999999999999822 ) ; +#1882 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1883 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1884 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#1885 = VECTOR ( 'NONE', #3353, 1000.000000000000000 ) ; +#1886 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#1887 = PLANE ( 'NONE', #1867 ) ; +#1888 = ORIENTED_EDGE ( 'NONE', *, *, #3660, .T. ) ; +#1889 = CARTESIAN_POINT ( 'NONE', ( 4.045000030639409161, -4.500000000000000000, -48.52514799347714103 ) ) ; +#1890 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1891 = EDGE_CURVE ( 'NONE', #2054, #2868, #630, .T. ) ; +#1892 = VERTEX_POINT ( 'NONE', #907 ) ; +#1893 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -1.199999999999999734, 19.43027221244938119 ) ) ; +#1894 = VERTEX_POINT ( 'NONE', #2664 ) ; +#1895 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, 0.000000000000000000, -26.76370172317620444 ) ) ; +#1896 = ORIENTED_EDGE ( 'NONE', *, *, #3722, .F. ) ; +#1897 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1898 = ORIENTED_EDGE ( 'NONE', *, *, #2061, .T. ) ; +#1899 = VECTOR ( 'NONE', #1557, 1000.000000000000000 ) ; +#1900 = EDGE_LOOP ( 'NONE', ( #1240, #1526, #3751, #1419 ) ) ; +#1901 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#1902 = AXIS2_PLACEMENT_3D ( 'NONE', #1676, #3378, #2365 ) ; +#1903 = FACE_OUTER_BOUND ( 'NONE', #3578, .T. ) ; +#1904 = CYLINDRICAL_SURFACE ( 'NONE', #999, 3.000000000000002665 ) ; +#1905 = ADVANCED_FACE ( 'NONE', ( #1001, #3669 ), #1680, .F. ) ; +#1906 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1907 = ADVANCED_FACE ( 'NONE', ( #3255 ), #2348, .T. ) ; +#1908 = LINE ( 'NONE', #4256, #3285 ) ; +#1909 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, 0.000000000000000000, 34.43402833653198769 ) ) ; +#1910 = ORIENTED_EDGE ( 'NONE', *, *, #908, .F. ) ; +#1911 = ADVANCED_FACE ( 'NONE', ( #479, #2704 ), #1355, .F. ) ; +#1912 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -2.399999999999999911, 0.000000000000000000 ) ) ; +#1913 = CIRCLE ( 'NONE', #4012, 2.000000000000001776 ) ; +#1914 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -4.500000000000000000, 21.43027221244074099 ) ) ; +#1915 = CIRCLE ( 'NONE', #2756, 60.30000000000072902 ) ; +#1916 = LINE ( 'NONE', #3884, #4127 ) ; +#1917 = ORIENTED_EDGE ( 'NONE', *, *, #4187, .T. ) ; +#1918 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1919 = EDGE_LOOP ( 'NONE', ( #3074, #449, #751, #1774 ) ) ; +#1920 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#1921 = ORIENTED_EDGE ( 'NONE', *, *, #1100, .T. ) ; +#1922 = ORIENTED_EDGE ( 'NONE', *, *, #1237, .T. ) ; +#1923 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -4.500000000000000000, -46.14976107412045536 ) ) ; +#1924 = PLANE ( 'NONE', #3757 ) ; +#1925 = FACE_OUTER_BOUND ( 'NONE', #405, .T. ) ; +#1926 = CARTESIAN_POINT ( 'NONE', ( 39.75819837980361626, -4.299999999999999822, -50.74561984842738838 ) ) ; +#1927 = ADVANCED_FACE ( 'NONE', ( #2024 ), #3034, .T. ) ; +#1928 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#1929 = CYLINDRICAL_SURFACE ( 'NONE', #2230, 2.300000000000003375 ) ; +#1930 = ORIENTED_EDGE ( 'NONE', *, *, #3070, .T. ) ; +#1931 = FACE_OUTER_BOUND ( 'NONE', #1258, .T. ) ; +#1932 = ADVANCED_FACE ( 'NONE', ( #4042 ), #3176, .T. ) ; +#1933 = CARTESIAN_POINT ( 'NONE', ( 24.47431442974228943, 0.000000000000000000, -60.15937500000008242 ) ) ; +#1934 = EDGE_CURVE ( 'NONE', #1808, #4293, #1321, .T. ) ; +#1935 = EDGE_CURVE ( 'NONE', #1524, #2023, #1470, .T. ) ; +#1936 = CARTESIAN_POINT ( 'NONE', ( -41.25819837980453286, -1.199999999999999956, -46.01087987044774508 ) ) ; +#1937 = VECTOR ( 'NONE', #4091, 1000.000000000000000 ) ; +#1938 = EDGE_LOOP ( 'NONE', ( #1732, #1000, #4081, #5 ) ) ; +#1939 = FACE_OUTER_BOUND ( 'NONE', #2195, .T. ) ; +#1940 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1941 = EDGE_CURVE ( 'NONE', #117, #4099, #2012, .T. ) ; +#1942 = EDGE_LOOP ( 'NONE', ( #4089, #3749 ) ) ; +#1943 = ORIENTED_EDGE ( 'NONE', *, *, #3852, .F. ) ; +#1944 = FACE_OUTER_BOUND ( 'NONE', #3016, .T. ) ; +#1945 = VECTOR ( 'NONE', #2556, 1000.000000000000000 ) ; +#1946 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1947 = CARTESIAN_POINT ( 'NONE', ( -39.75819837980453286, -1.199999999999999734, -42.63130005366996755 ) ) ; +#1948 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#1949 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -1.199999999999999734, -21.43027221244073743 ) ) ; +#1950 = AXIS2_PLACEMENT_3D ( 'NONE', #1959, #905, #979 ) ; +#1951 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1952 = EDGE_LOOP ( 'NONE', ( #793, #111 ) ) ; +#1953 = CARTESIAN_POINT ( 'NONE', ( 39.75819837980364468, -4.299999999999999822, -1.904035013177533011E-14 ) ) ; +#1954 = VECTOR ( 'NONE', #3439, 1000.000000000000000 ) ; +#1955 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#1956 = EDGE_CURVE ( 'NONE', #243, #3528, #3481, .T. ) ; +#1957 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -2.399999999999999911, -47.14976107412051221 ) ) ; +#1958 = ORIENTED_EDGE ( 'NONE', *, *, #480, .F. ) ; +#1959 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -4.500000000000000000, 51.73725382063413036 ) ) ; +#1960 = PLANE ( 'NONE', #2040 ) ; +#1961 = EDGE_CURVE ( 'NONE', #689, #2689, #148, .T. ) ; +#1962 = ORIENTED_EDGE ( 'NONE', *, *, #3826, .F. ) ; +#1963 = CIRCLE ( 'NONE', #287, 1.499999999999161782 ) ; +#1964 = ORIENTED_EDGE ( 'NONE', *, *, #782, .F. ) ; +#1965 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1966 = CARTESIAN_POINT ( 'NONE', ( 39.75819837980361626, 0.000000000000000000, -60.50000000000000000 ) ) ; +#1967 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1968 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -4.500000000000000000, -42.63130005366996755 ) ) ; +#1969 = CIRCLE ( 'NONE', #3930, 2.300000000000010481 ) ; +#1970 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1971 = ADVANCED_FACE ( 'NONE', ( #4163 ), #1700, .F. ) ; +#1972 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -1.199999999999999734, 51.73725382063049238 ) ) ; +#1973 = ORIENTED_EDGE ( 'NONE', *, *, #1371, .T. ) ; +#1974 = LINE ( 'NONE', #3315, #2175 ) ; +#1975 = AXIS2_PLACEMENT_3D ( 'NONE', #2232, #3239, #2253 ) ; +#1976 = CYLINDRICAL_SURFACE ( 'NONE', #3848, 2.000000000000001776 ) ; +#1977 = ORIENTED_EDGE ( 'NONE', *, *, #3088, .T. ) ; +#1978 = CARTESIAN_POINT ( 'NONE', ( -37.73125606114251696, -1.199999999999999734, -43.43130005367003577 ) ) ; +#1979 = ORIENTED_EDGE ( 'NONE', *, *, #4, .T. ) ; +#1980 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980342726, -1.199999999999999956, -60.50000000000000000 ) ) ; +#1981 = AXIS2_PLACEMENT_3D ( 'NONE', #2668, #2998, #4338 ) ; +#1982 = EDGE_LOOP ( 'NONE', ( #4221, #2646 ) ) ; +#1983 = ORIENTED_EDGE ( 'NONE', *, *, #1210, .F. ) ; +#1984 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -1.199999999999999956, 0.000000000000000000 ) ) ; +#1985 = ADVANCED_FACE ( 'NONE', ( #3505 ), #706, .F. ) ; +#1986 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -4.500000000000000000, 24.43027221244074454 ) ) ; +#1987 = EDGE_CURVE ( 'NONE', #3801, #2507, #1719, .T. ) ; +#1988 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1989 = FACE_OUTER_BOUND ( 'NONE', #2500, .T. ) ; +#1990 = ADVANCED_FACE ( 'NONE', ( #3382, #2128 ), #379, .T. ) ; +#1991 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#1992 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#1993 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.500000000000000000, 0.000000000000000000 ) ) ; +#1994 = ORIENTED_EDGE ( 'NONE', *, *, #355, .F. ) ; +#1995 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#1996 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #248 ) ; +#1997 = VERTEX_POINT ( 'NONE', #3733 ) ; +#1998 = VERTEX_POINT ( 'NONE', #4067 ) ; +#1999 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -1.199999999999999734, -35.53553390593242511 ) ) ; +#2000 = ORIENTED_EDGE ( 'NONE', *, *, #3996, .T. ) ; +#2001 = VECTOR ( 'NONE', #3056, 1000.000000000000000 ) ; +#2002 = ORIENTED_EDGE ( 'NONE', *, *, #1849, .F. ) ; +#2003 = LINE ( 'NONE', #3017, #2922 ) ; +#2004 = AXIS2_PLACEMENT_3D ( 'NONE', #531, #1871, #2790 ) ; +#2005 = FACE_OUTER_BOUND ( 'NONE', #1755, .T. ) ; +#2006 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -1.199999999999999956, 0.000000000000000000 ) ) ; +#2007 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ; +#2008 = CIRCLE ( 'NONE', #739, 1.500000000007918555 ) ; +#2009 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2010 = ADVANCED_FACE ( 'NONE', ( #1063 ), #3463, .T. ) ; +#2011 = EDGE_CURVE ( 'NONE', #3142, #341, #806, .T. ) ; +#2012 = CIRCLE ( 'NONE', #2993, 2.000000000000001776 ) ; +#2013 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2014 = CIRCLE ( 'NONE', #43, 2.000000000000001776 ) ; +#2015 = CARTESIAN_POINT ( 'NONE', ( -4.045000030643222999, -4.500000000000000000, -48.52514799347749630 ) ) ; +#2016 = ORIENTED_EDGE ( 'NONE', *, *, #1798, .T. ) ; +#2017 = FACE_OUTER_BOUND ( 'NONE', #1005, .T. ) ; +#2018 = PERSON_AND_ORGANIZATION_ROLE ( 'design_supplier' ) ; +#2019 = EDGE_CURVE ( 'NONE', #3405, #2462, #113, .T. ) ; +#2020 = CIRCLE ( 'NONE', #3069, 4.799999999999970512 ) ; +#2021 = EDGE_CURVE ( 'NONE', #715, #4122, #596, .T. ) ; +#2022 = ORIENTED_EDGE ( 'NONE', *, *, #2340, .F. ) ; +#2023 = VERTEX_POINT ( 'NONE', #2281 ) ; +#2024 = FACE_OUTER_BOUND ( 'NONE', #1542, .T. ) ; +#2025 = ORIENTED_EDGE ( 'NONE', *, *, #3909, .T. ) ; +#2026 = ORIENTED_EDGE ( 'NONE', *, *, #2872, .T. ) ; +#2027 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2028 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2029 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, 0.000000000000000000, -26.76370172317620444 ) ) ; +#2030 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -4.500000000000000000, -21.43027221244073743 ) ) ; +#2031 = FACE_OUTER_BOUND ( 'NONE', #3983, .T. ) ; +#2032 = AXIS2_PLACEMENT_3D ( 'NONE', #3293, #4192, #1568 ) ; +#2033 = CARTESIAN_POINT ( 'NONE', ( 35.02020398454638439, -3.670000000000002593, -63.80000000000018900 ) ) ; +#2034 = ADVANCED_FACE ( 'NONE', ( #2591 ), #3549, .F. ) ; +#2035 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2036 = ORIENTED_EDGE ( 'NONE', *, *, #1701, .T. ) ; +#2037 = AXIS2_PLACEMENT_3D ( 'NONE', #1403, #2794, #3117 ) ; +#2038 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2039 = EDGE_CURVE ( 'NONE', #4149, #1175, #950, .T. ) ; +#2040 = AXIS2_PLACEMENT_3D ( 'NONE', #666, #339, #956 ) ; +#2041 = ADVANCED_FACE ( 'NONE', ( #3928 ), #2612, .T. ) ; +#2042 = EDGE_LOOP ( 'NONE', ( #1958, #361, #1578, #2838 ) ) ; +#2043 = AXIS2_PLACEMENT_3D ( 'NONE', #635, #323, #3921 ) ; +#2044 = EDGE_LOOP ( 'NONE', ( #2768, #4176, #3381, #1964 ) ) ; +#2045 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -2.399999999999999911, 0.000000000000000000 ) ) ; +#2046 = EDGE_LOOP ( 'NONE', ( #4268, #1482, #492, #4115 ) ) ; +#2047 = CIRCLE ( 'NONE', #228, 2.299999999999998934 ) ; +#2048 = VERTEX_POINT ( 'NONE', #1566 ) ; +#2049 = FACE_OUTER_BOUND ( 'NONE', #2269, .T. ) ; +#2050 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -2.399999999999999911, 30.93402833653199835 ) ) ; +#2051 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2052 = FACE_OUTER_BOUND ( 'NONE', #3303, .T. ) ; +#2053 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2054 = VERTEX_POINT ( 'NONE', #1188 ) ; +#2055 = CIRCLE ( 'NONE', #1216, 2.000000000000001776 ) ; +#2056 = ORIENTED_EDGE ( 'NONE', *, *, #4183, .F. ) ; +#2057 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -4.500000000000000000, 21.43027221244938119 ) ) ; +#2058 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2059 = ORIENTED_EDGE ( 'NONE', *, *, #3651, .T. ) ; +#2060 = CARTESIAN_POINT ( 'NONE', ( -40.25678579777999033, -1.199999999999999956, -44.89411094154586124 ) ) ; +#2061 = EDGE_CURVE ( 'NONE', #2411, #1874, #1453, .T. ) ; +#2062 = ORIENTED_EDGE ( 'NONE', *, *, #2808, .F. ) ; +#2063 = ORIENTED_EDGE ( 'NONE', *, *, #3588, .T. ) ; +#2064 = ORIENTED_EDGE ( 'NONE', *, *, #1121, .T. ) ; +#2065 = ORIENTED_EDGE ( 'NONE', *, *, #3188, .T. ) ; +#2066 = CYLINDRICAL_SURFACE ( 'NONE', #103, 2.299999999999999822 ) ; +#2067 = LINE ( 'NONE', #3409, #4325 ) ; +#2068 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2069 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2070 = EDGE_CURVE ( 'NONE', #539, #2421, #2944, .T. ) ; +#2071 = FACE_OUTER_BOUND ( 'NONE', #1778, .T. ) ; +#2072 = LOCAL_TIME ( 22, 36, 17.00000000000000000, #109 ) ; +#2073 = EDGE_LOOP ( 'NONE', ( #2724, #377, #2819, #1922 ) ) ; +#2074 = ORIENTED_EDGE ( 'NONE', *, *, #967, .F. ) ; +#2075 = FACE_OUTER_BOUND ( 'NONE', #1232, .T. ) ; +#2076 = VECTOR ( 'NONE', #213, 1000.000000000000000 ) ; +#2077 = CYLINDRICAL_SURFACE ( 'NONE', #3485, 2.300000000000003375 ) ; +#2078 = ORIENTED_EDGE ( 'NONE', *, *, #730, .F. ) ; +#2080 = AXIS2_PLACEMENT_3D ( 'NONE', #4049, #2051, #3388 ) ; +#2079 = CIRCLE ( 'NONE', #3617, 0.8000000000001200595 ) ; +#2081 = AXIS2_PLACEMENT_3D ( 'NONE', #2262, #575, #4260 ) ; +#2082 = AXIS2_PLACEMENT_3D ( 'NONE', #4177, #517, #2205 ) ; +#2083 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2084 = VECTOR ( 'NONE', #3518, 1000.000000000000000 ) ; +#2085 = VECTOR ( 'NONE', #2405, 1000.000000000000000 ) ; +#2086 = ORIENTED_EDGE ( 'NONE', *, *, #927, .F. ) ; +#2087 = ORIENTED_EDGE ( 'NONE', *, *, #2793, .F. ) ; +#2088 = EDGE_CURVE ( 'NONE', #342, #1804, #1512, .T. ) ; +#2089 = ORIENTED_EDGE ( 'NONE', *, *, #2436, .T. ) ; +#2090 = VECTOR ( 'NONE', #3220, 1000.000000000000000 ) ; +#2091 = ORIENTED_EDGE ( 'NONE', *, *, #2720, .F. ) ; +#2092 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2093 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.500000000000000000, 26.76370172317528784 ) ) ; +#2094 = LINE ( 'NONE', #1727, #185 ) ; +#2095 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2096 = ADVANCED_FACE ( 'NONE', ( #1259 ), #3571, .F. ) ; +#2097 = CARTESIAN_POINT ( 'NONE', ( 25.96770808493693039, -1.199999999999999956, -61.80000000000018900 ) ) ; +#2098 = VERTEX_POINT ( 'NONE', #4282 ) ; +#2099 = VERTEX_POINT ( 'NONE', #1587 ) ; +#2100 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2101 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.500000000000000000, -26.76370172317620444 ) ) ; +#2102 = ORIENTED_EDGE ( 'NONE', *, *, #1002, .T. ) ; +#2103 = EDGE_CURVE ( 'NONE', #1823, #2099, #189, .T. ) ; +#2104 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2105 = VECTOR ( 'NONE', #246, 1000.000000000000000 ) ; +#2106 = CIRCLE ( 'NONE', #426, 0.8000000000000645484 ) ; +#2107 = AXIS2_PLACEMENT_3D ( 'NONE', #1050, #1112, #1710 ) ; +#2108 = CARTESIAN_POINT ( 'NONE', ( 24.47431442974228943, -1.199999999999999956, -60.15937500000008242 ) ) ; +#2109 = ORIENTED_EDGE ( 'NONE', *, *, #2308, .F. ) ; +#2110 = CYLINDRICAL_SURFACE ( 'NONE', #2420, 1.000000000000000888 ) ; +#2111 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -1.199999999999999734, 51.73725382063413036 ) ) ; +#2112 = CIRCLE ( 'NONE', #2043, 2.299999999999999822 ) ; +#2113 = ORIENTED_EDGE ( 'NONE', *, *, #100, .F. ) ; +#2114 = FACE_BOUND ( 'NONE', #583, .T. ) ; +#2115 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 51.94976107412048805 ) ) ; +#2116 = AXIS2_PLACEMENT_3D ( 'NONE', #1533, #1134, #3216 ) ; +#2117 = VECTOR ( 'NONE', #773, 1000.000000000000000 ) ; +#2118 = VERTEX_POINT ( 'NONE', #2921 ) ; +#2119 = ADVANCED_FACE ( 'NONE', ( #1931 ), #2517, .F. ) ; +#2120 = ORIENTED_EDGE ( 'NONE', *, *, #481, .T. ) ; +#2121 = PLANE ( 'NONE', #3828 ) ; +#2122 = EDGE_CURVE ( 'NONE', #991, #1784, #742, .T. ) ; +#2123 = CYLINDRICAL_SURFACE ( 'NONE', #4083, 0.8000000000001894485 ) ; +#2124 = ORIENTED_EDGE ( 'NONE', *, *, #432, .F. ) ; +#2125 = CIRCLE ( 'NONE', #374, 5.799999999999999822 ) ; +#2126 = ADVANCED_FACE ( 'NONE', ( #3854 ), #3615, .F. ) ; +#2127 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2128 = FACE_BOUND ( 'NONE', #1392, .T. ) ; +#2129 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2130 = VERTEX_POINT ( 'NONE', #1862 ) ; +#2131 = LINE ( 'NONE', #2549, #3895 ) ; +#2132 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2133 = EDGE_LOOP ( 'NONE', ( #549, #1600, #909, #116 ) ) ; +#2134 = LINE ( 'NONE', #816, #15 ) ; +#2135 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, -1.000000000000000000 ) ) ; +#2136 = VERTEX_POINT ( 'NONE', #4190 ) ; +#2137 = EDGE_LOOP ( 'NONE', ( #4218, #3096, #2943, #1459 ) ) ; +#2138 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.199999999999999956, 24.46370172317528713 ) ) ; +#2139 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -2.399999999999999911, 5.799999999999999822 ) ) ; +#2140 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -4.500000000000000000, -24.43027221244938474 ) ) ; +#2141 = VERTEX_POINT ( 'NONE', #4215 ) ; +#2142 = EDGE_CURVE ( 'NONE', #3713, #4200, #39, .T. ) ; +#2143 = AXIS2_PLACEMENT_3D ( 'NONE', #691, #362, #1705 ) ; +#2144 = CARTESIAN_POINT ( 'NONE', ( 39.75819837980377258, 0.000000000000000000, -46.01087987045168859 ) ) ; +#2145 = AXIS2_PLACEMENT_3D ( 'NONE', #2111, #3813, #486 ) ; +#2146 = VECTOR ( 'NONE', #1884, 1000.000000000000000 ) ; +#2147 = CARTESIAN_POINT ( 'NONE', ( 39.75819837980361626, -1.199999999999999956, -60.50000000000000000 ) ) ; +#2148 = EDGE_CURVE ( 'NONE', #1682, #1045, #3337, .T. ) ; +#2149 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.000000000000000000, 0.000000000000000000 ) ) ; +#2150 = ORIENTED_EDGE ( 'NONE', *, *, #593, .T. ) ; +#2151 = EDGE_CURVE ( 'NONE', #652, #3258, #2008, .T. ) ; +#2152 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2153 = AXIS2_PLACEMENT_3D ( 'NONE', #201, #2858, #3507 ) ; +#2154 = VERTEX_POINT ( 'NONE', #1633 ) ; +#2155 = CYLINDRICAL_SURFACE ( 'NONE', #4144, 2.000000000000001776 ) ; +#2156 = CIRCLE ( 'NONE', #4193, 2.299999999999999822 ) ; +#2157 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2158 = ORIENTED_EDGE ( 'NONE', *, *, #2171, .F. ) ; +#2159 = ORIENTED_EDGE ( 'NONE', *, *, #3390, .T. ) ; +#2160 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -1.199999999999999956, 42.53402833653107962 ) ) ; +#2161 = FACE_BOUND ( 'NONE', #4132, .T. ) ; +#2162 = CARTESIAN_POINT ( 'NONE', ( 37.89635322281446861, -1.200000000000000622, -51.54561984842757738 ) ) ; +#2163 = ORIENTED_EDGE ( 'NONE', *, *, #3400, .F. ) ; +#2164 = CARTESIAN_POINT ( 'NONE', ( -3.663396254167312183, -2.399999999999999911, -48.84822469919821941 ) ) ; +#2165 = CARTESIAN_POINT ( 'NONE', ( 39.75819837980361626, -1.200000000000000622, -53.62639461200842561 ) ) ; +#2166 = EDGE_CURVE ( 'NONE', #2421, #2995, #4304, .T. ) ; +#2167 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2168 = ORIENTED_EDGE ( 'NONE', *, *, #1187, .T. ) ; +#2169 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -2.399999999999999911, 36.73402833653199906 ) ) ; +#2170 = EDGE_CURVE ( 'NONE', #1020, #4064, #3922, .T. ) ; +#2171 = EDGE_CURVE ( 'NONE', #3339, #342, #916, .T. ) ; +#2172 = EDGE_CURVE ( 'NONE', #3801, #2995, #1099, .T. ) ; +#2173 = CARTESIAN_POINT ( 'NONE', ( -37.73125606114251696, -4.500000000000000000, -43.43130005367003577 ) ) ; +#2174 = VERTEX_POINT ( 'NONE', #2164 ) ; +#2175 = VECTOR ( 'NONE', #1653, 1000.000000000000000 ) ; +#2176 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2177 = ORIENTED_EDGE ( 'NONE', *, *, #2454, .T. ) ; +#2178 = CARTESIAN_POINT ( 'NONE', ( -41.25819837980453286, -1.199999999999999956, -46.01087987044774508 ) ) ; +#2179 = AXIS2_PLACEMENT_3D ( 'NONE', #3130, #831, #1799 ) ; +#2180 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -1.199999999999999734, -19.43027221244073743 ) ) ; +#2181 = ORIENTED_EDGE ( 'NONE', *, *, #2151, .T. ) ; +#2182 = EDGE_LOOP ( 'NONE', ( #1359, #2622, #471, #2331 ) ) ; +#2183 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -4.500000000000000000, 51.73725382063049238 ) ) ; +#2184 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2185 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -1.199999999999999734, -51.94976107412048805 ) ) ; +#2186 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -4.500000000000000000, -37.19226770805031634 ) ) ; +#2187 = CIRCLE ( 'NONE', #504, 3.000000000000002665 ) ; +#2188 = FACE_OUTER_BOUND ( 'NONE', #669, .T. ) ; +#2189 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2190 = ORIENTED_EDGE ( 'NONE', *, *, #270, .F. ) ; +#2191 = AXIS2_PLACEMENT_3D ( 'NONE', #4084, #393, #1077 ) ; +#2192 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2193 = CARTESIAN_POINT ( 'NONE', ( 36.21295323236918051, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2194 = ORIENTED_EDGE ( 'NONE', *, *, #567, .T. ) ; +#2195 = EDGE_LOOP ( 'NONE', ( #3868, #2655 ) ) ; +#2196 = EDGE_CURVE ( 'NONE', #3198, #3547, #546, .T. ) ; +#2197 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2198 = FACE_OUTER_BOUND ( 'NONE', #1982, .T. ) ; +#2199 = ORIENTED_EDGE ( 'NONE', *, *, #3570, .F. ) ; +#2200 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.199999999999999956, 51.94976107412048805 ) ) ; +#2201 = VERTEX_POINT ( 'NONE', #1837 ) ; +#2202 = FACE_OUTER_BOUND ( 'NONE', #3768, .T. ) ; +#2203 = ORIENTED_EDGE ( 'NONE', *, *, #922, .T. ) ; +#2204 = ORIENTED_EDGE ( 'NONE', *, *, #1060, .F. ) ; +#2205 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2206 = ADVANCED_FACE ( 'NONE', ( #3218 ), #1582, .F. ) ; +#2207 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2208 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.199999999999999956, 51.94976107412048805 ) ) ; +#2209 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2210 = PLANE ( 'NONE', #4058 ) ; +#2211 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2212 = ORIENTED_EDGE ( 'NONE', *, *, #1591, .F. ) ; +#2213 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2214 = AXIS2_PLACEMENT_3D ( 'NONE', #2335, #3346, #4005 ) ; +#2215 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -4.500000000000000000, 21.43027221244074099 ) ) ; +#2216 = CIRCLE ( 'NONE', #1035, 2.299999999999998934 ) ; +#2217 = CC_DESIGN_APPROVAL ( #758, ( #3688 ) ) ; +#2218 = ORIENTED_EDGE ( 'NONE', *, *, #3084, .F. ) ; +#2219 = VECTOR ( 'NONE', #1300, 1000.000000000000000 ) ; +#2220 = CYLINDRICAL_SURFACE ( 'NONE', #1730, 5.799999999999999822 ) ; +#2221 = EDGE_CURVE ( 'NONE', #1832, #797, #1451, .T. ) ; +#2222 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2223 = VERTEX_POINT ( 'NONE', #498 ) ; +#2224 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -1.199999999999999956, 0.000000000000000000 ) ) ; +#2225 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2226 = VERTEX_POINT ( 'NONE', #520 ) ; +#2227 = EDGE_LOOP ( 'NONE', ( #650, #759, #2912, #2759 ) ) ; +#2228 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.500000000000000000, -26.76370172317620444 ) ) ; +#2229 = EDGE_CURVE ( 'NONE', #1045, #1044, #192, .T. ) ; +#2230 = AXIS2_PLACEMENT_3D ( 'NONE', #1607, #1951, #2610 ) ; +#2231 = FACE_BOUND ( 'NONE', #3915, .T. ) ; +#2232 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -4.500000000000000000, -21.43027221244938119 ) ) ; +#2233 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2234 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -2.399999999999999911, 0.000000000000000000 ) ) ; +#2235 = PLANE ( 'NONE', #462 ) ; +#2236 = ORIENTED_EDGE ( 'NONE', *, *, #2671, .F. ) ; +#2237 = DIRECTION ( 'NONE', ( 4.789037458359139614E-16, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2238 = EDGE_CURVE ( 'NONE', #60, #1264, #2254, .T. ) ; +#2239 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #1522, 'distance_accuracy_value', 'NONE'); +#2240 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2241 = AXIS2_PLACEMENT_3D ( 'NONE', #1593, #2929, #2571 ) ; +#2242 = CARTESIAN_POINT ( 'NONE', ( 22.78180162019453192, -1.199999999999999956, -58.30000000000018190 ) ) ; +#2243 = EDGE_LOOP ( 'NONE', ( #3415, #2541, #4169, #4095 ) ) ; +#2244 = FACE_OUTER_BOUND ( 'NONE', #764, .T. ) ; +#2245 = VERTEX_POINT ( 'NONE', #3847 ) ; +#2246 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.399999999999999911, 51.94976107412048805 ) ) ; +#2247 = CIRCLE ( 'NONE', #2523, 1.269999999999993356 ) ; +#2248 = VERTEX_POINT ( 'NONE', #566 ) ; +#2249 = ORIENTED_EDGE ( 'NONE', *, *, #1513, .F. ) ; +#2250 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2251 = CIRCLE ( 'NONE', #923, 1.300000000000189893 ) ; +#2252 = LINE ( 'NONE', #4295, #156 ) ; +#2253 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2254 = LINE ( 'NONE', #143, #394 ) ; +#2255 = EDGE_CURVE ( 'NONE', #4014, #2136, #168, .T. ) ; +#2256 = FACE_OUTER_BOUND ( 'NONE', #1500, .T. ) ; +#2257 = EDGE_CURVE ( 'NONE', #2346, #1524, #3822, .T. ) ; +#2258 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2259 = AXIS2_PLACEMENT_3D ( 'NONE', #3369, #3020, #2095 ) ; +#2260 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2261 = VERTEX_POINT ( 'NONE', #1181 ) ; +#2262 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.500000000000000000, -24.46370172317620373 ) ) ; +#2263 = CIRCLE ( 'NONE', #2967, 3.000000000000002665 ) ; +#2264 = FACE_OUTER_BOUND ( 'NONE', #3440, .T. ) ; +#2265 = AXIS2_PLACEMENT_3D ( 'NONE', #3747, #84, #123 ) ; +#2266 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2267 = ORIENTED_EDGE ( 'NONE', *, *, #2418, .F. ) ; +#2268 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.500000000000000000, 0.000000000000000000 ) ) ; +#2269 = EDGE_LOOP ( 'NONE', ( #3297, #2062, #3724, #3402 ) ) ; +#2270 = CYLINDRICAL_SURFACE ( 'NONE', #1480, 2.000000000000001776 ) ; +#2271 = VERTEX_POINT ( 'NONE', #4232 ) ; +#2272 = EDGE_LOOP ( 'NONE', ( #959, #661, #3384, #210 ) ) ; +#2273 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2274 = PLANE ( 'NONE', #783 ) ; +#2275 = CYLINDRICAL_SURFACE ( 'NONE', #298, 5.799999999999999822 ) ; +#2276 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2277 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2278 = EDGE_CURVE ( 'NONE', #3339, #1892, #2512, .T. ) ; +#2279 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2280 = VERTEX_POINT ( 'NONE', #1535 ) ; +#2281 = CARTESIAN_POINT ( 'NONE', ( -4.426603807119230183, -1.199999999999999734, -48.20207128775689398 ) ) ; +#2282 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2283 = ORGANIZATION ( 'δָ¶¨', 'δָ¶¨', '' ) ; +#2284 = VECTOR ( 'NONE', #1948, 1000.000000000000000 ) ; +#2285 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2287 = AXIS2_PLACEMENT_3D ( 'NONE', #772, #1108, #2416 ) ; +#2286 = AXIS2_PLACEMENT_3D ( 'NONE', #3387, #1726, #3098 ) ; +#2288 = ORIENTED_EDGE ( 'NONE', *, *, #3330, .T. ) ; +#2289 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2290 = EDGE_LOOP ( 'NONE', ( #4247, #3493, #3455, #2642 ) ) ; +#2291 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -1.199999999999999956, 34.43402833653108530 ) ) ; +#2292 = AXIS2_PLACEMENT_3D ( 'NONE', #2900, #900, #221 ) ; +#2293 = AXIS2_PLACEMENT_3D ( 'NONE', #2323, #1992, #969 ) ; +#2294 = ADVANCED_FACE ( 'NONE', ( #4207 ), #3589, .F. ) ; +#2295 = ORIENTED_EDGE ( 'NONE', *, *, #2577, .F. ) ; +#2296 = ORIENTED_EDGE ( 'NONE', *, *, #2088, .T. ) ; +#2297 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2298 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -2.399999999999999911, -5.799999999999999822 ) ) ; +#2299 = CARTESIAN_POINT ( 'NONE', ( 40.25678579777259358, -1.199999999999999956, -44.89411094154993975 ) ) ; +#2300 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#2301 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -1.199999999999999956, 2.299999999999998934 ) ) ; +#2302 = AXIS2_PLACEMENT_3D ( 'NONE', #646, #3299, #2908 ) ; +#2303 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2304 = ORIENTED_EDGE ( 'NONE', *, *, #3882, .F. ) ; +#2305 = AXIS2_PLACEMENT_3D ( 'NONE', #2917, #1205, #3501 ) ; +#2306 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2307 = EDGE_CURVE ( 'NONE', #3835, #1126, #896, .T. ) ; +#2308 = EDGE_CURVE ( 'NONE', #1055, #2130, #4255, .T. ) ; +#2309 = CYLINDRICAL_SURFACE ( 'NONE', #4065, 2.000000000000001776 ) ; +#2310 = ORIENTED_EDGE ( 'NONE', *, *, #3084, .T. ) ; +#2311 = LINE ( 'NONE', #4267, #3352 ) ; +#2312 = ORIENTED_EDGE ( 'NONE', *, *, #622, .T. ) ; +#2313 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2314 = VERTEX_POINT ( 'NONE', #2916 ) ; +#2315 = CIRCLE ( 'NONE', #3295, 2.000000000000001776 ) ; +#2316 = ORIENTED_EDGE ( 'NONE', *, *, #3202, .F. ) ; +#2317 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2318 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2319 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -4.500000000000000000, 51.73725382063413036 ) ) ; +#2320 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2321 = CIRCLE ( 'NONE', #1125, 1.000000000000000888 ) ; +#2322 = VECTOR ( 'NONE', #681, 1000.000000000000000 ) ; +#2323 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -2.399999999999999911, 0.000000000000000000 ) ) ; +#2324 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2325 = ORIENTED_EDGE ( 'NONE', *, *, #2070, .T. ) ; +#2326 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.399999999999999911, 51.94976107412048805 ) ) ; +#2327 = CIRCLE ( 'NONE', #3172, 5.800000000000027356 ) ; +#2328 = AXIS2_PLACEMENT_3D ( 'NONE', #3459, #3124, #3846 ) ; +#2329 = ORIENTED_EDGE ( 'NONE', *, *, #1212, .T. ) ; +#2330 = ADVANCED_FACE ( 'NONE', ( #1253 ), #2586, .F. ) ; +#2331 = ORIENTED_EDGE ( 'NONE', *, *, #1562, .T. ) ; +#2332 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.500000000000000000, -22.16370172317620302 ) ) ; +#2333 = VERTEX_POINT ( 'NONE', #1157 ) ; +#2334 = ORIENTED_EDGE ( 'NONE', *, *, #541, .T. ) ; +#2335 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -4.500000000000000000, -35.53553390593242511 ) ) ; +#2336 = CYLINDRICAL_SURFACE ( 'NONE', #1166, 2.300000000000006484 ) ; +#2337 = FACE_BOUND ( 'NONE', #3234, .T. ) ; +#2338 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.000000000000000000, 0.000000000000000000 ) ) ; +#2339 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2340 = EDGE_CURVE ( 'NONE', #708, #1126, #2487, .T. ) ; +#2341 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, -1.000000000000000000 ) ) ; +#2342 = FACE_OUTER_BOUND ( 'NONE', #858, .T. ) ; +#2343 = ORIENTED_EDGE ( 'NONE', *, *, #1060, .T. ) ; +#2344 = ADVANCED_FACE ( 'NONE', ( #964, #2672 ), #3329, .F. ) ; +#2345 = CARTESIAN_POINT ( 'NONE', ( -39.75819837980453286, -1.199999999999999734, -45.51207481725032267 ) ) ; +#2346 = VERTEX_POINT ( 'NONE', #3350 ) ; +#2347 = ORIENTED_EDGE ( 'NONE', *, *, #1276, .T. ) ; +#2348 = CYLINDRICAL_SURFACE ( 'NONE', #2744, 5.799999999999999822 ) ; +#2349 = ORIENTED_EDGE ( 'NONE', *, *, #2558, .T. ) ; +#2350 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ÈκÎ', '', #1347, .NOT_KNOWN. ) ; +#2351 = EDGE_CURVE ( 'NONE', #2911, #978, #463, .T. ) ; +#2352 = ORIENTED_EDGE ( 'NONE', *, *, #1436, .T. ) ; +#2353 = LINE ( 'NONE', #1360, #2001 ) ; +#2354 = VECTOR ( 'NONE', #2132, 1000.000000000000000 ) ; +#2355 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2356 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -4.500000000000000000, -21.43027221244938119 ) ) ; +#2357 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2358 = VECTOR ( 'NONE', #4342, 1000.000000000000000 ) ; +#2359 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -4.500000000000000000, -34.53553390593242511 ) ) ; +#2360 = EDGE_CURVE ( 'NONE', #1411, #404, #2925, .T. ) ; +#2361 = EDGE_CURVE ( 'NONE', #2751, #3998, #2216, .T. ) ; +#2362 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2363 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -1.199999999999999956, -5.799999999999999822 ) ) ; +#2364 = ORIENTED_EDGE ( 'NONE', *, *, #3536, .F. ) ; +#2365 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2366 = EDGE_CURVE ( 'NONE', #402, #243, #3193, .T. ) ; +#2367 = AXIS2_PLACEMENT_3D ( 'NONE', #3278, #1617, #3955 ) ; +#2368 = ORIENTED_EDGE ( 'NONE', *, *, #151, .T. ) ; +#2369 = ORIENTED_EDGE ( 'NONE', *, *, #1324, .F. ) ; +#2370 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2371 = ORIENTED_EDGE ( 'NONE', *, *, #1192, .F. ) ; +#2372 = ORIENTED_EDGE ( 'NONE', *, *, #2615, .F. ) ; +#2373 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2374 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2375 = EDGE_CURVE ( 'NONE', #2631, #255, #3616, .T. ) ; +#2376 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2377 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.199999999999999956, 54.24976107412048520 ) ) ; +#2378 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#2379 = AXIS2_PLACEMENT_3D ( 'NONE', #2592, #289, #856 ) ; +#2380 = ORIENTED_EDGE ( 'NONE', *, *, #2278, .T. ) ; +#2381 = FACE_OUTER_BOUND ( 'NONE', #1938, .T. ) ; +#2382 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2383 = VERTEX_POINT ( 'NONE', #2359 ) ; +#2384 = EDGE_CURVE ( 'NONE', #3416, #87, #3061, .T. ) ; +#2385 = VECTOR ( 'NONE', #1694, 1000.000000000000000 ) ; +#2386 = ADVANCED_FACE ( 'NONE', ( #347 ), #636, .F. ) ; +#2387 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2388 = AXIS2_PLACEMENT_3D ( 'NONE', #3341, #276, #1291 ) ; +#2389 = ORIENTED_EDGE ( 'NONE', *, *, #1452, .F. ) ; +#2390 = VECTOR ( 'NONE', #3190, 1000.000000000000000 ) ; +#2391 = ORIENTED_EDGE ( 'NONE', *, *, #622, .F. ) ; +#2392 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2393 = EDGE_LOOP ( 'NONE', ( #310, #4202, #3911, #1973, #1472, #2829, #3732, #2158 ) ) ; +#2394 = AXIS2_PLACEMENT_3D ( 'NONE', #1009, #673, #50 ) ; +#2395 = ORIENTED_EDGE ( 'NONE', *, *, #4237, .T. ) ; +#2396 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2397 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2398 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2399 = CARTESIAN_POINT ( 'NONE', ( -2.022500015322520994, -4.500000000000000000, -50.23745453379898862 ) ) ; +#2400 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2401 = AXIS2_PLACEMENT_3D ( 'NONE', #4315, #1251, #2583 ) ; +#2402 = VERTEX_POINT ( 'NONE', #1687 ) ; +#2403 = VERTEX_POINT ( 'NONE', #1605 ) ; +#2404 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2405 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2406 = ORIENTED_EDGE ( 'NONE', *, *, #2960, .T. ) ; +#2407 = ADVANCED_FACE ( 'NONE', ( #3022, #4317 ), #12, .F. ) ; +#2408 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2409 = EDGE_CURVE ( 'NONE', #3774, #3528, #3753, .T. ) ; +#2410 = VERTEX_POINT ( 'NONE', #325 ) ; +#2411 = VERTEX_POINT ( 'NONE', #4030 ) ; +#2412 = EDGE_LOOP ( 'NONE', ( #2203, #2666 ) ) ; +#2413 = ORIENTED_EDGE ( 'NONE', *, *, #2883, .F. ) ; +#2414 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -4.500000000000000000, -46.14976107412045536 ) ) ; +#2415 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2416 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2417 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2418 = EDGE_CURVE ( 'NONE', #2462, #2934, #1028, .T. ) ; +#2419 = CYLINDRICAL_SURFACE ( 'NONE', #3504, 3.000000000000002665 ) ; +#2420 = AXIS2_PLACEMENT_3D ( 'NONE', #424, #1725, #406 ) ; +#2421 = VERTEX_POINT ( 'NONE', #1926 ) ; +#2422 = EDGE_LOOP ( 'NONE', ( #2809, #3806, #1120, #1656 ) ) ; +#2423 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2424 = AXIS2_PLACEMENT_3D ( 'NONE', #944, #2961, #2276 ) ; +#2425 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -2.399999999999999911, 37.73402833653199906 ) ) ; +#2426 = ORIENTED_EDGE ( 'NONE', *, *, #1436, .F. ) ; +#2427 = VECTOR ( 'NONE', #655, 1000.000000000000000 ) ; +#2428 = VECTOR ( 'NONE', #3638, 1000.000000000000000 ) ; +#2429 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2430 = AXIS2_PLACEMENT_3D ( 'NONE', #460, #505, #2520 ) ; +#2431 = AXIS2_PLACEMENT_3D ( 'NONE', #1551, #4222, #1221 ) ; +#2432 = PLANE ( 'NONE', #4053 ) ; +#2433 = VERTEX_POINT ( 'NONE', #1277 ) ; +#2434 = EDGE_CURVE ( 'NONE', #3704, #467, #331, .T. ) ; +#2435 = CIRCLE ( 'NONE', #2505, 25.50000000000000000 ) ; +#2436 = EDGE_CURVE ( 'NONE', #1294, #2245, #4039, .T. ) ; +#2437 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2438 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -4.500000000000000000, -34.53553390593242511 ) ) ; +#2439 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ; +#2440 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2441 = CYLINDRICAL_SURFACE ( 'NONE', #2037, 2.000000000000001776 ) ; +#2442 = APPROVAL ( #465, 'δָ¶¨' ) ; +#2443 = ORIENTED_EDGE ( 'NONE', *, *, #508, .F. ) ; +#2444 = ORIENTED_EDGE ( 'NONE', *, *, #86, .F. ) ; +#2445 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2446 = LINE ( 'NONE', #3784, #2865 ) ; +#2447 = EDGE_LOOP ( 'NONE', ( #2369, #1292 ) ) ; +#2448 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2449 = VECTOR ( 'NONE', #4075, 1000.000000000000000 ) ; +#2450 = VECTOR ( 'NONE', #3515, 1000.000000000000000 ) ; +#2451 = ORIENTED_EDGE ( 'NONE', *, *, #1192, .T. ) ; +#2452 = ORIENTED_EDGE ( 'NONE', *, *, #24, .F. ) ; +#2453 = EDGE_CURVE ( 'NONE', #1396, #2403, #612, .T. ) ; +#2454 = EDGE_CURVE ( 'NONE', #798, #2950, #2627, .T. ) ; +#2455 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2456 = AXIS2_PLACEMENT_3D ( 'NONE', #428, #2357, #1686 ) ; +#2457 = EDGE_LOOP ( 'NONE', ( #356, #2120, #163, #3314 ) ) ; +#2458 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2459 = CYLINDRICAL_SURFACE ( 'NONE', #1059, 2.000000000000001776 ) ; +#2460 = CIRCLE ( 'NONE', #580, 4.799999999999970512 ) ; +#2461 = ORIENTED_EDGE ( 'NONE', *, *, #3995, .F. ) ; +#2462 = VERTEX_POINT ( 'NONE', #3288 ) ; +#2463 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2464 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2465 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -1.199999999999999734, -21.43027221244938119 ) ) ; +#2466 = EDGE_LOOP ( 'NONE', ( #2590, #1446, #2835, #647 ) ) ; +#2467 = EDGE_CURVE ( 'NONE', #3198, #3226, #1168, .T. ) ; +#2468 = AXIS2_PLACEMENT_3D ( 'NONE', #2771, #738, #805 ) ; +#2469 = CARTESIAN_POINT ( 'NONE', ( 39.75819837980361626, -4.299999999999999822, -53.62639461200842561 ) ) ; +#2470 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2471 = EDGE_CURVE ( 'NONE', #4014, #1637, #1155, .T. ) ; +#2472 = FACE_OUTER_BOUND ( 'NONE', #3393, .T. ) ; +#2473 = ORIENTED_EDGE ( 'NONE', *, *, #869, .T. ) ; +#2474 = APPROVAL_ROLE ( '' ) ; +#2475 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2476 = ORIENTED_EDGE ( 'NONE', *, *, #4249, .F. ) ; +#2477 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -4.500000000000000000, 48.73725382063412326 ) ) ; +#2478 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ; +#2479 = EDGE_CURVE ( 'NONE', #2631, #1775, #1179, .T. ) ; +#2480 = EDGE_LOOP ( 'NONE', ( #4271, #1288 ) ) ; +#2481 = VERTEX_POINT ( 'NONE', #2511 ) ; +#2482 = FACE_OUTER_BOUND ( 'NONE', #2597, .T. ) ; +#2483 = FACE_BOUND ( 'NONE', #3785, .T. ) ; +#2484 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2485 = ORIENTED_EDGE ( 'NONE', *, *, #1013, .T. ) ; +#2486 = CIRCLE ( 'NONE', #604, 0.5000000000000281997 ) ; +#2487 = LINE ( 'NONE', #1968, #2358 ) ; +#2488 = EDGE_CURVE ( 'NONE', #2868, #1270, #536, .T. ) ; +#2489 = EDGE_CURVE ( 'NONE', #3498, #2248, #1635, .T. ) ; +#2490 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -4.000000000000000000, -63.50000000000018474 ) ) ; +#2491 = EDGE_CURVE ( 'NONE', #4099, #3344, #3217, .T. ) ; +#2492 = CIRCLE ( 'NONE', #1312, 3.000000000000002665 ) ; +#2493 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -1.199999999999999734, -35.53553390593242511 ) ) ; +#2494 = VECTOR ( 'NONE', #2415, 1000.000000000000000 ) ; +#2495 = ORIENTED_EDGE ( 'NONE', *, *, #2454, .F. ) ; +#2496 = AXIS2_PLACEMENT_3D ( 'NONE', #2939, #4277, #2607 ) ; +#2497 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2498 = AXIS2_PLACEMENT_3D ( 'NONE', #1756, #57, #2423 ) ; +#2499 = LINE ( 'NONE', #2173, #1182 ) ; +#2500 = EDGE_LOOP ( 'NONE', ( #2212, #2780, #3076, #3632 ) ) ; +#2501 = AXIS2_PLACEMENT_3D ( 'NONE', #1014, #2942, #2260 ) ; +#2502 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2503 = EDGE_LOOP ( 'NONE', ( #1662, #1898 ) ) ; +#2504 = FACE_BOUND ( 'NONE', #1368, .T. ) ; +#2505 = AXIS2_PLACEMENT_3D ( 'NONE', #3849, #240, #1490 ) ; +#2506 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2507 = VERTEX_POINT ( 'NONE', #2162 ) ; +#2508 = ORIENTED_EDGE ( 'NONE', *, *, #4112, .F. ) ; +#2509 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2510 = CARTESIAN_POINT ( 'NONE', ( -38.53125606114259227, -4.500000000000000000, -43.43130005367003577 ) ) ; +#2511 = CARTESIAN_POINT ( 'NONE', ( 37.89635322281447571, -1.199999999999999734, -52.82639461200825082 ) ) ; +#2512 = LINE ( 'NONE', #3240, #3271 ) ; +#2513 = FACE_OUTER_BOUND ( 'NONE', #2042, .T. ) ; +#2514 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2515 = EDGE_CURVE ( 'NONE', #3713, #2904, #2843, .T. ) ; +#2516 = ORIENTED_EDGE ( 'NONE', *, *, #1213, .F. ) ; +#2517 = CYLINDRICAL_SURFACE ( 'NONE', #3544, 1.000000000000000888 ) ; +#2518 = AXIS2_PLACEMENT_3D ( 'NONE', #3906, #1955, #3856 ) ; +#2519 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2520 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2521 = ORIENTED_EDGE ( 'NONE', *, *, #2122, .F. ) ; +#2522 = EDGE_CURVE ( 'NONE', #2054, #2859, #83, .T. ) ; +#2523 = AXIS2_PLACEMENT_3D ( 'NONE', #1441, #2773, #2837 ) ; +#2524 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2525 = FACE_OUTER_BOUND ( 'NONE', #1174, .T. ) ; +#2526 = EDGE_LOOP ( 'NONE', ( #1186, #2972 ) ) ; +#2527 = FACE_BOUND ( 'NONE', #3668, .T. ) ; +#2528 = EDGE_LOOP ( 'NONE', ( #1407, #17, #2715, #1979 ) ) ; +#2529 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2530 = VERTEX_POINT ( 'NONE', #3145 ) ; +#2531 = ORIENTED_EDGE ( 'NONE', *, *, #4082, .F. ) ; +#2532 = CYLINDRICAL_SURFACE ( 'NONE', #2082, 2.000000000000001776 ) ; +#2533 = ADVANCED_BREP_SHAPE_REPRESENTATION ( 'µ׸Ç', ( #3853, #392 ), #609 ) ; +#2534 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.000000000000000000, 0.000000000000000000 ) ) ; +#2535 = CIRCLE ( 'NONE', #649, 5.800000000000027356 ) ; +#2536 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2537 = CARTESIAN_POINT ( 'NONE', ( 28.01295323236935886, 0.000000000000000000, -0.000000000000000000 ) ) ; +#2538 = VECTOR ( 'NONE', #3636, 1000.000000000000000 ) ; +#2539 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2540 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2541 = ORIENTED_EDGE ( 'NONE', *, *, #882, .T. ) ; +#2542 = AXIS2_PLACEMENT_3D ( 'NONE', #3059, #2398, #70 ) ; +#2543 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -4.500000000000000000, -35.53553390593242511 ) ) ; +#2544 = EDGE_CURVE ( 'NONE', #798, #1264, #2812, .T. ) ; +#2545 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2546 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -4.500000000000000000, 21.43027221244938119 ) ) ; +#2547 = ORIENTED_EDGE ( 'NONE', *, *, #2793, .T. ) ; +#2548 = EDGE_CURVE ( 'NONE', #3365, #3090, #1773, .T. ) ; +#2549 = CARTESIAN_POINT ( 'NONE', ( 28.01295323236935886, -2.299999999999999822, -57.80000000000018190 ) ) ; +#2550 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2551 = ORIENTED_EDGE ( 'NONE', *, *, #1820, .T. ) ; +#2552 = PLANE ( 'NONE', #756 ) ; +#2553 = FACE_BOUND ( 'NONE', #56, .T. ) ; +#2554 = ORIENTED_EDGE ( 'NONE', *, *, #3965, .T. ) ; +#2555 = VERTEX_POINT ( 'NONE', #1558 ) ; +#2556 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2557 = FACE_BOUND ( 'NONE', #830, .T. ) ; +#2558 = EDGE_CURVE ( 'NONE', #117, #2410, #2800, .T. ) ; +#2559 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, 0.000000000000000000, 39.03402833653201043 ) ) ; +#2560 = CARTESIAN_POINT ( 'NONE', ( 38.69635322281465761, -4.299999999999999822, -51.54561984842757738 ) ) ; +#2561 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -1.199999999999999734, 18.43027221244074099 ) ) ; +#2562 = CARTESIAN_POINT ( 'NONE', ( 36.21295323236918051, -1.199999999999999956, -61.80000000000018900 ) ) ; +#2563 = ORIENTED_EDGE ( 'NONE', *, *, #1649, .F. ) ; +#2564 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2565 = AXIS2_PLACEMENT_3D ( 'NONE', #3489, #2475, #2502 ) ; +#2566 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2567 = VECTOR ( 'NONE', #2233, 1000.000000000000000 ) ; +#2568 = VECTOR ( 'NONE', #550, 1000.000000000000000 ) ; +#2569 = AXIS2_PLACEMENT_3D ( 'NONE', #637, #1970, #2463 ) ; +#2570 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ; +#2571 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2572 = EDGE_LOOP ( 'NONE', ( #2249, #250, #3486, #2611 ) ) ; +#2573 = ADVANCED_FACE ( 'NONE', ( #4157 ), #2123, .T. ) ; +#2574 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2575 = ORIENTED_EDGE ( 'NONE', *, *, #567, .F. ) ; +#2576 = FACE_BOUND ( 'NONE', #1021, .T. ) ; +#2577 = EDGE_CURVE ( 'NONE', #1621, #4076, #1425, .T. ) ; +#2578 = ORIENTED_EDGE ( 'NONE', *, *, #3202, .T. ) ; +#2579 = AXIS2_PLACEMENT_3D ( 'NONE', #789, #3134, #1822 ) ; +#2580 = ORIENTED_EDGE ( 'NONE', *, *, #2172, .F. ) ; +#2581 = FACE_OUTER_BOUND ( 'NONE', #4019, .T. ) ; +#2582 = AXIS2_PLACEMENT_3D ( 'NONE', #3886, #3231, #2574 ) ; +#2583 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2584 = LINE ( 'NONE', #2915, #1137 ) ; +#2585 = EDGE_CURVE ( 'NONE', #1430, #1215, #4292, .T. ) ; +#2586 = CYLINDRICAL_SURFACE ( 'NONE', #3621, 2.300000000000006484 ) ; +#2587 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2588 = LINE ( 'NONE', #873, #4229 ) ; +#2589 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.199999999999999956, -26.76370172317620444 ) ) ; +#2590 = ORIENTED_EDGE ( 'NONE', *, *, #552, .F. ) ; +#2591 = FACE_OUTER_BOUND ( 'NONE', #1631, .T. ) ; +#2592 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.399999999999999911, 51.94976107412048805 ) ) ; +#2593 = DATE_AND_TIME ( #1592, #2926 ) ; +#2594 = LINE ( 'NONE', #3953, #353 ) ; +#2595 = ORIENTED_EDGE ( 'NONE', *, *, #2011, .T. ) ; +#2596 = FACE_OUTER_BOUND ( 'NONE', #3569, .T. ) ; +#2597 = EDGE_LOOP ( 'NONE', ( #1052, #3954, #3333, #4265 ) ) ; +#2598 = CARTESIAN_POINT ( 'NONE', ( -3.663396254167594623, -1.199999999999999956, -48.84822469919855337 ) ) ; +#2599 = AXIS2_PLACEMENT_3D ( 'NONE', #1544, #3527, #2566 ) ; +#2600 = VERTEX_POINT ( 'NONE', #2559 ) ; +#2601 = EDGE_CURVE ( 'NONE', #2402, #2904, #3725, .T. ) ; +#2602 = ORIENTED_EDGE ( 'NONE', *, *, #1305, .F. ) ; +#2603 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -4.500000000000000000, -45.51207481725032267 ) ) ; +#2604 = CIRCLE ( 'NONE', #4285, 2.000000000000001776 ) ; +#2605 = FACE_OUTER_BOUND ( 'NONE', #1517, .T. ) ; +#2606 = FACE_OUTER_BOUND ( 'NONE', #581, .T. ) ; +#2607 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2608 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -1.199999999999999956, 0.000000000000000000 ) ) ; +#2609 = VECTOR ( 'NONE', #823, 1000.000000000000000 ) ; +#2610 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2611 = ORIENTED_EDGE ( 'NONE', *, *, #2764, .F. ) ; +#2612 = CYLINDRICAL_SURFACE ( 'NONE', #4178, 0.5000000000000281997 ) ; +#2613 = AXIS2_PLACEMENT_3D ( 'NONE', #2711, #1026, #10 ) ; +#2614 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2615 = EDGE_CURVE ( 'NONE', #2023, #229, #1838, .T. ) ; +#2616 = CIRCLE ( 'NONE', #4087, 0.9999999999999981126 ) ; +#2617 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -4.500000000000000000, -19.43027221244073743 ) ) ; +#2618 = EDGE_LOOP ( 'NONE', ( #1574, #1888, #2059, #1442 ) ) ; +#2619 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2620 = ORIENTED_EDGE ( 'NONE', *, *, #1721, .F. ) ; +#2621 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2622 = ORIENTED_EDGE ( 'NONE', *, *, #2946, .F. ) ; +#2623 = ORIENTED_EDGE ( 'NONE', *, *, #3221, .T. ) ; +#2624 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2625 = CARTESIAN_POINT ( 'NONE', ( -41.25819837980453286, -1.199999999999999956, -46.01087987044774508 ) ) ; +#2626 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -4.500000000000000000, -23.43027221244938474 ) ) ; +#2627 = LINE ( 'NONE', #3610, #2284 ) ; +#2628 = EDGE_CURVE ( 'NONE', #1493, #2954, #3521, .T. ) ; +#2629 = CYLINDRICAL_SURFACE ( 'NONE', #4179, 0.8000000000001200595 ) ; +#2630 = FACE_OUTER_BOUND ( 'NONE', #2457, .T. ) ; +#2631 = VERTEX_POINT ( 'NONE', #3805 ) ; +#2632 = EDGE_CURVE ( 'NONE', #725, #1758, #1698, .T. ) ; +#2633 = EDGE_CURVE ( 'NONE', #3555, #733, #2187, .T. ) ; +#2634 = ADVANCED_FACE ( 'NONE', ( #4275 ), #1275, .F. ) ; +#2635 = LINE ( 'NONE', #2677, #703 ) ; +#2636 = AXIS2_PLACEMENT_3D ( 'NONE', #1766, #2752, #3695 ) ; +#2637 = VECTOR ( 'NONE', #3699, 1000.000000000000000 ) ; +#2638 = CARTESIAN_POINT ( 'NONE', ( -39.75819837980453286, -4.500000000000000000, -42.63130005366996755 ) ) ; +#2639 = AXIS2_PLACEMENT_3D ( 'NONE', #3410, #2376, #30 ) ; +#2640 = ORIENTED_EDGE ( 'NONE', *, *, #4183, .T. ) ; +#2641 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2642 = ORIENTED_EDGE ( 'NONE', *, *, #3401, .F. ) ; +#2643 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2644 = AXIS2_PLACEMENT_3D ( 'NONE', #137, #799, #4204 ) ; +#2645 = ORIENTED_EDGE ( 'NONE', *, *, #1987, .F. ) ; +#2646 = ORIENTED_EDGE ( 'NONE', *, *, #454, .T. ) ; +#2647 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2648 = CIRCLE ( 'NONE', #749, 0.9999999999999981126 ) ; +#2649 = FACE_BOUND ( 'NONE', #3141, .T. ) ; +#2650 = LINE ( 'NONE', #590, #3662 ) ; +#2651 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -1.199999999999999956, 36.73402833653108246 ) ) ; +#2652 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2653 = VECTOR ( 'NONE', #3290, 1000.000000000000000 ) ; +#2654 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980342726, -1.199999999999999956, -60.50000000000000000 ) ) ; +#2655 = ORIENTED_EDGE ( 'NONE', *, *, #3788, .F. ) ; +#2656 = CIRCLE ( 'NONE', #58, 5.799999999999999822 ) ; +#2657 = ADVANCED_FACE ( 'NONE', ( #2606 ), #1904, .T. ) ; +#2658 = ADVANCED_FACE ( 'NONE', ( #2959, #942 ), #1647, .F. ) ; +#2659 = CYLINDRICAL_SURFACE ( 'NONE', #1349, 2.299999999999999822 ) ; +#2660 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2661 = VERTEX_POINT ( 'NONE', #2299 ) ; +#2662 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -1.199999999999999956, 36.73402833653108246 ) ) ; +#2663 = EDGE_LOOP ( 'NONE', ( #1290, #2000 ) ) ; +#2664 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.399999999999999911, 52.94976107412048805 ) ) ; +#2665 = VERTEX_POINT ( 'NONE', #3657 ) ; +#2666 = ORIENTED_EDGE ( 'NONE', *, *, #1513, .T. ) ; +#2667 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2668 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -4.500000000000000000, -35.53553390593242511 ) ) ; +#2669 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -4.500000000000000000, -51.94976107412048805 ) ) ; +#2670 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2671 = EDGE_CURVE ( 'NONE', #839, #3258, #2895, .T. ) ; +#2672 = FACE_OUTER_BOUND ( 'NONE', #4034, .T. ) ; +#2673 = CIRCLE ( 'NONE', #72, 5.799999999999999822 ) ; +#2674 = DIRECTION ( 'NONE', ( -0.000000000000000000, -0.000000000000000000, -1.000000000000000000 ) ) ; +#2675 = CYLINDRICAL_SURFACE ( 'NONE', #1532, 1.000000000000000888 ) ; +#2676 = ORIENTED_EDGE ( 'NONE', *, *, #2434, .F. ) ; +#2677 = CARTESIAN_POINT ( 'NONE', ( 37.89635322281446861, -1.199999999999999956, -46.01087987044774508 ) ) ; +#2678 = SHAPE_DEFINITION_REPRESENTATION ( #1996, #2533 ) ; +#2679 = CIRCLE ( 'NONE', #3661, 3.000000000000002665 ) ; +#2680 = EDGE_CURVE ( 'NONE', #4235, #2411, #281, .T. ) ; +#2681 = CIRCLE ( 'NONE', #784, 5.799999999999999822 ) ; +#2682 = ADVANCED_FACE ( 'NONE', ( #1989 ), #2275, .T. ) ; +#2683 = EDGE_CURVE ( 'NONE', #2261, #1621, #2650, .T. ) ; +#2684 = VERTEX_POINT ( 'NONE', #1947 ) ; +#2685 = ORIENTED_EDGE ( 'NONE', *, *, #747, .F. ) ; +#2686 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -2.399999999999999911, 36.73402833653199906 ) ) ; +#2687 = AXIS2_PLACEMENT_3D ( 'NONE', #1139, #1818, #4101 ) ; +#2688 = EDGE_CURVE ( 'NONE', #1817, #2023, #1564, .T. ) ; +#2689 = VERTEX_POINT ( 'NONE', #3328 ) ; +#2690 = ORIENTED_EDGE ( 'NONE', *, *, #326, .F. ) ; +#2691 = LINE ( 'NONE', #4026, #3191 ) ; +#2692 = CARTESIAN_POINT ( 'NONE', ( 1.224646799147352714E-16, -2.399999999999999911, 50.94976107412048094 ) ) ; +#2693 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2694 = LINE ( 'NONE', #2732, #2818 ) ; +#2695 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#2696 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2697 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2698 = EDGE_LOOP ( 'NONE', ( #3046, #2736 ) ) ; +#2699 = LINE ( 'NONE', #4348, #3650 ) ; +#2700 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .AHEAD. ) ; +#2701 = EDGE_CURVE ( 'NONE', #4046, #820, #1626, .T. ) ; +#2702 = ORIENTED_EDGE ( 'NONE', *, *, #1248, .F. ) ; +#2703 = ORIENTED_EDGE ( 'NONE', *, *, #882, .F. ) ; +#2704 = FACE_OUTER_BOUND ( 'NONE', #3625, .T. ) ; +#2705 = ORIENTED_EDGE ( 'NONE', *, *, #832, .F. ) ; +#2706 = ORIENTED_EDGE ( 'NONE', *, *, #1475, .T. ) ; +#2707 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -4.500000000000000000, -47.14976107412051931 ) ) ; +#2708 = EDGE_CURVE ( 'NONE', #3090, #3365, #855, .T. ) ; +#2709 = CARTESIAN_POINT ( 'NONE', ( 22.78180162019453192, 0.000000000000000000, -58.30000000000019611 ) ) ; +#2710 = CYLINDRICAL_SURFACE ( 'NONE', #1167, 2.000000000000001776 ) ; +#2711 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -4.500000000000000000, -51.94976107412048805 ) ) ; +#2712 = VECTOR ( 'NONE', #2845, 1000.000000000000000 ) ; +#2713 = EDGE_CURVE ( 'NONE', #388, #3547, #2112, .T. ) ; +#2714 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -4.500000000000000000, -21.43027221244938119 ) ) ; +#2715 = ORIENTED_EDGE ( 'NONE', *, *, #982, .T. ) ; +#2716 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2717 = CIRCLE ( 'NONE', #543, 2.299999999999999822 ) ; +#2718 = CARTESIAN_POINT ( 'NONE', ( -37.73125606114251696, -4.500000000000000000, -44.71207481725070210 ) ) ; +#2719 = ORIENTED_EDGE ( 'NONE', *, *, #245, .T. ) ; +#2720 = EDGE_CURVE ( 'NONE', #3648, #3979, #2584, .T. ) ; +#2721 = AXIS2_PLACEMENT_3D ( 'NONE', #2268, #2641, #294 ) ; +#2722 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#2723 = CIRCLE ( 'NONE', #826, 5.799999999999999822 ) ; +#2724 = ORIENTED_EDGE ( 'NONE', *, *, #700, .F. ) ; +#2725 = ORIENTED_EDGE ( 'NONE', *, *, #747, .T. ) ; +#2726 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#2727 = EDGE_LOOP ( 'NONE', ( #2026, #1404 ) ) ; +#2728 = EDGE_LOOP ( 'NONE', ( #1652, #776, #2016, #293 ) ) ; +#2729 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2730 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -1.199999999999999956, 35.73402833653199906 ) ) ; +#2731 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2732 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -4.500000000000000000, -45.51207481725032267 ) ) ; +#2733 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2734 = EDGE_CURVE ( 'NONE', #3825, #1817, #3863, .T. ) ; +#2735 = CIRCLE ( 'NONE', #2379, 5.799999999999999822 ) ; +#2736 = ORIENTED_EDGE ( 'NONE', *, *, #3660, .F. ) ; +#2737 = ORIENTED_EDGE ( 'NONE', *, *, #1956, .F. ) ; +#2738 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2739 = CARTESIAN_POINT ( 'NONE', ( 39.75819837980361626, -4.299999999999999822, -50.74561984842738838 ) ) ; +#2740 = EDGE_LOOP ( 'NONE', ( #3584, #2705, #2516, #164 ) ) ; +#2741 = AXIS2_PLACEMENT_3D ( 'NONE', #447, #731, #1729 ) ; +#2742 = EDGE_CURVE ( 'NONE', #1195, #3671, #149, .T. ) ; +#2743 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2744 = AXIS2_PLACEMENT_3D ( 'NONE', #2169, #3363, #503 ) ; +#2745 = ADVANCED_FACE ( 'NONE', ( #1925 ), #895, .T. ) ; +#2746 = ORIENTED_EDGE ( 'NONE', *, *, #1723, .T. ) ; +#2747 = ORIENTED_EDGE ( 'NONE', *, *, #3355, .T. ) ; +#2748 = AXIS2_PLACEMENT_3D ( 'NONE', #2978, #4296, #987 ) ; +#2749 = ORIENTED_EDGE ( 'NONE', *, *, #3909, .F. ) ; +#2750 = VERTEX_POINT ( 'NONE', #3261 ) ; +#2751 = VERTEX_POINT ( 'NONE', #2938 ) ; +#2752 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2753 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -1.199999999999999734, 51.73725382063413036 ) ) ; +#2754 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2755 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2756 = AXIS2_PLACEMENT_3D ( 'NONE', #3326, #3655, #2540 ) ; +#2757 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2758 = ORIENTED_EDGE ( 'NONE', *, *, #1237, .F. ) ; +#2759 = ORIENTED_EDGE ( 'NONE', *, *, #3651, .F. ) ; +#2760 = CYLINDRICAL_SURFACE ( 'NONE', #1454, 1.000000000000000888 ) ; +#2761 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -1.199999999999999956, 42.53402833653199622 ) ) ; +#2762 = ORIENTED_EDGE ( 'NONE', *, *, #1590, .T. ) ; +#2763 = FACE_OUTER_BOUND ( 'NONE', #1220, .T. ) ; +#2764 = EDGE_CURVE ( 'NONE', #890, #991, #1604, .T. ) ; +#2765 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #3358, #1057, ( #3688 ) ) ; +#2766 = ADVANCED_FACE ( 'NONE', ( #3676 ), #385, .T. ) ; +#2767 = LINE ( 'NONE', #3204, #1807 ) ; +#2768 = ORIENTED_EDGE ( 'NONE', *, *, #1961, .F. ) ; +#2769 = FACE_OUTER_BOUND ( 'NONE', #2788, .T. ) ; +#2770 = LINE ( 'NONE', #2050, #2494 ) ; +#2771 = CARTESIAN_POINT ( 'NONE', ( 38.69635322281465761, -4.299999999999999822, -52.82639461200825082 ) ) ; +#2772 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -1.199999999999999956, -49.84976107412048663 ) ) ; +#2773 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, -1.000000000000000000 ) ) ; +#2774 = CIRCLE ( 'NONE', #879, 5.799999999999999822 ) ; +#2775 = ORIENTED_EDGE ( 'NONE', *, *, #3298, .T. ) ; +#2776 = EDGE_LOOP ( 'NONE', ( #4004, #2343, #1812, #2295 ) ) ; +#2777 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2778 = AXIS2_PLACEMENT_3D ( 'NONE', #1610, #1283, #3951 ) ; +#2779 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980525335, 0.000000000000000000, -56.99999999999999289 ) ) ; +#2780 = ORIENTED_EDGE ( 'NONE', *, *, #2839, .T. ) ; +#2781 = VECTOR ( 'NONE', #1494, 1000.000000000000000 ) ; +#2782 = CIRCLE ( 'NONE', #3127, 2.000000000000001776 ) ; +#2783 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2784 = EDGE_CURVE ( 'NONE', #2314, #60, #3235, .T. ) ; +#2785 = ADVANCED_FACE ( 'NONE', ( #1728 ), #3717, .T. ) ; +#2786 = VECTOR ( 'NONE', #4080, 1000.000000000000000 ) ; +#2787 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -4.500000000000000000, 18.43027221244937763 ) ) ; +#2788 = EDGE_LOOP ( 'NONE', ( #142, #3580, #3213, #3742 ) ) ; +#2789 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2790 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#2791 = ORIENTED_EDGE ( 'NONE', *, *, #1716, .T. ) ; +#2792 = CARTESIAN_POINT ( 'NONE', ( -39.75819837980544236, 0.000000000000000000, -56.99999999999999289 ) ) ; +#2793 = EDGE_CURVE ( 'NONE', #1096, #3793, #3095, .T. ) ; +#2794 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2795 = ORIENTED_EDGE ( 'NONE', *, *, #3837, .F. ) ; +#2796 = ORIENTED_EDGE ( 'NONE', *, *, #2166, .T. ) ; +#2797 = CARTESIAN_POINT ( 'NONE', ( 22.78180162052217383, -1.199999999999999956, -60.00000000000000000 ) ) ; +#2798 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2799 = ADVANCED_FACE ( 'NONE', ( #1090 ), #1769, .F. ) ; +#2800 = LINE ( 'NONE', #191, #2390 ) ; +#2801 = EDGE_LOOP ( 'NONE', ( #3063, #3887, #4290, #3380, #1427, #2595, #3529, #1207 ) ) ; +#2802 = CIRCLE ( 'NONE', #3994, 2.000000000000001776 ) ; +#2803 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.399999999999999911, 51.94976107412048805 ) ) ; +#2804 = CIRCLE ( 'NONE', #774, 2.099999999999997868 ) ; +#2805 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2806 = VECTOR ( 'NONE', #1597, 1000.000000000000000 ) ; +#2807 = ORIENTED_EDGE ( 'NONE', *, *, #618, .T. ) ; +#2808 = EDGE_CURVE ( 'NONE', #2130, #1055, #578, .T. ) ; +#2809 = ORIENTED_EDGE ( 'NONE', *, *, #4270, .F. ) ; +#2810 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .AHEAD. ) ; +#2811 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2812 = CIRCLE ( 'NONE', #2328, 1.699999999999799005 ) ; +#2813 = ORIENTED_EDGE ( 'NONE', *, *, #4212, .T. ) ; +#2814 = EDGE_CURVE ( 'NONE', #2346, #2174, #3100, .T. ) ; +#2815 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2816 = EDGE_CURVE ( 'NONE', #1083, #2824, #717, .T. ) ; +#2817 = FACE_OUTER_BOUND ( 'NONE', #2526, .T. ) ; +#2818 = VECTOR ( 'NONE', #2338, 1000.000000000000000 ) ; +#2819 = ORIENTED_EDGE ( 'NONE', *, *, #4020, .T. ) ; +#2820 = ORIENTED_EDGE ( 'NONE', *, *, #1079, .F. ) ; +#2821 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2822 = CARTESIAN_POINT ( 'NONE', ( 36.21295323236918051, -2.299999999999999822, -57.80000000000018190 ) ) ; +#2823 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2824 = VERTEX_POINT ( 'NONE', #3060 ) ; +#2825 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2826 = CIRCLE ( 'NONE', #3246, 1.000000000000000888 ) ; +#2827 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, 0.000000000000000000, -24.46370172317620373 ) ) ; +#2828 = CARTESIAN_POINT ( 'NONE', ( 38.69635322281465761, -1.199999999999999734, -52.82639461200825082 ) ) ; +#2829 = ORIENTED_EDGE ( 'NONE', *, *, #2255, .F. ) ; +#2830 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2831 = CARTESIAN_POINT ( 'NONE', ( -40.25678579777999033, 0.000000000000000000, -44.89411094154586124 ) ) ; +#2832 = ORIENTED_EDGE ( 'NONE', *, *, #432, .T. ) ; +#2833 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2834 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2835 = ORIENTED_EDGE ( 'NONE', *, *, #1217, .T. ) ; +#2836 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2837 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2838 = ORIENTED_EDGE ( 'NONE', *, *, #3594, .T. ) ; +#2839 = EDGE_CURVE ( 'NONE', #231, #196, #3029, .T. ) ; +#2840 = ORIENTED_EDGE ( 'NONE', *, *, #1150, .F. ) ; +#2841 = LINE ( 'NONE', #3143, #1527 ) ; +#2842 = PLANE ( 'NONE', #3575 ) ; +#2843 = LINE ( 'NONE', #2140, #1285 ) ; +#2844 = AXIS2_PLACEMENT_3D ( 'NONE', #1984, #2624, #633 ) ; +#2845 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#2846 = AXIS2_PLACEMENT_3D ( 'NONE', #475, #1883, #1816 ) ; +#2847 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2848 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -1.199999999999999734, 51.73725382063413036 ) ) ; +#2850 = AXIS2_PLACEMENT_3D ( 'NONE', #3697, #693, #364 ) ; +#2849 = AXIS2_PLACEMENT_3D ( 'NONE', #2455, #1845, #2834 ) ; +#2851 = ORIENTED_EDGE ( 'NONE', *, *, #4276, .F. ) ; +#2852 = EDGE_CURVE ( 'NONE', #2346, #4313, #1138, .T. ) ; +#2853 = AXIS2_PLACEMENT_3D ( 'NONE', #3809, #457, #4022 ) ; +#2854 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2855 = AXIS2_PLACEMENT_3D ( 'NONE', #4278, #1928, #3659 ) ; +#2856 = LINE ( 'NONE', #4283, #1761 ) ; +#2857 = AXIS2_PLACEMENT_3D ( 'NONE', #2183, #1833, #2869 ) ; +#2858 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2859 = VERTEX_POINT ( 'NONE', #2377 ) ; +#2860 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -1.199999999999999734, 49.73725382063412326 ) ) ; +#2861 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2862 = EDGE_LOOP ( 'NONE', ( #1699, #906, #3839, #273 ) ) ; +#2863 = CARTESIAN_POINT ( 'NONE', ( -38.53125606114281254, -1.199999999999999734, -45.51207481725026582 ) ) ; +#2864 = ORIENTED_EDGE ( 'NONE', *, *, #2713, .F. ) ; +#2865 = VECTOR ( 'NONE', #4060, 1000.000000000000000 ) ; +#2866 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2867 = VERTEX_POINT ( 'NONE', #4050 ) ; +#2868 = VERTEX_POINT ( 'NONE', #1402 ) ; +#2869 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2870 = CARTESIAN_POINT ( 'NONE', ( -38.53125606114281254, -4.500000000000000000, -45.51207481725032267 ) ) ; +#2871 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 51.94976107412048805 ) ) ; +#2872 = EDGE_CURVE ( 'NONE', #4076, #1621, #1287, .T. ) ; +#2873 = CARTESIAN_POINT ( 'NONE', ( 39.75819837980361626, -1.199999999999999956, -60.50000000000000000 ) ) ; +#2874 = PLANE ( 'NONE', #1183 ) ; +#2875 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2876 = EDGE_LOOP ( 'NONE', ( #438, #3291, #2065, #1861 ) ) ; +#2877 = EDGE_CURVE ( 'NONE', #3782, #441, #2263, .T. ) ; +#2878 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2879 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2880 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2881 = VERTEX_POINT ( 'NONE', #1070 ) ; +#2882 = CIRCLE ( 'NONE', #1628, 2.300000000000006484 ) ; +#2883 = EDGE_CURVE ( 'NONE', #3835, #207, #2694, .T. ) ; +#2884 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2885 = CYLINDRICAL_SURFACE ( 'NONE', #2565, 2.000000000000001776 ) ; +#2886 = ORIENTED_EDGE ( 'NONE', *, *, #949, .F. ) ; +#2887 = FACE_OUTER_BOUND ( 'NONE', #2698, .T. ) ; +#2888 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2889 = EDGE_LOOP ( 'NONE', ( #2113, #3055, #65, #3115 ) ) ; +#2890 = EDGE_LOOP ( 'NONE', ( #22, #1921, #448, #1697 ) ) ; +#2891 = CARTESIAN_POINT ( 'NONE', ( 25.96770808493693039, -1.199999999999999956, -61.80000000000018900 ) ) ; +#2892 = CARTESIAN_POINT ( 'NONE', ( -39.75819837980544236, -1.199999999999999956, -46.01087987044774508 ) ) ; +#2893 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2894 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2895 = CIRCLE ( 'NONE', #3027, 60.30000000000072902 ) ; +#2896 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2897 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2898 = ORIENTED_EDGE ( 'NONE', *, *, #2615, .T. ) ; +#2899 = AXIS2_PLACEMENT_3D ( 'NONE', #1069, #3738, #2068 ) ; +#2900 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.199999999999999956, 51.94976107412048805 ) ) ; +#2901 = EDGE_CURVE ( 'NONE', #255, #2631, #1913, .T. ) ; +#2902 = CARTESIAN_POINT ( 'NONE', ( 4.426603807114934952, -4.500000000000000000, -48.20207128775611949 ) ) ; +#2903 = ADVANCED_FACE ( 'NONE', ( #2052 ), #31, .F. ) ; +#2904 = VERTEX_POINT ( 'NONE', #409 ) ; +#2905 = EDGE_CURVE ( 'NONE', #229, #2098, #3590, .T. ) ; +#2906 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#2907 = ORIENTED_EDGE ( 'NONE', *, *, #1876, .F. ) ; +#2908 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2909 = EDGE_LOOP ( 'NONE', ( #400, #1222 ) ) ; +#2910 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2911 = VERTEX_POINT ( 'NONE', #2772 ) ; +#2912 = ORIENTED_EDGE ( 'NONE', *, *, #376, .F. ) ; +#2913 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2914 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -1.199999999999999956, 2.300000000000006484 ) ) ; +#2915 = CARTESIAN_POINT ( 'NONE', ( 28.01295323236935886, -4.000000000000000000, -62.10000000000018616 ) ) ; +#2916 = CARTESIAN_POINT ( 'NONE', ( 22.78180162019453192, -1.199999999999999956, -58.30000000000019611 ) ) ; +#2917 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -2.399999999999999911, 36.73402833653199906 ) ) ; +#2918 = CARTESIAN_POINT ( 'NONE', ( 39.75819837980361626, -1.200000000000000622, -50.74561984842738838 ) ) ; +#2919 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.400000000000000799, -62.10000000000018616 ) ) ; +#2920 = ORIENTED_EDGE ( 'NONE', *, *, #410, .T. ) ; +#2921 = CARTESIAN_POINT ( 'NONE', ( -37.73125606114251696, -1.199999999999999734, -44.71207481725070210 ) ) ; +#2922 = VECTOR ( 'NONE', #7, 1000.000000000000000 ) ; +#2923 = CIRCLE ( 'NONE', #2849, 2.300000000000006484 ) ; +#2924 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -2.399999999999999911, -51.94976107412048805 ) ) ; +#2925 = CIRCLE ( 'NONE', #4106, 2.000000000000001776 ) ; +#2926 = LOCAL_TIME ( 22, 36, 17.00000000000000000, #226 ) ; +#2927 = ADVANCED_FACE ( 'NONE', ( #3139 ), #3491, .T. ) ; +#2928 = AXIS2_PLACEMENT_3D ( 'NONE', #1133, #4134, #761 ) ; +#2929 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2930 = VERTEX_POINT ( 'NONE', #3778 ) ; +#2931 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#2932 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -1.199999999999999956, 36.73402833653108246 ) ) ; +#2933 = ORIENTED_EDGE ( 'NONE', *, *, #3800, .F. ) ; +#2934 = VERTEX_POINT ( 'NONE', #2792 ) ; +#2935 = FACE_OUTER_BOUND ( 'NONE', #3245, .T. ) ; +#2936 = EDGE_CURVE ( 'NONE', #4223, #1435, #3533, .T. ) ; +#2937 = FACE_OUTER_BOUND ( 'NONE', #3831, .T. ) ; +#2938 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, 0.000000000000000000, -2.299999999999998934 ) ) ; +#2939 = CARTESIAN_POINT ( 'NONE', ( 4.045000030639409161, -4.500000000000000000, -48.52514799347714103 ) ) ; +#2940 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -2.399999999999999911, 36.73402833653108246 ) ) ; +#2941 = ADVANCED_FACE ( 'NONE', ( #1873 ), #132, .T. ) ; +#2942 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2943 = ORIENTED_EDGE ( 'NONE', *, *, #1857, .T. ) ; +#2944 = LINE ( 'NONE', #1953, #397 ) ; +#2945 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 54.24976107412048520 ) ) ; +#2946 = EDGE_CURVE ( 'NONE', #2859, #2054, #1491, .T. ) ; +#2947 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -1.199999999999999956, -2.299999999999998934 ) ) ; +#2948 = EDGE_LOOP ( 'NONE', ( #75, #2640, #2676, #1623 ) ) ; +#2949 = FACE_BOUND ( 'NONE', #3392, .T. ) ; +#2950 = VERTEX_POINT ( 'NONE', #1127 ) ; +#2951 = CARTESIAN_POINT ( 'NONE', ( 3.663396254163752364, -4.500000000000000000, -48.84822469919815546 ) ) ; +#2952 = VECTOR ( 'NONE', #4052, 1000.000000000000000 ) ; +#2953 = ORIENTED_EDGE ( 'NONE', *, *, #480, .T. ) ; +#2954 = VERTEX_POINT ( 'NONE', #2863 ) ; +#2955 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.000000000000000000, 0.000000000000000000 ) ) ; +#2956 = EDGE_CURVE ( 'NONE', #2410, #3344, #3379, .T. ) ; +#2957 = ADVANCED_FACE ( 'NONE', ( #1501 ), #1828, .F. ) ; +#2958 = CARTESIAN_POINT ( 'NONE', ( 28.01295323236936596, 0.000000000000000000, -61.80000000000018900 ) ) ; +#2959 = FACE_BOUND ( 'NONE', #936, .T. ) ; +#2960 = EDGE_CURVE ( 'NONE', #4293, #3456, #2134, .T. ) ; +#2961 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2962 = LINE ( 'NONE', #4300, #2219 ) ; +#2963 = AXIS2_PLACEMENT_3D ( 'NONE', #4231, #2893, #545 ) ; +#2964 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -2.399999999999999911, -51.94976107412048805 ) ) ; +#2965 = ORIENTED_EDGE ( 'NONE', *, *, #2816, .T. ) ; +#2966 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -4.299999999999999822, -50.74561984842738838 ) ) ; +#2967 = AXIS2_PLACEMENT_3D ( 'NONE', #1363, #713, #365 ) ; +#2968 = CARTESIAN_POINT ( 'NONE', ( 38.69635322281465761, -4.299999999999999822, -53.62639461200842561 ) ) ; +#2969 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, 0.000000000000000000, 26.76370172317528784 ) ) ; +#2970 = VERTEX_POINT ( 'NONE', #3209 ) ; +#2971 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2972 = ORIENTED_EDGE ( 'NONE', *, *, #2142, .F. ) ; +#2973 = FACE_OUTER_BOUND ( 'NONE', #3772, .T. ) ; +#2974 = ORIENTED_EDGE ( 'NONE', *, *, #832, .T. ) ; +#2975 = ORIENTED_EDGE ( 'NONE', *, *, #1709, .F. ) ; +#2976 = FACE_OUTER_BOUND ( 'NONE', #2290, .T. ) ; +#2977 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -2.399999999999999911, -0.9999999999999981126 ) ) ; +#2978 = CARTESIAN_POINT ( 'NONE', ( -4.045000030643222999, -1.199999999999999734, -48.52514799347749630 ) ) ; +#2979 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.500000000000000000, -24.46370172317620373 ) ) ; +#2980 = EDGE_CURVE ( 'NONE', #1161, #2530, #2460, .T. ) ; +#2981 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#2982 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#2983 = EDGE_LOOP ( 'NONE', ( #2036, #461 ) ) ; +#2984 = CARTESIAN_POINT ( 'NONE', ( -4.426603807119229295, -4.500000000000000000, -48.20207128775689398 ) ) ; +#2985 = EDGE_CURVE ( 'NONE', #715, #2201, #840, .T. ) ; +#2986 = AXIS2_PLACEMENT_3D ( 'NONE', #1010, #2339, #1648 ) ; +#2987 = LINE ( 'NONE', #4330, #3500 ) ; +#2988 = CIRCLE ( 'NONE', #3197, 3.000000000000002665 ) ; +#2989 = EDGE_LOOP ( 'NONE', ( #1085, #1313, #26, #678 ) ) ; +#2990 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -4.500000000000000000, 49.73725382063049238 ) ) ; +#2991 = ORIENTED_EDGE ( 'NONE', *, *, #1210, .T. ) ; +#2992 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2993 = AXIS2_PLACEMENT_3D ( 'NONE', #1162, #42, #2370 ) ; +#2994 = VECTOR ( 'NONE', #263, 1000.000000000000000 ) ; +#2995 = VERTEX_POINT ( 'NONE', #1788 ) ; +#2996 = ORIENTED_EDGE ( 'NONE', *, *, #4237, .F. ) ; +#2997 = FACE_OUTER_BOUND ( 'NONE', #1352, .T. ) ; +#2998 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#2999 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -1.199999999999999956, 0.000000000000000000 ) ) ; +#3000 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3001 = CARTESIAN_POINT ( 'NONE', ( -39.75819837980544236, -1.199999999999999956, -56.99999999999999289 ) ) ; +#3002 = CLOSED_SHELL ( 'NONE', ( #2386, #2096, #2126, #1692, #3273, #1971, #1078, #948, #4059, #1570, #1588, #1356, #3700, #1180, #1328, #4291, #1351, #1780, #1262, #436, #2745, #645, #3680, #1749, #3275, #11, #910, #720, #2010, #419, #1907, #1540, #1675, #4055, #2034, #2634, #4241, #1985, #1847, #1878, #3947, #787, #3599, #1620, #225, #162, #3219, #4123, #3803, #1498, #3892, #1236, #2294, #796, #3376, #2785, #3773, #175, #1677, #3248, #2206, #4266, #3559, #3010, #2766, #1911, #3272, #3574, #4347, #1905, #750, #530, #2682, #3673, #464, #1990, #2330, #804, #3532, #3506, #3323, #336, #81, #996, #571, #1851, #2799, #4147, #1613, #1720, #133, #1616, #3004, #78, #4102, #2941, #3918, #2407, #2957, #2657, #1027, #2658, #4251, #101, #1129, #3110, #1023, #1932, #3132, #2344, #1537, #1101, #324, #401, #2927, #4184, #3619, #3858, #2119, #1927, #675, #3108, #1116, #3244, #684, #2041, #2903, #973, #51, #2573, #4056, #482, #3051, #835, #1406, #1772, #3779, #3268, #3031, #1387, #74, #4240, #3152 ) ) ; +#3003 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.199999999999999956, 52.94976107412048805 ) ) ; +#3004 = ADVANCED_FACE ( 'NONE', ( #1809 ), #2155, .F. ) ; +#3005 = FACE_OUTER_BOUND ( 'NONE', #3916, .T. ) ; +#3006 = ORIENTED_EDGE ( 'NONE', *, *, #1536, .F. ) ; +#3007 = CIRCLE ( 'NONE', #624, 0.9999999999999981126 ) ; +#3008 = EDGE_CURVE ( 'NONE', #3998, #2751, #2047, .T. ) ; +#3009 = LINE ( 'NONE', #1348, #2322 ) ; +#3010 = ADVANCED_FACE ( 'NONE', ( #2504, #513, #2527, #3840, #3451, #1848, #206, #862, #2114, #3469, #180, #112 ), #3796, .T. ) ; +#3011 = ORIENTED_EDGE ( 'NONE', *, *, #102, .T. ) ; +#3012 = EDGE_LOOP ( 'NONE', ( #3032, #3038, #3477, #1615 ) ) ; +#3013 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#3014 = EDGE_CURVE ( 'NONE', #87, #3416, #2681, .T. ) ; +#3015 = EDGE_LOOP ( 'NONE', ( #2820, #4227 ) ) ; +#3016 = EDGE_LOOP ( 'NONE', ( #667, #171, #585, #4078 ) ) ; +#3017 = CARTESIAN_POINT ( 'NONE', ( -39.75819837980543525, 0.000000000000000000, -56.99999999999999289 ) ) ; +#3018 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -4.500000000000000000, -35.53553390593242511 ) ) ; +#3019 = CARTESIAN_POINT ( 'NONE', ( 28.01295323236935886, -3.169574499512514798, -63.80000000000018900 ) ) ; +#3020 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3021 = AXIS2_PLACEMENT_3D ( 'NONE', #535, #3558, #2910 ) ; +#3022 = FACE_BOUND ( 'NONE', #1952, .T. ) ; +#3023 = CIRCLE ( 'NONE', #3306, 1.000000000000000888 ) ; +#3024 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -1.199999999999999956, 0.000000000000000000 ) ) ; +#3025 = FACE_OUTER_BOUND ( 'NONE', #1639, .T. ) ; +#3026 = VERTEX_POINT ( 'NONE', #3647 ) ; +#3027 = AXIS2_PLACEMENT_3D ( 'NONE', #656, #1581, #1316 ) ; +#3028 = CARTESIAN_POINT ( 'NONE', ( -37.73125606114251696, -1.199999999999999956, -46.01087987044774508 ) ) ; +#3029 = CIRCLE ( 'NONE', #2394, 5.799999999999999822 ) ; +#3030 = EDGE_CURVE ( 'NONE', #534, #27, #1308, .T. ) ; +#3031 = ADVANCED_FACE ( 'NONE', ( #2596 ), #3934, .F. ) ; +#3032 = ORIENTED_EDGE ( 'NONE', *, *, #502, .F. ) ; +#3033 = EDGE_LOOP ( 'NONE', ( #3752, #1146 ) ) ; +#3034 = CYLINDRICAL_SURFACE ( 'NONE', #2853, 1.656733802117886567 ) ; +#3035 = CIRCLE ( 'NONE', #1981, 1.656733802117886567 ) ; +#3036 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #4063, #4016, ( #3688 ) ) ; +#3037 = ORIENTED_EDGE ( 'NONE', *, *, #3458, .F. ) ; +#3038 = ORIENTED_EDGE ( 'NONE', *, *, #699, .F. ) ; +#3039 = CARTESIAN_POINT ( 'NONE', ( 3.122849337825750222E-15, -1.199999999999999956, -25.50000000000000000 ) ) ; +#3040 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3041 = PLANE ( 'NONE', #2080 ) ; +#3042 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#3043 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -2.399999999999999911, -5.799999999999999822 ) ) ; +#3044 = LINE ( 'NONE', #1776, #1390 ) ; +#3045 = CARTESIAN_POINT ( 'NONE', ( 37.89635322281446861, -4.299999999999999822, 0.000000000000000000 ) ) ; +#3046 = ORIENTED_EDGE ( 'NONE', *, *, #453, .F. ) ; +#3047 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.500000000000000000, 24.46370172317528713 ) ) ; +#3048 = PERSON_AND_ORGANIZATION ( #1235, #2283 ) ; +#3049 = AXIS2_PLACEMENT_3D ( 'NONE', #3325, #320, #4273 ) ; +#3050 = VERTEX_POINT ( 'NONE', #933 ) ; +#3051 = ADVANCED_FACE ( 'NONE', ( #3602 ), #4309, .F. ) ; +#3052 = ORIENTED_EDGE ( 'NONE', *, *, #3014, .T. ) ; +#3053 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -1.199999999999999956, 0.000000000000000000 ) ) ; +#3054 = ORIENTED_EDGE ( 'NONE', *, *, #3356, .T. ) ; +#3055 = ORIENTED_EDGE ( 'NONE', *, *, #2852, .F. ) ; +#3056 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3057 = CIRCLE ( 'NONE', #3970, 3.000000000000002665 ) ; +#3058 = DIRECTION ( 'NONE', ( -0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3059 = CARTESIAN_POINT ( 'NONE', ( -38.53125606114259227, -1.199999999999999734, -44.71207481725014787 ) ) ; +#3060 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -4.500000000000000000, -23.43027221244074099 ) ) ; +#3061 = CIRCLE ( 'NONE', #2986, 5.799999999999999822 ) ; +#3062 = CYLINDRICAL_SURFACE ( 'NONE', #290, 3.000000000000002665 ) ; +#3063 = ORIENTED_EDGE ( 'NONE', *, *, #2021, .F. ) ; +#3064 = EDGE_LOOP ( 'NONE', ( #3075, #2747, #6, #3741 ) ) ; +#3065 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3066 = AXIS2_PLACEMENT_3D ( 'NONE', #1012, #2341, #3351 ) ; +#3067 = LINE ( 'NONE', #1410, #2786 ) ; +#3068 = ORIENTED_EDGE ( 'NONE', *, *, #1158, .T. ) ; +#3069 = AXIS2_PLACEMENT_3D ( 'NONE', #1241, #1918, #2289 ) ; +#3070 = EDGE_CURVE ( 'NONE', #404, #1411, #3833, .T. ) ; +#3071 = CARTESIAN_POINT ( 'NONE', ( 36.21295323236918051, -4.000000000000000000, -62.10000000000018616 ) ) ; +#3072 = ORIENTED_EDGE ( 'NONE', *, *, #4249, .T. ) ; +#3073 = VERTEX_POINT ( 'NONE', #1895 ) ; +#3074 = ORIENTED_EDGE ( 'NONE', *, *, #1643, .F. ) ; +#3075 = ORIENTED_EDGE ( 'NONE', *, *, #949, .T. ) ; +#3076 = ORIENTED_EDGE ( 'NONE', *, *, #1452, .T. ) ; +#3077 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3078 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3079 = CYLINDRICAL_SURFACE ( 'NONE', #2468, 0.8000000000001825651 ) ; +#3080 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3081 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -1.199999999999999956, -2.300000000000006484 ) ) ; +#3082 = VECTOR ( 'NONE', #313, 1000.000000000000000 ) ; +#3083 = ORIENTED_EDGE ( 'NONE', *, *, #1371, .F. ) ; +#3084 = EDGE_CURVE ( 'NONE', #4189, #1550, #2311, .T. ) ; +#3085 = EDGE_CURVE ( 'NONE', #3226, #3198, #1391, .T. ) ; +#3086 = ORIENTED_EDGE ( 'NONE', *, *, #2221, .F. ) ; +#3087 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -2.399999999999999911, 36.73402833653199906 ) ) ; +#3088 = EDGE_CURVE ( 'NONE', #2099, #1823, #975, .T. ) ; +#3089 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3090 = VERTEX_POINT ( 'NONE', #1638 ) ; +#3091 = CIRCLE ( 'NONE', #3576, 1.499999999999987566 ) ; +#3092 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3093 = VECTOR ( 'NONE', #3656, 1000.000000000000000 ) ; +#3094 = ORIENTED_EDGE ( 'NONE', *, *, #3588, .F. ) ; +#3095 = CIRCLE ( 'NONE', #1209, 2.000000000000001776 ) ; +#3096 = ORIENTED_EDGE ( 'NONE', *, *, #158, .T. ) ; +#3097 = LINE ( 'NONE', #89, #529 ) ; +#3098 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3099 = LINE ( 'NONE', #91, #4175 ) ; +#3100 = LINE ( 'NONE', #694, #367 ) ; +#3101 = CIRCLE ( 'NONE', #2265, 1.499999999999987566 ) ; +#3102 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3103 = VERTEX_POINT ( 'NONE', #4244 ) ; +#3104 = ORIENTED_EDGE ( 'NONE', *, *, #829, .F. ) ; +#3105 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -4.500000000000000000, -33.87880010381454099 ) ) ; +#3106 = CARTESIAN_POINT ( 'NONE', ( 36.21295323236918051, -1.199999999999999956, -57.80000000000018190 ) ) ; +#3107 = VERTEX_POINT ( 'NONE', #1978 ) ; +#3108 = ADVANCED_FACE ( 'NONE', ( #1939 ), #1289, .F. ) ; +#3109 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3110 = ADVANCED_FACE ( 'NONE', ( #2949, #2887 ), #2552, .F. ) ; +#3111 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ; +#3112 = ORIENTED_EDGE ( 'NONE', *, *, #4211, .F. ) ; +#3113 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3114 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.199999999999999956, 22.16370172317528642 ) ) ; +#3115 = ORIENTED_EDGE ( 'NONE', *, *, #3128, .T. ) ; +#3116 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3117 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3118 = CIRCLE ( 'NONE', #3336, 2.299999999999999822 ) ; +#3119 = ORIENTED_EDGE ( 'NONE', *, *, #3982, .F. ) ; +#3120 = AXIS2_PLACEMENT_3D ( 'NONE', #4126, #3180, #2152 ) ; +#3121 = ORIENTED_EDGE ( 'NONE', *, *, #1674, .T. ) ; +#3122 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -4.500000000000000000, 18.43027221244937763 ) ) ; +#3123 = AXIS2_PLACEMENT_3D ( 'NONE', #239, #1488, #3566 ) ; +#3124 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3125 = EDGE_LOOP ( 'NONE', ( #1642, #1836, #3731, #4133 ) ) ; +#3126 = VECTOR ( 'NONE', #3711, 1000.000000000000000 ) ; +#3127 = AXIS2_PLACEMENT_3D ( 'NONE', #1949, #283, #1629 ) ; +#3128 = EDGE_CURVE ( 'NONE', #2174, #1161, #2020, .T. ) ; +#3129 = CYLINDRICAL_SURFACE ( 'NONE', #2191, 2.299999999999998934 ) ; +#3130 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -2.399999999999999911, 0.000000000000000000 ) ) ; +#3131 = EDGE_CURVE ( 'NONE', #1302, #3456, #198, .T. ) ; +#3132 = ADVANCED_FACE ( 'NONE', ( #3556 ), #559, .F. ) ; +#3133 = VECTOR ( 'NONE', #638, 1000.000000000000000 ) ; +#3134 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3135 = ORIENTED_EDGE ( 'NONE', *, *, #2351, .F. ) ; +#3136 = PERSON_AND_ORGANIZATION ( #1235, #2283 ) ; +#3137 = LINE ( 'NONE', #2438, #2354 ) ; +#3138 = VERTEX_POINT ( 'NONE', #3912 ) ; +#3139 = FACE_OUTER_BOUND ( 'NONE', #644, .T. ) ; +#3140 = LINE ( 'NONE', #841, #2450 ) ; +#3141 = EDGE_LOOP ( 'NONE', ( #744, #445, #2898, #3534, #21 ) ) ; +#3142 = VERTEX_POINT ( 'NONE', #3579 ) ; +#3143 = CARTESIAN_POINT ( 'NONE', ( -40.25678579777999033, -1.199999999999999956, -44.89411094154586124 ) ) ; +#3144 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3145 = CARTESIAN_POINT ( 'NONE', ( 3.663396254163752364, -2.399999999999999911, -48.84822469919815546 ) ) ; +#3146 = ORIENTED_EDGE ( 'NONE', *, *, #2601, .T. ) ; +#3147 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -1.199999999999999956, 0.000000000000000000 ) ) ; +#3148 = CIRCLE ( 'NONE', #702, 2.000000000000001776 ) ; +#3149 = PLANE ( 'NONE', #762 ) ; +#3150 = FACE_BOUND ( 'NONE', #2983, .T. ) ; +#3151 = ORIENTED_EDGE ( 'NONE', *, *, #730, .T. ) ; +#3152 = ADVANCED_FACE ( 'NONE', ( #2244 ), #582, .F. ) ; +#3153 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -2.399999999999999911, 36.73402833653108246 ) ) ; +#3154 = AXIS2_PLACEMENT_3D ( 'NONE', #1659, #648, #981 ) ; +#3155 = FACE_OUTER_BOUND ( 'NONE', #745, .T. ) ; +#3156 = ORIENTED_EDGE ( 'NONE', *, *, #2489, .T. ) ; +#3157 = EDGE_CURVE ( 'NONE', #55, #399, #4119, .T. ) ; +#3158 = EDGE_CURVE ( 'NONE', #255, #938, #4332, .T. ) ; +#3159 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3160 = CYLINDRICAL_SURFACE ( 'NONE', #1413, 5.800000000000027356 ) ; +#3161 = AXIS2_PLACEMENT_3D ( 'NONE', #4206, #3170, #1467 ) ; +#3162 = ORIENTED_EDGE ( 'NONE', *, *, #593, .F. ) ; +#3163 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3164 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -1.199999999999999734, -23.43027221244074099 ) ) ; +#3165 = VECTOR ( 'NONE', #4129, 1000.000000000000000 ) ; +#3166 = ORIENTED_EDGE ( 'NONE', *, *, #2558, .F. ) ; +#3167 = ORIENTED_EDGE ( 'NONE', *, *, #2632, .T. ) ; +#3168 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -1.199999999999999956, -50.94976107412048094 ) ) ; +#3169 = FACE_BOUND ( 'NONE', #1066, .T. ) ; +#3170 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3171 = CARTESIAN_POINT ( 'NONE', ( 28.01295323236936596, -1.199999999999999956, -46.01087987044774508 ) ) ; +#3172 = AXIS2_PLACEMENT_3D ( 'NONE', #2669, #3960, #1341 ) ; +#3173 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -1.199999999999999956, 36.73402833653199906 ) ) ; +#3174 = CYLINDRICAL_SURFACE ( 'NONE', #1432, 5.799999999999999822 ) ; +#3175 = ORIENTED_EDGE ( 'NONE', *, *, #854, .T. ) ; +#3176 = CYLINDRICAL_SURFACE ( 'NONE', #1520, 3.000000000000002665 ) ; +#3177 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -1.199999999999999956, 5.799999999999999822 ) ) ; +#3178 = ORIENTED_EDGE ( 'NONE', *, *, #160, .F. ) ; +#3179 = EDGE_CURVE ( 'NONE', #2403, #1396, #3421, .T. ) ; +#3180 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3181 = ORIENTED_EDGE ( 'NONE', *, *, #3728, .F. ) ; +#3182 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3183 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980342726, -1.199999999999999956, -61.80000000000018900 ) ) ; +#3184 = EDGE_CURVE ( 'NONE', #1775, #938, #3769, .T. ) ; +#3185 = VERTEX_POINT ( 'NONE', #3592 ) ; +#3186 = ORIENTED_EDGE ( 'NONE', *, *, #2360, .F. ) ; +#3187 = CARTESIAN_POINT ( 'NONE', ( -39.75819837980543525, -1.199999999999999956, -56.99999999999999289 ) ) ; +#3188 = EDGE_CURVE ( 'NONE', #2248, #2600, #1345, .T. ) ; +#3189 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3190 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3191 = VECTOR ( 'NONE', #2437, 1000.000000000000000 ) ; +#3192 = CARTESIAN_POINT ( 'NONE', ( -4.045000030643222999, -4.500000000000000000, -48.52514799347749630 ) ) ; +#3193 = CIRCLE ( 'NONE', #182, 1.000000000000000888 ) ; +#3194 = CARTESIAN_POINT ( 'NONE', ( -39.75819837980453286, -4.500000000000000000, -42.63130005366996755 ) ) ; +#3195 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3197 = AXIS2_PLACEMENT_3D ( 'NONE', #1362, #9, #2693 ) ; +#3196 = AXIS2_PLACEMENT_3D ( 'NONE', #1548, #1499, #860 ) ; +#3198 = VERTEX_POINT ( 'NONE', #264 ) ; +#3199 = AXIS2_PLACEMENT_3D ( 'NONE', #3053, #1394, #2726 ) ; +#3200 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3201 = AXIS2_PLACEMENT_3D ( 'NONE', #1854, #1531, #1901 ) ; +#3202 = EDGE_CURVE ( 'NONE', #2271, #2154, #1881, .T. ) ; +#3203 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -4.500000000000000000, 51.73725382063049238 ) ) ; +#3204 = CARTESIAN_POINT ( 'NONE', ( 37.89635322281446861, -4.299999999999999822, -52.82639461200825082 ) ) ; +#3205 = EDGE_LOOP ( 'NONE', ( #3516, #484 ) ) ; +#3206 = AXIS2_PLACEMENT_3D ( 'NONE', #1596, #315, #1657 ) ; +#3207 = CARTESIAN_POINT ( 'NONE', ( -1.818708808951109772E-12, -1.199999999999999956, -54.04976107412048236 ) ) ; +#3208 = ORIENTED_EDGE ( 'NONE', *, *, #3727, .F. ) ; +#3209 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -4.500000000000000000, -19.43027221244938119 ) ) ; +#3210 = ORIENTED_EDGE ( 'NONE', *, *, #1935, .F. ) ; +#3211 = CIRCLE ( 'NONE', #3634, 1.300000000000189893 ) ; +#3212 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3213 = ORIENTED_EDGE ( 'NONE', *, *, #3748, .T. ) ; +#3214 = EDGE_LOOP ( 'NONE', ( #3754, #1872, #4154, #1609 ) ) ; +#3215 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.299999999999999822, -57.80000000000018190 ) ) ; +#3216 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3217 = LINE ( 'NONE', #519, #2609 ) ; +#3218 = FACE_OUTER_BOUND ( 'NONE', #2801, .T. ) ; +#3219 = ADVANCED_FACE ( 'NONE', ( #1651 ), #2675, .F. ) ; +#3220 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3221 = EDGE_CURVE ( 'NONE', #2507, #2201, #620, .T. ) ; +#3222 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -4.000000000000000000, -62.10000000000018616 ) ) ; +#3223 = ORIENTED_EDGE ( 'NONE', *, *, #2418, .T. ) ; +#3224 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3225 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -4.500000000000000000, -21.43027221244073743 ) ) ; +#3226 = VERTEX_POINT ( 'NONE', #2589 ) ; +#3227 = VECTOR ( 'NONE', #2880, 1000.000000000000000 ) ; +#3228 = AXIS2_PLACEMENT_3D ( 'NONE', #3183, #2225, #2478 ) ; +#3229 = CARTESIAN_POINT ( 'NONE', ( -37.73125606114251696, -4.500000000000000000, 0.000000000000000000 ) ) ; +#3230 = ORIENTED_EDGE ( 'NONE', *, *, #2384, .F. ) ; +#3231 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3232 = EDGE_LOOP ( 'NONE', ( #98, #627, #934, #3627, #2296, #2150, #4195, #2177, #704, #3508, #3300, #3151, #3764, #4086, #2851, #1061 ) ) ; +#3233 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#3234 = EDGE_LOOP ( 'NONE', ( #3052, #4308 ) ) ; +#3235 = CIRCLE ( 'NONE', #3583, 1.699999999999799005 ) ; +#3236 = ORIENTED_EDGE ( 'NONE', *, *, #349, .T. ) ; +#3237 = CARTESIAN_POINT ( 'NONE', ( 28.01295323236935886, -2.299999999999999822, -62.10000000000018616 ) ) ; +#3238 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3239 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3240 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -63.50000000000018474 ) ) ; +#3241 = VECTOR ( 'NONE', #3978, 1000.000000000000000 ) ; +#3242 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3243 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3244 = ADVANCED_FACE ( 'NONE', ( #2342 ), #1325, .T. ) ; +#3245 = EDGE_LOOP ( 'NONE', ( #980, #515, #1165, #3252 ) ) ; +#3246 = AXIS2_PLACEMENT_3D ( 'NONE', #2493, #2408, #2167 ) ; +#3247 = CARTESIAN_POINT ( 'NONE', ( 39.75819837980361626, -1.199999999999999956, -60.50000000000000000 ) ) ; +#3248 = ADVANCED_FACE ( 'NONE', ( #285 ), #1301, .T. ) ; +#3249 = LINE ( 'NONE', #2193, #2105 ) ; +#3250 = EDGE_CURVE ( 'NONE', #2930, #27, #1585, .T. ) ; +#3251 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, 0.000000000000000000, 39.03402833653107962 ) ) ; +#3252 = ORIENTED_EDGE ( 'NONE', *, *, #3919, .F. ) ; +#3253 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.500000000000000000, -24.46370172317620373 ) ) ; +#3254 = ORIENTED_EDGE ( 'NONE', *, *, #1461, .T. ) ; +#3255 = FACE_OUTER_BOUND ( 'NONE', #2243, .T. ) ; +#3256 = EDGE_CURVE ( 'NONE', #1294, #2098, #4258, .T. ) ; +#3257 = ORIENTED_EDGE ( 'NONE', *, *, #4187, .F. ) ; +#3258 = VERTEX_POINT ( 'NONE', #3264 ) ; +#3259 = CYLINDRICAL_SURFACE ( 'NONE', #1795, 0.9999999999999981126 ) ; +#3260 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#3261 = CARTESIAN_POINT ( 'NONE', ( 35.02020398454638439, -2.400000000000011902, -63.50000000000018474 ) ) ; +#3262 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.199999999999999956, 51.94976107412048805 ) ) ; +#3263 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -2.399999999999999911, 37.73402833653199906 ) ) ; +#3264 = CARTESIAN_POINT ( 'NONE', ( 40.25678579777259358, 0.000000000000000000, -44.89411094154993975 ) ) ; +#3265 = ORIENTED_EDGE ( 'NONE', *, *, #887, .T. ) ; +#3266 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -4.500000000000000000, -35.53553390593242511 ) ) ; +#3267 = AXIS2_PLACEMENT_3D ( 'NONE', #382, #4107, #1106 ) ; +#3268 = ADVANCED_FACE ( 'NONE', ( #2630 ), #1257, .F. ) ; +#3269 = AXIS2_PLACEMENT_3D ( 'NONE', #1421, #29, #90 ) ; +#3270 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3271 = VECTOR ( 'NONE', #871, 1000.000000000000000 ) ; +#3272 = ADVANCED_FACE ( 'NONE', ( #3005 ), #660, .T. ) ; +#3273 = ADVANCED_FACE ( 'NONE', ( #4301 ), #3663, .F. ) ; +#3274 = AXIS2_PLACEMENT_3D ( 'NONE', #1053, #1115, #2716 ) ; +#3275 = ADVANCED_FACE ( 'NONE', ( #3613 ), #1929, .F. ) ; +#3276 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3277 = ORIENTED_EDGE ( 'NONE', *, *, #2632, .F. ) ; +#3278 = CARTESIAN_POINT ( 'NONE', ( -41.25819837980453286, -1.199999999999999956, -46.01087987044774508 ) ) ; +#3279 = EDGE_LOOP ( 'NONE', ( #2074, #1417 ) ) ; +#3280 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3281 = AXIS2_PLACEMENT_3D ( 'NONE', #230, #3626, #600 ) ; +#3282 = ORIENTED_EDGE ( 'NONE', *, *, #1187, .F. ) ; +#3283 = ORIENTED_EDGE ( 'NONE', *, *, #1934, .T. ) ; +#3284 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3285 = VECTOR ( 'NONE', #3242, 1000.000000000000000 ) ; +#3286 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#3287 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3288 = CARTESIAN_POINT ( 'NONE', ( -39.75819837980544236, -1.199999999999999956, -56.99999999999999289 ) ) ; +#3289 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -1.199999999999999956, 30.93402833653108175 ) ) ; +#3290 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3291 = ORIENTED_EDGE ( 'NONE', *, *, #1716, .F. ) ; +#3292 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3293 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -4.500000000000000000, 51.73725382063413036 ) ) ; +#3294 = EDGE_CURVE ( 'NONE', #1784, #991, #411, .T. ) ; +#3295 = AXIS2_PLACEMENT_3D ( 'NONE', #4307, #2266, #598 ) ; +#3296 = CARTESIAN_POINT ( 'NONE', ( 28.01295323236935886, -4.000000000000000000, -63.50000000000018474 ) ) ; +#3297 = ORIENTED_EDGE ( 'NONE', *, *, #3461, .F. ) ; +#3298 = EDGE_CURVE ( 'NONE', #2141, #820, #551, .T. ) ; +#3299 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3300 = ORIENTED_EDGE ( 'NONE', *, *, #3157, .F. ) ; +#3301 = PLANE ( 'NONE', #1829 ) ; +#3302 = AXIS2_PLACEMENT_3D ( 'NONE', #3993, #4062, #3357 ) ; +#3303 = EDGE_LOOP ( 'NONE', ( #3799, #1332, #1852, #3735, #2190, #1334 ) ) ; +#3304 = ORIENTED_EDGE ( 'NONE', *, *, #2742, .F. ) ; +#3305 = LINE ( 'NONE', #300, #1661 ) ; +#3306 = AXIS2_PLACEMENT_3D ( 'NONE', #2932, #3013, #2643 ) ; +#3307 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3308 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3309 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3310 = EDGE_CURVE ( 'NONE', #523, #732, #3552, .T. ) ; +#3311 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -4.500000000000000000, 21.43027221244938119 ) ) ; +#3312 = VECTOR ( 'NONE', #755, 1000.000000000000000 ) ; +#3313 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3314 = ORIENTED_EDGE ( 'NONE', *, *, #1723, .F. ) ; +#3315 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -1.199999999999999956, 39.03402833653107962 ) ) ; +#3316 = AXIS2_PLACEMENT_3D ( 'NONE', #785, #2127, #3462 ) ; +#3317 = CARTESIAN_POINT ( 'NONE', ( 41.25819837981169513, -1.199999999999999956, -46.01087987045021066 ) ) ; +#3318 = ORIENTED_EDGE ( 'NONE', *, *, #2088, .F. ) ; +#3319 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3320 = EDGE_LOOP ( 'NONE', ( #2109, #488, #1831, #4066 ) ) ; +#3321 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3322 = EDGE_LOOP ( 'NONE', ( #3712, #3277 ) ) ; +#3323 = ADVANCED_FACE ( 'NONE', ( #390 ), #2077, .F. ) ; +#3324 = EDGE_LOOP ( 'NONE', ( #3487, #1599, #76, #318 ) ) ; +#3325 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -4.500000000000000000, -21.43027221244938119 ) ) ; +#3326 = CARTESIAN_POINT ( 'NONE', ( -1.422690090735478918E-12, 0.000000000000000000, 3.757844729834758368E-13 ) ) ; +#3327 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3328 = CARTESIAN_POINT ( 'NONE', ( -1.818843520099016230E-12, -1.199999999999999956, -52.94976107412048805 ) ) ; +#3329 = PLANE ( 'NONE', #1244 ) ; +#3330 = EDGE_CURVE ( 'NONE', #2421, #715, #1383, .T. ) ; +#3331 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3332 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3333 = ORIENTED_EDGE ( 'NONE', *, *, #2479, .T. ) ; +#3334 = CARTESIAN_POINT ( 'NONE', ( 35.02020398454638439, -2.400000000000011902, -63.80000000000018900 ) ) ; +#3335 = EDGE_CURVE ( 'NONE', #3142, #3537, #3067, .T. ) ; +#3336 = AXIS2_PLACEMENT_3D ( 'NONE', #1547, #2789, #2524 ) ; +#3337 = CIRCLE ( 'NONE', #4172, 1.656733802117886567 ) ; +#3338 = LOCAL_TIME ( 22, 36, 17.00000000000000000, #2700 ) ; +#3339 = VERTEX_POINT ( 'NONE', #3419 ) ; +#3340 = ORIENTED_EDGE ( 'NONE', *, *, #803, .F. ) ; +#3341 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, 0.000000000000000000, 36.73402833653199906 ) ) ; +#3342 = AXIS2_PLACEMENT_3D ( 'NONE', #3904, #524, #1233 ) ; +#3343 = AXIS2_PLACEMENT_3D ( 'NONE', #2797, #696, #2100 ) ; +#3344 = VERTEX_POINT ( 'NONE', #3723 ) ; +#3345 = ORIENTED_EDGE ( 'NONE', *, *, #3298, .F. ) ; +#3346 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3347 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3348 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3349 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3350 = CARTESIAN_POINT ( 'NONE', ( -3.663396254167309962, -4.500000000000000000, -48.84822469919821941 ) ) ; +#3351 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#3352 = VECTOR ( 'NONE', #1573, 1000.000000000000000 ) ; +#3353 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#3354 = ORIENTED_EDGE ( 'NONE', *, *, #1674, .F. ) ; +#3355 = EDGE_CURVE ( 'NONE', #2174, #1817, #437, .T. ) ; +#3356 = EDGE_CURVE ( 'NONE', #3935, #2689, #901, .T. ) ; +#3357 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3358 = DATE_AND_TIME ( #1695, #3338 ) ; +#3359 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #3136, #128, ( #248 ) ) ; +#3360 = ORIENTED_EDGE ( 'NONE', *, *, #1100, .F. ) ; +#3361 = AXIS2_PLACEMENT_3D ( 'NONE', #553, #2879, #2240 ) ; +#3362 = EDGE_LOOP ( 'NONE', ( #2288, #1866, #275, #1266 ) ) ; +#3363 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3364 = ORIENTED_EDGE ( 'NONE', *, *, #1255, .T. ) ; +#3365 = VERTEX_POINT ( 'NONE', #2425 ) ; +#3366 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -4.500000000000000000, -35.53553390593242511 ) ) ; +#3367 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -1.199999999999999956, 0.000000000000000000 ) ) ; +#3368 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3369 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.199999999999999956, -24.46370172317620373 ) ) ; +#3370 = AXIS2_PLACEMENT_3D ( 'NONE', #232, #1223, #2157 ) ; +#3371 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3372 = VECTOR ( 'NONE', #3321, 1000.000000000000000 ) ; +#3373 = CYLINDRICAL_SURFACE ( 'NONE', #1103, 1.269999999999993356 ) ; +#3374 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3375 = ORIENTED_EDGE ( 'NONE', *, *, #2522, .T. ) ; +#3376 = ADVANCED_FACE ( 'NONE', ( #3025 ), #1757, .T. ) ; +#3377 = AXIS2_PLACEMENT_3D ( 'NONE', #304, #3287, #1252 ) ; +#3378 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3379 = CIRCLE ( 'NONE', #506, 2.000000000000001776 ) ; +#3380 = ORIENTED_EDGE ( 'NONE', *, *, #625, .T. ) ; +#3381 = ORIENTED_EDGE ( 'NONE', *, *, #1759, .T. ) ; +#3382 = FACE_OUTER_BOUND ( 'NONE', #3652, .T. ) ; +#3383 = VECTOR ( 'NONE', #3568, 1000.000000000000000 ) ; +#3384 = ORIENTED_EDGE ( 'NONE', *, *, #375, .T. ) ; +#3385 = ORIENTED_EDGE ( 'NONE', *, *, #700, .T. ) ; +#3386 = CARTESIAN_POINT ( 'NONE', ( 41.25819837981169513, -1.199999999999999956, -46.01087987045021066 ) ) ; +#3387 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.199999999999999956, 51.94976107412048805 ) ) ; +#3388 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#3389 = CARTESIAN_POINT ( 'NONE', ( 22.78180162052217383, -1.199999999999999956, -60.00000000000000000 ) ) ; +#3390 = EDGE_CURVE ( 'NONE', #3664, #4044, #4051, .T. ) ; +#3391 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ; +#3392 = EDGE_LOOP ( 'NONE', ( #1375, #824 ) ) ; +#3393 = EDGE_LOOP ( 'NONE', ( #3112, #2316, #3265, #1660 ) ) ; +#3394 = LINE ( 'NONE', #3105, #3478 ) ; +#3395 = LINE ( 'NONE', #350, #976 ) ; +#3396 = ORIENTED_EDGE ( 'NONE', *, *, #1876, .T. ) ; +#3397 = LINE ( 'NONE', #372, #1762 ) ; +#3398 = ORIENTED_EDGE ( 'NONE', *, *, #247, .F. ) ; +#3399 = ORIENTED_EDGE ( 'NONE', *, *, #803, .T. ) ; +#3400 = EDGE_CURVE ( 'NONE', #2950, #2934, #3211, .T. ) ; +#3401 = EDGE_CURVE ( 'NONE', #3801, #3640, #718, .T. ) ; +#3402 = ORIENTED_EDGE ( 'NONE', *, *, #508, .T. ) ; +#3403 = VECTOR ( 'NONE', #167, 1000.000000000000000 ) ; +#3404 = EDGE_CURVE ( 'NONE', #2995, #2201, #4117, .T. ) ; +#3405 = VERTEX_POINT ( 'NONE', #97 ) ; +#3406 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.500000000000000000, -24.46370172317620373 ) ) ; +#3408 = CIRCLE ( 'NONE', #1320, 2.000000000000001776 ) ; +#3407 = VECTOR ( 'NONE', #1068, 1000.000000000000000 ) ; +#3409 = CARTESIAN_POINT ( 'NONE', ( -37.73125606114251696, -4.500000000000000000, 0.000000000000000000 ) ) ; +#3410 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, 0.000000000000000000, 24.46370172317528713 ) ) ; +#3411 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#3412 = AXIS2_PLACEMENT_3D ( 'NONE', #3087, #3065, #1094 ) ; +#3413 = FACE_OUTER_BOUND ( 'NONE', #632, .T. ) ; +#3414 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #4146, #1144, ( #248 ) ) ; +#3415 = ORIENTED_EDGE ( 'NONE', *, *, #3520, .T. ) ; +#3416 = VERTEX_POINT ( 'NONE', #2363 ) ; +#3417 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3418 = AXIS2_PLACEMENT_3D ( 'NONE', #960, #2955, #2667 ) ; +#3419 = CARTESIAN_POINT ( 'NONE', ( 28.01295323236935886, 0.000000000000000000, -63.50000000000018474 ) ) ; +#3420 = ORIENTED_EDGE ( 'NONE', *, *, #477, .T. ) ; +#3421 = CIRCLE ( 'NONE', #3630, 2.299999999999996270 ) ; +#3422 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -4.500000000000000000, -21.43027221244073743 ) ) ; +#3423 = AXIS2_PLACEMENT_3D ( 'NONE', #4033, #3703, #697 ) ; +#3424 = VERTEX_POINT ( 'NONE', #2718 ) ; +#3425 = ORIENTED_EDGE ( 'NONE', *, *, #1397, .F. ) ; +#3426 = ORIENTED_EDGE ( 'NONE', *, *, #3014, .F. ) ; +#3427 = EDGE_CURVE ( 'NONE', #3090, #884, #2446, .T. ) ; +#3428 = EDGE_LOOP ( 'NONE', ( #1504, #3473, #4310, #1338, #418, #3037, #2758, #2194 ) ) ; +#3429 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3430 = EDGE_CURVE ( 'NONE', #4223, #1020, #4339, .T. ) ; +#3431 = PLANE ( 'NONE', #3269 ) ; +#3432 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3433 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#3434 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3435 = AXIS2_PLACEMENT_3D ( 'NONE', #3317, #880, #249 ) ; +#3436 = ORIENTED_EDGE ( 'NONE', *, *, #160, .T. ) ; +#3437 = ORIENTED_EDGE ( 'NONE', *, *, #1782, .T. ) ; +#3438 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -1.199999999999999734, -35.53553390593242511 ) ) ; +#3439 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3440 = EDGE_LOOP ( 'NONE', ( #1943, #2813, #2547, #316 ) ) ; +#3441 = AXIS2_PLACEMENT_3D ( 'NONE', #3845, #1227, #3519 ) ; +#3442 = CIRCLE ( 'NONE', #1902, 2.299999999999999822 ) ; +#3443 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3444 = EDGE_CURVE ( 'NONE', #4014, #342, #3395, .T. ) ; +#3445 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#3446 = AXIS2_PLACEMENT_3D ( 'NONE', #2465, #847, #2823 ) ; +#3447 = ORIENTED_EDGE ( 'NONE', *, *, #3008, .T. ) ; +#3448 = LINE ( 'NONE', #2414, #4037 ) ; +#3449 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3450 = VERTEX_POINT ( 'NONE', #3106 ) ; +#3451 = FACE_BOUND ( 'NONE', #2447, .T. ) ; +#3452 = AXIS2_PLACEMENT_3D ( 'NONE', #2828, #2743, #1412 ) ; +#3453 = CYLINDRICAL_SURFACE ( 'NONE', #2741, 5.799999999999999822 ) ; +#3454 = EDGE_CURVE ( 'NONE', #1039, #685, #554, .T. ) ; +#3455 = ORIENTED_EDGE ( 'NONE', *, *, #47, .F. ) ; +#3456 = VERTEX_POINT ( 'NONE', #2761 ) ; +#3457 = LINE ( 'NONE', #1382, #1172 ) ; +#3458 = EDGE_CURVE ( 'NONE', #3450, #790, #370, .T. ) ; +#3459 = CARTESIAN_POINT ( 'NONE', ( 22.78180162052217383, 0.000000000000000000, -60.00000000000000000 ) ) ; +#3460 = ORIENTED_EDGE ( 'NONE', *, *, #25, .T. ) ; +#3461 = EDGE_CURVE ( 'NONE', #1055, #3073, #3767, .T. ) ; +#3462 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3463 = CYLINDRICAL_SURFACE ( 'NONE', #3903, 5.799999999999999822 ) ; +#3464 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3465 = EDGE_LOOP ( 'NONE', ( #3765, #2991, #3094, #2022 ) ) ; +#3466 = CARTESIAN_POINT ( 'NONE', ( 4.045000030639409161, -1.199999999999999734, -48.52514799347714103 ) ) ; +#3467 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -4.500000000000000000, 49.73725382063412326 ) ) ; +#3468 = ORIENTED_EDGE ( 'NONE', *, *, #302, .T. ) ; +#3469 = FACE_BOUND ( 'NONE', #507, .T. ) ; +#3470 = FACE_OUTER_BOUND ( 'NONE', #187, .T. ) ; +#3471 = EDGE_LOOP ( 'NONE', ( #2702, #1813 ) ) ; +#3472 = CIRCLE ( 'NONE', #1594, 3.000000000000002665 ) ; +#3473 = ORIENTED_EDGE ( 'NONE', *, *, #3707, .T. ) ; +#3474 = FACE_OUTER_BOUND ( 'NONE', #3428, .T. ) ; +#3475 = LINE ( 'NONE', #1202, #82 ) ; +#3476 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3477 = ORIENTED_EDGE ( 'NONE', *, *, #305, .T. ) ; +#3478 = VECTOR ( 'NONE', #1444, 1000.000000000000000 ) ; +#3479 = LINE ( 'NONE', #919, #3383 ) ; +#3480 = EDGE_CURVE ( 'NONE', #4149, #4189, #2435, .T. ) ; +#3481 = LINE ( 'NONE', #23, #3548 ) ; +#3482 = EDGE_CURVE ( 'NONE', #4061, #532, #3007, .T. ) ; +#3483 = AXIS2_PLACEMENT_3D ( 'NONE', #417, #3089, #1032 ) ; +#3484 = CIRCLE ( 'NONE', #2579, 1.300000000000189893 ) ; +#3485 = AXIS2_PLACEMENT_3D ( 'NONE', #1367, #1713, #2382 ) ; +#3486 = ORIENTED_EDGE ( 'NONE', *, *, #3294, .T. ) ; +#3487 = ORIENTED_EDGE ( 'NONE', *, *, #2522, .F. ) ; +#3488 = DATE_AND_TIME ( #813, #108 ) ; +#3489 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -4.500000000000000000, 51.73725382063413036 ) ) ; +#3490 = ORIENTED_EDGE ( 'NONE', *, *, #1448, .F. ) ; +#3491 = PLANE ( 'NONE', #1567 ) ; +#3492 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3493 = ORIENTED_EDGE ( 'NONE', *, *, #1397, .T. ) ; +#3494 = EDGE_LOOP ( 'NONE', ( #2329, #360 ) ) ; +#3495 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3496 = LINE ( 'NONE', #495, #3999 ) ; +#3497 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -2.399999999999999911, 36.73402833653199906 ) ) ; +#3498 = VERTEX_POINT ( 'NONE', #3899 ) ; +#3499 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3500 = VECTOR ( 'NONE', #1331, 1000.000000000000000 ) ; +#3501 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3502 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -2.399999999999999911, 0.9999999999999981126 ) ) ; +#3503 = ORIENTED_EDGE ( 'NONE', *, *, #1759, .F. ) ; +#3504 = AXIS2_PLACEMENT_3D ( 'NONE', #366, #3763, #1380 ) ; +#3505 = FACE_OUTER_BOUND ( 'NONE', #2989, .T. ) ; +#3506 = ADVANCED_FACE ( 'NONE', ( #1539, #827 ), #2874, .T. ) ; +#3507 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3508 = ORIENTED_EDGE ( 'NONE', *, *, #4112, .T. ) ; +#3509 = EDGE_CURVE ( 'NONE', #3073, #3026, #2156, .T. ) ; +#3510 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3511 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -1.199999999999999734, 21.43027221244074099 ) ) ; +#3512 = AXIS2_PLACEMENT_3D ( 'NONE', #2208, #3894, #1793 ) ; +#3513 = ORIENTED_EDGE ( 'NONE', *, *, #3356, .F. ) ; +#3514 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -4.500000000000000000, 21.43027221244074099 ) ) ; +#3515 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3516 = ORIENTED_EDGE ( 'NONE', *, *, #3642, .T. ) ; +#3517 = ORIENTED_EDGE ( 'NONE', *, *, #3444, .F. ) ; +#3518 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.000000000000000000, 0.000000000000000000 ) ) ; +#3519 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3520 = EDGE_CURVE ( 'NONE', #4293, #1808, #1611, .T. ) ; +#3521 = LINE ( 'NONE', #4137, #224 ) ; +#3522 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.500000000000000000, -22.16370172317620302 ) ) ; +#3523 = FACE_OUTER_BOUND ( 'NONE', #4000, .T. ) ; +#3524 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.000000000000000000, 0.000000000000000000 ) ) ; +#3525 = EDGE_LOOP ( 'NONE', ( #808, #904 ) ) ; +#3526 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3527 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3528 = VERTEX_POINT ( 'NONE', #521 ) ; +#3529 = ORIENTED_EDGE ( 'NONE', *, *, #4276, .T. ) ; +#3530 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#3531 = ORIENTED_EDGE ( 'NONE', *, *, #4322, .T. ) ; +#3532 = ADVANCED_FACE ( 'NONE', ( #1509 ), #3567, .F. ) ; +#3533 = LINE ( 'NONE', #2477, #3165 ) ; +#3534 = ORIENTED_EDGE ( 'NONE', *, *, #2905, .T. ) ; +#3535 = PLANE ( 'NONE', #291 ) ; +#3536 = EDGE_CURVE ( 'NONE', #3902, #2280, #2723, .T. ) ; +#3537 = VERTEX_POINT ( 'NONE', #2165 ) ; +#3538 = ORIENTED_EDGE ( 'NONE', *, *, #140, .T. ) ; +#3539 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3540 = FACE_BOUND ( 'NONE', #852, .T. ) ; +#3541 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3542 = AXIS2_PLACEMENT_3D ( 'NONE', #985, #2250, #2317 ) ; +#3543 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3544 = AXIS2_PLACEMENT_3D ( 'NONE', #3266, #266, #197 ) ; +#3545 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3546 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -4.500000000000000000, -21.43027221244938119 ) ) ; +#3547 = VERTEX_POINT ( 'NONE', #4160 ) ; +#3548 = VECTOR ( 'NONE', #358, 1000.000000000000000 ) ; +#3549 = CYLINDRICAL_SURFACE ( 'NONE', #3342, 1.000000000000000888 ) ; +#3550 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -4.500000000000000000, 19.43027221244938119 ) ) ; +#3551 = ORIENTED_EDGE ( 'NONE', *, *, #1934, .F. ) ; +#3552 = CIRCLE ( 'NONE', #1043, 0.9999999999999981126 ) ; +#3553 = APPROVAL_ROLE ( '' ) ; +#3554 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3555 = VERTEX_POINT ( 'NONE', #2561 ) ; +#3556 = FACE_OUTER_BOUND ( 'NONE', #1151, .T. ) ; +#3557 = ORIENTED_EDGE ( 'NONE', *, *, #2491, .F. ) ; +#3558 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3559 = ADVANCED_FACE ( 'NONE', ( #2188 ), #499, .T. ) ; +#3560 = ORIENTED_EDGE ( 'NONE', *, *, #4045, .F. ) ; +#3561 = EDGE_CURVE ( 'NONE', #402, #3774, #850, .T. ) ; +#3562 = ORIENTED_EDGE ( 'NONE', *, *, #3256, .F. ) ; +#3563 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3564 = LINE ( 'NONE', #3804, #993 ) ; +#3565 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3566 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3567 = CYLINDRICAL_SURFACE ( 'NONE', #416, 2.300000000000010481 ) ; +#3568 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3569 = EDGE_LOOP ( 'NONE', ( #2218, #338, #1076, #413 ) ) ; +#3570 = EDGE_CURVE ( 'NONE', #3835, #1493, #1230, .T. ) ; +#3571 = CYLINDRICAL_SURFACE ( 'NONE', #2081, 2.299999999999999822 ) ; +#3572 = CYLINDRICAL_SURFACE ( 'NONE', #995, 2.000000000000001776 ) ; +#3573 = AXIS2_PLACEMENT_3D ( 'NONE', #2115, #1091, #1789 ) ; +#3574 = ADVANCED_FACE ( 'NONE', ( #592, #3523 ), #2210, .F. ) ; +#3575 = AXIS2_PLACEMENT_3D ( 'NONE', #1834, #3238, #1466 ) ; +#3576 = AXIS2_PLACEMENT_3D ( 'NONE', #161, #181, #1830 ) ; +#3577 = PLANE ( 'NONE', #640 ) ; +#3578 = EDGE_LOOP ( 'NONE', ( #3345, #44 ) ) ; +#3579 = CARTESIAN_POINT ( 'NONE', ( 39.75819837980361626, -1.199999999999999956, -60.50000000000000000 ) ) ; +#3580 = ORIENTED_EDGE ( 'NONE', *, *, #3158, .T. ) ; +#3581 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3582 = ORIENTED_EDGE ( 'NONE', *, *, #854, .F. ) ; +#3583 = AXIS2_PLACEMENT_3D ( 'NONE', #3389, #1379, #2417 ) ; +#3584 = ORIENTED_EDGE ( 'NONE', *, *, #3157, .T. ) ; +#3585 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3586 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3587 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -2.399999999999999911, 0.000000000000000000 ) ) ; +#3588 = EDGE_CURVE ( 'NONE', #1126, #2684, #1859, .T. ) ; +#3589 = CYLINDRICAL_SURFACE ( 'NONE', #1734, 1.499999999999161782 ) ; +#3590 = CIRCLE ( 'NONE', #4298, 5.800000000000027356 ) ; +#3591 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3592 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -4.500000000000000000, 24.43027221244938474 ) ) ; +#3593 = VERTEX_POINT ( 'NONE', #217 ) ; +#3594 = EDGE_CURVE ( 'NONE', #207, #2954, #1908, .T. ) ; +#3595 = CIRCLE ( 'NONE', #3452, 0.8000000000001825651 ) ; +#3596 = EDGE_CURVE ( 'NONE', #3456, #1302, #2656, .T. ) ; +#3597 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3598 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3599 = ADVANCED_FACE ( 'NONE', ( #2256 ), #3149, .F. ) ; +#3600 = LINE ( 'NONE', #4242, #487 ) ; +#3601 = ORIENTED_EDGE ( 'NONE', *, *, #4023, .F. ) ; +#3602 = FACE_OUTER_BOUND ( 'NONE', #3977, .T. ) ; +#3603 = ORIENTED_EDGE ( 'NONE', *, *, #3561, .T. ) ; +#3604 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -4.500000000000000000, 21.43027221244074099 ) ) ; +#3605 = ORIENTED_EDGE ( 'NONE', *, *, #2814, .F. ) ; +#3606 = EDGE_LOOP ( 'NONE', ( #2002, #881, #2706, #3877 ) ) ; +#3607 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -1.199999999999999734, -35.53553390593242511 ) ) ; +#3608 = CARTESIAN_POINT ( 'NONE', ( 38.69635322281465761, -4.299999999999999822, -52.82639461200825082 ) ) ; +#3609 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3610 = CARTESIAN_POINT ( 'NONE', ( 22.78180162019453192, 0.000000000000000000, -58.30000000000018190 ) ) ; +#3611 = CARTESIAN_POINT ( 'NONE', ( -1.818708808951109772E-12, -1.199999999999999956, -54.04976107412048236 ) ) ; +#3612 = AXIS2_PLACEMENT_3D ( 'NONE', #3985, #1295, #1683 ) ; +#3613 = FACE_OUTER_BOUND ( 'NONE', #3324, .T. ) ; +#3614 = ORIENTED_EDGE ( 'NONE', *, *, #220, .T. ) ; +#3615 = CYLINDRICAL_SURFACE ( 'NONE', #679, 2.299999999999999822 ) ; +#3616 = CIRCLE ( 'NONE', #963, 2.000000000000001776 ) ; +#3618 = VECTOR ( 'NONE', #3348, 1000.000000000000000 ) ; +#3617 = AXIS2_PLACEMENT_3D ( 'NONE', #4071, #2397, #3737 ) ; +#3619 = ADVANCED_FACE ( 'NONE', ( #2513 ), #2629, .T. ) ; +#3620 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -1.199999999999999956, 30.93402833653199835 ) ) ; +#3621 = AXIS2_PLACEMENT_3D ( 'NONE', #3147, #2825, #4159 ) ; +#3622 = AXIS2_PLACEMENT_3D ( 'NONE', #945, #2277, #3331 ) ; +#3623 = CIRCLE ( 'NONE', #3066, 1.269999999999993356 ) ; +#3624 = FACE_OUTER_BOUND ( 'NONE', #2422, .T. ) ; +#3625 = EDGE_LOOP ( 'NONE', ( #932, #3881 ) ) ; +#3626 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3627 = ORIENTED_EDGE ( 'NONE', *, *, #2171, .T. ) ; +#3628 = FACE_OUTER_BOUND ( 'NONE', #2393, .T. ) ; +#3629 = EDGE_CURVE ( 'NONE', #1758, #725, #1740, .T. ) ; +#3630 = AXIS2_PLACEMENT_3D ( 'NONE', #2662, #242, #2279 ) ; +#3631 = ORIENTED_EDGE ( 'NONE', *, *, #625, .F. ) ; +#3632 = ORIENTED_EDGE ( 'NONE', *, *, #302, .F. ) ; +#3633 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -2.399999999999999911, -0.9999999999999981126 ) ) ; +#3634 = AXIS2_PLACEMENT_3D ( 'NONE', #2779, #2697, #16 ) ; +#3635 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980342726, 0.000000000000000000, -61.80000000000018900 ) ) ; +#3636 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3637 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3638 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3639 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3640 = VERTEX_POINT ( 'NONE', #3990 ) ; +#3641 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#3642 = EDGE_CURVE ( 'NONE', #797, #1832, #3692, .T. ) ; +#3643 = AXIS2_PLACEMENT_3D ( 'NONE', #3910, #977, #626 ) ; +#3644 = EDGE_CURVE ( 'NONE', #3365, #2226, #1689, .T. ) ; +#3645 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -4.500000000000000000, -36.53553390593242511 ) ) ; +#3646 = ORIENTED_EDGE ( 'NONE', *, *, #3179, .T. ) ; +#3647 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, 0.000000000000000000, -22.16370172317620302 ) ) ; +#3648 = VERTEX_POINT ( 'NONE', #659 ) ; +#3649 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#3650 = VECTOR ( 'NONE', #641, 1000.000000000000000 ) ; +#3651 = EDGE_CURVE ( 'NONE', #3185, #441, #1344, .T. ) ; +#3652 = EDGE_LOOP ( 'NONE', ( #4041, #2352 ) ) ; +#3653 = ORIENTED_EDGE ( 'NONE', *, *, #3355, .F. ) ; +#3654 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3655 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3656 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3657 = CARTESIAN_POINT ( 'NONE', ( -1.818708808951109772E-12, 0.000000000000000000, -54.04976107412048236 ) ) ; +#3658 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -4.500000000000000000, 51.73725382063049238 ) ) ; +#3659 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3660 = EDGE_CURVE ( 'NONE', #2, #3185, #893, .T. ) ; +#3661 = AXIS2_PLACEMENT_3D ( 'NONE', #4205, #800, #2184 ) ; +#3662 = VECTOR ( 'NONE', #608, 1000.000000000000000 ) ; +#3663 = CYLINDRICAL_SURFACE ( 'NONE', #340, 25.50000000000000000 ) ; +#3664 = VERTEX_POINT ( 'NONE', #3289 ) ; +#3665 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3666 = CIRCLE ( 'NONE', #236, 1.000000000000000888 ) ; +#3667 = ORIENTED_EDGE ( 'NONE', *, *, #1153, .F. ) ; +#3668 = EDGE_LOOP ( 'NONE', ( #3304, #4243 ) ) ; +#3669 = FACE_OUTER_BOUND ( 'NONE', #3471, .T. ) ; +#3670 = ORIENTED_EDGE ( 'NONE', *, *, #4035, .T. ) ; +#3671 = VERTEX_POINT ( 'NONE', #1606 ) ; +#3672 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -2.399999999999999911, 0.000000000000000000 ) ) ; +#3673 = ADVANCED_FACE ( 'NONE', ( #1669, #308 ), #1029, .F. ) ; +#3674 = FACE_BOUND ( 'NONE', #234, .T. ) ; +#3675 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3676 = FACE_OUTER_BOUND ( 'NONE', #209, .T. ) ; +#3677 = EDGE_CURVE ( 'NONE', #1998, #1416, #1869, .T. ) ; +#3678 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3679 = CYLINDRICAL_SURFACE ( 'NONE', #1323, 2.299999999999998934 ) ; +#3680 = ADVANCED_FACE ( 'NONE', ( #1279 ), #3679, .F. ) ; +#3681 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3682 = ORIENTED_EDGE ( 'NONE', *, *, #1941, .F. ) ; +#3683 = LINE ( 'NONE', #721, #2385 ) ; +#3684 = PERSON_AND_ORGANIZATION ( #1235, #2283 ) ; +#3685 = CC_DESIGN_APPROVAL ( #2442, ( #248 ) ) ; +#3686 = AXIS2_PLACEMENT_3D ( 'NONE', #2753, #3347, #3040 ) ; +#3687 = AXIS2_PLACEMENT_3D ( 'NONE', #853, #2192, #1208 ) ; +#3688 = SECURITY_CLASSIFICATION ( '', '', #37 ) ; +#3689 = ORIENTED_EDGE ( 'NONE', *, *, #602, .F. ) ; +#3690 = ORIENTED_EDGE ( 'NONE', *, *, #186, .T. ) ; +#3691 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -4.500000000000000000, -21.43027221244073743 ) ) ; +#3692 = CIRCLE ( 'NONE', #2855, 0.9999999999999981126 ) ; +#3693 = ORIENTED_EDGE ( 'NONE', *, *, #1562, .F. ) ; +#3694 = ORIENTED_EDGE ( 'NONE', *, *, #1563, .F. ) ; +#3695 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#3696 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.399999999999999911, 57.74976107412048520 ) ) ; +#3697 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -1.199999999999999956, 0.000000000000000000 ) ) ; +#3698 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3699 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3700 = ADVANCED_FACE ( 'NONE', ( #989 ), #14, .T. ) ; +#3701 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3702 = AXIS2_PLACEMENT_3D ( 'NONE', #3253, #251, #2931 ) ; +#3703 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3704 = VERTEX_POINT ( 'NONE', #3003 ) ; +#3705 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -4.500000000000000000, 49.73725382063412326 ) ) ; +#3706 = APPROVAL_ROLE ( '' ) ; +#3707 = EDGE_CURVE ( 'NONE', #1281, #2555, #4343, .T. ) ; +#3708 = EDGE_LOOP ( 'NONE', ( #3360, #3851, #179, #3447 ) ) ; +#3709 = CIRCLE ( 'NONE', #216, 3.000000000000002665 ) ; +#3710 = ORIENTED_EDGE ( 'NONE', *, *, #2351, .T. ) ; +#3711 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3712 = ORIENTED_EDGE ( 'NONE', *, *, #3629, .F. ) ; +#3713 = VERTEX_POINT ( 'NONE', #348 ) ; +#3714 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -2.399999999999999911, 0.000000000000000000 ) ) ; +#3715 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3716 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.399999999999999911, 51.94976107412048805 ) ) ; +#3717 = PLANE ( 'NONE', #651 ) ; +#3718 = LINE ( 'NONE', #3043, #2449 ) ; +#3719 = ORIENTED_EDGE ( 'NONE', *, *, #1051, .T. ) ; +#3720 = CIRCLE ( 'NONE', #1632, 2.300000000000010481 ) ; +#3721 = FACE_OUTER_BOUND ( 'NONE', #3125, .T. ) ; +#3722 = EDGE_CURVE ( 'NONE', #978, #2665, #4011, .T. ) ; +#3723 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -1.199999999999999734, 23.43027221244074454 ) ) ; +#3724 = ORIENTED_EDGE ( 'NONE', *, *, #1802, .T. ) ; +#3725 = CIRCLE ( 'NONE', #3446, 3.000000000000002665 ) ; +#3726 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3727 = EDGE_CURVE ( 'NONE', #2750, #2555, #3623, .T. ) ; +#3728 = EDGE_CURVE ( 'NONE', #1742, #1747, #2782, .T. ) ; +#3729 = EDGE_CURVE ( 'NONE', #1894, #3704, #2962, .T. ) ; +#3730 = AXIS2_PLACEMENT_3D ( 'NONE', #4008, #92, #2069 ) ; +#3731 = ORIENTED_EDGE ( 'NONE', *, *, #2784, .F. ) ; +#3732 = ORIENTED_EDGE ( 'NONE', *, *, #3444, .T. ) ; +#3733 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -1.199999999999999734, -36.53553390593242511 ) ) ; +#3734 = ORIENTED_EDGE ( 'NONE', *, *, #4225, .F. ) ; +#3735 = ORIENTED_EDGE ( 'NONE', *, *, #2436, .F. ) ; +#3736 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3737 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3738 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, -1.000000000000000000 ) ) ; +#3739 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3740 = PLANE ( 'NONE', #494 ) ; +#3741 = ORIENTED_EDGE ( 'NONE', *, *, #1800, .F. ) ; +#3742 = ORIENTED_EDGE ( 'NONE', *, *, #2479, .F. ) ; +#3743 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3744 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3745 = EDGE_LOOP ( 'NONE', ( #4069, #1443 ) ) ; +#3746 = EDGE_CURVE ( 'NONE', #1084, #3998, #3963, .T. ) ; +#3747 = CARTESIAN_POINT ( 'NONE', ( 25.96770808493670302, 0.000000000000000000, -60.30000000000018900 ) ) ; +#3748 = EDGE_CURVE ( 'NONE', #938, #1775, #1801, .T. ) ; +#3749 = ORIENTED_EDGE ( 'NONE', *, *, #3085, .T. ) ; +#3750 = CIRCLE ( 'NONE', #1097, 1.000000000000000888 ) ; +#3751 = ORIENTED_EDGE ( 'NONE', *, *, #301, .F. ) ; +#3752 = ORIENTED_EDGE ( 'NONE', *, *, #4225, .T. ) ; +#3753 = CIRCLE ( 'NONE', #1598, 1.000000000000000888 ) ; +#3754 = ORIENTED_EDGE ( 'NONE', *, *, #1248, .T. ) ; +#3755 = FACE_OUTER_BOUND ( 'NONE', #3967, .T. ) ; +#3757 = AXIS2_PLACEMENT_3D ( 'NONE', #257, #1603, #3286 ) ; +#3756 = CIRCLE ( 'NONE', #38, 3.000000000000002665 ) ; +#3758 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -1.199999999999999734, -23.43027221244938474 ) ) ; +#3759 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3760 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -1.199999999999999956, -51.94976107412048805 ) ) ; +#3761 = VECTOR ( 'NONE', #1819, 1000.000000000000000 ) ; +#3762 = VECTOR ( 'NONE', #540, 1000.000000000000000 ) ; +#3763 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3764 = ORIENTED_EDGE ( 'NONE', *, *, #2671, .T. ) ; +#3765 = ORIENTED_EDGE ( 'NONE', *, *, #3826, .T. ) ; +#3766 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3767 = LINE ( 'NONE', #2101, #1954 ) ; +#3768 = EDGE_LOOP ( 'NONE', ( #603, #1483, #3119, #537 ) ) ; +#3769 = CIRCLE ( 'NONE', #688, 2.000000000000001776 ) ; +#3770 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -2.399999999999999911, -0.9999999999999981126 ) ) ; +#3771 = AXIS2_PLACEMENT_3D ( 'NONE', #79, #2035, #1777 ) ; +#3772 = EDGE_LOOP ( 'NONE', ( #3682, #2349, #3890, #3557 ) ) ; +#3773 = ADVANCED_FACE ( 'NONE', ( #3721 ), #4079, .F. ) ; +#3774 = VERTEX_POINT ( 'NONE', #1465 ) ; +#3775 = LINE ( 'NONE', #1420, #1863 ) ; +#3776 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -1.199999999999999734, -37.19226770805031634 ) ) ; +#3777 = FACE_OUTER_BOUND ( 'NONE', #2728, .T. ) ; +#3778 = CARTESIAN_POINT ( 'NONE', ( 35.02020398454638439, -2.400000000000011902, -62.10000000000018616 ) ) ; +#3779 = ADVANCED_FACE ( 'NONE', ( #2381 ), #3373, .F. ) ; +#3780 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -2.399999999999999911, 0.9999999999999981126 ) ) ; +#3781 = ORIENTED_EDGE ( 'NONE', *, *, #768, .T. ) ; +#3782 = VERTEX_POINT ( 'NONE', #33 ) ; +#3783 = FACE_OUTER_BOUND ( 'NONE', #690, .T. ) ; +#3784 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -2.399999999999999911, 35.73402833653199906 ) ) ; +#3785 = EDGE_LOOP ( 'NONE', ( #2473, #1156 ) ) ; +#3786 = AXIS2_PLACEMENT_3D ( 'NONE', #2546, #2798, #518 ) ; +#3787 = AXIS2_PLACEMENT_3D ( 'NONE', #2326, #3665, #332 ) ; +#3788 = EDGE_CURVE ( 'NONE', #1997, #1415, #469, .T. ) ; +#3789 = CYLINDRICAL_SURFACE ( 'NONE', #3316, 2.099999999999997868 ) ; +#3790 = AXIS2_PLACEMENT_3D ( 'NONE', #4316, #3961, #962 ) ; +#3791 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3792 = AXIS2_PLACEMENT_3D ( 'NONE', #2399, #3739, #3411 ) ; +#3793 = VERTEX_POINT ( 'NONE', #1074 ) ; +#3794 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -1.199999999999999956, -51.94976107412048805 ) ) ; +#3795 = EDGE_LOOP ( 'NONE', ( #380, #2025, #1246, #1190 ) ) ; +#3796 = PLANE ( 'NONE', #152 ) ; +#3797 = AXIS2_PLACEMENT_3D ( 'NONE', #654, #2875, #2514 ) ; +#3798 = CARTESIAN_POINT ( 'NONE', ( 29.18020398454808628, -3.669999999999962625, -62.10000000000018616 ) ) ; +#3799 = ORIENTED_EDGE ( 'NONE', *, *, #2257, .F. ) ; +#3800 = EDGE_CURVE ( 'NONE', #4189, #4149, #335, .T. ) ; +#3801 = VERTEX_POINT ( 'NONE', #1408 ) ; +#3802 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -1.199999999999999734, -21.43027221244938119 ) ) ; +#3803 = ADVANCED_FACE ( 'NONE', ( #3783 ), #2760, .F. ) ; +#3804 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980342726, -1.199999999999999956, -61.80000000000018900 ) ) ; +#3805 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -4.500000000000000000, 53.73725382063049238 ) ) ; +#3806 = ORIENTED_EDGE ( 'NONE', *, *, #270, .T. ) ; +#3807 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #3048, #2018, ( #2350 ) ) ; +#3808 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -1.199999999999999956, 36.73402833653108246 ) ) ; +#3809 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -4.500000000000000000, -35.53553390593242511 ) ) ; +#3810 = CYLINDRICAL_SURFACE ( 'NONE', #2153, 2.299999999999999822 ) ; +#3811 = ORIENTED_EDGE ( 'NONE', *, *, #2308, .T. ) ; +#3812 = PERSON_AND_ORGANIZATION ( #1235, #2283 ) ; +#3813 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3814 = VERTEX_POINT ( 'NONE', #450 ) ; +#3815 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#3816 = PLANE ( 'NONE', #3228 ) ; +#3817 = AXIS2_PLACEMENT_3D ( 'NONE', #3607, #606, #3736 ) ; +#3818 = ORIENTED_EDGE ( 'NONE', *, *, #2238, .T. ) ; +#3819 = AXIS2_PLACEMENT_3D ( 'NONE', #4006, #1840, #1510 ) ; +#3820 = ORIENTED_EDGE ( 'NONE', *, *, #2453, .T. ) ; +#3821 = LINE ( 'NONE', #3215, #2084 ) ; +#3822 = CIRCLE ( 'NONE', #811, 0.5000000000000350830 ) ; +#3823 = FACE_BOUND ( 'NONE', #1731, .T. ) ; +#3824 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980342726, -1.199999999999999956, -61.80000000000018900 ) ) ; +#3825 = VERTEX_POINT ( 'NONE', #368 ) ; +#3826 = EDGE_CURVE ( 'NONE', #708, #4118, #1428, .T. ) ; +#3827 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3828 = AXIS2_PLACEMENT_3D ( 'NONE', #4057, #3417, #118 ) ; +#3829 = DIRECTION ( 'NONE', ( -0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3830 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3831 = EDGE_LOOP ( 'NONE', ( #1337, #4054, #3385, #1456, #1268, #2907, #709, #573, #912, #3425, #2623, #834, #1105, #1691, #94, #1384, #1354, #2461, #984, #2371, #1658, #2975 ) ) ; +#3832 = CARTESIAN_POINT ( 'NONE', ( -4.426603807119229295, -4.500000000000000000, -48.20207128775689398 ) ) ; +#3833 = CIRCLE ( 'NONE', #1950, 2.000000000000001776 ) ; +#3834 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3835 = VERTEX_POINT ( 'NONE', #1712 ) ; +#3836 = EDGE_CURVE ( 'NONE', #3424, #2118, #3044, .T. ) ; +#3837 = EDGE_CURVE ( 'NONE', #2245, #2530, #3457, .T. ) ; +#3838 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3839 = ORIENTED_EDGE ( 'NONE', *, *, #568, .T. ) ; +#3840 = FACE_BOUND ( 'NONE', #1381, .T. ) ; +#3841 = CYLINDRICAL_SURFACE ( 'NONE', #1064, 2.299999999999996270 ) ; +#3842 = ORIENTED_EDGE ( 'NONE', *, *, #1273, .T. ) ; +#3843 = EDGE_LOOP ( 'NONE', ( #3842, #2168 ) ) ; +#3844 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3845 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -1.199999999999999734, -21.43027221244073743 ) ) ; +#3846 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3847 = CARTESIAN_POINT ( 'NONE', ( 3.663396254163752364, -4.500000000000000000, -48.84822469919815546 ) ) ; +#3848 = AXIS2_PLACEMENT_3D ( 'NONE', #4220, #227, #1219 ) ; +#3849 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.199999999999999956, 0.000000000000000000 ) ) ; +#3850 = FACE_OUTER_BOUND ( 'NONE', #1679, .T. ) ; +#3851 = ORIENTED_EDGE ( 'NONE', *, *, #4131, .F. ) ; +#3852 = EDGE_CURVE ( 'NONE', #1309, #2867, #2014, .T. ) ; +#3853 = MANIFOLD_SOLID_BREP ( 'Çгý-À­Éì5', #3002 ) ; +#3854 = FACE_OUTER_BOUND ( 'NONE', #2272, .T. ) ; +#3855 = EDGE_CURVE ( 'NONE', #314, #665, #114, .T. ) ; +#3856 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3857 = EDGE_CURVE ( 'NONE', #2, #3782, #1733, .T. ) ; +#3858 = ADVANCED_FACE ( 'NONE', ( #2075 ), #2121, .F. ) ; +#3859 = ORIENTED_EDGE ( 'NONE', *, *, #3250, .F. ) ; +#3860 = EDGE_LOOP ( 'NONE', ( #3166, #299, #586, #631 ) ) ; +#3861 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3862 = CYLINDRICAL_SURFACE ( 'NONE', #3120, 1.656733802117886567 ) ; +#3863 = CIRCLE ( 'NONE', #781, 4.799999999999970512 ) ; +#3864 = VERTEX_POINT ( 'NONE', #4116 ) ; +#3865 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -2.399999999999999911, -51.94976107412048805 ) ) ; +#3866 = ORIENTED_EDGE ( 'NONE', *, *, #1576, .T. ) ; +#3867 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, 0.000000000000000000, -51.94976107412048805 ) ) ; +#3868 = ORIENTED_EDGE ( 'NONE', *, *, #541, .F. ) ; +#3869 = EDGE_LOOP ( 'NONE', ( #157, #2645, #1200, #131 ) ) ; +#3870 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, 0.000000000000000000, 2.299999999999998934 ) ) ; +#3871 = CIRCLE ( 'NONE', #940, 5.799999999999999822 ) ; +#3872 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3873 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3874 = DIRECTION ( 'NONE', ( 4.789037458359139614E-16, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3875 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3876 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3877 = ORIENTED_EDGE ( 'NONE', *, *, #1350, .T. ) ; +#3878 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3879 = CARTESIAN_POINT ( 'NONE', ( 36.21295323236918051, -2.299999999999999822, -57.80000000000018190 ) ) ; +#3880 = LINE ( 'NONE', #1545, #3227 ) ; +#3881 = ORIENTED_EDGE ( 'NONE', *, *, #2103, .F. ) ; +#3882 = EDGE_CURVE ( 'NONE', #1682, #3593, #3394, .T. ) ; +#3883 = PERSON_AND_ORGANIZATION_ROLE ( 'design_owner' ) ; +#3884 = CARTESIAN_POINT ( 'NONE', ( -41.25819837980453286, -1.199999999999999956, -42.63130005366996755 ) ) ; +#3885 = ORIENTED_EDGE ( 'NONE', *, *, #1782, .F. ) ; +#3886 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -4.500000000000000000, -21.43027221244073743 ) ) ; +#3887 = ORIENTED_EDGE ( 'NONE', *, *, #3330, .F. ) ; +#3888 = LINE ( 'NONE', #4245, #1128 ) ; +#3889 = ORIENTED_EDGE ( 'NONE', *, *, #4324, .F. ) ; +#3890 = ORIENTED_EDGE ( 'NONE', *, *, #2956, .T. ) ; +#3891 = CARTESIAN_POINT ( 'NONE', ( 28.01295323236935886, -2.299999999999999822, -57.80000000000018190 ) ) ; +#3892 = ADVANCED_FACE ( 'NONE', ( #389 ), #415, .F. ) ; +#3893 = FACE_BOUND ( 'NONE', #1794, .T. ) ; +#3894 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3895 = VECTOR ( 'NONE', #509, 1000.000000000000000 ) ; +#3896 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; +#3897 = AXIS2_PLACEMENT_3D ( 'NONE', #1169, #1523, #3530 ) ; +#3898 = VECTOR ( 'NONE', #591, 1000.000000000000000 ) ; +#3899 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -1.199999999999999956, 34.43402833653198769 ) ) ; +#3900 = EDGE_CURVE ( 'NONE', #2226, #884, #4043, .T. ) ; +#3901 = LINE ( 'NONE', #1860, #1641 ) ; +#3902 = VERTEX_POINT ( 'NONE', #1201 ) ; +#3903 = AXIS2_PLACEMENT_3D ( 'NONE', #3153, #1140, #2470 ) ; +#3904 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -2.399999999999999911, 36.73402833653199906 ) ) ; +#3905 = VECTOR ( 'NONE', #3743, 1000.000000000000000 ) ; +#3906 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -2.399999999999999911, 0.000000000000000000 ) ) ; +#3907 = AXIS2_PLACEMENT_3D ( 'NONE', #1142, #2129, #3111 ) ; +#3908 = APPROVAL_STATUS ( 'not_yet_approved' ) ; +#3909 = EDGE_CURVE ( 'NONE', #3226, #388, #1880, .T. ) ; +#3910 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -1.199999999999999734, -21.43027221244073743 ) ) ; +#3911 = ORIENTED_EDGE ( 'NONE', *, *, #2720, .T. ) ; +#3912 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -4.500000000000000000, 54.73725382063049238 ) ) ; +#3913 = ORIENTED_EDGE ( 'NONE', *, *, #333, .F. ) ; +#3914 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -1.199999999999999956, -0.9999999999999981126 ) ) ; +#3915 = EDGE_LOOP ( 'NONE', ( #1132, #4040 ) ) ; +#3916 = EDGE_LOOP ( 'NONE', ( #2703, #3283, #2406, #1790 ) ) ; +#3917 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3918 = ADVANCED_FACE ( 'NONE', ( #2482 ), #2532, .F. ) ; +#3919 = EDGE_CURVE ( 'NONE', #2904, #2402, #267, .T. ) ; +#3920 = LINE ( 'NONE', #3635, #4303 ) ; +#3921 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3922 = LINE ( 'NONE', #1229, #107 ) ; +#3923 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#3924 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -2.399999999999999911, 36.73402833653108246 ) ) ; +#3925 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -2.399999999999999911, 36.73402833653199906 ) ) ; +#3926 = ORIENTED_EDGE ( 'NONE', *, *, #1272, .T. ) ; +#3927 = VECTOR ( 'NONE', #2519, 1000.000000000000000 ) ; +#3928 = FACE_OUTER_BOUND ( 'NONE', #1877, .T. ) ; +#3929 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3930 = AXIS2_PLACEMENT_3D ( 'NONE', #1424, #3434, #2757 ) ; +#3931 = AXIS2_PLACEMENT_3D ( 'NONE', #2246, #3581, #1920 ) ; +#3932 = LINE ( 'NONE', #3296, #1821 ) ; +#3933 = ORIENTED_EDGE ( 'NONE', *, *, #1654, .T. ) ; +#3934 = CYLINDRICAL_SURFACE ( 'NONE', #2721, 25.50000000000000000 ) ; +#3935 = VERTEX_POINT ( 'NONE', #3168 ) ; +#3936 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -2.399999999999999911, -5.799999999999999822 ) ) ; +#3937 = VERTEX_POINT ( 'NONE', #1579 ) ; +#3938 = VECTOR ( 'NONE', #3308, 1000.000000000000000 ) ; +#3939 = EDGE_LOOP ( 'NONE', ( #2181, #767, #1033, #2554 ) ) ; +#3940 = DIRECTION ( 'NONE', ( -0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3941 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3942 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3943 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -2.399999999999999911, 36.73402833653108246 ) ) ; +#3944 = EDGE_CURVE ( 'NONE', #2154, #2271, #2717, .T. ) ; +#3945 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ; +#3946 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#3947 = ADVANCED_FACE ( 'NONE', ( #3474 ), #563, .T. ) ; +#3948 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3949 = ORIENTED_EDGE ( 'NONE', *, *, #3128, .F. ) ; +#3950 = VECTOR ( 'NONE', #1469, 1000.000000000000000 ) ; +#3951 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3952 = CARTESIAN_POINT ( 'NONE', ( 36.21295323236918051, -3.233824310835499816, -62.10000000000018616 ) ) ; +#3953 = CARTESIAN_POINT ( 'NONE', ( 36.21295323236918051, -4.000000000000000000, -63.50000000000018474 ) ) ; +#3954 = ORIENTED_EDGE ( 'NONE', *, *, #2375, .F. ) ; +#3955 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#3956 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3957 = ORIENTED_EDGE ( 'NONE', *, *, #3430, .T. ) ; +#3958 = VERTEX_POINT ( 'NONE', #3891 ) ; +#3959 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3960 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3961 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3962 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3963 = LINE ( 'NONE', #2301, #2428 ) ; +#3964 = AXIS2_PLACEMENT_3D ( 'NONE', #3386, #769, #2373 ) ; +#3965 = EDGE_CURVE ( 'NONE', #4122, #652, #188, .T. ) ; +#3966 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3967 = EDGE_LOOP ( 'NONE', ( #1994, #337 ) ) ; +#3968 = AXIS2_PLACEMENT_3D ( 'NONE', #1343, #3637, #306 ) ; +#3969 = APPROVAL_PERSON_ORGANIZATION ( #3812, #433, #2474 ) ; +#3971 = VECTOR ( 'NONE', #1707, 1000.000000000000000 ) ; +#3970 = AXIS2_PLACEMENT_3D ( 'NONE', #425, #1087, #711 ) ; +#3972 = PLANE ( 'NONE', #1123 ) ; +#3973 = EDGE_CURVE ( 'NONE', #2867, #1309, #817, .T. ) ; +#3974 = AXIS2_PLACEMENT_3D ( 'NONE', #1912, #3597, #3200 ) ; +#3975 = CIRCLE ( 'NONE', #193, 60.30000000000072902 ) ; +#3976 = FACE_OUTER_BOUND ( 'NONE', #4114, .T. ) ; +#3977 = EDGE_LOOP ( 'NONE', ( #357, #2325, #2796, #2580, #1468, #1136 ) ) ; +#3978 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3979 = VERTEX_POINT ( 'NONE', #3237 ) ; +#3980 = CYLINDRICAL_SURFACE ( 'NONE', #3154, 1.000000000000000888 ) ; +#3981 = AXIS2_PLACEMENT_3D ( 'NONE', #1630, #329, #2058 ) ; +#3982 = EDGE_CURVE ( 'NONE', #2750, #534, #235, .T. ) ; +#3983 = EDGE_LOOP ( 'NONE', ( #1118, #3420, #67, #705 ) ) ; +#3984 = EDGE_LOOP ( 'NONE', ( #722, #3603, #4025, #2737 ) ) ; +#3985 = CARTESIAN_POINT ( 'NONE', ( -41.25819837980453286, -1.199999999999999956, -46.01087987044774508 ) ) ; +#3986 = VECTOR ( 'NONE', #1095, 1000.000000000000000 ) ; +#3987 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3988 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#3989 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3990 = CARTESIAN_POINT ( 'NONE', ( 37.89635322281446861, -4.299999999999999822, -52.82639461200825082 ) ) ; +#3991 = CARTESIAN_POINT ( 'NONE', ( 4.426603807114934952, -4.500000000000000000, -48.20207128775611949 ) ) ; +#3992 = ORIENTED_EDGE ( 'NONE', *, *, #3919, .T. ) ; +#3993 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -1.199999999999999956, 0.000000000000000000 ) ) ; +#3994 = AXIS2_PLACEMENT_3D ( 'NONE', #3225, #1234, #2614 ) ; +#3995 = EDGE_CURVE ( 'NONE', #2462, #219, #473, .T. ) ; +#3996 = EDGE_CURVE ( 'NONE', #889, #1894, #1670, .T. ) ; +#3997 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#3998 = VERTEX_POINT ( 'NONE', #3870 ) ; +#3999 = VECTOR ( 'NONE', #2534, 1000.000000000000000 ) ; +#4000 = EDGE_LOOP ( 'NONE', ( #1565, #3551 ) ) ; +#4001 = CARTESIAN_POINT ( 'NONE', ( 25.96770808493693039, 0.000000000000000000, -61.80000000000018900 ) ) ; +#4002 = VECTOR ( 'NONE', #4015, 1000.000000000000000 ) ; +#4003 = ORIENTED_EDGE ( 'NONE', *, *, #1693, .F. ) ; +#4004 = ORIENTED_EDGE ( 'NONE', *, *, #2683, .F. ) ; +#4005 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4006 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -1.199999999999999956, -51.94976107412048805 ) ) ; +#4007 = CARTESIAN_POINT ( 'NONE', ( 36.73402833653108246, -2.399999999999999911, 37.73402833653108246 ) ) ; +#4008 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -1.199999999999999734, 51.73725382063049238 ) ) ; +#4009 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -4.500000000000000000, 51.73725382063413036 ) ) ; +#4010 = AXIS2_PLACEMENT_3D ( 'NONE', #4341, #1342, #2670 ) ; +#4011 = LINE ( 'NONE', #3611, #4261 ) ; +#4012 = AXIS2_PLACEMENT_3D ( 'NONE', #1708, #4029, #3042 ) ; +#4013 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4014 = VERTEX_POINT ( 'NONE', #4228 ) ; +#4015 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4016 = PERSON_AND_ORGANIZATION_ROLE ( 'classification_officer' ) ; +#4017 = VECTOR ( 'NONE', #3092, 1000.000000000000000 ) ; +#4018 = EDGE_CURVE ( 'NONE', #3138, #2261, #972, .T. ) ; +#4019 = EDGE_LOOP ( 'NONE', ( #724, #1724, #3866, #3086 ) ) ; +#4020 = EDGE_CURVE ( 'NONE', #3958, #202, #3821, .T. ) ; +#4021 = VERTEX_POINT ( 'NONE', #211 ) ; +#4022 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4023 = EDGE_CURVE ( 'NONE', #1430, #55, #2841, .T. ) ; +#4024 = EDGE_LOOP ( 'NONE', ( #2476, #3167, #3364, #265 ) ) ; +#4025 = ORIENTED_EDGE ( 'NONE', *, *, #1820, .F. ) ; +#4026 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.500000000000000000, 22.16370172317528642 ) ) ; +#4027 = LINE ( 'NONE', #2093, #1385 ) ; +#4028 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.399999999999999911, 57.74976107412048520 ) ) ; +#4029 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4030 = CARTESIAN_POINT ( 'NONE', ( 7.102951435054647665E-16, -1.199999999999999956, 46.14976107412048378 ) ) ; +#4031 = EDGE_CURVE ( 'NONE', #1215, #2661, #3975, .T. ) ; +#4032 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4033 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -4.500000000000000000, 51.73725382063413036 ) ) ; +#4034 = EDGE_LOOP ( 'NONE', ( #3689, #2531 ) ) ; +#4035 = EDGE_CURVE ( 'NONE', #732, #523, #2648, .T. ) ; +#4036 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -4.500000000000000000, 54.73725382063049238 ) ) ; +#4037 = VECTOR ( 'NONE', #2729, 1000.000000000000000 ) ; +#4038 = CIRCLE ( 'NONE', #3819, 1.000000000000000888 ) ; +#4039 = CIRCLE ( 'NONE', #2496, 0.5000000000000281997 ) ; +#4040 = ORIENTED_EDGE ( 'NONE', *, *, #2877, .T. ) ; +#4041 = ORIENTED_EDGE ( 'NONE', *, *, #3855, .T. ) ; +#4042 = FACE_OUTER_BOUND ( 'NONE', #719, .T. ) ; +#4043 = CIRCLE ( 'NONE', #2498, 1.000000000000000888 ) ; +#4044 = VERTEX_POINT ( 'NONE', #2160 ) ; +#4045 = EDGE_CURVE ( 'NONE', #1637, #1804, #1556, .T. ) ; +#4046 = VERTEX_POINT ( 'NONE', #165 ) ; +#4047 = DIRECTION ( 'NONE', ( 4.789037458359139614E-16, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4048 = LINE ( 'NONE', #1684, #3407 ) ; +#4049 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -2.399999999999999911, -51.94976107412048805 ) ) ; +#4050 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -4.500000000000000000, 23.43027221244938474 ) ) ; +#4051 = CIRCLE ( 'NONE', #3771, 5.799999999999999822 ) ; +#4052 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#4053 = AXIS2_PLACEMENT_3D ( 'NONE', #766, #3834, #3445 ) ; +#4054 = ORIENTED_EDGE ( 'NONE', *, *, #2255, .T. ) ; +#4055 = ADVANCED_FACE ( 'NONE', ( #1505 ), #844, .F. ) ; +#4056 = ADVANCED_FACE ( 'NONE', ( #2976 ), #4314, .F. ) ; +#4057 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -4.500000000000000000, 0.000000000000000000 ) ) ; +#4058 = AXIS2_PLACEMENT_3D ( 'NONE', #547, #570, #1886 ) ; +#4059 = ADVANCED_FACE ( 'NONE', ( #1944 ), #670, .F. ) ; +#4060 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#4061 = VERTEX_POINT ( 'NONE', #3633 ) ; +#4062 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4063 = PERSON_AND_ORGANIZATION ( #1235, #2283 ) ; +#4064 = VERTEX_POINT ( 'NONE', #939 ) ; +#4065 = AXIS2_PLACEMENT_3D ( 'NONE', #4286, #3554, #1286 ) ; +#4066 = ORIENTED_EDGE ( 'NONE', *, *, #1802, .F. ) ; +#4067 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -1.199999999999999956, -0.9999999999999981126 ) ) ; +#4068 = ORIENTED_EDGE ( 'NONE', *, *, #25, .F. ) ; +#4069 = ORIENTED_EDGE ( 'NONE', *, *, #3184, .F. ) ; +#4070 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -4.500000000000000000, -18.43027221244937763 ) ) ; +#4071 = CARTESIAN_POINT ( 'NONE', ( -38.53125606114259227, -4.500000000000000000, -44.71207481725014787 ) ) ; +#4072 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -1.199999999999999734, 24.43027221244938474 ) ) ; +#4073 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4074 = CIRCLE ( 'NONE', #2107, 4.799999999999964295 ) ; +#4075 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4076 = VERTEX_POINT ( 'NONE', #4294 ) ; +#4077 = AXIS2_PLACEMENT_3D ( 'NONE', #2871, #3541, #1486 ) ; +#4078 = ORIENTED_EDGE ( 'NONE', *, *, #951, .F. ) ; +#4079 = CYLINDRICAL_SURFACE ( 'NONE', #3343, 1.699999999999799005 ) ; +#4080 = DIRECTION ( 'NONE', ( 4.789037458359139614E-16, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4081 = ORIENTED_EDGE ( 'NONE', *, *, #3707, .F. ) ; +#4082 = EDGE_CURVE ( 'NONE', #2881, #4021, #2492, .T. ) ; +#4083 = AXIS2_PLACEMENT_3D ( 'NONE', #1534, #1856, #1228 ) ; +#4084 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -1.199999999999999956, 0.000000000000000000 ) ) ; +#4085 = ORIENTED_EDGE ( 'NONE', *, *, #3900, .T. ) ; +#4086 = ORIENTED_EDGE ( 'NONE', *, *, #2151, .F. ) ; +#4087 = AXIS2_PLACEMENT_3D ( 'NONE', #2999, #1008, #2318 ) ; +#4088 = ORIENTED_EDGE ( 'NONE', *, *, #2307, .F. ) ; +#4089 = ORIENTED_EDGE ( 'NONE', *, *, #2467, .T. ) ; +#4090 = FACE_OUTER_BOUND ( 'NONE', #3939, .T. ) ; +#4091 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; +#4092 = FACE_OUTER_BOUND ( 'NONE', #1745, .T. ) ; +#4093 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, -1.500000000000000000, 26.76370172317528784 ) ) ; +#4094 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4095 = ORIENTED_EDGE ( 'NONE', *, *, #2960, .F. ) ; +#4096 = ORIENTED_EDGE ( 'NONE', *, *, #20, .F. ) ; +#4097 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4098 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4099 = VERTEX_POINT ( 'NONE', #256 ) ; +#4100 = EDGE_CURVE ( 'NONE', #532, #4061, #459, .T. ) ; +#4101 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4102 = ADVANCED_FACE ( 'NONE', ( #1601 ), #1314, .F. ) ; +#4103 = VECTOR ( 'NONE', #3113, 1000.000000000000000 ) ; +#4104 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4105 = EDGE_LOOP ( 'NONE', ( #3710, #2485 ) ) ; +#4106 = AXIS2_PLACEMENT_3D ( 'NONE', #4009, #3309, #1668 ) ; +#4107 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4108 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#4109 = FACE_OUTER_BOUND ( 'NONE', #3214, .T. ) ; +#4110 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4111 = AXIS2_PLACEMENT_3D ( 'NONE', #3311, #3701, #2696 ) ; +#4112 = EDGE_CURVE ( 'NONE', #2934, #399, #2003, .T. ) ; +#4113 = CARTESIAN_POINT ( 'NONE', ( -41.25819837980453286, -1.199999999999999956, -46.01087987044774508 ) ) ; +#4114 = EDGE_LOOP ( 'NONE', ( #1149, #3254, #2444, #562 ) ) ; +#4115 = ORIENTED_EDGE ( 'NONE', *, *, #1473, .F. ) ; +#4116 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, 0.000000000000000000, -49.84976107412048663 ) ) ; +#4117 = LINE ( 'NONE', #1429, #1538 ) ; +#4118 = VERTEX_POINT ( 'NONE', #4337 ) ; +#4119 = CIRCLE ( 'NONE', #3206, 1.499999999999161782 ) ; +#4120 = LINE ( 'NONE', #2469, #1365 ) ; +#4121 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -1.199999999999999956, 36.73402833653199906 ) ) ; +#4122 = VERTEX_POINT ( 'NONE', #587 ) ; +#4123 = ADVANCED_FACE ( 'NONE', ( #2581 ), #3259, .F. ) ; +#4124 = EDGE_CURVE ( 'NONE', #4200, #3713, #1514, .T. ) ; +#4125 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.399999999999999911, 51.94976107412048805 ) ) ; +#4126 = CARTESIAN_POINT ( 'NONE', ( 34.92266447387282824, -4.500000000000000000, -35.53553390593242511 ) ) ; +#4127 = VECTOR ( 'NONE', #2222, 1000.000000000000000 ) ; +#4128 = VERTEX_POINT ( 'NONE', #1923 ) ; +#4129 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4130 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.399999999999999911, 51.94976107412048805 ) ) ; +#4131 = EDGE_CURVE ( 'NONE', #1084, #3103, #1447, .T. ) ; +#4132 = EDGE_LOOP ( 'NONE', ( #2312, #2159 ) ) ; +#4133 = ORIENTED_EDGE ( 'NONE', *, *, #1431, .T. ) ; +#4134 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4135 = VECTOR ( 'NONE', #73, 1000.000000000000000 ) ; +#4136 = CYLINDRICAL_SURFACE ( 'NONE', #2116, 4.799999999999970512 ) ; +#4137 = CARTESIAN_POINT ( 'NONE', ( -41.25819837980453286, -1.199999999999999956, -45.51207481725032267 ) ) ; +#4138 = ORIENTED_EDGE ( 'NONE', *, *, #3944, .T. ) ; +#4139 = CIRCLE ( 'NONE', #2388, 2.300000000000010481 ) ; +#4140 = LINE ( 'NONE', #1492, #4151 ) ; +#4141 = CARTESIAN_POINT ( 'NONE', ( 37.89635322281446861, -4.299999999999999822, -51.54561984842757738 ) ) ; +#4142 = AXIS2_PLACEMENT_3D ( 'NONE', #3760, #3349, #71 ) ; +#4143 = PLANE ( 'NONE', #3907 ) ; +#4144 = AXIS2_PLACEMENT_3D ( 'NONE', #3514, #1171, #3116 ) ; +#4145 = ORIENTED_EDGE ( 'NONE', *, *, #4322, .F. ) ; +#4146 = DATE_AND_TIME ( #1476, #4253 ) ; +#4147 = ADVANCED_FACE ( 'NONE', ( #2935 ), #653, .T. ) ; +#4148 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -4.500000000000000000, 23.43027221244938474 ) ) ; +#4149 = VERTEX_POINT ( 'NONE', #279 ) ; +#4150 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4151 = VECTOR ( 'NONE', #2083, 1000.000000000000000 ) ; +#4152 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4153 = EDGE_LOOP ( 'NONE', ( #3437, #1917 ) ) ; +#4154 = ORIENTED_EDGE ( 'NONE', *, *, #576, .F. ) ; +#4155 = CARTESIAN_POINT ( 'NONE', ( -1.422690090735478918E-12, -1.199999999999999956, 3.757844729834758368E-13 ) ) ; +#4156 = LINE ( 'NONE', #474, #1899 ) ; +#4157 = FACE_OUTER_BOUND ( 'NONE', #3869, .T. ) ; +#4158 = ORIENTED_EDGE ( 'NONE', *, *, #1051, .F. ) ; +#4159 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4160 = CARTESIAN_POINT ( 'NONE', ( -24.46370172317620018, 0.000000000000000000, -22.16370172317620302 ) ) ; +#4161 = FACE_OUTER_BOUND ( 'NONE', #3322, .T. ) ; +#4162 = ORIENTED_EDGE ( 'NONE', *, *, #1693, .T. ) ; +#4163 = FACE_OUTER_BOUND ( 'NONE', #723, .T. ) ; +#4164 = EDGE_CURVE ( 'NONE', #2970, #2141, #1645, .T. ) ; +#4165 = ORIENTED_EDGE ( 'NONE', *, *, #247, .T. ) ; +#4166 = ORIENTED_EDGE ( 'NONE', *, *, #3982, .T. ) ; +#4167 = APPROVAL_STATUS ( 'not_yet_approved' ) ; +#4168 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -4.500000000000000000, 51.73725382063049238 ) ) ; +#4169 = ORIENTED_EDGE ( 'NONE', *, *, #3596, .F. ) ; +#4170 = CARTESIAN_POINT ( 'NONE', ( -41.25819837980453286, -1.199999999999999956, -50.74561984842738838 ) ) ; +#4171 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4172 = AXIS2_PLACEMENT_3D ( 'NONE', #2543, #3878, #875 ) ; +#4173 = EDGE_LOOP ( 'NONE', ( #1896, #3135, #1245, #3121 ) ) ; +#4175 = VECTOR ( 'NONE', #49, 1000.000000000000000 ) ; +#4174 = CIRCLE ( 'NONE', #2286, 1.000000000000000888 ) ; +#4176 = ORIENTED_EDGE ( 'NONE', *, *, #1273, .F. ) ; +#4177 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -4.500000000000000000, 51.73725382063049238 ) ) ; +#4178 = AXIS2_PLACEMENT_3D ( 'NONE', #1889, #3224, #1543 ) ; +#4179 = AXIS2_PLACEMENT_3D ( 'NONE', #676, #2362, #327 ) ; +#4180 = FACE_OUTER_BOUND ( 'NONE', #127, .T. ) ; +#4181 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4182 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4183 = EDGE_CURVE ( 'NONE', #889, #467, #3305, .T. ) ; +#4184 = ADVANCED_FACE ( 'NONE', ( #2997 ), #1339, .F. ) ; +#4185 = VECTOR ( 'NONE', #3495, 1000.000000000000000 ) ; +#4186 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4187 = EDGE_CURVE ( 'NONE', #1044, #3593, #4319, .T. ) ; +#4188 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -4.500000000000000000, -21.43027221244938119 ) ) ; +#4189 = VERTEX_POINT ( 'NONE', #3039 ) ; +#4190 = CARTESIAN_POINT ( 'NONE', ( 28.01295323236935886, -1.199999999999999956, -57.80000000000018190 ) ) ; +#4191 = VECTOR ( 'NONE', #1671, 1000.000000000000000 ) ; +#4192 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4193 = AXIS2_PLACEMENT_3D ( 'NONE', #2827, #1560, #2896 ) ; +#4194 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.299999999999999822, -62.10000000000018616 ) ) ; +#4195 = ORIENTED_EDGE ( 'NONE', *, *, #2544, .F. ) ; +#4196 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4197 = LINE ( 'NONE', #4148, #1034 ) ; +#4198 = ORIENTED_EDGE ( 'NONE', *, *, #1080, .F. ) ; +#4199 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4200 = VERTEX_POINT ( 'NONE', #4070 ) ; +#4201 = FACE_OUTER_BOUND ( 'NONE', #2572, .T. ) ; +#4202 = ORIENTED_EDGE ( 'NONE', *, *, #458, .T. ) ; +#4203 = ORIENTED_EDGE ( 'NONE', *, *, #151, .F. ) ; +#4204 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; +#4205 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -4.500000000000000000, 51.73725382063413036 ) ) ; +#4206 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -1.199999999999999734, 51.73725382063049238 ) ) ; +#4207 = FACE_OUTER_BOUND ( 'NONE', #2740, .T. ) ; +#4208 = VECTOR ( 'NONE', #2906, 1000.000000000000000 ) ; +#4209 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.199999999999999956, 51.94976107412048805 ) ) ; +#4210 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -1.199999999999999734, 24.43027221244074454 ) ) ; +#4211 = EDGE_CURVE ( 'NONE', #2154, #3671, #2691, .T. ) ; +#4212 = EDGE_CURVE ( 'NONE', #1309, #1096, #46, .T. ) ; +#4213 = CIRCLE ( 'NONE', #3441, 2.000000000000001776 ) ; +#4214 = ORIENTED_EDGE ( 'NONE', *, *, #3729, .T. ) ; +#4215 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063003053, -1.199999999999999734, -19.43027221244938119 ) ) ; +#4216 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4217 = CYLINDRICAL_SURFACE ( 'NONE', #3786, 3.000000000000002665 ) ; +#4218 = ORIENTED_EDGE ( 'NONE', *, *, #2489, .F. ) ; +#4219 = VECTOR ( 'NONE', #3144, 1000.000000000000000 ) ; +#4220 = CARTESIAN_POINT ( 'NONE', ( -21.43027221244119573, -4.500000000000000000, 51.73725382063413036 ) ) ; +#4221 = ORIENTED_EDGE ( 'NONE', *, *, #4131, .T. ) ; +#4222 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4223 = VERTEX_POINT ( 'NONE', #1067 ) ; +#4224 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4225 = EDGE_CURVE ( 'NONE', #2383, #3937, #3750, .T. ) ; +#4226 = ORIENTED_EDGE ( 'NONE', *, *, #1350, .F. ) ; +#4227 = ORIENTED_EDGE ( 'NONE', *, *, #2956, .F. ) ; +#4228 = CARTESIAN_POINT ( 'NONE', ( 28.01295323236935886, -1.199999999999999956, -61.80000000000018900 ) ) ; +#4229 = VECTOR ( 'NONE', #3524, 1000.000000000000000 ) ; +#4230 = LINE ( 'NONE', #822, #4219 ) ; +#4231 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -1.199999999999999956, 36.73402833653199906 ) ) ; +#4232 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, -1.199999999999999956, 26.76370172317528784 ) ) ; +#4233 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -1.199999999999999956, 36.73402833653199906 ) ) ; +#4234 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -4.500000000000000000, 0.000000000000000000 ) ) ; +#4235 = VERTEX_POINT ( 'NONE', #752 ) ; +#4236 = CARTESIAN_POINT ( 'NONE', ( -38.45819837980525335, -1.199999999999999956, -56.99999999999999289 ) ) ; +#4237 = EDGE_CURVE ( 'NONE', #1493, #2684, #68, .T. ) ; +#4238 = CARTESIAN_POINT ( 'NONE', ( 38.45819837980342726, -1.199999999999999956, -61.80000000000018900 ) ) ; +#4239 = EDGE_CURVE ( 'NONE', #2661, #3258, #3775, .T. ) ; +#4240 = ADVANCED_FACE ( 'NONE', ( #2049 ), #2066, .F. ) ; +#4241 = ADVANCED_FACE ( 'NONE', ( #726 ), #2110, .F. ) ; +#4242 = CARTESIAN_POINT ( 'NONE', ( -1.818965984778930789E-12, -1.199999999999999956, -49.84976107412048663 ) ) ; +#4243 = ORIENTED_EDGE ( 'NONE', *, *, #375, .F. ) ; +#4244 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -1.199999999999999956, -2.299999999999998934 ) ) ; +#4245 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -1.199999999999999956, 2.300000000000006484 ) ) ; +#4246 = ORIENTED_EDGE ( 'NONE', *, *, #284, .T. ) ; +#4247 = ORIENTED_EDGE ( 'NONE', *, *, #1987, .T. ) ; +#4248 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4249 = EDGE_CURVE ( 'NONE', #725, #3664, #2353, .T. ) ; +#4250 = FACE_OUTER_BOUND ( 'NONE', #1092, .T. ) ; +#4251 = ADVANCED_FACE ( 'NONE', ( #3755 ), #1376, .F. ) ; +#4252 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; +#4253 = LOCAL_TIME ( 22, 36, 17.00000000000000000, #2810 ) ; +#4254 = CARTESIAN_POINT ( 'NONE', ( -39.75819837980453286, -4.500000000000000000, 0.000000000000000000 ) ) ; +#4255 = CIRCLE ( 'NONE', #3123, 2.299999999999999822 ) ; +#4256 = CARTESIAN_POINT ( 'NONE', ( -38.53125606114281254, -4.500000000000000000, -45.51207481725032267 ) ) ; +#4257 = CYLINDRICAL_SURFACE ( 'NONE', #3797, 5.799999999999999822 ) ; +#4258 = LINE ( 'NONE', #3991, #4191 ) ; +#4259 = ORIENTED_EDGE ( 'NONE', *, *, #2409, .F. ) ; +#4260 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4261 = VECTOR ( 'NONE', #2013, 1000.000000000000000 ) ; +#4262 = FACE_OUTER_BOUND ( 'NONE', #2046, .T. ) ; +#4263 = AXIS2_PLACEMENT_3D ( 'NONE', #1265, #628, #4288 ) ; +#4264 = LINE ( 'NONE', #3645, #838 ) ; +#4265 = ORIENTED_EDGE ( 'NONE', *, *, #3184, .T. ) ; +#4266 = ADVANCED_FACE ( 'NONE', ( #4090 ), #1086, .F. ) ; +#4267 = CARTESIAN_POINT ( 'NONE', ( 3.122849337825750222E-15, -1.500000000000000000, -25.50000000000000000 ) ) ; +#4268 = ORIENTED_EDGE ( 'NONE', *, *, #4018, .T. ) ; +#4269 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -2.399999999999999911, 30.93402833653199835 ) ) ; +#4270 = EDGE_CURVE ( 'NONE', #4128, #229, #3448, .T. ) ; +#4271 = ORIENTED_EDGE ( 'NONE', *, *, #2548, .T. ) ; +#4272 = ORIENTED_EDGE ( 'NONE', *, *, #2170, .T. ) ; +#4273 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4274 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -4.500000000000000000, 49.73725382063049238 ) ) ; +#4275 = FACE_OUTER_BOUND ( 'NONE', #2948, .T. ) ; +#4276 = EDGE_CURVE ( 'NONE', #341, #652, #3097, .T. ) ; +#4277 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4278 = CARTESIAN_POINT ( 'NONE', ( 51.94976107412094279, -1.199999999999999956, 0.000000000000000000 ) ) ; +#4279 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4280 = VERTEX_POINT ( 'NONE', #1437 ) ; +#4281 = AXIS2_PLACEMENT_3D ( 'NONE', #930, #2550, #1636 ) ; +#4282 = CARTESIAN_POINT ( 'NONE', ( 4.426603807114934952, -1.199999999999999734, -48.20207128775611949 ) ) ; +#4283 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -2.399999999999999911, 5.799999999999999822 ) ) ; +#4284 = VECTOR ( 'NONE', #1016, 1000.000000000000000 ) ; +#4285 = AXIS2_PLACEMENT_3D ( 'NONE', #935, #1335, #4311 ) ; +#4286 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063094003, -4.500000000000000000, 21.43027221244938119 ) ) ; +#4287 = ORIENTED_EDGE ( 'NONE', *, *, #455, .T. ) ; +#4288 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4289 = LINE ( 'NONE', #2951, #2806 ) ; +#4290 = ORIENTED_EDGE ( 'NONE', *, *, #2070, .F. ) ; +#4291 = ADVANCED_FACE ( 'NONE', ( #2769 ), #1046, .F. ) ; +#4292 = CIRCLE ( 'NONE', #1353, 60.30000000000072902 ) ; +#4293 = VERTEX_POINT ( 'NONE', #1399 ) ; +#4294 = CARTESIAN_POINT ( 'NONE', ( 21.43027221244938474, -1.199999999999999734, 54.73725382063049238 ) ) ; +#4295 = CARTESIAN_POINT ( 'NONE', ( -51.73725382063366851, -4.500000000000000000, -19.43027221244073743 ) ) ; +#4296 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4297 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; +#4298 = AXIS2_PLACEMENT_3D ( 'NONE', #1752, #3080, #1423 ) ; +#4299 = EDGE_CURVE ( 'NONE', #2859, #1270, #443, .T. ) ; +#4300 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -2.399999999999999911, 52.94976107412048805 ) ) ; +#4301 = FACE_OUTER_BOUND ( 'NONE', #1503, .T. ) ; +#4302 = ORIENTED_EDGE ( 'NONE', *, *, #3837, .T. ) ; +#4303 = VECTOR ( 'NONE', #3260, 1000.000000000000000 ) ; +#4304 = LINE ( 'NONE', #2966, #2146 ) ; +#4305 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -4.500000000000000000, 18.43027221244074099 ) ) ; +#4306 = EDGE_CURVE ( 'NONE', #2333, #1113, #328, .T. ) ; +#4307 = CARTESIAN_POINT ( 'NONE', ( 51.73725382063366851, -4.500000000000000000, 21.43027221244074099 ) ) ; +#4308 = ORIENTED_EDGE ( 'NONE', *, *, #2384, .T. ) ; +#4309 = PLANE ( 'NONE', #3281 ) ; +#4310 = ORIENTED_EDGE ( 'NONE', *, *, #1153, .T. ) ; +#4311 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4312 = ORIENTED_EDGE ( 'NONE', *, *, #186, .F. ) ; +#4313 = VERTEX_POINT ( 'NONE', #2707 ) ; +#4314 = PLANE ( 'NONE', #3418 ) ; +#4315 = CARTESIAN_POINT ( 'NONE', ( -38.53125606114259227, -4.500000000000000000, -43.43130005367003577 ) ) ; +#4316 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -2.399999999999999911, 36.73402833653199906 ) ) ; +#4317 = FACE_OUTER_BOUND ( 'NONE', #1463, .T. ) ; +#4318 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; +#4319 = CIRCLE ( 'NONE', #3817, 1.656733802117886567 ) ; +#4320 = CARTESIAN_POINT ( 'NONE', ( -36.73402833653199195, -1.199999999999999956, 39.03402833653201043 ) ) ; +#4321 = ORIENTED_EDGE ( 'NONE', *, *, #2307, .T. ) ; +#4322 = EDGE_CURVE ( 'NONE', #196, #231, #2774, .T. ) ; +#4323 = AXIS2_PLACEMENT_3D ( 'NONE', #3262, #1298, #260 ) ; +#4324 = EDGE_CURVE ( 'NONE', #3547, #388, #3118, .T. ) ; +#4326 = AXIS2_PLACEMENT_3D ( 'NONE', #2754, #345, #2731 ) ; +#4325 = VECTOR ( 'NONE', #3078, 1000.000000000000000 ) ; +#4327 = LINE ( 'NONE', #36, #917 ) ; +#4328 = VECTOR ( 'NONE', #867, 1000.000000000000000 ) ; +#4329 = EDGE_CURVE ( 'NONE', #3958, #2136, #2131, .T. ) ; +#4330 = CARTESIAN_POINT ( 'NONE', ( -51.94976107412276889, -2.399999999999999911, 0.9999999999999981126 ) ) ; +#4331 = ORIENTED_EDGE ( 'NONE', *, *, #3594, .F. ) ; +#4332 = LINE ( 'NONE', #2990, #1177 ) ; +#4333 = ORIENTED_EDGE ( 'NONE', *, *, #3677, .T. ) ; +#4334 = FACE_OUTER_BOUND ( 'NONE', #4105, .T. ) ; +#4335 = ORIENTED_EDGE ( 'NONE', *, *, #3629, .T. ) ; +#4336 = VERTEX_POINT ( 'NONE', #2860 ) ; +#4337 = CARTESIAN_POINT ( 'NONE', ( -38.53125606114191726, -1.199999999999999734, -42.63130005366996755 ) ) ; +#4338 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4339 = CIRCLE ( 'NONE', #3423, 3.000000000000002665 ) ; +#4340 = FACE_BOUND ( 'NONE', #3525, .T. ) ; +#4341 = CARTESIAN_POINT ( 'NONE', ( 24.46370172317620018, 0.000000000000000000, 24.46370172317528713 ) ) ; +#4342 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; +#4343 = LINE ( 'NONE', #1366, #617 ) ; +#4344 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; +#4345 = ORIENTED_EDGE ( 'NONE', *, *, #1336, .T. ) ; +#4346 = EDGE_CURVE ( 'NONE', #2098, #3825, #2486, .T. ) ; +#4347 = ADVANCED_FACE ( 'NONE', ( #556 ), #2220, .T. ) ; +#4348 = CARTESIAN_POINT ( 'NONE', ( -41.25819837980453286, -1.199999999999999956, -53.62639461200842561 ) ) ; +#4349 = VECTOR ( 'NONE', #1304, 1000.000000000000000 ) ; +ENDSEC; +END-ISO-10303-21; diff --git a/dependencies.lock b/dependencies.lock new file mode 100644 index 0000000..f4fa858 --- /dev/null +++ b/dependencies.lock @@ -0,0 +1,27 @@ +dependencies: + espressif/tinyusb: + component_hash: a40b7f67df6ac254a4afd96c6401cc56f2059ae747d6d7e66b568bca53ad0edc + dependencies: + - name: idf + require: private + version: '>=5.0' + source: + registry_url: https://components.espressif.com/ + type: service + targets: + - esp32s2 + - esp32s3 + - esp32p4 + - esp32h4 + - esp32s31 + version: 0.19.0~3 + idf: + source: + type: idf + version: 6.1.0 +direct_dependencies: +- espressif/tinyusb +- idf +manifest_hash: 70a580c5cb23e0d6dc849c95262d836bbff03d87beccb61d5b9dadb1a8931346 +target: esp32p4 +version: 3.0.0 diff --git a/images/preview.png b/images/preview.png new file mode 100644 index 0000000..3766ceb Binary files /dev/null and b/images/preview.png differ diff --git a/sdkconfig.defaults b/sdkconfig.defaults new file mode 100644 index 0000000..b8930db --- /dev/null +++ b/sdkconfig.defaults @@ -0,0 +1,43 @@ +CONFIG_IDF_TARGET="esp32p4" + +# Match the known-good ESP32-P4 hardware configuration in ../helloworld. +CONFIG_ESP32P4_SELECTS_REV_LESS_V3=y +CONFIG_ESP32P4_REV_MIN_100=y +CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y +CONFIG_ESP_CONSOLE_UART_DEFAULT=y +CONFIG_ESP_CONSOLE_UART_NUM=0 +CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 +CONFIG_LOG_DEFAULT_LEVEL_INFO=y + +# The module fitted to the target board has a 16 MiB SPI flash. +CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y + +# Audio tasks use 2 ms and 5 ms waits, so the 100 Hz hello-world tick cannot +# be copied safely. Keep a 1 ms RTOS tick for deterministic audio scheduling. +CONFIG_FREERTOS_HZ=1000 + +# ESP32-P4-Function-EV-Board J1 external audio interfaces. +# These GPIOs avoid the board's USB, boot-strap, UART, ESP32-C6 SDIO, +# LCD-control and on-board ES8311 audio connections. +# RX: external 8-channel TDM input, ESP32-P4 is the clock master. +CONFIG_USB_AUDIO_RX_I2S_PORT=0 +CONFIG_USB_AUDIO_RX_MCLK_GPIO=20 +CONFIG_USB_AUDIO_RX_BCLK_GPIO=21 +CONFIG_USB_AUDIO_RX_WS_GPIO=22 +CONFIG_USB_AUDIO_RX_DIN_GPIO=23 +# TX: external stereo I2S output, ESP32-P4 is the clock master. +CONFIG_USB_AUDIO_TX_I2S_PORT=1 +CONFIG_USB_AUDIO_TX_MCLK_GPIO=32 +CONFIG_USB_AUDIO_TX_BCLK_GPIO=33 +CONFIG_USB_AUDIO_TX_WS_GPIO=46 +CONFIG_USB_AUDIO_TX_DOUT_GPIO=47 + +# 50-pixel WS2812B chain driven by the ESP32-P4 RMT TX peripheral and GDMA. +CONFIG_WS2812_LED_RING_ENABLE=y +CONFIG_WS2812_GPIO=26 +CONFIG_WS2812_LED_COUNT=50 +CONFIG_WS2812_LED_RING_FPS=100 +CONFIG_WS2812_LED_RING_BRIGHTNESS=20 +CONFIG_WS2812_LED_RING_DEFAULT_BREATHING=y +CONFIG_WS2812_LED_RING_TASK_PRIORITY=3 +CONFIG_WS2812_LED_RING_TASK_STACK_SIZE=4096 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..7358122 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,54 @@ +if(${IDF_VERSION_MAJOR} LESS 6) + set(priv_requires esp_timer driver hal usb) +else() + set(priv_requires + esp_timer + esp_driver_gpio + esp_driver_i2c + esp_driver_i2s + esp_driver_rmt + esp_driver_uart + esp_hal_usb + esp_hw_support + vfs + ) +endif() + +set(app_sources + "main.c" + "audio_backend.c" + "pcmd3180/pcmd3180.c" + "usb_driver/usb_audio.c" + "usb_driver/usb_descriptors.c" + "usb_driver/usb_hid_keyboard.c" +) + +if(CONFIG_WS2812_LED_RING_ENABLE) + list(APPEND app_sources + "ws2812/ws2812.c" + "ws2812/led_ring_effects.c" + "ws2812/led_ring.c" + ) +endif() + +idf_component_register( + SRCS ${app_sources} + INCLUDE_DIRS + "." + "pcmd3180" + "usb_driver" + "ws2812" + PRIV_REQUIRES ${priv_requires} + WHOLE_ARCHIVE +) + +# The managed TinyUSB component must see this component's tusb_config.h while +# TinyUSB itself is being compiled. +idf_build_get_property(build_components BUILD_COMPONENTS) +if(tinyusb IN_LIST build_components) + set(tinyusb_component tinyusb) +else() + set(tinyusb_component espressif__tinyusb) +endif() +idf_component_get_property(tinyusb_lib ${tinyusb_component} COMPONENT_LIB) +target_include_directories(${tinyusb_lib} PUBLIC "${COMPONENT_DIR}/usb_driver") diff --git a/src/Kconfig.projbuild b/src/Kconfig.projbuild new file mode 100644 index 0000000..74488bd --- /dev/null +++ b/src/Kconfig.projbuild @@ -0,0 +1,148 @@ +menu "ESP32-P4 USB audio" + + config USB_AUDIO_RX_I2S_PORT + int "8-channel TDM input I2S port" + range 0 2 + default 0 + + config USB_AUDIO_RX_SLAVE + bool "TDM input is an I2S slave" + default n + + config USB_AUDIO_RX_MCLK_GPIO + int "TDM input MCLK GPIO (-1 unused)" + range -1 63 + default -1 + + config USB_AUDIO_RX_BCLK_GPIO + int "TDM input BCLK GPIO" + range -1 63 + default -1 + + config USB_AUDIO_RX_WS_GPIO + int "TDM input WS GPIO" + range -1 63 + default -1 + + config USB_AUDIO_RX_DIN_GPIO + int "TDM input data GPIO" + range -1 63 + default -1 + + config USB_AUDIO_TX_I2S_PORT + int "Stereo output I2S port" + range 0 2 + default 1 + + config USB_AUDIO_TX_SLAVE + bool "Stereo output is an I2S slave" + default n + + config USB_AUDIO_TX_MCLK_GPIO + int "Stereo output MCLK GPIO (-1 unused)" + range -1 63 + default -1 + + config USB_AUDIO_TX_BCLK_GPIO + int "Stereo output BCLK GPIO" + range -1 63 + default -1 + + config USB_AUDIO_TX_WS_GPIO + int "Stereo output WS GPIO" + range -1 63 + default -1 + + config USB_AUDIO_TX_DOUT_GPIO + int "Stereo output data GPIO" + range -1 63 + default -1 + + config USB_AUDIO_USB_TASK_PRIORITY + int "TinyUSB task priority" + range 1 15 + default 6 + + config USB_AUDIO_CAPTURE_TASK_PRIORITY + int "Capture task priority" + range 1 15 + default 7 + + config USB_AUDIO_PLAYBACK_TASK_PRIORITY + int "Playback task priority" + range 1 15 + default 7 + +endmenu + +menu "WS2812B LED ring" + + config WS2812_LED_RING_ENABLE + bool "Enable WS2812B LED ring" + default y + + if WS2812_LED_RING_ENABLE + + config WS2812_GPIO + int "RMT data output GPIO" + range 0 54 + default 26 + help + GPIO24 and GPIO25 are reserved for the planned internal + Full-Speed USB PHY D-/D+ connection, so GPIO26 is used by + default for the LED ring data signal. + + config WS2812_LED_COUNT + int "Number of LEDs" + range 1 512 + default 50 + help + This board uses one physical chain of 50 pixels. Eight pixels + belong to group A and the remaining 42 form logical ring B. + + config WS2812_LED_RING_FPS + int "Effect refresh rate (frames/s)" + range 1 100 + default 100 + + config WS2812_LED_RING_BRIGHTNESS + int "Global brightness percent" + range 1 100 + default 20 + help + Limits RGB values before transmission. A conservative default + reduces the peak current of a 50-LED chain. + + choice WS2812_LED_RING_DEFAULT_EFFECT + prompt "Default LED effect" + default WS2812_LED_RING_DEFAULT_BREATHING + + config WS2812_LED_RING_DEFAULT_OFF + bool "Off" + + config WS2812_LED_RING_DEFAULT_RAINBOW + bool "Rainbow" + + config WS2812_LED_RING_DEFAULT_BREATHING + bool "Breathing" + + config WS2812_LED_RING_DEFAULT_DOT + bool "Dot chase" + + config WS2812_LED_RING_DEFAULT_BLINK + bool "Blink" + endchoice + + config WS2812_LED_RING_TASK_PRIORITY + int "LED effect task priority" + range 1 15 + default 3 + + config WS2812_LED_RING_TASK_STACK_SIZE + int "LED effect task stack size" + range 2048 8192 + default 4096 + + endif + +endmenu diff --git a/src/README.md b/src/README.md new file mode 100644 index 0000000..8153f8f --- /dev/null +++ b/src/README.md @@ -0,0 +1,131 @@ +# ESP32-P4 UAC 2.0 高速 USB 声卡 + +本目录是工程的 ESP-IDF 应用组件,功能如下: + +- 原录音设备:24 kHz、16-bit PCM、8 通道,`ch0..ch7` 交错排列; +- 第二录音设备:24 kHz、16-bit PCM、单通道,数据取自原录音设备的通道 1; +- 放音:24 kHz、16-bit PCM、2 通道,左右声道交错排列; +- UAC 2.0 High-Speed,异步播放反馈端点; +- 同一 USB 复合设备还枚举一个 HID 键盘; +- 扬声器主通道静音及 -50 dB 到 0 dB 音量控制; +- 8-slot MSB TDM 录音输入和标准双声道 Philips I2S 放音输出; +- 录放音任务各使用 20 ms 环形缓冲。 + +## USB 端口 + +固件使用 ESP32-P4 的 High-Speed DWC 控制器(TinyUSB RHPORT1)和内部 UTMI +PHY。音频设备连接到板上的 USB 2.0 High-Speed 端口。 + +独立的 Full-Speed DWC 控制器(TinyUSB RHPORT0)不由本应用初始化,FS PHY +选择寄存器也不修改。由于本应用将 GPIO27 配置为 PCMD3180 的 I2C SCL,运行时 +不能同时启用包含 GPIO27 的 FS 备用引脚映射;这不影响使用内部 UTMI PHY 的 +High-Speed USB 音频接口。USB Serial/JTAG 调试接口不会被音频应用交换到另一组 +FS 引脚。 + +## 外设 GPIO 分配 + +| 外设 | 控制器及工作模式 | 信号 | GPIO | ESP32-P4 方向 | +| --- | --- | --- | ---: | --- | +| PCMD3180 录音 | I2S0,TDM 主机,24 kHz、8 slots、16-bit | MCLK | 20 | 输出 | +| PCMD3180 录音 | I2S0,TDM 主机 | BCLK | 21 | 输出 | +| PCMD3180 录音 | I2S0,TDM 主机 | FSYNC/WS,50% 占空比 | 22 | 输出 | +| PCMD3180 录音 | I2S0,TDM 主机 | SDIN | 23 | 输入 | +| PCMD3180 控制 | I2C0 主机,100 kHz,7-bit 地址 `0x4C` | SCL | 27 | 双向、开漏 | +| PCMD3180 控制 | I2C0 主机,100 kHz,7-bit 地址 `0x4C` | SDA | 28 | 双向、开漏 | +| 立体声播放 | I2S1 主机,24 kHz、16-bit | MCLK | 32 | 输出 | +| 立体声播放 | I2S1 主机 | BCLK | 33 | 输出 | +| 立体声播放 | I2S1 主机 | LRCK/WS | 46 | 输出 | +| 立体声播放 | I2S1 主机 | DOUT | 47 | 输出 | +| WS2812 灯链 | RMT TX + GDMA,800 kbit/s | DIN(从物理编号 0 注入) | 26 | 输出 | +| 灯效切换按键 | 内部上拉,按下接地,40 ms 去抖 | KEY | 35 | 输入 | +| 调试控制台 | UART0,115200 bit/s | TX | 37 | 输出 | +| 调试控制台 | UART0,115200 bit/s | RX | 38 | 输入 | +| USB Audio HS | DWC High-Speed + 内部 UTMI PHY | USB D+/D- | 不占用普通 GPIO | 双向 | + +PCMD3180 的 SCL 和 SDA 在软件中启用了内部弱上拉,硬件设计仍建议分别配置合适的 +外部上拉电阻。当前 VS Code Monitor 使用板载 CH343 USB-UART 对应的 `COM5`, +通过 UART0 的 GPIO37/38 输出和接收控制台数据。GPIO24、GPIO25 当前未由本应用 +分配;GPIO26 用于 WS2812 数据输出。 + +## LED 灯链驱动与逻辑分组 + +50 颗 WS2812 按物理编号 `0..49` 串联,数据从编号 0 的 `DIN` 注入。物理传输仍然 +每帧依次发送全部 50 颗灯的数据,软件仅在帧缓冲填充阶段做以下逻辑分组: + +- A 组共 8 颗:`0、1、11、17、23、29、35、41`。A 组不参与圆环动画; +- B 组共 42 颗:除 A 组以外的物理灯珠。灯效模块以连续逻辑编号 `0..41` 计算动画, + 发送前再映射到对应物理编号; +- 彩虹、呼吸、跑点、闪烁和关闭模式下,A 组均明确写为黑色;A 组测试模式下,A 组 + 写为红色且 B 组明确写为黑色,以检查两组之间是否存在串扰; +- 所有颜色(包括 A 组测试红色)均受 `CONFIG_WS2812_LED_RING_BRIGHTNESS` 全局亮度 + 限制。默认值为 20%。 + +底层使用 ESP32-P4 RMT TX + GDMA,在 GPIO26 输出 GRB 数据,默认 100 FPS。工程要求 +`CONFIG_WS2812_LED_COUNT=50`,编译期会校验该值,避免物理映射与帧长度不一致。 +上电默认进入 B 组绿色呼吸模式,A 组保持关闭。 + +## LED 控制操作 + +GPIO35 按键启用内部上拉,按键另一端应接 GND。每次有效按下按以下顺序循环,松开 +不会切换: + +```text +B组彩虹 -> B组呼吸 -> B组跑点 -> B组闪烁 -> A组全红测试 -> 全部关闭 -> B组彩虹 +``` + +B 组跑点模式仅使用一组 dot,颜色为 `RGB(220, 15, 231)`;呼吸模式颜色为 +`RGB(0, 255, 0)`;闪烁模式颜色为 `RGB(207, 166, 16)`,完整亮灭周期为 100 ms, +即 10 Hz(50 ms 亮、50 ms 灭)。上述 RGB 值在发送前仍会乘以全局亮度。 +呼吸亮度系数为 `0.04 + 0.96 * (1 - |period/2 - t| / (period/2))^3`,其中 `t` 是当前 +周期内的时间,默认 `period=6 s`;周期起止为 0.08,周期中点为 1。 + +## 窗口控制台 +UART0 控制台为 115200 bit/s,直接发送单个字符即可切换,无需回车: + +| 字符 | 操作 | +| --- | --- | +| `1` / `r` / `R` | B 组彩虹 | +| `2` / `p` / `P` | B 组呼吸 | +| `3` / `d` / `D` | B 组跑点 | +| `4` / `b` / `B` | B 组闪烁 | +| `5` / `a` / `A` | 仅点亮 A 组 8 颗红灯,B 组关闭(串扰测试) | +| `0` / `o` / `O` / `c` / `C` | 全部关闭 | +| `?` / `h` / `H` | 重新打印帮助 | + +按键或串口切换成功后,控制台会输出当前模式。串口和按键共享同一模式状态,所以从 +串口选定某模式后,再按按键会从该模式的下一档继续循环;从“全部关闭”状态按键则 +进入 B 组彩虹。 + +## 配置与编译 + +工程已经包含顶层 `CMakeLists.txt`、`sdkconfig.defaults`、依赖锁文件和 VS Code +ESP-IDF 设置。先在 `ESP32-P4 USB audio` 菜单填写板级 I2S 引脚和主从模式: + +```text +idf.py set-target esp32p4 +idf.py menuconfig +idf.py build +``` + +Kconfig 中的 I2S GPIO 初始默认值为 `-1`,本工程的 `sdkconfig.defaults` 已按上表 +设置板级引脚;若删除这些设置,程序会在启动阶段报告配置错误。已使用 ESP-IDF v6.0.2 和 +`espressif/tinyusb` 0.19.0~3 完成编译。 + +## 音频硬件假设 + +当前采集后端匹配 PCMD3180:ESP32-P4 输出 24 kHz TDM 时钟,PCMD3180 作为 +从机输出 MSB 对齐、16-bit、8 个连续时隙的数据;播放 DAC/codec 接受 Philips +I2S、24 kHz、16-bit 双声道。录音和放音使用不同 I2S 控制器,分别配置为主机。 + +当前 `USB_AUDIO_MIC_TEST_TONE_ENABLED=0`,8 通道录音设备使用 PCMD3180 的 TDM +数据,单通道录音设备从中提取通道 1。若将该宏改为 `1`,每个录音端点会生成 +独立的 1 kHz 测试正弦波。 + +USB 数据方向以主机为视角:8 路录音是设备到主机(IN),2 路放音是主机到设备 +(OUT)。上板后仍需验证 USB 枚举、TDM 时隙顺序、I2S 极性以及长时间时钟漂移。 + +串口控制台键盘测试命令(115200 baud): + +- `6`:发送 `Ctrl+C`(包含按键释放报告) +- `7`:发送 `Ctrl+V`(包含按键释放报告) +- `8`:发送字符 `a`(包含按键释放报告) diff --git a/src/audio_backend.c b/src/audio_backend.c new file mode 100644 index 0000000..8343c14 --- /dev/null +++ b/src/audio_backend.c @@ -0,0 +1,164 @@ +#include "audio_backend.h" + +#include +#include +#include "driver/i2s_std.h" +#include "driver/i2s_tdm.h" +#include "esp_check.h" +#include "esp_log.h" +#include "freertos/FreeRTOS.h" +#include "sdkconfig.h" +#include "usb_audio_config.h" + +static const char *TAG = "audio_hw"; +static i2s_chan_handle_t s_rx_chan; +static i2s_chan_handle_t s_tx_chan; +static volatile bool s_mute; +static volatile int32_t s_gain_q15 = 32767; + +static esp_err_t validate_config(void) +{ + ESP_RETURN_ON_FALSE(CONFIG_USB_AUDIO_RX_I2S_PORT != CONFIG_USB_AUDIO_TX_I2S_PORT, + ESP_ERR_INVALID_ARG, TAG, + "RX and TX use different formats and must use different I2S ports"); + ESP_RETURN_ON_FALSE(CONFIG_USB_AUDIO_RX_BCLK_GPIO >= 0 && + CONFIG_USB_AUDIO_RX_WS_GPIO >= 0 && + CONFIG_USB_AUDIO_RX_DIN_GPIO >= 0, + ESP_ERR_INVALID_ARG, TAG, + "configure RX BCLK/WS/DIN GPIOs in USB audio menu"); + ESP_RETURN_ON_FALSE(CONFIG_USB_AUDIO_TX_BCLK_GPIO >= 0 && + CONFIG_USB_AUDIO_TX_WS_GPIO >= 0 && + CONFIG_USB_AUDIO_TX_DOUT_GPIO >= 0, + ESP_ERR_INVALID_ARG, TAG, + "configure TX BCLK/WS/DOUT GPIOs in USB audio menu"); + return ESP_OK; +} + +esp_err_t audio_backend_init(void) +{ + ESP_RETURN_ON_ERROR(validate_config(), TAG, "invalid I2S configuration"); + +#if CONFIG_USB_AUDIO_RX_SLAVE +#define USB_AUDIO_RX_ROLE I2S_ROLE_SLAVE +#else +#define USB_AUDIO_RX_ROLE I2S_ROLE_MASTER +#endif +#if CONFIG_USB_AUDIO_TX_SLAVE +#define USB_AUDIO_TX_ROLE I2S_ROLE_SLAVE +#else +#define USB_AUDIO_TX_ROLE I2S_ROLE_MASTER +#endif + + i2s_chan_config_t rx_chan_cfg = I2S_CHANNEL_DEFAULT_CONFIG( + CONFIG_USB_AUDIO_RX_I2S_PORT, USB_AUDIO_RX_ROLE); + rx_chan_cfg.dma_desc_num = 8; + rx_chan_cfg.dma_frame_num = 240; + ESP_RETURN_ON_ERROR(i2s_new_channel(&rx_chan_cfg, NULL, &s_rx_chan), + TAG, "create TDM RX channel"); + + i2s_tdm_config_t rx_cfg = { + .clk_cfg = I2S_TDM_CLK_DEFAULT_CONFIG(USB_AUDIO_MIC_SAMPLE_RATE_HZ), + .slot_cfg = I2S_TDM_MSB_SLOT_DEFAULT_CONFIG( + I2S_DATA_BIT_WIDTH_16BIT, + I2S_SLOT_MODE_STEREO, + I2S_TDM_SLOT0 | I2S_TDM_SLOT1 | I2S_TDM_SLOT2 | I2S_TDM_SLOT3 | + I2S_TDM_SLOT4 | I2S_TDM_SLOT5 | I2S_TDM_SLOT6 | I2S_TDM_SLOT7), + .gpio_cfg = { + .mclk = (gpio_num_t)CONFIG_USB_AUDIO_RX_MCLK_GPIO, + .bclk = (gpio_num_t)CONFIG_USB_AUDIO_RX_BCLK_GPIO, + .ws = (gpio_num_t)CONFIG_USB_AUDIO_RX_WS_GPIO, + .dout = I2S_GPIO_UNUSED, + .din = (gpio_num_t)CONFIG_USB_AUDIO_RX_DIN_GPIO, + .invert_flags = { + .mclk_inv = false, + .bclk_inv = false, + .ws_inv = false, + }, + }, + }; + rx_cfg.clk_cfg.mclk_multiple = I2S_MCLK_MULTIPLE_512; + /* Keep the slot-0 MSB aligned to the active FSYNC edge, but drive WCLK + * high for half of the 8 x 16-bit frame to obtain a 50% duty cycle. */ + rx_cfg.slot_cfg.ws_width = + (USB_AUDIO_MIC_CHANNELS * I2S_DATA_BIT_WIDTH_16BIT) / 2U; + rx_cfg.slot_cfg.ws_pol = true; + rx_cfg.slot_cfg.total_slot = USB_AUDIO_MIC_CHANNELS; + ESP_RETURN_ON_ERROR(i2s_channel_init_tdm_mode(s_rx_chan, &rx_cfg), + TAG, "configure TDM RX channel"); + + i2s_chan_config_t tx_chan_cfg = I2S_CHANNEL_DEFAULT_CONFIG( + CONFIG_USB_AUDIO_TX_I2S_PORT, USB_AUDIO_TX_ROLE); + tx_chan_cfg.dma_desc_num = 8; + tx_chan_cfg.dma_frame_num = 240; + tx_chan_cfg.auto_clear_after_cb = true; + ESP_RETURN_ON_ERROR(i2s_new_channel(&tx_chan_cfg, &s_tx_chan, NULL), + TAG, "create stereo TX channel"); + + i2s_std_config_t tx_cfg = { + .clk_cfg = I2S_STD_CLK_DEFAULT_CONFIG(USB_AUDIO_SPK_SAMPLE_RATE_HZ), + .slot_cfg = I2S_STD_PHILIPS_SLOT_DEFAULT_CONFIG( + I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_STEREO), + .gpio_cfg = { + .mclk = (gpio_num_t)CONFIG_USB_AUDIO_TX_MCLK_GPIO, + .bclk = (gpio_num_t)CONFIG_USB_AUDIO_TX_BCLK_GPIO, + .ws = (gpio_num_t)CONFIG_USB_AUDIO_TX_WS_GPIO, + .dout = (gpio_num_t)CONFIG_USB_AUDIO_TX_DOUT_GPIO, + .din = I2S_GPIO_UNUSED, + .invert_flags = { + .mclk_inv = false, + .bclk_inv = false, + .ws_inv = false, + }, + }, + }; + ESP_RETURN_ON_ERROR(i2s_channel_init_std_mode(s_tx_chan, &tx_cfg), + TAG, "configure stereo TX channel"); + ESP_RETURN_ON_ERROR(i2s_channel_enable(s_rx_chan), TAG, "enable RX"); + ESP_RETURN_ON_ERROR(i2s_channel_enable(s_tx_chan), TAG, "enable TX"); + + ESP_LOGI(TAG, "I2S ready: RX 8ch MSB TDM %u Hz, TX 2ch %u Hz, 16-bit", + USB_AUDIO_MIC_SAMPLE_RATE_HZ, USB_AUDIO_SPK_SAMPLE_RATE_HZ); + return ESP_OK; +} + +esp_err_t audio_backend_read(void *dst, size_t bytes, size_t *bytes_read, + uint32_t timeout_ms) +{ + return i2s_channel_read(s_rx_chan, dst, bytes, bytes_read, + pdMS_TO_TICKS(timeout_ms)); +} + +esp_err_t audio_backend_write(const void *src, size_t bytes, + size_t *bytes_written, uint32_t timeout_ms) +{ + /* One USB millisecond is the largest block passed by usb_audio.c. */ + int16_t scaled[USB_AUDIO_SPK_MS_BYTES / sizeof(int16_t)]; + if (bytes > sizeof(scaled) || (bytes % sizeof(int16_t)) != 0U) { + return ESP_ERR_INVALID_SIZE; + } + + const int16_t *in = (const int16_t *)src; + const size_t samples = bytes / sizeof(*in); + const int32_t gain = s_mute ? 0 : s_gain_q15; + for (size_t i = 0; i < samples; ++i) { + scaled[i] = (int16_t)(((int32_t)in[i] * gain) >> 15); + } + return i2s_channel_write(s_tx_chan, scaled, bytes, bytes_written, + pdMS_TO_TICKS(timeout_ms)); +} + +void audio_backend_set_mute(bool mute) +{ + s_mute = mute; +} + +void audio_backend_set_volume(int16_t volume_db256) +{ + float db = (float)volume_db256 / 256.0f; + if (db > 0.0f) { + db = 0.0f; + } else if (db < -50.0f) { + db = -50.0f; + } + s_gain_q15 = (int32_t)(powf(10.0f, db / 20.0f) * 32767.0f); +} diff --git a/src/audio_backend.h b/src/audio_backend.h new file mode 100644 index 0000000..28eda29 --- /dev/null +++ b/src/audio_backend.h @@ -0,0 +1,30 @@ +#pragma once + +#include +#include +#include +#include "esp_err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** Initialize 8-channel capture and 2-channel playback hardware. */ +esp_err_t audio_backend_init(void); + +/** Read interleaved signed 16-bit PCM: ch0, ch1, ... ch7, next frame. */ +esp_err_t audio_backend_read(void *dst, size_t bytes, size_t *bytes_read, + uint32_t timeout_ms); + +/** Write interleaved signed 16-bit PCM: left, right, next frame. */ +esp_err_t audio_backend_write(const void *src, size_t bytes, + size_t *bytes_written, uint32_t timeout_ms); + +/** Apply USB speaker controls. Volume uses signed 1/256 dB units. */ +void audio_backend_set_mute(bool mute); +void audio_backend_set_volume(int16_t volume_db256); + +#ifdef __cplusplus +} +#endif + diff --git a/src/idf_component.yml b/src/idf_component.yml new file mode 100644 index 0000000..b4324d9 --- /dev/null +++ b/src/idf_component.yml @@ -0,0 +1,7 @@ +version: "0.1.0" +targets: + - esp32p4 +dependencies: + idf: ">=5.3" + espressif/tinyusb: "^0.19.0~3" + diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..f47d9fa --- /dev/null +++ b/src/main.c @@ -0,0 +1,24 @@ +#include "audio_backend.h" +#include "esp_check.h" +#include "esp_log.h" +#include "pcmd3180.h" +#include "usb_audio.h" +#include "sdkconfig.h" + +#if CONFIG_WS2812_LED_RING_ENABLE +#include "led_ring.h" +#endif + +static const char *TAG = "main"; + +void app_main(void) +{ + /* PCMD3180 is an ASI slave, so start the ESP32-P4 TDM clocks first. */ + ESP_ERROR_CHECK(audio_backend_init()); + ESP_ERROR_CHECK(pcmd3180_init(NULL)); + ESP_ERROR_CHECK(usb_audio_init()); +#if CONFIG_WS2812_LED_RING_ENABLE + ESP_ERROR_CHECK(led_ring_start()); +#endif + ESP_LOGI(TAG, "ESP32-P4 USB audio and PCMD3180 started"); +} diff --git a/src/pcmd3180/pcmd3180.c b/src/pcmd3180/pcmd3180.c new file mode 100644 index 0000000..4253358 --- /dev/null +++ b/src/pcmd3180/pcmd3180.c @@ -0,0 +1,259 @@ +#include "pcmd3180.h" + +#include + +#include "driver/i2c_master.h" +#include "esp_check.h" +#include "esp_log.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" + +static const char *TAG = "pcmd3180"; + +#define PCMD3180_I2C_TIMEOUT_MS 100 + +#define PCMD3180_REG_PAGE_CFG 0x00U +#define PCMD3180_REG_SW_RESET 0x01U +#define PCMD3180_REG_SLEEP_CFG 0x02U +#define PCMD3180_REG_ASI_CFG0 0x07U +#define PCMD3180_REG_ASI_CFG1 0x08U +#define PCMD3180_REG_ASI_CFG2 0x09U +#define PCMD3180_REG_ASI_CH1 0x0BU +#define PCMD3180_REG_MST_CFG0 0x13U +#define PCMD3180_REG_MST_CFG1 0x14U +#define PCMD3180_REG_ASI_STS 0x15U +#define PCMD3180_REG_CLK_SRC 0x16U +#define PCMD3180_REG_PDMCLK_CFG 0x1FU +#define PCMD3180_REG_PDMIN_CFG 0x20U +#define PCMD3180_REG_GPO_CFG0 0x22U +#define PCMD3180_REG_GPI_CFG0 0x2BU +#define PCMD3180_REG_GPI_CFG1 0x2CU +#define PCMD3180_REG_CH1_CFG0 0x3CU +#define PCMD3180_REG_DSP_CFG0 0x6BU +#define PCMD3180_REG_DSP_CFG1 0x6CU +#define PCMD3180_REG_IN_CH_EN 0x73U +#define PCMD3180_REG_ASI_OUT_CH_EN 0x74U +#define PCMD3180_REG_PWR_CFG 0x75U +#define PCMD3180_REG_DEV_STS0 0x76U +#define PCMD3180_REG_DEV_STS1 0x77U + +#define PCMD3180_SLEEP_ENZ 0x01U +#define PCMD3180_SLEEP_AREG_SELECT 0x80U +#define PCMD3180_CH_CFG_STRIDE 5U +#define PCMD3180_CHANNEL_COUNT 8U + +static i2c_master_bus_handle_t s_i2c_bus; +static i2c_master_dev_handle_t s_i2c_device; + +static esp_err_t raw_write(uint8_t reg, uint8_t value) +{ + ESP_RETURN_ON_FALSE(s_i2c_device != NULL, ESP_ERR_INVALID_STATE, TAG, + "I2C device is not initialized"); + const uint8_t data[] = {reg, value}; + return i2c_master_transmit(s_i2c_device, data, sizeof(data), + PCMD3180_I2C_TIMEOUT_MS); +} + +static esp_err_t raw_read(uint8_t reg, uint8_t *value) +{ + ESP_RETURN_ON_FALSE(s_i2c_device != NULL, ESP_ERR_INVALID_STATE, TAG, + "I2C device is not initialized"); + ESP_RETURN_ON_FALSE(value != NULL, ESP_ERR_INVALID_ARG, TAG, + "read destination is NULL"); + return i2c_master_transmit_receive(s_i2c_device, ®, sizeof(reg), value, + sizeof(*value), PCMD3180_I2C_TIMEOUT_MS); +} + +static esp_err_t select_page0(void) +{ + return raw_write(PCMD3180_REG_PAGE_CFG, 0x00U); +} + +esp_err_t pcmd3180_write_reg(uint8_t reg, uint8_t value) +{ + ESP_RETURN_ON_ERROR(select_page0(), TAG, "select register page 0"); + return raw_write(reg, value); +} + +esp_err_t pcmd3180_read_reg(uint8_t reg, uint8_t *value) +{ + ESP_RETURN_ON_ERROR(select_page0(), TAG, "select register page 0"); + return raw_read(reg, value); +} + +static esp_err_t wake(bool use_internal_areg) +{ + uint8_t value = PCMD3180_SLEEP_ENZ; + if (use_internal_areg) { + value |= PCMD3180_SLEEP_AREG_SELECT; + } + ESP_RETURN_ON_ERROR(raw_write(PCMD3180_REG_SLEEP_CFG, value), TAG, + "wake device"); + vTaskDelay(pdMS_TO_TICKS(2)); + return ESP_OK; +} + +static esp_err_t configure_tdm(void) +{ + /* TDM format, 16-bit words, normal BCLK/FSYNC polarity. */ + ESP_RETURN_ON_ERROR(raw_write(PCMD3180_REG_ASI_CFG0, 0x00U), TAG, + "configure TDM word format"); + /* TX_OFFSET=0: channel 1 MSB is aligned to the rising edge of FSYNC. */ + ESP_RETURN_ON_ERROR(raw_write(PCMD3180_REG_ASI_CFG1, 0x00U), TAG, + "configure TDM timing"); + ESP_RETURN_ON_ERROR(raw_write(PCMD3180_REG_ASI_CFG2, 0x00U), TAG, + "configure TDM bus"); + + for (uint8_t slot = 0; slot < PCMD3180_CHANNEL_COUNT; ++slot) { + ESP_RETURN_ON_ERROR(raw_write((uint8_t)(PCMD3180_REG_ASI_CH1 + slot), slot), + TAG, "map channel %u to TDM slot %u", + (unsigned)(slot + 1U), (unsigned)slot); + } + return ESP_OK; +} + +static esp_err_t configure_clocks(void) +{ + /* Slave mode, automatic clock configuration and PLL enabled. */ + ESP_RETURN_ON_ERROR(raw_write(PCMD3180_REG_MST_CFG0, 0x01U), TAG, + "configure clock slave mode"); + ESP_RETURN_ON_ERROR(raw_write(PCMD3180_REG_MST_CFG1, 0x48U), TAG, + "configure clock dividers"); + ESP_RETURN_ON_ERROR(raw_write(PCMD3180_REG_CLK_SRC, 0x10U), TAG, + "configure clock source"); + /* 24-kHz audio uses the 1.4112/1.536-MHz PDM clock range. */ + return raw_write(PCMD3180_REG_PDMCLK_CFG, 0x41U); +} + +static esp_err_t configure_channels(void) +{ + /* GPO1..GPO4 output the four PDM clock pairs. */ + for (uint8_t output = 0; output < 4U; ++output) { + ESP_RETURN_ON_ERROR(raw_write((uint8_t)(PCMD3180_REG_GPO_CFG0 + output), + 0x41U), + TAG, "configure PDM clock output %u", + (unsigned)(output + 1U)); + } + + /* GPI1..GPI4 map to PDM input pairs 1..4, matching the STM32 example. */ + ESP_RETURN_ON_ERROR(raw_write(PCMD3180_REG_GPI_CFG0, 0x65U), TAG, + "map PDM inputs 1 and 2"); + ESP_RETURN_ON_ERROR(raw_write(PCMD3180_REG_GPI_CFG1, 0x47U), TAG, + "map PDM inputs 3 and 4"); + ESP_RETURN_ON_ERROR(raw_write(PCMD3180_REG_PDMIN_CFG, 0xf0U), TAG, + "configure PDM data edges"); + + for (uint8_t channel = 0; channel < PCMD3180_CHANNEL_COUNT; ++channel) { + const uint8_t base = (uint8_t)(PCMD3180_REG_CH1_CFG0 + + channel * PCMD3180_CH_CFG_STRIDE); + ESP_RETURN_ON_ERROR(raw_write(base, 0x40U), TAG, + "select PDM input for channel %u", + (unsigned)(channel + 1U)); + ESP_RETURN_ON_ERROR(raw_write((uint8_t)(base + 2U), 0xC9U), TAG, + "set channel %u digital volume", + (unsigned)(channel + 1U)); + ESP_RETURN_ON_ERROR(raw_write((uint8_t)(base + 3U), 0x80U), TAG, + "set channel %u gain calibration", + (unsigned)(channel + 1U)); + ESP_RETURN_ON_ERROR(raw_write((uint8_t)(base + 4U), 0x00U), TAG, + "set channel %u phase calibration", + (unsigned)(channel + 1U)); + } + + ESP_RETURN_ON_ERROR(raw_write(PCMD3180_REG_DSP_CFG0, 0x01U), TAG, + "configure channel DSP"); + ESP_RETURN_ON_ERROR(raw_write(PCMD3180_REG_DSP_CFG1, 0x00U), TAG, + "configure volume DSP"); + ESP_RETURN_ON_ERROR(raw_write(PCMD3180_REG_IN_CH_EN, 0xFFU), TAG, + "enable all input channels"); + return raw_write(PCMD3180_REG_ASI_OUT_CH_EN, 0xFFU); +} + +static esp_err_t log_status(void) +{ + uint8_t asi_cfg0; + uint8_t asi_cfg1; + uint8_t asi_status; + uint8_t dev_status0; + uint8_t dev_status1; + + ESP_RETURN_ON_ERROR(raw_read(PCMD3180_REG_ASI_CFG0, &asi_cfg0), TAG, + "read ASI_CFG0"); + ESP_RETURN_ON_ERROR(raw_read(PCMD3180_REG_ASI_CFG1, &asi_cfg1), TAG, + "read ASI_CFG1"); + ESP_RETURN_ON_ERROR(raw_read(PCMD3180_REG_ASI_STS, &asi_status), TAG, + "read ASI_STS"); + ESP_RETURN_ON_ERROR(raw_read(PCMD3180_REG_DEV_STS0, &dev_status0), TAG, + "read DEV_STS0"); + ESP_RETURN_ON_ERROR(raw_read(PCMD3180_REG_DEV_STS1, &dev_status1), TAG, + "read DEV_STS1"); + + ESP_LOGI(TAG, + "ready: TDM slave 8 slots x 16-bit, ASI_CFG0=0x%02x " + "ASI_CFG1=0x%02x ASI_STS=0x%02x DEV_STS0=0x%02x DEV_STS1=0x%02x", + asi_cfg0, asi_cfg1, asi_status, dev_status0, dev_status1); + return ESP_OK; +} + +esp_err_t pcmd3180_init(const pcmd3180_config_t *config) +{ + const pcmd3180_config_t default_config = PCMD3180_CONFIG_DEFAULT(); + const pcmd3180_config_t *cfg = config != NULL ? config : &default_config; + + ESP_RETURN_ON_FALSE(s_i2c_bus == NULL && s_i2c_device == NULL, + ESP_ERR_INVALID_STATE, TAG, "already initialized"); + ESP_RETURN_ON_FALSE(cfg->i2c_address <= 0x7FU && + GPIO_IS_VALID_OUTPUT_GPIO(cfg->scl_gpio) && + GPIO_IS_VALID_OUTPUT_GPIO(cfg->sda_gpio) && + cfg->scl_gpio != cfg->sda_gpio && + cfg->i2c_frequency_hz > 0U, + ESP_ERR_INVALID_ARG, TAG, "invalid I2C configuration"); + + const i2c_master_bus_config_t bus_config = { + .i2c_port = cfg->i2c_port, + .sda_io_num = cfg->sda_gpio, + .scl_io_num = cfg->scl_gpio, + .clk_source = I2C_CLK_SRC_DEFAULT, + .glitch_ignore_cnt = 7, + .intr_priority = 0, + .trans_queue_depth = 0, + .flags.enable_internal_pullup = true, + }; + ESP_RETURN_ON_ERROR(i2c_new_master_bus(&bus_config, &s_i2c_bus), TAG, + "create I2C master bus"); + + const i2c_device_config_t device_config = { + .dev_addr_length = I2C_ADDR_BIT_LEN_7, + .device_address = cfg->i2c_address, + .scl_speed_hz = cfg->i2c_frequency_hz, + .scl_wait_us = 0, + }; + esp_err_t err = i2c_master_bus_add_device(s_i2c_bus, &device_config, + &s_i2c_device); + if (err != ESP_OK) { + i2c_del_master_bus(s_i2c_bus); + s_i2c_bus = NULL; + return err; + } + + ESP_LOGI(TAG, "I2C port %d, SCL GPIO%d, SDA GPIO%d, address 0x%02x", + (int)cfg->i2c_port, (int)cfg->scl_gpio, (int)cfg->sda_gpio, + cfg->i2c_address); + + ESP_RETURN_ON_ERROR(wake(cfg->use_internal_areg), TAG, "initial wake"); + ESP_RETURN_ON_ERROR(select_page0(), TAG, "select register page 0"); + ESP_RETURN_ON_ERROR(raw_write(PCMD3180_REG_SW_RESET, 0x01U), TAG, + "software reset"); + vTaskDelay(pdMS_TO_TICKS(3)); + ESP_RETURN_ON_ERROR(wake(cfg->use_internal_areg), TAG, "wake after reset"); + ESP_RETURN_ON_ERROR(select_page0(), TAG, "select register page 0"); + ESP_RETURN_ON_ERROR(configure_tdm(), TAG, "configure TDM interface"); + ESP_RETURN_ON_ERROR(configure_clocks(), TAG, "configure clocks"); + ESP_RETURN_ON_ERROR(configure_channels(), TAG, "configure PDM channels"); + + /* Same all-channel PDM/PLL power-up value used by the STM32 reference. */ + ESP_RETURN_ON_ERROR(raw_write(PCMD3180_REG_PWR_CFG, 0x7CU), TAG, + "power up PDM and PLL"); + vTaskDelay(pdMS_TO_TICKS(2)); + return log_status(); +} diff --git a/src/pcmd3180/pcmd3180.h b/src/pcmd3180/pcmd3180.h new file mode 100644 index 0000000..2bca947 --- /dev/null +++ b/src/pcmd3180/pcmd3180.h @@ -0,0 +1,50 @@ +#pragma once + +#include +#include + +#include "driver/i2c_types.h" +#include "esp_err.h" +#include "hal/gpio_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define PCMD3180_I2C_ADDRESS_DEFAULT 0x4CU +#define PCMD3180_I2C_SCL_DEFAULT GPIO_NUM_27 +#define PCMD3180_I2C_SDA_DEFAULT GPIO_NUM_28 + +typedef struct { + i2c_port_num_t i2c_port; + gpio_num_t scl_gpio; + gpio_num_t sda_gpio; + uint32_t i2c_frequency_hz; + uint8_t i2c_address; + bool use_internal_areg; +} pcmd3180_config_t; + +#define PCMD3180_CONFIG_DEFAULT() { \ + .i2c_port = I2C_NUM_0, \ + .scl_gpio = PCMD3180_I2C_SCL_DEFAULT, \ + .sda_gpio = PCMD3180_I2C_SDA_DEFAULT, \ + .i2c_frequency_hz = 100000U, \ + .i2c_address = PCMD3180_I2C_ADDRESS_DEFAULT, \ + .use_internal_areg = true, \ +} + +/** + * @brief Initialize PCMD3180 as an 8-slot, 16-bit TDM slave. + * + * ESP32-P4 must already be driving the TDM BCLK and FSYNC clocks before this + * function is called. Passing NULL selects PCMD3180_CONFIG_DEFAULT(). + */ +esp_err_t pcmd3180_init(const pcmd3180_config_t *config); + +/** Read or write one page-0 register after initialization. */ +esp_err_t pcmd3180_write_reg(uint8_t reg, uint8_t value); +esp_err_t pcmd3180_read_reg(uint8_t reg, uint8_t *value); + +#ifdef __cplusplus +} +#endif diff --git a/src/usb_driver/tusb_config.h b/src/usb_driver/tusb_config.h new file mode 100644 index 0000000..ca74415 --- /dev/null +++ b/src/usb_driver/tusb_config.h @@ -0,0 +1,47 @@ +#pragma once + +#include "sdkconfig.h" +#include "usb_audio_descriptors.h" + +/* ESP32-P4 USB 2.0 High-Speed DWC controller is TinyUSB root hub port 1. */ +#define CFG_TUSB_RHPORT1_MODE (OPT_MODE_DEVICE | OPT_MODE_HIGH_SPEED) +#define CFG_TUSB_OS OPT_OS_FREERTOS +#define CFG_TUD_ENABLED 1 +#define CFG_TUD_MAX_SPEED OPT_MODE_HIGH_SPEED +#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUD_ENDPOINT0_SIZE 64 + +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 1 +#define CFG_TUD_HID_EP_BUFSIZE 8 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 +#define CFG_TUD_AUDIO 2 + +#define CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP 1 +#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN USB_AUDIO_DESC_LEN +#define CFG_TUD_AUDIO_FUNC_1_N_FORMATS 1 +#define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE USB_AUDIO_MAX_SAMPLE_RATE_HZ +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX USB_AUDIO_MIC_CHANNELS +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX USB_AUDIO_SPK_CHANNELS +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX USB_AUDIO_BYTES_PER_SAMPLE +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX USB_AUDIO_SAMPLE_RESOLUTION +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX USB_AUDIO_BYTES_PER_SAMPLE +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX USB_AUDIO_SAMPLE_RESOLUTION +#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 +#define CFG_TUD_AUDIO_ENABLE_EP_OUT 1 +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX USB_AUDIO_MIC_EP_SIZE +#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX USB_AUDIO_SPK_EP_SIZE +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ 2048 +#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ (32U * USB_AUDIO_SPK_EP_SIZE) +#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 1 +#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 + +#define CFG_TUD_AUDIO_FUNC_2_DESC_LEN USB_AUDIO2_DESC_LEN +#define CFG_TUD_AUDIO_FUNC_2_EP_IN_SZ_MAX USB_AUDIO_MIC2_EP_SIZE +#define CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX 0 +#define CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ 512 +#define CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ 0 +#define CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ 64 diff --git a/src/usb_driver/usb_audio.c b/src/usb_driver/usb_audio.c new file mode 100644 index 0000000..4573d9e --- /dev/null +++ b/src/usb_driver/usb_audio.c @@ -0,0 +1,522 @@ +#include "usb_audio.h" + +#include +#include +#include +#include +#include "audio_backend.h" +#include "esp_check.h" +#include "esp_log.h" +#include "esp_private/usb_phy.h" +#include "freertos/FreeRTOS.h" +#include "freertos/stream_buffer.h" +#include "freertos/task.h" +#include "tusb.h" +#include "usb_audio_config.h" +#include "usb_audio_descriptors.h" +#include "usb_hid_keyboard.h" + +static const char *TAG = "usb_audio"; +#define USB_AUDIO_FUNCTION_COUNT 2U +#define USB_AUDIO_PRIMARY_FUNC 0U +#define USB_AUDIO_SECONDARY_FUNC 1U + +static usb_phy_handle_t s_phy; +#if !USB_AUDIO_MIC_TEST_TONE_ENABLED +static StreamBufferHandle_t s_mic_stream[USB_AUDIO_FUNCTION_COUNT]; +#endif +static StreamBufferHandle_t s_spk_stream; +static volatile bool s_mic_active[USB_AUDIO_FUNCTION_COUNT]; +static volatile bool s_spk_active; +static volatile uint32_t s_spk_usb_packets; +static volatile uint32_t s_spk_usb_bytes; +static volatile uint32_t s_spk_fifo_bytes; +static volatile uint32_t s_spk_empty_callbacks; +static volatile uint32_t s_spk_dropped_bytes; +static volatile uint32_t s_spk_i2s_bytes; +static volatile uint32_t s_spk_underflows; +static volatile uint32_t s_spk_i2s_errors; +static int16_t s_volume[USB_AUDIO_SPK_CHANNELS + 1U]; +static uint8_t s_mute[USB_AUDIO_SPK_CHANNELS + 1U]; + +#if USB_AUDIO_MIC_TEST_TONE_ENABLED +#define MIC_TEST_TONE_LUT_SIZE 24U + +/* One 1-kHz period at 24 kHz, amplitude 16000 (about -6.2 dBFS). */ +static const int16_t s_mic_test_tone_lut[MIC_TEST_TONE_LUT_SIZE] = { + 0, 4141, 8000, 11314, 13856, 15455, + 16000, 15455, 13856, 11314, 8000, 4141, + 0, -4141, -8000, -11314, -13856, -15455, + -16000, -15455, -13856, -11314, -8000, -4141, +}; + +static uint32_t s_mic_test_tone_phase[USB_AUDIO_FUNCTION_COUNT]; + +_Static_assert(USB_AUDIO_MIC_SAMPLE_RATE_HZ == + USB_AUDIO_MIC_TEST_TONE_HZ * MIC_TEST_TONE_LUT_SIZE, + "1-kHz test-tone LUT requires a 24-kHz capture rate"); + +static void fill_mic_test_tone(uint8_t func_id, int16_t *samples, + size_t frame_count, size_t channel_count) +{ + for (size_t frame = 0; frame < frame_count; ++frame) { + const int16_t positive = + s_mic_test_tone_lut[s_mic_test_tone_phase[func_id]]; + for (size_t channel = 0; channel < channel_count; ++channel) { + /* Human CH1/3/5/7 are positive; CH2/4/6/8 are 180 degrees inverted. */ + samples[frame * channel_count + channel] = + (channel & 1U) == 0U ? positive : (int16_t)-positive; + } + s_mic_test_tone_phase[func_id] = + (s_mic_test_tone_phase[func_id] + 1U) % MIC_TEST_TONE_LUT_SIZE; + } +} +#endif + +#if !USB_AUDIO_MIC_TEST_TONE_ENABLED +static size_t mic_usb_payload_bytes(uint8_t func_id) +{ + return func_id == USB_AUDIO_PRIMARY_FUNC ? USB_AUDIO_MIC_MS_BYTES + : USB_AUDIO_MIC2_MS_BYTES; +} +#endif + +static void fill_mic_fifo(uint8_t func_id) +{ + if (func_id >= USB_AUDIO_FUNCTION_COUNT) { + return; + } +#if USB_AUDIO_MIC_TEST_TONE_ENABLED + int16_t packet[USB_AUDIO_MIC_MS_BYTES / sizeof(int16_t)]; + const size_t channel_count = func_id == USB_AUDIO_PRIMARY_FUNC + ? USB_AUDIO_MIC_CHANNELS + : USB_AUDIO_MIC2_CHANNELS; + const size_t wanted = func_id == USB_AUDIO_PRIMARY_FUNC + ? USB_AUDIO_MIC_MS_BYTES + : USB_AUDIO_MIC2_MS_BYTES; + fill_mic_test_tone(func_id, packet, + USB_AUDIO_MIC_SAMPLE_RATE_HZ / 1000U, + channel_count); + (void)tud_audio_n_write(func_id, packet, (uint16_t)wanted); +#else + uint8_t packet[USB_AUDIO_MIC_MS_BYTES]; + const size_t wanted = mic_usb_payload_bytes(func_id); + size_t got = xStreamBufferReceive(s_mic_stream[func_id], packet, wanted, 0); + if (got < wanted) { + memset(packet + got, 0, wanted - got); + } + (void)tud_audio_n_write(func_id, packet, (uint16_t)wanted); +#endif +} + +static void tinyusb_task(void *arg) +{ + (void)arg; + while (true) { + tud_task(); + } +} + +#if !USB_AUDIO_MIC_TEST_TONE_ENABLED +static void capture_task(void *arg) +{ + (void)arg; + int16_t block[USB_AUDIO_MIC_MS_BYTES / sizeof(int16_t)]; + int16_t mono_ch1[USB_AUDIO_MIC2_MS_BYTES / sizeof(int16_t)]; + while (true) { + size_t bytes_read = 0; + esp_err_t err = audio_backend_read(block, sizeof(block), &bytes_read, 20); + if (err != ESP_OK || bytes_read == 0) { + continue; + } + if (s_mic_active[USB_AUDIO_PRIMARY_FUNC]) { + /* Dropping newest data on overflow bounds latency at 20 ms. */ + (void)xStreamBufferSend(s_mic_stream[USB_AUDIO_PRIMARY_FUNC], + block, bytes_read, 0); + } + if (s_mic_active[USB_AUDIO_SECONDARY_FUNC]) { + const size_t frames = bytes_read / USB_AUDIO_MIC_FRAME_BYTES; + for (size_t frame = 0; frame < frames; ++frame) { + /* USB channel 1 is the first sample in every TDM frame. */ + mono_ch1[frame] = block[frame * USB_AUDIO_MIC_CHANNELS]; + } + (void)xStreamBufferSend(s_mic_stream[USB_AUDIO_SECONDARY_FUNC], + mono_ch1, + frames * USB_AUDIO_MIC2_FRAME_BYTES, 0); + } + } +} +#endif + +static void playback_task(void *arg) +{ + (void)arg; + uint8_t block[USB_AUDIO_SPK_MS_BYTES]; + TickType_t last_report = xTaskGetTickCount(); + while (true) { + if (!s_spk_active) { + vTaskDelay(pdMS_TO_TICKS(5)); + last_report = xTaskGetTickCount(); + continue; + } + + size_t got = xStreamBufferReceive(s_spk_stream, block, sizeof(block), + pdMS_TO_TICKS(2)); + if (got < sizeof(block)) { + /* Output silence when the USB playback stream has insufficient data. */ + memset(block + got, 0, sizeof(block) - got); + ++s_spk_underflows; + } + size_t written = 0; + esp_err_t err = audio_backend_write(block, sizeof(block), &written, 20); + if (err != ESP_OK || written != sizeof(block)) { + ++s_spk_i2s_errors; + } + s_spk_i2s_bytes += written; + + TickType_t now = xTaskGetTickCount(); + if ((now - last_report) >= pdMS_TO_TICKS(1000)) { + ESP_LOGI(TAG, "playback USB packets=%" PRIu32 + " reported_bytes=%" PRIu32 + " FIFO_bytes=%" PRIu32 + " empty_cb=%" PRIu32 " dropped=%" PRIu32 + ", I2S bytes=%" PRIu32 " underflows=%" PRIu32 + " errors=%" PRIu32, + s_spk_usb_packets, s_spk_usb_bytes, + s_spk_fifo_bytes, s_spk_empty_callbacks, + s_spk_dropped_bytes, s_spk_i2s_bytes, + s_spk_underflows, s_spk_i2s_errors); + last_report = now; + } + } +} + +void tud_mount_cb(void) +{ + ESP_LOGI(TAG, "USB mounted"); +} + +void tud_umount_cb(void) +{ + memset((void *)s_mic_active, 0, sizeof(s_mic_active)); + s_spk_active = false; + ESP_LOGI(TAG, "USB unmounted"); +} + +void tud_suspend_cb(bool remote_wakeup_en) +{ + (void)remote_wakeup_en; + memset((void *)s_mic_active, 0, sizeof(s_mic_active)); + s_spk_active = false; +} + +void tud_resume_cb(void) +{ + ESP_LOGI(TAG, "USB resumed"); +} + +void tud_audio_feedback_params_cb(uint8_t func_id, uint8_t alt_itf, + audio_feedback_params_t *params) +{ + if (func_id != USB_AUDIO_PRIMARY_FUNC) { + params->method = AUDIO_FEEDBACK_METHOD_DISABLED; + return; + } + (void)alt_itf; + params->method = AUDIO_FEEDBACK_METHOD_FIFO_COUNT; + params->sample_freq = USB_AUDIO_SPK_SAMPLE_RATE_HZ; +} + +bool tud_audio_set_itf_cb(uint8_t rhport, + const tusb_control_request_t *request) +{ + (void)rhport; + uint8_t itf = tu_u16_low(tu_le16toh(request->wIndex)); + uint8_t alt = tu_u16_low(tu_le16toh(request->wValue)); + if (itf == ITF_NUM_AUDIO_STREAMING_SPK) { + xStreamBufferReset(s_spk_stream); + s_spk_active = alt != 0; + if (s_spk_active) { + s_spk_usb_packets = 0; + s_spk_usb_bytes = 0; + s_spk_fifo_bytes = 0; + s_spk_empty_callbacks = 0; + s_spk_dropped_bytes = 0; + s_spk_i2s_bytes = 0; + s_spk_underflows = 0; + s_spk_i2s_errors = 0; + } + ESP_LOGI(TAG, "speaker stream %s", s_spk_active ? "started" : "stopped"); + } else if (itf == ITF_NUM_AUDIO_STREAMING_MIC || + itf == ITF_NUM_AUDIO2_STREAMING_MIC) { + const uint8_t func_id = itf == ITF_NUM_AUDIO_STREAMING_MIC + ? USB_AUDIO_PRIMARY_FUNC + : USB_AUDIO_SECONDARY_FUNC; +#if USB_AUDIO_MIC_TEST_TONE_ENABLED + s_mic_test_tone_phase[func_id] = 0; +#else + xStreamBufferReset(s_mic_stream[func_id]); +#endif + s_mic_active[func_id] = alt != 0; + if (s_mic_active[func_id]) { + fill_mic_fifo(func_id); + } + ESP_LOGI(TAG, "microphone %u stream %s", (unsigned)(func_id + 1U), + s_mic_active[func_id] ? "started" : "stopped"); + } + return true; +} + +bool tud_audio_set_itf_close_ep_cb(uint8_t rhport, + const tusb_control_request_t *request) +{ + return tud_audio_set_itf_cb(rhport, request); +} + +bool tud_audio_rx_done_isr(uint8_t rhport, uint16_t n_bytes_received, + uint8_t func_id, uint8_t ep_out, + uint8_t cur_alt_setting) +{ + (void)rhport; + (void)ep_out; + (void)cur_alt_setting; + ++s_spk_usb_packets; + s_spk_usb_bytes += n_bytes_received; + + uint8_t packet[USB_AUDIO_SPK_EP_SIZE]; + size_t callback_fifo_bytes = 0; + while (tud_audio_n_available(func_id) != 0U) { + uint16_t count = tud_audio_n_read(func_id, packet, sizeof(packet)); + if (count == 0U) { + break; + } + size_t queued = xStreamBufferSend(s_spk_stream, packet, count, 0); + callback_fifo_bytes += count; + s_spk_fifo_bytes += count; + s_spk_dropped_bytes += count - queued; + } + if (callback_fifo_bytes == 0U) { + ++s_spk_empty_callbacks; + } + return true; +} + +bool tud_audio_tx_done_isr(uint8_t rhport, uint16_t n_bytes_sent, + uint8_t func_id, uint8_t ep_in, + uint8_t cur_alt_setting) +{ + (void)rhport; + (void)n_bytes_sent; + (void)ep_in; + (void)cur_alt_setting; + if (func_id < USB_AUDIO_FUNCTION_COUNT && s_mic_active[func_id]) { + fill_mic_fifo(func_id); + } + return true; +} + +static bool clock_get_request(uint8_t rhport, + const audio_control_request_t *request, + uint32_t sample_rate_hz) +{ + if (request->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ) { + if (request->bRequest == AUDIO_CS_REQ_CUR) { + audio_control_cur_4_t current = { + .bCur = (int32_t)tu_htole32(sample_rate_hz), + }; + return tud_audio_buffer_and_schedule_control_xfer( + rhport, (const tusb_control_request_t *)request, + ¤t, sizeof(current)); + } + if (request->bRequest == AUDIO_CS_REQ_RANGE) { + audio_control_range_4_n_t(1) range = { + .wNumSubRanges = tu_htole16(1), + .subrange[0] = { + .bMin = sample_rate_hz, + .bMax = sample_rate_hz, + .bRes = 0, + }, + }; + return tud_audio_buffer_and_schedule_control_xfer( + rhport, (const tusb_control_request_t *)request, + &range, sizeof(range)); + } + } else if (request->bControlSelector == AUDIO_CS_CTRL_CLK_VALID && + request->bRequest == AUDIO_CS_REQ_CUR) { + audio_control_cur_1_t valid = {.bCur = 1}; + return tud_audio_buffer_and_schedule_control_xfer( + rhport, (const tusb_control_request_t *)request, + &valid, sizeof(valid)); + } + return false; +} + +static bool feature_get_request(uint8_t rhport, + const audio_control_request_t *request) +{ + uint8_t channel = request->bChannelNumber; + if (channel > USB_AUDIO_SPK_CHANNELS) { + return false; + } + if (request->bControlSelector == AUDIO_FU_CTRL_MUTE && + request->bRequest == AUDIO_CS_REQ_CUR) { + audio_control_cur_1_t current = {.bCur = s_mute[channel]}; + return tud_audio_buffer_and_schedule_control_xfer( + rhport, (const tusb_control_request_t *)request, + ¤t, sizeof(current)); + } + if (request->bControlSelector == AUDIO_FU_CTRL_VOLUME) { + if (request->bRequest == AUDIO_CS_REQ_CUR) { + audio_control_cur_2_t current = { + .bCur = (int16_t)tu_htole16((uint16_t)s_volume[channel]), + }; + return tud_audio_buffer_and_schedule_control_xfer( + rhport, (const tusb_control_request_t *)request, + ¤t, sizeof(current)); + } + if (request->bRequest == AUDIO_CS_REQ_RANGE) { + audio_control_range_2_n_t(1) range = { + .wNumSubRanges = tu_htole16(1), + .subrange[0] = { + .bMin = (int16_t)tu_htole16((uint16_t)(-50 * 256)), + .bMax = 0, + .bRes = (int16_t)tu_htole16(256), + }, + }; + return tud_audio_buffer_and_schedule_control_xfer( + rhport, (const tusb_control_request_t *)request, + &range, sizeof(range)); + } + } + return false; +} + +bool tud_audio_get_req_entity_cb(uint8_t rhport, + const tusb_control_request_t *request) +{ + const audio_control_request_t *audio_req = + (const audio_control_request_t *)request; + if (audio_req->bEntityID == UAC2_ENTITY_SPK_CLOCK) { + return clock_get_request(rhport, audio_req, + USB_AUDIO_SPK_SAMPLE_RATE_HZ); + } + if (audio_req->bEntityID == UAC2_ENTITY_MIC_CLOCK) { + return clock_get_request(rhport, audio_req, + USB_AUDIO_MIC_SAMPLE_RATE_HZ); + } + if (audio_req->bEntityID == UAC2_ENTITY_MIC2_CLOCK) { + return clock_get_request(rhport, audio_req, + USB_AUDIO_MIC_SAMPLE_RATE_HZ); + } + if (audio_req->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT) { + return feature_get_request(rhport, audio_req); + } + return false; +} + +bool tud_audio_set_req_entity_cb(uint8_t rhport, + const tusb_control_request_t *request, + uint8_t *buffer) +{ + (void)rhport; + const audio_control_request_t *audio_req = + (const audio_control_request_t *)request; + if ((audio_req->bEntityID == UAC2_ENTITY_SPK_CLOCK || + audio_req->bEntityID == UAC2_ENTITY_MIC_CLOCK || + audio_req->bEntityID == UAC2_ENTITY_MIC2_CLOCK) && + audio_req->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ && + audio_req->bRequest == AUDIO_CS_REQ_CUR && + request->wLength == sizeof(audio_control_cur_4_t)) { + uint32_t rate = tu_le32toh( + (uint32_t)((audio_control_cur_4_t *)buffer)->bCur); + uint32_t expected = audio_req->bEntityID == UAC2_ENTITY_SPK_CLOCK + ? USB_AUDIO_SPK_SAMPLE_RATE_HZ + : USB_AUDIO_MIC_SAMPLE_RATE_HZ; + return rate == expected; + } + if (audio_req->bEntityID != UAC2_ENTITY_SPK_FEATURE_UNIT || + audio_req->bChannelNumber > USB_AUDIO_SPK_CHANNELS || + audio_req->bRequest != AUDIO_CS_REQ_CUR) { + return false; + } + + uint8_t channel = audio_req->bChannelNumber; + if (audio_req->bControlSelector == AUDIO_FU_CTRL_MUTE && + request->wLength == sizeof(audio_control_cur_1_t)) { + s_mute[channel] = ((audio_control_cur_1_t *)buffer)->bCur; + if (channel == 0U) { + audio_backend_set_mute(s_mute[channel] != 0U); + } + return true; + } + if (audio_req->bControlSelector == AUDIO_FU_CTRL_VOLUME && + request->wLength == sizeof(audio_control_cur_2_t)) { + s_volume[channel] = (int16_t)tu_le16toh( + (uint16_t)((audio_control_cur_2_t *)buffer)->bCur); + if (channel == 0U) { + audio_backend_set_volume(s_volume[channel]); + } + return true; + } + return false; +} + +esp_err_t usb_audio_init(void) +{ +#if !USB_AUDIO_MIC_TEST_TONE_ENABLED + for (uint8_t func_id = 0; func_id < USB_AUDIO_FUNCTION_COUNT; ++func_id) { + const size_t ring_bytes = func_id == USB_AUDIO_PRIMARY_FUNC + ? USB_AUDIO_MIC_RING_BYTES + : USB_AUDIO_MIC2_RING_BYTES; + const size_t frame_bytes = func_id == USB_AUDIO_PRIMARY_FUNC + ? USB_AUDIO_MIC_FRAME_BYTES + : USB_AUDIO_MIC2_FRAME_BYTES; + s_mic_stream[func_id] = xStreamBufferCreate( + ring_bytes, frame_bytes); + ESP_RETURN_ON_FALSE(s_mic_stream[func_id] != NULL, ESP_ERR_NO_MEM, + TAG, "allocate capture stream buffer %u", + (unsigned)(func_id + 1U)); + } +#endif + s_spk_stream = xStreamBufferCreate(USB_AUDIO_SPK_RING_BYTES, + USB_AUDIO_SPK_FRAME_BYTES); + ESP_RETURN_ON_FALSE(s_spk_stream != NULL, ESP_ERR_NO_MEM, + TAG, "allocate playback stream buffer"); + usb_phy_config_t phy_config = { + .controller = USB_PHY_CTRL_OTG, + .otg_mode = USB_OTG_MODE_DEVICE, + .target = USB_PHY_TARGET_UTMI, + .otg_speed = USB_PHY_SPEED_HIGH, + }; + ESP_RETURN_ON_ERROR(usb_new_phy(&phy_config, &s_phy), TAG, + "initialize USB HS UTMI PHY"); + ESP_RETURN_ON_FALSE(tusb_init(), ESP_FAIL, TAG, + "initialize TinyUSB device stack"); + + BaseType_t ok = xTaskCreatePinnedToCore(tinyusb_task, "tinyusb", 4096, + NULL, CONFIG_USB_AUDIO_USB_TASK_PRIORITY, NULL, tskNO_AFFINITY); + ESP_RETURN_ON_FALSE(ok == pdPASS, ESP_FAIL, TAG, "create TinyUSB task"); + ESP_RETURN_ON_ERROR(usb_hid_keyboard_init(), TAG, + "initialize HID keyboard"); +#if !USB_AUDIO_MIC_TEST_TONE_ENABLED + ok = xTaskCreatePinnedToCore(capture_task, "audio_capture", 4096, + NULL, CONFIG_USB_AUDIO_CAPTURE_TASK_PRIORITY, NULL, tskNO_AFFINITY); + ESP_RETURN_ON_FALSE(ok == pdPASS, ESP_FAIL, TAG, "create capture task"); +#endif + ok = xTaskCreatePinnedToCore(playback_task, "audio_playback", 4096, + NULL, CONFIG_USB_AUDIO_PLAYBACK_TASK_PRIORITY, NULL, tskNO_AFFINITY); + ESP_RETURN_ON_FALSE(ok == pdPASS, ESP_FAIL, TAG, "create playback task"); + + ESP_LOGI(TAG, + "USB composite ready: capture 1=8ch, capture 2=mono CH1, %u Hz; " + "playback 2ch %u Hz/16-bit; HID keyboard", + USB_AUDIO_MIC_SAMPLE_RATE_HZ, USB_AUDIO_SPK_SAMPLE_RATE_HZ); +#if USB_AUDIO_MIC_TEST_TONE_ENABLED + ESP_LOGI(TAG, + "capture source: 1-kHz LUT tone, CH1/3/5/7 positive, " + "CH2/4/6/8 inverted; TDM RX bypassed"); +#else + ESP_LOGI(TAG, "capture source: I2S0 TDM RX"); +#endif + return ESP_OK; +} diff --git a/src/usb_driver/usb_audio.h b/src/usb_driver/usb_audio.h new file mode 100644 index 0000000..b685574 --- /dev/null +++ b/src/usb_driver/usb_audio.h @@ -0,0 +1,14 @@ +#pragma once + +#include "esp_err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +esp_err_t usb_audio_init(void); + +#ifdef __cplusplus +} +#endif + diff --git a/src/usb_driver/usb_audio_config.h b/src/usb_driver/usb_audio_config.h new file mode 100644 index 0000000..fb9b45e --- /dev/null +++ b/src/usb_driver/usb_audio_config.h @@ -0,0 +1,52 @@ +#pragma once + +#include +#include + +#define USB_AUDIO_MIC_SAMPLE_RATE_HZ 24000U +#define USB_AUDIO_SPK_SAMPLE_RATE_HZ 24000U +#define USB_AUDIO_MAX_SAMPLE_RATE_HZ USB_AUDIO_SPK_SAMPLE_RATE_HZ +#define USB_AUDIO_BYTES_PER_SAMPLE 2U +#define USB_AUDIO_SAMPLE_RESOLUTION 16U +#define USB_AUDIO_MIC_CHANNELS 8U +#define USB_AUDIO_MIC2_CHANNELS 1U +#define USB_AUDIO_SPK_CHANNELS 2U + +/* Diagnostic capture source: 1 uses the internal LUT tone, 0 uses TDM RX. */ +#define USB_AUDIO_MIC_TEST_TONE_ENABLED 0 +#define USB_AUDIO_MIC_TEST_TONE_HZ 1000U + +#define USB_AUDIO_MIC_FRAME_BYTES \ + (USB_AUDIO_MIC_CHANNELS * USB_AUDIO_BYTES_PER_SAMPLE) +#define USB_AUDIO_SPK_FRAME_BYTES \ + (USB_AUDIO_SPK_CHANNELS * USB_AUDIO_BYTES_PER_SAMPLE) +#define USB_AUDIO_MIC2_FRAME_BYTES \ + (USB_AUDIO_MIC2_CHANNELS * USB_AUDIO_BYTES_PER_SAMPLE) + +/* One millisecond of interleaved PCM data. */ +#define USB_AUDIO_MIC_MS_BYTES \ + ((USB_AUDIO_MIC_SAMPLE_RATE_HZ / 1000U) * USB_AUDIO_MIC_FRAME_BYTES) +#define USB_AUDIO_SPK_MS_BYTES \ + ((USB_AUDIO_SPK_SAMPLE_RATE_HZ / 1000U) * USB_AUDIO_SPK_FRAME_BYTES) +#define USB_AUDIO_MIC2_MS_BYTES \ + ((USB_AUDIO_MIC_SAMPLE_RATE_HZ / 1000U) * USB_AUDIO_MIC2_FRAME_BYTES) + +/* One millisecond of PCM plus one frame for clock correction. */ +#define USB_AUDIO_MIC_EP_SIZE \ + ((((USB_AUDIO_MIC_SAMPLE_RATE_HZ + 999U) / 1000U) + 1U) * USB_AUDIO_MIC_FRAME_BYTES) +#define USB_AUDIO_SPK_EP_SIZE \ + ((((USB_AUDIO_SPK_SAMPLE_RATE_HZ + 999U) / 1000U) + 1U) * USB_AUDIO_SPK_FRAME_BYTES) +#define USB_AUDIO_MIC2_EP_SIZE \ + ((((USB_AUDIO_MIC_SAMPLE_RATE_HZ + 999U) / 1000U) + 1U) * USB_AUDIO_MIC2_FRAME_BYTES) + +#define USB_AUDIO_MIC_RING_BYTES (USB_AUDIO_MIC_MS_BYTES * 20U) +#define USB_AUDIO_SPK_RING_BYTES (USB_AUDIO_SPK_MS_BYTES * 20U) +#define USB_AUDIO_MIC2_RING_BYTES (USB_AUDIO_MIC2_MS_BYTES * 20U) + +_Static_assert(USB_AUDIO_MIC_SAMPLE_RATE_HZ % 1000U == 0U && + USB_AUDIO_SPK_SAMPLE_RATE_HZ % 1000U == 0U, + "Audio tasks require an integer number of samples per ms"); +_Static_assert(USB_AUDIO_MIC_EP_SIZE <= 1023U, + "Microphone stream exceeds the isochronous endpoint limit"); +_Static_assert(USB_AUDIO_MIC2_EP_SIZE <= 1023U, + "Second microphone stream exceeds the endpoint limit"); diff --git a/src/usb_driver/usb_audio_descriptors.h b/src/usb_driver/usb_audio_descriptors.h new file mode 100644 index 0000000..2874658 --- /dev/null +++ b/src/usb_driver/usb_audio_descriptors.h @@ -0,0 +1,145 @@ +#pragma once + +#include "usb_audio_config.h" + +enum { + ITF_NUM_AUDIO_CONTROL = 0, + ITF_NUM_AUDIO_STREAMING_SPK, + ITF_NUM_AUDIO_STREAMING_MIC, + ITF_NUM_AUDIO2_CONTROL, + ITF_NUM_AUDIO2_STREAMING_MIC, + ITF_NUM_HID_KEYBOARD, + ITF_NUM_TOTAL, +}; + +#define UAC2_ENTITY_SPK_INPUT_TERMINAL 0x01 +#define UAC2_ENTITY_SPK_FEATURE_UNIT 0x02 +#define UAC2_ENTITY_SPK_OUTPUT_TERMINAL 0x03 +#define UAC2_ENTITY_SPK_CLOCK 0x04 +#define UAC2_ENTITY_MIC_INPUT_TERMINAL 0x11 +#define UAC2_ENTITY_MIC_OUTPUT_TERMINAL 0x13 +#define UAC2_ENTITY_MIC_CLOCK 0x14 + +#define UAC2_ENTITY_MIC2_INPUT_TERMINAL 0x21 +#define UAC2_ENTITY_MIC2_OUTPUT_TERMINAL 0x23 +#define UAC2_ENTITY_MIC2_CLOCK 0x24 + +#define USB_AUDIO_SPK_FU_LEN \ + (6U + (USB_AUDIO_SPK_CHANNELS + 1U) * 4U) + +#define USB_AUDIO_CS_AC_TOTAL_LEN \ + ((2U * TUD_AUDIO_DESC_CLK_SRC_LEN) + USB_AUDIO_SPK_FU_LEN + \ + (2U * TUD_AUDIO_DESC_INPUT_TERM_LEN) + \ + (2U * TUD_AUDIO_DESC_OUTPUT_TERM_LEN)) + +#define USB_AUDIO_DESC_LEN \ + (TUD_AUDIO_DESC_IAD_LEN + TUD_AUDIO_DESC_STD_AC_LEN + \ + TUD_AUDIO_DESC_CS_AC_LEN + USB_AUDIO_CS_AC_TOTAL_LEN + \ + /* Speaker alt 0 + alt 1 + AS + format + data EP + CS EP + feedback EP */ \ + (2U * TUD_AUDIO_DESC_STD_AS_INT_LEN) + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN + TUD_AUDIO_DESC_STD_AS_ISO_FB_EP_LEN + \ + /* Microphone alt 0 + alt 1 + AS + format + data EP + CS EP */ \ + (2U * TUD_AUDIO_DESC_STD_AS_INT_LEN) + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) + +/* A second, independent mono UAC2 capture function shown as another recording + * device by the host. Its samples are sourced from channel 1 of capture 1. */ +#define USB_AUDIO2_CS_AC_TOTAL_LEN \ + (TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ + TUD_AUDIO_DESC_OUTPUT_TERM_LEN) + +#define USB_AUDIO2_DESC_LEN \ + (TUD_AUDIO_DESC_IAD_LEN + TUD_AUDIO_DESC_STD_AC_LEN + \ + TUD_AUDIO_DESC_CS_AC_LEN + USB_AUDIO2_CS_AC_TOTAL_LEN + \ + (2U * TUD_AUDIO_DESC_STD_AS_INT_LEN) + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) + +#define USB_AUDIO_CTRL_RW \ + U32_TO_U8S_LE((AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS) | \ + (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS)) + +#define USB_AUDIO_SPK_FEATURE_DESCRIPTOR \ + USB_AUDIO_SPK_FU_LEN, TUSB_DESC_CS_INTERFACE, \ + AUDIO_CS_AC_INTERFACE_FEATURE_UNIT, UAC2_ENTITY_SPK_FEATURE_UNIT, \ + UAC2_ENTITY_SPK_INPUT_TERMINAL, \ + /* Master control is implemented; per-channel controls are not exposed. */ \ + USB_AUDIO_CTRL_RW, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00 + +#define USB_AUDIO_UAC2_DESCRIPTOR(_ep_out, _ep_in, _ep_fb, _out_size, _in_size, \ + _out_interval, _in_interval, _fb_interval) \ + TUD_AUDIO_DESC_IAD(ITF_NUM_AUDIO_CONTROL, 3, 0), \ + TUD_AUDIO_DESC_STD_AC(ITF_NUM_AUDIO_CONTROL, 0, 4), \ + TUD_AUDIO_DESC_CS_AC(0x0200, AUDIO_FUNC_HEADSET, USB_AUDIO_CS_AC_TOTAL_LEN, 0), \ + TUD_AUDIO_DESC_CLK_SRC(UAC2_ENTITY_SPK_CLOCK, 3, 7, 0, 0), \ + TUD_AUDIO_DESC_CLK_SRC(UAC2_ENTITY_MIC_CLOCK, 3, 7, 0, 0), \ + TUD_AUDIO_DESC_INPUT_TERM(UAC2_ENTITY_SPK_INPUT_TERMINAL, \ + AUDIO_TERM_TYPE_USB_STREAMING, 0, UAC2_ENTITY_SPK_CLOCK, \ + USB_AUDIO_SPK_CHANNELS, AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, 0, \ + (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), 0), \ + USB_AUDIO_SPK_FEATURE_DESCRIPTOR, \ + TUD_AUDIO_DESC_OUTPUT_TERM(UAC2_ENTITY_SPK_OUTPUT_TERMINAL, \ + AUDIO_TERM_TYPE_OUT_GENERIC_SPEAKER, 0, UAC2_ENTITY_SPK_FEATURE_UNIT, \ + UAC2_ENTITY_SPK_CLOCK, 0, 0), \ + TUD_AUDIO_DESC_INPUT_TERM(UAC2_ENTITY_MIC_INPUT_TERMINAL, \ + AUDIO_TERM_TYPE_IN_GENERIC_MIC, UAC2_ENTITY_MIC_OUTPUT_TERMINAL, \ + UAC2_ENTITY_MIC_CLOCK, USB_AUDIO_MIC_CHANNELS, \ + AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, 0, \ + (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), 0), \ + TUD_AUDIO_DESC_OUTPUT_TERM(UAC2_ENTITY_MIC_OUTPUT_TERMINAL, \ + AUDIO_TERM_TYPE_USB_STREAMING, 0, UAC2_ENTITY_MIC_INPUT_TERMINAL, \ + UAC2_ENTITY_MIC_CLOCK, 0, 0), \ + TUD_AUDIO_DESC_STD_AS_INT(ITF_NUM_AUDIO_STREAMING_SPK, 0, 0, 5), \ + TUD_AUDIO_DESC_STD_AS_INT(ITF_NUM_AUDIO_STREAMING_SPK, 1, 2, 5), \ + TUD_AUDIO_DESC_CS_AS_INT(UAC2_ENTITY_SPK_INPUT_TERMINAL, AUDIO_CTRL_NONE, \ + AUDIO_FORMAT_TYPE_I, AUDIO_DATA_FORMAT_TYPE_I_PCM, \ + USB_AUDIO_SPK_CHANNELS, AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, 0), \ + TUD_AUDIO_DESC_TYPE_I_FORMAT(USB_AUDIO_BYTES_PER_SAMPLE, USB_AUDIO_SAMPLE_RESOLUTION), \ + TUD_AUDIO_DESC_STD_AS_ISO_EP(_ep_out, \ + (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | TUSB_ISO_EP_ATT_DATA), \ + _out_size, _out_interval), \ + TUD_AUDIO_DESC_CS_AS_ISO_EP(AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, \ + AUDIO_CTRL_NONE, AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC, 1), \ + TUD_AUDIO_DESC_STD_AS_ISO_FB_EP(_ep_fb, 4, _fb_interval), \ + TUD_AUDIO_DESC_STD_AS_INT(ITF_NUM_AUDIO_STREAMING_MIC, 0, 0, 6), \ + TUD_AUDIO_DESC_STD_AS_INT(ITF_NUM_AUDIO_STREAMING_MIC, 1, 1, 6), \ + TUD_AUDIO_DESC_CS_AS_INT(UAC2_ENTITY_MIC_OUTPUT_TERMINAL, AUDIO_CTRL_NONE, \ + AUDIO_FORMAT_TYPE_I, AUDIO_DATA_FORMAT_TYPE_I_PCM, \ + USB_AUDIO_MIC_CHANNELS, AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, 0), \ + TUD_AUDIO_DESC_TYPE_I_FORMAT(USB_AUDIO_BYTES_PER_SAMPLE, USB_AUDIO_SAMPLE_RESOLUTION), \ + TUD_AUDIO_DESC_STD_AS_ISO_EP(_ep_in, \ + (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | TUSB_ISO_EP_ATT_DATA), \ + _in_size, _in_interval), \ + TUD_AUDIO_DESC_CS_AS_ISO_EP(AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, \ + AUDIO_CTRL_NONE, AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, 0) + +#define USB_AUDIO2_UAC2_CAPTURE_DESCRIPTOR(_ep_in, _in_size, _in_interval) \ + TUD_AUDIO_DESC_IAD(ITF_NUM_AUDIO2_CONTROL, 2, 7), \ + TUD_AUDIO_DESC_STD_AC(ITF_NUM_AUDIO2_CONTROL, 0, 7), \ + TUD_AUDIO_DESC_CS_AC(0x0200, AUDIO_FUNC_MICROPHONE, \ + USB_AUDIO2_CS_AC_TOTAL_LEN, 0), \ + TUD_AUDIO_DESC_CLK_SRC(UAC2_ENTITY_MIC2_CLOCK, 3, 7, 0, 0), \ + TUD_AUDIO_DESC_INPUT_TERM(UAC2_ENTITY_MIC2_INPUT_TERMINAL, \ + AUDIO_TERM_TYPE_IN_GENERIC_MIC, UAC2_ENTITY_MIC2_OUTPUT_TERMINAL, \ + UAC2_ENTITY_MIC2_CLOCK, USB_AUDIO_MIC2_CHANNELS, \ + AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, 0, \ + (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), 0), \ + TUD_AUDIO_DESC_OUTPUT_TERM(UAC2_ENTITY_MIC2_OUTPUT_TERMINAL, \ + AUDIO_TERM_TYPE_USB_STREAMING, 0, UAC2_ENTITY_MIC2_INPUT_TERMINAL, \ + UAC2_ENTITY_MIC2_CLOCK, 0, 0), \ + TUD_AUDIO_DESC_STD_AS_INT(ITF_NUM_AUDIO2_STREAMING_MIC, 0, 0, 8), \ + TUD_AUDIO_DESC_STD_AS_INT(ITF_NUM_AUDIO2_STREAMING_MIC, 1, 1, 8), \ + TUD_AUDIO_DESC_CS_AS_INT(UAC2_ENTITY_MIC2_OUTPUT_TERMINAL, AUDIO_CTRL_NONE, \ + AUDIO_FORMAT_TYPE_I, AUDIO_DATA_FORMAT_TYPE_I_PCM, \ + USB_AUDIO_MIC2_CHANNELS, AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, 0), \ + TUD_AUDIO_DESC_TYPE_I_FORMAT(USB_AUDIO_BYTES_PER_SAMPLE, \ + USB_AUDIO_SAMPLE_RESOLUTION), \ + TUD_AUDIO_DESC_STD_AS_ISO_EP(_ep_in, \ + (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | \ + TUSB_ISO_EP_ATT_DATA), \ + _in_size, _in_interval), \ + TUD_AUDIO_DESC_CS_AS_ISO_EP(AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, \ + AUDIO_CTRL_NONE, AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, 0) diff --git a/src/usb_driver/usb_descriptors.c b/src/usb_driver/usb_descriptors.c new file mode 100644 index 0000000..a7bf66b --- /dev/null +++ b/src/usb_driver/usb_descriptors.c @@ -0,0 +1,156 @@ +#include +#include "tusb.h" +#include "usb_audio_descriptors.h" + +#define USB_VID 0x303A +#define USB_PID 0x8001 +#define EPNUM_AUDIO_OUT 0x01 +#define EPNUM_AUDIO_FB 0x81 +#define EPNUM_AUDIO_IN 0x82 +#define EPNUM_AUDIO2_IN 0x83 +#define EPNUM_HID_IN 0x84 +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + USB_AUDIO_DESC_LEN + \ + USB_AUDIO2_DESC_LEN + TUD_HID_DESC_LEN) + +static const uint8_t s_hid_report_descriptor[] = { + TUD_HID_REPORT_DESC_KEYBOARD() +}; + +static const tusb_desc_device_t s_device_descriptor = { + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .idVendor = USB_VID, + .idProduct = USB_PID, + .bcdDevice = 0x0101, + .iManufacturer = 1, + .iProduct = 2, + .iSerialNumber = 3, + .bNumConfigurations = 1, +}; + +static const uint8_t s_fs_configuration[] = { + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), + USB_AUDIO_UAC2_DESCRIPTOR(EPNUM_AUDIO_OUT, EPNUM_AUDIO_IN, EPNUM_AUDIO_FB, + USB_AUDIO_SPK_EP_SIZE, + USB_AUDIO_MIC_EP_SIZE, 1, 1, 1), + USB_AUDIO2_UAC2_CAPTURE_DESCRIPTOR(EPNUM_AUDIO2_IN, + USB_AUDIO_MIC2_EP_SIZE, 1), + TUD_HID_DESCRIPTOR(ITF_NUM_HID_KEYBOARD, 9, HID_ITF_PROTOCOL_KEYBOARD, + sizeof(s_hid_report_descriptor), EPNUM_HID_IN, + CFG_TUD_HID_EP_BUFSIZE, 10), +}; + +TU_VERIFY_STATIC(sizeof(s_fs_configuration) == CONFIG_TOTAL_LEN, + "incorrect FS configuration descriptor size"); + +/* + * At High Speed, poll speaker OUT every microframe. Keep capture and the + * explicit feedback endpoint at 1 ms (bInterval 4). This matches TinyUSB's + * HS asynchronous-speaker scheduling and prevents the host OUT pipe from + * remaining idle after alt setting 1 is selected. + */ +static const uint8_t s_hs_configuration[] = { + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), + USB_AUDIO_UAC2_DESCRIPTOR(EPNUM_AUDIO_OUT, EPNUM_AUDIO_IN, EPNUM_AUDIO_FB, + USB_AUDIO_SPK_EP_SIZE, + USB_AUDIO_MIC_EP_SIZE, 1, 4, 4), + USB_AUDIO2_UAC2_CAPTURE_DESCRIPTOR(EPNUM_AUDIO2_IN, + USB_AUDIO_MIC2_EP_SIZE, 4), + TUD_HID_DESCRIPTOR(ITF_NUM_HID_KEYBOARD, 9, HID_ITF_PROTOCOL_KEYBOARD, + sizeof(s_hid_report_descriptor), EPNUM_HID_IN, + CFG_TUD_HID_EP_BUFSIZE, 7), +}; + +TU_VERIFY_STATIC(sizeof(s_hs_configuration) == CONFIG_TOTAL_LEN, + "incorrect HS configuration descriptor size"); + +static const tusb_desc_device_qualifier_t s_device_qualifier = { + .bLength = sizeof(tusb_desc_device_qualifier_t), + .bDescriptorType = TUSB_DESC_DEVICE_QUALIFIER, + .bcdUSB = 0x0200, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bNumConfigurations = 1, + .bReserved = 0, +}; + +static uint8_t s_other_speed_configuration[CONFIG_TOTAL_LEN]; + +uint8_t const *tud_descriptor_device_cb(void) +{ + return (const uint8_t *)&s_device_descriptor; +} + +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +{ + (void)index; + return tud_speed_get() == TUSB_SPEED_HIGH ? s_hs_configuration + : s_fs_configuration; +} + +uint8_t const *tud_descriptor_device_qualifier_cb(void) +{ + return (const uint8_t *)&s_device_qualifier; +} + +uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) +{ + (void)index; + const uint8_t *configuration = tud_speed_get() == TUSB_SPEED_HIGH + ? s_fs_configuration + : s_hs_configuration; + memcpy(s_other_speed_configuration, configuration, CONFIG_TOTAL_LEN); + s_other_speed_configuration[1] = TUSB_DESC_OTHER_SPEED_CONFIG; + return s_other_speed_configuration; +} + +uint8_t const *tud_hid_descriptor_report_cb(uint8_t instance) +{ + (void)instance; + return s_hid_report_descriptor; +} + +static const char *const s_strings[] = { + (const char[]){0x09, 0x04}, + "Espressif", + "ESP32-P4 Audio + Keyboard", + "ESP32P4-UAC2-001", + "USB Audio", + "Stereo Playback", + "8 Channel Capture", + "USB Audio Capture 2", + "Mono Capture (CH1)", + "USB HID Keyboard", +}; +static uint16_t s_string_descriptor[32]; + +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t count; + if (index == 0) { + memcpy(&s_string_descriptor[1], s_strings[0], 2); + count = 1; + } else { + if (index >= TU_ARRAY_SIZE(s_strings)) { + return NULL; + } + count = strlen(s_strings[index]); + if (count > TU_ARRAY_SIZE(s_string_descriptor) - 1U) { + count = TU_ARRAY_SIZE(s_string_descriptor) - 1U; + } + for (size_t i = 0; i < count; ++i) { + s_string_descriptor[i + 1U] = (uint8_t)s_strings[index][i]; + } + } + s_string_descriptor[0] = (uint16_t)((TUSB_DESC_STRING << 8) | + (2U * count + 2U)); + return s_string_descriptor; +} diff --git a/src/usb_driver/usb_hid_keyboard.c b/src/usb_driver/usb_hid_keyboard.c new file mode 100644 index 0000000..6ff7b70 --- /dev/null +++ b/src/usb_driver/usb_hid_keyboard.c @@ -0,0 +1,151 @@ +#include "usb_hid_keyboard.h" + +#include +#include +#include +#include "esp_check.h" +#include "esp_log.h" +#include "freertos/FreeRTOS.h" +#include "freertos/queue.h" +#include "freertos/task.h" +#include "tusb.h" + +#define HID_QUEUE_LENGTH 8U +#define HID_TASK_STACK_SIZE 3072U +#define HID_READY_TIMEOUT_MS 2000U +#define HID_READY_POLL_MS 2U + +static const char *TAG = "usb_keyboard"; +static QueueHandle_t s_action_queue; +static TaskHandle_t s_hid_task; + +static const char *action_name(usb_hid_keyboard_action_t action) +{ + switch (action) { + case USB_HID_KEYBOARD_CTRL_C: + return "Ctrl+C"; + case USB_HID_KEYBOARD_CTRL_V: + return "Ctrl+V"; + case USB_HID_KEYBOARD_A: + return "a"; + default: + return "unknown"; + } +} + +static bool wait_until_ready(uint32_t timeout_ms) +{ + const TickType_t timeout = pdMS_TO_TICKS(timeout_ms); + const TickType_t started = xTaskGetTickCount(); + do { + if (tud_hid_ready()) { + return true; + } + vTaskDelay(pdMS_TO_TICKS(HID_READY_POLL_MS)); + } while ((xTaskGetTickCount() - started) < timeout); + return false; +} + +static void keyboard_task(void *arg) +{ + (void)arg; + while (true) { + usb_hid_keyboard_action_t action; + if (xQueueReceive(s_action_queue, &action, portMAX_DELAY) != pdTRUE) { + continue; + } + + uint8_t modifier = 0; + uint8_t keycodes[6] = {0}; + switch (action) { + case USB_HID_KEYBOARD_CTRL_C: + modifier = KEYBOARD_MODIFIER_LEFTCTRL; + keycodes[0] = HID_KEY_C; + break; + case USB_HID_KEYBOARD_CTRL_V: + modifier = KEYBOARD_MODIFIER_LEFTCTRL; + keycodes[0] = HID_KEY_V; + break; + case USB_HID_KEYBOARD_A: + keycodes[0] = HID_KEY_A; + break; + default: + continue; + } + + if (!wait_until_ready(HID_READY_TIMEOUT_MS) || + !tud_hid_keyboard_report(0, modifier, keycodes)) { + ESP_LOGW(TAG, "%s not sent: HID host is not ready", + action_name(action)); + continue; + } + + /* Do not leave a modifier or key held: wait for the press transfer to + * finish, then submit an all-zero keyboard release report. */ + if (!wait_until_ready(HID_READY_TIMEOUT_MS) || + !tud_hid_keyboard_report(0, 0, NULL)) { + ESP_LOGW(TAG, "%s release report was not sent", + action_name(action)); + continue; + } + ESP_LOGI(TAG, "sent %s", action_name(action)); + } +} + +esp_err_t usb_hid_keyboard_init(void) +{ + ESP_RETURN_ON_FALSE(s_action_queue == NULL && s_hid_task == NULL, + ESP_ERR_INVALID_STATE, TAG, + "HID keyboard already initialized"); + s_action_queue = xQueueCreate(HID_QUEUE_LENGTH, + sizeof(usb_hid_keyboard_action_t)); + ESP_RETURN_ON_FALSE(s_action_queue != NULL, ESP_ERR_NO_MEM, TAG, + "allocate HID action queue"); + + BaseType_t created = xTaskCreatePinnedToCore( + keyboard_task, "usb_keyboard", HID_TASK_STACK_SIZE, NULL, + CONFIG_USB_AUDIO_USB_TASK_PRIORITY - 1, &s_hid_task, + tskNO_AFFINITY); + if (created != pdPASS) { + vQueueDelete(s_action_queue); + s_action_queue = NULL; + return ESP_ERR_NO_MEM; + } + return ESP_OK; +} + +esp_err_t usb_hid_keyboard_send(usb_hid_keyboard_action_t action) +{ + ESP_RETURN_ON_FALSE(action >= USB_HID_KEYBOARD_CTRL_C && + action <= USB_HID_KEYBOARD_A, + ESP_ERR_INVALID_ARG, TAG, + "invalid keyboard action"); + ESP_RETURN_ON_FALSE(s_action_queue != NULL, ESP_ERR_INVALID_STATE, TAG, + "HID keyboard is not initialized"); + return xQueueSend(s_action_queue, &action, 0) == pdTRUE + ? ESP_OK + : ESP_ERR_TIMEOUT; +} + +uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, + hid_report_type_t report_type, + uint8_t *buffer, uint16_t reqlen) +{ + (void)instance; + (void)report_id; + (void)report_type; + const uint16_t report_len = reqlen < 8U ? reqlen : 8U; + memset(buffer, 0, report_len); + return report_len; +} + +void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, + hid_report_type_t report_type, + const uint8_t *buffer, uint16_t bufsize) +{ + (void)instance; + (void)report_id; + (void)report_type; + (void)buffer; + (void)bufsize; +} diff --git a/src/usb_driver/usb_hid_keyboard.h b/src/usb_driver/usb_hid_keyboard.h new file mode 100644 index 0000000..d3a3031 --- /dev/null +++ b/src/usb_driver/usb_hid_keyboard.h @@ -0,0 +1,15 @@ +#pragma once + +#include "esp_err.h" + +typedef enum { + USB_HID_KEYBOARD_CTRL_C = 0, + USB_HID_KEYBOARD_CTRL_V, + USB_HID_KEYBOARD_A, +} usb_hid_keyboard_action_t; + +/** Start the HID keyboard report worker. TinyUSB must already be initialized. */ +esp_err_t usb_hid_keyboard_init(void); + +/** Queue one complete key press/release sequence without blocking the caller. */ +esp_err_t usb_hid_keyboard_send(usb_hid_keyboard_action_t action); diff --git a/src/ws2812/README.md b/src/ws2812/README.md new file mode 100644 index 0000000..ced6605 --- /dev/null +++ b/src/ws2812/README.md @@ -0,0 +1,41 @@ +# ESP32-P4 WS2812B 灯环 + +本目录由 `WS2812B_LEDring` 示例迁移而来,保留彩虹、呼吸、跑点、闪烁和关闭模式,并增加 A 组红色测试模式。底层不再使用 STM32 的 TIM3+DMA,而是使用 ESP32-P4 的 RMT TX 硬件单元;ESP32-P4 支持 RMT DMA,因此驱动创建通道时启用 GDMA。灯效计算运行在独立低优先级 FreeRTOS 任务中,不用软件延时翻转 GPIO。 + +## 默认配置 + +- 数据输出:GPIO26。GPIO24/25 留给计划中的 Full-Speed USB D-/D+。 +- 灯珠数量:物理串联 50 颗,颜色线序:GRB。A 组物理编号为 0、1、11、17、23、29、35、41,其余 42 颗组成 B 组逻辑圆环。 +- 刷新率:100 FPS。 +- 全局亮度:20%。 +- 启动效果:B 组绿色呼吸,A 组关闭。 +- 跑点:一组 dot,RGB(220, 15, 231);呼吸:RGB(0, 255, 0);闪烁:RGB(207, 166, 16),10 Hz。 +- 呼吸亮度:`0.08 + 0.92 * (1 - |period/2 - t| / (period/2))^3`,默认周期 6 s,最低亮度系数为 0.08。 +- RMT 分辨率:20 MHz;WS2812B 数据速率:800 kbit/s;帧尾由 RMT 生成 80 us 低电平复位码。 + +运行 `idf.py menuconfig` 后在 `WS2812B LED ring` 菜单中可以修改 GPIO、灯珠数量、刷新率、默认效果、亮度和任务参数,也可以整体关闭该功能。 + +## 接口 + +应用启动时由 `main.c` 调用: + +```c +ESP_ERROR_CHECK(led_ring_start()); +``` + +运行期间可从其他 FreeRTOS 任务切换效果: + +```c +ESP_ERROR_CHECK(led_ring_set_mode(LED_RING_MODE_BREATHING)); +``` + +可选模式为 `LED_RING_MODE_OFF`、`LED_RING_MODE_RAINBOW`、`LED_RING_MODE_BREATHING`、`LED_RING_MODE_DOT`、`LED_RING_MODE_BLINK` 和 `LED_RING_MODE_A_GROUP_TEST`。最后一种模式仅将 A 组显示为红色并关闭 B 组。 + +`ws2812.h` 还提供单像素、整环填充和 RGB 帧发送接口,适合绕过内置灯效直接显示状态。 + +## 接线与供电 + +- GPIO26 接灯环 `DIN`,ESP32-P4 与灯环电源必须共地。 +- WS2812B 通常由 5 V 供电。线较长或 3.3 V 数据电平不稳定时,应增加 3.3 V 到 5 V 的高速逻辑电平转换器,并在数据线靠近灯环处串联合适的小电阻。 +- 50 颗灯珠全白时电流可能达到数安培,必须使用独立且容量足够的 5 V 电源。20% 软件亮度只降低正常显示负载,不能代替供电限流、保险和电源去耦。 +- 若通过 menuconfig 改 GPIO,需同时避开 TDM、I2S、I2C 以及 USB 所使用的引脚。 diff --git a/src/ws2812/led_ring.c b/src/ws2812/led_ring.c new file mode 100644 index 0000000..79a0097 --- /dev/null +++ b/src/ws2812/led_ring.c @@ -0,0 +1,389 @@ +#include "led_ring.h" + +#include +#include +#include +#include "driver/gpio.h" +#include "driver/uart.h" +#include "driver/uart_vfs.h" +#include "esp_check.h" +#include "esp_log.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "sdkconfig.h" +#include "ws2812.h" +#include "usb_hid_keyboard.h" + +#define WS2812_TX_TIMEOUT_MS 100U +#define LED_RING_BUTTON_GPIO GPIO_NUM_35 +#define LED_RING_BUTTON_POLL_MS 10U +#define LED_RING_BUTTON_DEBOUNCE_MS 40U +#define LED_RING_INPUT_TASK_STACK 3072U +#define LED_RING_GROUP_A_COUNT 8U + +_Static_assert(LED_RING_PHYSICAL_LED_COUNT == 50, + "the A/B LED mapping requires CONFIG_WS2812_LED_COUNT=50"); +_Static_assert(LED_RING_EFFECT_LED_COUNT + LED_RING_GROUP_A_COUNT == + LED_RING_PHYSICAL_LED_COUNT, + "logical LED groups must cover the physical chain"); + +static const char *TAG = "led_ring"; +static const uint8_t s_group_a_indices[LED_RING_GROUP_A_COUNT] = { + 0U, 1U, 11U, 17U, 23U, 29U, 35U, 41U, +}; +static TaskHandle_t s_led_task; +static TaskHandle_t s_input_task; +static volatile led_ring_mode_t s_current_mode; +static ws2812_color_t s_frame[LED_RING_PHYSICAL_LED_COUNT]; + +static led_ring_mode_t default_mode(void) +{ +#if CONFIG_WS2812_LED_RING_DEFAULT_OFF + return LED_RING_MODE_OFF; +#elif CONFIG_WS2812_LED_RING_DEFAULT_BREATHING + return LED_RING_MODE_BREATHING; +#elif CONFIG_WS2812_LED_RING_DEFAULT_DOT + return LED_RING_MODE_DOT; +#elif CONFIG_WS2812_LED_RING_DEFAULT_BLINK + return LED_RING_MODE_BLINK; +#else + return LED_RING_MODE_RAINBOW; +#endif +} + +static const char *mode_name(led_ring_mode_t mode) +{ + switch (mode) { + case LED_RING_MODE_OFF: + return "off"; + case LED_RING_MODE_RAINBOW: + return "B rainbow"; + case LED_RING_MODE_BREATHING: + return "B breathing"; + case LED_RING_MODE_DOT: + return "B dot chase"; + case LED_RING_MODE_BLINK: + return "B blink"; + case LED_RING_MODE_A_GROUP_TEST: + return "A red test"; + default: + return "unknown"; + } +} + +static bool is_group_a(size_t physical_index) +{ + switch (physical_index) { + case 0U: + case 1U: + case 11U: + case 17U: + case 23U: + case 29U: + case 35U: + case 41U: + return true; + default: + return false; + } +} + +static void apply_effect_mode(led_ring_mode_t mode) +{ + const led_ring_control_t control = { + .command = LED_RING_CMD_SET_MODE, + .mode = mode, + }; + led_ring_control(&control); +} + +static uint8_t configured_brightness(void) +{ + return (uint8_t)((CONFIG_WS2812_LED_RING_BRIGHTNESS * 255U + 50U) / + 100U); +} + +static void build_physical_frame(led_ring_mode_t mode) +{ + memset(s_frame, 0, sizeof(s_frame)); + + if (mode == LED_RING_MODE_A_GROUP_TEST) { + for (size_t index = 0; index < LED_RING_GROUP_A_COUNT; ++index) { + s_frame[s_group_a_indices[index]].r = 255U; + } + return; + } + + led_ring_control(NULL); + size_t logical_index = 0U; + for (size_t physical_index = 0U; + physical_index < LED_RING_PHYSICAL_LED_COUNT; ++physical_index) { + if (is_group_a(physical_index)) { + continue; + } + s_frame[physical_index] = (ws2812_color_t) { + .r = led_ring_rgb[logical_index].r, + .g = led_ring_rgb[logical_index].g, + .b = led_ring_rgb[logical_index].b, + }; + ++logical_index; + } +} + +static void led_effect_task(void *arg) +{ + (void)arg; + TickType_t last_wake = xTaskGetTickCount(); + const TickType_t frame_period = + pdMS_TO_TICKS(LED_RING_FRAME_PERIOD_MS) > 0 + ? pdMS_TO_TICKS(LED_RING_FRAME_PERIOD_MS) + : 1; + const uint8_t brightness = configured_brightness(); + led_ring_mode_t mode = default_mode(); + + s_current_mode = mode; + apply_effect_mode(mode); + while (true) { + uint32_t requested_mode; + if (xTaskNotifyWait(0, UINT32_MAX, &requested_mode, 0) == pdTRUE && + requested_mode <= LED_RING_MODE_A_GROUP_TEST) { + mode = (led_ring_mode_t)requested_mode; + if (mode != LED_RING_MODE_A_GROUP_TEST) { + apply_effect_mode(mode); + } + s_current_mode = mode; + } + + build_physical_frame(mode); + esp_err_t err = ws2812_show(s_frame, LED_RING_PHYSICAL_LED_COUNT, + brightness, WS2812_TX_TIMEOUT_MS); + if (err != ESP_OK) { + ESP_LOGE(TAG, "RMT frame failed: %s", esp_err_to_name(err)); + } + xTaskDelayUntil(&last_wake, frame_period); + } +} + +static void print_console_help(void) +{ + ESP_LOGI(TAG, "LED commands: 1/r=rainbow, 2/p=breathing, 3/d=dot"); + ESP_LOGI(TAG, "LED commands: 4/b=blink, 5/a=A-group red test, 0/o/c=off, ?/h=help"); + ESP_LOGI(TAG, "Keyboard tests: 6=Ctrl+C, 7=Ctrl+V, 8=character a"); +} + +static void send_keyboard_test(usb_hid_keyboard_action_t action, + const char *name) +{ + esp_err_t err = usb_hid_keyboard_send(action); + if (err == ESP_OK) { + ESP_LOGI(TAG, "keyboard test queued: %s", name); + } else { + ESP_LOGE(TAG, "keyboard test %s failed: %s", name, + esp_err_to_name(err)); + } +} + +static void set_mode_from_input(led_ring_mode_t mode, const char *source) +{ + esp_err_t err = led_ring_set_mode(mode); + if (err == ESP_OK) { + ESP_LOGI(TAG, "%s selected: %s", source, mode_name(mode)); + } else { + ESP_LOGE(TAG, "%s mode change failed: %s", source, + esp_err_to_name(err)); + } +} + +static void handle_console_command(uint8_t command) +{ + switch (command) { + case '1': + case 'r': + case 'R': + set_mode_from_input(LED_RING_MODE_RAINBOW, "console"); + break; + case '2': + case 'p': + case 'P': + set_mode_from_input(LED_RING_MODE_BREATHING, "console"); + break; + case '3': + case 'd': + case 'D': + set_mode_from_input(LED_RING_MODE_DOT, "console"); + break; + case '4': + case 'b': + case 'B': + set_mode_from_input(LED_RING_MODE_BLINK, "console"); + break; + case '5': + case 'a': + case 'A': + set_mode_from_input(LED_RING_MODE_A_GROUP_TEST, "console"); + break; + case '6': + send_keyboard_test(USB_HID_KEYBOARD_CTRL_C, "Ctrl+C"); + break; + case '7': + send_keyboard_test(USB_HID_KEYBOARD_CTRL_V, "Ctrl+V"); + break; + case '8': + send_keyboard_test(USB_HID_KEYBOARD_A, "a"); + break; + case '0': + case 'o': + case 'O': + case 'c': + case 'C': + set_mode_from_input(LED_RING_MODE_OFF, "console"); + break; + case '?': + case 'h': + case 'H': + print_console_help(); + break; + case '\r': + case '\n': + case ' ': + case '\t': + break; + default: + ESP_LOGW(TAG, "unknown LED command '%c'; send ? for help", command); + break; + } +} + +static led_ring_mode_t next_button_mode(led_ring_mode_t mode) +{ + if (mode >= LED_RING_MODE_RAINBOW && mode < LED_RING_MODE_A_GROUP_TEST) { + return (led_ring_mode_t)(mode + 1); + } + if (mode == LED_RING_MODE_A_GROUP_TEST) { + return LED_RING_MODE_OFF; + } + return LED_RING_MODE_RAINBOW; +} + +static void led_input_task(void *arg) +{ + (void)arg; + int sampled_level = gpio_get_level(LED_RING_BUTTON_GPIO); + int stable_level = sampled_level; + TickType_t level_changed_at = xTaskGetTickCount(); + const TickType_t debounce_ticks = + pdMS_TO_TICKS(LED_RING_BUTTON_DEBOUNCE_MS); + + print_console_help(); + while (true) { + uint8_t command; + while (uart_read_bytes(CONFIG_ESP_CONSOLE_UART_NUM, &command, 1U, 0) == + 1) { + handle_console_command(command); + } + + const TickType_t now = xTaskGetTickCount(); + const int level = gpio_get_level(LED_RING_BUTTON_GPIO); + if (level != sampled_level) { + sampled_level = level; + level_changed_at = now; + } else if (level != stable_level && + now - level_changed_at >= debounce_ticks) { + stable_level = level; + if (stable_level == 0) { + set_mode_from_input(next_button_mode(led_ring_get_mode()), + "GPIO35 button"); + } + } + vTaskDelay(pdMS_TO_TICKS(LED_RING_BUTTON_POLL_MS)); + } +} + +static esp_err_t init_inputs(void) +{ + const gpio_config_t button_config = { + .pin_bit_mask = 1ULL << LED_RING_BUTTON_GPIO, + .mode = GPIO_MODE_INPUT, + .pull_up_en = GPIO_PULLUP_ENABLE, + .pull_down_en = GPIO_PULLDOWN_DISABLE, + .intr_type = GPIO_INTR_DISABLE, + }; + ESP_RETURN_ON_ERROR(gpio_config(&button_config), TAG, + "configure GPIO35 button"); + + if (!uart_is_driver_installed(CONFIG_ESP_CONSOLE_UART_NUM)) { + ESP_RETURN_ON_ERROR( + uart_driver_install(CONFIG_ESP_CONSOLE_UART_NUM, 256, 0, 0, NULL, 0), + TAG, "install console UART driver"); + } + uart_vfs_dev_use_driver(CONFIG_ESP_CONSOLE_UART_NUM); + return ESP_OK; +} + +esp_err_t led_ring_start(void) +{ + ESP_RETURN_ON_FALSE(!s_led_task && !s_input_task, ESP_ERR_INVALID_STATE, + TAG, "LED tasks already started"); + esp_err_t err = ws2812_init(); + ESP_RETURN_ON_ERROR(err, TAG, "initialize RMT WS2812 driver"); + + err = ws2812_fill(0, 0, 0); + if (err == ESP_OK) { + err = ws2812_refresh(WS2812_TX_TIMEOUT_MS); + } + if (err == ESP_OK) { + err = init_inputs(); + } + if (err != ESP_OK) { + (void)ws2812_deinit(); + ESP_LOGE(TAG, "initialize LED ring: %s", esp_err_to_name(err)); + return err; + } + + BaseType_t created = xTaskCreatePinnedToCore( + led_effect_task, "led_ring", CONFIG_WS2812_LED_RING_TASK_STACK_SIZE, + NULL, CONFIG_WS2812_LED_RING_TASK_PRIORITY, &s_led_task, + tskNO_AFFINITY); + if (created != pdPASS) { + s_led_task = NULL; + (void)ws2812_deinit(); + return ESP_ERR_NO_MEM; + } + + created = xTaskCreatePinnedToCore( + led_input_task, "led_input", LED_RING_INPUT_TASK_STACK, NULL, + CONFIG_WS2812_LED_RING_TASK_PRIORITY, &s_input_task, tskNO_AFFINITY); + if (created != pdPASS) { + s_input_task = NULL; + vTaskDelete(s_led_task); + s_led_task = NULL; + (void)ws2812_deinit(); + return ESP_ERR_NO_MEM; + } + + ESP_LOGI(TAG, + "started: 50 physical LEDs (A=8, B=42), %d FPS, brightness %d%%, mode %s", + CONFIG_WS2812_LED_RING_FPS, + CONFIG_WS2812_LED_RING_BRIGHTNESS, mode_name(default_mode())); + return ESP_OK; +} + +esp_err_t led_ring_set_mode(led_ring_mode_t mode) +{ + ESP_RETURN_ON_FALSE(mode >= LED_RING_MODE_OFF && + mode <= LED_RING_MODE_A_GROUP_TEST, + ESP_ERR_INVALID_ARG, TAG, "invalid effect mode"); + ESP_RETURN_ON_FALSE(s_led_task, ESP_ERR_INVALID_STATE, TAG, + "LED task not started"); + if (xTaskNotify(s_led_task, (uint32_t)mode, eSetValueWithOverwrite) != + pdPASS) { + return ESP_FAIL; + } + s_current_mode = mode; + return ESP_OK; +} + +led_ring_mode_t led_ring_get_mode(void) +{ + return s_current_mode; +} diff --git a/src/ws2812/led_ring.h b/src/ws2812/led_ring.h new file mode 100644 index 0000000..1c335c4 --- /dev/null +++ b/src/ws2812/led_ring.h @@ -0,0 +1,21 @@ +#pragma once + +#include "esp_err.h" +#include "led_ring_effects.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** Initialize the RMT driver and start the periodic LED effect task. */ +esp_err_t led_ring_start(void); + +/** Request an effect mode change from any FreeRTOS task. */ +esp_err_t led_ring_set_mode(led_ring_mode_t mode); + +/** Return the mode most recently accepted by led_ring_set_mode(). */ +led_ring_mode_t led_ring_get_mode(void); + +#ifdef __cplusplus +} +#endif diff --git a/src/ws2812/led_ring_effects.c b/src/ws2812/led_ring_effects.c new file mode 100644 index 0000000..c08161d --- /dev/null +++ b/src/ws2812/led_ring_effects.c @@ -0,0 +1,276 @@ +#include "led_ring_effects.h" + +#include +#include + +#define LED_RING_BLINK_CYCLE_S 0.1f + +static const led_ring_rgb_t DOT_COLOR = {220U, 15U, 231U}; +static const led_ring_rgb_t BREATHING_COLOR = {0U, 255U, 0U}; +static const led_ring_rgb_t BLINK_COLOR = {207U, 166U, 16U}; + +typedef struct { + led_ring_mode_t mode; + float time_s; + led_ring_global_params_t global; + led_ring_dot_params_t dots[LED_RING_MAX_DOTS]; +} led_ring_state_t; + +led_ring_rgb_t led_ring_rgb[LED_RING_EFFECT_LED_COUNT]; + +static led_ring_state_t s_state; +static uint8_t s_state_ready; + +static float clamp_float(float value, float minimum, float maximum) +{ + if (value < minimum) { + return minimum; + } + if (value > maximum) { + return maximum; + } + return value; +} + +static float wrap_float(float value, float period) +{ + float wrapped = fmodf(value, period); + return wrapped < 0.0f ? wrapped + period : wrapped; +} + +static uint8_t clamp_rgb_float(float value) +{ + if (value <= 0.0f) { + return 0U; + } + if (value >= 255.0f) { + return 255U; + } + return (uint8_t)(value + 0.5f); +} + +static float sanitize_cycle(float cycle_s) +{ + return cycle_s > 0.001f ? cycle_s : 0.001f; +} + +static led_ring_rgb_t hsv_to_rgb255(float hue, float saturation, float value) +{ + const float h = wrap_float(hue, 1.0f); + const float s = clamp_float(saturation, 0.0f, 1.0f); + const float v = clamp_float(value, 0.0f, 1.0f); + const float scaled = h * 6.0f; + const int sector = (int)floorf(scaled); + const float fraction = scaled - (float)sector; + const float p = v * (1.0f - s); + const float q = v * (1.0f - fraction * s); + const float t = v * (1.0f - (1.0f - fraction) * s); + float red = 0.0f; + float green = 0.0f; + float blue = 0.0f; + + switch (sector % 6) { + case 0: + red = v; + green = t; + blue = p; + break; + case 1: + red = q; + green = v; + blue = p; + break; + case 2: + red = p; + green = v; + blue = t; + break; + case 3: + red = p; + green = q; + blue = v; + break; + case 4: + red = t; + green = p; + blue = v; + break; + default: + red = v; + green = p; + blue = q; + break; + } + + return (led_ring_rgb_t) { + .r = clamp_rgb_float(red * 255.0f), + .g = clamp_rgb_float(green * 255.0f), + .b = clamp_rgb_float(blue * 255.0f), + }; +} + +static led_ring_rgb_t rgb_off(void) +{ + return (led_ring_rgb_t) {0U, 0U, 0U}; +} + +static led_ring_rgb_t scale_rgb(led_ring_rgb_t color, float brightness) +{ + return (led_ring_rgb_t) { + .r = clamp_rgb_float((float)color.r * brightness), + .g = clamp_rgb_float((float)color.g * brightness), + .b = clamp_rgb_float((float)color.b * brightness), + }; +} + +static void reset_state(void) +{ + s_state.mode = LED_RING_MODE_RAINBOW; + s_state.time_s = 0.0f; + s_state.global.color_hue_deg = 30.0f; + s_state.global.cycle_s = 6.0f; + + for (uint8_t index = 0U; index < LED_RING_MAX_DOTS; ++index) { + s_state.dots[index] = (led_ring_dot_params_t) { + .enabled = index == 0U, + .color_hue_deg = 30.0f, + .cycle_s = 3.0f, + .phase_deg = (float)index * 72.0f, + .clockwise = 1U, + .tail_mode = 1U, + }; + } + +} + +static void ensure_state_ready(void) +{ + if (!s_state_ready) { + reset_state(); + s_state_ready = 1U; + } +} + +static led_ring_rgb_t rainbow_chase_pixel(uint16_t index) +{ + float hue = (float)index / (float)LED_RING_EFFECT_LED_COUNT; + hue += s_state.time_s / sanitize_cycle(s_state.global.cycle_s); + return hsv_to_rgb255(hue, 1.0f, 0.85f); +} + +static led_ring_rgb_t breathing_pixel(void) +{ + const float cycle_s = sanitize_cycle(s_state.global.cycle_s); + const float t = wrap_float(s_state.time_s, cycle_s); + const float half_cycle_s = cycle_s / 2.0f; + const float brightness = 0.04f + 0.96f * + powf(1.0f - fabsf(half_cycle_s - t) / half_cycle_s, 3.0f); + return scale_rgb(BREATHING_COLOR, brightness); +} + +static led_ring_rgb_t blink_pixel(void) +{ + const float phase = wrap_float(s_state.time_s, LED_RING_BLINK_CYCLE_S) / + LED_RING_BLINK_CYCLE_S; + return phase >= 0.5f ? rgb_off() : BLINK_COLOR; +} + +static led_ring_rgb_t dot_pixel(uint16_t led_index) +{ + const led_ring_dot_params_t *dot = &s_state.dots[0]; + if (!dot->enabled) { + return rgb_off(); + } + + float trail_length = (float)LED_RING_EFFECT_LED_COUNT * 0.72f; + if (trail_length > 13.0f) { + trail_length = 13.0f; + } + + const float direction = dot->clockwise ? 1.0f : -1.0f; + float head = dot->phase_deg / 360.0f + + direction * s_state.time_s / sanitize_cycle(dot->cycle_s); + head = wrap_float(head * (float)LED_RING_EFFECT_LED_COUNT, + (float)LED_RING_EFFECT_LED_COUNT); + + float distance; + if (dot->tail_mode) { + distance = dot->clockwise + ? wrap_float(head - (float)led_index, + (float)LED_RING_EFFECT_LED_COUNT) + : wrap_float((float)led_index - head, + (float)LED_RING_EFFECT_LED_COUNT); + } else { + distance = fabsf((float)led_index - head); + if (distance > (float)LED_RING_EFFECT_LED_COUNT - distance) { + distance = (float)LED_RING_EFFECT_LED_COUNT - distance; + } + } + + if (distance <= trail_length) { + const float brightness = + powf(1.0f - distance / trail_length, 2.3f); + return scale_rgb(DOT_COLOR, brightness); + } + return rgb_off(); +} + +static void render_frame(void) +{ + for (uint16_t index = 0U; index < LED_RING_EFFECT_LED_COUNT; ++index) { + switch (s_state.mode) { + case LED_RING_MODE_RAINBOW: + led_ring_rgb[index] = rainbow_chase_pixel(index); + break; + case LED_RING_MODE_BREATHING: + led_ring_rgb[index] = breathing_pixel(); + break; + case LED_RING_MODE_DOT: + led_ring_rgb[index] = dot_pixel(index); + break; + case LED_RING_MODE_BLINK: + led_ring_rgb[index] = blink_pixel(); + break; + case LED_RING_MODE_OFF: + case LED_RING_MODE_A_GROUP_TEST: + default: + led_ring_rgb[index] = rgb_off(); + break; + } + } +} + +void led_ring_control(const led_ring_control_t *control) +{ + ensure_state_ready(); + + if (!control || control->command == LED_RING_CMD_REFRESH) { + render_frame(); + s_state.time_s += LED_RING_FRAME_DT_S; + return; + } + + switch (control->command) { + case LED_RING_CMD_SET_MODE: + s_state.mode = control->mode; + s_state.time_s = 0.0f; + break; + case LED_RING_CMD_SET_GLOBAL_PARAMS: + s_state.global.color_hue_deg = control->global.color_hue_deg; + s_state.global.cycle_s = sanitize_cycle(control->global.cycle_s); + break; + case LED_RING_CMD_SET_DOT_PARAMS: + if (control->dot_index < LED_RING_MAX_DOTS) { + s_state.dots[control->dot_index] = control->dot; + s_state.dots[control->dot_index].cycle_s = + sanitize_cycle(control->dot.cycle_s); + } + break; + case LED_RING_CMD_RESET_STATE: + reset_state(); + break; + case LED_RING_CMD_REFRESH: + default: + break; + } +} diff --git a/src/ws2812/led_ring_effects.h b/src/ws2812/led_ring_effects.h new file mode 100644 index 0000000..c443dfb --- /dev/null +++ b/src/ws2812/led_ring_effects.h @@ -0,0 +1,69 @@ +#pragma once + +#include +#include "sdkconfig.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define LED_RING_PHYSICAL_LED_COUNT CONFIG_WS2812_LED_COUNT +#define LED_RING_EFFECT_LED_COUNT 42U +#define LED_RING_FPS CONFIG_WS2812_LED_RING_FPS +#define LED_RING_MAX_DOTS 5U +#define LED_RING_FRAME_DT_S (1.0f / (float)LED_RING_FPS) +#define LED_RING_FRAME_PERIOD_MS ((1000U + LED_RING_FPS - 1U) / LED_RING_FPS) + +typedef struct { + uint8_t r; + uint8_t g; + uint8_t b; +} led_ring_rgb_t; + +typedef enum { + LED_RING_MODE_OFF = 0, + LED_RING_MODE_RAINBOW, + LED_RING_MODE_BREATHING, + LED_RING_MODE_DOT, + LED_RING_MODE_BLINK, + LED_RING_MODE_A_GROUP_TEST, +} led_ring_mode_t; + +typedef enum { + LED_RING_CMD_REFRESH = 0, + LED_RING_CMD_SET_MODE, + LED_RING_CMD_SET_GLOBAL_PARAMS, + LED_RING_CMD_SET_DOT_PARAMS, + LED_RING_CMD_RESET_STATE, +} led_ring_command_t; + +typedef struct { + float color_hue_deg; + float cycle_s; +} led_ring_global_params_t; + +typedef struct { + uint8_t enabled; + float color_hue_deg; + float cycle_s; + float phase_deg; + uint8_t clockwise; + uint8_t tail_mode; +} led_ring_dot_params_t; + +typedef struct { + led_ring_command_t command; + led_ring_mode_t mode; + led_ring_global_params_t global; + uint8_t dot_index; + led_ring_dot_params_t dot; +} led_ring_control_t; + +extern led_ring_rgb_t led_ring_rgb[LED_RING_EFFECT_LED_COUNT]; + +/** Update effect state or render the next frame when control is NULL. */ +void led_ring_control(const led_ring_control_t *control); + +#ifdef __cplusplus +} +#endif diff --git a/src/ws2812/ws2812.c b/src/ws2812/ws2812.c new file mode 100644 index 0000000..00d9929 --- /dev/null +++ b/src/ws2812/ws2812.c @@ -0,0 +1,333 @@ +#include "ws2812.h" + +#include +#include +#include +#include +#include "driver/rmt_encoder.h" +#include "driver/rmt_tx.h" +#include "esp_check.h" +#include "esp_log.h" +#include "freertos/FreeRTOS.h" +#include "freertos/semphr.h" +#include "sdkconfig.h" +#include "soc/soc_caps.h" + +#define WS2812_RMT_RESOLUTION_HZ 20000000U +#define WS2812_RESET_US 80U +#define WS2812_BYTES_PER_PIXEL 3U + +typedef struct { + rmt_encoder_t base; + rmt_encoder_t *bytes_encoder; + rmt_encoder_t *copy_encoder; + rmt_symbol_word_t reset_code; + int state; +} ws2812_rmt_encoder_t; + +static const char *TAG = "ws2812"; +static rmt_channel_handle_t s_tx_channel; +static rmt_encoder_handle_t s_encoder; +static SemaphoreHandle_t s_lock; +static uint8_t s_grb[CONFIG_WS2812_LED_COUNT * WS2812_BYTES_PER_PIXEL]; + +RMT_ENCODER_FUNC_ATTR +static size_t encode_ws2812(rmt_encoder_t *encoder, + rmt_channel_handle_t channel, + const void *primary_data, size_t data_size, + rmt_encode_state_t *ret_state) +{ + ws2812_rmt_encoder_t *ws_encoder = + __containerof(encoder, ws2812_rmt_encoder_t, base); + rmt_encode_state_t session_state = RMT_ENCODING_RESET; + rmt_encode_state_t state = RMT_ENCODING_RESET; + size_t encoded_symbols = 0; + + switch (ws_encoder->state) { + case 0: + encoded_symbols += ws_encoder->bytes_encoder->encode( + ws_encoder->bytes_encoder, channel, primary_data, data_size, + &session_state); + if (session_state & RMT_ENCODING_COMPLETE) { + ws_encoder->state = 1; + } + if (session_state & RMT_ENCODING_MEM_FULL) { + state |= RMT_ENCODING_MEM_FULL; + goto out; + } + __attribute__((fallthrough)); + case 1: + encoded_symbols += ws_encoder->copy_encoder->encode( + ws_encoder->copy_encoder, channel, &ws_encoder->reset_code, + sizeof(ws_encoder->reset_code), &session_state); + if (session_state & RMT_ENCODING_COMPLETE) { + ws_encoder->state = 0; + state |= RMT_ENCODING_COMPLETE; + } + if (session_state & RMT_ENCODING_MEM_FULL) { + state |= RMT_ENCODING_MEM_FULL; + } + break; + default: + ws_encoder->state = 0; + state |= RMT_ENCODING_COMPLETE; + break; + } + +out: + *ret_state = state; + return encoded_symbols; +} + +static esp_err_t reset_ws2812_encoder(rmt_encoder_t *encoder) +{ + ws2812_rmt_encoder_t *ws_encoder = + __containerof(encoder, ws2812_rmt_encoder_t, base); + ESP_RETURN_ON_ERROR(rmt_encoder_reset(ws_encoder->bytes_encoder), TAG, + "reset bytes encoder"); + ESP_RETURN_ON_ERROR(rmt_encoder_reset(ws_encoder->copy_encoder), TAG, + "reset copy encoder"); + ws_encoder->state = 0; + return ESP_OK; +} + +static esp_err_t delete_ws2812_encoder(rmt_encoder_t *encoder) +{ + ws2812_rmt_encoder_t *ws_encoder = + __containerof(encoder, ws2812_rmt_encoder_t, base); + esp_err_t first_error = ESP_OK; + esp_err_t err = rmt_del_encoder(ws_encoder->bytes_encoder); + if (err != ESP_OK) { + first_error = err; + } + err = rmt_del_encoder(ws_encoder->copy_encoder); + if (first_error == ESP_OK && err != ESP_OK) { + first_error = err; + } + free(ws_encoder); + return first_error; +} + +static esp_err_t new_ws2812_encoder(rmt_encoder_handle_t *ret_encoder) +{ + ESP_RETURN_ON_FALSE(ret_encoder, ESP_ERR_INVALID_ARG, TAG, + "encoder output is NULL"); + + ws2812_rmt_encoder_t *ws_encoder = + rmt_alloc_encoder_mem(sizeof(ws2812_rmt_encoder_t)); + ESP_RETURN_ON_FALSE(ws_encoder, ESP_ERR_NO_MEM, TAG, + "allocate RMT encoder"); + memset(ws_encoder, 0, sizeof(*ws_encoder)); + + ws_encoder->base.encode = encode_ws2812; + ws_encoder->base.reset = reset_ws2812_encoder; + ws_encoder->base.del = delete_ws2812_encoder; + + /* 20 MHz gives 50 ns ticks and preserves the original 0.35/0.70 us timing. */ + const rmt_bytes_encoder_config_t bytes_config = { + .bit0 = { + .level0 = 1, + .duration0 = 7, + .level1 = 0, + .duration1 = 18, + }, + .bit1 = { + .level0 = 1, + .duration0 = 14, + .level1 = 0, + .duration1 = 11, + }, + .flags.msb_first = 1, + }; + esp_err_t err = rmt_new_bytes_encoder(&bytes_config, + &ws_encoder->bytes_encoder); + if (err != ESP_OK) { + free(ws_encoder); + return err; + } + + const rmt_copy_encoder_config_t copy_config = {}; + err = rmt_new_copy_encoder(©_config, &ws_encoder->copy_encoder); + if (err != ESP_OK) { + rmt_del_encoder(ws_encoder->bytes_encoder); + free(ws_encoder); + return err; + } + + const uint32_t half_reset_ticks = + (WS2812_RMT_RESOLUTION_HZ / 1000000U) * WS2812_RESET_US / 2U; + ws_encoder->reset_code = (rmt_symbol_word_t) { + .level0 = 0, + .duration0 = half_reset_ticks, + .level1 = 0, + .duration1 = half_reset_ticks, + }; + *ret_encoder = &ws_encoder->base; + return ESP_OK; +} + +static uint8_t scale_channel(uint8_t value, uint8_t brightness) +{ + return (uint8_t)(((uint16_t)value * brightness + 127U) / 255U); +} + +static esp_err_t transmit_locked(uint32_t timeout_ms) +{ + const rmt_transmit_config_t tx_config = { + .loop_count = 0, + .flags.eot_level = 0, + .flags.queue_nonblocking = 0, + }; + ESP_RETURN_ON_ERROR(rmt_transmit(s_tx_channel, s_encoder, s_grb, + sizeof(s_grb), &tx_config), + TAG, "queue RMT frame"); + return rmt_tx_wait_all_done(s_tx_channel, (int)timeout_ms); +} + +esp_err_t ws2812_init(void) +{ + ESP_RETURN_ON_FALSE(!s_tx_channel, ESP_ERR_INVALID_STATE, TAG, + "driver already initialized"); + + s_lock = xSemaphoreCreateMutex(); + ESP_RETURN_ON_FALSE(s_lock, ESP_ERR_NO_MEM, TAG, "create framebuffer lock"); + + const rmt_tx_channel_config_t channel_config = { + .gpio_num = CONFIG_WS2812_GPIO, + .clk_src = RMT_CLK_SRC_DEFAULT, + .resolution_hz = WS2812_RMT_RESOLUTION_HZ, + .mem_block_symbols = 64, + .trans_queue_depth = 2, + .intr_priority = 0, + .flags.invert_out = 0, +#if SOC_RMT_SUPPORT_DMA + .flags.with_dma = 1, +#else + .flags.with_dma = 0, +#endif + .flags.allow_pd = 0, + .flags.init_level = 0, + }; + + esp_err_t err = rmt_new_tx_channel(&channel_config, &s_tx_channel); + if (err != ESP_OK) { + vSemaphoreDelete(s_lock); + s_lock = NULL; + return err; + } + + err = new_ws2812_encoder(&s_encoder); + if (err != ESP_OK) { + rmt_del_channel(s_tx_channel); + s_tx_channel = NULL; + vSemaphoreDelete(s_lock); + s_lock = NULL; + return err; + } + + err = rmt_enable(s_tx_channel); + if (err != ESP_OK) { + rmt_del_encoder(s_encoder); + s_encoder = NULL; + rmt_del_channel(s_tx_channel); + s_tx_channel = NULL; + vSemaphoreDelete(s_lock); + s_lock = NULL; + return err; + } + + memset(s_grb, 0, sizeof(s_grb)); + ESP_LOGI(TAG, "RMT TX ready: GPIO%d, %u pixels, 20 MHz, DMA=%d", + CONFIG_WS2812_GPIO, CONFIG_WS2812_LED_COUNT, + (int)SOC_RMT_SUPPORT_DMA); + return ESP_OK; +} + +esp_err_t ws2812_deinit(void) +{ + ESP_RETURN_ON_FALSE(s_tx_channel && s_encoder && s_lock, + ESP_ERR_INVALID_STATE, TAG, "driver not initialized"); + ESP_RETURN_ON_FALSE(xSemaphoreTake(s_lock, portMAX_DELAY) == pdTRUE, + ESP_FAIL, TAG, "lock framebuffer"); + + esp_err_t err = rmt_disable(s_tx_channel); + esp_err_t encoder_err = rmt_del_encoder(s_encoder); + esp_err_t channel_err = rmt_del_channel(s_tx_channel); + s_encoder = NULL; + s_tx_channel = NULL; + xSemaphoreGive(s_lock); + vSemaphoreDelete(s_lock); + s_lock = NULL; + + if (err != ESP_OK) { + return err; + } + return encoder_err != ESP_OK ? encoder_err : channel_err; +} + +size_t ws2812_pixel_count(void) +{ + return CONFIG_WS2812_LED_COUNT; +} + +esp_err_t ws2812_set_pixel(size_t index, uint8_t red, uint8_t green, + uint8_t blue) +{ + ESP_RETURN_ON_FALSE(s_lock, ESP_ERR_INVALID_STATE, TAG, + "driver not initialized"); + ESP_RETURN_ON_FALSE(index < CONFIG_WS2812_LED_COUNT, + ESP_ERR_INVALID_ARG, TAG, "pixel index out of range"); + ESP_RETURN_ON_FALSE(xSemaphoreTake(s_lock, portMAX_DELAY) == pdTRUE, + ESP_FAIL, TAG, "lock framebuffer"); + s_grb[index * 3U + 0U] = green; + s_grb[index * 3U + 1U] = red; + s_grb[index * 3U + 2U] = blue; + xSemaphoreGive(s_lock); + return ESP_OK; +} + +esp_err_t ws2812_fill(uint8_t red, uint8_t green, uint8_t blue) +{ + ESP_RETURN_ON_FALSE(s_lock, ESP_ERR_INVALID_STATE, TAG, + "driver not initialized"); + ESP_RETURN_ON_FALSE(xSemaphoreTake(s_lock, portMAX_DELAY) == pdTRUE, + ESP_FAIL, TAG, "lock framebuffer"); + for (size_t index = 0; index < CONFIG_WS2812_LED_COUNT; ++index) { + s_grb[index * 3U + 0U] = green; + s_grb[index * 3U + 1U] = red; + s_grb[index * 3U + 2U] = blue; + } + xSemaphoreGive(s_lock); + return ESP_OK; +} + +esp_err_t ws2812_refresh(uint32_t timeout_ms) +{ + ESP_RETURN_ON_FALSE(s_lock, ESP_ERR_INVALID_STATE, TAG, + "driver not initialized"); + ESP_RETURN_ON_FALSE(xSemaphoreTake(s_lock, portMAX_DELAY) == pdTRUE, + ESP_FAIL, TAG, "lock framebuffer"); + esp_err_t err = transmit_locked(timeout_ms); + xSemaphoreGive(s_lock); + return err; +} + +esp_err_t ws2812_show(const ws2812_color_t *pixels, size_t count, + uint8_t brightness, uint32_t timeout_ms) +{ + ESP_RETURN_ON_FALSE(pixels && count == CONFIG_WS2812_LED_COUNT, + ESP_ERR_INVALID_ARG, TAG, "invalid RGB frame"); + ESP_RETURN_ON_FALSE(s_lock, ESP_ERR_INVALID_STATE, TAG, + "driver not initialized"); + ESP_RETURN_ON_FALSE(xSemaphoreTake(s_lock, portMAX_DELAY) == pdTRUE, + ESP_FAIL, TAG, "lock framebuffer"); + + for (size_t index = 0; index < count; ++index) { + s_grb[index * 3U + 0U] = scale_channel(pixels[index].g, brightness); + s_grb[index * 3U + 1U] = scale_channel(pixels[index].r, brightness); + s_grb[index * 3U + 2U] = scale_channel(pixels[index].b, brightness); + } + esp_err_t err = transmit_locked(timeout_ms); + xSemaphoreGive(s_lock); + return err; +} diff --git a/src/ws2812/ws2812.h b/src/ws2812/ws2812.h new file mode 100644 index 0000000..62b0434 --- /dev/null +++ b/src/ws2812/ws2812.h @@ -0,0 +1,44 @@ +#pragma once + +#include +#include +#include "esp_err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + uint8_t r; + uint8_t g; + uint8_t b; +} ws2812_color_t; + +/** Initialize the ESP32-P4 RMT TX + GDMA WS2812B driver. */ +esp_err_t ws2812_init(void); + +/** Disable the RMT channel and release driver resources. */ +esp_err_t ws2812_deinit(void); + +/** Return the number of pixels configured by menuconfig. */ +size_t ws2812_pixel_count(void); + +/** Update one pixel in the driver's local framebuffer. */ +esp_err_t ws2812_set_pixel(size_t index, uint8_t red, uint8_t green, uint8_t blue); + +/** Update every pixel in the driver's local framebuffer. */ +esp_err_t ws2812_fill(uint8_t red, uint8_t green, uint8_t blue); + +/** Send the local framebuffer through RMT and wait for completion. */ +esp_err_t ws2812_refresh(uint32_t timeout_ms); + +/** + * Scale and transmit an RGB frame in one locked operation. + * brightness is 0..255 and count must match ws2812_pixel_count(). + */ +esp_err_t ws2812_show(const ws2812_color_t *pixels, size_t count, + uint8_t brightness, uint32_t timeout_ms); + +#ifdef __cplusplus +} +#endif