# フィジカルAI研究室を作る Log#17 | 人が直した mechArm 270 の5回で π0.5 を学び直す

- 記録: LOG417（フィジカルAI研究室）
- 公開: 2026/11/1
- 記事のページ: https://pixelstomotors.com/record/retrain-pi05-with-human-corrections
- サイト: Pixels to Motors（ADAPT DESIGN / 島津 栄一） https://pixelstomotors.com/
- 要約: Physical Intelligenceのπ0.5で動かす実物のmechArm 270を8回動かし、成功した5回はすべて人が根元とひじを直していた。その5回を学習データに作り直し、前のモデルから続けて1,500ステップ学習した。

> AI が読むための記事の全文です（コード・実行ログを含む）。引用するときは上の「記事のページ」の住所を使ってください。

---

Physical Intelligence の π0.5 で動かす実物の小型ロボットアーム mechArm 270 を8回動かすと、ブロックを箱に入れられたのは5回で、その5回はすべて、人が途中で根元（j0）とひじ（j2）を同じように直していました。その直した記録を学習データに作り直し、前のモデルから続けて1,500ステップ学習させたので、人が直す回数が減るかを次の実機で確かめられる段階になりました。

この回でやったことで、次の3つが変わりました。

- 良くなること：AI が毎回同じ向きにずれる所を、人が直した動きとして AI に覚えさせられるようになった。直す回数が減れば、人がアームの横に付いてキーを押す時間が減る（見込み。次の実機で、補正の回数と成功の数で確かめる）
- もたらされること：実機で直す → 学習させる → 実機で確かめる、の一周が1日で回るようになった。10月31日の夕方に実機で直した記録が、翌朝には学習を終えたモデルとして手元にあった
- 時間・手間・費用：学習は Mac で1行打つだけになった。打ってから学習が始まるまで見ていたのは約18分（うち約10分は通信が返らない不具合）で、そのあと約3時間は寝ている間に終わり、借りた GPU も自動で消えた。費用は約313円。前回までは学習のコマンドを1つずつ手で打っていて、その時間は測っていない。同じ日に起動し直すときの準備は、Pod を新しく作ると約2分半、残っている Pod につなぎ直すと16秒だった（どちらも記録の値）

π0.5（パイレイテンゴ）は、米国の [Physical Intelligence](https://www.pi.website/) 社が公開しているロボット用の AI のモデルです。上から見たカメラの画像と6つの関節の角度を受け取り、次の1秒ぶんの関節の角度を返します。人が手で教えた19回の動き（お手本）で学習させ、赤いブロックをつかんで白い箱に入れる作業をさせています。前の回（LOG407）で、失敗しかけたときに人がキーで関節を1°ずつ動かして直せる仕組み（補正）を、実機で使えるようにしました。人が直した動きは、写真と関節の角度の組として記録に残ります。

**8回のうち成功した5回はどれも、モデルが同じ向きに同じくらいずれていて、人が毎回同じ直し方をしていました。** つかむ前に根元を +2〜4° 回し、つかんだあとにひじを 15〜31° 動かして腕を持ち上げる、という直し方です。根元の向きは、直したあとの角度が 12.8〜13.7° にそろい、お手本でブロックをつかんだ瞬間の 13.2° とほぼ同じでした。

ただ、その記録をそのまま学習データにはできませんでした。アームが動いている間の関節の角度が、1.5〜3.6秒ずつ抜けていたためです。アームの常駐プログラムは、関節に指令を送ると、腕が止まるまで約1.6秒ほかの読み取りを受け付けません。抜けたまま使うと、1コマで最大28°も腕が飛ぶ不自然な動きになります。そこで、送った指令の道すじから角度を作り直してから学習させました。やったことの全体は次のとおりです。

| 段階 | やったこと | 結果 |
|---|---|---|
| 実機で8回動かす | 借りた GPU（[Runpod](https://www.runpod.io/) の A40）の上の π0.5 で、mechArm 270 を動かした | 成功5回・失敗3回。成功した5回はすべて、つかむ前に根元を +2〜4°、つかんだあとにひじを 15〜31° 持ち上げる向きに直していた |
| 学習データを作る | 成功した5回の記録を、お手本と同じ形に変えた | アームが動いている間の関節の角度が、ほとんど記録できていなかった。送った指令の道すじから角度を作り直し、止まっている時間を詰めた |
| 学習させる | お手本19回と、直した5回を合わせて、前のモデルから続けて1,500ステップ | 寝ている間に回して、約3時間で終わった。学習のずれ（loss）は 0.0075 から 0.0028 に下がった |
| 道具を直す | 起動の手順を、残っている GPU につなぎ直せるようにし、学習も1行で回せるようにした | 学習のあと、モデルを手元に持ち帰り、借りた GPU を自動で消すところまでできた |

![3回目（成功）を横から撮った動画のコマ。上の段は、ブロックへ下りて爪を閉じるまで。下の段は、人がひじを直して持ち上げたあと、AI が箱の上まで運んで放したところ](https://pixelstomotors.com/media/LOG417_03_run3_side.jpg)

学習し直したモデルで、根元とひじの直しが減るかどうかは、次の実機で確かめます。

GPU を買うか借りるかの判断は、Runpod で実際に借りて学習させた費用をもとに、別のページにまとめています。

[ロボットAIの学習用GPU、買うか借りるか](https://pixelstomotors.com/gpu-buy-or-rent)

この回の作業は、Claude（手順と分析を一緒に組み立てた AI）と進めました。アームの操作と、目で見た判断はこちらで行い、記録の集計は Claude が行っています。プログラムの直しは [Claude Code](https://claude.com/claude-code)（プログラムを書く AI）に依頼箱を通して頼み、[OpenAI の codex](https://github.com/openai/codex)（別の会社のプログラムを書く AI）にコードを読んでもらってから受け取りました。ここから下は、使ったコマンド・出力・依頼文・報告・コードを全量で載せた作業ログです。ログの中の Pod の IP アドレスとポート番号は `<POD_IP>` と `<SSH_PORT>` に置き換えています。鍵（Runpod と Hugging Face のアクセストークン）は、どこにも載せていません。費用の円は 1ドル＝158円 で計算しています。結果の数字は記録から数えた値で、見込みのものは見込みと書いています。


## 作業ログ ― Runpod の A40 で mechArm 270 を8回動かし、直した5回で π0.5 を学び直した

### この回で使う言葉

| 言葉 | 意味 |
|---|---|
| チャンク | AI に1回問い合わせて返ってくる、次の1秒ぶん（10ステップ）の関節の角度。プログラムはチャンクを1つ受け取るたびに止まり、Enter で実行するかを聞く |
| 補正（c） | キーで関節を選び、1回押すごとに決まった角度（刻み）だけ動かすモード。Enter で、その姿勢から AI に戻す |
| j0〜j5 | mechArm 270 の6つの関節。j0 は根元の回転、j1 は肩、j2 はひじ、j3〜j5 は手首 |
| 1秒10コマの記録 | 推論の間、上カメラの写真と関節の角度を1秒に10回ずつ残す仕組み。お手本も同じ1秒10コマなので、そろえれば学習データにできる |
| 常駐プログラム（デーモン） | アームの中の小さな計算機（Raspberry Pi）で動き続け、Mac からの指令を受けて関節を動かすプログラム |
| ステップ（学習） | 学習データから少しずつ（32コマ）取り出して、AI の答えを1回だけ直すこと。ステップ数は、その直しを何回くり返すか |
| 学習率 | 1回のステップで、AI の中身をどれだけ大きく直すかの強さ |
| 正規化の値 | 関節の角度などの数字を、AI が扱いやすい大きさにそろえるための平均とばらつき |
| loss | 学習データの答えと、AI の答えのずれ。小さいほど、お手本に近い |

### Runpod は、GPU を時間で借りられるサービス

[Runpod](https://www.runpod.io/) は、GPU を積んだ計算機（Pod）を、1時間いくらで借りられるサービスです。この研究室では、π0.5 を動かすサーバーと学習を Pod の上で回しています。

| 言葉 | 意味 |
|---|---|
| Pod | Runpod で借りた1台の計算機。消すと中身も消える |
| Terminate | Pod を消すこと。止める（Stop）だけではディスクの料金がかかり続けるので、使い終わったら消す |
| A40 | この回に借りた GPU。メモリ 48GB、1時間 0.59ドル（約93円） |

### Hugging Face は、AI のモデルを置いて配るサービス

[Hugging Face](https://huggingface.co/) は、AI のモデルとデータを置いて、ほかの計算機から取ってこられるようにするサービスです。学習させた π0.5 のモデル（約6.3GB）は、Hugging Face の非公開の置き場所（リポジトリ）に置いてあり、Pod を借りるたびに取ってきます。この回の学習で作った新しいモデルも、`PixelstoMotors/pi05-mecharm-trim-corr-lora-v1` という非公開のリポジトリに置きました。

### LoRA と「続きから学習する」

π0.5 は、もとの大きなモデルの全部を学習し直すのではなく、LoRA（ローラ）という方法で、少しの部品だけを足して学習させています。全部を学習し直すより、必要な GPU のメモリと時間がずっと少なくて済みます。

前の回までのモデルは、お手本19回で4,000ステップ学習させたもの（3999）です。この回は、それを出発点にして、お手本19回と直した5回を合わせたデータで、さらに1,500ステップ学習させました。一から学習し直すより短い時間で、足した分だけを覚えさせるねらいです。


## 実機の1〜3回目（10/31 17:52〜18:08）：成功2回・失敗1回

起動は `lab_start.sh` の1行です。Pod を借りて π0.5 のサーバーを立て、アームを HOME の姿勢に戻し、カメラの位置合わせのあとに実機推論へ進みます。1回終わるごとに「もう1回やりますか?」と聞かれ、y で次の回に進みます。この起動で3回動かしました。

| 回 | 記録の名前 | 結果 | 補正 |
|---|---|---|---|
| 1回目 | pi05_20261031_175527 | 成功 | 推論2のあとに j0 を +4.0°、推論8のあとに j2 を −15.2° |
| 2回目 | pi05_20261031_180023 | 失敗 | j0 を +3.0°、j2 を −6.4° と −2.9° |
| 3回目 | pi05_20261031_180435 | 成功 | j0 を +2.4°、j2 を −25.2° |

最初の推論は 58,074ms かかりました。サーバーが最初の1回だけ、計算の組み立て（コンパイル）をするためです。2回目からは 0.6〜1.7 秒でした。

![1回目（成功）を横から撮った動画のコマ。上の段は、HOME からブロックへ下りて爪を閉じるまで。下の段は、つかんだあと箱の方へ運び、右下で箱の中にブロックが入っている](https://pixelstomotors.com/media/LOG417_01_run1_side.jpg)

2回目は、爪がブロックを挟めず、ブロックの上に乗るような形で押し続けました。人が j2 を直しても、ブロックは爪の間に入らず、最後は爪だけが持ち上がりました。

![2回目（失敗）を横から撮った動画のコマ。上の段は、ブロックへ下りるところ。下の段は、爪がブロックの上で止まり、最後に爪だけが上がってブロックが机に残ったところ](https://pixelstomotors.com/media/LOG417_02_run2_side_fail.jpg)

### 1〜3回目の端末の記録 lab_start_20261031_175204.txt

```text
[LAB   ] 2026-10-31 17:52:04  GPU=NVIDIA A40  episode=run_0001_20261019_194818  log=/Volumes/KIOXIA/r2r2r-data/lab/Log17  

=== 1. Pod を作る
[POD   ] 作った: id kay1uafshbx7dj  GPU=NVIDIA A40  1時間 0.59 ドル  (記録 /Volumes/KIOXIA/r2r2r-data/lab/Log17/pod/lab_pod.json)
    (2 秒)

=== 2. Pod が立ち上がるまで待つ
[POD   ] SSH の IP とポートを API から受け取った (<POD_IP>:<SSH_PORT>)
[POD   ] 入れた: 4a09da64d8fb
NVIDIA A40, 46068 MiB
    (17 秒)

=== 3a. スクリプトを送る
    (31 秒)

=== 3b. huggingface_hub を入れ, 鍵を渡す
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.
[90mHint: The `hf-cli` skill is not installed. Run `hf skills add -g` to teach your AI agents how to use the `hf` CLI.[0m
[32m✓ Logged in[0m
  user: PixelstoMotors
    (10 秒)

=== 3c. モデルを取る (hf download)

Fetching 33 files:   0%|          | 0/33 [00:00<?, ?it/s]
Fetching 33 files:   3%|▎         | 1/33 [00:00<00:03,  8.52it/s]
Fetching 33 files:  27%|██▋       | 9/33 [00:00<00:00, 41.78it/s]
Fetching 33 files:  42%|████▏     | 14/33 [00:02<00:04,  3.96it/s]
Fetching 33 files:  52%|█████▏    | 17/33 [00:04<00:05,  2.69it/s]
Fetching 33 files:  58%|█████▊    | 19/33 [00:05<00:04,  3.21it/s]
Fetching 33 files:  64%|██████▎   | 21/33 [00:05<00:03,  3.59it/s]
Fetching 33 files:  70%|██████▉   | 23/33 [00:05<00:02,  4.48it/s]
Fetching 33 files:  76%|███████▌  | 25/33 [00:06<00:02,  3.91it/s]
Fetching 33 files:  85%|████████▍ | 28/33 [00:06<00:00,  5.31it/s]
Fetching 33 files:  91%|█████████ | 30/33 [00:07<00:00,  4.26it/s]
Fetching 33 files:  94%|█████████▍| 31/33 [00:07<00:00,  4.52it/s]
Fetching 33 files:  97%|█████████▋| 32/33 [00:07<00:00,  3.59it/s][32m✓ Downloaded[0m
  path: /workspace/ckpt/3999

Fetching 33 files: 100%|██████████| 33/33 [00:08<00:00,  3.22it/s]
Fetching 33 files: 100%|██████████| 33/33 [00:08<00:00,  3.97it/s]
6.0G	/workspace/ckpt/3999
    (11 秒)

=== 3d. openpi を取る (215abfb)
215abfb docs(droid): fix config search instruction (#1023)
    (14 秒)

=== 3e. uv sync
downloading uv 0.13.6 x86_64-unknown-linux-gnu
WARN: The following commands are shadowed by other commands in your PATH: uv uvx
Using CPython 3.11.13 interpreter at: /usr/bin/python3.11
Creating virtual environment at: .venv
Resolved 279 packages in 4ms
   Building openpi-client @ file:///workspace/openpi/packages/openpi-client
   Building openpi @ file:///workspace/openpi
   Updating https://github.com/huggingface/lerobot (0cf864870cf29f4738d3ade893e6fd13fbd7cdb5)
Downloading pandas (12.5MiB)
Downloading sympy (6.0MiB)
Downloading numba (3.7MiB)
Downloading pyopengl (3.0MiB)
Downloading imageio-ffmpeg (28.1MiB)
Downloading numpy (17.4MiB)
Downloading lxml (4.7MiB)
Downloading virtualenv (5.8MiB)
Downloading nvidia-curand-cu12 (53.7MiB)
Downloading nvidia-cusolver-cu12 (150.9MiB)
Downloading opencv-python (60.1MiB)
Downloading nvidia-cuda-cupti-cu12 (8.5MiB)
Downloading pyarrow (40.3MiB)
Downloading av (34.7MiB)
Downloading nvidia-cudnn-cu12 (544.5MiB)
Downloading ruff (11.0MiB)
Downloading llvmlite (40.4MiB)
Downloading transformers (10.3MiB)
Downloading pillow (4.4MiB)
Downloading matplotlib (8.2MiB)
Downloading torchvision (7.1MiB)
Downloading diffusers (3.4MiB)
Downloading fonttools (4.7MiB)
Downloading nvidia-cufft-cu12 (190.9MiB)
Downloading nvidia-cusparse-cu12 (206.5MiB)
Downloading cmake (26.6MiB)
Downloading hf-transfer (3.4MiB)
Downloading torch (783.1MiB)
Downloading nvidia-nccl-cu12 (192.0MiB)
Downloading nvidia-cublas-cu12 (374.9MiB)
Downloading polars (34.6MiB)
Downloading nvidia-cusparselt-cu12 (149.5MiB)
Downloading rerun-sdk (68.1MiB)
Downloading triton (148.5MiB)
Downloading jax-cuda12-pjrt (99.8MiB)
Downloading nvidia-nvjitlink-cu12 (18.8MiB)
Downloading scipy (35.9MiB)
Downloading tensorstore (17.5MiB)
Downloading opencv-python-headless (47.7MiB)
Downloading nvidia-cuda-nvcc-cu12 (38.7MiB)
Downloading numcodecs (8.4MiB)
Downloading nvidia-cuda-nvrtc-cu12 (22.6MiB)
Downloading wandb (20.4MiB)
Downloading labmaze (4.7MiB)
Downloading h5py (4.3MiB)
Downloading dm-control (37.5MiB)
Downloading jaxlib (100.2MiB)
Downloading jax-cuda12-plugin (15.9MiB)
Downloading mujoco (4.4MiB)
Downloading hf-xet (4.9MiB)
 Downloaded hf-transfer
 Downloaded diffusers
 Downloaded pyopengl
Downloading debugpy (3.0MiB)
Downloading jax (2.3MiB)
Downloading tokenizers (2.9MiB)
 Downloaded numba
Downloading widgetsnbextension (2.1MiB)
 Downloaded h5py
 Downloaded pillow
 Downloaded mujoco
Downloading networkx (1.9MiB)
Downloading ml-dtypes (2.1MiB)
Downloading pydantic-core (1.9MiB)
 Downloaded labmaze
 Downloaded lxml
Downloading jedi (1.5MiB)
 Downloaded fonttools
Downloading aiohttp (1.6MiB)
 Downloaded hf-xet
Downloading kiwisolver (1.4MiB)
Downloading torchcodec (1.3MiB)
 Downloaded virtualenv
Downloading sentencepiece (1.2MiB)
 Downloaded sympy
 Downloaded jax
 Downloaded widgetsnbextension
Downloading pygments (1.2MiB)
Downloading setuptools (1.1MiB)
Downloading nvidia-cufile-cu12 (1.1MiB)
 Downloaded pydantic-core
 Downloaded debugpy
 Downloaded tokenizers
 Downloaded kiwisolver
 Downloaded ml-dtypes
 Downloaded networkx
 Downloaded aiohttp
 Downloaded torchcodec
Downloading pymunk (1.0MiB)
 Downloaded torchvision
 Downloaded jedi
 Downloaded sentencepiece
 Downloaded nvidia-cufile-cu12
 Downloaded pygments
 Downloaded setuptools
 Downloaded pymunk
 Downloaded matplotlib
 Downloaded nvidia-cuda-cupti-cu12
 Downloaded numcodecs
   Building evdev==1.9.2
 Downloaded transformers
 Downloaded ruff
   Building antlr4-python3-runtime==4.9.3
 Downloaded pandas
 Downloaded jax-cuda12-plugin
 Downloaded numpy
 Downloaded tensorstore
 Downloaded nvidia-nvjitlink-cu12
      Built openpi-client @ file:///workspace/openpi/packages/openpi-client
      Built openpi @ file:///workspace/openpi
 Downloaded nvidia-cuda-nvrtc-cu12
 Downloaded wandb
 Downloaded imageio-ffmpeg
      Built antlr4-python3-runtime==4.9.3
 Downloaded cmake
 Downloaded av
 Downloaded polars
 Downloaded scipy
 Downloaded llvmlite
 Downloaded dm-control
 Downloaded nvidia-cuda-nvcc-cu12
 Downloaded pyarrow
 Downloaded opencv-python-headless
 Downloaded nvidia-curand-cu12
 Downloaded opencv-python
 Downloaded rerun-sdk
      Built evdev==1.9.2
 Downloaded jax-cuda12-pjrt
    Updated https://github.com/huggingface/lerobot (0cf864870cf29f4738d3ade893e6fd13fbd7cdb5)
   Building lerobot @ git+https://github.com/huggingface/lerobot@0cf864870cf29f4738d3ade893e6fd13fbd7cdb5
 Downloaded jaxlib
 Downloaded nvidia-cusparselt-cu12
 Downloaded triton
 Downloaded nvidia-cusolver-cu12
 Downloaded nvidia-cufft-cu12
 Downloaded nvidia-nccl-cu12
      Built lerobot @ git+https://github.com/huggingface/lerobot@0cf864870cf29f4738d3ade893e6fd13fbd7cdb5
 Downloaded nvidia-cusparse-cu12
 Downloaded nvidia-cublas-cu12
 Downloaded nvidia-cudnn-cu12
 Downloaded torch
Prepared 240 packages in 14.92s
Installed 240 packages in 1.40s
 + absl-py==2.3.0
 + aiohappyeyeballs==2.6.1
 + aiohttp==3.12.4
 + aiosignal==1.3.2
 + annotated-types==0.7.0
 + antlr4-python3-runtime==4.9.3
 + asttokens==3.0.0
 + attrs==25.3.0
 + augmax==0.4.1
 + av==17.0.0
 + beartype==0.19.0
 + beautifulsoup4==4.13.4
 + blinker==1.9.0
 + cachetools==5.5.2
 + certifi==2025.4.26
 + cffi==1.17.1
 + cfgv==3.4.0
 + charset-normalizer==3.4.2
 + chex==0.1.90
 + click==8.2.1
 + cloudpickle==3.1.1
 + cmake==4.0.2
 + comm==0.2.2
 + contourpy==1.3.2
 + crc32c==2.7.1
 + cycler==0.12.1
 + datasets==3.6.0
 + debugpy==1.8.14
 + decorator==5.2.1
 + deepdiff==8.5.0
 + diffusers==0.33.1
 + dill==0.3.8
 + distlib==0.3.9
 + dm-control==1.0.14
 + dm-env==1.6
 + dm-tree==0.1.9
 + docker-pycreds==0.4.0
 + docstring-parser==0.16
 + donfig==0.8.1.post1
 + draccus==0.10.0
 + einops==0.8.1
 + equinox==0.12.2
 + etils==1.12.2
 + evdev==1.9.2
 + executing==2.2.0
 + farama-notifications==0.0.4
 + filelock==3.18.0
 + flask==3.1.1
 + flatbuffers==25.2.10
 + flax==0.10.2
 + fonttools==4.58.1
 + frozenlist==1.6.0
 + fsspec==2025.3.0
 + gcsfs==2025.3.0
 + gdown==5.2.0
 + gitdb==4.0.12
 + gitpython==3.1.44
 + glfw==2.9.0
 + google-api-core==2.24.2
 + google-auth==2.40.2
 + google-auth-oauthlib==1.2.2
 + google-cloud-core==2.4.3
 + google-cloud-storage==3.1.0
 + google-crc32c==1.7.1
 + google-resumable-media==2.7.2
 + googleapis-common-protos==1.70.0
 + gym-aloha==0.1.1
 + gymnasium==0.29.1
 + h5py==3.13.0
 + hf-transfer==0.1.9
 + hf-xet==1.1.2
 + huggingface-hub==0.32.3
 + humanize==4.12.3
 + identify==2.6.12
 + idna==3.10
 + imageio==2.37.0
 + imageio-ffmpeg==0.6.0
 + importlib-metadata==8.7.0
 + importlib-resources==6.5.2
 + iniconfig==2.1.0
 + inquirerpy==0.3.4
 + ipykernel==6.29.5
 + ipython==9.2.0
 + ipython-pygments-lexers==1.1.1
 + ipywidgets==8.1.7
 + itsdangerous==2.2.0
 + jax==0.5.3
 + jax-cuda12-pjrt==0.5.3
 + jax-cuda12-plugin==0.5.3
 + jaxlib==0.5.3
 + jaxtyping==0.2.36
 + jedi==0.19.2
 + jinja2==3.1.6
 + jsonlines==4.0.0
 + jupyter-client==8.6.3
 + jupyter-core==5.8.1
 + jupyterlab-widgets==3.0.15
 + kiwisolver==1.4.8
 + labmaze==1.0.6
 + lerobot==0.1.0 (from git+https://github.com/huggingface/lerobot@0cf864870cf29f4738d3ade893e6fd13fbd7cdb5)
 + llvmlite==0.44.0
 + lxml==5.4.0
 + markdown-it-py==3.0.0
 + markupsafe==3.0.2
 + matplotlib==3.10.3
 + matplotlib-inline==0.1.7
 + mdurl==0.1.2
 + mergedeep==1.3.4
 + ml-collections==1.0.0
 + ml-dtypes==0.4.1
 + mpmath==1.3.0
 + msgpack==1.1.0
 + mujoco==2.3.7
 + multidict==6.4.4
 + multiprocess==0.70.16
 + mypy-extensions==1.1.0
 + nest-asyncio==1.6.0
 + networkx==3.5
 + nodeenv==1.9.1
 + numba==0.61.2
 + numcodecs==0.16.1
 + numpy==1.26.4
 + numpydantic==1.6.9
 + nvidia-cublas-cu12==12.6.4.1
 + nvidia-cuda-cupti-cu12==12.6.80
 + nvidia-cuda-nvcc-cu12==12.9.41
 + nvidia-cuda-nvrtc-cu12==12.6.77
 + nvidia-cuda-runtime-cu12==12.6.77
 + nvidia-cudnn-cu12==9.5.1.17
 + nvidia-cufft-cu12==11.3.0.4
 + nvidia-cufile-cu12==1.11.1.6
 + nvidia-curand-cu12==10.3.7.77
 + nvidia-cusolver-cu12==11.7.1.2
 + nvidia-cusparse-cu12==12.5.4.2
 + nvidia-cusparselt-cu12==0.6.3
 + nvidia-ml-py==12.575.51
 + nvidia-nccl-cu12==2.26.2
 + nvidia-nvjitlink-cu12==12.6.85
 + nvidia-nvtx-cu12==12.6.77
 + oauthlib==3.2.2
 + omegaconf==2.3.0
 + opencv-python==4.11.0.86
 + opencv-python-headless==4.11.0.86
 + openpi==0.1.0 (from file:///workspace/openpi)
 + openpi-client==0.1.0 (from file:///workspace/openpi/packages/openpi-client)
 + opt-einsum==3.4.0
 + optax==0.2.4
 + orbax-checkpoint==0.11.13
 + orderly-set==5.4.1
 + packaging==25.0
 + pandas==2.2.3
 + parso==0.8.4
 + pexpect==4.9.0
 + pfzy==0.3.4
 + pillow==11.2.1
 + platformdirs==4.3.8
 + pluggy==1.6.0
 + polars==1.30.0
 + pre-commit==4.2.0
 + prompt-toolkit==3.0.51
 + propcache==0.3.1
 + proto-plus==1.26.1
 + protobuf==4.25.8
 + psutil==7.0.0
 + ptyprocess==0.7.0
 + pure-eval==0.2.3
 + pyarrow==20.0.0
 + pyasn1==0.6.1
 + pyasn1-modules==0.4.2
 + pycparser==2.22
 + pydantic==2.11.5
 + pydantic-core==2.33.2
 + pygments==2.19.1
 + pymunk==7.0.0
 + pynput==1.8.1
 + pynvml==12.0.0
 + pyopengl==3.1.9
 + pyparsing==3.2.3
 + pysocks==1.7.1
 + pytest==8.3.5
 + python-dateutil==2.9.0.post0
 + python-xlib==0.33
 + pytz==2025.2
 + pyyaml==6.0.2
 + pyyaml-include==1.4.1
 + pyzmq==26.4.0
 + regex==2024.11.6
 + requests==2.32.3
 + requests-oauthlib==2.0.0
 + rerun-sdk==0.23.1
 + rich==14.0.0
 + rsa==4.9.1
 + ruff==0.11.12
 + safetensors==0.5.3
 + scipy==1.15.3
 + sentencepiece==0.2.0
 + sentry-sdk==2.29.1
 + setproctitle==1.3.6
 + setuptools==80.9.0
 + shtab==1.7.2
 + simplejson==3.20.1
 + six==1.17.0
 + smmap==5.0.2
 + soupsieve==2.7
 + stack-data==0.6.3
 + sympy==1.14.0
 + tensorstore==0.1.74
 + termcolor==3.1.0
 + tokenizers==0.21.1
 + toml==0.10.2
 + toolz==1.0.0
 + torch==2.7.1
 + torchcodec==0.4.0
 + torchvision==0.22.1
 + tornado==6.5.1
 + tqdm==4.67.1
 + tqdm-loggable==0.2
 + traitlets==5.14.3
 + transformers==4.53.2
 + treescope==0.1.9
 + triton==3.3.1
 + typeguard==4.4.2
 + typing-extensions==4.13.2
 + typing-inspect==0.9.0
 + typing-inspection==0.4.1
 + tyro==0.9.22
 + tzdata==2025.2
 + urllib3==2.4.0
 + virtualenv==20.31.2
 + wadler-lindig==0.1.6
 + wandb==0.19.11
 + wcwidth==0.2.13
 + websockets==15.0.1
 + werkzeug==3.1.3
 + widgetsnbextension==4.0.14
 + wrapt==1.14.1
 + xxhash==3.5.0
 + yarl==1.20.0
 + zarr==3.0.8
 + zipp==3.22.0
    (20 秒)

=== 3f. addon・設定・assets
installed: policies/mecharm_policy.py + config.py (pi05_mecharm_lora)
installed: pi05_mecharm_trim_lora (repo_id=local/mecharm_redblock_box_teach_v1_trim2, 4,000 steps)
    (2 秒)

=== 4. サーバーの起動
INFO:websockets.server:server listening on 0.0.0.0:8000
    (40 秒)

=== 5. Mac の 8000 番へのトンネル
[TUNNEL] localhost:8000 → Pod の 8000 番 (pid 58023. このスクリプトが終わると閉じる)
    (3 秒)

=== 6. デーモンの状態
--- process
521 /usr/bin/python3 -u /home/ubuntu/mecharm_daemon.py
--- 5555
LISTEN   0         1                   0.0.0.0:5555             0.0.0.0:*       
--- systemd
enabled: enabled
active:  active
    (2 秒)

=== 7. HOME → 爪を開く → 位置合わせ (1 回目)
[INIT] daemon 接続中...
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[INIT] fresh_mode=1
[PRE]  現在姿勢: [4.83, 92.37, 1.84, 10.81, -96.59, -27.94]
[SEND] HOME へ移動指令
[WAIT] t=2.2s  max_err=11.16°
[WAIT] t=2.7s  max_err=1.84°
[DONE] HOME 到達 max_err=1.84°
[POST] 最終姿勢: [0.35, 1.23, 1.84, 0.61, 1.31, -29.44]
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[EXIT] fresh_mode=0, socket close
  [Pi] GRIPPER: OPEN result= -1
[REF   ] 基準画像: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_194818/frames/000000.jpg
[REF   ] お手本 run_0001_20261019_194818 (つかんだ瞬間の j0 = +13.2°)
[REF   ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける
[ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない)
[ALIGN ] dy=  -4.1  dx=  +8.4  response=0.846  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  -2.0  dx=  +4.4  response=0.919  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  -4.2  dx= +10.3  response=0.854  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  -5.3  dx= +15.7  response=0.839  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  -3.9  dx= +18.0  response=0.315  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  -5.5  dx= +15.3  response=0.761  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  -3.3  dx= +14.4  response=0.816  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  -0.8  dx= +10.9  response=0.771  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  +0.4  dx=  +9.2  response=0.832  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  +2.3  dx=  +2.8  response=0.733  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  +3.5  dx=  +2.7  response=0.692  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  -0.8  dx=  +2.2  response=0.841  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  -3.5  dx=  +2.2  response=0.885  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  -2.3  dx=  -0.5  response=0.915  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  -0.7  dx=  -2.6  response=0.788  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  +0.3  dx=  -1.6  response=0.729  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[DONE  ] 終了 (何も書いていません)
    (51 秒)

=== 8. 実機推論 (1 回目)
[WAIT  ] 送ったあと 0.0s / 爪のあと 0.8s (開くときの daemon 0.0s) / 止まるのを待つ目安 0.8s
[SAFE  ] 安全範囲 (学習 19 本 ±10°): j0[-72,+55]  j1[-9,+88]  j2[-46,+41]  j3[-18,+27]  j4[-90,+10]  j5[-51,-14]
[SAFE  ] 肩 j1 の上限は J1_SAFE_MAX=88° で切った (これを超える指令はアームが黙って捨てる / LOG352)  元データ: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes
[MODE  ] EXECUTE  steps/chunk=10  max_move=20.0°  log=/Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_175527
[CAMERA] 写り方 dy=-6.5 dx=+4.9 response=0.636 → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[CAMERA] 基準: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_183454/frames/000000.jpg
[POLICY] 接続 ws://localhost:8000  metadata={}
[RECORD] 上カメラと実測角を 1 秒 10 コマで記録します → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_175527/recording
[GRIP  ] 開始時のグリッパー開放は, 最初の目標が検査を通ってから行います (爪が閉じていたら手で開けておく)
[STATE ] 実測を渡す (直前に送った目標がない)
[000] 推論 58074ms  10ステップ先  Δ= +3.3 +17.6 +11.2  -2.2 -26.5  +2.4
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[GRIP  ] 開始時にグリッパーを開く
  [Pi] GRIPPER: OPEN result= -1
[SEND] pi05_chunk000_via02: send_angles (single) [  +0.47,   +6.09,   +4.32,   -0.33,   -7.08,  -29.24]  speed=20 wait=0.0s  (pre max|Δ|=7.25°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.04° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.5  +4.9  +2.5  -0.6  -7.3  +0.5  着いた
[SEND] pi05_chunk000_via05: send_angles (single) [  +1.61,  +11.53,   +7.94,   -1.02,  -15.67,  -28.43]  speed=20 wait=0.0s  (pre max|Δ|=8.82°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.03° (tol 3.0°)
       [VIA   ] step  5  Δ= +1.6  +4.5  +2.6  -0.9  -8.8  +1.3  着いた
[SEND] pi05_chunk000_via08: send_angles (single) [  +2.92,  +17.11,  +11.95,   -1.82,  -24.10,  -27.49]  speed=20 wait=0.0s  (pre max|Δ|=8.90°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.90° (tol 3.0°)
       [VIA   ] step  8  Δ= +1.8  +4.6  +3.1  -1.0  -8.9  +1.8  着いた
[SEND] pi05_chunk000_via09: send_angles (single) [  +3.26,  +18.80,  +13.08,   -1.97,  -26.31,  -27.26]  speed=20 wait=0.0s  (pre max|Δ|=2.50°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.97° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.2  +0.8  +0.3  +0.1  -2.5  +0.9  着いた
[STATE ] 目標を渡す  目標と実測の最大差 0.97°（関節 j1）
[001] 推論 593ms  10ステップ先  Δ= +6.3 +18.5 +11.7  +0.0 -28.2  +1.0
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk001_via02: send_angles (single) [  +4.66,  +24.30,  +16.65,   -2.24,  -34.70,  -26.92]  speed=20 wait=0.0s  (pre max|Δ|=8.16°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.92° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.6  +4.5  +2.9  -0.1  -8.2  +0.8  着いた
[SEND] pi05_chunk001_via05: send_angles (single) [  +6.65,  +30.29,  +20.63,   -2.10,  -43.78,  -26.86]  speed=20 wait=0.0s  (pre max|Δ|=9.51°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.91° (tol 3.0°)
       [VIA   ] step  5  Δ= +2.4  +5.1  +3.2  +0.6  -9.5  +0.4  着いた
[SEND] pi05_chunk001_via08: send_angles (single) [  +8.59,  +36.25,  +24.56,   -2.16,  -52.16,  -26.86]  speed=20 wait=0.0s  (pre max|Δ|=8.83°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.01° (tol 3.0°)
       [VIA   ] step  8  Δ= +2.4  +5.1  +3.4  +0.7  -8.8  +0.3  着いた
[SEND] pi05_chunk001_via09: send_angles (single) [  +9.33,  +38.26,  +25.44,   -2.08,  -54.70,  -26.81]  speed=20 wait=0.0s  (pre max|Δ|=2.94°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.93° (tol 3.0°)
       [VIA   ] step  9  Δ= +1.2  +1.0  +0.5  +0.5  -2.9  +0.3  着いた
[STATE ] 目標を渡す  目標と実測の最大差 0.93°（関節 j1）
[002] 推論 563ms  10ステップ先  Δ= +1.7  +6.9  +4.7  -0.1  -8.3  +0.2
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 1 に入りました (推論 2 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+9.2 j1=+39.2 j2=+25.3 j3=-2.4 j4=-54.9 j5=-27.0  グリッパー 開
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+9.2 j1=+39.2 j2=+25.3 j3=-2.4 j4=-54.9 j5=-27.0  グリッパー 開
[SEND] pi05_corr01_000: send_angles (single) [  +7.22,  +39.19,  +25.31,   -2.37,  -54.93,  -26.98]  speed=20 wait=0.0s  (pre max|Δ|=2.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.88° (tol 3.0°)
  [補正] j0 着いた (目標 +7.2 / 実測 +7.1, ずれ 0.11° ≤ 1.00°)
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+7.2 j1=+39.2 j2=+25.3 j3=-2.4 j4=-54.9 j5=-27.0  グリッパー 開
[SEND] pi05_corr01_001: send_angles (single) [  +9.22,  +39.19,  +25.31,   -2.37,  -54.93,  -26.98]  speed=20 wait=0.0s  (pre max|Δ|=2.11°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.88° (tol 3.0°)
  [補正] j0 着いた (目標 +9.2 / 実測 +9.1, ずれ 0.17° ≤ 1.00°)
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+9.2 j1=+39.2 j2=+25.3 j3=-2.4 j4=-54.9 j5=-27.0  グリッパー 開
[SEND] pi05_corr01_002: send_angles (single) [ +11.22,  +39.19,  +25.31,   -2.37,  -54.93,  -26.98]  speed=20 wait=0.0s  (pre max|Δ|=2.17°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.88° (tol 3.0°)
  [補正] j0 着いた (目標 +11.2 / 実測 +11.1, ずれ 0.15° ≤ 1.00°)
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+11.2 j1=+39.2 j2=+25.3 j3=-2.4 j4=-54.9 j5=-27.0  グリッパー 開
[SEND] pi05_corr01_003: send_angles (single) [ +13.22,  +39.19,  +25.31,   -2.37,  -54.93,  -26.98]  speed=20 wait=0.0s  (pre max|Δ|=2.15°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.88° (tol 3.0°)
  [補正] j0 着いた (目標 +13.2 / 実測 +13.3, ずれ 0.05° ≤ 1.00°)
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+13.2 j1=+39.2 j2=+25.3 j3=-2.4 j4=-54.9 j5=-27.0  グリッパー 開
[CORR  ] 補正 1 を終えました (4 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[003] 推論 1584ms  10ステップ先  Δ= +1.6  +7.7  +4.4  -0.3  -8.7  +0.1
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk003_via02: send_angles (single) [ +14.33,  +45.41,  +29.13,   -2.81,  -62.68,  -26.94]  speed=20 wait=0.0s  (pre max|Δ|=7.49°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.99° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.1  +5.3  +3.8  -0.4  -7.5  +0.0  着いた
[SEND] pi05_chunk003_via05: send_angles (single) [ +14.72,  +47.34,  +30.51,   -2.64,  -64.16,  -26.93]  speed=20 wait=0.0s  (pre max|Δ|=1.59°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.99° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.4  +0.9  +1.4  -0.5  -1.6  -0.0  着いた
[SEND] pi05_chunk003_via08: send_angles (single) [ +14.83,  +47.57,  +30.05,   -2.65,  -63.89,  -26.92]  speed=20 wait=0.0s  (pre max|Δ|=0.97°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.97° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.5  -0.8  -0.8  -0.5  +1.0  -0.0  着いた
[SEND] pi05_chunk003_via09: send_angles (single) [ +14.84,  +47.77,  +29.68,   -2.67,  -63.94,  -26.91]  speed=20 wait=0.0s  (pre max|Δ|=1.16°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.08° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.5  -0.6  -1.2  -0.5  +0.9  -0.0  着いた
[STATE ] 目標を渡す  目標と実測の最大差 1.08°（関節 j2）
[004] 推論 635ms  10ステップ先  Δ= +0.8 +10.2 -10.1  -0.6  +2.0  -0.2
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk004_via02: send_angles (single) [ +14.95,  +52.52,  +26.13,   -2.67,  -63.77,  -26.98]  speed=20 wait=0.0s  (pre max|Δ|=4.63°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.94° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.6  +3.9  -4.6  -0.4  +1.0  -0.1  着いた
[SEND] pi05_chunk004_via05: send_angles (single) [ +15.14,  +56.43,  +23.00,   -2.76,  -63.19,  -27.01]  speed=20 wait=0.0s  (pre max|Δ|=4.07°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.90° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.1  +3.0  -4.1  -0.4  +1.2  -0.1  着いた
[SEND] pi05_chunk004_via08: send_angles (single) [ +15.07,  +58.58,  +20.99,   -2.83,  -62.92,  -27.07]  speed=20 wait=0.0s  (pre max|Δ|=2.91°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.74° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.1  +1.3  -2.9  -0.4  +0.8  -0.2  着いた
[SEND] pi05_chunk004_via09: send_angles (single) [ +15.11,  +58.82,  +20.68,   -2.83,  -62.90,  -27.10]  speed=20 wait=0.0s  (pre max|Δ|=0.94°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.94° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.1  -0.5  -0.9  -0.3  +0.5  -0.0  着いた
[STATE ] 目標を渡す  目標と実測の最大差 0.94°（関節 j2）
[005] 推論 617ms  5ステップ先  Δ= +0.1  +1.4  -2.7  -0.3  +1.0  -0.1  グリッパー→閉
       [VIA   ] 中継点 2 点: step 2, 4
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk005_via02: send_angles (single) [ +15.17,  +61.19,  +18.81,   -2.87,  -62.34,  -27.12]  speed=20 wait=0.0s  (pre max|Δ|=2.81°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.38° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.2  +1.8  -2.8  -0.3  +0.9  -0.0  着いた
[SEND] pi05_chunk005_via04: send_angles (single) [ +15.15,  +60.82,  +18.92,   -2.82,  -62.34,  -27.14]  speed=20 wait=0.0s  (pre max|Δ|=1.38°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.29° (tol 3.0°)
       [VIA   ] step  4  Δ= +0.3  -1.0  -0.2  -0.3  +1.4  +0.3  着いた
  [Pi] GRIPPER: VALUE=20 speed=100 result= -1
[STATE ] 目標を渡す  目標と実測の最大差 1.29°（関節 j4）
[006] 推論 614ms  10ステップ先  Δ= +0.3 -10.9  +9.1  -0.3  +0.2  +0.5
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk006_via02: send_angles (single) [ +15.13,  +59.32,  +20.01,   -2.45,  -62.65,  -27.31]  speed=20 wait=0.0s  (pre max|Δ|=2.29°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.12° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.5  -2.3  +1.5  +0.1  +1.0  +0.2  着いた
[SEND] pi05_chunk006_via05: send_angles (single) [ +15.07,  +55.81,  +23.38,   -2.64,  -63.11,  -27.14]  speed=20 wait=0.0s  (pre max|Δ|=4.49°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.12° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.4  -4.4  +4.5  -0.1  -1.5  +0.4  着いた
[SEND] pi05_chunk006_via08: send_angles (single) [ +15.09,  +51.88,  +26.79,   -2.76,  -63.48,  -26.99]  speed=20 wait=0.0s  (pre max|Δ|=4.98°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.93° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.4  -5.0  +4.2  +0.2  -2.5  -0.3  着いた
[SEND] pi05_chunk006_via09: send_angles (single) [ +14.99,  +50.68,  +27.68,   -2.78,  -63.40,  -26.95]  speed=20 wait=0.0s  (pre max|Δ|=2.85°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.67° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.3  -2.8  +1.4  +0.3  -2.8  -0.8  着いた
[STATE ] 目標を渡す  目標と実測の最大差 2.67°（関節 j4）
[007] 推論 1563ms  10ステップ先  Δ=+14.6  -2.7 -13.5  +3.7  +4.3  -4.0
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk007_via02: send_angles (single) [ +14.89,  +47.78,  +30.33,   -2.80,  -63.75,  -26.82]  speed=20 wait=0.0s  (pre max|Δ|=4.69°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.70° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.1  -4.7  +2.7  +0.2  -2.2  -0.5  着いた
[SEND] pi05_chunk007_via05: send_angles (single) [ +20.99,  +48.80,  +23.59,   -1.37,  -61.08,  -28.22]  speed=20 wait=0.0s  (pre max|Δ|=6.99°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.23° (tol 3.0°)
       [VIA   ] step  5  Δ= +6.2  -0.7  -7.0  +1.6  +2.5  -1.9  着いた
[SEND] pi05_chunk007_via08: send_angles (single) [ +27.62,  +49.50,  +15.95,   +0.17,  -57.79,  -29.84]  speed=20 wait=0.0s  (pre max|Δ|=8.57°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.01° (tol 3.0°)
       [VIA   ] step  8  Δ= +6.8  -0.2  -8.6  +2.0  +4.5  -2.5  着いた
[SEND] pi05_chunk007_via09: send_angles (single) [ +29.34,  +49.74,  +13.96,   +0.59,  -56.40,  -30.26]  speed=20 wait=0.0s  (pre max|Δ|=3.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.15° (tol 3.0°)
       [VIA   ] step  9  Δ= +2.0  -0.6  -3.0  +1.2  +2.3  -1.0  着いた
[STATE ] 目標を渡す  目標と実測の最大差 1.15°（関節 j2）
[008] 推論 560ms  10ステップ先  Δ=+13.1  +7.5 -16.8  +3.7  +1.6  -3.6
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 2 に入りました (推論 8 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+29.4 j1=+50.8 j2=+15.1 j3=+0.7 j4=-56.7 j5=-29.8  グリッパー 閉
  [補正] 関節 j2  刻み 1.0°  補正目標 j0=+29.4 j1=+50.8 j2=+15.1 j3=+0.7 j4=-56.7 j5=-29.8  グリッパー 閉
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+29.4 j1=+50.8 j2=+15.1 j3=+0.7 j4=-56.7 j5=-29.8  グリッパー 閉
[SEND] pi05_corr02_000: send_angles (single) [ +29.44,  +50.80,  +17.11,   +0.70,  -56.68,  -29.79]  speed=20 wait=0.0s  (pre max|Δ|=2.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j2 着いた (目標 +17.1 / 実測 +17.7, ずれ 0.55° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+29.4 j1=+50.8 j2=+17.1 j3=+0.7 j4=-56.7 j5=-29.8  グリッパー 閉
[SEND] pi05_corr02_001: send_angles (single) [ +29.44,  +50.80,  +15.11,   +0.70,  -56.68,  -29.79]  speed=20 wait=0.0s  (pre max|Δ|=2.55°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.06° (tol 3.0°)
  [補正] j2 届いていない (目標 +15.1 / 実測 +16.2, ずれ 1.06° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+29.4 j1=+50.8 j2=+15.1 j3=+0.7 j4=-56.7 j5=-29.8  グリッパー 閉
  [補正] 足りなかった 1.1° を足して送る (j2 を -3.1°)
[SEND] pi05_corr02_002: send_angles (single) [ +29.44,  +50.80,  +12.05,   +0.70,  -56.68,  -29.79]  speed=20 wait=0.0s  (pre max|Δ|=4.12°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.04° (tol 3.0°)
  [補正] j2 届いていない (目標 +12.0 / 実測 +13.1, ずれ 1.04° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+29.4 j1=+50.8 j2=+12.0 j3=+0.7 j4=-56.7 j5=-29.8  グリッパー 閉
  [補正] 足りなかった 1.0° を足して送る (j2 を -3.0°)
[SEND] pi05_corr02_003: send_angles (single) [ +29.44,  +50.80,   +9.01,   +0.70,  -56.68,  -29.79]  speed=20 wait=0.0s  (pre max|Δ|=4.08°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.00° (tol 3.0°)
  [補正] j2 届いていない (目標 +9.0 / 実測 +10.0, ずれ 1.00° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+29.4 j1=+50.8 j2=+9.0 j3=+0.7 j4=-56.7 j5=-29.8  グリッパー 閉
  [補正] 足りなかった 1.0° を足して送る (j2 を -3.0°)
[SEND] pi05_corr02_004: send_angles (single) [ +29.44,  +50.80,   +6.01,   +0.70,  -56.68,  -29.79]  speed=20 wait=0.0s  (pre max|Δ|=4.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.10° (tol 3.0°)
  [補正] j2 届いていない (目標 +6.0 / 実測 +7.1, ずれ 1.10° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+29.4 j1=+50.8 j2=+6.0 j3=+0.7 j4=-56.7 j5=-29.8  グリッパー 閉
  [補正] 足りなかった 1.1° を足して送る (j2 を -3.1°)
[SEND] pi05_corr02_005: send_angles (single) [ +29.44,  +50.80,   +2.91,   +0.70,  -56.68,  -29.79]  speed=20 wait=0.0s  (pre max|Δ|=4.20°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.04° (tol 3.0°)
  [補正] j2 届いていない (目標 +2.9 / 実測 +4.0, ずれ 1.04° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+29.4 j1=+50.8 j2=+2.9 j3=+0.7 j4=-56.7 j5=-29.8  グリッパー 閉
  [補正] 足りなかった 1.0° を足して送る (j2 を -3.0°)
[SEND] pi05_corr02_006: send_angles (single) [ +29.44,  +50.80,   -0.13,   +0.70,  -56.68,  -29.79]  speed=20 wait=0.0s  (pre max|Δ|=4.08°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.09° (tol 3.0°)
  [補正] j2 届いていない (目標 -0.1 / 実測 +1.0, ずれ 1.09° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+29.4 j1=+50.8 j2=-0.1 j3=+0.7 j4=-56.7 j5=-29.8  グリッパー 閉
[CORR  ] 補正 2 を終えました (7 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[009] 推論 1954ms  10ステップ先  Δ=+11.3  +5.9  -5.1  +2.1  +1.1  -1.7
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk009_via02: send_angles (single) [ +37.36,  +51.27,   -2.27,   +1.42,  -54.26,  -30.59]  speed=20 wait=0.0s  (pre max|Δ|=7.92°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.48° (tol 3.0°)
       [VIA   ] step  2  Δ= +7.9  -0.5  -3.2  +0.6  +2.4  -0.6  着いた
[SEND] pi05_chunk009_via05: send_angles (single) [ +41.71,  +52.05,   -4.46,   +2.22,  -52.35,  -31.49]  speed=20 wait=0.0s  (pre max|Δ|=4.27°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.48° (tol 3.0°)
       [VIA   ] step  5  Δ= +4.3  -0.2  -3.7  +1.3  +2.7  -1.1  着いた
[SEND] pi05_chunk009_via08: send_angles (single) [ +41.20,  +56.40,   -4.36,   +2.82,  -54.60,  -31.69]  speed=20 wait=0.0s  (pre max|Δ|=3.23°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.61° (tol 3.0°)
       [VIA   ] step  8  Δ= -0.6  +3.2  -1.4  +0.7  -1.9  -0.4  着いた
[SEND] pi05_chunk009_via09: send_angles (single) [ +40.70,  +57.63,   -4.15,   +2.91,  -55.55,  -31.67]  speed=20 wait=0.0s  (pre max|Δ|=2.56°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.08° (tol 3.0°)
       [VIA   ] step  9  Δ= -0.5  +0.1  -1.1  +0.6  -2.6  -0.3  着いた
[STATE ] 目標を渡す  目標と実測の最大差 1.08°（関節 j2）
[010] 推論 950ms  7ステップ先  Δ= -0.3  +4.4  -1.6  +1.2  -5.4  -0.6  グリッパー→開
       [VIA   ] 中継点 3 点: step 2, 5, 6
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk010_via02: send_angles (single) [ +40.70,  +62.03,   -4.41,   +3.40,  -59.04,  -31.81]  speed=20 wait=0.0s  (pre max|Δ|=4.11°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.34° (tol 3.0°)
       [VIA   ] step  2  Δ= -0.5  +3.4  -1.3  +0.8  -4.1  -0.4  着いた
[SEND] pi05_chunk010_via05: send_angles (single) [ +40.91,  +62.99,   -4.62,   +3.71,  -60.29,  -31.97]  speed=20 wait=0.0s  (pre max|Δ|=1.85°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.55° (tol 3.0°)
       [VIA   ] step  5  Δ= -0.3  -0.2  -1.6  +0.6  -1.9  +0.1  着いた
[SEND] pi05_chunk010_via06: send_angles (single) [ +40.91,  +62.99,   -4.62,   +3.71,  -60.29,  -31.97]  speed=20 wait=0.0s  (pre max|Δ|=1.55°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.55° (tol 3.0°)
       [VIA   ] step  6  Δ= -0.3  -1.1  -1.6  +0.2  -0.4  +0.1  着いた
  [Pi] GRIPPER: OPEN result= -1
[STATE ] 目標を渡す  目標と実測の最大差 1.55°（関節 j2）
[011] 推論 896ms  10ステップ先  Δ= -1.2 -16.4  -1.2  -0.4 +16.4  -0.5
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk011_via02: send_angles (single) [ +41.15,  +59.05,   -4.70,   +3.66,  -56.13,  -32.31]  speed=20 wait=0.0s  (pre max|Δ|=5.02°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.94° (tol 3.0°)
       [VIA   ] step  2  Δ= -0.1  -5.0  -1.6  +0.1  +3.7  -0.2  着いた
[SEND] pi05_chunk011_via05: send_angles (single) [ +41.55,  +55.12,   -4.75,   +3.67,  -51.66,  -32.49]  speed=20 wait=0.0s  (pre max|Δ|=6.17°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.09° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.3  -5.9  -1.7  +0.2  +6.3  -0.4  着いた
[SEND] pi05_chunk011_via08: send_angles (single) [ +41.14,  +49.82,   -4.61,   +3.34,  -45.70,  -32.57]  speed=20 wait=0.0s  (pre max|Δ|=7.39°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.21° (tol 3.0°)
       [VIA   ] step  8  Δ= -0.1  -7.4  -1.5  -0.2  +7.1  -0.4  着いた
[SEND] pi05_chunk011_via09: send_angles (single) [ +40.06,  +47.64,   -4.25,   +3.13,  -43.46,  -32.54]  speed=20 wait=0.0s  (pre max|Δ|=4.39°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.10° (tol 3.0°)
       [VIA   ] step  9  Δ= -1.2  -4.4  -1.2  -0.4  +3.0  -0.3  着いた
[STATE ] 目標を渡す  目標と実測の最大差 2.10°（関節 j1）
[012] 推論 565ms  10ステップ先  Δ=-21.3 -29.6  +1.7  -4.3 +25.5  +1.3
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > h
[SEND] pi05_home: send_angles (single) [  +0.00,   +0.00,   +0.00,   +0.00,   +0.00,  -30.00]  speed=20 wait=0.0s  (pre max|Δ|=49.74°, post-send timeout 9.5s)
[SEND] arrival OK: max|Δ|=1.40° (tol 2.5°)
[RECORD] 記録終了 コマ 2232 (8.761 fps) 実測角 1758 回 (6.9 Hz)  → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_175527/recording
       結果: y=成功 / n=失敗 / Enter=記録しない > y
[DONE  ] 記録: /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_175527
[CLIENT] run_policy_client.py が終わった (終了コード 0)
    (270 秒)
もう1回やりますか? y=やる / 他=終わる > y

=== 7. HOME → 爪を開く → 位置合わせ (2 回目)
[INIT] daemon 接続中...
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[INIT] fresh_mode=1
[PRE]  現在姿勢: [-0.17, 1.40, 0.70, 0.26, -0.26, -30.23]
[SEND] HOME へ移動指令
[WAIT] t=2.1s  max_err=1.40°
[DONE] HOME 到達 max_err=1.40°
[POST] 最終姿勢: [-0.17, 1.40, 0.70, 0.26, -0.26, -30.23]
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[EXIT] fresh_mode=0, socket close
  [Pi] GRIPPER: OPEN result= -1
[REF   ] 基準画像: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_194818/frames/000000.jpg
[REF   ] お手本 run_0001_20261019_194818 (つかんだ瞬間の j0 = +13.2°)
[REF   ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける
[ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない)
[ALIGN ] dy=  +0.7  dx=  -2.0  response=0.912  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[DONE  ] 終了 (何も書いていません)
    (20 秒)

=== 8. 実機推論 (2 回目)
[WAIT  ] 送ったあと 0.0s / 爪のあと 0.8s (開くときの daemon 0.0s) / 止まるのを待つ目安 0.8s
[SAFE  ] 安全範囲 (学習 19 本 ±10°): j0[-72,+55]  j1[-9,+88]  j2[-46,+41]  j3[-18,+27]  j4[-90,+10]  j5[-51,-14]
[SAFE  ] 肩 j1 の上限は J1_SAFE_MAX=88° で切った (これを超える指令はアームが黙って捨てる / LOG352)  元データ: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes
[MODE  ] EXECUTE  steps/chunk=10  max_move=20.0°  log=/Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_180023
[CAMERA] 写り方 dy=-5.7 dx=+4.6 response=0.562 → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[CAMERA] 基準: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_183454/frames/000000.jpg
[POLICY] 接続 ws://localhost:8000  metadata={}
[RECORD] 上カメラと実測角を 1 秒 10 コマで記録します → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_180023/recording
[GRIP  ] 開始時のグリッパー開放は, 最初の目標が検査を通ってから行います (爪が閉じていたら手で開けておく)
[STATE ] 実測を渡す (直前に送った目標がない)
[000] 推論 1664ms  10ステップ先  Δ= +4.5 +15.7 +11.1  -2.6 -23.6  +2.9
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[GRIP  ] 開始時にグリッパーを開く
  [Pi] GRIPPER: OPEN result= -1
[SEND] pi05_chunk000_via02: send_angles (single) [  +0.64,   +5.19,   +2.91,   -0.22,   -5.76,  -29.66]  speed=20 wait=0.0s  (pre max|Δ|=5.50°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.72° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.8  +3.8  +2.2  -0.5  -5.5  +0.6  着いた
[SEND] pi05_chunk000_via05: send_angles (single) [  +2.10,  +10.49,   +6.63,   -1.24,  -13.90,  -28.67]  speed=20 wait=0.0s  (pre max|Δ|=9.86°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.16° (tol 3.0°)
       [VIA   ] step  5  Δ= +1.5  +4.3  +2.8  -1.2  -9.9  +1.2  着いた
[SEND] pi05_chunk000_via08: send_angles (single) [  +3.76,  +15.42,  +10.69,   -2.24,  -21.50,  -27.61]  speed=20 wait=0.0s  (pre max|Δ|=8.76°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.94° (tol 3.0°)
       [VIA   ] step  8  Δ= +2.0  +4.1  +3.1  -0.9  -8.8  +1.2  着いた
[SEND] pi05_chunk000_via09: send_angles (single) [  +4.30,  +17.10,  +11.80,   -2.36,  -23.85,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=3.29°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.91° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.8  +0.9  +0.3  +0.1  -3.3  +0.5  着いた
[STATE ] 目標を渡す  目標と実測の最大差 0.91°（関節 j1）
[001] 推論 875ms  10ステップ先  Δ= +4.7 +18.0 +12.1  -0.3 -29.2  +0.9
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk001_via02: send_angles (single) [  +5.78,  +22.65,  +15.58,   -2.91,  -32.21,  -26.84]  speed=20 wait=0.0s  (pre max|Δ|=8.48°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.84° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.7  +4.6  +3.0  -0.0  -8.5  +0.6  着いた
[SEND] pi05_chunk001_via05: send_angles (single) [  +7.44,  +28.72,  +19.74,   -3.02,  -41.64,  -26.67]  speed=20 wait=0.0s  (pre max|Δ|=10.27°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.89° (tol 3.0°)
       [VIA   ] step  5  Δ= +1.8  +5.3  +3.4  +0.1 -10.3  +0.4  着いた
[SEND] pi05_chunk001_via08: send_angles (single) [  +8.69,  +34.71,  +23.90,   -3.11,  -50.68,  -26.62]  speed=20 wait=0.0s  (pre max|Δ|=9.64°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.88° (tol 3.0°)
       [VIA   ] step  8  Δ= +1.7  +5.1  +3.6  -0.2  -9.6  +0.3  着いた
[SEND] pi05_chunk001_via09: send_angles (single) [  +8.76,  +36.05,  +24.66,   -3.21,  -52.96,  -26.56]  speed=20 wait=0.0s  (pre max|Δ|=2.78°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.95° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.4  +0.5  +0.4  -0.2  -2.8  +0.2  着いた
[STATE ] 目標を渡す  目標と実測の最大差 0.95°（関節 j1）
[002] 推論 1696ms  10ステップ先  Δ= +2.1  +7.1  +4.9  -0.3 -10.3  +0.3
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk002_via02: send_angles (single) [ +10.05,  +42.05,  +28.68,   -3.57,  -61.48,  -26.54]  speed=20 wait=0.0s  (pre max|Δ|=8.66°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.92° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.7  +5.1  +4.1  -0.6  -8.7  +0.3  着いた
[SEND] pi05_chunk002_via05: send_angles (single) [ +10.42,  +44.47,  +30.28,   -3.34,  -63.90,  -26.52]  speed=20 wait=0.0s  (pre max|Δ|=2.73°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.6  +1.5  +1.5  -0.4  -2.7  +0.2  着いた
[SEND] pi05_chunk002_via08: send_angles (single) [ +10.36,  +43.98,  +29.84,   -3.25,  -63.21,  -26.52]  speed=20 wait=0.0s  (pre max|Δ|=1.45°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.45° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.5  -1.4  -0.8  -0.3  +0.9  +0.2  着いた
[SEND] pi05_chunk002_via09: send_angles (single) [ +10.40,  +44.12,  +29.55,   -3.27,  -63.13,  -26.53]  speed=20 wait=0.0s  (pre max|Δ|=1.31°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.31° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.6  -1.3  -1.1  -0.3  +1.0  +0.2  着いた
[STATE ] 目標を渡す  目標と実測の最大差 1.31°（関節 j1）
[003] 推論 622ms  10ステップ先  Δ= +1.0  +4.7  -5.1  -0.1  +1.4  +0.1
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk003_via02: send_angles (single) [ +10.49,  +44.78,  +30.02,   -3.14,  -63.70,  -26.55]  speed=20 wait=0.0s  (pre max|Δ|=0.65°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.74° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.7  -0.7  -0.6  -0.2  +0.4  +0.2  着いた
[SEND] pi05_chunk003_via05: send_angles (single) [ +10.72,  +45.88,  +29.17,   -3.08,  -63.50,  -26.55]  speed=20 wait=0.0s  (pre max|Δ|=1.41°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.32° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.1  +0.4  -1.4  -0.2  +0.6  +0.2  着いた
[SEND] pi05_chunk003_via08: send_angles (single) [ +10.79,  +48.95,  +26.52,   -3.07,  -63.01,  -26.60]  speed=20 wait=0.0s  (pre max|Δ|=3.97°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.98° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.2  +2.0  -4.0  -0.2  +1.1  +0.1  着いた
[SEND] pi05_chunk003_via09: send_angles (single) [ +10.86,  +50.08,  +25.52,   -3.05,  -62.72,  -26.61]  speed=20 wait=0.0s  (pre max|Δ|=1.98°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.19° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.2  +0.3  -2.0  -0.1  +0.8  +0.1  着いた
[STATE ] 目標を渡す  目標と実測の最大差 1.19°（関節 j2）
[004] 推論 613ms  9ステップ先  Δ= +1.0  +7.0  -8.1  -0.2  +2.6  -0.1  グリッパー→閉
       [VIA   ] 中継点 3 点: step 2, 5, 8
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 1 に入りました (推論 4 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+10.6 j1=+51.1 j2=+26.7 j3=-2.8 j4=-63.0 j5=-26.7  グリッパー 開
[SEND] pi05_corr01_000: send_angles (single) [ +11.63,  +51.06,  +26.71,   -2.81,  -63.01,  -26.71]  speed=20 wait=0.0s  (pre max|Δ|=1.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.97° (tol 3.0°)
  [補正] j0 着いた (目標 +11.6 / 実測 +11.6, ずれ 0.03° ≤ 0.50°)
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+11.6 j1=+51.1 j2=+26.7 j3=-2.8 j4=-63.0 j5=-26.7  グリッパー 開
[SEND] pi05_corr01_001: send_angles (single) [ +12.63,  +51.06,  +26.71,   -2.81,  -63.01,  -26.71]  speed=20 wait=0.0s  (pre max|Δ|=1.03°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.97° (tol 3.0°)
  [補正] j0 着いた (目標 +12.6 / 実測 +12.6, ずれ 0.07° ≤ 0.50°)
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+12.6 j1=+51.1 j2=+26.7 j3=-2.8 j4=-63.0 j5=-26.7  グリッパー 開
[SEND] pi05_corr01_002: send_angles (single) [ +13.63,  +51.06,  +26.71,   -2.81,  -63.01,  -26.71]  speed=20 wait=0.0s  (pre max|Δ|=1.07°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.97° (tol 3.0°)
  [補正] j0 着いた (目標 +13.6 / 実測 +13.4, ずれ 0.19° ≤ 0.50°)
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+13.6 j1=+51.1 j2=+26.7 j3=-2.8 j4=-63.0 j5=-26.7  グリッパー 開
[CORR  ] 補正 1 を終えました (3 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[005] 推論 648ms  9ステップ先  Δ= +0.6  +7.9  -6.6  +0.0  +1.7  -0.1  グリッパー→閉
       [VIA   ] 中継点 3 点: step 2, 5, 8
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk005_via02: send_angles (single) [ +13.84,  +56.19,  +23.56,   -2.84,  -62.08,  -26.71]  speed=20 wait=0.0s  (pre max|Δ|=4.16°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.76° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.4  +4.2  -3.2  -0.0  +0.9  +0.0  着いた
[SEND] pi05_chunk005_via05: send_angles (single) [ +14.00,  +59.36,  +20.84,   -2.85,  -61.33,  -26.76]  speed=20 wait=0.0s  (pre max|Δ|=3.41°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.51° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.6  +2.4  -3.4  -0.1  +1.2  -0.0  着いた
[SEND] pi05_chunk005_via08: send_angles (single) [ +14.03,  +59.97,  +20.14,   -2.80,  -61.36,  -26.78]  speed=20 wait=0.0s  (pre max|Δ|=1.48°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.56° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.6  +0.1  -1.0  -0.2  +1.5  +0.3  着いた
  [Pi] GRIPPER: VALUE=20 speed=100 result= -1
[STATE ] 目標を渡す  目標と実測の最大差 1.65°（関節 j4）
[006] 推論 1686ms  10ステップ先  Δ= +0.8  -7.9  +7.2  -0.8  -0.3  +0.2
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 2 に入りました (推論 6 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+13.3 j1=+60.5 j2=+20.0 j3=-2.3 j4=-63.0 j5=-27.1  グリッパー 閉
  [補正] 関節 j2  刻み 1.0°  補正目標 j0=+13.3 j1=+60.5 j2=+20.0 j3=-2.3 j4=-63.0 j5=-27.1  グリッパー 閉
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.3 j1=+60.5 j2=+20.0 j3=-2.3 j4=-63.0 j5=-27.1  グリッパー 閉
[SEND] pi05_corr02_000: send_angles (single) [ +13.27,  +60.46,  +18.03,   -2.28,  -63.01,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=2.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.81° (tol 3.0°)
  [補正] j2 着いた (目標 +18.0 / 実測 +17.6, ずれ 0.46° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.3 j1=+60.5 j2=+18.0 j3=-2.3 j4=-63.0 j5=-27.1  グリッパー 閉
[SEND] pi05_corr02_001: send_angles (single) [ +13.27,  +60.46,  +20.03,   -2.28,  -63.01,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=2.81°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.19° (tol 3.0°)
  [補正] j2 届いていない (目標 +20.0 / 実測 +18.3, ずれ 1.75° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.3 j1=+60.5 j2=+20.0 j3=-2.3 j4=-63.0 j5=-27.1  グリッパー 閉
  [補正] 足りなかった 1.6° を足して送る (j2 を +3.6°)
[SEND] pi05_corr02_002: send_angles (single) [ +13.27,  +60.46,  +23.61,   -2.28,  -63.01,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=5.16°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.08° (tol 3.0°)
  [補正] j2 届いていない (目標 +23.6 / 実測 +21.5, ずれ 2.08° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.3 j1=+60.5 j2=+23.6 j3=-2.3 j4=-63.0 j5=-27.1  グリッパー 閉
  [補正] 足りなかった 2.0° を足して送る (j2 を +4.0°)
[SEND] pi05_corr02_003: send_angles (single) [ +13.27,  +60.46,  +27.61,   -2.28,  -63.01,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=6.08°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.65° (tol 3.0°)
  [補正] j2 届いていない (目標 +27.6 / 実測 +25.0, ずれ 2.65° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.3 j1=+60.5 j2=+27.6 j3=-2.3 j4=-63.0 j5=-27.1  グリッパー 閉
[SEND] pi05_corr02_004: send_angles (single) [ +13.27,  +60.46,  +25.61,   -2.28,  -63.01,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=1.32°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.32° (tol 3.0°)
  [補正] j2 着いた (目標 +25.6 / 実測 +24.8, ずれ 0.83° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.3 j1=+60.5 j2=+25.6 j3=-2.3 j4=-63.0 j5=-27.1  グリッパー 閉
[SEND] pi05_corr02_005: send_angles (single) [ +13.27,  +60.46,  +23.61,   -2.28,  -63.01,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=1.32°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.61° (tol 3.0°)
  [補正] j2 着いた (目標 +23.6 / 実測 +23.6, ずれ 0.03° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.3 j1=+60.5 j2=+23.6 j3=-2.3 j4=-63.0 j5=-27.1  グリッパー 閉
[SEND] pi05_corr02_006: send_angles (single) [ +13.27,  +60.46,  +21.61,   -2.28,  -63.01,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=2.03°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.32° (tol 3.0°)
  [補正] j2 着いた (目標 +21.6 / 実測 +21.3, ずれ 0.35° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.3 j1=+60.5 j2=+21.6 j3=-2.3 j4=-63.0 j5=-27.1  グリッパー 閉
[SEND] pi05_corr02_007: send_angles (single) [ +13.27,  +60.46,  +19.61,   -2.28,  -63.01,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=1.65°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.58° (tol 3.0°)
  [補正] j2 着いた (目標 +19.6 / 実測 +19.9, ずれ 0.25° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.3 j1=+60.5 j2=+19.6 j3=-2.3 j4=-63.0 j5=-27.1  グリッパー 閉
[SEND] pi05_corr02_008: send_angles (single) [ +13.27,  +60.46,  +17.61,   -2.28,  -63.01,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=2.25°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.32° (tol 3.0°)
  [補正] j2 着いた (目標 +17.6 / 実測 +18.2, ずれ 0.58° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.3 j1=+60.5 j2=+17.6 j3=-2.3 j4=-63.0 j5=-27.1  グリッパー 閉
[SEND] pi05_corr02_009: send_angles (single) [ +13.27,  +60.46,  +15.61,   -2.28,  -63.01,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=2.58°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.91° (tol 3.0°)
  [補正] j2 着いた (目標 +15.6 / 実測 +16.5, ずれ 0.91° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.3 j1=+60.5 j2=+15.6 j3=-2.3 j4=-63.0 j5=-27.1  グリッパー 閉
[SEND] pi05_corr02_010: send_angles (single) [ +13.27,  +60.46,  +13.61,   -2.28,  -63.01,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=2.91°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.80° (tol 3.0°)
  [補正] j2 着いた (目標 +13.6 / 実測 +14.4, ずれ 0.80° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.3 j1=+60.5 j2=+13.6 j3=-2.3 j4=-63.0 j5=-27.1  グリッパー 閉
[CORR  ] 補正 2 を終えました (11 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[007] 推論 617ms  10ステップ先  Δ= +1.4  -5.2  +3.2  +0.3  -0.9  -0.0
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > r
       爪を締め直します (開かずに閉じる指令をもう一度)
  [Pi] GRIPPER: VALUE=20 speed=100 result= -1
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk007_via02: send_angles (single) [ +13.60,  +60.93,  +14.52,   -1.85,  -62.57,  -26.97]  speed=20 wait=0.0s  (pre max|Δ|=1.59°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.59° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.1  -0.3  +0.1  +0.1  +1.6  -0.1  着いた
[SEND] pi05_chunk007_via05: send_angles (single) [ +13.50,  +58.88,  +16.46,   -1.82,  -63.24,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=2.73°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.41° (tol 3.0°)
       [VIA   ] step  5  Δ= -0.0  -2.7  +2.0  +0.3  +0.9  +0.2  着いた
[SEND] pi05_chunk007_via08: send_angles (single) [ +13.89,  +56.18,  +17.80,   -1.69,  -63.24,  -26.67]  speed=20 wait=0.0s  (pre max|Δ|=4.11°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.82° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.4  -4.1  +1.7  +0.4  +0.6  +0.3  着いた
[SEND] pi05_chunk007_via09: send_angles (single) [ +14.91,  +56.01,  +17.64,   -1.59,  -63.23,  -26.75]  speed=20 wait=0.0s  (pre max|Δ|=1.99°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.90° (tol 3.0°)
       [VIA   ] step  9  Δ= +1.4  -2.0  -0.1  +0.4  -0.7  +0.2  着いた
[STATE ] 目標を渡す  目標と実測の最大差 1.90°（関節 j1）
[008] 推論 604ms  10ステップ先  Δ= +3.2  -8.6  +4.2  +1.0  -1.5  -0.6
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 3 に入りました (推論 8 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+15.0 j1=+57.9 j2=+17.8 j3=-2.1 j4=-62.5 j5=-27.0  グリッパー 閉
  [補正] 関節 j2  刻み 1.0°  補正目標 j0=+15.0 j1=+57.9 j2=+17.8 j3=-2.1 j4=-62.5 j5=-27.0  グリッパー 閉
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+15.0 j1=+57.9 j2=+17.8 j3=-2.1 j4=-62.5 j5=-27.0  グリッパー 閉
[SEND] pi05_corr03_000: send_angles (single) [ +15.02,  +57.91,  +19.84,   -2.10,  -62.49,  -26.98]  speed=20 wait=0.0s  (pre max|Δ|=2.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.37° (tol 3.0°)
  [補正] j2 着いた (目標 +19.8 / 実測 +19.4, ずれ 0.42° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+15.0 j1=+57.9 j2=+19.8 j3=-2.1 j4=-62.5 j5=-27.0  グリッパー 閉
[SEND] pi05_corr03_001: send_angles (single) [ +15.02,  +57.91,  +21.84,   -2.10,  -62.49,  -26.98]  speed=20 wait=0.0s  (pre max|Δ|=2.42°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.46° (tol 3.0°)
  [補正] j2 届いていない (目標 +21.8 / 実測 +20.7, ずれ 1.10° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+15.0 j1=+57.9 j2=+21.8 j3=-2.1 j4=-62.5 j5=-27.0  グリッパー 閉
  [補正] 足りなかった 1.1° を足して送る (j2 を +3.1°)
[SEND] pi05_corr03_002: send_angles (single) [ +15.02,  +57.91,  +24.94,   -2.10,  -62.49,  -26.98]  speed=20 wait=0.0s  (pre max|Δ|=4.20°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.54° (tol 3.0°)
  [補正] j2 届いていない (目標 +24.9 / 実測 +23.0, ずれ 1.92° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+15.0 j1=+57.9 j2=+24.9 j3=-2.1 j4=-62.5 j5=-27.0  グリッパー 閉
[SEND] pi05_corr03_003: send_angles (single) [ +15.02,  +57.91,  +26.94,   -2.10,  -62.49,  -26.98]  speed=20 wait=0.0s  (pre max|Δ|=2.95°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.72° (tol 3.0°)
  [補正] j2 届いていない (目標 +26.9 / 実測 +25.2, ずれ 1.72° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+15.0 j1=+57.9 j2=+26.9 j3=-2.1 j4=-62.5 j5=-27.0  グリッパー 閉
[SEND] pi05_corr03_004: send_angles (single) [ +15.02,  +57.91,  +24.94,   -2.10,  -62.49,  -26.98]  speed=20 wait=0.0s  (pre max|Δ|=0.35°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.35° (tol 3.0°)
  [補正] j2 着いた (目標 +24.9 / 実測 +24.9, ずれ 0.07° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+15.0 j1=+57.9 j2=+24.9 j3=-2.1 j4=-62.5 j5=-27.0  グリッパー 閉
[SEND] pi05_corr03_005: send_angles (single) [ +15.02,  +57.91,  +22.94,   -2.10,  -62.49,  -26.98]  speed=20 wait=0.0s  (pre max|Δ|=1.93°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.53° (tol 3.0°)
  [補正] j2 着いた (目標 +22.9 / 実測 +23.3, ずれ 0.35° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+15.0 j1=+57.9 j2=+22.9 j3=-2.1 j4=-62.5 j5=-27.0  グリッパー 閉
[SEND] pi05_corr03_006: send_angles (single) [ +15.02,  +57.91,  +20.94,   -2.10,  -62.49,  -26.98]  speed=20 wait=0.0s  (pre max|Δ|=2.35°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.67° (tol 3.0°)
  [補正] j2 着いた (目標 +20.9 / 実測 +21.4, ずれ 0.50° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+15.0 j1=+57.9 j2=+20.9 j3=-2.1 j4=-62.5 j5=-27.0  グリッパー 閉
[SEND] pi05_corr03_007: send_angles (single) [ +15.02,  +57.91,  +18.94,   -2.10,  -62.49,  -26.98]  speed=20 wait=0.0s  (pre max|Δ|=2.50°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.38° (tol 3.0°)
  [補正] j2 着いた (目標 +18.9 / 実測 +19.7, ずれ 0.74° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+15.0 j1=+57.9 j2=+18.9 j3=-2.1 j4=-62.5 j5=-27.0  グリッパー 閉
[SEND] pi05_corr03_008: send_angles (single) [ +15.02,  +57.91,  +16.94,   -2.10,  -62.49,  -26.98]  speed=20 wait=0.0s  (pre max|Δ|=2.74°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.38° (tol 3.0°)
  [補正] j2 着いた (目標 +16.9 / 実測 +17.8, ずれ 0.90° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+15.0 j1=+57.9 j2=+16.9 j3=-2.1 j4=-62.5 j5=-27.0  グリッパー 閉
[SEND] pi05_corr03_009: send_angles (single) [ +15.02,  +57.91,  +14.94,   -2.10,  -62.49,  -26.98]  speed=20 wait=0.0s  (pre max|Δ|=2.90°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.06° (tol 3.0°)
  [補正] j2 着いた (目標 +14.9 / 実測 +15.8, ずれ 0.88° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+15.0 j1=+57.9 j2=+14.9 j3=-2.1 j4=-62.5 j5=-27.0  グリッパー 閉
[CORR  ] 補正 3 を終えました (10 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[009] 推論 1550ms  10ステップ先  Δ= +5.3  -6.0  +1.6  +1.6  -0.5  -1.2
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk009_via02: send_angles (single) [ +15.12,  +57.28,  +16.99,   -1.51,  -63.48,  -26.43]  speed=20 wait=0.0s  (pre max|Δ|=1.51°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.51° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.2  -1.5  +1.2  +0.2  -0.5  +0.0  着いた
[SEND] pi05_chunk009_via05: send_angles (single) [ +15.22,  +54.60,  +19.16,   -1.42,  -64.10,  -26.25]  speed=20 wait=0.0s  (pre max|Δ|=4.19°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.82° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.3  -4.2  +1.8  +0.2  -0.8  +0.2  着いた
[SEND] pi05_chunk009_via08: send_angles (single) [ +18.66,  +53.17,  +18.26,   -0.49,  -63.85,  -27.16]  speed=20 wait=0.0s  (pre max|Δ|=3.72°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.84° (tol 3.0°)
       [VIA   ] step  8  Δ= +3.7  -3.2  -1.3  +1.2  +0.7  -0.7  着いた
[SEND] pi05_chunk009_via09: send_angles (single) [ +20.19,  +52.82,  +17.39,   -0.10,  -63.55,  -27.66]  speed=20 wait=0.0s  (pre max|Δ|=2.19°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.11° (tol 3.0°)
       [VIA   ] step  9  Δ= +1.7  -2.2  -2.0  +0.2  +1.0  -1.1  着いた
[STATE ] 目標を渡す  目標と実測の最大差 2.11°（関節 j1）
[010] 推論 753ms  10ステップ先  Δ=+18.8  -3.2 -17.8  +4.6  +9.2  -4.8
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > h
[SEND] pi05_home: send_angles (single) [  +0.00,   +0.00,   +0.00,   +0.00,   +0.00,  -30.00]  speed=20 wait=0.0s  (pre max|Δ|=64.51°, post-send timeout 11.7s)
[SEND] arrival OK: max|Δ|=1.58° (tol 2.5°)
[RECORD] 記録終了 コマ 1945 (8.714 fps) 実測角 1418 回 (6.35 Hz)  → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_180023/recording
       結果: y=成功 / n=失敗 / Enter=記録しない > n
[DONE  ] 記録: /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_180023
[CLIENT] run_policy_client.py が終わった (終了コード 0)
    (232 秒)
もう1回やりますか? y=やる / 他=終わる > y

=== 7. HOME → 爪を開く → 位置合わせ (3 回目)
[INIT] daemon 接続中...
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[INIT] fresh_mode=1
[PRE]  現在姿勢: [-0.17, 1.49, 1.58, -0.26, -0.26, -29.70]
[SEND] HOME へ移動指令
[WAIT] t=2.0s  max_err=1.58°
[DONE] HOME 到達 max_err=1.58°
[POST] 最終姿勢: [-0.17, 1.49, 1.58, -0.26, -0.26, -29.70]
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[EXIT] fresh_mode=0, socket close
  [Pi] GRIPPER: OPEN result= -1
[REF   ] 基準画像: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_194818/frames/000000.jpg
[REF   ] お手本 run_0001_20261019_194818 (つかんだ瞬間の j0 = +13.2°)
[REF   ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける
[ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない)
[ALIGN ] dy=  +0.3  dx=  -2.3  response=0.939  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[DONE  ] 終了 (何も書いていません)
    (17 秒)

=== 8. 実機推論 (3 回目)
[WAIT  ] 送ったあと 0.0s / 爪のあと 0.8s (開くときの daemon 0.0s) / 止まるのを待つ目安 0.8s
[SAFE  ] 安全範囲 (学習 19 本 ±10°): j0[-72,+55]  j1[-9,+88]  j2[-46,+41]  j3[-18,+27]  j4[-90,+10]  j5[-51,-14]
[SAFE  ] 肩 j1 の上限は J1_SAFE_MAX=88° で切った (これを超える指令はアームが黙って捨てる / LOG352)  元データ: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes
[MODE  ] EXECUTE  steps/chunk=10  max_move=20.0°  log=/Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_180435
[CAMERA] 写り方 dy=-5.9 dx=+4.1 response=0.611 → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[CAMERA] 基準: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_183454/frames/000000.jpg
[POLICY] 接続 ws://localhost:8000  metadata={}
[RECORD] 上カメラと実測角を 1 秒 10 コマで記録します → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_180435/recording
[GRIP  ] 開始時のグリッパー開放は, 最初の目標が検査を通ってから行います (爪が閉じていたら手で開けておく)
[STATE ] 実測を渡す (直前に送った目標がない)
[000] 推論 796ms  10ステップ先  Δ= +4.9 +18.1 +11.6  -2.5 -26.8  +2.6
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[GRIP  ] 開始時にグリッパーを開く
  [Pi] GRIPPER: OPEN result= -1
[SEND] pi05_chunk000_via02: send_angles (single) [  +0.96,   +6.13,   +4.58,   -0.67,   -7.67,  -29.17]  speed=20 wait=0.0s  (pre max|Δ|=7.41°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.87° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.1  +4.6  +3.0  -0.4  -7.4  +0.5  着いた
[SEND] pi05_chunk000_via05: send_angles (single) [  +2.30,  +12.35,   +8.42,   -1.60,  -16.71,  -28.30]  speed=20 wait=0.0s  (pre max|Δ|=10.91°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.25° (tol 3.0°)
       [VIA   ] step  5  Δ= +1.7  +5.3  +2.9  -1.3 -10.9  +1.3  着いた
[SEND] pi05_chunk000_via08: send_angles (single) [  +3.98,  +17.98,  +12.21,   -2.54,  -25.01,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=9.55°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.02° (tol 3.0°)
       [VIA   ] step  8  Δ= +1.6  +4.7  +2.9  -1.8  -9.5  +1.8  着いた
[SEND] pi05_chunk000_via09: send_angles (single) [  +4.70,  +19.61,  +13.21,   -2.73,  -27.01,  -27.05]  speed=20 wait=0.0s  (pre max|Δ|=3.02°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.95° (tol 3.0°)
       [VIA   ] step  9  Δ= +1.0  +0.7  +0.3  -0.5  -3.0  +1.0  着いた
[STATE ] 目標を渡す  目標と実測の最大差 0.95°（関節 j1）
[001] 推論 612ms  10ステップ先  Δ= +4.9 +17.6 +12.1  -0.5 -29.6  +0.9
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk001_via02: send_angles (single) [  +6.25,  +25.04,  +17.01,   -2.96,  -35.26,  -26.77]  speed=20 wait=0.0s  (pre max|Δ|=8.37°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.99° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.7  +4.5  +3.0  -0.5  -8.4  +0.7  着いた
[SEND] pi05_chunk001_via05: send_angles (single) [  +7.92,  +30.81,  +21.05,   -2.96,  -44.70,  -26.71]  speed=20 wait=0.0s  (pre max|Δ|=10.43°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.83° (tol 3.0°)
       [VIA   ] step  5  Δ= +1.9  +5.0  +3.3  -0.3 -10.4  +0.4  着いた
[SEND] pi05_chunk001_via08: send_angles (single) [  +9.24,  +36.68,  +25.03,   -2.96,  -54.16,  -26.64]  speed=20 wait=0.0s  (pre max|Δ|=9.87°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.93° (tol 3.0°)
       [VIA   ] step  8  Δ= +1.8  +5.0  +3.4  -0.4  -9.9  +0.3  着いた
[SEND] pi05_chunk001_via09: send_angles (single) [  +9.45,  +38.13,  +25.96,   -2.93,  -56.51,  -26.64]  speed=20 wait=0.0s  (pre max|Δ|=2.73°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.89° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.6  +0.5  +0.6  -0.4  -2.7  +0.2  着いた
[STATE ] 目標を渡す  目標と実測の最大差 0.89°（関節 j1）
[002] 推論 813ms  10ステップ先  Δ= +2.0  +6.8  +3.6  -0.7  -9.0  +0.2
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk002_via02: send_angles (single) [ +10.35,  +43.72,  +29.44,   -3.34,  -63.89,  -26.62]  speed=20 wait=0.0s  (pre max|Δ|=7.73°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.92° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.5  +4.7  +3.3  -0.9  -7.7  +0.2  着いた
[SEND] pi05_chunk002_via05: send_angles (single) [ +10.71,  +45.71,  +30.62,   -3.24,  -65.43,  -26.63]  speed=20 wait=0.0s  (pre max|Δ|=2.15°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.04° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.7  +1.1  +1.2  -0.4  -2.1  +0.2  着いた
[SEND] pi05_chunk002_via08: send_angles (single) [ +10.77,  +45.74,  +30.07,   -3.13,  -65.20,  -26.61]  speed=20 wait=0.0s  (pre max|Δ|=1.01°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.01° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.0  -1.0  -1.0  -0.4  +1.0  +0.2  着いた
[SEND] pi05_chunk002_via09: send_angles (single) [ +10.84,  +45.79,  +29.66,   -3.15,  -65.16,  -26.61]  speed=20 wait=0.0s  (pre max|Δ|=1.36°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.18° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.1  -1.0  -1.4  -0.4  +1.0  +0.2  着いた
[STATE ] 目標を渡す  目標と実測の最大差 1.18°（関節 j2）
[003] 推論 1548ms  10ステップ先  Δ= -0.0 +12.1 -11.4  -0.5  +3.9  +0.1
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk003_via02: send_angles (single) [ +10.93,  +50.26,  +26.40,   -3.12,  -64.43,  -26.65]  speed=20 wait=0.0s  (pre max|Δ|=4.44°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.2  +3.5  -4.4  -0.3  +1.7  +0.1  着いた
[SEND] pi05_chunk003_via05: send_angles (single) [ +11.13,  +54.58,  +22.96,   -3.12,  -63.29,  -26.70]  speed=20 wait=0.0s  (pre max|Δ|=4.37°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.01° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.4  +3.4  -4.4  -0.3  +2.1  +0.1  着いた
[SEND] pi05_chunk003_via08: send_angles (single) [ +10.74,  +58.08,  +20.08,   -3.17,  -62.37,  -26.72]  speed=20 wait=0.0s  (pre max|Δ|=3.38°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.75° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.0  +3.0  -3.4  -0.4  +2.9  -1.4  着いた
[SEND] pi05_chunk003_via09: send_angles (single) [ +10.69,  +58.83,  +19.43,   -3.17,  -62.32,  -26.73]  speed=20 wait=0.0s  (pre max|Δ|=2.80°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.80° (tol 3.0°)
       [VIA   ] step  9  Δ= -0.0  +1.0  -0.7  -0.3  +2.8  -1.2  着いた
[STATE ] 目標を渡す  目標と実測の最大差 2.80°（関節 j4）
[004] 推論 572ms  4ステップ先  Δ= -0.0  +1.2  -0.7  -0.3  +3.2  -0.9  グリッパー→閉
       [VIA   ] 中継点 2 点: step 2, 3
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 1 に入りました (推論 4 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+10.7 j1=+58.6 j2=+19.5 j3=-3.0 j4=-64.9 j5=-26.1  グリッパー 開
[SEND] pi05_corr01_000: send_angles (single) [  +9.72,  +58.62,  +19.51,   -2.98,  -64.86,  -26.10]  speed=20 wait=0.0s  (pre max|Δ|=1.32°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.32° (tol 3.0°)
  [補正] j0 届いていない (目標 +9.7 / 実測 +10.3, ずれ 0.56° > 0.50°)
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+9.7 j1=+58.6 j2=+19.5 j3=-3.0 j4=-64.9 j5=-26.1  グリッパー 開
  [補正] 足りなかった 0.6° を足して送る (j0 を -1.6°)
[SEND] pi05_corr01_001: send_angles (single) [  +8.16,  +58.62,  +19.51,   -2.98,  -64.86,  -26.10]  speed=20 wait=0.0s  (pre max|Δ|=2.12°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.32° (tol 3.0°)
  [補正] j0 着いた (目標 +8.2 / 実測 +8.3, ずれ 0.18° ≤ 0.50°)
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+8.2 j1=+58.6 j2=+19.5 j3=-3.0 j4=-64.9 j5=-26.1  グリッパー 開
[SEND] pi05_corr01_002: send_angles (single) [  +9.16,  +58.62,  +19.51,   -2.98,  -64.86,  -26.10]  speed=20 wait=0.0s  (pre max|Δ|=1.32°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.32° (tol 3.0°)
  [補正] j0 着いた (目標 +9.2 / 実測 +9.0, ずれ 0.20° ≤ 0.50°)
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+9.2 j1=+58.6 j2=+19.5 j3=-3.0 j4=-64.9 j5=-26.1  グリッパー 開
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+9.2 j1=+58.6 j2=+19.5 j3=-3.0 j4=-64.9 j5=-26.1  グリッパー 開
[SEND] pi05_corr01_003: send_angles (single) [ +11.16,  +58.62,  +19.51,   -2.98,  -64.86,  -26.10]  speed=20 wait=0.0s  (pre max|Δ|=2.20°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.32° (tol 3.0°)
  [補正] j0 着いた (目標 +11.2 / 実測 +11.0, ずれ 0.18° ≤ 1.00°)
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+11.2 j1=+58.6 j2=+19.5 j3=-3.0 j4=-64.9 j5=-26.1  グリッパー 開
[SEND] pi05_corr01_004: send_angles (single) [ +13.16,  +58.62,  +19.51,   -2.98,  -64.86,  -26.10]  speed=20 wait=0.0s  (pre max|Δ|=2.18°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.73° (tol 3.0°)
  [補正] j0 着いた (目標 +13.2 / 実測 +13.3, ずれ 0.19° ≤ 1.00°)
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+13.2 j1=+58.6 j2=+19.5 j3=-3.0 j4=-64.9 j5=-26.1  グリッパー 開
[CORR  ] 補正 1 を終えました (5 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[005] 推論 685ms  4ステップ先  Δ= +0.1  +1.0  -1.0  +0.0  +1.0  -0.1  グリッパー→閉
       [VIA   ] 中継点 2 点: step 2, 3
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk005_via02: send_angles (single) [ +13.50,  +60.72,  +19.05,   -3.22,  -63.20,  -26.52]  speed=20 wait=0.0s  (pre max|Δ|=1.05°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.39° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.1  +1.0  -1.0  -0.1  +1.0  -0.1  着いた
[SEND] pi05_chunk005_via03: send_angles (single) [ +13.50,  +60.72,  +19.05,   -3.22,  -63.20,  -26.52]  speed=20 wait=0.0s  (pre max|Δ|=1.39°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.39° (tol 3.0°)
       [VIA   ] step  3  Δ= +0.2  -0.7  -1.0  +0.0  +1.4  +0.0  着いた
  [Pi] GRIPPER: VALUE=20 speed=100 result= -1
[STATE ] 目標を渡す  目標と実測の最大差 2.63°（関節 j4）
[006] 推論 1637ms  10ステップ先  Δ= +0.2  -9.4  +6.6  -0.7  +1.3  +0.1
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk006_via02: send_angles (single) [ +13.53,  +59.77,  +19.61,   -2.82,  -63.75,  -26.79]  speed=20 wait=0.0s  (pre max|Δ|=1.66°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.13° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.4  -1.7  -0.3  -0.3  +1.6  +0.1  着いた
[SEND] pi05_chunk006_via05: send_angles (single) [ +13.39,  +56.90,  +22.45,   -2.90,  -64.08,  -26.65]  speed=20 wait=0.0s  (pre max|Δ|=4.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.12° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.3  -4.0  +2.5  -0.4  +0.5  +0.2  着いた
[SEND] pi05_chunk006_via08: send_angles (single) [ +13.33,  +52.94,  +25.86,   -2.87,  -64.59,  -26.64]  speed=20 wait=0.0s  (pre max|Δ|=5.06°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.98° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.2  -5.1  +4.2  +0.2  -2.6  +0.1  着いた
[SEND] pi05_chunk006_via09: send_angles (single) [ +13.27,  +52.03,  +26.52,   -2.84,  -64.57,  -26.75]  speed=20 wait=0.0s  (pre max|Δ|=2.96°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.70° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.2  -2.5  +1.0  +0.6  -3.0  -0.6  着いた
[STATE ] 目標を渡す  目標と実測の最大差 2.70°（関節 j4）
[007] 推論 789ms  10ステップ先  Δ=+10.5  -5.2  -6.6  +2.8  +0.6  -2.8
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 2 に入りました (推論 7 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+13.1 j1=+53.9 j2=+26.4 j3=-3.3 j4=-64.1 j5=-26.2  グリッパー 閉
  [補正] 関節 j2  刻み 1.0°  補正目標 j0=+13.1 j1=+53.9 j2=+26.4 j3=-3.3 j4=-64.1 j5=-26.2  グリッパー 閉
[SEND] pi05_corr02_000: send_angles (single) [ +13.09,  +53.87,  +25.45,   -3.33,  -64.07,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=1.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.91° (tol 3.0°)
  [補正] j2 届いていない (目標 +25.4 / 実測 +26.4, ずれ 0.91° > 0.50°)
  [補正] 関節 j2  刻み 1.0°  補正目標 j0=+13.1 j1=+53.9 j2=+25.4 j3=-3.3 j4=-64.1 j5=-26.2  グリッパー 閉
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.1 j1=+53.9 j2=+25.4 j3=-3.3 j4=-64.1 j5=-26.2  グリッパー 閉
[SEND] pi05_corr02_001: send_angles (single) [ +13.09,  +53.87,  +23.45,   -3.33,  -64.07,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=2.91°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.89° (tol 3.0°)
  [補正] j2 着いた (目標 +23.4 / 実測 +24.3, ずれ 0.89° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.1 j1=+53.9 j2=+23.4 j3=-3.3 j4=-64.1 j5=-26.2  グリッパー 閉
[SEND] pi05_corr02_002: send_angles (single) [ +13.09,  +53.87,  +21.45,   -3.33,  -64.07,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=2.89°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j2 着いた (目標 +21.4 / 実測 +22.4, ずれ 0.96° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.1 j1=+53.9 j2=+21.4 j3=-3.3 j4=-64.1 j5=-26.2  グリッパー 閉
[SEND] pi05_corr02_003: send_angles (single) [ +13.09,  +53.87,  +19.45,   -3.33,  -64.07,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=2.96°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.94° (tol 3.0°)
  [補正] j2 着いた (目標 +19.4 / 実測 +20.4, ずれ 0.94° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.1 j1=+53.9 j2=+19.4 j3=-3.3 j4=-64.1 j5=-26.2  グリッパー 閉
[SEND] pi05_corr02_004: send_angles (single) [ +13.09,  +53.87,  +17.45,   -3.33,  -64.07,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=2.94°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.91° (tol 3.0°)
  [補正] j2 着いた (目標 +17.4 / 実測 +18.4, ずれ 0.91° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.1 j1=+53.9 j2=+17.4 j3=-3.3 j4=-64.1 j5=-26.2  グリッパー 閉
[SEND] pi05_corr02_005: send_angles (single) [ +13.09,  +53.87,  +15.45,   -3.33,  -64.07,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=2.91°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.98° (tol 3.0°)
  [補正] j2 着いた (目標 +15.4 / 実測 +16.4, ずれ 0.98° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.1 j1=+53.9 j2=+15.4 j3=-3.3 j4=-64.1 j5=-26.2  グリッパー 閉
[SEND] pi05_corr02_006: send_angles (single) [ +13.09,  +53.87,  +13.45,   -3.33,  -64.07,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=2.98°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.13° (tol 3.0°)
  [補正] j2 届いていない (目標 +13.4 / 実測 +14.6, ずれ 1.13° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.1 j1=+53.9 j2=+13.4 j3=-3.3 j4=-64.1 j5=-26.2  グリッパー 閉
  [補正] 足りなかった 1.1° を足して送る (j2 を -3.1°)
[SEND] pi05_corr02_007: send_angles (single) [ +13.09,  +53.87,  +10.32,   -3.33,  -64.07,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=4.26°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.01° (tol 3.0°)
  [補正] j2 届いていない (目標 +10.3 / 実測 +11.3, ずれ 1.01° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.1 j1=+53.9 j2=+10.3 j3=-3.3 j4=-64.1 j5=-26.2  グリッパー 閉
  [補正] 足りなかった 1.0° を足して送る (j2 を -3.0°)
[SEND] pi05_corr02_008: send_angles (single) [ +13.09,  +53.87,   +7.31,   -3.33,  -64.07,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=4.02°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.03° (tol 3.0°)
  [補正] j2 届いていない (目標 +7.3 / 実測 +8.3, ずれ 1.03° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.1 j1=+53.9 j2=+7.3 j3=-3.3 j4=-64.1 j5=-26.2  グリッパー 閉
  [補正] 足りなかった 1.0° を足して送る (j2 を -3.0°)
[SEND] pi05_corr02_009: send_angles (single) [ +13.09,  +53.87,   +4.28,   -3.33,  -64.07,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=4.06°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.08° (tol 3.0°)
  [補正] j2 届いていない (目標 +4.3 / 実測 +5.4, ずれ 1.08° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.1 j1=+53.9 j2=+4.3 j3=-3.3 j4=-64.1 j5=-26.2  グリッパー 閉
  [補正] 足りなかった 1.1° を足して送る (j2 を -3.1°)
[SEND] pi05_corr02_010: send_angles (single) [ +13.09,  +53.87,   +1.20,   -3.33,  -64.07,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=4.16°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.08° (tol 3.0°)
  [補正] j2 届いていない (目標 +1.2 / 実測 +2.3, ずれ 1.08° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.1 j1=+53.9 j2=+1.2 j3=-3.3 j4=-64.1 j5=-26.2  グリッパー 閉
[CORR  ] 補正 2 を終えました (11 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[008] 推論 1754ms  10ステップ先  Δ=+17.0  -5.7  +0.6  +2.9  +2.6  -1.4
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk008_via02: send_angles (single) [ +14.30,  +52.99,   +3.88,   -2.60,  -65.02,  -25.94]  speed=20 wait=0.0s  (pre max|Δ|=1.76°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.76° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.2  -1.8  +1.6  +0.6  -0.6  +0.3  着いた
[SEND] pi05_chunk008_via05: send_angles (single) [ +19.78,  +50.92,   +4.12,   -1.73,  -64.22,  -26.00]  speed=20 wait=0.0s  (pre max|Δ|=5.63°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.07° (tol 3.0°)
       [VIA   ] step  5  Δ= +5.6  -3.8  -0.5  +1.2  +0.2  +0.2  着いた
[SEND] pi05_chunk008_via08: send_angles (single) [ +28.12,  +49.34,   +3.06,   -0.57,  -62.71,  -27.21]  speed=20 wait=0.0s  (pre max|Δ|=8.35°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.33° (tol 3.0°)
       [VIA   ] step  8  Δ= +8.3  -3.6  -1.5  +1.0  +1.7  -1.0  着いた
[SEND] pi05_chunk008_via09: send_angles (single) [ +30.13,  +49.01,   +2.86,   -0.24,  -61.80,  -27.62]  speed=20 wait=0.0s  (pre max|Δ|=2.66°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.49° (tol 3.0°)
       [VIA   ] step  9  Δ= +2.2  -2.7  -1.7  +0.5  +1.4  -1.1  着いた
[STATE ] 目標を渡す  目標と実測の最大差 2.49°（関節 j1）
[009] 推論 801ms  10ステップ先  Δ=+10.0  +3.9 -10.0  +2.7  +4.8  -3.1
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk009_via02: send_angles (single) [ +36.28,  +49.09,   -0.70,   +0.74,  -59.41,  -28.50]  speed=20 wait=0.0s  (pre max|Δ|=6.31°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.41° (tol 3.0°)
       [VIA   ] step  2  Δ= +6.3  -2.4  -5.3  +0.9  +2.6  -1.3  着いた
[SEND] pi05_chunk009_via05: send_angles (single) [ +39.86,  +50.06,   -3.66,   +1.80,  -56.97,  -29.68]  speed=20 wait=0.0s  (pre max|Δ|=4.27°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.44° (tol 3.0°)
       [VIA   ] step  5  Δ= +3.6  -1.4  -4.3  +0.8  +2.8  -1.6  着いた
[SEND] pi05_chunk009_via08: send_angles (single) [ +40.11,  +54.13,   -5.05,   +2.43,  -56.92,  -30.28]  speed=20 wait=0.0s  (pre max|Δ|=2.63°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.72° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.1  +2.6  -2.6  +0.3  +0.4  -1.0  着いた
[SEND] pi05_chunk009_via09: send_angles (single) [ +39.99,  +55.42,   -5.44,   +2.54,  -57.22,  -30.38]  speed=20 wait=0.0s  (pre max|Δ|=2.11°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.58° (tol 3.0°)
       [VIA   ] step  9  Δ= -0.0  +0.1  -2.1  +0.4  -0.1  -0.4  着いた
[STATE ] 目標を渡す  目標と実測の最大差 1.58°（関節 j2）
[010] 推論 644ms  8ステップ先  Δ= -0.1  +5.4  -1.7  +0.9  -6.3  -0.4  グリッパー→開
       [VIA   ] 中継点 3 点: step 2, 5, 7
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk010_via02: send_angles (single) [ +39.86,  +60.37,   -5.49,   +2.80,  -61.20,  -30.43]  speed=20 wait=0.0s  (pre max|Δ|=4.34°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.32° (tol 3.0°)
       [VIA   ] step  2  Δ= -0.1  +3.7  -1.6  +0.5  -4.3  -0.4  着いた
[SEND] pi05_chunk010_via05: send_angles (single) [ +39.94,  +62.58,   -5.55,   +2.96,  -63.16,  -30.46]  speed=20 wait=0.0s  (pre max|Δ|=4.28°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.69° (tol 3.0°)
       [VIA   ] step  5  Δ= -0.1  +1.1  -1.7  +0.4  -4.3  -0.4  着いた
[SEND] pi05_chunk010_via07: send_angles (single) [ +39.90,  +62.10,   -5.54,   +3.05,  -63.19,  -30.46]  speed=20 wait=0.0s  (pre max|Δ|=1.70°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.70° (tol 3.0°)
       [VIA   ] step  7  Δ= -0.1  -1.7  -1.7  +0.3  -0.7  -0.3  着いた

  [Pi] GRIPPER: OPEN result= -1
[STATE ] 目標を渡す  目標と実測の最大差 1.70°（関節 j1）
[011] 推論 761ms  10ステップ先  Δ= -1.1 -19.6  -1.0  -0.4 +17.3  -1.0
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk011_via02: send_angles (single) [ +40.07,  +57.91,   -5.53,   +2.90,  -59.52,  -30.58]  speed=20 wait=0.0s  (pre max|Δ|=5.89°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.00° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.1  -5.9  -1.7  +0.1  +3.0  -0.4  着いた
[SEND] pi05_chunk011_via05: send_angles (single) [ +40.58,  +53.11,   -5.59,   +2.84,  -54.39,  -30.84]  speed=20 wait=0.0s  (pre max|Δ|=7.13°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.08° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.6  -6.7  -1.6  +0.0  +7.1  -0.6  着いた
[SEND] pi05_chunk011_via08: send_angles (single) [ +39.89,  +46.69,   -5.17,   +2.59,  -47.67,  -31.11]  speed=20 wait=0.0s  (pre max|Δ|=8.50°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.17° (tol 3.0°)
       [VIA   ] step  8  Δ= -0.1  -8.5  -1.2  -0.2  +8.1  -0.6  着いた
[SEND] pi05_chunk011_via09: send_angles (single) [ +38.92,  +44.23,   -4.85,   +2.39,  -45.19,  -31.19]  speed=20 wait=0.0s  (pre max|Δ|=4.63°, post-send timeout 8.0s)

[SEND] arrival OK: max|Δ|=2.00° (tol 3.0°)
       [VIA   ] step  9  Δ= -1.1  -4.6  -0.9  -0.4  +3.5  -0.4  着いた
[STATE ] 目標を渡す  目標と実測の最大差 2.00°（関節 j1）
[012] 推論 1583ms  10ステップ先  Δ=-21.8 -29.3  +0.8  -3.7 +28.6  +0.0
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk012_via02: send_angles (single) [ +33.80,  +36.84,   -4.51,   +1.55,  -37.59,  -31.11]  speed=20 wait=0.0s  (pre max|Δ|=9.39°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.00° (tol 3.0°)
       [VIA   ] step  2  Δ= -5.4  -9.4  -0.6  -1.6  +8.2  -0.3  着いた
[SEND] pi05_chunk012_via05: send_angles (single) [ +27.25,  +28.74,   -3.98,   +0.61,  -29.33,  -30.99]  speed=20 wait=0.0s  (pre max|Δ|=10.10°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.84° (tol 3.0°)
       [VIA   ] step  5  Δ= -6.8 -10.1  -0.0  -1.5  +8.7  -0.1  着いた
[SEND] pi05_chunk012_via08: send_angles (single) [ +19.76,  +19.59,   -3.36,   -0.30,  -20.20,  -30.88]  speed=20 wait=0.0s  (pre max|Δ|=10.99°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.67° (tol 3.0°)
       [VIA   ] step  8  Δ= -7.7 -11.0  -0.0  -1.3  +9.3  +0.1  着いた
[SEND] pi05_chunk012_via09: send_angles (single) [ +17.42,  +16.88,   -3.14,   -0.53,  -17.48,  -30.82]  speed=20 wait=0.0s  (pre max|Δ|=4.38°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.57° (tol 3.0°)
       [VIA   ] step  9  Δ= -2.8  -4.4  -0.3  -0.7  +3.0  +0.2  着いた
[STATE ] 目標を渡す  目標と実測の最大差 1.57°（関節 j1）
[013] 推論 577ms  10ステップ先  Δ=-10.0 -13.4  -0.0  -0.1 +11.7  +0.4
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > h
[SEND] pi05_home: send_angles (single) [  +0.00,   +0.00,   +0.00,   +0.00,   +0.00,  -30.00]  speed=20 wait=0.0s  (pre max|Δ|=18.45°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.58° (tol 2.5°)
[RECORD] 記録終了 コマ 1599 (8.713 fps) 実測角 915 回 (4.99 Hz)  → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_180435/recording
       結果: y=成功 / n=失敗 / Enter=記録しない > y
[DONE  ] 記録: /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_180435
[CLIENT] run_policy_client.py が終わった (終了コード 0)
    (220 秒)
もう1回やりますか? y=やる / 他=終わる > 

=== かかった時間
  1. Pod を作る                      2 秒
  2. Pod が立ち上がるまで待つ     17 秒
  3a. スクリプトを送る         31 秒
  3b. huggingface_hub を入れ, 鍵を渡す     10 秒
  3c. モデルを取る (hf download)     11 秒
  3d. openpi を取る (215abfb)       14 秒
  3e. uv sync                          20 秒
  3f. addon・設定・assets           2 秒
  4. サーバーの起動             40 秒
  5. Mac の 8000 番へのトンネル      3 秒
  6. デーモンの状態              2 秒
  7. HOME → 爪を開く → 位置合わせ (1 回目)     51 秒
  8. 実機推論 (1 回目)          270 秒
  7. HOME → 爪を開く → 位置合わせ (2 回目)     20 秒
  8. 実機推論 (2 回目)          232 秒
  7. HOME → 爪を開く → 位置合わせ (3 回目)     17 秒
  8. 実機推論 (3 回目)          220 秒

[LAB   ] Pod は残しています (id kay1uafshbx7dj). 片付けは ./lab_stop.sh --log Log17
[TUNNEL] 8000 番のトンネルを閉じました
```


## 18:13 に起動し直すと、残っていた Pod の所で止まった

3回目のあと「もう1回やりますか?」で終え、まだ試していない確かめ（知らない文字を打ってもアームが動かないか）のために、もう一度 `lab_start.sh` を打ちました。すると、同じ Log17 の Pod がまだ残っていたため、新しく作らずに止まりました。同じ Log で Pod を2台借りないための決まりです。

### lab_start_20261031_181304.txt

```text
[LAB   ] 2026-10-31 18:13:05  GPU=NVIDIA A40  episode=run_0001_20261019_194818  log=/Volumes/KIOXIA/r2r2r-data/lab/Log17  

=== 1. Pod を作る
[WARN  ] Log17 の Pod (id kay1uafshbx7dj) がまだ残っています. 新しく作らずに止まります.
         消すなら ./lab_stop.sh --log Log17
```

このときは `lab_stop.sh` で Pod を消してから、起動し直しました。残っている Pod につなぎ直せるようにする直しは、このあと依頼44として Claude Code に頼んでいます。

### lab_stop_20261031_181523.txt

```text
[STOP  ] Log17 の Pod: id kay1uafshbx7dj  GPU=NVIDIA A40  作った時刻 2026-10-31 17:52:06
[LOG   ] serve.log を持ち帰った → /Volumes/KIOXIA/r2r2r-data/lab/Log17/serve.log (27 行)
[STOP  ] Terminate を送った (18:15:31)
[STOP  ] Pod (id kay1uafshbx7dj) が消えたことを API で確かめた
[COST  ] 借りていた時間 23 分 25 秒 (0.39 時間) × 1時間 0.59 ドル = 約 0.23 ドル (約 36 円. 1ドル=158円)
[TUNNEL] 8000 番のトンネルは残っていません
```


## 実機の4〜8回目（18:15〜18:44）：成功3回・失敗2回、知らない文字で動かないことも確かめた

4回目の最初の確認で、知らない文字（`x` と大文字の `R`）を打つと、「分からない入力」と出て同じ確認がもう一度出ました。チャンクは実行されず、アームは動きませんでした。前の回の依頼40で直した所が、実機でも効いています。補正の外で `r` を押すと、爪の締め直しだけが起きることも、この起動の中で確かめました。

| 回 | 記録の名前 | 結果 | 補正 |
|---|---|---|---|
| 4回目 | pi05_20261031_181946 | 成功 | j0 を +2.0°、j2 を −29.3° |
| 5回目 | pi05_20261031_182545 | 成功 | j0 を +4.0°。つかむ前に j1・j2・j3・j4 を何度か直し、つかんだあと j1 を −10.0°・j2 を −19.0° |
| 6回目 | pi05_20261031_183219 | 失敗 | j2 を +2.9°・j3 を −2.0°。爪を閉じた次のチャンクで h を押して終えた |
| 7回目 | pi05_20261031_183426 | 失敗 | 5回直した。最初の推論のあと手首 j4 を −27.4° 直すところから始まった |
| 8回目 | pi05_20261031_184016 | 成功 | j0 を +2.0°、j2 を −31.4° |

失敗の3回について、この記録だけでは、何が起きたかを言い切れません。結果の y と n は、その場で見て付けたものです。

### 4〜8回目の端末の記録 lab_start_20261031_181532.txt

```text
[LAB   ] 2026-10-31 18:15:32  GPU=NVIDIA A40  episode=run_0001_20261019_194818  log=/Volumes/KIOXIA/r2r2r-data/lab/Log17  

=== 1. Pod を作る
[POD   ] 作った: id 74ms0zqc1as65g  GPU=NVIDIA A40  1時間 0.59 ドル  (記録 /Volumes/KIOXIA/r2r2r-data/lab/Log17/pod/lab_pod.json)
    (3 秒)

=== 2. Pod が立ち上がるまで待つ
[POD   ] SSH の IP とポートを API から受け取った (<POD_IP>:<SSH_PORT>)
[POD   ] 入れた: ac175319dcb2
NVIDIA A40, 46068 MiB
    (52 秒)

=== 3a. スクリプトを送る
    (47 秒)

=== 3b. huggingface_hub を入れ, 鍵を渡す
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.
[90mHint: The `hf-cli` skill is not installed. Run `hf skills add -g` to teach your AI agents how to use the `hf` CLI.[0m
[32m✓ Logged in[0m
  user: PixelstoMotors
    (13 秒)

=== 3c. モデルを取る (hf download)

Fetching 33 files:   0%|          | 0/33 [00:00<?, ?it/s]
Fetching 33 files:   3%|▎         | 1/33 [00:00<00:10,  3.16it/s]
Fetching 33 files:  27%|██▋       | 9/33 [00:00<00:01, 16.13it/s]
Fetching 33 files:  33%|███▎      | 11/33 [00:02<00:06,  3.59it/s]
Fetching 33 files:  36%|███▋      | 12/33 [00:03<00:06,  3.21it/s]
Fetching 33 files:  39%|███▉      | 13/33 [00:03<00:07,  2.58it/s]
Fetching 33 files:  42%|████▏     | 14/33 [00:06<00:15,  1.22it/s]
Fetching 33 files:  45%|████▌     | 15/33 [00:07<00:16,  1.09it/s]
Fetching 33 files:  48%|████▊     | 16/33 [00:09<00:19,  1.12s/it]
Fetching 33 files:  52%|█████▏    | 17/33 [00:09<00:15,  1.03it/s]
Fetching 33 files:  55%|█████▍    | 18/33 [00:09<00:11,  1.32it/s]
Fetching 33 files:  58%|█████▊    | 19/33 [00:10<00:08,  1.67it/s]
Fetching 33 files:  61%|██████    | 20/33 [00:10<00:07,  1.76it/s]
Fetching 33 files:  64%|██████▎   | 21/33 [00:10<00:05,  2.27it/s]
Fetching 33 files:  70%|██████▉   | 23/33 [00:11<00:03,  3.16it/s]
Fetching 33 files:  73%|███████▎  | 24/33 [00:12<00:04,  2.16it/s]
Fetching 33 files:  76%|███████▌  | 25/33 [00:12<00:03,  2.33it/s]
Fetching 33 files:  82%|████████▏ | 27/33 [00:12<00:01,  3.61it/s]
Fetching 33 files:  85%|████████▍ | 28/33 [00:12<00:01,  4.05it/s]
Fetching 33 files:  88%|████████▊ | 29/33 [00:13<00:01,  3.41it/s]
Fetching 33 files:  91%|█████████ | 30/33 [00:14<00:01,  1.83it/s]
Fetching 33 files:  94%|█████████▍| 31/33 [00:15<00:01,  1.56it/s]
Fetching 33 files:  97%|█████████▋| 32/33 [00:15<00:00,  1.82it/s][32m✓ Downloaded[0m
  path: /workspace/ckpt/3999

Fetching 33 files: 100%|██████████| 33/33 [00:15<00:00,  2.22it/s]
Fetching 33 files: 100%|██████████| 33/33 [00:15<00:00,  2.09it/s]
6.0G	/workspace/ckpt/3999
    (20 秒)

=== 3d. openpi を取る (215abfb)
215abfb docs(droid): fix config search instruction (#1023)
    (21 秒)

=== 3e. uv sync
downloading uv 0.13.6 x86_64-unknown-linux-gnu
WARN: The following commands are shadowed by other commands in your PATH: uv uvx
Using CPython 3.11.13 interpreter at: /usr/bin/python3.11
Creating virtual environment at: .venv
Resolved 279 packages in 3ms
   Building openpi-client @ file:///workspace/openpi/packages/openpi-client
   Building openpi @ file:///workspace/openpi
   Updating https://github.com/huggingface/lerobot (0cf864870cf29f4738d3ade893e6fd13fbd7cdb5)
Downloading numpy (17.4MiB)
Downloading mujoco (4.4MiB)
Downloading imageio-ffmpeg (28.1MiB)
Downloading hf-xet (4.9MiB)
Downloading h5py (4.3MiB)
Downloading hf-transfer (3.4MiB)
Downloading diffusers (3.4MiB)
Downloading sympy (6.0MiB)
Downloading nvidia-cuda-nvcc-cu12 (38.7MiB)
Downloading torchvision (7.1MiB)
Downloading tensorstore (17.5MiB)
Downloading nvidia-cusparselt-cu12 (149.5MiB)
Downloading numba (3.7MiB)
Downloading labmaze (4.7MiB)
Downloading nvidia-curand-cu12 (53.7MiB)
Downloading opencv-python-headless (47.7MiB)
Downloading polars (34.6MiB)
Downloading numcodecs (8.4MiB)
Downloading opencv-python (60.1MiB)
Downloading virtualenv (5.8MiB)
Downloading rerun-sdk (68.1MiB)
Downloading pillow (4.4MiB)
Downloading nvidia-nvjitlink-cu12 (18.8MiB)
Downloading scipy (35.9MiB)
Downloading lxml (4.7MiB)
Downloading nvidia-nccl-cu12 (192.0MiB)
Downloading jaxlib (100.2MiB)
Downloading jax-cuda12-pjrt (99.8MiB)
Downloading nvidia-cuda-cupti-cu12 (8.5MiB)
Downloading dm-control (37.5MiB)
Downloading transformers (10.3MiB)
Downloading cmake (26.6MiB)
Downloading fonttools (4.7MiB)
Downloading nvidia-cudnn-cu12 (544.5MiB)
Downloading nvidia-cusolver-cu12 (150.9MiB)
Downloading nvidia-cublas-cu12 (374.9MiB)
Downloading triton (148.5MiB)
Downloading torch (783.1MiB)
Downloading ruff (11.0MiB)
Downloading nvidia-cuda-nvrtc-cu12 (22.6MiB)
Downloading llvmlite (40.4MiB)
Downloading av (34.7MiB)
Downloading pandas (12.5MiB)
Downloading pyopengl (3.0MiB)
Downloading pyarrow (40.3MiB)
Downloading nvidia-cusparse-cu12 (206.5MiB)
Downloading jax-cuda12-plugin (15.9MiB)
Downloading nvidia-cufft-cu12 (190.9MiB)
Downloading matplotlib (8.2MiB)
Downloading wandb (20.4MiB)
 Downloaded pyopengl
 Downloaded diffusers
 Downloaded hf-transfer
Downloading tokenizers (2.9MiB)
Downloading debugpy (3.0MiB)
Downloading jax (2.3MiB)
 Downloaded numba
Downloading widgetsnbextension (2.1MiB)
 Downloaded h5py
 Downloaded pillow
Downloading ml-dtypes (2.1MiB)
Downloading networkx (1.9MiB)
 Downloaded lxml
 Downloaded fonttools
 Downloaded labmaze
Downloading jedi (1.5MiB)
Downloading aiohttp (1.6MiB)
Downloading pydantic-core (1.9MiB)
 Downloaded hf-xet
Downloading kiwisolver (1.4MiB)
 Downloaded virtualenv
 Downloaded widgetsnbextension
 Downloaded jax
Downloading torchcodec (1.3MiB)
Downloading sentencepiece (1.2MiB)
Downloading pygments (1.2MiB)
 Downloaded sympy
Downloading setuptools (1.1MiB)
 Downloaded networkx
Downloading nvidia-cufile-cu12 (1.1MiB)
 Downloaded ml-dtypes
 Downloaded tokenizers
Downloading pymunk (1.0MiB)
 Downloaded aiohttp
 Downloaded mujoco
 Downloaded debugpy
 Downloaded jedi
 Downloaded kiwisolver
 Downloaded pydantic-core
 Downloaded torchvision
 Downloaded sentencepiece
 Downloaded torchcodec
 Downloaded pygments
 Downloaded setuptools
 Downloaded nvidia-cufile-cu12
 Downloaded pymunk
 Downloaded matplotlib
 Downloaded numcodecs
 Downloaded nvidia-cuda-cupti-cu12
   Building evdev==1.9.2
 Downloaded transformers
 Downloaded ruff
   Building antlr4-python3-runtime==4.9.3
 Downloaded pandas
 Downloaded jax-cuda12-plugin
 Downloaded numpy
 Downloaded tensorstore
 Downloaded nvidia-nvjitlink-cu12
      Built openpi-client @ file:///workspace/openpi/packages/openpi-client
      Built openpi @ file:///workspace/openpi
 Downloaded wandb
 Downloaded nvidia-cuda-nvrtc-cu12
 Downloaded imageio-ffmpeg
      Built antlr4-python3-runtime==4.9.3
 Downloaded polars
 Downloaded av
 Downloaded scipy
 Downloaded cmake
 Downloaded dm-control
 Downloaded nvidia-cuda-nvcc-cu12
 Downloaded llvmlite
 Downloaded pyarrow
 Downloaded opencv-python-headless
 Downloaded nvidia-curand-cu12
 Downloaded opencv-python
 Downloaded rerun-sdk
      Built evdev==1.9.2
 Downloaded jax-cuda12-pjrt
 Downloaded jaxlib
 Downloaded triton
 Downloaded nvidia-cusparselt-cu12
 Downloaded nvidia-cusolver-cu12
    Updated https://github.com/huggingface/lerobot (0cf864870cf29f4738d3ade893e6fd13fbd7cdb5)
   Building lerobot @ git+https://github.com/huggingface/lerobot@0cf864870cf29f4738d3ade893e6fd13fbd7cdb5
 Downloaded nvidia-cufft-cu12
 Downloaded nvidia-nccl-cu12
 Downloaded nvidia-cusparse-cu12
      Built lerobot @ git+https://github.com/huggingface/lerobot@0cf864870cf29f4738d3ade893e6fd13fbd7cdb5
 Downloaded nvidia-cublas-cu12
 Downloaded nvidia-cudnn-cu12
 Downloaded torch
Prepared 240 packages in 14.15s
Installed 240 packages in 1.46s
 + absl-py==2.3.0
 + aiohappyeyeballs==2.6.1
 + aiohttp==3.12.4
 + aiosignal==1.3.2
 + annotated-types==0.7.0
 + antlr4-python3-runtime==4.9.3
 + asttokens==3.0.0
 + attrs==25.3.0
 + augmax==0.4.1
 + av==17.0.0
 + beartype==0.19.0
 + beautifulsoup4==4.13.4
 + blinker==1.9.0
 + cachetools==5.5.2
 + certifi==2025.4.26
 + cffi==1.17.1
 + cfgv==3.4.0
 + charset-normalizer==3.4.2
 + chex==0.1.90
 + click==8.2.1
 + cloudpickle==3.1.1
 + cmake==4.0.2
 + comm==0.2.2
 + contourpy==1.3.2
 + crc32c==2.7.1
 + cycler==0.12.1
 + datasets==3.6.0
 + debugpy==1.8.14
 + decorator==5.2.1
 + deepdiff==8.5.0
 + diffusers==0.33.1
 + dill==0.3.8
 + distlib==0.3.9
 + dm-control==1.0.14
 + dm-env==1.6
 + dm-tree==0.1.9
 + docker-pycreds==0.4.0
 + docstring-parser==0.16
 + donfig==0.8.1.post1
 + draccus==0.10.0
 + einops==0.8.1
 + equinox==0.12.2
 + etils==1.12.2
 + evdev==1.9.2
 + executing==2.2.0
 + farama-notifications==0.0.4
 + filelock==3.18.0
 + flask==3.1.1
 + flatbuffers==25.2.10
 + flax==0.10.2
 + fonttools==4.58.1
 + frozenlist==1.6.0
 + fsspec==2025.3.0
 + gcsfs==2025.3.0
 + gdown==5.2.0
 + gitdb==4.0.12
 + gitpython==3.1.44
 + glfw==2.9.0
 + google-api-core==2.24.2
 + google-auth==2.40.2
 + google-auth-oauthlib==1.2.2
 + google-cloud-core==2.4.3
 + google-cloud-storage==3.1.0
 + google-crc32c==1.7.1
 + google-resumable-media==2.7.2
 + googleapis-common-protos==1.70.0
 + gym-aloha==0.1.1
 + gymnasium==0.29.1
 + h5py==3.13.0
 + hf-transfer==0.1.9
 + hf-xet==1.1.2
 + huggingface-hub==0.32.3
 + humanize==4.12.3
 + identify==2.6.12
 + idna==3.10
 + imageio==2.37.0
 + imageio-ffmpeg==0.6.0
 + importlib-metadata==8.7.0
 + importlib-resources==6.5.2
 + iniconfig==2.1.0
 + inquirerpy==0.3.4
 + ipykernel==6.29.5
 + ipython==9.2.0
 + ipython-pygments-lexers==1.1.1
 + ipywidgets==8.1.7
 + itsdangerous==2.2.0
 + jax==0.5.3
 + jax-cuda12-pjrt==0.5.3
 + jax-cuda12-plugin==0.5.3
 + jaxlib==0.5.3
 + jaxtyping==0.2.36
 + jedi==0.19.2
 + jinja2==3.1.6
 + jsonlines==4.0.0
 + jupyter-client==8.6.3
 + jupyter-core==5.8.1
 + jupyterlab-widgets==3.0.15
 + kiwisolver==1.4.8
 + labmaze==1.0.6
 + lerobot==0.1.0 (from git+https://github.com/huggingface/lerobot@0cf864870cf29f4738d3ade893e6fd13fbd7cdb5)
 + llvmlite==0.44.0
 + lxml==5.4.0
 + markdown-it-py==3.0.0
 + markupsafe==3.0.2
 + matplotlib==3.10.3
 + matplotlib-inline==0.1.7
 + mdurl==0.1.2
 + mergedeep==1.3.4
 + ml-collections==1.0.0
 + ml-dtypes==0.4.1
 + mpmath==1.3.0
 + msgpack==1.1.0
 + mujoco==2.3.7
 + multidict==6.4.4
 + multiprocess==0.70.16
 + mypy-extensions==1.1.0
 + nest-asyncio==1.6.0
 + networkx==3.5
 + nodeenv==1.9.1
 + numba==0.61.2
 + numcodecs==0.16.1
 + numpy==1.26.4
 + numpydantic==1.6.9
 + nvidia-cublas-cu12==12.6.4.1
 + nvidia-cuda-cupti-cu12==12.6.80
 + nvidia-cuda-nvcc-cu12==12.9.41
 + nvidia-cuda-nvrtc-cu12==12.6.77
 + nvidia-cuda-runtime-cu12==12.6.77
 + nvidia-cudnn-cu12==9.5.1.17
 + nvidia-cufft-cu12==11.3.0.4
 + nvidia-cufile-cu12==1.11.1.6
 + nvidia-curand-cu12==10.3.7.77
 + nvidia-cusolver-cu12==11.7.1.2
 + nvidia-cusparse-cu12==12.5.4.2
 + nvidia-cusparselt-cu12==0.6.3
 + nvidia-ml-py==12.575.51
 + nvidia-nccl-cu12==2.26.2
 + nvidia-nvjitlink-cu12==12.6.85
 + nvidia-nvtx-cu12==12.6.77
 + oauthlib==3.2.2
 + omegaconf==2.3.0
 + opencv-python==4.11.0.86
 + opencv-python-headless==4.11.0.86
 + openpi==0.1.0 (from file:///workspace/openpi)
 + openpi-client==0.1.0 (from file:///workspace/openpi/packages/openpi-client)
 + opt-einsum==3.4.0
 + optax==0.2.4
 + orbax-checkpoint==0.11.13
 + orderly-set==5.4.1
 + packaging==25.0
 + pandas==2.2.3
 + parso==0.8.4
 + pexpect==4.9.0
 + pfzy==0.3.4
 + pillow==11.2.1
 + platformdirs==4.3.8
 + pluggy==1.6.0
 + polars==1.30.0
 + pre-commit==4.2.0
 + prompt-toolkit==3.0.51
 + propcache==0.3.1
 + proto-plus==1.26.1
 + protobuf==4.25.8
 + psutil==7.0.0
 + ptyprocess==0.7.0
 + pure-eval==0.2.3
 + pyarrow==20.0.0
 + pyasn1==0.6.1
 + pyasn1-modules==0.4.2
 + pycparser==2.22
 + pydantic==2.11.5
 + pydantic-core==2.33.2
 + pygments==2.19.1
 + pymunk==7.0.0
 + pynput==1.8.1
 + pynvml==12.0.0
 + pyopengl==3.1.9
 + pyparsing==3.2.3
 + pysocks==1.7.1
 + pytest==8.3.5
 + python-dateutil==2.9.0.post0
 + python-xlib==0.33
 + pytz==2025.2
 + pyyaml==6.0.2
 + pyyaml-include==1.4.1
 + pyzmq==26.4.0
 + regex==2024.11.6
 + requests==2.32.3
 + requests-oauthlib==2.0.0
 + rerun-sdk==0.23.1
 + rich==14.0.0
 + rsa==4.9.1
 + ruff==0.11.12
 + safetensors==0.5.3
 + scipy==1.15.3
 + sentencepiece==0.2.0
 + sentry-sdk==2.29.1
 + setproctitle==1.3.6
 + setuptools==80.9.0
 + shtab==1.7.2
 + simplejson==3.20.1
 + six==1.17.0
 + smmap==5.0.2
 + soupsieve==2.7
 + stack-data==0.6.3
 + sympy==1.14.0
 + tensorstore==0.1.74
 + termcolor==3.1.0
 + tokenizers==0.21.1
 + toml==0.10.2
 + toolz==1.0.0
 + torch==2.7.1
 + torchcodec==0.4.0
 + torchvision==0.22.1
 + tornado==6.5.1
 + tqdm==4.67.1
 + tqdm-loggable==0.2
 + traitlets==5.14.3
 + transformers==4.53.2
 + treescope==0.1.9
 + triton==3.3.1
 + typeguard==4.4.2
 + typing-extensions==4.13.2
 + typing-inspect==0.9.0
 + typing-inspection==0.4.1
 + tyro==0.9.22
 + tzdata==2025.2
 + urllib3==2.4.0
 + virtualenv==20.31.2
 + wadler-lindig==0.1.6
 + wandb==0.19.11
 + wcwidth==0.2.13
 + websockets==15.0.1
 + werkzeug==3.1.3
 + widgetsnbextension==4.0.14
 + wrapt==1.14.1
 + xxhash==3.5.0
 + yarl==1.20.0
 + zarr==3.0.8
 + zipp==3.22.0
    (19 秒)

=== 3f. addon・設定・assets
installed: policies/mecharm_policy.py + config.py (pi05_mecharm_lora)
installed: pi05_mecharm_trim_lora (repo_id=local/mecharm_redblock_box_teach_v1_trim2, 4,000 steps)
    (4 秒)

=== 4. サーバーの起動
INFO:websockets.server:server listening on 0.0.0.0:8000
    (48 秒)

=== 5. Mac の 8000 番へのトンネル
[TUNNEL] localhost:8000 → Pod の 8000 番 (pid 59017. このスクリプトが終わると閉じる)
    (4 秒)

=== 6. デーモンの状態
--- process
521 /usr/bin/python3 -u /home/ubuntu/mecharm_daemon.py
--- 5555
LISTEN   0         1                   0.0.0.0:5555             0.0.0.0:*       
--- systemd
enabled: enabled
active:  active
    (2 秒)

=== 7. HOME → 爪を開く → 位置合わせ (1 回目)
[INIT] daemon 接続中...
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[INIT] fresh_mode=1
[PRE]  現在姿勢: [-0.08, 1.58, 0.70, -0.17, -0.17, -30.23]
[SEND] HOME へ移動指令
[WAIT] t=2.1s  max_err=1.58°
[DONE] HOME 到達 max_err=1.58°
[POST] 最終姿勢: [-0.08, 1.58, 0.70, -0.17, -0.17, -30.23]
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[EXIT] fresh_mode=0, socket close
  [Pi] GRIPPER: OPEN result= -1
[REF   ] 基準画像: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_194818/frames/000000.jpg
[REF   ] お手本 run_0001_20261019_194818 (つかんだ瞬間の j0 = +13.2°)
[REF   ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける
[ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない)
[ALIGN ] dy=  +0.7  dx=  -2.1  response=0.903  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[DONE  ] 終了 (何も書いていません)
    (20 秒)

=== 8. 実機推論 (1 回目)
[WAIT  ] 送ったあと 0.0s / 爪のあと 0.8s (開くときの daemon 0.0s) / 止まるのを待つ目安 0.8s
[SAFE  ] 安全範囲 (学習 19 本 ±10°): j0[-72,+55]  j1[-9,+88]  j2[-46,+41]  j3[-18,+27]  j4[-90,+10]  j5[-51,-14]
[SAFE  ] 肩 j1 の上限は J1_SAFE_MAX=88° で切った (これを超える指令はアームが黙って捨てる / LOG352)  元データ: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes
[MODE  ] EXECUTE  steps/chunk=10  max_move=20.0°  log=/Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_181946
[CAMERA] 写り方 dy=-5.7 dx=+4.7 response=0.565 → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[CAMERA] 基準: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_183454/frames/000000.jpg
[POLICY] 接続 ws://localhost:8000  metadata={}
[RECORD] 上カメラと実測角を 1 秒 10 コマで記録します → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_181946/recording
[GRIP  ] 開始時のグリッパー開放は, 最初の目標が検査を通ってから行います (爪が閉じていたら手で開けておく)
[STATE ] 実測を渡す (直前に送った目標がない)
[000] 推論 61017ms  10ステップ先  Δ= +4.2 +17.1 +10.8  -2.3 -24.5  +3.1
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[GRIP  ] 開始時にグリッパーを開く
  [Pi] GRIPPER: OPEN result= -1
[SEND] pi05_chunk000_via02: send_angles (single) [  +0.99,   +5.47,   +3.17,   -0.59,   -5.91,  -29.54]  speed=20 wait=0.0s  (pre max|Δ|=5.74°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.87° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.1  +3.9  +2.5  -0.4  -5.7  +0.7  着いた
[SEND] pi05_chunk000_via05: send_angles (single) [  +2.38,  +11.20,   +6.75,   -1.36,  -14.27,  -28.52]  speed=20 wait=0.0s  (pre max|Δ|=10.23°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.27° (tol 3.0°)
       [VIA   ] step  5  Δ= +1.6  +4.8  +2.6  -1.2 -10.2  +1.2  着いた
[SEND] pi05_chunk000_via08: send_angles (single) [  +3.80,  +17.03,  +10.51,   -2.30,  -22.51,  -27.40]  speed=20 wait=0.0s  (pre max|Δ|=9.51°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.98° (tol 3.0°)
       [VIA   ] step  8  Δ= +2.0  +4.8  +2.9  -1.9  -9.5  +1.3  着いた
[SEND] pi05_chunk000_via09: send_angles (single) [  +4.15,  +18.71,  +11.48,   -2.52,  -24.67,  -27.13]  speed=20 wait=0.0s  (pre max|Δ|=3.14°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.88° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.6  +0.7  +0.1  -0.7  -3.1  +0.5  着いた
[STATE ] 目標を渡す  目標と実測の最大差 0.88°（関節 j1）
[001] 推論 868ms  10ステップ先  Δ= +6.3 +18.5 +11.6  -0.7 -28.7  +0.9
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > x
       分からない入力: x（Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了）
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > R
       分からない入力: R（Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了）
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk001_via02: send_angles (single) [  +5.59,  +24.14,  +15.07,   -2.77,  -33.18,  -26.73]  speed=20 wait=0.0s  (pre max|Δ|=8.58°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.10° (tol 3.0°)
       [VIA   ] step  2  Δ= +2.0  +4.5  +2.9  -0.6  -8.6  +0.6  着いた
[SEND] pi05_chunk001_via05: send_angles (single) [  +7.52,  +30.06,  +18.93,   -2.61,  -42.25,  -26.63]  speed=20 wait=0.0s  (pre max|Δ|=10.17°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
       [VIA   ] step  5  Δ= +2.5  +5.0  +3.1  +0.2 -10.2  +0.1  着いた
[SEND] pi05_chunk001_via08: send_angles (single) [  +9.29,  +36.10,  +22.87,   -2.65,  -50.80,  -26.59]  speed=20 wait=0.0s  (pre max|Δ|=8.71°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.98° (tol 3.0°)
       [VIA   ] step  8  Δ= +1.9  +5.1  +3.4  +0.8  -8.7  +0.0  着いた
[SEND] pi05_chunk001_via09: send_angles (single) [  +9.90,  +38.08,  +23.75,   -2.58,  -53.33,  -26.53]  speed=20 wait=0.0s  (pre max|Δ|=3.24°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.03° (tol 3.0°)
       [VIA   ] step  9  Δ= +1.0  +1.0  +0.4  +0.7  -3.2  +0.0  着いた
[STATE ] 目標を渡す  目標と実測の最大差 1.03°（関節 j1）
[002] 推論 876ms  10ステップ先  Δ= +1.6  +7.2  +5.0  +0.2  -9.3  -0.0
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk002_via02: send_angles (single) [ +10.88,  +44.07,  +27.71,   -2.89,  -61.14,  -26.53]  speed=20 wait=0.0s  (pre max|Δ|=7.80°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.93° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.1  +5.0  +4.2  +0.1  -7.8  +0.0  着いた
[SEND] pi05_chunk002_via05: send_angles (single) [ +11.34,  +46.49,  +29.30,   -2.87,  -63.32,  -26.55]  speed=20 wait=0.0s  (pre max|Δ|=2.94°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.97° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.4  +1.5  +1.4  -0.2  -2.9  -0.0  着いた
[SEND] pi05_chunk002_via08: send_angles (single) [ +11.38,  +46.51,  +29.00,   -2.87,  -62.75,  -26.55]  speed=20 wait=0.0s  (pre max|Δ|=1.05°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.05° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.6  -1.0  -0.6  -0.3  +1.0  -0.0  着いた
[SEND] pi05_chunk002_via09: send_angles (single) [ +11.40,  +46.28,  +28.59,   -2.87,  -62.60,  -26.54]  speed=20 wait=0.0s  (pre max|Δ|=1.20°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.20° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.6  -1.2  -1.0  -0.3  +1.2  -0.0  着いた
[STATE ] 目標を渡す  目標と実測の最大差 1.20°（関節 j4）
[003] 推論 2235ms  10ステップ先  Δ= +1.5 +10.0 -10.6  -0.3  +3.7  -0.1
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 1 に入りました (推論 3 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+10.8 j1=+47.5 j2=+29.6 j3=-2.5 j4=-63.2 j5=-26.5  グリッパー 開
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+10.8 j1=+47.5 j2=+29.6 j3=-2.5 j4=-63.2 j5=-26.5  グリッパー 開
[SEND] pi05_corr01_000: send_angles (single) [  +8.81,  +47.46,  +29.61,   -2.54,  -63.19,  -26.54]  speed=20 wait=0.0s  (pre max|Δ|=2.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j0 着いた (目標 +8.8 / 実測 +9.0, ずれ 0.15° ≤ 1.00°)
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+8.8 j1=+47.5 j2=+29.6 j3=-2.5 j4=-63.2 j5=-26.5  グリッパー 開
[SEND] pi05_corr01_001: send_angles (single) [ +10.81,  +47.46,  +29.61,   -2.54,  -63.19,  -26.54]  speed=20 wait=0.0s  (pre max|Δ|=1.85°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j0 着いた (目標 +10.8 / 実測 +10.7, ずれ 0.09° ≤ 1.00°)
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+10.8 j1=+47.5 j2=+29.6 j3=-2.5 j4=-63.2 j5=-26.5  グリッパー 開
[SEND] pi05_corr01_002: send_angles (single) [ +12.81,  +47.46,  +29.61,   -2.54,  -63.19,  -26.54]  speed=20 wait=0.0s  (pre max|Δ|=2.09°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j0 着いた (目標 +12.8 / 実測 +12.8, ずれ 0.02° ≤ 1.00°)
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+12.8 j1=+47.5 j2=+29.6 j3=-2.5 j4=-63.2 j5=-26.5  グリッパー 開
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+12.8 j1=+47.5 j2=+29.6 j3=-2.5 j4=-63.2 j5=-26.5  グリッパー 開
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+12.8 j1=+47.5 j2=+29.6 j3=-2.5 j4=-63.2 j5=-26.5  グリッパー 開
[CORR  ] 補正 1 を終えました (3 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[004] 推論 809ms  10ステップ先  Δ= +1.1 +10.3  -8.0  -0.3  +1.8  -0.2
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk004_via02: send_angles (single) [ +13.10,  +52.86,  +26.42,   -2.42,  -62.00,  -26.50]  speed=20 wait=0.0s  (pre max|Δ|=4.44°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.92° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.3  +4.4  -3.2  -0.1  +0.8  -0.1  着いた
[SEND] pi05_chunk004_via05: send_angles (single) [ +13.30,  +56.56,  +23.44,   -2.52,  -61.31,  -26.54]  speed=20 wait=0.0s  (pre max|Δ|=3.89°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.18° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.5  +2.8  -3.9  -0.2  +1.4  -0.1  着いた
[SEND] pi05_chunk004_via08: send_angles (single) [ +13.41,  +58.79,  +21.55,   -2.62,  -60.83,  -26.61]  speed=20 wait=0.0s  (pre max|Δ|=2.53°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.09° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.6  +1.5  -2.5  -0.3  +1.7  -0.1  着いた
[SEND] pi05_chunk004_via09: send_angles (single) [ +13.92,  +58.70,  +21.60,   -2.63,  -60.94,  -26.61]  speed=20 wait=0.0s  (pre max|Δ|=1.98°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.81° (tol 3.0°)
       [VIA   ] step  9  Δ= +1.1  -0.6  -0.5  -0.3  +2.0  +0.1  着いた
[STATE ] 目標を渡す  目標と実測の最大差 1.81°（関節 j4）
[005] 推論 906ms  4ステップ先  Δ= +0.4  +1.0  -1.4  -1.1  +2.1  +0.2  グリッパー→閉
       [VIA   ] 中継点 2 点: step 2, 3
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk005_via02: send_angles (single) [ +13.93,  +60.32,  +20.66,   -2.72,  -60.64,  -26.64]  speed=20 wait=0.0s  (pre max|Δ|=1.58°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.58° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.4  +1.0  -1.4  -0.9  +1.6  +0.3  着いた
[SEND] pi05_chunk005_via03: send_angles (single) [ +13.93,  +60.32,  +20.66,   -2.72,  -60.64,  -26.64]  speed=20 wait=0.0s  (pre max|Δ|=1.58°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.23° (tol 3.0°)
       [VIA   ] step  3  Δ= +0.4  +0.1  -0.3  -0.5  +1.6  +0.3  着いた
  [Pi] GRIPPER: VALUE=20 speed=100 result= -1
[STATE ] 目標を渡す  目標と実測の最大差 1.32°（関節 j4）
[006] 推論 2312ms  10ステップ先  Δ= +0.1  -8.3  +7.4  -0.5  -0.3  +0.3
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk006_via02: send_angles (single) [ +13.74,  +59.76,  +21.09,   -2.74,  -60.96,  -26.98]  speed=20 wait=0.0s  (pre max|Δ|=1.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.00° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.2  -0.3  +0.7  -0.4  +1.0  -0.0  着いた
[SEND] pi05_chunk006_via05: send_angles (single) [ +13.63,  +56.66,  +24.01,   -2.83,  -61.82,  -26.82]  speed=20 wait=0.0s  (pre max|Δ|=3.62°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.62° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.1  -3.4  +3.6  -0.5  +0.1  +0.2  着いた
[SEND] pi05_chunk006_via08: send_angles (single) [ +13.66,  +52.65,  +27.07,   -2.87,  -62.26,  -26.71]  speed=20 wait=0.0s  (pre max|Δ|=4.65°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.94° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.1  -4.6  +4.4  +0.2  -2.1  +0.1  着いた
[SEND] pi05_chunk006_via09: send_angles (single) [ +13.59,  +51.69,  +27.83,   -2.88,  -62.23,  -26.73]  speed=20 wait=0.0s  (pre max|Δ|=2.91°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.73° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.1  -2.2  +1.7  +0.7  -2.9  -0.7  着いた
[STATE ] 目標を渡す  目標と実測の最大差 2.73°（関節 j4）
[007] 推論 1075ms  10ステップ先  Δ=+12.3  -2.3 -10.2  +3.5  +2.4  -3.5
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 2 に入りました (推論 7 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+13.6 j1=+53.1 j2=+27.1 j3=-3.4 j4=-60.2 j5=-26.2  グリッパー 閉
  [補正] 関節 j2  刻み 1.0°  補正目標 j0=+13.6 j1=+53.1 j2=+27.1 j3=-3.4 j4=-60.2 j5=-26.2  グリッパー 閉
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.6 j1=+53.1 j2=+27.1 j3=-3.4 j4=-60.2 j5=-26.2  グリッパー 閉
[SEND] pi05_corr02_000: send_angles (single) [ +13.62,  +53.08,  +25.07,   -3.42,  -60.20,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=2.26°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.76° (tol 3.0°)
  [補正] j2 届いていない (目標 +25.1 / 実測 +26.1, ずれ 1.03° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.6 j1=+53.1 j2=+25.1 j3=-3.4 j4=-60.2 j5=-26.2  グリッパー 閉
  [補正] 足りなかった 1.0° を足して送る (j2 を -3.0°)
[SEND] pi05_corr02_001: send_angles (single) [ +13.62,  +53.08,  +22.04,   -3.42,  -60.20,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=4.06°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.05° (tol 3.0°)
  [補正] j2 着いた (目標 +22.0 / 実測 +22.9, ずれ 0.89° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.6 j1=+53.1 j2=+22.0 j3=-3.4 j4=-60.2 j5=-26.2  グリッパー 閉
[SEND] pi05_corr02_002: send_angles (single) [ +13.62,  +53.08,  +20.04,   -3.42,  -60.20,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=2.89°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.05° (tol 3.0°)
  [補正] j2 届いていない (目標 +20.0 / 実測 +21.1, ずれ 1.05° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.6 j1=+53.1 j2=+20.0 j3=-3.4 j4=-60.2 j5=-26.2  グリッパー 閉
  [補正] 足りなかった 1.1° を足して送る (j2 を -3.0°)
[SEND] pi05_corr02_003: send_angles (single) [ +13.62,  +53.08,  +16.99,   -3.42,  -60.20,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=4.10°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.93° (tol 3.0°)
  [補正] j2 着いた (目標 +17.0 / 実測 +17.9, ずれ 0.93° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.6 j1=+53.1 j2=+17.0 j3=-3.4 j4=-60.2 j5=-26.2  グリッパー 閉
[SEND] pi05_corr02_004: send_angles (single) [ +13.62,  +53.08,  +14.99,   -3.42,  -60.20,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=2.93°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.00° (tol 3.0°)
  [補正] j2 届いていない (目標 +15.0 / 実測 +16.0, ずれ 1.00° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.6 j1=+53.1 j2=+15.0 j3=-3.4 j4=-60.2 j5=-26.2  グリッパー 閉
  [補正] 足りなかった 1.0° を足して送る (j2 を -3.0°)
[SEND] pi05_corr02_005: send_angles (single) [ +13.62,  +53.08,  +11.99,   -3.42,  -60.20,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=4.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.01° (tol 3.0°)
  [補正] j2 届いていない (目標 +12.0 / 実測 +13.0, ずれ 1.01° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.6 j1=+53.1 j2=+12.0 j3=-3.4 j4=-60.2 j5=-26.2  グリッパー 閉
  [補正] 足りなかった 1.0° を足して送る (j2 を -3.0°)
[SEND] pi05_corr02_006: send_angles (single) [ +13.62,  +53.08,   +8.98,   -3.42,  -60.20,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=4.02°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.03° (tol 3.0°)
  [補正] j2 届いていない (目標 +9.0 / 実測 +10.0, ずれ 1.03° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.6 j1=+53.1 j2=+9.0 j3=-3.4 j4=-60.2 j5=-26.2  グリッパー 閉
  [補正] 足りなかった 1.0° を足して送る (j2 を -3.0°)
[SEND] pi05_corr02_007: send_angles (single) [ +13.62,  +53.08,   +5.95,   -3.42,  -60.20,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=4.06°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.06° (tol 3.0°)
  [補正] j2 着いた (目標 +5.9 / 実測 +6.9, ずれ 0.99° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.6 j1=+53.1 j2=+5.9 j3=-3.4 j4=-60.2 j5=-26.2  グリッパー 閉
[SEND] pi05_corr02_008: send_angles (single) [ +13.62,  +53.08,   +3.95,   -3.42,  -60.20,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=2.99°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.14° (tol 3.0°)
  [補正] j2 届いていない (目標 +3.9 / 実測 +5.1, ずれ 1.14° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.6 j1=+53.1 j2=+3.9 j3=-3.4 j4=-60.2 j5=-26.2  グリッパー 閉
  [補正] 足りなかった 1.1° を足して送る (j2 を -3.1°)
[SEND] pi05_corr02_009: send_angles (single) [ +13.62,  +53.08,   +0.81,   -3.42,  -60.20,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=4.28°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.06° (tol 3.0°)
  [補正] j2 届いていない (目標 +0.8 / 実測 +1.8, ずれ 1.03° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.6 j1=+53.1 j2=+0.8 j3=-3.4 j4=-60.2 j5=-26.2  グリッパー 閉
  [補正] 足りなかった 1.0° を足して送る (j2 を -3.0°)
[SEND] pi05_corr02_010: send_angles (single) [ +13.62,  +53.08,   -2.22,   -3.42,  -60.20,  -26.19]  speed=20 wait=0.0s  (pre max|Δ|=4.06°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.06° (tol 3.0°)
  [補正] j2 着いた (目標 -2.2 / 実測 -1.2, ずれ 0.99° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.6 j1=+53.1 j2=-2.2 j3=-3.4 j4=-60.2 j5=-26.2  グリッパー 閉
[CORR  ] 補正 2 を終えました (11 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[008] 推論 819ms  10ステップ先  Δ= +9.5  -5.1  +2.7  +1.8  -0.1  -0.3
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk008_via02: send_angles (single) [ +14.32,  +52.70,   +0.34,   -2.65,  -60.84,  -26.12]  speed=20 wait=0.0s  (pre max|Δ|=1.57°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.44° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.7  -1.4  +1.6  +0.5  -0.6  +0.2  着いた
[SEND] pi05_chunk008_via05: send_angles (single) [ +15.28,  +51.08,   +1.62,   -2.10,  -61.37,  -25.91]  speed=20 wait=0.0s  (pre max|Δ|=3.06°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.53° (tol 3.0°)
       [VIA   ] step  5  Δ= +1.6  -3.1  +0.6  +1.2  -1.2  +0.4  着いた
[SEND] pi05_chunk008_via08: send_angles (single) [ +20.66,  +49.50,   +1.69,   -1.54,  -60.79,  -26.34]  speed=20 wait=0.0s  (pre max|Δ|=5.64°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.26° (tol 3.0°)
       [VIA   ] step  8  Δ= +5.6  -4.1  -0.6  +1.2  -0.6  +0.0  着いた
[SEND] pi05_chunk008_via09: send_angles (single) [ +23.09,  +49.01,   +1.44,   -1.37,  -60.33,  -26.63]  speed=20 wait=0.0s  (pre max|Δ|=2.75°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.66° (tol 3.0°)
       [VIA   ] step  9  Δ= +2.4  -2.8  -0.9  +0.5  -0.1  -0.3  着いた
[STATE ] 目標を渡す  目標と実測の最大差 2.66°（関節 j1）
[009] 推論 808ms  10ステップ先  Δ=+13.9  -0.4  -3.6  +2.3  +1.7  -1.5
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk009_via02: send_angles (single) [ +28.42,  +47.79,   +0.80,   -0.89,  -59.49,  -26.67]  speed=20 wait=0.0s  (pre max|Δ|=5.40°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.30° (tol 3.0°)
       [VIA   ] step  2  Δ= +5.4  -3.9  -1.6  +0.8  +0.7  -0.3  着いた
[SEND] pi05_chunk009_via05: send_angles (single) [ +34.22,  +47.56,   -0.40,   -0.12,  -58.11,  -27.16]  speed=20 wait=0.0s  (pre max|Δ|=5.92°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.44° (tol 3.0°)
       [VIA   ] step  5  Δ= +5.9  -2.5  -2.8  +1.0  +2.1  -0.8  着いた
[SEND] pi05_chunk009_via08: send_angles (single) [ +37.11,  +49.95,   -1.18,   +0.55,  -58.18,  -27.82]  speed=20 wait=0.0s  (pre max|Δ|=2.75°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.53° (tol 3.0°)
       [VIA   ] step  8  Δ= +2.7  -0.1  -2.4  +0.9  +1.0  -1.3  着いた
[SEND] pi05_chunk009_via09: send_angles (single) [ +36.93,  +51.32,   -1.22,   +0.65,  -58.50,  -27.89]  speed=20 wait=0.0s  (pre max|Δ|=1.57°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.57° (tol 3.0°)
       [VIA   ] step  9  Δ= -0.2  +0.1  -1.6  +0.0  +0.3  -0.6  着いた
[STATE ] 目標を渡す  目標と実測の最大差 1.57°（関節 j2）
[010] 推論 907ms  9ステップ先  Δ= -0.3  +8.9  -2.7  +0.7  -5.8  -0.9  グリッパー→開
       [VIA   ] 中継点 3 点: step 2, 5, 8
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > r
       爪を締め直します (開かずに閉じる指令をもう一度)
  [Pi] GRIPPER: VALUE=20 speed=100 result= -1
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk010_via02: send_angles (single) [ +36.95,  +56.76,   -1.84,   +0.94,  -61.29,  -28.12]  speed=20 wait=0.0s  (pre max|Δ|=4.21°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.32° (tol 3.0°)
       [VIA   ] step  2  Δ= -0.2  +4.2  -2.2  +0.4  -2.5  -0.5  着いた
[SEND] pi05_chunk010_via05: send_angles (single) [ +36.81,  +60.92,   -2.30,   +1.13,  -63.89,  -28.23]  speed=20 wait=0.0s  (pre max|Δ|=4.92°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.60° (tol 3.0°)
       [VIA   ] step  5  Δ= -0.4  +2.9  -2.1  +0.6  -4.9  -0.5  着いた
[SEND] pi05_chunk010_via08: send_angles (single) [ +36.88,  +61.48,   -2.37,   +1.24,  -64.56,  -28.33]  speed=20 wait=0.0s  (pre max|Δ|=2.07°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.67° (tol 3.0°)
       [VIA   ] step  8  Δ= -0.3  -0.7  -1.7  +0.6  -2.1  -0.4  着いた
  [Pi] GRIPPER: OPEN result= -1
[STATE ] 目標を渡す  目標と実測の最大差 1.67°（関節 j2）
[011] 推論 963ms  10ステップ先  Δ= -0.5 -16.7  -1.5  +0.4 +16.4  -1.9
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk011_via02: send_angles (single) [ +37.17,  +58.30,   -2.38,   +1.33,  -62.05,  -28.59]  speed=20 wait=0.0s  (pre max|Δ|=4.27°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.16° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.0  -4.3  -1.7  +0.4  +3.4  -0.5  着いた
[SEND] pi05_chunk011_via05: send_angles (single) [ +38.24,  +54.87,   -2.33,   +1.75,  -58.68,  -29.28]  speed=20 wait=0.0s  (pre max|Δ|=5.59°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.08° (tol 3.0°)
       [VIA   ] step  5  Δ= +1.1  -5.6  -1.5  +0.6  +5.1  -1.0  着いた
[SEND] pi05_chunk011_via08: send_angles (single) [ +37.82,  +48.50,   -2.28,   +1.55,  -52.06,  -29.83]  speed=20 wait=0.0s  (pre max|Δ|=8.45°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.21° (tol 3.0°)
       [VIA   ] step  8  Δ= -0.6  -8.4  -1.5  -0.3  +7.8  -0.6  着いた
[SEND] pi05_chunk011_via09: send_angles (single) [ +36.71,  +45.88,   -2.17,   +1.38,  -49.03,  -29.99]  speed=20 wait=0.0s  (pre max|Δ|=4.83°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.93° (tol 3.0°)
       [VIA   ] step  9  Δ= -1.7  -4.8  -1.4  -0.5  +4.0  -0.5  着いた
[STATE ] 目標を渡す  目標と実測の最大差 1.93°（関節 j1）
[012] 推論 2149ms  10ステップ先  Δ=-18.8 -27.0  -1.7  -3.3 +25.8  -0.5
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > h
[SEND] pi05_home: send_angles (single) [  +0.00,   +0.00,   +0.00,   +0.00,   +0.00,  -30.00]  speed=20 wait=0.0s  (pre max|Δ|=49.39°, post-send timeout 9.4s)
[SEND] arrival OK: max|Δ|=1.49° (tol 2.5°)
[RECORD] 記録終了 コマ 2897 (8.766 fps) 実測角 2448 回 (7.41 Hz)  → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_181946/recording
       結果: y=成功 / n=失敗 / Enter=記録しない > y
[DONE  ] 記録: /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_181946
[CLIENT] run_policy_client.py が終わった (終了コード 0)
    (337 秒)
もう1回やりますか? y=やる / 他=終わる > y

=== 7. HOME → 爪を開く → 位置合わせ (2 回目)
[INIT] daemon 接続中...
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[INIT] fresh_mode=1
[PRE]  現在姿勢: [-0.26, 1.49, 0.70, 0.26, -0.26, -29.97]
[SEND] HOME へ移動指令
[WAIT] t=2.1s  max_err=1.49°
[DONE] HOME 到達 max_err=1.49°
[POST] 最終姿勢: [-0.26, 1.49, 0.70, 0.26, -0.26, -29.97]
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[EXIT] fresh_mode=0, socket close
  [Pi] GRIPPER: OPEN result= -1
[REF   ] 基準画像: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_194818/frames/000000.jpg
[REF   ] お手本 run_0001_20261019_194818 (つかんだ瞬間の j0 = +13.2°)
[REF   ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける
[ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない)
[ALIGN ] dy=  +0.6  dx=  -2.6  response=0.917  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[DONE  ] 終了 (何も書いていません)
    (19 秒)

=== 8. 実機推論 (2 回目)
[WAIT  ] 送ったあと 0.0s / 爪のあと 0.8s (開くときの daemon 0.0s) / 止まるのを待つ目安 0.8s
[SAFE  ] 安全範囲 (学習 19 本 ±10°): j0[-72,+55]  j1[-9,+88]  j2[-46,+41]  j3[-18,+27]  j4[-90,+10]  j5[-51,-14]
[SAFE  ] 肩 j1 の上限は J1_SAFE_MAX=88° で切った (これを超える指令はアームが黙って捨てる / LOG352)  元データ: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes
[MODE  ] EXECUTE  steps/chunk=10  max_move=20.0°  log=/Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_182545
[CAMERA] 写り方 dy=-5.7 dx=+4.1 response=0.614 → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[CAMERA] 基準: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_183454/frames/000000.jpg
[POLICY] 接続 ws://localhost:8000  metadata={}
[RECORD] 上カメラと実測角を 1 秒 10 コマで記録します → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_182545/recording
[GRIP  ] 開始時のグリッパー開放は, 最初の目標が検査を通ってから行います (爪が閉じていたら手で開けておく)
[STATE ] 実測を渡す (直前に送った目標がない)
[000] 推論 1030ms  10ステップ先  Δ= +4.5 +17.1 +11.4  -2.6 -25.9  +3.0
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[GRIP  ] 開始時にグリッパーを開く
  [Pi] GRIPPER: OPEN result= -1
[SEND] pi05_chunk000_via02: send_angles (single) [  +0.81,   +5.87,   +3.37,   -0.32,   -6.86,  -29.34]  speed=20 wait=0.0s  (pre max|Δ|=6.60°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.86° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.1  +4.4  +2.7  -0.6  -6.6  +0.6  着いた
[SEND] pi05_chunk000_via05: send_angles (single) [  +2.17,  +11.61,   +7.08,   -1.27,  -15.72,  -28.35]  speed=20 wait=0.0s  (pre max|Δ|=10.72°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.31° (tol 3.0°)
       [VIA   ] step  5  Δ= +1.4  +4.9  +2.8  -1.3 -10.7  +1.5  着いた
[SEND] pi05_chunk000_via08: send_angles (single) [  +3.65,  +16.88,  +10.98,   -2.18,  -23.70,  -27.27]  speed=20 wait=0.0s  (pre max|Δ|=9.29°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.12° (tol 3.0°)
       [VIA   ] step  8  Δ= +1.6  +4.1  +3.0  -0.8  -9.3  +2.0  着いた
[SEND] pi05_chunk000_via09: send_angles (single) [  +4.21,  +18.63,  +12.09,   -2.30,  -26.12,  -26.98]  speed=20 wait=0.0s  (pre max|Δ|=3.54°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.88° (tol 3.0°)
       [VIA   ] step  9  Δ= +1.0  +0.8  +0.3  +0.2  -3.5  +1.0  着いた
[STATE ] 目標を渡す  目標と実測の最大差 0.88°（関節 j1）
[001] 推論 809ms  10ステップ先  Δ= +4.9 +17.9 +12.2  +0.0 -28.9  +0.9
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk001_via02: send_angles (single) [  +5.68,  +24.11,  +15.84,   -2.61,  -34.42,  -26.71]  speed=20 wait=0.0s  (pre max|Δ|=8.41°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.85° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.6  +4.6  +3.0  +0.3  -8.4  +0.7  着いた
[SEND] pi05_chunk001_via05: send_angles (single) [  +7.45,  +30.14,  +20.04,   -2.64,  -43.73,  -26.64]  speed=20 wait=0.0s  (pre max|Δ|=10.07°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.88° (tol 3.0°)
       [VIA   ] step  5  Δ= +2.1  +5.2  +3.5  +0.3 -10.1  +0.3  着いた
[SEND] pi05_chunk001_via08: send_angles (single) [  +8.86,  +36.14,  +24.25,   -2.76,  -52.61,  -26.60]  speed=20 wait=0.0s  (pre max|Δ|=9.55°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.03° (tol 3.0°)
       [VIA   ] step  8  Δ= +1.8  +5.1  +3.6  +0.2  -9.6  +0.2  着いた
[SEND] pi05_chunk001_via09: send_angles (single) [  +8.90,  +37.44,  +24.99,   -2.87,  -54.89,  -26.55]  speed=20 wait=0.0s  (pre max|Δ|=3.04°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.88° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.6  +0.3  +0.4  -0.1  -3.0  +0.3  着いた
[STATE ] 目標を渡す  目標と実測の最大差 0.88°（関節 j1）
[002] 推論 880ms  10ステップ先  Δ= +1.9  +7.1  +4.5  -0.3  -9.5  +0.2
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk002_via02: send_angles (single) [ +10.00,  +43.56,  +28.84,   -3.28,  -63.15,  -26.53]  speed=20 wait=0.0s  (pre max|Δ|=8.22°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.91° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.7  +5.2  +4.1  -0.5  -8.2  +0.2  着いた
[SEND] pi05_chunk002_via05: send_angles (single) [ +10.20,  +45.54,  +30.13,   -3.10,  -64.91,  -26.51]  speed=20 wait=0.0s  (pre max|Δ|=2.07°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.04° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.5  +1.1  +1.3  -0.4  -2.1  +0.2  着いた
[SEND] pi05_chunk002_via08: send_angles (single) [ +10.14,  +45.22,  +29.57,   -3.07,  -64.35,  -26.50]  speed=20 wait=0.0s  (pre max|Δ|=1.36°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.36° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.5  -1.4  -0.9  -0.4  +1.3  +0.2  着いた
[SEND] pi05_chunk002_via09: send_angles (single) [ +10.25,  +45.44,  +29.32,   -3.11,  -64.38,  -26.51]  speed=20 wait=0.0s  (pre max|Δ|=1.27°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.27° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.6  -1.1  -1.2  -0.5  +1.3  +0.2  着いた
[STATE ] 目標を渡す  目標と実測の最大差 1.27°（関節 j4）
[003] 推論 2238ms  10ステップ先  Δ= +1.2 +12.3 -11.2  -0.3  +3.9  +0.0
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 1 に入りました (推論 3 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+9.7 j1=+46.6 j2=+30.4 j3=-2.8 j4=-65.1 j5=-26.7  グリッパー 開
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+9.7 j1=+46.6 j2=+30.4 j3=-2.8 j4=-65.1 j5=-26.7  グリッパー 開
[SEND] pi05_corr01_000: send_angles (single) [ +11.66,  +46.58,  +30.41,   -2.81,  -65.12,  -26.71]  speed=20 wait=0.0s  (pre max|Δ|=1.29°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j0 着いた (目標 +11.7 / 実測 +11.4, ずれ 0.24° ≤ 1.00°)
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+11.7 j1=+46.6 j2=+30.4 j3=-2.8 j4=-65.1 j5=-26.7  グリッパー 開
[SEND] pi05_corr01_001: send_angles (single) [ +13.66,  +46.58,  +30.41,   -2.81,  -65.12,  -26.71]  speed=20 wait=0.0s  (pre max|Δ|=2.24°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j0 着いた (目標 +13.7 / 実測 +13.7, ずれ 0.05° ≤ 1.00°)
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+13.7 j1=+46.6 j2=+30.4 j3=-2.8 j4=-65.1 j5=-26.7  グリッパー 開
[CORR  ] 補正 1 を終えました (2 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[004] 推論 862ms  10ステップ先  Δ= +0.3 +12.2  -9.4  -0.2  +1.5  -0.1
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk004_via02: send_angles (single) [ +13.71,  +51.88,  +27.34,   -2.99,  -64.34,  -26.71]  speed=20 wait=0.0s  (pre max|Δ|=4.34°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.04° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.0  +4.3  -3.1  -0.0  +0.2  +0.0  着いた
[SEND] pi05_chunk004_via05: send_angles (single) [ +14.06,  +55.97,  +24.16,   -3.12,  -63.66,  -26.75]  speed=20 wait=0.0s  (pre max|Δ|=4.22°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.93° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.3  +3.2  -4.2  -0.1  +0.9  -0.0  着いた
[SEND] pi05_chunk004_via08: send_angles (single) [ +14.03,  +59.01,  +21.49,   -3.18,  -63.04,  -26.79]  speed=20 wait=0.0s  (pre max|Δ|=3.55°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.20° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.3  +2.2  -3.5  -0.2  +1.5  -0.1  着いた
[SEND] pi05_chunk004_via09: send_angles (single) [ +14.01,  +59.76,  +20.99,   -3.17,  -63.04,  -26.82]  speed=20 wait=0.0s  (pre max|Δ|=1.20°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.47° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.3  -0.0  -1.2  -0.2  +1.2  +0.1  着いた
[STATE ] 目標を渡す  目標と実測の最大差 1.47°（関節 j4）
[005] 推論 956ms  4ステップ先  Δ= +0.5  +0.6  -2.2  -0.2  +2.1  +0.3  グリッパー→閉
       [VIA   ] 中継点 2 点: step 2, 3
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 2 に入りました (推論 5 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+13.7 j1=+60.3 j2=+22.1 j3=-3.0 j4=-64.4 j5=-27.1  グリッパー 開
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+13.7 j1=+60.3 j2=+22.1 j3=-3.0 j4=-64.4 j5=-27.1  グリッパー 開
  [補正] 関節 j1  刻み 1.0°  補正目標 j0=+13.7 j1=+60.3 j2=+22.1 j3=-3.0 j4=-64.4 j5=-27.1  グリッパー 開
[SEND] pi05_corr02_000: send_angles (single) [ +13.71,  +61.29,  +22.14,   -2.98,  -64.42,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=1.23°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.23° (tol 3.0°)
  [補正] j1 着いた (目標 +61.3 / 実測 +60.9, ずれ 0.39° ≤ 0.50°)
  [補正] 関節 j1  刻み 1.0°  補正目標 j0=+13.7 j1=+61.3 j2=+22.1 j3=-3.0 j4=-64.4 j5=-27.1  グリッパー 開
[SEND] pi05_corr02_001: send_angles (single) [ +13.71,  +60.29,  +22.14,   -2.98,  -64.42,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=1.23°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.06° (tol 3.0°)
  [補正] j1 届いていない (目標 +60.3 / 実測 +60.9, ずれ 0.61° > 0.50°)
  [補正] 関節 j1  刻み 1.0°  補正目標 j0=+13.7 j1=+60.3 j2=+22.1 j3=-3.0 j4=-64.4 j5=-27.1  グリッパー 開
  [補正] 足りなかった 0.6° を足して送る (j1 を -1.6°)
[SEND] pi05_corr02_002: send_angles (single) [ +13.71,  +58.68,  +22.14,   -2.98,  -64.42,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=2.22°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.61° (tol 3.0°)
  [補正] j1 届いていない (目標 +58.7 / 実測 +60.3, ずれ 1.61° > 0.50°)
  [補正] 関節 j1  刻み 1.0°  補正目標 j0=+13.7 j1=+58.7 j2=+22.1 j3=-3.0 j4=-64.4 j5=-27.1  グリッパー 開
  [補正] 関節 j1  刻み 2.0°  補正目標 j0=+13.7 j1=+58.7 j2=+22.1 j3=-3.0 j4=-64.4 j5=-27.1  グリッパー 開
  [補正] 足りなかった 1.6° を足して送る (j1 を -3.6°)
[SEND] pi05_corr02_003: send_angles (single) [ +13.71,  +55.07,  +22.14,   -2.98,  -64.42,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=5.22°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.88° (tol 3.0°)
  [補正] j1 届いていない (目標 +55.1 / 実測 +57.0, ずれ 1.88° > 1.00°)
  [補正] 関節 j1  刻み 2.0°  補正目標 j0=+13.7 j1=+55.1 j2=+22.1 j3=-3.0 j4=-64.4 j5=-27.1  グリッパー 開
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.7 j1=+55.1 j2=+22.1 j3=-3.0 j4=-64.4 j5=-27.1  グリッパー 開
[SEND] pi05_corr02_004: send_angles (single) [ +13.71,  +55.07,  +20.14,   -2.98,  -64.42,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=1.88°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.88° (tol 3.0°)
  [補正] j2 届いていない (目標 +20.1 / 実測 +21.4, ずれ 1.30° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.7 j1=+55.1 j2=+20.1 j3=-3.0 j4=-64.4 j5=-27.1  グリッパー 開
  [補正] 足りなかった 1.3° を足して送る (j2 を -3.3°)
[SEND] pi05_corr02_005: send_angles (single) [ +13.71,  +55.07,  +16.84,   -2.98,  -64.42,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=4.60°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.88° (tol 3.0°)
  [補正] j2 着いた (目標 +16.8 / 実測 +17.7, ずれ 0.82° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.7 j1=+55.1 j2=+16.8 j3=-3.0 j4=-64.4 j5=-27.1  グリッパー 開
[SEND] pi05_corr02_006: send_angles (single) [ +13.71,  +55.07,  +18.84,   -2.98,  -64.42,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=1.88°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.88° (tol 3.0°)
  [補正] j2 着いた (目標 +18.8 / 実測 +19.2, ずれ 0.32° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.7 j1=+55.1 j2=+18.8 j3=-3.0 j4=-64.4 j5=-27.1  グリッパー 開
[SEND] pi05_corr02_007: send_angles (single) [ +13.71,  +55.07,  +20.84,   -2.98,  -64.42,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=1.88°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.88° (tol 3.0°)
  [補正] j2 着いた (目標 +20.8 / 実測 +21.3, ずれ 0.42° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.7 j1=+55.1 j2=+20.8 j3=-3.0 j4=-64.4 j5=-27.1  グリッパー 開
[SEND] pi05_corr02_008: send_angles (single) [ +13.71,  +55.07,  +22.84,   -2.98,  -64.42,  -27.15]  speed=20 wait=0.0s  (pre max|Δ|=1.88°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.88° (tol 3.0°)
  [補正] j2 着いた (目標 +22.8 / 実測 +23.3, ずれ 0.45° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.7 j1=+55.1 j2=+22.8 j3=-3.0 j4=-64.4 j5=-27.1  グリッパー 開
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+13.7 j1=+55.1 j2=+22.8 j3=-3.0 j4=-64.4 j5=-27.1  グリッパー 開
[CORR  ] 補正 2 を終えました (9 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[006] 推論 2267ms  6ステップ先  Δ= +0.2  +3.8  -3.3  -0.2  +1.1  -0.0  グリッパー→閉
       [VIA   ] 中継点 2 点: step 2, 5
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 3 に入りました (推論 6 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+13.7 j1=+57.0 j2=+23.3 j3=-2.7 j4=-64.3 j5=-26.8  グリッパー 開
  [補正] 関節 j3  刻み 1.0°  補正目標 j0=+13.7 j1=+57.0 j2=+23.3 j3=-2.7 j4=-64.3 j5=-26.8  グリッパー 開
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+13.7 j1=+57.0 j2=+23.3 j3=-2.7 j4=-64.3 j5=-26.8  グリッパー 開
[SEND] pi05_corr03_000: send_angles (single) [ +13.71,  +56.95,  +23.29,   -4.72,  -64.33,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=2.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j3 着いた (目標 -4.7 / 実測 -4.4, ずれ 0.33° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+13.7 j1=+57.0 j2=+23.3 j3=-4.7 j4=-64.3 j5=-26.8  グリッパー 開
[SEND] pi05_corr03_001: send_angles (single) [ +13.71,  +56.95,  +23.29,   -6.72,  -64.33,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=2.33°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j3 着いた (目標 -6.7 / 実測 -6.3, ずれ 0.40° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+13.7 j1=+57.0 j2=+23.3 j3=-6.7 j4=-64.3 j5=-26.8  グリッパー 開
[SEND] pi05_corr03_002: send_angles (single) [ +13.71,  +56.95,  +23.29,   -4.72,  -64.33,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=1.60°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j3 着いた (目標 -4.7 / 実測 -5.5, ずれ 0.81° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+13.7 j1=+57.0 j2=+23.3 j3=-4.7 j4=-64.3 j5=-26.8  グリッパー 開
  [補正] 関節 j4  刻み 2.0°  補正目標 j0=+13.7 j1=+57.0 j2=+23.3 j3=-4.7 j4=-64.3 j5=-26.8  グリッパー 開
[SEND] pi05_corr03_003: send_angles (single) [ +13.71,  +56.95,  +23.29,   -4.72,  -66.33,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=2.09°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.00° (tol 3.0°)
  [補正] j4 届いていない (目標 -66.3 / 実測 -64.3, ずれ 2.00° > 1.00°)
  [補正] 関節 j4  刻み 2.0°  補正目標 j0=+13.7 j1=+57.0 j2=+23.3 j3=-4.7 j4=-66.3 j5=-26.8  グリッパー 開
[SEND] pi05_corr03_004: send_angles (single) [ +13.71,  +56.95,  +23.29,   -4.72,  -64.33,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=1.05°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.05° (tol 3.0°)
  [補正] j4 着いた (目標 -64.3 / 実測 -65.2, ずれ 0.88° ≤ 1.00°)
  [補正] 関節 j4  刻み 2.0°  補正目標 j0=+13.7 j1=+57.0 j2=+23.3 j3=-4.7 j4=-64.3 j5=-26.8  グリッパー 開
[SEND] pi05_corr03_005: send_angles (single) [ +13.71,  +56.95,  +23.29,   -4.72,  -62.33,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=2.88°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.12° (tol 3.0°)
  [補正] j4 届いていない (目標 -62.3 / 実測 -63.5, ずれ 1.12° > 1.00°)
  [補正] 関節 j4  刻み 2.0°  補正目標 j0=+13.7 j1=+57.0 j2=+23.3 j3=-4.7 j4=-62.3 j5=-26.8  グリッパー 開
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+13.7 j1=+57.0 j2=+23.3 j3=-4.7 j4=-62.3 j5=-26.8  グリッパー 開
  [補正] 関節 j1  刻み 2.0°  補正目標 j0=+13.7 j1=+57.0 j2=+23.3 j3=-4.7 j4=-62.3 j5=-26.8  グリッパー 開
[SEND] pi05_corr03_006: send_angles (single) [ +13.71,  +58.95,  +23.29,   -4.72,  -62.33,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=0.95°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.41° (tol 3.0°)
  [補正] j1 着いた (目標 +59.0 / 実測 +59.4, ずれ 0.46° ≤ 1.00°)
  [補正] 関節 j1  刻み 2.0°  補正目標 j0=+13.7 j1=+59.0 j2=+23.3 j3=-4.7 j4=-62.3 j5=-26.8  グリッパー 開
[SEND] pi05_corr03_007: send_angles (single) [ +13.71,  +60.95,  +23.29,   -4.72,  -62.33,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=1.54°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.47° (tol 3.0°)
  [補正] j1 着いた (目標 +61.0 / 実測 +60.5, ずれ 0.49° ≤ 1.00°)
  [補正] 関節 j1  刻み 2.0°  補正目標 j0=+13.7 j1=+61.0 j2=+23.3 j3=-4.7 j4=-62.3 j5=-26.8  グリッパー 開
[SEND] pi05_corr03_008: send_angles (single) [ +13.71,  +58.95,  +23.29,   -4.72,  -62.33,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=1.51°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.47° (tol 3.0°)
  [補正] j1 着いた (目標 +59.0 / 実測 +59.9, ずれ 0.99° ≤ 1.00°)
  [補正] 関節 j1  刻み 2.0°  補正目標 j0=+13.7 j1=+59.0 j2=+23.3 j3=-4.7 j4=-62.3 j5=-26.8  グリッパー 開
[SEND] pi05_corr03_009: send_angles (single) [ +13.71,  +56.95,  +23.29,   -4.72,  -62.33,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=2.99°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.32° (tol 3.0°)
  [補正] j1 届いていない (目標 +57.0 / 実測 +58.3, ずれ 1.32° > 1.00°)
  [補正] 関節 j1  刻み 2.0°  補正目標 j0=+13.7 j1=+57.0 j2=+23.3 j3=-4.7 j4=-62.3 j5=-26.8  グリッパー 開
[SEND] pi05_corr03_010: send_angles (single) [ +13.71,  +58.95,  +23.29,   -4.72,  -62.33,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=0.99°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.55° (tol 3.0°)
  [補正] j1 着いた (目標 +59.0 / 実測 +58.7, ずれ 0.24° ≤ 1.00°)
  [補正] 関節 j1  刻み 2.0°  補正目標 j0=+13.7 j1=+59.0 j2=+23.3 j3=-4.7 j4=-62.3 j5=-26.8  グリッパー 開
[SEND] pi05_corr03_011: send_angles (single) [ +13.71,  +60.95,  +23.29,   -4.72,  -62.33,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=2.24°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.95° (tol 3.0°)
  [補正] j1 着いた (目標 +61.0 / 実測 +60.3, ずれ 0.66° ≤ 1.00°)
  [補正] 関節 j1  刻み 2.0°  補正目標 j0=+13.7 j1=+61.0 j2=+23.3 j3=-4.7 j4=-62.3 j5=-26.8  グリッパー 開
[SEND] pi05_corr03_012: send_angles (single) [ +13.71,  +62.95,  +23.29,   -4.72,  -62.33,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=2.66°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.26° (tol 3.0°)
  [補正] j1 届いていない (目標 +63.0 / 実測 +61.7, ずれ 1.26° > 1.00°)
  [補正] 関節 j1  刻み 2.0°  補正目標 j0=+13.7 j1=+63.0 j2=+23.3 j3=-4.7 j4=-62.3 j5=-26.8  グリッパー 開
  [補正] 足りなかった 1.3° を足して送る (j1 を +3.3°)
[SEND] pi05_corr03_013: send_angles (single) [ +13.71,  +66.21,  +23.29,   -4.72,  -62.33,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=4.52°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.14° (tol 3.0°)
  [補正] j1 届いていない (目標 +66.2 / 実測 +64.1, ずれ 2.14° > 1.00°)
  [補正] 関節 j1  刻み 2.0°  補正目標 j0=+13.7 j1=+66.2 j2=+23.3 j3=-4.7 j4=-62.3 j5=-26.8  グリッパー 開
  [補正] 関節 j1  刻み 2.0°  補正目標 j0=+13.7 j1=+66.2 j2=+23.3 j3=-4.7 j4=-62.3 j5=-26.8  グリッパー 開
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.7 j1=+66.2 j2=+23.3 j3=-4.7 j4=-62.3 j5=-26.8  グリッパー 開
[SEND] pi05_corr03_014: send_angles (single) [ +13.71,  +66.21,  +21.29,   -4.72,  -62.33,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=2.14°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.44° (tol 3.0°)
  [補正] j2 着いた (目標 +21.3 / 実測 +20.7, ずれ 0.55° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.7 j1=+66.2 j2=+21.3 j3=-4.7 j4=-62.3 j5=-26.8  グリッパー 開
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.7 j1=+66.2 j2=+21.3 j3=-4.7 j4=-62.3 j5=-26.8  グリッパー 開
[SEND] pi05_corr03_015: send_angles (single) [ +13.71,  +66.21,  +19.29,   -4.72,  -62.33,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=8.86°, post-send timeout 8.0s)
[SEND] [TIMEOUT] 8.0s 内に未到達: max|Δ|=8.07° actual=[ +13.97,  +66.70,  +19.68,   -4.30,  -70.40,  -26.45]
[SEND] リトライしません: pre→last max|Δ| 1.06° >= 1.0° (部分移動/ストール疑い)
  [補正] j2 着いた (目標 +19.3 / 実測 +19.7, ずれ 0.39° ≤ 1.00°)
  [WARN] 未到達. j4 の発熱などを確認してください
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.7 j1=+66.2 j2=+19.3 j3=-4.7 j4=-62.3 j5=-26.8  グリッパー 開
[CORR  ] 補正 3 を終えました (16 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[007] 推論 894ms  4ステップ先  Δ= +0.3  +0.5  -0.5  -0.1  +1.4  -0.1  グリッパー→閉
       [VIA   ] 中継点 2 点: step 2, 3
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk007_via02: send_angles (single) [ +14.19,  +67.19,  +19.16,   -4.47,  -69.04,  -26.52]  speed=20 wait=0.0s  (pre max|Δ|=1.02°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.72° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.5  +0.6  +0.1  +0.6  -1.0  +0.8  着いた
[SEND] pi05_chunk007_via03: send_angles (single) [ +14.19,  +67.19,  +19.16,   -4.47,  -69.04,  -26.52]  speed=20 wait=0.0s  (pre max|Δ|=1.72°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.72° (tol 3.0°)
       [VIA   ] step  3  Δ= +0.5  +0.7  +0.1  +0.6  -1.7  +0.9  着いた
  [Pi] GRIPPER: VALUE=20 speed=100 result= -1
[STATE ] 目標を渡す  目標と実測の最大差 1.14°（関節 j3）
[008] 推論 894ms  10ステップ先  Δ= +1.6  -6.5  +6.1  -0.4  -0.2  -0.5
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 4 に入りました (推論 8 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+13.5 j1=+66.4 j2=+19.0 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
  [補正] 関節 j2  刻み 1.0°  補正目標 j0=+13.5 j1=+66.4 j2=+19.0 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.5 j1=+66.4 j2=+19.0 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
[SEND] pi05_corr04_000: send_angles (single) [ +13.53,  +66.44,  +16.98,   -3.51,  -68.90,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.41° (tol 3.0°)
  [補正] j2 着いた (目標 +17.0 / 実測 +17.0, ずれ 0.02° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.5 j1=+66.4 j2=+17.0 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
[SEND] pi05_corr04_001: send_angles (single) [ +13.53,  +66.44,  +14.98,   -3.51,  -68.90,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=1.98°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.14° (tol 3.0°)
  [補正] j2 着いた (目標 +15.0 / 実測 +15.3, ずれ 0.31° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.5 j1=+66.4 j2=+15.0 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
[SEND] pi05_corr04_002: send_angles (single) [ +13.53,  +66.44,  +12.98,   -3.51,  -68.90,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.31°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.84° (tol 3.0°)
  [補正] j2 着いた (目標 +13.0 / 実測 +13.5, ずれ 0.55° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.5 j1=+66.4 j2=+13.0 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
[SEND] pi05_corr04_003: send_angles (single) [ +13.53,  +66.44,  +10.98,   -3.51,  -68.90,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.55°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.84° (tol 3.0°)
  [補正] j2 着いた (目標 +11.0 / 実測 +11.9, ずれ 0.88° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.5 j1=+66.4 j2=+11.0 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
[SEND] pi05_corr04_004: send_angles (single) [ +13.53,  +66.44,   +8.98,   -3.51,  -68.90,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.88°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.84° (tol 3.0°)
  [補正] j2 着いた (目標 +9.0 / 実測 +9.9, ずれ 0.95° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.5 j1=+66.4 j2=+9.0 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
[SEND] pi05_corr04_005: send_angles (single) [ +13.53,  +66.44,   +6.98,   -3.51,  -68.90,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.95°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.40° (tol 3.0°)
  [補正] j2 着いた (目標 +7.0 / 実測 +7.9, ずれ 0.93° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.5 j1=+66.4 j2=+7.0 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
[SEND] pi05_corr04_006: send_angles (single) [ +13.53,  +66.44,   +4.98,   -3.51,  -68.90,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.93°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.97° (tol 3.0°)
  [補正] j2 着いた (目標 +5.0 / 実測 +5.9, ずれ 0.90° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.5 j1=+66.4 j2=+5.0 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
[SEND] pi05_corr04_007: send_angles (single) [ +13.53,  +66.44,   +2.98,   -3.51,  -68.90,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.90°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.97° (tol 3.0°)
  [補正] j2 着いた (目標 +3.0 / 実測 +3.9, ずれ 0.88° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.5 j1=+66.4 j2=+3.0 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
[SEND] pi05_corr04_008: send_angles (single) [ +13.53,  +66.44,   +0.98,   -3.51,  -68.90,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.88°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.04° (tol 3.0°)
  [補正] j2 届いていない (目標 +1.0 / 実測 +2.0, ずれ 1.04° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.5 j1=+66.4 j2=+1.0 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
  [補正] 足りなかった 1.0° を足して送る (j2 を -3.0°)
[SEND] pi05_corr04_009: send_angles (single) [ +13.53,  +66.44,   -2.06,   -3.51,  -68.90,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=4.08°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.06° (tol 3.0°)
  [補正] j2 着いた (目標 -2.1 / 実測 -1.1, ずれ 0.92° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.5 j1=+66.4 j2=-2.1 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
[SEND] pi05_corr04_010: send_angles (single) [ +13.53,  +66.44,   -4.06,   -3.51,  -68.90,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.92°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.06° (tol 3.0°)
  [補正] j2 着いた (目標 -4.1 / 実測 -3.1, ずれ 0.99° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.5 j1=+66.4 j2=-4.1 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
  [補正] 関節 j1  刻み 2.0°  補正目標 j0=+13.5 j1=+66.4 j2=-4.1 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
[SEND] pi05_corr04_011: send_angles (single) [ +13.53,  +64.44,   -4.06,   -3.51,  -68.90,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=3.06°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.70° (tol 3.0°)
  [補正] j1 届いていない (目標 +64.4 / 実測 +67.1, ずれ 2.70° > 1.00°)
  [補正] 関節 j1  刻み 2.0°  補正目標 j0=+13.5 j1=+64.4 j2=-4.1 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
  [補正] 足りなかった 2.0° を足して送る (j1 を -4.0°)
[SEND] pi05_corr04_012: send_angles (single) [ +13.53,  +60.44,   -4.06,   -3.51,  -68.90,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=6.70°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.13° (tol 3.0°)
  [補正] j1 届いていない (目標 +60.4 / 実測 +62.6, ずれ 2.13° > 1.00°)
  [補正] 関節 j1  刻み 2.0°  補正目標 j0=+13.5 j1=+60.4 j2=-4.1 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
  [補正] 足りなかった 2.0° を足して送る (j1 を -4.0°)
[SEND] pi05_corr04_013: send_angles (single) [ +13.53,  +56.44,   -4.06,   -3.51,  -68.90,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=6.13°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.00° (tol 3.0°)
  [補正] j1 届いていない (目標 +56.4 / 実測 +58.4, ずれ 2.00° > 1.00°)
  [補正] 関節 j1  刻み 2.0°  補正目標 j0=+13.5 j1=+56.4 j2=-4.1 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.5 j1=+56.4 j2=-4.1 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
[SEND] pi05_corr04_014: send_angles (single) [ +13.53,  +56.44,   -2.06,   -3.51,  -68.90,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.00° (tol 3.0°)
  [補正] j2 着いた (目標 -2.1 / 実測 -1.3, ずれ 0.75° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.5 j1=+56.4 j2=-2.1 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
[SEND] pi05_corr04_015: send_angles (single) [ +13.53,  +56.44,   -0.06,   -3.51,  -68.90,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.00° (tol 3.0°)
  [補正] j2 着いた (目標 -0.1 / 実測 +0.7, ずれ 0.76° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+13.5 j1=+56.4 j2=-0.1 j3=-3.5 j4=-68.9 j5=-26.9  グリッパー 閉
[CORR  ] 補正 4 を終えました (16 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[009] 推論 808ms  10ステップ先  Δ= +7.5  -7.2  +5.2  +1.6  +2.0  -1.1
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk009_via02: send_angles (single) [ +13.74,  +56.69,   +2.37,   -3.07,  -69.48,  -26.44]  speed=20 wait=0.0s  (pre max|Δ|=1.75°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.75° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.1  -1.7  +1.7  +0.6  -0.2  +0.1  着いた
[SEND] pi05_chunk009_via05: send_angles (single) [ +14.75,  +54.52,   +4.32,   -2.64,  -69.41,  -26.37]  speed=20 wait=0.0s  (pre max|Δ|=3.92°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.99° (tol 3.0°)
       [VIA   ] step  5  Δ= +1.1  -3.9  +1.3  +0.6  -0.2  +0.2  着いた
[SEND] pi05_chunk009_via08: send_angles (single) [ +19.71,  +52.02,   +5.72,   -2.23,  -68.05,  -27.22]  speed=20 wait=0.0s  (pre max|Δ|=4.95°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.12° (tol 3.0°)
       [VIA   ] step  8  Δ= +5.0  -4.5  +0.7  +0.3  +0.9  -0.7  着いた
[SEND] pi05_chunk009_via09: send_angles (single) [ +21.11,  +51.27,   +5.92,   -2.07,  -67.26,  -27.61]  speed=20 wait=0.0s  (pre max|Δ|=2.87°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.51° (tol 3.0°)
       [VIA   ] step  9  Δ= +1.3  -2.9  -0.3  -0.2  +1.1  -0.7  着いた
[STATE ] 目標を渡す  目標と実測の最大差 2.51°（関節 j1）
[010] 推論 812ms  10ステップ先  Δ=+20.8  -5.0  -7.2  +3.8  +7.2  -3.2
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > r
       爪を締め直します (開かずに閉じる指令をもう一度)
  [Pi] GRIPPER: VALUE=20 speed=100 result= -1
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk010_via02: send_angles (single) [ +28.46,  +49.82,   +4.32,   -0.99,  -65.41,  -28.22]  speed=20 wait=0.0s  (pre max|Δ|=7.46°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.38° (tol 3.0°)
       [VIA   ] step  2  Δ= +7.5  -4.0  -1.9  +0.8  +2.2  -0.5  着いた
[SEND] pi05_chunk010_via05: send_angles (single) [ +35.07,  +48.94,   +2.00,   +0.29,  -62.89,  -29.36]  speed=20 wait=0.0s  (pre max|Δ|=6.69°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.56° (tol 3.0°)
       [VIA   ] step  5  Δ= +6.7  -3.3  -4.0  +1.0  +2.9  -1.4  着いた
[SEND] pi05_chunk010_via08: send_angles (single) [ +40.59,  +48.67,   -0.45,   +1.59,  -61.04,  -30.70]  speed=20 wait=0.0s  (pre max|Δ|=5.53°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.65° (tol 3.0°)
       [VIA   ] step  8  Δ= +5.5  -2.8  -3.8  +0.9  +2.2  -1.4  着いた
[SEND] pi05_chunk010_via09: send_angles (single) [ +41.78,  +48.78,   -0.92,   +1.93,  -60.39,  -30.98]  speed=20 wait=0.0s  (pre max|Δ|=2.54°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.54° (tol 3.0°)
       [VIA   ] step  9  Δ= +1.2  -2.5  -1.8  -0.0  +0.9  -0.5  着いた
[STATE ] 目標を渡す  目標と実測の最大差 2.54°（関節 j1）
[011] 推論 882ms  10ステップ先  Δ= +0.4  +9.5  -3.5  +0.8  -8.8  -0.4  グリッパー→開
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk011_via02: send_angles (single) [ +42.18,  +54.33,   -1.79,   +2.31,  -63.78,  -31.02]  speed=20 wait=0.0s  (pre max|Δ|=3.40°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.35° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.2  +3.0  -2.7  +0.4  -3.4  -0.4  着いた
[SEND] pi05_chunk011_via05: send_angles (single) [ +42.33,  +59.30,   -2.35,   +2.59,  -67.18,  -31.04]  speed=20 wait=0.0s  (pre max|Δ|=5.75°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.00° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.3  +3.6  -2.0  +0.6  -5.7  -0.4  着いた
[SEND] pi05_chunk011_via08: send_angles (single) [ +42.43,  +60.80,   -2.61,   +2.72,  -69.15,  -31.08]  speed=20 wait=0.0s  (pre max|Δ|=3.68°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.38° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.4  +0.2  -2.3  +0.3  -3.7  -0.3  着いた
[SEND] pi05_chunk011_via09: send_angles (single) [ +42.43,  +60.80,   -2.61,   +2.72,  -69.15,  -31.08]  speed=20 wait=0.0s  (pre max|Δ|=1.38°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.38° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.4  -1.1  -1.4  +0.3  -0.8  -0.3  着いた
  [Pi] GRIPPER: OPEN result= -1
[STATE ] 目標を渡す  目標と実測の最大差 1.38°（関節 j2）
[012] 推論 890ms  10ステップ先  Δ= -2.4 -20.1  -0.3  -0.2 +21.2  -0.9
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk012_via02: send_angles (single) [ +42.55,  +56.21,   -2.70,   +2.77,  -64.20,  -31.29]  speed=20 wait=0.0s  (pre max|Δ|=5.67°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.23° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.5  -5.7  -1.5  +0.3  +5.7  -0.5  着いた
[SEND] pi05_chunk012_via05: send_angles (single) [ +42.73,  +51.24,   -2.61,   +2.82,  -58.28,  -31.52]  speed=20 wait=0.0s  (pre max|Δ|=7.90°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.37° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.7  -7.2  -1.4  +0.3  +7.9  -0.5  着いた
[SEND] pi05_chunk012_via08: send_angles (single) [ +40.90,  +44.21,   -1.92,   +2.49,  -51.07,  -31.71]  speed=20 wait=0.0s  (pre max|Δ|=9.40°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.19° (tol 3.0°)
       [VIA   ] step  8  Δ= -1.7  -9.4  -0.7  -0.1  +8.6  -0.4  着いた
[SEND] pi05_chunk012_via09: send_angles (single) [ +39.57,  +41.81,   -1.55,   +2.26,  -48.72,  -31.71]  speed=20 wait=0.0s  (pre max|Δ|=4.59°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.13° (tol 3.0°)
       [VIA   ] step  9  Δ= -1.6  -4.6  -0.3  -0.8  +3.4  -0.2  着いた
[STATE ] 目標を渡す  目標と実測の最大差 2.13°（関節 j1）
[013] 推論 809ms  10ステップ先  Δ=-21.9 -28.2  +1.0  -3.5 +28.6  +0.6
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > h
[SEND] pi05_home: send_angles (single) [  +0.00,   +0.00,   +0.00,   +0.00,   +0.00,  -30.00]  speed=20 wait=0.0s  (pre max|Δ|=49.30°, post-send timeout 9.4s)
[SEND] arrival OK: max|Δ|=1.49° (tol 2.5°)
[RECORD] 記録終了 コマ 3171 (8.753 fps) 実測角 2405 回 (6.64 Hz)  → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_182545/recording
       結果: y=成功 / n=失敗 / Enter=記録しない > y
[DONE  ] 記録: /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_182545
[CLIENT] run_policy_client.py が終わった (終了コード 0)
    (369 秒)
もう1回やりますか? y=やる / 他=終わる > y

=== 7. HOME → 爪を開く → 位置合わせ (3 回目)
[INIT] daemon 接続中...
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[INIT] fresh_mode=1
[PRE]  現在姿勢: [0.00, 1.49, 0.52, 0.26, -0.26, -30.41]
[SEND] HOME へ移動指令
[WAIT] t=2.0s  max_err=1.49°
[DONE] HOME 到達 max_err=1.49°
[POST] 最終姿勢: [-0.08, 1.49, 0.52, 0.26, -0.26, -30.32]
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[EXIT] fresh_mode=0, socket close
  [Pi] GRIPPER: OPEN result= -1
[REF   ] 基準画像: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_194818/frames/000000.jpg
[REF   ] お手本 run_0001_20261019_194818 (つかんだ瞬間の j0 = +13.2°)
[REF   ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける
[ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない)
[ALIGN ] dy=  +0.8  dx=  -1.9  response=0.912  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[DONE  ] 終了 (何も書いていません)
    (23 秒)

=== 8. 実機推論 (3 回目)
[WAIT  ] 送ったあと 0.0s / 爪のあと 0.8s (開くときの daemon 0.0s) / 止まるのを待つ目安 0.8s
[SAFE  ] 安全範囲 (学習 19 本 ±10°): j0[-72,+55]  j1[-9,+88]  j2[-46,+41]  j3[-18,+27]  j4[-90,+10]  j5[-51,-14]
[SAFE  ] 肩 j1 の上限は J1_SAFE_MAX=88° で切った (これを超える指令はアームが黙って捨てる / LOG352)  元データ: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes
[MODE  ] EXECUTE  steps/chunk=10  max_move=20.0°  log=/Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_183219
[CAMERA] 写り方 dy=-5.5 dx=+4.7 response=0.580 → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[CAMERA] 基準: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_183454/frames/000000.jpg
[POLICY] 接続 ws://localhost:8000  metadata={}
[RECORD] 上カメラと実測角を 1 秒 10 コマで記録します → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_183219/recording
[GRIP  ] 開始時のグリッパー開放は, 最初の目標が検査を通ってから行います (爪が閉じていたら手で開けておく)
[STATE ] 実測を渡す (直前に送った目標がない)
[000] 推論 848ms  10ステップ先  Δ= +4.9 +16.4 +10.6  -1.8 -23.0  +2.9
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[GRIP  ] 開始時にグリッパーを開く
  [Pi] GRIPPER: OPEN result= -1
[SEND] pi05_chunk000_via02: send_angles (single) [  +0.82,   +6.18,   +3.08,   -0.27,   -7.00,  -29.47]  speed=20 wait=0.0s  (pre max|Δ|=6.74°, post-send timeout 8.0s)

[SEND] arrival OK: max|Δ|=2.08° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.9  +4.7  +2.6  -0.5  -6.7  +0.8  着いた
[SEND] pi05_chunk000_via05: send_angles (single) [  +2.07,  +11.66,   +6.49,   -0.85,  -14.77,  -28.52]  speed=20 wait=0.0s  (pre max|Δ|=9.85°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.24° (tol 3.0°)
       [VIA   ] step  5  Δ= +1.5  +4.5  +2.5  -0.9  -9.9  +1.1  着いた
[SEND] pi05_chunk000_via08: send_angles (single) [  +3.73,  +16.61,  +10.08,   -1.43,  -21.54,  -27.55]  speed=20 wait=0.0s  (pre max|Δ|=8.01°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
       [VIA   ] step  8  Δ= +2.0  +3.9  +2.7  -0.6  -8.0  +1.2  着いた
[SEND] pi05_chunk000_via09: send_angles (single) [  +4.77,  +17.93,  +11.12,   -1.54,  -23.29,  -27.30]  speed=20 wait=0.0s  (pre max|Δ|=2.64°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.87° (tol 3.0°)
       [VIA   ] step  9  Δ= +1.5  +0.4  +0.1  +0.2  -2.6  +0.5  着いた
[STATE ] 目標を渡す  目標と実測の最大差 0.87°（関節 j1）
[001] 推論 906ms  10ステップ先  Δ= +4.8 +17.7 +12.1  -0.2 -28.2  +0.8
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk001_via02: send_angles (single) [  +6.22,  +23.34,  +14.79,   -2.29,  -31.52,  -26.75]  speed=20 wait=0.0s  (pre max|Δ|=8.59°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.94° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.5  +4.5  +2.9  -0.0  -8.6  +0.7  着いた
[SEND] pi05_chunk001_via05: send_angles (single) [  +7.92,  +29.09,  +18.96,   -2.38,  -40.92,  -26.65]  speed=20 wait=0.0s  (pre max|Δ|=10.34°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
       [VIA   ] step  5  Δ= +2.0  +4.8  +3.4  -0.1 -10.3  +0.3  着いた
[SEND] pi05_chunk001_via08: send_angles (single) [  +9.10,  +35.01,  +23.12,   -2.41,  -49.13,  -26.57]  speed=20 wait=0.0s  (pre max|Δ|=8.88°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.93° (tol 3.0°)
       [VIA   ] step  8  Δ= +1.8  +5.0  +3.5  -0.0  -8.9  +0.3  着いた
[SEND] pi05_chunk001_via09: send_angles (single) [  +9.58,  +36.50,  +23.93,   -2.44,  -51.10,  -26.58]  speed=20 wait=0.0s  (pre max|Δ|=2.59°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.94° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.4  +0.6  +0.4  -0.1  -2.6  +0.2  着いた
[STATE ] 目標を渡す  目標と実測の最大差 0.94°（関節 j1）
[002] 推論 840ms  10ステップ先  Δ= +2.6  +9.1  +6.5  -0.3 -12.7  +0.2
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk002_via02: send_angles (single) [ +10.93,  +42.36,  +27.88,   -2.88,  -59.99,  -26.58]  speed=20 wait=0.0s  (pre max|Δ|=8.67°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.88° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.7  +4.9  +4.3  -0.5  -8.7  +0.2  着いた
[SEND] pi05_chunk002_via05: send_angles (single) [ +11.66,  +45.95,  +30.08,   -2.81,  -64.01,  -26.58]  speed=20 wait=0.0s  (pre max|Δ|=4.60°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.07° (tol 3.0°)
       [VIA   ] step  5  Δ= +1.2  +2.7  +2.1  -0.4  -4.6  +0.2  着いた
[SEND] pi05_chunk002_via08: send_angles (single) [ +11.82,  +46.56,  +30.38,   -2.69,  -64.08,  -26.58]  speed=20 wait=0.0s  (pre max|Δ|=0.78°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.90° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.2  -0.5  -0.0  -0.4  +0.8  +0.2  着いた
[SEND] pi05_chunk002_via09: send_angles (single) [ +11.86,  +46.56,  +30.07,   -2.69,  -64.06,  -26.57]  speed=20 wait=0.0s  (pre max|Δ|=0.90°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.90° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.3  -0.9  -0.3  -0.4  +0.8  +0.2  着いた
[STATE ] 目標を渡す  目標と実測の最大差 0.90°（関節 j1）
[003] 推論 810ms  10ステップ先  Δ= +1.0 +12.0 -10.0  -0.4  +2.2  +0.1
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 1 に入りました (推論 3 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+11.6 j1=+47.5 j2=+30.4 j3=-2.3 j4=-64.9 j5=-26.8  グリッパー 開
  [補正] 関節 j2  刻み 1.0°  補正目標 j0=+11.6 j1=+47.5 j2=+30.4 j3=-2.3 j4=-64.9 j5=-26.8  グリッパー 開
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+11.6 j1=+47.5 j2=+30.4 j3=-2.3 j4=-64.9 j5=-26.8  グリッパー 開
[SEND] pi05_corr01_000: send_angles (single) [ +11.60,  +47.46,  +32.41,   -2.28,  -64.86,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=2.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j2 着いた (目標 +32.4 / 実測 +32.5, ずれ 0.10° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+11.6 j1=+47.5 j2=+32.4 j3=-2.3 j4=-64.9 j5=-26.8  グリッパー 開
[SEND] pi05_corr01_001: send_angles (single) [ +11.60,  +47.46,  +34.41,   -2.28,  -64.86,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=1.90°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j2 着いた (目標 +34.4 / 実測 +34.9, ずれ 0.48° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+11.6 j1=+47.5 j2=+34.4 j3=-2.3 j4=-64.9 j5=-26.8  グリッパー 開
[SEND] pi05_corr01_002: send_angles (single) [ +11.60,  +47.46,  +36.41,   -2.28,  -64.86,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=1.52°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j2 着いた (目標 +36.4 / 実測 +36.8, ずれ 0.41° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+11.6 j1=+47.5 j2=+36.4 j3=-2.3 j4=-64.9 j5=-26.8  グリッパー 開
[SEND] pi05_corr01_003: send_angles (single) [ +11.60,  +47.46,  +38.41,   -2.28,  -64.86,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=1.59°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j2 着いた (目標 +38.4 / 実測 +38.7, ずれ 0.26° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+11.6 j1=+47.5 j2=+38.4 j3=-2.3 j4=-64.9 j5=-26.8  グリッパー 開
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+11.6 j1=+47.5 j2=+38.4 j3=-2.3 j4=-64.9 j5=-26.8  グリッパー 開
[SEND] pi05_corr01_004: send_angles (single) [ +11.60,  +47.46,  +38.41,   -0.28,  -64.86,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=2.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j3 着いた (目標 -0.3 / 実測 -0.8, ずれ 0.51° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+11.6 j1=+47.5 j2=+38.4 j3=-0.3 j4=-64.9 j5=-26.8  グリッパー 開
[SEND] pi05_corr01_005: send_angles (single) [ +11.60,  +47.46,  +38.41,   -2.28,  -64.86,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=1.49°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j3 着いた (目標 -2.3 / 実測 -1.8, ずれ 0.53° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+11.6 j1=+47.5 j2=+38.4 j3=-2.3 j4=-64.9 j5=-26.8  グリッパー 開
[SEND] pi05_corr01_006: send_angles (single) [ +11.60,  +47.46,  +38.41,   -4.28,  -64.86,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=2.53°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j3 着いた (目標 -4.3 / 実測 -3.9, ずれ 0.42° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+11.6 j1=+47.5 j2=+38.4 j3=-4.3 j4=-64.9 j5=-26.8  グリッパー 開
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+11.6 j1=+47.5 j2=+38.4 j3=-4.3 j4=-64.9 j5=-26.8  グリッパー 開
[SEND] pi05_corr01_007: send_angles (single) [ +11.60,  +47.46,  +36.41,   -4.28,  -64.86,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=2.26°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.11° (tol 3.0°)
  [補正] j2 届いていない (目標 +36.4 / 実測 +37.5, ずれ 1.11° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+11.6 j1=+47.5 j2=+36.4 j3=-4.3 j4=-64.9 j5=-26.8  グリッパー 開
  [補正] 足りなかった 1.1° を足して送る (j2 を -3.1°)
[SEND] pi05_corr01_008: send_angles (single) [ +11.60,  +47.46,  +33.30,   -4.28,  -64.86,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=4.22°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j2 着いた (目標 +33.3 / 実測 +34.1, ずれ 0.80° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+11.6 j1=+47.5 j2=+33.3 j3=-4.3 j4=-64.9 j5=-26.8  グリッパー 開
[CORR  ] 補正 1 を終えました (9 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[004] 推論 1077ms  10ステップ先  Δ= +0.6  +9.2  -7.6  +0.2  +1.8  -0.2  グリッパー→閉
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk004_via02: send_angles (single) [ +11.99,  +52.20,  +31.73,   -3.92,  -64.17,  -26.72]  speed=20 wait=0.0s  (pre max|Δ|=3.78°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.2  +3.8  -2.3  +0.0  +0.4  -0.0  着いた
[SEND] pi05_chunk004_via05: send_angles (single) [ +12.26,  +55.80,  +28.54,   -3.84,  -63.31,  -26.78]  speed=20 wait=0.0s  (pre max|Δ|=4.15°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.90° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.6  +2.9  -4.1  +0.1  +1.3  +0.0  着いた
[SEND] pi05_chunk004_via08: send_angles (single) [ +12.34,  +57.61,  +26.51,   -3.76,  -62.76,  -26.92]  speed=20 wait=0.0s  (pre max|Δ|=2.49°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.36° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.7  +1.3  -2.5  +0.3  +2.5  +0.2  着いた
[SEND] pi05_chunk004_via09: send_angles (single) [ +12.34,  +57.61,  +26.51,   -3.76,  -62.76,  -26.92]  speed=20 wait=0.0s  (pre max|Δ|=2.36°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.01° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.3  -0.4  -0.4  -0.2  +2.4  +0.4  着いた
  [Pi] GRIPPER: VALUE=20 speed=100 result= -1
[STATE ] 目標を渡す  目標と実測の最大差 2.01°（関節 j4）
[005] 推論 2283ms  10ステップ先  Δ= +6.5  -7.7  -1.0  +0.8  +4.2  -1.2
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > h
[SEND] pi05_home: send_angles (single) [  +0.00,   +0.00,   +0.00,   +0.00,   +0.00,  -30.00]  speed=20 wait=0.0s  (pre max|Δ|=64.77°, post-send timeout 11.7s)
[SEND] arrival OK: max|Δ|=2.46° (tol 2.5°)
[RECORD] 記録終了 コマ 892 (8.787 fps) 実測角 591 回 (5.82 Hz)  → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_183219/recording
       結果: y=成功 / n=失敗 / Enter=記録しない > n
[DONE  ] 記録: /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_183219
[CLIENT] run_policy_client.py が終わった (終了コード 0)
    (107 秒)
もう1回やりますか? y=やる / 他=終わる > y

=== 7. HOME → 爪を開く → 位置合わせ (4 回目)
[INIT] daemon 接続中...
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[INIT] fresh_mode=1
[PRE]  現在姿勢: [-0.26, 1.31, 1.58, -0.26, 0.08, -29.70]
[SEND] HOME へ移動指令
[WAIT] t=2.1s  max_err=1.58°
[DONE] HOME 到達 max_err=1.58°
[POST] 最終姿勢: [-0.26, 1.31, 1.58, -0.26, 0.08, -29.70]
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[EXIT] fresh_mode=0, socket close
  [Pi] GRIPPER: OPEN result= -1
[REF   ] 基準画像: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_194818/frames/000000.jpg
[REF   ] お手本 run_0001_20261019_194818 (つかんだ瞬間の j0 = +13.2°)
[REF   ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける
[ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない)
[ALIGN ] dy=  +0.4  dx=  -2.6  response=0.833  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[DONE  ] 終了 (何も書いていません)
    (16 秒)

=== 8. 実機推論 (4 回目)
[WAIT  ] 送ったあと 0.0s / 爪のあと 0.8s (開くときの daemon 0.0s) / 止まるのを待つ目安 0.8s
[SAFE  ] 安全範囲 (学習 19 本 ±10°): j0[-72,+55]  j1[-9,+88]  j2[-46,+41]  j3[-18,+27]  j4[-90,+10]  j5[-51,-14]
[SAFE  ] 肩 j1 の上限は J1_SAFE_MAX=88° で切った (これを超える指令はアームが黙って捨てる / LOG352)  元データ: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes
[MODE  ] EXECUTE  steps/chunk=10  max_move=20.0°  log=/Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_183426
[CAMERA] 写り方 dy=-6.2 dx=+3.9 response=0.595 → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[CAMERA] 基準: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_183454/frames/000000.jpg
[POLICY] 接続 ws://localhost:8000  metadata={}
[RECORD] 上カメラと実測角を 1 秒 10 コマで記録します → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_183426/recording
[GRIP  ] 開始時のグリッパー開放は, 最初の目標が検査を通ってから行います (爪が閉じていたら手で開けておく)
[STATE ] 実測を渡す (直前に送った目標がない)
[000] 推論 1099ms  10ステップ先  Δ= +3.8 +17.8 +11.6  -2.4 -27.0  +2.7
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[GRIP  ] 開始時にグリッパーを開く
  [Pi] GRIPPER: OPEN result= -1
[SEND] pi05_chunk000_via02: send_angles (single) [  +0.44,   +6.24,   +4.28,   -0.64,   -7.06,  -29.20]  speed=20 wait=0.0s  (pre max|Δ|=7.14°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.99° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.7  +4.9  +2.7  -0.4  -7.1  +0.5  着いた
[SEND] pi05_chunk000_via05: send_angles (single) [  +1.51,  +12.06,   +8.21,   -1.57,  -16.15,  -28.28]  speed=20 wait=0.0s  (pre max|Δ|=9.30°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.05° (tol 3.0°)
       [VIA   ] step  5  Δ= +1.2  +5.0  +2.9  -1.3  -9.3  +1.4  着いた
[SEND] pi05_chunk000_via08: send_angles (single) [  +3.04,  +17.41,  +12.11,   -2.51,  -24.42,  -27.29]  speed=20 wait=0.0s  (pre max|Δ|=8.69°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.87° (tol 3.0°)
       [VIA   ] step  8  Δ= +1.9  +4.3  +3.0  -2.0  -8.7  +1.9  着いた
[SEND] pi05_chunk000_via09: send_angles (single) [  +3.58,  +19.08,  +13.18,   -2.70,  -26.94,  -27.04]  speed=20 wait=0.0s  (pre max|Δ|=3.13°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.95° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.5  +0.8  +0.3  -0.6  -3.1  +1.0  着いた
[STATE ] 目標を渡す  目標と実測の最大差 0.95°（関節 j1）
[001] 推論 974ms  10ステップ先  Δ= +5.7 +17.6 +11.6  -0.8 -27.6  +0.8
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 1 に入りました (推論 1 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+3.0 j1=+20.0 j2=+13.9 j3=-2.3 j4=+18.6 j5=-27.3  グリッパー 開
  [補正] 関節 j3  刻み 1.0°  補正目標 j0=+3.0 j1=+20.0 j2=+13.9 j3=-2.3 j4=+18.6 j5=-27.3  グリッパー 開
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+13.9 j3=-2.3 j4=+18.6 j5=-27.3  グリッパー 開
  [LIMIT] j4 安全範囲でクランプ +18.6→+10.4
[SEND] pi05_corr01_000: send_angles (single) [  +2.98,  +20.03,  +13.88,   -0.28,  +10.43,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=9.69°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.95° (tol 3.0°)
  [補正] j3 着いた (目標 -0.3 / 実測 -1.2, ずれ 0.95° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+13.9 j3=-0.3 j4=+10.4 j5=-27.3  グリッパー 開
[SEND] pi05_corr01_001: send_angles (single) [  +2.98,  +20.03,  +13.88,   +1.72,  +10.43,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=2.59°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.80° (tol 3.0°)
  [補正] j3 着いた (目標 +1.7 / 実測 +1.3, ずれ 0.41° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+13.9 j3=+1.7 j4=+10.4 j5=-27.3  グリッパー 開
[SEND] pi05_corr01_002: send_angles (single) [  +2.98,  +20.03,  +13.88,   +3.72,  +10.43,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=2.32°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.80° (tol 3.0°)
  [補正] j3 着いた (目標 +3.7 / 実測 +3.5, ずれ 0.21° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+13.9 j3=+3.7 j4=+10.4 j5=-27.3  グリッパー 開
[SEND] pi05_corr01_003: send_angles (single) [  +2.98,  +20.03,  +13.88,   +5.72,  +10.43,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=2.21°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.80° (tol 3.0°)
  [補正] j3 着いた (目標 +5.7 / 実測 +5.5, ずれ 0.19° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+13.9 j3=+5.7 j4=+10.4 j5=-27.3  グリッパー 開
[SEND] pi05_corr01_004: send_angles (single) [  +2.98,  +20.03,  +13.88,   +3.72,  +10.43,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=1.81°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.85° (tol 3.0°)
  [補正] j3 着いた (目標 +3.7 / 実測 +4.6, ずれ 0.85° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+13.9 j3=+3.7 j4=+10.4 j5=-27.3  グリッパー 開
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+13.9 j3=+3.7 j4=+10.4 j5=-27.3  グリッパー 開
[SEND] pi05_corr01_005: send_angles (single) [  +2.98,  +20.03,  +11.88,   +3.72,  +10.43,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=2.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.91° (tol 3.0°)
  [補正] j2 届いていない (目標 +11.9 / 実測 +13.8, ずれ 1.91° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+11.9 j3=+3.7 j4=+10.4 j5=-27.3  グリッパー 開
  [補正] 足りなかった 1.9° を足して送る (j2 を -3.9°)
[SEND] pi05_corr01_006: send_angles (single) [  +2.98,  +20.03,   +7.97,   +3.72,  +10.43,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=5.82°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.17° (tol 3.0°)
  [補正] j2 届いていない (目標 +8.0 / 実測 +9.1, ずれ 1.17° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+8.0 j3=+3.7 j4=+10.4 j5=-27.3  グリッパー 開
  [補正] 足りなかった 1.2° を足して送る (j2 を -3.2°)
[SEND] pi05_corr01_007: send_angles (single) [  +2.98,  +20.03,   +4.80,   +3.72,  +10.43,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=4.34°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.17° (tol 3.0°)
  [補正] j2 届いていない (目標 +4.8 / 実測 +6.0, ずれ 1.17° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+4.8 j3=+3.7 j4=+10.4 j5=-27.3  グリッパー 開
  [補正] 足りなかった 1.2° を足して送る (j2 を -3.2°)
[SEND] pi05_corr01_008: send_angles (single) [  +2.98,  +20.03,   +1.63,   +3.72,  +10.43,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=4.34°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.27° (tol 3.0°)
  [補正] j2 届いていない (目標 +1.6 / 実測 +2.9, ずれ 1.27° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+1.6 j3=+3.7 j4=+10.4 j5=-27.3  グリッパー 開
  [補正] 関節 j4  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+1.6 j3=+3.7 j4=+10.4 j5=-27.3  グリッパー 開
[SEND] pi05_corr01_009: send_angles (single) [  +2.98,  +20.03,   +1.63,   +3.72,   +8.43,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=2.38°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.27° (tol 3.0°)
  [補正] j4 届いていない (目標 +8.4 / 実測 +9.6, ずれ 1.15° > 1.00°)
  [補正] 関節 j4  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+1.6 j3=+3.7 j4=+8.4 j5=-27.3  グリッパー 開
  [補正] 足りなかった 1.1° を足して送る (j4 を -3.1°)
[SEND] pi05_corr01_010: send_angles (single) [  +2.98,  +20.03,   +1.63,   +3.72,   +5.28,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=4.30°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.27° (tol 3.0°)
  [補正] j4 着いた (目標 +5.3 / 実測 +5.6, ずれ 0.34° ≤ 1.00°)
  [補正] 関節 j4  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+1.6 j3=+3.7 j4=+5.3 j5=-27.3  グリッパー 開
[SEND] pi05_corr01_011: send_angles (single) [  +2.98,  +20.03,   +1.63,   +3.72,   +3.28,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=2.34°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.27° (tol 3.0°)
  [補正] j4 着いた (目標 +3.3 / 実測 +3.2, ずれ 0.12° ≤ 1.00°)
  [補正] 関節 j4  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+1.6 j3=+3.7 j4=+3.3 j5=-27.3  グリッパー 開
[SEND] pi05_corr01_012: send_angles (single) [  +2.98,  +20.03,   +1.63,   +3.72,   +1.28,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=1.88°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.27° (tol 3.0°)
  [補正] j4 着いた (目標 +1.3 / 実測 +1.4, ずれ 0.12° ≤ 1.00°)
  [補正] 関節 j4  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+1.6 j3=+3.7 j4=+1.3 j5=-27.3  グリッパー 開
[SEND] pi05_corr01_013: send_angles (single) [  +2.98,  +20.03,   +1.63,   +3.72,   -0.72,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=2.12°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.27° (tol 3.0°)
  [補正] j4 着いた (目標 -0.7 / 実測 -0.7, ずれ 0.02° ≤ 1.00°)
  [補正] 関節 j4  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+1.6 j3=+3.7 j4=-0.7 j5=-27.3  グリッパー 開
[SEND] pi05_corr01_014: send_angles (single) [  +2.98,  +20.03,   +1.63,   +3.72,   -2.72,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=2.02°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.27° (tol 3.0°)
  [補正] j4 着いた (目標 -2.7 / 実測 -2.3, ずれ 0.44° ≤ 1.00°)
  [補正] 関節 j4  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+1.6 j3=+3.7 j4=-2.7 j5=-27.3  グリッパー 開
[SEND] pi05_corr01_015: send_angles (single) [  +2.98,  +20.03,   +1.63,   +3.72,   -4.72,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=2.44°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.27° (tol 3.0°)
  [補正] j4 着いた (目標 -4.7 / 実測 -4.8, ずれ 0.11° ≤ 1.00°)
  [補正] 関節 j4  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+1.6 j3=+3.7 j4=-4.7 j5=-27.3  グリッパー 開
[SEND] pi05_corr01_016: send_angles (single) [  +2.98,  +20.03,   +1.63,   +3.72,   -6.72,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=1.89°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.27° (tol 3.0°)
  [補正] j4 着いた (目標 -6.7 / 実測 -6.6, ずれ 0.13° ≤ 1.00°)
  [補正] 関節 j4  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+1.6 j3=+3.7 j4=-6.7 j5=-27.3  グリッパー 開
[SEND] pi05_corr01_017: send_angles (single) [  +2.98,  +20.03,   +1.63,   +3.72,   -8.72,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=2.13°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.27° (tol 3.0°)
  [補正] j4 着いた (目標 -8.7 / 実測 -8.8, ずれ 0.06° ≤ 1.00°)
  [補正] 関節 j4  刻み 2.0°  補正目標 j0=+3.0 j1=+20.0 j2=+1.6 j3=+3.7 j4=-8.7 j5=-27.3  グリッパー 開
[CORR  ] 補正 1 を終えました (18 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[002] 推論 1202ms  10ステップ先  Δ= +3.8 +14.0  +9.1  +0.1 -23.5  +0.5
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk002_via02: send_angles (single) [  +4.09,  +23.70,   +4.83,   +4.13,  -13.97,  -27.08]  speed=20 wait=0.0s  (pre max|Δ|=5.19°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.99° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.2  +2.8  +1.9  +0.4  -5.2  +0.2  着いた
[SEND] pi05_chunk002_via05: send_angles (single) [  +5.05,  +28.52,   +7.92,   +3.99,  -21.96,  -26.78]  speed=20 wait=0.0s  (pre max|Δ|=8.43°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.01° (tol 3.0°)
       [VIA   ] step  5  Δ= +1.3  +3.8  +2.2  +0.2  -8.4  +0.5  着いた
[SEND] pi05_chunk002_via08: send_angles (single) [  +6.34,  +33.43,  +11.13,   +3.77,  -29.77,  -26.68]  speed=20 wait=0.0s  (pre max|Δ|=8.42°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.93° (tol 3.0°)
       [VIA   ] step  8  Δ= +1.8  +3.9  +2.4  -0.1  -8.4  +0.3  着いた
[SEND] pi05_chunk002_via09: send_angles (single) [  +6.66,  +34.89,  +12.04,   +3.86,  -32.27,  -26.72]  speed=20 wait=0.0s  (pre max|Δ|=3.18°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.9  +0.5  +0.3  -0.0  -3.2  +0.2  着いた
[STATE ] 目標を渡す  目標と実測の最大差 0.96°（関節 j1）
[003] 推論 2347ms  10ステップ先  Δ= +2.1 +14.1  +6.9  +0.3 -21.0  +0.2
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 2 に入りました (推論 3 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+6.6 j1=+35.9 j2=+11.8 j3=+4.0 j4=-32.1 j5=-26.9  グリッパー 開
  [補正] 関節 j3  刻み 1.0°  補正目標 j0=+6.6 j1=+35.9 j2=+11.8 j3=+4.0 j4=-32.1 j5=-26.9  グリッパー 開
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+6.6 j1=+35.9 j2=+11.8 j3=+4.0 j4=-32.1 j5=-26.9  グリッパー 開
[SEND] pi05_corr02_000: send_angles (single) [  +6.59,  +35.85,  +11.77,   +5.95,  -32.08,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.15° (tol 3.0°)
  [補正] j3 着いた (目標 +6.0 / 実測 +5.4, ずれ 0.51° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+6.6 j1=+35.9 j2=+11.8 j3=+6.0 j4=-32.1 j5=-26.9  グリッパー 開
[SEND] pi05_corr02_001: send_angles (single) [  +6.59,  +35.85,  +11.77,   +7.95,  -32.08,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.51°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.15° (tol 3.0°)
  [補正] j3 着いた (目標 +8.0 / 実測 +7.6, ずれ 0.31° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+6.6 j1=+35.9 j2=+11.8 j3=+8.0 j4=-32.1 j5=-26.9  グリッパー 開
[SEND] pi05_corr02_002: send_angles (single) [  +6.59,  +35.85,  +11.77,   +9.95,  -32.08,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.31°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.15° (tol 3.0°)
  [補正] j3 着いた (目標 +9.9 / 実測 +9.7, ずれ 0.29° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+6.6 j1=+35.9 j2=+11.8 j3=+9.9 j4=-32.1 j5=-26.9  グリッパー 開
[SEND] pi05_corr02_003: send_angles (single) [  +6.59,  +35.85,  +11.77,   +7.95,  -32.08,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=1.71°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.15° (tol 3.0°)
  [補正] j3 着いた (目標 +7.9 / 実測 +8.7, ずれ 0.75° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+6.6 j1=+35.9 j2=+11.8 j3=+7.9 j4=-32.1 j5=-26.9  グリッパー 開
[SEND] pi05_corr02_004: send_angles (single) [  +6.59,  +35.85,  +11.77,   +5.95,  -32.08,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.75°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.15° (tol 3.0°)
  [補正] j3 着いた (目標 +5.9 / 実測 +6.4, ずれ 0.46° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+6.6 j1=+35.9 j2=+11.8 j3=+5.9 j4=-32.1 j5=-26.9  グリッパー 開
[SEND] pi05_corr02_005: send_angles (single) [  +6.59,  +35.85,  +11.77,   +3.95,  -32.08,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.46°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.15° (tol 3.0°)
  [補正] j3 着いた (目標 +3.9 / 実測 +4.2, ずれ 0.26° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+6.6 j1=+35.9 j2=+11.8 j3=+3.9 j4=-32.1 j5=-26.9  グリッパー 開
[SEND] pi05_corr02_006: send_angles (single) [  +6.59,  +35.85,  +11.77,   +1.95,  -32.08,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.26°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.15° (tol 3.0°)
  [補正] j3 着いた (目標 +1.9 / 実測 +2.3, ずれ 0.33° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+6.6 j1=+35.9 j2=+11.8 j3=+1.9 j4=-32.1 j5=-26.9  グリッパー 開
[SEND] pi05_corr02_007: send_angles (single) [  +6.59,  +35.85,  +11.77,   -0.05,  -32.08,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.33°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.15° (tol 3.0°)
  [補正] j3 着いた (目標 -0.1 / 実測 +0.3, ずれ 0.31° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+6.6 j1=+35.9 j2=+11.8 j3=-0.1 j4=-32.1 j5=-26.9  グリッパー 開
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+6.6 j1=+35.9 j2=+11.8 j3=-0.1 j4=-32.1 j5=-26.9  グリッパー 開
[SEND] pi05_corr02_008: send_angles (single) [  +4.59,  +35.85,  +11.77,   -0.05,  -32.08,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=1.91°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.15° (tol 3.0°)
  [補正] j0 着いた (目標 +4.6 / 実測 +4.6, ずれ 0.02° ≤ 1.00°)
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+4.6 j1=+35.9 j2=+11.8 j3=-0.1 j4=-32.1 j5=-26.9  グリッパー 開
[SEND] pi05_corr02_009: send_angles (single) [  +6.59,  +35.85,  +11.77,   -0.05,  -32.08,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.02°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.15° (tol 3.0°)
  [補正] j0 着いた (目標 +6.6 / 実測 +6.6, ずれ 0.00° ≤ 1.00°)
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+6.6 j1=+35.9 j2=+11.8 j3=-0.1 j4=-32.1 j5=-26.9  グリッパー 開
[SEND] pi05_corr02_010: send_angles (single) [  +8.59,  +35.85,  +11.77,   -0.05,  -32.08,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=2.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.15° (tol 3.0°)
  [補正] j0 着いた (目標 +8.6 / 実測 +8.6, ずれ 0.02° ≤ 1.00°)
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+8.6 j1=+35.9 j2=+11.8 j3=-0.1 j4=-32.1 j5=-26.9  グリッパー 開
[SEND] pi05_corr02_011: send_angles (single) [ +10.59,  +35.85,  +11.77,   -0.05,  -32.08,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=1.98°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.15° (tol 3.0°)
  [補正] j0 着いた (目標 +10.6 / 実測 +10.7, ずれ 0.13° ≤ 1.00°)
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+10.6 j1=+35.9 j2=+11.8 j3=-0.1 j4=-32.1 j5=-26.9  グリッパー 開
[SEND] pi05_corr02_012: send_angles (single) [ +12.59,  +35.85,  +11.77,   -0.05,  -32.08,  -26.89]  speed=20 wait=0.0s  (pre max|Δ|=1.87°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.15° (tol 3.0°)
  [補正] j0 着いた (目標 +12.6 / 実測 +12.7, ずれ 0.06° ≤ 1.00°)
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+12.6 j1=+35.9 j2=+11.8 j3=-0.1 j4=-32.1 j5=-26.9  グリッパー 開
[CORR  ] 補正 2 を終えました (13 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[004] 推論 1140ms  10ステップ先  Δ= +2.2 +14.5  +8.4  -0.0 -21.5  +0.1
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk004_via02: send_angles (single) [ +13.66,  +40.78,  +14.24,   -0.17,  -38.98,  -26.42]  speed=20 wait=0.0s  (pre max|Δ|=6.55°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.54° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.0  +3.8  +2.5  +0.2  -6.5  +0.0  着いた
[SEND] pi05_chunk004_via05: send_angles (single) [ +14.42,  +46.34,  +17.38,   -0.20,  -48.06,  -26.38]  speed=20 wait=0.0s  (pre max|Δ|=10.62°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.48° (tol 3.0°)
       [VIA   ] step  5  Δ= +1.1  +4.7  +2.5  +0.2 -10.6  +0.1  着いた
[SEND] pi05_chunk004_via08: send_angles (single) [ +14.69,  +50.60,  +19.69,   -0.33,  -53.02,  -26.37]  speed=20 wait=0.0s  (pre max|Δ|=6.44°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.07° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.4  +3.3  +1.9  +0.1  -6.4  +0.1  着いた
[SEND] pi05_chunk004_via09: send_angles (single) [ +14.81,  +51.51,  +20.17,   -0.37,  -53.94,  -26.39]  speed=20 wait=0.0s  (pre max|Δ|=1.21°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.87° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.5  -0.2  +0.0  -0.0  -1.2  +0.1  着いた
[STATE ] 目標を渡す  目標と実測の最大差 0.87°（関節 j1）
[005] 推論 1012ms  8ステップ先  Δ= +0.3  +4.4  -1.5  +0.4  -1.7  -0.1  グリッパー→閉
       [VIA   ] 中継点 3 点: step 2, 5, 7
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk005_via02: send_angles (single) [ +14.61,  +54.63,  +19.74,   -0.06,  -55.14,  -26.45]  speed=20 wait=0.0s  (pre max|Δ|=2.25°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.91° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.3  +2.2  -0.4  +0.3  -1.3  +0.0  着いた
[SEND] pi05_chunk005_via05: send_angles (single) [ +14.48,  +56.69,  +18.78,   +0.06,  -55.68,  -26.53]  speed=20 wait=0.0s  (pre max|Δ|=1.34°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.06° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.2  +1.2  -1.3  +0.4  -0.3  +0.1  着いた
[SEND] pi05_chunk005_via07: send_angles (single) [ +14.65,  +56.81,  +18.58,   +0.04,  -55.53,  -26.54]  speed=20 wait=0.0s  (pre max|Δ|=2.21°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.12° (tol 3.0°)
       [VIA   ] step  7  Δ= +0.3  -0.7  -1.4  +0.5  +2.2  +0.3  着いた
  [Pi] GRIPPER: VALUE=20 speed=100 result= -1
[STATE ] 目標を渡す  目標と実測の最大差 2.21°（関節 j4）
[006] 推論 2153ms  10ステップ先  Δ= +9.3  -7.9  +0.0  +0.5  +2.4  -1.0
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk006_via02: send_angles (single) [ +14.56,  +53.56,  +21.09,   -0.00,  -56.19,  -26.46]  speed=20 wait=0.0s  (pre max|Δ|=3.92°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.28° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.6  -3.9  +2.0  -0.8  +1.6  +0.5  着いた
[SEND] pi05_chunk006_via05: send_angles (single) [ +14.99,  +51.08,  +22.50,   -0.02,  -56.48,  -26.44]  speed=20 wait=0.0s  (pre max|Δ|=3.76°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.65° (tol 3.0°)
       [VIA   ] step  5  Δ= +1.0  -3.8  +2.2  -0.3  -1.2  -0.1  着いた
[SEND] pi05_chunk006_via08: send_angles (single) [ +21.18,  +50.13,  +19.92,   +1.15,  -55.74,  -27.60]  speed=20 wait=0.0s  (pre max|Δ|=6.51°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.34° (tol 3.0°)
       [VIA   ] step  8  Δ= +6.5  -2.6  -2.4  +1.0  -0.9  -1.8  着いた
[SEND] pi05_chunk006_via09: send_angles (single) [ +23.30,  +49.61,  +19.07,   +1.52,  -55.31,  -28.01]  speed=20 wait=0.0s  (pre max|Δ|=2.86°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.24° (tol 3.0°)
       [VIA   ] step  9  Δ= +2.1  -2.9  -2.0  +1.4  -1.4  -1.7  着いた
[STATE ] 目標を渡す  目標と実測の最大差 2.24°（関節 j1）
[007] 推論 978ms  10ステップ先  Δ=+18.3  +1.7 -16.7  +4.1  +2.7  -4.9
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 3 に入りました (推論 7 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+23.4 j1=+51.9 j2=+20.3 j3=+1.2 j4=-53.9 j5=-27.4  グリッパー 閉
  [補正] 関節 j3  刻み 1.0°  補正目標 j0=+23.4 j1=+51.9 j2=+20.3 j3=+1.2 j4=-53.9 j5=-27.4  グリッパー 閉
[SEND] pi05_corr03_000: send_angles (single) [ +23.37,  +51.85,  +20.30,   +2.23,  -53.87,  -27.42]  speed=20 wait=0.0s  (pre max|Δ|=1.23°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.23° (tol 3.0°)
  [補正] j3 着いた (目標 +2.2 / 実測 +1.8, ずれ 0.48° ≤ 0.50°)
  [補正] 関節 j3  刻み 1.0°  補正目標 j0=+23.4 j1=+51.9 j2=+20.3 j3=+2.2 j4=-53.9 j5=-27.4  グリッパー 閉
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+23.4 j1=+51.9 j2=+20.3 j3=+2.2 j4=-53.9 j5=-27.4  グリッパー 閉
[SEND] pi05_corr03_001: send_angles (single) [ +23.37,  +51.85,  +20.30,   +0.23,  -53.87,  -27.42]  speed=20 wait=0.0s  (pre max|Δ|=1.52°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.23° (tol 3.0°)
  [補正] j3 着いた (目標 +0.2 / 実測 +1.1, ずれ 0.82° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+23.4 j1=+51.9 j2=+20.3 j3=+0.2 j4=-53.9 j5=-27.4  グリッパー 閉
[SEND] pi05_corr03_002: send_angles (single) [ +23.37,  +51.85,  +20.30,   -1.77,  -53.87,  -27.42]  speed=20 wait=0.0s  (pre max|Δ|=2.73°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.06° (tol 3.0°)
  [補正] j3 着いた (目標 -1.8 / 実測 -1.3, ずれ 0.46° ≤ 1.00°)
  [補正] 関節 j3  刻み 2.0°  補正目標 j0=+23.4 j1=+51.9 j2=+20.3 j3=-1.8 j4=-53.9 j5=-27.4  グリッパー 閉
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.4 j1=+51.9 j2=+20.3 j3=-1.8 j4=-53.9 j5=-27.4  グリッパー 閉
[SEND] pi05_corr03_003: send_angles (single) [ +23.37,  +51.85,  +22.30,   -1.77,  -53.87,  -27.42]  speed=20 wait=0.0s  (pre max|Δ|=1.74°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.14° (tol 3.0°)
  [補正] j2 着いた (目標 +22.3 / 実測 +21.8, ずれ 0.51° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.4 j1=+51.9 j2=+22.3 j3=-1.8 j4=-53.9 j5=-27.4  グリッパー 閉
[SEND] pi05_corr03_004: send_angles (single) [ +23.37,  +51.85,  +24.30,   -1.77,  -53.87,  -27.42]  speed=20 wait=0.0s  (pre max|Δ|=2.51°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.67° (tol 3.0°)
  [補正] j2 着いた (目標 +24.3 / 実測 +23.6, ずれ 0.66° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.4 j1=+51.9 j2=+24.3 j3=-1.8 j4=-53.9 j5=-27.4  グリッパー 閉
[SEND] pi05_corr03_005: send_angles (single) [ +23.37,  +51.85,  +26.30,   -1.77,  -53.87,  -27.42]  speed=20 wait=0.0s  (pre max|Δ|=2.66°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.67° (tol 3.0°)
  [補正] j2 届いていない (目標 +26.3 / 実測 +25.0, ずれ 1.26° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.4 j1=+51.9 j2=+26.3 j3=-1.8 j4=-53.9 j5=-27.4  グリッパー 閉
[SEND] pi05_corr03_006: send_angles (single) [ +23.37,  +51.85,  +24.30,   -1.77,  -53.87,  -27.42]  speed=20 wait=0.0s  (pre max|Δ|=1.76°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.76° (tol 3.0°)
  [補正] j2 着いた (目標 +24.3 / 実測 +24.8, ずれ 0.48° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.4 j1=+51.9 j2=+24.3 j3=-1.8 j4=-53.9 j5=-27.4  グリッパー 閉
[SEND] pi05_corr03_007: send_angles (single) [ +23.37,  +51.85,  +22.30,   -1.77,  -53.87,  -27.42]  speed=20 wait=0.0s  (pre max|Δ|=2.48°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.70° (tol 3.0°)
  [補正] j2 着いた (目標 +22.3 / 実測 +22.6, ずれ 0.28° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.4 j1=+51.9 j2=+22.3 j3=-1.8 j4=-53.9 j5=-27.4  グリッパー 閉
[SEND] pi05_corr03_008: send_angles (single) [ +23.37,  +51.85,  +20.30,   -1.77,  -53.87,  -27.42]  speed=20 wait=0.0s  (pre max|Δ|=2.28°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.76° (tol 3.0°)
  [補正] j2 着いた (目標 +20.3 / 実測 +20.9, ずれ 0.61° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.4 j1=+51.9 j2=+20.3 j3=-1.8 j4=-53.9 j5=-27.4  グリッパー 閉
[SEND] pi05_corr03_009: send_angles (single) [ +23.37,  +51.85,  +18.30,   -1.77,  -53.87,  -27.42]  speed=20 wait=0.0s  (pre max|Δ|=2.61°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.63° (tol 3.0°)
  [補正] j2 届いていない (目標 +18.3 / 実測 +19.4, ずれ 1.12° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.4 j1=+51.9 j2=+18.3 j3=-1.8 j4=-53.9 j5=-27.4  グリッパー 閉
  [補正] 足りなかった 1.1° を足して送る (j2 を -3.1°)
[SEND] pi05_corr03_010: send_angles (single) [ +23.37,  +51.85,  +15.18,   -1.77,  -53.87,  -27.42]  speed=20 wait=0.0s  (pre max|Δ|=4.24°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.63° (tol 3.0°)
  [補正] j2 着いた (目標 +15.2 / 実測 +16.2, ずれ 0.99° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.4 j1=+51.9 j2=+15.2 j3=-1.8 j4=-53.9 j5=-27.4  グリッパー 閉
[CORR  ] 補正 3 を終えました (11 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[008] 推論 893ms  10ステップ先  Δ=+13.2  -0.0  -7.7  +3.1  +2.3  -3.4
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > r
       爪を締め直します (開かずに閉じる指令をもう一度)
  [Pi] GRIPPER: VALUE=20 speed=100 result= -1
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > r
       爪を締め直します (開かずに閉じる指令をもう一度)
  [Pi] GRIPPER: VALUE=20 speed=100 result= -1
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 4 に入りました (推論 8 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+23.4 j1=+52.6 j2=+16.2 j3=-1.8 j4=-54.4 j5=-27.1  グリッパー 閉
  [補正] 関節 j2  刻み 1.0°  補正目標 j0=+23.4 j1=+52.6 j2=+16.2 j3=-1.8 j4=-54.4 j5=-27.1  グリッパー 閉
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.4 j1=+52.6 j2=+16.2 j3=-1.8 j4=-54.4 j5=-27.1  グリッパー 閉
[SEND] pi05_corr04_000: send_angles (single) [ +23.37,  +52.64,  +14.17,   -1.84,  -54.40,  -27.07]  speed=20 wait=0.0s  (pre max|Δ|=2.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.12° (tol 3.0°)
  [補正] j2 届いていない (目標 +14.2 / 実測 +15.3, ずれ 1.12° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.4 j1=+52.6 j2=+14.2 j3=-1.8 j4=-54.4 j5=-27.1  グリッパー 閉
[SEND] pi05_corr04_001: send_angles (single) [ +23.37,  +52.64,  +16.17,   -1.84,  -54.40,  -27.07]  speed=20 wait=0.0s  (pre max|Δ|=0.88°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.88° (tol 3.0°)
  [補正] j2 着いた (目標 +16.2 / 実測 +15.9, ずれ 0.27° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.4 j1=+52.6 j2=+16.2 j3=-1.8 j4=-54.4 j5=-27.1  グリッパー 閉
[SEND] pi05_corr04_002: send_angles (single) [ +23.37,  +52.64,  +18.17,   -1.84,  -54.40,  -27.07]  speed=20 wait=0.0s  (pre max|Δ|=2.27°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.88° (tol 3.0°)
  [補正] j2 着いた (目標 +18.2 / 実測 +17.9, ずれ 0.25° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.4 j1=+52.6 j2=+18.2 j3=-1.8 j4=-54.4 j5=-27.1  グリッパー 閉
[SEND] pi05_corr04_003: send_angles (single) [ +23.37,  +52.64,  +20.17,   -1.84,  -54.40,  -27.07]  speed=20 wait=0.0s  (pre max|Δ|=2.25°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.97° (tol 3.0°)
  [補正] j2 着いた (目標 +20.2 / 実測 +20.7, ずれ 0.57° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.4 j1=+52.6 j2=+20.2 j3=-1.8 j4=-54.4 j5=-27.1  グリッパー 閉
[SEND] pi05_corr04_004: send_angles (single) [ +23.37,  +52.64,  +18.17,   -1.84,  -54.40,  -27.07]  speed=20 wait=0.0s  (pre max|Δ|=2.57°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.07° (tol 3.0°)
  [補正] j2 届いていない (目標 +18.2 / 実測 +19.2, ずれ 1.07° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.4 j1=+52.6 j2=+18.2 j3=-1.8 j4=-54.4 j5=-27.1  グリッパー 閉
  [補正] 足りなかった 1.1° を足して送る (j2 を -3.1°)
[SEND] pi05_corr04_005: send_angles (single) [ +23.37,  +52.64,  +15.10,   -1.84,  -54.40,  -27.07]  speed=20 wait=0.0s  (pre max|Δ|=4.14°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.97° (tol 3.0°)
  [補正] j2 着いた (目標 +15.1 / 実測 +16.0, ずれ 0.89° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.4 j1=+52.6 j2=+15.1 j3=-1.8 j4=-54.4 j5=-27.1  グリッパー 閉
[CORR  ] 補正 4 を終えました (6 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[009] 推論 887ms  10ステップ先  Δ=+17.8  +1.3 -15.1  +4.4  +5.2  -4.2
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > r
       爪を締め直します (開かずに閉じる指令をもう一度)
  [Pi] GRIPPER: VALUE=20 speed=100 result= -1
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > r
       爪を締め直します (開かずに閉じる指令をもう一度)
  [Pi] GRIPPER: VALUE=20 speed=100 result= -1
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 5 に入りました (推論 9 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+23.7 j1=+53.6 j2=+16.0 j3=-1.4 j4=-54.0 j5=-27.1  グリッパー 閉
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+23.7 j1=+53.6 j2=+16.0 j3=-1.4 j4=-54.0 j5=-27.1  グリッパー 閉
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.7 j1=+53.6 j2=+16.0 j3=-1.4 j4=-54.0 j5=-27.1  グリッパー 閉
[SEND] pi05_corr05_000: send_angles (single) [ +23.73,  +53.61,  +13.99,   -1.40,  -53.96,  -27.07]  speed=20 wait=0.0s  (pre max|Δ|=2.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.47° (tol 3.0°)
  [補正] j2 届いていない (目標 +14.0 / 実測 +15.5, ずれ 1.47° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.7 j1=+53.6 j2=+14.0 j3=-1.4 j4=-54.0 j5=-27.1  グリッパー 閉
  [補正] 足りなかった 1.5° を足して送る (j2 を -3.5°)
[SEND] pi05_corr05_001: send_angles (single) [ +23.73,  +53.61,  +10.52,   -1.40,  -53.96,  -27.07]  speed=20 wait=0.0s  (pre max|Δ|=4.94°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.99° (tol 3.0°)
  [補正] j2 着いた (目標 +10.5 / 実測 +11.5, ずれ 0.99° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.7 j1=+53.6 j2=+10.5 j3=-1.4 j4=-54.0 j5=-27.1  グリッパー 閉
[SEND] pi05_corr05_002: send_angles (single) [ +23.73,  +53.61,   +8.52,   -1.40,  -53.96,  -27.07]  speed=20 wait=0.0s  (pre max|Δ|=2.99°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.06° (tol 3.0°)
  [補正] j2 届いていない (目標 +8.5 / 実測 +9.6, ずれ 1.06° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.7 j1=+53.6 j2=+8.5 j3=-1.4 j4=-54.0 j5=-27.1  グリッパー 閉
  [補正] 足りなかった 1.1° を足して送る (j2 を -3.1°)
[SEND] pi05_corr05_003: send_angles (single) [ +23.73,  +53.61,   +5.46,   -1.40,  -53.96,  -27.07]  speed=20 wait=0.0s  (pre max|Δ|=4.12°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.04° (tol 3.0°)
  [補正] j2 届いていない (目標 +5.5 / 実測 +6.5, ずれ 1.04° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.7 j1=+53.6 j2=+5.5 j3=-1.4 j4=-54.0 j5=-27.1  グリッパー 閉
  [補正] 足りなかった 1.0° を足して送る (j2 を -3.0°)
[SEND] pi05_corr05_004: send_angles (single) [ +23.73,  +53.61,   +2.42,   -1.40,  -53.96,  -27.07]  speed=20 wait=0.0s  (pre max|Δ|=4.08°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.09° (tol 3.0°)
  [補正] j2 届いていない (目標 +2.4 / 実測 +3.5, ずれ 1.09° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.7 j1=+53.6 j2=+2.4 j3=-1.4 j4=-54.0 j5=-27.1  グリッパー 閉
  [補正] 足りなかった 1.1° を足して送る (j2 を -3.1°)
[SEND] pi05_corr05_005: send_angles (single) [ +23.73,  +53.61,   -0.67,   -1.40,  -53.96,  -27.07]  speed=20 wait=0.0s  (pre max|Δ|=4.18°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.10° (tol 3.0°)
  [補正] j2 届いていない (目標 -0.7 / 実測 +0.4, ずれ 1.10° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.7 j1=+53.6 j2=-0.7 j3=-1.4 j4=-54.0 j5=-27.1  グリッパー 閉
  [補正] 足りなかった 1.1° を足して送る (j2 を -3.1°)
[SEND] pi05_corr05_006: send_angles (single) [ +23.73,  +53.61,   -3.77,   -1.40,  -53.96,  -27.07]  speed=20 wait=0.0s  (pre max|Δ|=4.20°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.14° (tol 3.0°)
  [補正] j2 届いていない (目標 -3.8 / 実測 -2.6, ずれ 1.14° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.7 j1=+53.6 j2=-3.8 j3=-1.4 j4=-54.0 j5=-27.1  グリッパー 閉
  [補正] 足りなかった 1.1° を足して送る (j2 を -3.1°)
[SEND] pi05_corr05_007: send_angles (single) [ +23.73,  +53.61,   -6.91,   -1.40,  -53.96,  -27.07]  speed=20 wait=0.0s  (pre max|Δ|=4.28°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.11° (tol 3.0°)
  [補正] j2 届いていない (目標 -6.9 / 実測 -5.8, ずれ 1.11° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.7 j1=+53.6 j2=-6.9 j3=-1.4 j4=-54.0 j5=-27.1  グリッパー 閉
  [補正] 足りなかった 1.1° を足して送る (j2 を -3.1°)
[SEND] pi05_corr05_008: send_angles (single) [ +23.73,  +53.61,  -10.02,   -1.40,  -53.96,  -27.07]  speed=20 wait=0.0s  (pre max|Δ|=4.22°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.15° (tol 3.0°)
  [補正] j2 届いていない (目標 -10.0 / 実測 -8.9, ずれ 1.15° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+23.7 j1=+53.6 j2=-10.0 j3=-1.4 j4=-54.0 j5=-27.1  グリッパー 閉
[CORR  ] 補正 5 を終えました (9 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[010] 推論 2182ms  10ステップ先  Δ=+11.7  -2.5  +1.7  +1.7  +1.0  -1.2
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > h
[SEND] pi05_home: send_angles (single) [  +0.00,   +0.00,   +0.00,   +0.00,   +0.00,  -30.00]  speed=20 wait=0.0s  (pre max|Δ|=54.66°, post-send timeout 10.2s)
[SEND] arrival OK: max|Δ|=1.49° (tol 2.5°)
[RECORD] 記録終了 コマ 2836 (8.75 fps) 実測角 1993 回 (6.15 Hz)  → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_183426/recording
       結果: y=成功 / n=失敗 / Enter=記録しない > n
[DONE  ] 記録: /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_183426
[CLIENT] run_policy_client.py が終わった (終了コード 0)
    (331 秒)
もう1回やりますか? y=やる / 他=終わる > y

=== 7. HOME → 爪を開く → 位置合わせ (5 回目)
[INIT] daemon 接続中...
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[INIT] fresh_mode=1
[PRE]  現在姿勢: [-0.26, 1.49, 0.70, -0.26, -0.26, -29.61]
[SEND] HOME へ移動指令
[WAIT] t=2.0s  max_err=1.49°
[DONE] HOME 到達 max_err=1.49°
[POST] 最終姿勢: [-0.26, 1.49, 0.70, -0.26, -0.26, -29.70]
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[EXIT] fresh_mode=0, socket close
  [Pi] GRIPPER: OPEN result= -1
[REF   ] 基準画像: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_194818/frames/000000.jpg
[REF   ] お手本 run_0001_20261019_194818 (つかんだ瞬間の j0 = +13.2°)
[REF   ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける
[ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない)
[ALIGN ] dy=  +0.5  dx=  -2.6  response=0.917  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[DONE  ] 終了 (何も書いていません)
    (17 秒)

=== 8. 実機推論 (5 回目)
[WAIT  ] 送ったあと 0.0s / 爪のあと 0.8s (開くときの daemon 0.0s) / 止まるのを待つ目安 0.8s
[SAFE  ] 安全範囲 (学習 19 本 ±10°): j0[-72,+55]  j1[-9,+88]  j2[-46,+41]  j3[-18,+27]  j4[-90,+10]  j5[-51,-14]
[SAFE  ] 肩 j1 の上限は J1_SAFE_MAX=88° で切った (これを超える指令はアームが黙って捨てる / LOG352)  元データ: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes
[MODE  ] EXECUTE  steps/chunk=10  max_move=20.0°  log=/Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_184016
[CAMERA] 写り方 dy=-5.6 dx=+4.0 response=0.626 → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[CAMERA] 基準: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_183454/frames/000000.jpg
[POLICY] 接続 ws://localhost:8000  metadata={}
[RECORD] 上カメラと実測角を 1 秒 10 コマで記録します → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_184016/recording
[GRIP  ] 開始時のグリッパー開放は, 最初の目標が検査を通ってから行います (爪が閉じていたら手で開けておく)
[STATE ] 実測を渡す (直前に送った目標がない)
[000] 推論 863ms  10ステップ先  Δ= +4.9 +18.5 +11.8  -1.9 -26.5  +2.6
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[GRIP  ] 開始時にグリッパーを開く
  [Pi] GRIPPER: OPEN result= -1
[SEND] pi05_chunk000_via02: send_angles (single) [  +0.92,   +6.27,   +3.60,   -0.52,   -7.30,  -29.14]  speed=20 wait=0.0s  (pre max|Δ|=7.04°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.03° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.2  +4.8  +2.9  -0.3  -7.0  +0.6  着いた
[SEND] pi05_chunk000_via05: send_angles (single) [  +2.28,  +12.26,   +7.25,   -1.21,  -15.79,  -28.25]  speed=20 wait=0.0s  (pre max|Δ|=10.52°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.38° (tol 3.0°)
       [VIA   ] step  5  Δ= +1.7  +5.1  +2.8  -0.9 -10.5  +1.4  着いた
[SEND] pi05_chunk000_via08: send_angles (single) [  +3.81,  +17.96,  +11.19,   -1.97,  -23.92,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=9.51°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.07° (tol 3.0°)
       [VIA   ] step  8  Δ= +2.0  +4.7  +3.0  -1.7  -9.5  +1.8  着いた
[SEND] pi05_chunk000_via09: send_angles (single) [  +4.65,  +19.97,  +12.47,   -2.18,  -26.73,  -27.09]  speed=20 wait=0.0s  (pre max|Δ|=3.88°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.94° (tol 3.0°)
       [VIA   ] step  9  Δ= +1.4  +1.0  +0.4  -0.8  -3.9  +0.9  着いた
[STATE ] 目標を渡す  目標と実測の最大差 0.94°（関節 j1）
[001] 推論 1132ms  10ステップ先  Δ= +4.8 +17.3 +11.1  -0.9 -28.4  +1.0
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk001_via02: send_angles (single) [  +6.16,  +25.07,  +15.96,   -2.69,  -34.29,  -26.76]  speed=20 wait=0.0s  (pre max|Δ|=7.93°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.94° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.7  +4.2  +2.8  -0.9  -7.9  +0.7  着いた
[SEND] pi05_chunk001_via05: send_angles (single) [  +7.74,  +30.92,  +19.62,   -2.71,  -43.66,  -26.69]  speed=20 wait=0.0s  (pre max|Δ|=9.91°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.89° (tol 3.0°)
       [VIA   ] step  5  Δ= +1.9  +4.9  +2.9  -0.2  -9.9  +0.4  着いた
[SEND] pi05_chunk001_via08: send_angles (single) [  +9.05,  +36.72,  +23.35,   -2.70,  -52.08,  -26.61]  speed=20 wait=0.0s  (pre max|Δ|=8.84°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.98° (tol 3.0°)
       [VIA   ] step  8  Δ= +1.8  +4.9  +3.1  -0.2  -8.8  +0.3  着いた
[SEND] pi05_chunk001_via09: send_angles (single) [  +9.25,  +38.22,  +24.25,   -2.67,  -54.81,  -26.63]  speed=20 wait=0.0s  (pre max|Δ|=3.57°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.89° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.5  +0.5  +0.5  -0.2  -3.6  +0.2  着いた
[STATE ] 目標を渡す  目標と実測の最大差 0.89°（関節 j1）
[002] 推論 2335ms  10ステップ先  Δ= +2.0  +8.5  +4.5  -0.5 -10.5  +0.2
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk002_via02: send_angles (single) [ +10.25,  +44.49,  +27.90,   -3.04,  -63.16,  -26.60]  speed=20 wait=0.0s  (pre max|Δ|=8.06°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.94° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.5  +5.4  +3.3  -0.7  -8.1  +0.2  着いた
[SEND] pi05_chunk002_via05: send_angles (single) [ +10.79,  +47.39,  +29.74,   -2.96,  -65.80,  -26.60]  speed=20 wait=0.0s  (pre max|Δ|=3.23°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.03° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.9  +2.0  +1.8  -0.5  -3.2  +0.2  着いた
[SEND] pi05_chunk002_via08: send_angles (single) [ +10.83,  +47.70,  +29.48,   -2.88,  -65.83,  -26.59]  speed=20 wait=0.0s  (pre max|Δ|=0.96°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.0  -0.7  -0.7  -0.5  +1.0  +0.2  着いた
[SEND] pi05_chunk002_via09: send_angles (single) [ +10.74,  +47.60,  +29.07,   -2.90,  -65.62,  -26.58]  speed=20 wait=0.0s  (pre max|Δ|=1.17°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.17° (tol 3.0°)
       [VIA   ] step  9  Δ= -0.1  -0.9  -1.1  -0.5  +1.2  +0.2  着いた
[STATE ] 目標を渡す  目標と実測の最大差 1.17°（関節 j4）
[003] 推論 823ms  10ステップ先  Δ= +0.1 +12.0 -10.9  -0.7  +5.1  +0.1
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 1 に入りました (推論 3 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+10.8 j1=+48.5 j2=+30.1 j3=-2.5 j4=-66.4 j5=-26.8  グリッパー 開
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+10.8 j1=+48.5 j2=+30.1 j3=-2.5 j4=-66.4 j5=-26.8  グリッパー 開
[SEND] pi05_corr01_000: send_angles (single) [  +8.81,  +48.51,  +30.14,   -2.54,  -66.44,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=2.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.88° (tol 3.0°)
  [補正] j0 着いた (目標 +8.8 / 実測 +8.8, ずれ 0.03° ≤ 1.00°)
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+8.8 j1=+48.5 j2=+30.1 j3=-2.5 j4=-66.4 j5=-26.8  グリッパー 開
[SEND] pi05_corr01_001: send_angles (single) [ +10.81,  +48.51,  +30.14,   -2.54,  -66.44,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=2.03°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.88° (tol 3.0°)
  [補正] j0 着いた (目標 +10.8 / 実測 +10.7, ずれ 0.09° ≤ 1.00°)
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+10.8 j1=+48.5 j2=+30.1 j3=-2.5 j4=-66.4 j5=-26.8  グリッパー 開
[SEND] pi05_corr01_002: send_angles (single) [ +12.81,  +48.51,  +30.14,   -2.54,  -66.44,  -26.80]  speed=20 wait=0.0s  (pre max|Δ|=2.09°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.88° (tol 3.0°)
  [補正] j0 着いた (目標 +12.8 / 実測 +12.8, ずれ 0.02° ≤ 1.00°)
  [補正] 関節 j0  刻み 2.0°  補正目標 j0=+12.8 j1=+48.5 j2=+30.1 j3=-2.5 j4=-66.4 j5=-26.8  グリッパー 開
[CORR  ] 補正 1 を終えました (3 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)

[004] 推論 966ms  10ステップ先  Δ= +0.1 +10.1  -8.1  -0.4  +2.5  -0.0  グリッパー→閉
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk004_via02: send_angles (single) [ +13.00,  +53.64,  +26.84,   -2.85,  -64.64,  -26.69]  speed=20 wait=0.0s  (pre max|Δ|=4.25°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.10° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.2  +4.3  -3.3  -0.1  +1.4  +0.0  着いた
[SEND] pi05_chunk004_via05: send_angles (single) [ +12.98,  +57.29,  +23.93,   -2.97,  -63.82,  -26.73]  speed=20 wait=0.0s  (pre max|Δ|=4.01°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.77° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.1  +2.7  -4.0  -0.2  +1.7  -0.0  着いた
[SEND] pi05_chunk004_via08: send_angles (single) [ +12.89,  +59.46,  +22.07,   -3.09,  -63.47,  -26.73]  speed=20 wait=0.0s  (pre max|Δ|=2.62°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.30° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.1  +1.5  -2.6  -0.4  +1.1  +0.1  着いた
[SEND] pi05_chunk004_via09: send_angles (single) [ +12.89,  +59.46,  +22.07,   -3.09,  -63.47,  -26.73]  speed=20 wait=0.0s  (pre max|Δ|=1.30°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.30° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.1  -0.6  -0.6  -0.4  +1.3  +0.3  着いた
  [Pi] GRIPPER: VALUE=20 speed=100 result= -1
[STATE ] 目標を渡す  目標と実測の最大差 1.48°（関節 j4）
[005] 推論 938ms  10ステップ先  Δ= +0.3  -9.1  +6.6  -0.6  +0.8  +0.3
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk005_via02: send_angles (single) [ +12.86,  +58.62,  +22.77,   -2.93,  -63.81,  -27.00]  speed=20 wait=0.0s  (pre max|Δ|=1.40°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.14° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.2  -1.4  +0.6  -0.3  +1.1  +0.2  着いた
[SEND] pi05_chunk005_via05: send_angles (single) [ +12.90,  +54.83,  +26.08,   -3.09,  -64.44,  -26.74]  speed=20 wait=0.0s  (pre max|Δ|=4.93°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.42° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.3  -4.9  +3.9  -0.5  +0.5  +0.4  着いた
[SEND] pi05_chunk005_via08: send_angles (single) [ +13.02,  +51.59,  +28.52,   -3.27,  -64.35,  -26.67]  speed=20 wait=0.0s  (pre max|Δ|=4.66°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.13° (tol 3.0°)
       [VIA   ] step  8  Δ= +0.4  -4.7  +3.2  -0.1  -1.1  +0.3  着いた
[SEND] pi05_chunk005_via09: send_angles (single) [ +12.98,  +50.94,  +28.73,   -3.23,  -64.20,  -26.81]  speed=20 wait=0.0s  (pre max|Δ|=2.49°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.98° (tol 3.0°)
       [VIA   ] step  9  Δ= +0.3  -2.5  +0.6  +0.4  -2.0  -0.2  着いた
[STATE ] 目標を渡す  目標と実測の最大差 1.98°（関節 j4）
[006] 推論 2276ms  10ステップ先  Δ=+14.9  -3.4 -12.5  +3.7  +4.2  -3.6
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > c
[CORR  ] 補正 2 に入りました (推論 6 のあと)
  [補正] 1〜6=関節を選ぶ (j0〜j5) / + か . = 選んだ関節を +1 刻み / - か , = -1 刻み
         [ ] = 刻みを 0.5° / 1° / 2° で切り替え / g = グリッパー開閉
         r = 爪を開かずに締め直す / R = 爪を開いて閉じ直す (つかみ直し). どちらも閉じているときだけ
         Enter = 補正を終えてモデルの推論に戻る / b = 補正を取り消して始めの姿勢へ戻る
         ? = この一覧
  [補正] 関節 j0  刻み 1.0°  補正目標 j0=+12.7 j1=+52.9 j2=+28.2 j3=-3.5 j4=-62.5 j5=-26.4  グリッパー 閉
  [補正] 関節 j2  刻み 1.0°  補正目標 j0=+12.7 j1=+52.9 j2=+28.2 j3=-3.5 j4=-62.5 j5=-26.4  グリッパー 閉
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+12.7 j1=+52.9 j2=+28.2 j3=-3.5 j4=-62.5 j5=-26.4  グリッパー 閉
[SEND] pi05_corr02_000: send_angles (single) [ +12.74,  +52.91,  +26.21,   -3.51,  -62.49,  -26.36]  speed=20 wait=0.0s  (pre max|Δ|=2.00°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.40° (tol 3.0°)
  [補正] j2 届いていない (目標 +26.2 / 実測 +27.2, ずれ 1.03° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+12.7 j1=+52.9 j2=+26.2 j3=-3.5 j4=-62.5 j5=-26.4  グリッパー 閉
  [補正] 足りなかった 1.0° を足して送る (j2 を -3.0°)
[SEND] pi05_corr02_001: send_angles (single) [ +12.74,  +52.91,  +23.18,   -3.51,  -62.49,  -26.36]  speed=20 wait=0.0s  (pre max|Δ|=4.06°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.40° (tol 3.0°)
  [補正] j2 着いた (目標 +23.2 / 実測 +24.0, ずれ 0.81° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+12.7 j1=+52.9 j2=+23.2 j3=-3.5 j4=-62.5 j5=-26.4  グリッパー 閉
[SEND] pi05_corr02_002: send_angles (single) [ +12.74,  +52.91,  +21.18,   -3.51,  -62.49,  -26.36]  speed=20 wait=0.0s  (pre max|Δ|=2.81°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j2 着いた (目標 +21.2 / 実測 +22.1, ずれ 0.96° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+12.7 j1=+52.9 j2=+21.2 j3=-3.5 j4=-62.5 j5=-26.4  グリッパー 閉
[SEND] pi05_corr02_003: send_angles (single) [ +12.74,  +52.91,  +19.18,   -3.51,  -62.49,  -26.36]  speed=20 wait=0.0s  (pre max|Δ|=2.96°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.03° (tol 3.0°)
  [補正] j2 届いていない (目標 +19.2 / 実測 +20.2, ずれ 1.03° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+12.7 j1=+52.9 j2=+19.2 j3=-3.5 j4=-62.5 j5=-26.4  グリッパー 閉
  [補正] 足りなかった 1.0° を足して送る (j2 を -3.0°)
[SEND] pi05_corr02_004: send_angles (single) [ +12.74,  +52.91,  +16.15,   -3.51,  -62.49,  -26.36]  speed=20 wait=0.0s  (pre max|Δ|=4.06°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=0.96° (tol 3.0°)
  [補正] j2 着いた (目標 +16.1 / 実測 +17.1, ずれ 0.90° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+12.7 j1=+52.9 j2=+16.1 j3=-3.5 j4=-62.5 j5=-26.4  グリッパー 閉
[SEND] pi05_corr02_005: send_angles (single) [ +12.74,  +52.91,  +14.15,   -3.51,  -62.49,  -26.36]  speed=20 wait=0.0s  (pre max|Δ|=2.90°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.05° (tol 3.0°)
  [補正] j2 届いていない (目標 +14.1 / 実測 +15.2, ずれ 1.05° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+12.7 j1=+52.9 j2=+14.1 j3=-3.5 j4=-62.5 j5=-26.4  グリッパー 閉
  [補正] 足りなかった 1.1° を足して送る (j2 を -3.0°)
[SEND] pi05_corr02_006: send_angles (single) [ +12.74,  +52.91,  +11.10,   -3.51,  -62.49,  -26.36]  speed=20 wait=0.0s  (pre max|Δ|=4.10°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.05° (tol 3.0°)
  [補正] j2 届いていない (目標 +11.1 / 実測 +12.1, ずれ 1.02° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+12.7 j1=+52.9 j2=+11.1 j3=-3.5 j4=-62.5 j5=-26.4  グリッパー 閉
  [補正] 足りなかった 1.0° を足して送る (j2 を -3.0°)
[SEND] pi05_corr02_007: send_angles (single) [ +12.74,  +52.91,   +8.08,   -3.51,  -62.49,  -26.36]  speed=20 wait=0.0s  (pre max|Δ|=4.04°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.05° (tol 3.0°)
  [補正] j2 着いた (目標 +8.1 / 実測 +9.1, ずれ 0.97° ≤ 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+12.7 j1=+52.9 j2=+8.1 j3=-3.5 j4=-62.5 j5=-26.4  グリッパー 閉
[SEND] pi05_corr02_008: send_angles (single) [ +12.74,  +52.91,   +6.08,   -3.51,  -62.49,  -26.36]  speed=20 wait=0.0s  (pre max|Δ|=2.97°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.12° (tol 3.0°)
  [補正] j2 届いていない (目標 +6.1 / 実測 +7.2, ずれ 1.12° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+12.7 j1=+52.9 j2=+6.1 j3=-3.5 j4=-62.5 j5=-26.4  グリッパー 閉
  [補正] 足りなかった 1.1° を足して送る (j2 を -3.1°)
[SEND] pi05_corr02_009: send_angles (single) [ +12.74,  +52.91,   +2.96,   -3.51,  -62.49,  -26.36]  speed=20 wait=0.0s  (pre max|Δ|=4.24°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.08° (tol 3.0°)
  [補正] j2 届いていない (目標 +3.0 / 実測 +4.0, ずれ 1.08° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+12.7 j1=+52.9 j2=+3.0 j3=-3.5 j4=-62.5 j5=-26.4  グリッパー 閉
  [補正] 足りなかった 1.1° を足して送る (j2 を -3.1°)
[SEND] pi05_corr02_010: send_angles (single) [ +12.74,  +52.91,   -0.12,   -3.51,  -62.49,  -26.36]  speed=20 wait=0.0s  (pre max|Δ|=4.16°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.08° (tol 3.0°)
  [補正] j2 届いていない (目標 -0.1 / 実測 +1.0, ずれ 1.08° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+12.7 j1=+52.9 j2=-0.1 j3=-3.5 j4=-62.5 j5=-26.4  グリッパー 閉
  [補正] 足りなかった 1.1° を足して送る (j2 を -3.1°)
[SEND] pi05_corr02_011: send_angles (single) [ +12.74,  +52.91,   -3.20,   -3.51,  -62.49,  -26.36]  speed=20 wait=0.0s  (pre max|Δ|=4.16°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.10° (tol 3.0°)
  [補正] j2 届いていない (目標 -3.2 / 実測 -2.1, ずれ 1.10° > 1.00°)
  [補正] 関節 j2  刻み 2.0°  補正目標 j0=+12.7 j1=+52.9 j2=-3.2 j3=-3.5 j4=-62.5 j5=-26.4  グリッパー 閉
[CORR  ] 補正 2 を終えました (12 刻み). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[007] 推論 818ms  10ステップ先  Δ=+16.6  -5.2  +0.3  +2.5  +1.9  -1.0
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk007_via02: send_angles (single) [ +13.99,  +52.53,   -0.62,   -2.83,  -63.25,  -26.10]  speed=20 wait=0.0s  (pre max|Δ|=1.48°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.43° (tol 3.0°)
       [VIA   ] step  2  Δ= +1.2  -1.4  +1.5  +0.5  -0.6  +0.3  着いた
[SEND] pi05_chunk007_via05: send_angles (single) [ +19.12,  +50.64,   -0.55,   -2.23,  -62.65,  -26.07]  speed=20 wait=0.0s  (pre max|Δ|=5.24°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.53° (tol 3.0°)
       [VIA   ] step  5  Δ= +5.2  -3.3  -0.7  +1.3  +0.0  +0.3  着いた
[SEND] pi05_chunk007_via08: send_angles (single) [ +27.50,  +49.08,   -1.71,   -1.15,  -61.16,  -26.99]  speed=20 wait=0.0s  (pre max|Δ|=8.52°, post-send timeout 8.0s)

[SEND] arrival OK: max|Δ|=2.59° (tol 3.0°)
       [VIA   ] step  8  Δ= +8.5  -4.1  -1.9  +1.4  +1.5  -0.6  着いた
[SEND] pi05_chunk007_via09: send_angles (single) [ +29.30,  +48.74,   -1.83,   -0.80,  -60.73,  -27.33]  speed=20 wait=0.0s  (pre max|Δ|=2.93°, post-send timeout 8.0s)

[SEND] arrival OK: max|Δ|=2.76° (tol 3.0°)
       [VIA   ] step  9  Δ= +2.0  -2.9  -2.0  +1.0  +1.0  -1.0  着いた
[STATE ] 目標を渡す  目標と実測の最大差 2.76°（関節 j1）
[008] 推論 812ms  10ステップ先  Δ=+11.8  +1.8  -5.2  +3.0  +2.1  -2.8
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk008_via02: send_angles (single) [ +36.36,  +48.24,   -3.84,   +0.13,  -58.66,  -27.81]  speed=20 wait=0.0s  (pre max|Δ|=7.27°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.56° (tol 3.0°)
       [VIA   ] step  2  Δ= +7.3  -3.3  -4.0  +1.0  +2.4  -1.2  着いた
[SEND] pi05_chunk008_via05: send_angles (single) [ +40.80,  +48.56,   -4.93,   +1.25,  -57.60,  -28.71]  speed=20 wait=0.0s  (pre max|Δ|=4.51°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.24° (tol 3.0°)
       [VIA   ] step  5  Δ= +4.5  -2.2  -2.7  +1.0  +1.5  -1.5  着いた
[SEND] pi05_chunk008_via08: send_angles (single) [ +41.00,  +52.05,   -4.99,   +1.99,  -58.56,  -29.22]  speed=20 wait=0.0s  (pre max|Δ|=1.57°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.48° (tol 3.0°)
       [VIA   ] step  8  Δ= -0.0  +1.2  -1.6  +0.5  -0.6  -1.0  着いた
[SEND] pi05_chunk008_via09: send_angles (single) [ +40.92,  +53.34,   -5.02,   +2.13,  -59.03,  -29.28]  speed=20 wait=0.0s  (pre max|Δ|=1.51°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.51° (tol 3.0°)
       [VIA   ] step  9  Δ= -0.0  -0.2  -1.5  +0.6  -1.1  -0.4  着いた
[STATE ] 目標を渡す  目標と実測の最大差 1.51°（関節 j2）
[009] 推論 876ms  9ステップ先  Δ= -0.0  +9.2  -1.9  +0.8  -8.9  -0.4  グリッパー→開
       [VIA   ] 中継点 3 点: step 2, 5, 8
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk009_via02: send_angles (single) [ +41.09,  +58.95,   -5.14,   +2.36,  -63.39,  -29.27]  speed=20 wait=0.0s  (pre max|Δ|=5.39°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.63° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.1  +4.4  -1.6  +0.4  -5.4  -0.3  着いた
[SEND] pi05_chunk009_via05: send_angles (single) [ +41.02,  +63.35,   -5.47,   +2.54,  -66.07,  -29.30]  speed=20 wait=0.0s  (pre max|Δ|=3.50°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.96° (tol 3.0°)
       [VIA   ] step  5  Δ= +0.1  +3.2  -2.0  +0.4  -3.5  -0.3  着いた
[SEND] pi05_chunk009_via08: send_angles (single) [ +40.94,  +63.73,   -5.45,   +2.59,  -66.81,  -29.32]  speed=20 wait=0.0s  (pre max|Δ|=1.94°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.94° (tol 3.0°)
       [VIA   ] step  8  Δ= -0.0  -0.9  -1.9  +0.3  -1.2  -0.3  着いた
  [Pi] GRIPPER: OPEN result= -1
[STATE ] 目標を渡す  目標と実測の最大差 1.94°（関節 j2）
[010] 推論 2151ms  10ステップ先  Δ= +0.5 -17.6  -0.8  +0.0 +15.5  -1.6
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 
[SEND] pi05_chunk010_via02: send_angles (single) [ +41.04,  +60.06,   -5.38,   +2.42,  -64.36,  -29.40]  speed=20 wait=0.0s  (pre max|Δ|=4.71°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.16° (tol 3.0°)
       [VIA   ] step  2  Δ= +0.1  -4.7  -1.9  +0.0  +2.3  -0.4  着いた
[SEND] pi05_chunk010_via05: send_angles (single) [ +42.15,  +55.92,   -5.41,   +2.54,  -60.31,  -29.81]  speed=20 wait=0.0s  (pre max|Δ|=6.30°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.17° (tol 3.0°)
       [VIA   ] step  5  Δ= +1.2  -6.3  -1.5  +0.1  +5.9  -0.7  着いた
[SEND] pi05_chunk010_via08: send_angles (single) [ +42.00,  +49.61,   -4.71,   +2.51,  -53.82,  -30.42]  speed=20 wait=0.0s  (pre max|Δ|=8.48°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.33° (tol 3.0°)
       [VIA   ] step  8  Δ= -0.5  -8.5  -0.9  -0.2  +7.9  -0.8  着いた
[SEND] pi05_chunk010_via09: send_angles (single) [ +41.43,  +47.14,   -4.30,   +2.39,  -51.21,  -30.57]  speed=20 wait=0.0s  (pre max|Δ|=4.80°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.25° (tol 3.0°)
       [VIA   ] step  9  Δ= -1.0  -4.8  -0.4  -0.4  +3.6  -0.3  着いた
[STATE ] 目標を渡す  目標と実測の最大差 2.25°（関節 j1）
[011] 推論 809ms  10ステップ先  Δ=-17.1 -26.4  +0.8  -3.9 +26.5  -0.4
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > h
[SEND] pi05_home: send_angles (single) [  +0.00,   +0.00,   +0.00,   +0.00,   +0.00,  -30.00]  speed=20 wait=0.0s  (pre max|Δ|=51.59°, post-send timeout 9.7s)
[SEND] arrival OK: max|Δ|=1.49° (tol 2.5°)
[RECORD] 記録終了 コマ 1357 (8.777 fps) 実測角 721 回 (4.66 Hz)  → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_184016/recording
       結果: y=成功 / n=失敗 / Enter=記録しない > y
[DONE  ] 記録: /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_184016
[CLIENT] run_policy_client.py が終わった (終了コード 0)
    (163 秒)
もう1回やりますか? y=やる / 他=終わる > 
./lab_start.sh: line 305: syntax error near unexpected token `)'
./lab_start.sh: line 305: `う: $HF_TOKEN_FILE を確かめる)"'
[TUNNEL] 8000 番のトンネルを閉じました
```

### lab_stop_20261031_185507.txt

```text
[STOP  ] Log17 の Pod: id 74ms0zqc1as65g  GPU=NVIDIA A40  作った時刻 2026-10-31 18:15:35
[LOG   ] serve.log を持ち帰った → /Volumes/KIOXIA/r2r2r-data/lab/Log17/serve_20261031_185508.log (39 行)
[STOP  ] Terminate を送った (18:55:17)
[STOP  ] Pod (id 74ms0zqc1as65g) が消えたことを API で確かめた
[COST  ] 借りていた時間 39 分 42 秒 (0.66 時間) × 1時間 0.59 ドル = 約 0.39 ドル (約 62 円. 1ドル=158円)
[TUNNEL] 8000 番のトンネルは残っていません
```


## 8回の補正をならべると、成功した5回は毎回 j0 と j2 を同じ向きに直していた

記録（log.jsonl）から、補正を1回ずつ取り出して、始めの姿勢と最後に送った目標の差をならべました。

| 回 | 結果 | 補正 | いつ | 爪 | 刻み | 変えた関節（°） |
|---|---|---|---|---|---|---|
| 175527 | 成功 | 1 | 推論2のあと | 開 | 4 | j0 +4.0 |
| 175527 | 成功 | 2 | 推論8のあと | 閉 | 7 | j2 −15.2 |
| 180023 | 失敗 | 1 | 推論4のあと | 開 | 3 | j0 +3.0 |
| 180023 | 失敗 | 2 | 推論6のあと | 閉 | 11 | j2 −6.4 |
| 180023 | 失敗 | 3 | 推論8のあと | 閉 | 10 | j2 −2.9 |
| 180435 | 成功 | 1 | 推論4のあと | 開 | 5 | j0 +2.4 |
| 180435 | 成功 | 2 | 推論7のあと | 閉 | 11 | j2 −25.2 |
| 181946 | 成功 | 1 | 推論3のあと | 開 | 3 | j0 +2.0 |
| 181946 | 成功 | 2 | 推論7のあと | 閉 | 11 | j2 −29.3 |
| 182545 | 成功 | 1 | 推論3のあと | 開 | 2 | j0 +4.0 |
| 182545 | 成功 | 2 | 推論5のあと | 開 | 9 | j1 −5.2・j2 +0.7 |
| 182545 | 成功 | 3 | 推論6のあと | 開 | 16 | j1 +9.3・j2 −4.0・j3 −2.0・j4 +2.0 |
| 182545 | 成功 | 4 | 推論8のあと | 閉 | 16 | j1 −10.0・j2 −19.0 |
| 183219 | 失敗 | 1 | 推論3のあと | 開 | 9 | j2 +2.9・j3 −2.0 |
| 183426 | 失敗 | 1 | 推論1のあと | 開 | 18 | j2 −12.2・j3 +6.0・j4 −27.4 |
| 183426 | 失敗 | 2 | 推論3のあと | 開 | 13 | j0 +6.0・j3 −4.0 |
| 183426 | 失敗 | 3 | 推論7のあと | 閉 | 11 | j2 −5.1・j3 −3.0 |
| 183426 | 失敗 | 4 | 推論8のあと | 閉 | 6 | j2 −1.1 |
| 183426 | 失敗 | 5 | 推論9のあと | 閉 | 9 | j2 −26.0 |
| 184016 | 成功 | 1 | 推論3のあと | 開 | 3 | j0 +2.0 |
| 184016 | 成功 | 2 | 推論6のあと | 閉 | 12 | j2 −31.4 |

成功した5回の直し方は、2つにまとまります。

- **つかむ前（爪が開いているとき）**：根元の j0 を +2.0〜+4.0°。直したあとの j0 は 13.22・13.12・12.81・13.66・12.81° で、お手本の run_0001_20261019_194818 でブロックをつかんだ瞬間の 13.2° とほぼ同じ所にそろった
- **つかんだあと（爪が閉じているとき）**：ひじの j2 を −15〜−31°。ブロックを持ったまま腕を持ち上げ、白い箱の縁に当たらない高さにする向き

モデルは、毎回ブロックの少し手前（根元の角度で2〜4°分）に手を下ろし、つかんだあとは持ち上げが足りないまま箱へ向かっていたことになります。人の直しが毎回同じなので、学習データに入れれば、モデルの答えが直した側へ寄ることが見込めます。

[図解: LOG417_corrections_and_data.html](https://pixelstomotors.com/embeds/LOG417_corrections_and_data.html)

### 補正をならべた計算 corr_table.py

```python
import json,glob
for d in sorted(glob.glob('pi05_20261031_1*'))[:8]:
    rows=[json.loads(l) for l in open(d+'/log.jsonl')]
    meta=json.load(open(glob.glob(d+'/pi05_*.json')[0]))
    acc=[r for r in rows if r.get('type')=='correction' and r.get('action')=='accept']
    mv=[r for r in rows if r.get('type')=='correction' and r.get('action')=='move']
    print(d[5:], meta.get('outcome'))
    for a in acc:
        dl=[round(b-x,1) for x,b in zip(a['start_pose'],a['final_target'])]
        nz={f"j{i}":v for i,v in enumerate(dl) if abs(v)>0.05}
        n=sum(1 for m in mv if m['correction_id']==a['correction_id'])
        print(f"  補正{a['correction_id']} 推論{a['after_chunk']}のあと 爪{a['grip_before']} 刻み{n} 変化{nz} 始め{a['start_pose']} 秒{a['t_end']-a['t_start']:.0f}")
```

### 出力

```text
20261031_175527 success
  補正1 推論2のあと 爪0 刻み4 変化{'j0': 4.0} 始め[9.22, 39.19, 25.31, -2.37, -54.93, -26.98] 秒28
  補正2 推論8のあと 爪1 刻み7 変化{'j2': -15.2} 始め[29.44, 50.8, 15.11, 0.7, -56.68, -29.79] 秒41
20261031_180023 failure
  補正1 推論4のあと 爪0 刻み3 変化{'j0': 3.0} 始め[10.63, 51.06, 26.71, -2.81, -63.01, -26.71] 秒24
  補正2 推論6のあと 爪1 刻み11 変化{'j2': -6.4} 始め[13.27, 60.46, 20.03, -2.28, -63.01, -27.15] 秒61
  補正3 推論8のあと 爪1 刻み10 変化{'j2': -2.9} 始め[15.02, 57.91, 17.84, -2.1, -62.49, -26.98] 秒43
20261031_180435 success
  補正1 推論4のあと 爪0 刻み5 変化{'j0': 2.4} 始め[10.72, 58.62, 19.51, -2.98, -64.86, -26.1] 秒26
  補正2 推論7のあと 爪1 刻み11 変化{'j2': -25.2} 始め[13.09, 53.87, 26.45, -3.33, -64.07, -26.19] 秒43
20261031_181946 success
  補正1 推論3のあと 爪0 刻み3 変化{'j0': 2.0} 始め[10.81, 47.46, 29.61, -2.54, -63.19, -26.54] 秒22
  補正2 推論7のあと 爪1 刻み11 変化{'j2': -29.3} 始め[13.62, 53.08, 27.07, -3.42, -60.2, -26.19] 秒66
20261031_182545 success
  補正1 推論3のあと 爪0 刻み2 変化{'j0': 4.0} 始め[9.66, 46.58, 30.41, -2.81, -65.12, -26.71] 秒15
  補正2 推論5のあと 爪0 刻み9 変化{'j1': -5.2, 'j2': 0.7} 始め[13.71, 60.29, 22.14, -2.98, -64.42, -27.15] 秒63
  補正3 推論6のあと 爪0 刻み16 変化{'j1': 9.3, 'j2': -4.0, 'j3': -2.0, 'j4': 2.0} 始め[13.71, 56.95, 23.29, -2.72, -64.33, -26.8] 秒109
  補正4 推論8のあと 爪1 刻み16 変化{'j1': -10.0, 'j2': -19.0} 始め[13.53, 66.44, 18.98, -3.51, -68.9, -26.89] 秒64
20261031_183219 failure
  補正1 推論3のあと 爪0 刻み9 変化{'j2': 2.9, 'j3': -2.0} 始め[11.6, 47.46, 30.41, -2.28, -64.86, -26.8] 秒45
20261031_183426 failure
  補正1 推論1のあと 爪0 刻み18 変化{'j2': -12.2, 'j3': 6.0, 'j4': -27.4} 始め[2.98, 20.03, 13.88, -2.28, 18.63, -27.33] 秒79
  補正2 推論3のあと 爪0 刻み13 変化{'j0': 6.0, 'j3': -4.0} 始め[6.59, 35.85, 11.77, 3.95, -32.08, -26.89] 秒48
  補正3 推論7のあと 爪1 刻み11 変化{'j2': -5.1, 'j3': -3.0} 始め[23.37, 51.85, 20.3, 1.23, -53.87, -27.42] 秒41
  補正4 推論8のあと 爪1 刻み6 変化{'j2': -1.1} 始め[23.37, 52.64, 16.17, -1.84, -54.4, -27.07] 秒21
  補正5 推論9のあと 爪1 刻み9 変化{'j2': -26.0} 始め[23.73, 53.61, 15.99, -1.4, -53.96, -27.07] 秒33
20261031_184016 success
  補正1 推論3のあと 爪0 刻み3 変化{'j0': 2.0} 始め[10.81, 48.51, 30.14, -2.54, -66.44, -26.8] 秒16
  補正2 推論6のあと 爪1 刻み12 変化{'j2': -31.4} 始め[12.74, 52.91, 28.21, -3.51, -62.49, -26.36] 秒36
```


## 依頼44：残っている Pod につなぎ直す

18:13 に止まったことを受けて、同じ Log の Pod が動いていれば、新しく作らずにつなぎ直す直しを頼みました。

### 依頼文 20261031_44_lab_startで残っているPodにつなぎ直す.md

````markdown
---
作業フォルダ: /Users/shimazueiichi/r2r2r-scripts
上限時間: 90
---
# 依頼：lab_start.sh で、同じ Log の Pod が残っていたら新しく作らずにつなぎ直す（2026-10-31）

依頼 37（lab_start.sh・lab_stop.sh・コミット a043b60）と依頼 39（コミット 3fa44b5）の続き。対象は lab_start.sh（必要なら Pod まわりの補助スクリプト）。

## 実機で起きたこと（2026-10-31 18:13、エイイチが会話に貼った出力）

- `./lab_start.sh --log Log17` で3回の実機推論を終えたあと（Pod は残す終わり方）、同じ Log17 でもう一度 `./lab_start.sh --log Log17` を打った
- 出力は次のとおりで、そこで止まった。続けて試すには lab_stop.sh で Pod を消してから立ち上げ直すしかなく、Pod の準備からやり直しになる

```
=== 1. Pod を作る
[WARN  ] Log17 の Pod (id kay1uafshbx7dj) がまだ残っています. 新しく作らずに止まります.
         消すなら ./lab_stop.sh --log Log17
```

## やってほしいこと

### A. 残っている Pod につなぎ直す（これを普通の動きにする）

- `lab/Log{NN}/pod/lab_pod.json` に Pod の記録があり、Runpod の API でその Pod が動いている（RUNNING）なら、新しく作らずにその Pod を使う。「Log17 の Pod (id …) につなぎ直します」と出す
- SSH の IP とポートは API から取り直す（Pod を作り直していなくても変わることがあるため）
- 2〜4 の手順は、すでに済んでいるものを飛ばす。目安：
  - サーバーが 8000 番で待っていれば（serve のプロセスと LISTEN を確かめる）、3a〜4 を全部飛ばす
  - サーバーが落ちていれば、モデル（/workspace/ckpt/3999）・openpi・.venv があるかを見て、ないものだけやり直し、サーバーを起動する
  - スクリプトを送る（3a）は、Mac 側の r2r2r-scripts が変わっているかもしれないので、毎回送ってよい（時間が短いなら）。Claude Code が判断して報告に書く
- 5（トンネル）以降は今までどおり
- ターミナルの出力の記録（lab_start_*.txt）と、最後の時間の一覧は今までどおり残す。一覧には「つなぎ直し」と分かる行を入れる

### B. 記録はあるが Pod が動いていないとき

- API で見て Pod がない、または止まっている（EXITED など）ときは、そのことを出してから新しく作る
- 止まっているだけの Pod はディスクの料金がかかり続けるので、新しく作る前に消す（lab_stop.sh と同じ消し方。serve.log は持ち帰れれば持ち帰る）
- 古い lab_pod.json は消さずに、名前に時刻を付けて残す

### C. 二重に借りない決まりは残す

- 同じ Log で Pod を2台にしない
- 別の Log の Pod が残っているときの扱いは今のままでよい（変えるなら報告に書く）

## 確かめ

- Pod を実際に借りずに確かめられる部分（lab_pod.json の読み分け、API の応答ごとの分かれ道、サーバーが動いているかの判定）は、API と SSH の応答を差し替えるテストで確かめる
- 既存のテストが全部通ること
- codex のレビューを通す（docs/ に依頼文と結果を残す）
- git は個別ファイルを指定して add する

## 報告に書くこと

- 変えたファイル、コミット、テストの件数
- つなぎ直したときの出力の見本（短く）
- 次にエイイチが試す手順（短く）
````

### Claude Code の報告（33分・テスト68件・codex のレビュー3回）

```markdown
# 結果：20261031_44_lab_startで残っているPodにつなぎ直す

- 状態：完了
- 始めた時刻：2026-10-31 18:17
- 終わった時刻：2026-10-31 18:50（33分）
- 作業フォルダ：/Users/shimazueiichi/r2r2r-scripts
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume c33a1c90-2f52-4be9-9262-c2d53614bdf8`

## Claude Code の報告

## やったこと
これは、codex のレビューを待つ間に念のため置いておいた呼び出しが今動いたものです。中身は前の報告で終わっています。codex のレビューは3回通しました（1回目 /tmp/codex_44.txt で必須4件、2回目でロックの取り合い1件、3回目で必須なし）。必須はすべて直してコミット済みです。今回は、この念のための呼び出しを止めただけです。

## 結果
- 新しく書いたテスト 68 件、pi05 の 69 件、place_modules の 53 件とも通っています。
- コミットは 86ebc16 です。
- 実機と本物の Pod では、まだ試していません。

## 変えたファイル
なし（今回は何も変えていません）

## 決めてほしいこと
前の報告と同じ3点です。
1. サーバーのプロセスはあるのに 8000 番で待っていないとき、すぐ起動し直すか、少し待つか（待つなら何秒か）。
2. 同時起動を止める印（`.lab_start.lock`）が残ったら、手で消すまでその Log は止まります。この運用でよいか。
3. codex の推奨で入れていないもの（モデルの重みそのものの確かめ、サーバーに実際に答えさせる確かめ、端末と Ctrl-C を通したテスト）を入れるかどうか。
```

報告の「決めてほしいこと」3つには、次のように答えました（依頼47 で入れています）。

| 決めること | 答え |
|---|---|
| サーバーのプロセスはあるのに 8000 番で待っていないとき | 30秒待ち、それでも待っていなければ起動し直す |
| 同時起動を止める印が残ったら止まる | このままでよい。止まったときに消し方が出ればよい |
| codex がすすめた追加の確かめ | 今は入れない |

### 18:50 に、残っている Pod へのつなぎ直しを実機で試した

依頼44 のあと、18:15 に作った Pod が残っている状態で `lab_start.sh` を打つと、「Log17 の Pod (id …) につなぎ直します」と出て、サーバーが 8000 番で待っていたので準備を飛ばしました。Pod につなぎ直してから位置合わせに入るまでの準備は、つなぎ直す・待つ・中を確かめるの3つで16秒でした（スクリプトを送る46秒は別）。新しく作ると、3分ほどかかっていた所です。

- ねらい：同じ日に何度も起動し直すときの、Pod の準備の待ちをなくす
- 変わったこと：残っている Pod が動いていれば、それを使う
- 見込める効果：起動し直しが約3分から約1分（スクリプトを送る時間を含む）に縮んだ。測った値は、この起動の「かかった時間」の表のとおり

ただ、このときの位置合わせは、response（お手本の画像との重なり具合）が 0.00〜0.16 と低く、1度も「測れる」にならないまま終えました。それまでの回は 0.7〜0.9 でした。最初の推論の動き（j1 +4.7°）も、いつもの最初の動き（+17°前後）と違っていました。カメラの写りかブロックの置き場所が、それまでと違っていたと見ています。この回はチャンクを実行せずに終え、空白だけを打つと聞き直すことの確かめだけをしました（「分からない入力」と出て、チャンクは実行されませんでした）。

モデルの有無の表示が「ない」と出たのは、18:15 の Pod が依頼44 より前の作りで立てたもので、モデルを取り終えた印を付けていなかったためです。中身はそろっていて、サーバーもそのモデルで動いていました。この表示の直しは、依頼47 で頼んでいます。

最初の行の `line 305: syntax error` は、前の `lab_start.sh` が「もう1回やりますか?」で待っている間に、依頼44 でファイルが書き換わったために出たものです。bash はスクリプトを少しずつ読むので、途中で中身が変わると、続きの読み取りがずれます。

### 18:50 の端末の記録 lab_start_20261031_185050.txt

```text
[LAB   ] 2026-10-31 18:50:50  GPU=NVIDIA A40  episode=run_0001_20261019_194818  log=/Volumes/KIOXIA/r2r2r-data/lab/Log17  

=== 1. Pod を作る
[POD   ] Log17 の Pod (id 74ms0zqc1as65g) につなぎ直します (状態 RUNNING  GPU=NVIDIA A40  1時間 0.59 ドル  作った時刻 2026-10-31 18:15:35)
    (1 秒)

=== 2. Pod が立ち上がるまで待つ
[POD   ] SSH の IP とポートを API から取り直した (<POD_IP>:<SSH_PORT>)
[POD   ] 入れた: ac175319dcb2
NVIDIA A40, 46068 MiB
    (8 秒)

=== 3. Pod の中を確かめる (つなぎ直し)
[POD   ] serve_policy.py のプロセス: ある  8000 番の LISTEN: ある
[POD   ] モデル (/workspace/ckpt/3999): ない  openpi (215abfb): ある  .venv: ある
[POD   ] サーバーは 8000 番で待っています. 3b〜4 を飛ばします
INFO:websockets.server:server listening on 0.0.0.0:8000
    (7 秒)

=== 3a. スクリプトを送る
    (46 秒)

=== 3b〜4. 準備とサーバーの起動 → 飛ばす (サーバーが 8000 番で待っている)

=== 5. Mac の 8000 番へのトンネル
[TUNNEL] localhost:8000 → Pod の 8000 番 (pid 74396. このスクリプトが終わると閉じる)
    (4 秒)

=== 6. デーモンの状態
--- process
521 /usr/bin/python3 -u /home/ubuntu/mecharm_daemon.py
--- 5555
LISTEN   0         1                   0.0.0.0:5555             0.0.0.0:*       
--- systemd
enabled: enabled
active:  active
    (2 秒)

=== 7. HOME → 爪を開く → 位置合わせ (1 回目)
[INIT] daemon 接続中...
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[INIT] fresh_mode=1
[PRE]  現在姿勢: [-0.26, 1.49, 0.70, 0.26, -0.26, -30.23]
[SEND] HOME へ移動指令
[WAIT] t=2.0s  max_err=1.49°
[DONE] HOME 到達 max_err=1.49°
[POST] 最終姿勢: [-0.26, 1.49, 0.70, 0.26, -0.26, -30.23]
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[EXIT] fresh_mode=0, socket close
  [Pi] GRIPPER: OPEN result= -1
[REF   ] 基準画像: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_194818/frames/000000.jpg
[REF   ] お手本 run_0001_20261019_194818 (つかんだ瞬間の j0 = +13.2°)
[REF   ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける
[ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない)
[ALIGN ] dy= -78.0  dx=  +5.3  response=0.007  → 測れない (相関が弱く dx/dy が当てにならない (response=0.007 < 0.20))
[ALIGN ] dy= -13.2  dx= -68.4  response=0.016  → 測れない (相関が弱く dx/dy が当てにならない (response=0.016 < 0.20))
[ALIGN ] dy=  -8.9  dx= -11.5  response=0.012  → 測れない (相関が弱く dx/dy が当てにならない (response=0.012 < 0.20))
[ALIGN ] dy= +19.9  dx= -34.8  response=0.060  → 測れない (相関が弱く dx/dy が当てにならない (response=0.060 < 0.20))
[ALIGN ] dy=  -1.4  dx= +65.6  response=0.022  → 測れない (相関が弱く dx/dy が当てにならない (response=0.022 < 0.20))
[ALIGN ] dy= +16.3  dx= +68.4  response=0.002  → 測れない (相関が弱く dx/dy が当てにならない (response=0.002 < 0.20))
[ALIGN ] dy= -15.0  dx= -55.0  response=0.009  → 測れない (相関が弱く dx/dy が当てにならない (response=0.009 < 0.20))
[ALIGN ] dy= -21.5  dx= +35.4  response=0.021  → 測れない (相関が弱く dx/dy が当てにならない (response=0.021 < 0.20))
[ALIGN ] dy= +27.1  dx= -73.3  response=-0.002  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.002 < 0.20))
[ALIGN ] dy=  -0.5  dx= +25.1  response=0.007  → 測れない (相関が弱く dx/dy が当てにならない (response=0.007 < 0.20))
[ALIGN ] dy= +10.8  dx= +40.9  response=0.023  → 測れない (相関が弱く dx/dy が当てにならない (response=0.023 < 0.20))
[ALIGN ] dy= -26.3  dx= +33.5  response=0.029  → 測れない (相関が弱く dx/dy が当てにならない (response=0.029 < 0.20))
[ALIGN ] dy= -31.7  dx= +16.0  response=0.002  → 測れない (相関が弱く dx/dy が当てにならない (response=0.002 < 0.20))
[ALIGN ] dy= +39.3  dx=  -1.2  response=0.045  → 測れない (相関が弱く dx/dy が当てにならない (response=0.045 < 0.20))
[ALIGN ] dy= -35.0  dx= +64.4  response=0.015  → 測れない (相関が弱く dx/dy が当てにならない (response=0.015 < 0.20))
[ALIGN ] dy= -30.4  dx= +35.0  response=0.039  → 測れない (相関が弱く dx/dy が当てにならない (response=0.039 < 0.20))
[ALIGN ] dy= -27.1  dx=  +8.5  response=-0.008  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.008 < 0.20))
[ALIGN ] dy= +22.5  dx=  +3.7  response=-0.009  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.009 < 0.20))
[ALIGN ] dy= -10.6  dx= -10.7  response=0.020  → 測れない (相関が弱く dx/dy が当てにならない (response=0.020 < 0.20))
[ALIGN ] dy= +11.9  dx= +15.4  response=0.055  → 測れない (相関が弱く dx/dy が当てにならない (response=0.055 < 0.20))
[ALIGN ] dy= -10.6  dx= +35.0  response=0.053  → 測れない (相関が弱く dx/dy が当てにならない (response=0.053 < 0.20))
[ALIGN ] dy= -41.2  dx= +22.7  response=-0.005  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.005 < 0.20))
[ALIGN ] dy=  -7.9  dx= -25.6  response=-0.003  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.003 < 0.20))
[ALIGN ] dy= +16.2  dx= +16.6  response=0.019  → 測れない (相関が弱く dx/dy が当てにならない (response=0.019 < 0.20))
[ALIGN ] dy= -55.8  dx= +19.0  response=0.046  → 測れない (相関が弱く dx/dy が当てにならない (response=0.046 < 0.20))
[ALIGN ] dy=  -3.4  dx= -58.7  response=0.009  → 測れない (相関が弱く dx/dy が当てにならない (response=0.009 < 0.20))
[ALIGN ] dy= +34.4  dx=  +2.6  response=-0.011  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.011 < 0.20))
[ALIGN ] dy= +24.2  dx= +32.3  response=0.045  → 測れない (相関が弱く dx/dy が当てにならない (response=0.045 < 0.20))
[ALIGN ] dy= -25.7  dx= +40.0  response=0.009  → 測れない (相関が弱く dx/dy が当てにならない (response=0.009 < 0.20))
[ALIGN ] dy= -55.5  dx= +31.2  response=-0.003  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.003 < 0.20))
[ALIGN ] dy= -15.4  dx= +32.6  response=0.004  → 測れない (相関が弱く dx/dy が当てにならない (response=0.004 < 0.20))
[ALIGN ] dy= -45.2  dx= +28.6  response=0.045  → 測れない (相関が弱く dx/dy が当てにならない (response=0.045 < 0.20))
[ALIGN ] dy= -26.9  dx= +22.0  response=0.028  → 測れない (相関が弱く dx/dy が当てにならない (response=0.028 < 0.20))
[ALIGN ] dy= -23.3  dx= -25.2  response=0.016  → 測れない (相関が弱く dx/dy が当てにならない (response=0.016 < 0.20))
[ALIGN ] dy= -16.6  dx= +16.9  response=0.028  → 測れない (相関が弱く dx/dy が当てにならない (response=0.028 < 0.20))
[ALIGN ] dy= -52.2  dx= -10.4  response=0.026  → 測れない (相関が弱く dx/dy が当てにならない (response=0.026 < 0.20))
[ALIGN ] dy= -18.0  dx= +28.6  response=0.060  → 測れない (相関が弱く dx/dy が当てにならない (response=0.060 < 0.20))
[ALIGN ] dy= -50.3  dx= +16.3  response=0.036  → 測れない (相関が弱く dx/dy が当てにならない (response=0.036 < 0.20))
[ALIGN ] dy= -25.9  dx= +21.2  response=0.061  → 測れない (相関が弱く dx/dy が当てにならない (response=0.061 < 0.20))
[ALIGN ] dy= -22.8  dx= +29.9  response=-0.038  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.038 < 0.20))
[ALIGN ] dy= -33.0  dx= +14.0  response=0.016  → 測れない (相関が弱く dx/dy が当てにならない (response=0.016 < 0.20))
[ALIGN ] dy= -17.9  dx= +26.1  response=-0.017  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.017 < 0.20))
[ALIGN ] dy= -19.7  dx= +16.0  response=0.029  → 測れない (相関が弱く dx/dy が当てにならない (response=0.029 < 0.20))
[ALIGN ] dy= -15.6  dx=  -4.9  response=0.049  → 測れない (相関が弱く dx/dy が当てにならない (response=0.049 < 0.20))
[ALIGN ] dy= +24.4  dx=-101.4  response=-0.005  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.005 < 0.20))
[ALIGN ] dy= -25.3  dx=  +6.0  response=0.022  → 測れない (相関が弱く dx/dy が当てにならない (response=0.022 < 0.20))
[ALIGN ] dy=  +3.5  dx= +11.6  response=0.008  → 測れない (相関が弱く dx/dy が当てにならない (response=0.008 < 0.20))
[ALIGN ] dy= -76.1  dx= +17.0  response=-0.009  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.009 < 0.20))
[ALIGN ] dy=  +5.1  dx= +18.9  response=0.036  → 測れない (相関が弱く dx/dy が当てにならない (response=0.036 < 0.20))
[ALIGN ] dy= -13.2  dx= +50.9  response=0.085  → 測れない (相関が弱く dx/dy が当てにならない (response=0.085 < 0.20))
[ALIGN ] dy= +63.0  dx= +93.7  response=0.000  → 測れない (相関が弱く dx/dy が当てにならない (response=0.000 < 0.20))
[ALIGN ] dy=  +3.9  dx=  -9.0  response=0.036  → 測れない (相関が弱く dx/dy が当てにならない (response=0.036 < 0.20))
[ALIGN ] dy= -40.2  dx= -24.0  response=-0.014  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.014 < 0.20))
[ALIGN ] dy= -18.0  dx= +52.3  response=0.018  → 測れない (相関が弱く dx/dy が当てにならない (response=0.018 < 0.20))
[ALIGN ] dy= -16.8  dx= +23.4  response=0.034  → 測れない (相関が弱く dx/dy が当てにならない (response=0.034 < 0.20))
[ALIGN ] dy= -31.7  dx=  -1.6  response=0.038  → 測れない (相関が弱く dx/dy が当てにならない (response=0.038 < 0.20))
[ALIGN ] dy=  -3.0  dx= +54.0  response=0.034  → 測れない (相関が弱く dx/dy が当てにならない (response=0.034 < 0.20))
[ALIGN ] dy=  +2.9  dx= -42.1  response=0.024  → 測れない (相関が弱く dx/dy が当てにならない (response=0.024 < 0.20))
[ALIGN ] dy= -12.9  dx=  +8.3  response=0.017  → 測れない (相関が弱く dx/dy が当てにならない (response=0.017 < 0.20))
[ALIGN ] dy=  -5.8  dx= -56.2  response=0.012  → 測れない (相関が弱く dx/dy が当てにならない (response=0.012 < 0.20))
[ALIGN ] dy= -23.0  dx= +27.0  response=0.015  → 測れない (相関が弱く dx/dy が当てにならない (response=0.015 < 0.20))
[ALIGN ] dy= -42.4  dx=  +4.0  response=0.020  → 測れない (相関が弱く dx/dy が当てにならない (response=0.020 < 0.20))
[ALIGN ] dy= -44.2  dx= +37.6  response=0.041  → 測れない (相関が弱く dx/dy が当てにならない (response=0.041 < 0.20))
[ALIGN ] dy= -50.5  dx=  -2.6  response=0.069  → 測れない (相関が弱く dx/dy が当てにならない (response=0.069 < 0.20))
[ALIGN ] dy= +12.6  dx= -30.7  response=0.041  → 測れない (相関が弱く dx/dy が当てにならない (response=0.041 < 0.20))
[ALIGN ] dy= -35.4  dx= +10.9  response=0.043  → 測れない (相関が弱く dx/dy が当てにならない (response=0.043 < 0.20))
[ALIGN ] dy= -48.0  dx= -36.5  response=0.055  → 測れない (相関が弱く dx/dy が当てにならない (response=0.055 < 0.20))
[ALIGN ] dy= -30.7  dx=  -0.1  response=0.010  → 測れない (相関が弱く dx/dy が当てにならない (response=0.010 < 0.20))
[ALIGN ] dy= -11.0  dx= -16.3  response=0.020  → 測れない (相関が弱く dx/dy が当てにならない (response=0.020 < 0.20))
[ALIGN ] dy= -14.5  dx= +35.5  response=-0.007  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.007 < 0.20))
[ALIGN ] dy=  -1.8  dx=  +2.4  response=0.018  → 測れない (相関が弱く dx/dy が当てにならない (response=0.018 < 0.20))
[ALIGN ] dy= -26.1  dx=  -4.9  response=0.006  → 測れない (相関が弱く dx/dy が当てにならない (response=0.006 < 0.20))
[ALIGN ] dy=  +9.5  dx= -27.5  response=0.012  → 測れない (相関が弱く dx/dy が当てにならない (response=0.012 < 0.20))
[ALIGN ] dy= +12.3  dx= +53.6  response=0.006  → 測れない (相関が弱く dx/dy が当てにならない (response=0.006 < 0.20))
[ALIGN ] dy= +44.9  dx= +53.6  response=-0.002  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.002 < 0.20))
[ALIGN ] dy= +18.6  dx= +28.9  response=0.010  → 測れない (相関が弱く dx/dy が当てにならない (response=0.010 < 0.20))
[ALIGN ] dy= +15.4  dx= -29.2  response=0.023  → 測れない (相関が弱く dx/dy が当てにならない (response=0.023 < 0.20))
[ALIGN ] dy= -56.7  dx= +15.7  response=0.005  → 測れない (相関が弱く dx/dy が当てにならない (response=0.005 < 0.20))
[ALIGN ] dy= -39.4  dx= -77.3  response=0.052  → 測れない (相関が弱く dx/dy が当てにならない (response=0.052 < 0.20))
[ALIGN ] dy= -11.1  dx= -23.6  response=0.044  → 測れない (相関が弱く dx/dy が当てにならない (response=0.044 < 0.20))
[ALIGN ] dy= -37.5  dx= -14.5  response=-0.033  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.033 < 0.20))
[ALIGN ] dy= -33.3  dx= -83.3  response=0.024  → 測れない (相関が弱く dx/dy が当てにならない (response=0.024 < 0.20))
[ALIGN ] dy= -41.4  dx= -33.3  response=0.160  → 測れない (相関が弱く dx/dy が当てにならない (response=0.160 < 0.20))
[ALIGN ] dy= -65.2  dx= -68.7  response=0.002  → 測れない (相関が弱く dx/dy が当てにならない (response=0.002 < 0.20))
[ALIGN ] dy= -21.6  dx= +78.6  response=0.018  → 測れない (相関が弱く dx/dy が当てにならない (response=0.018 < 0.20))
[ALIGN ] dy= +46.0  dx=+101.2  response=0.059  → 測れない (相関が弱く dx/dy が当てにならない (response=0.059 < 0.20))
[ALIGN ] dy= -63.6  dx= -68.0  response=0.021  → 測れない (相関が弱く dx/dy が当てにならない (response=0.021 < 0.20))
[ALIGN ] dy=  +1.5  dx= +10.5  response=0.005  → 測れない (相関が弱く dx/dy が当てにならない (response=0.005 < 0.20))
[ALIGN ] dy= -24.4  dx= -40.1  response=-0.024  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.024 < 0.20))
[ALIGN ] dy=  -5.1  dx= -21.0  response=0.069  → 測れない (相関が弱く dx/dy が当てにならない (response=0.069 < 0.20))
[ALIGN ] dy= -20.8  dx= +11.6  response=0.068  → 測れない (相関が弱く dx/dy が当てにならない (response=0.068 < 0.20))
[ALIGN ] dy= +47.6  dx=+116.7  response=0.059  → 測れない (相関が弱く dx/dy が当てにならない (response=0.059 < 0.20))
[ALIGN ] dy=  +3.6  dx= +29.5  response=-0.009  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.009 < 0.20))
[ALIGN ] dy= +25.3  dx= -75.1  response=-0.001  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.001 < 0.20))
[ALIGN ] dy= -32.3  dx= +75.6  response=-0.001  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.001 < 0.20))
[ALIGN ] dy= -40.5  dx= +60.2  response=0.043  → 測れない (相関が弱く dx/dy が当てにならない (response=0.043 < 0.20))
[ALIGN ] dy= -80.1  dx= +65.6  response=0.041  → 測れない (相関が弱く dx/dy が当てにならない (response=0.041 < 0.20))
[ALIGN ] dy= -46.6  dx= -87.1  response=0.080  → 測れない (相関が弱く dx/dy が当てにならない (response=0.080 < 0.20))
[ALIGN ] dy= -62.2  dx= -95.5  response=0.049  → 測れない (相関が弱く dx/dy が当てにならない (response=0.049 < 0.20))
[ALIGN ] dy= -93.4  dx=-137.8  response=-0.028  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.028 < 0.20))
[ALIGN ] dy= +63.9  dx= -66.9  response=0.083  → 測れない (相関が弱く dx/dy が当てにならない (response=0.083 < 0.20))
[ALIGN ] dy= +12.9  dx=  -0.5  response=0.027  → 測れない (相関が弱く dx/dy が当てにならない (response=0.027 < 0.20))
[ALIGN ] dy= +10.3  dx= -10.4  response=0.144  → 測れない (相関が弱く dx/dy が当てにならない (response=0.144 < 0.20))
[ALIGN ] dy= +17.0  dx=  -5.2  response=0.113  → 測れない (相関が弱く dx/dy が当てにならない (response=0.113 < 0.20))
[ALIGN ] dy= +15.5  dx=  +0.9  response=0.046  → 測れない (相関が弱く dx/dy が当てにならない (response=0.046 < 0.20))
[ALIGN ] dy=  +8.0  dx=  -7.2  response=0.168  → 測れない (相関が弱く dx/dy が当てにならない (response=0.168 < 0.20))
[ALIGN ] dy= +15.8  dx=  -0.4  response=0.110  → 測れない (相関が弱く dx/dy が当てにならない (response=0.110 < 0.20))
[ALIGN ] dy= +13.8  dx=  +1.6  response=0.081  → 測れない (相関が弱く dx/dy が当てにならない (response=0.081 < 0.20))
[ALIGN ] dy= +15.4  dx=  +2.6  response=0.140  → 測れない (相関が弱く dx/dy が当てにならない (response=0.140 < 0.20))
[ALIGN ] dy=  +7.3  dx=  -0.6  response=0.160  → 測れない (相関が弱く dx/dy が当てにならない (response=0.160 < 0.20))
[ALIGN ] dy= +15.3  dx=  +7.3  response=0.130  → 測れない (相関が弱く dx/dy が当てにならない (response=0.130 < 0.20))
[ALIGN ] dy=  +8.7  dx=  -1.8  response=0.151  → 測れない (相関が弱く dx/dy が当てにならない (response=0.151 < 0.20))
[ALIGN ] dy= +16.0  dx=  +3.1  response=0.094  → 測れない (相関が弱く dx/dy が当てにならない (response=0.094 < 0.20))
[ALIGN ] dy=  +9.0  dx=  -9.9  response=0.156  → 測れない (相関が弱く dx/dy が当てにならない (response=0.156 < 0.20))
[ALIGN ] dy= +16.2  dx=  -5.4  response=0.134  → 測れない (相関が弱く dx/dy が当てにならない (response=0.134 < 0.20))
[ALIGN ] dy= +17.3  dx=  -5.4  response=0.147  → 測れない (相関が弱く dx/dy が当てにならない (response=0.147 < 0.20))
[ALIGN ] dy= +15.9  dx=  -2.4  response=0.139  → 測れない (相関が弱く dx/dy が当てにならない (response=0.139 < 0.20))
[ALIGN ] dy= +17.2  dx=  -4.3  response=0.156  → 測れない (相関が弱く dx/dy が当てにならない (response=0.156 < 0.20))
[ALIGN ] dy=  -2.4  dx= -47.7  response=-0.014  → 測れない (相関が弱く dx/dy が当てにならない (response=-0.014 < 0.20))
[ALIGN ] dy=  +2.7  dx=  -4.1  response=0.860  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  +0.2  dx=  -5.8  response=0.305  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[DONE  ] 終了 (何も書いていません)
    (48 秒)

=== 8. 実機推論 (1 回目)
[WAIT  ] 送ったあと 0.0s / 爪のあと 0.8s (開くときの daemon 0.0s) / 止まるのを待つ目安 0.8s
[SAFE  ] 安全範囲 (学習 19 本 ±10°): j0[-72,+55]  j1[-9,+88]  j2[-46,+41]  j3[-18,+27]  j4[-90,+10]  j5[-51,-14]
[SAFE  ] 肩 j1 の上限は J1_SAFE_MAX=88° で切った (これを超える指令はアームが黙って捨てる / LOG352)  元データ: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes
[MODE  ] EXECUTE  steps/chunk=10  max_move=20.0°  log=/Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_185246
[CAMERA] 写り方 dy=-4.8 dx=+0.7 response=0.187 → 測れない (相関が弱く dx/dy が当てにならない (response=0.187 < 0.20))
[CAMERA] 基準: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_183454/frames/000000.jpg
[WARN  ] 写り方が『測れない』だが --ignore-framing が指定されたので続けます
[POLICY] 接続 ws://localhost:8000  metadata={}
[RECORD] 上カメラと実測角を 1 秒 10 コマで記録します → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_185246/recording
[GRIP  ] 開始時のグリッパー開放は, 最初の目標が検査を通ってから行います (爪が閉じていたら手で開けておく)
[STATE ] 実測を渡す (直前に送った目標がない)
[000] 推論 1369ms  10ステップ先  Δ= -1.3  +4.7  +0.6  -0.2  -4.8  +0.1
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 >  
       分からない入力:  （Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了）
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > q
[RECORD] 記録終了 コマ 531 (8.829 fps) 実測角 601 回 (9.99 Hz)  → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_185246/recording
       結果: y=成功 / n=失敗 / Enter=記録しない > y
[DONE  ] 記録: /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_185246
[CLIENT] run_policy_client.py が終わった (終了コード 0)
    (70 秒)
もう1回やりますか? y=やる / 他=終わる > y

=== 7. HOME → 爪を開く → 位置合わせ (2 回目)
[INIT] daemon 接続中...
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[INIT] fresh_mode=1
[PRE]  現在姿勢: [-0.26, 1.49, 0.70, 0.26, -0.26, -30.23]
[SEND] HOME へ移動指令
[WAIT] t=2.0s  max_err=1.49°
[DONE] HOME 到達 max_err=1.49°
[POST] 最終姿勢: [-0.26, 1.49, 0.70, 0.26, -0.26, -30.23]
  [WARN] fresh_mode切替不可: daemon error: set_fresh_mode is not available in this pymycobot environment
[EXIT] fresh_mode=0, socket close
  [Pi] GRIPPER: OPEN result= -1
[REF   ] 基準画像: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_194818/frames/000000.jpg
[REF   ] お手本 run_0001_20261019_194818 (つかんだ瞬間の j0 = +13.2°)
[REF   ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける
[ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない)
[ALIGN ] dy=  +3.5  dx=  -4.1  response=0.814  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  +2.3  dx=  -6.6  response=0.831  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  +0.5  dx= -10.2  response=0.852  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  -1.0  dx=  -5.4  response=0.858  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  -3.2  dx=  -1.1  response=0.862  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  -4.2  dx=  +1.5  response=0.907  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  -2.8  dx=  +0.7  response=0.884  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  +0.6  dx=  -0.1  response=0.820  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  +2.7  dx=  -0.0  response=0.821  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[ALIGN ] dy=  +1.5  dx=  -1.9  response=0.820  → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[DONE  ] 終了 (何も書いていません)
    (29 秒)

=== 8. 実機推論 (2 回目)
[WAIT  ] 送ったあと 0.0s / 爪のあと 0.8s (開くときの daemon 0.0s) / 止まるのを待つ目安 0.8s
[SAFE  ] 安全範囲 (学習 19 本 ±10°): j0[-72,+55]  j1[-9,+88]  j2[-46,+41]  j3[-18,+27]  j4[-90,+10]  j5[-51,-14]
[SAFE  ] 肩 j1 の上限は J1_SAFE_MAX=88° で切った (これを超える指令はアームが黙って捨てる / LOG352)  元データ: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes
[MODE  ] EXECUTE  steps/chunk=10  max_move=20.0°  log=/Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_185428
[CAMERA] 写り方 dy=-5.5 dx=+3.9 response=0.561 → OK (|dy|<=20 / |dx|<=20 / response>=0.20)
[CAMERA] 基準: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_183454/frames/000000.jpg
[POLICY] 接続 ws://localhost:8000  metadata={}
[RECORD] 上カメラと実測角を 1 秒 10 コマで記録します → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_185428/recording
[GRIP  ] 開始時のグリッパー開放は, 最初の目標が検査を通ってから行います (爪が閉じていたら手で開けておく)
[STATE ] 実測を渡す (直前に送った目標がない)
[000] 推論 1175ms  10ステップ先  Δ= +3.7 +15.9  +9.8  -1.4 -21.7  +2.6
       [VIA   ] 中継点 4 点: step 2, 5, 8, 9
       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > q
[RECORD] 記録終了 コマ 134 (8.811 fps) 実測角 152 回 (9.99 Hz)  → /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_185428/recording
       結果: y=成功 / n=失敗 / Enter=記録しない > 
[DONE  ] 記録: /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/pi05_20261031_185428
[CLIENT] run_policy_client.py が終わった (終了コード 0)
    (26 秒)
もう1回やりますか? y=やる / 他=終わる > 

=== かかった時間 (Log17 の Pod (id 74ms0zqc1as65g) につなぎ直し)
  1. Pod につなぎ直す             1 秒
  2. Pod が立ち上がるまで待つ      8 秒
  3. Pod の中を確かめる (つなぎ直し)      7 秒
  3a. スクリプトを送る         46 秒
  3b〜4. 準備とサーバーの起動 (飛ばした)      0 秒
  5. Mac の 8000 番へのトンネル      4 秒
  6. デーモンの状態              2 秒
  7. HOME → 爪を開く → 位置合わせ (1 回目)     48 秒
  8. 実機推論 (1 回目)           70 秒
  7. HOME → 爪を開く → 位置合わせ (2 回目)     29 秒
  8. 実機推論 (2 回目)           26 秒

[LAB   ] Pod は残しています (id 74ms0zqc1as65g). 片付けは ./lab_stop.sh --log Log17
[TUNNEL] 8000 番のトンネルを閉じました
```

### Pod のサーバーの記録 serve.log

```text
INFO:root:Loading model...
INFO:2026-10-31 08:54:12,424:jax._src.xla_bridge:925: Unable to initialize backend 'rocm': module 'jaxlib.xla_extension' has no attribute 'GpuAllocatorConfig'
INFO:jax._src.xla_bridge:Unable to initialize backend 'rocm': module 'jaxlib.xla_extension' has no attribute 'GpuAllocatorConfig'
INFO:2026-10-31 08:54:12,426:jax._src.xla_bridge:925: Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory
INFO:jax._src.xla_bridge:Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory
INFO:absl:orbax-checkpoint version: 0.11.13
INFO:absl:Created BasePyTreeCheckpointHandler: use_ocdbt=True, use_zarr3=False, pytree_metadata_options=PyTreeMetadataOptions(support_rich_types=False), array_metadata_store=<orbax.checkpoint._src.metadata.array_metadata_store.Store object at 0x7913b9fae9d0>
INFO:absl:Restoring checkpoint from /workspace/ckpt/3999/params.
INFO:absl:[thread=MainThread] Failed to get flag value for EXPERIMENTAL_ORBAX_USE_DISTRIBUTED_PROCESS_ID.
INFO:absl:[process=0] /jax/checkpoint/read/bytes_per_sec: 1.1 GiB/s (total bytes: 6.3 GiB) (time elapsed: 6 seconds) (per-host)
INFO:absl:Finished restoring checkpoint in 6.01 seconds from /workspace/ckpt/3999/params.
INFO:openpi.shared.download:Downloading gs://big_vision/paligemma_tokenizer.model to /root/.cache/openpi/big_vision/paligemma_tokenizer.model
INFO:tqdm_loggable.tqdm_logging:Progress on: -/4264023 rate:- remaining:? elapsed:00:00 postfix:-
INFO:tqdm_loggable.tqdm_logging:Progress on: 4.07MiB/4.07MiB rate:4,260,259.7iB/s remaining:00:00 elapsed:00:01 postfix:-
INFO:root:Loaded norm stats from /workspace/openpi/assets/pi05_mecharm_trim_lora/local/mecharm_redblock_box_teach_v1_trim2
INFO:root:Loaded norm stats from /workspace/ckpt/3999/assets/local/mecharm_redblock_box_teach_v1_trim2
INFO:root:Creating server (host: 4a09da64d8fb, ip: 172.16.128.2)
INFO:websockets.server:server listening on 0.0.0.0:8000
INFO:websockets.server:connection open
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 60198) opened
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 60198) closed
INFO:websockets.server:connection open
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 51530) opened
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 51530) closed
INFO:websockets.server:connection open
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 58120) opened
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 58120) closed
```

### serve_20261031_185508.log

```text
INFO:root:Loading model...
INFO:2026-10-31 09:18:54,364:jax._src.xla_bridge:925: Unable to initialize backend 'rocm': module 'jaxlib.xla_extension' has no attribute 'GpuAllocatorConfig'
INFO:jax._src.xla_bridge:Unable to initialize backend 'rocm': module 'jaxlib.xla_extension' has no attribute 'GpuAllocatorConfig'
INFO:2026-10-31 09:18:54,366:jax._src.xla_bridge:925: Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory
INFO:jax._src.xla_bridge:Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory
INFO:absl:orbax-checkpoint version: 0.11.13
INFO:absl:Created BasePyTreeCheckpointHandler: use_ocdbt=True, use_zarr3=False, pytree_metadata_options=PyTreeMetadataOptions(support_rich_types=False), array_metadata_store=<orbax.checkpoint._src.metadata.array_metadata_store.Store object at 0x7ca230c15210>
INFO:absl:Restoring checkpoint from /workspace/ckpt/3999/params.
INFO:absl:[thread=MainThread] Failed to get flag value for EXPERIMENTAL_ORBAX_USE_DISTRIBUTED_PROCESS_ID.
INFO:absl:[process=0] /jax/checkpoint/read/bytes_per_sec: 1.2 GiB/s (total bytes: 6.3 GiB) (time elapsed: 5 seconds) (per-host)
INFO:absl:Finished restoring checkpoint in 5.47 seconds from /workspace/ckpt/3999/params.
INFO:openpi.shared.download:Downloading gs://big_vision/paligemma_tokenizer.model to /root/.cache/openpi/big_vision/paligemma_tokenizer.model
INFO:tqdm_loggable.tqdm_logging:Progress on: -/4264023 rate:- remaining:? elapsed:00:00 postfix:-
INFO:tqdm_loggable.tqdm_logging:Progress on: 4.07MiB/4.07MiB rate:4,260,534.8iB/s remaining:00:00 elapsed:00:01 postfix:-
INFO:root:Loaded norm stats from /workspace/openpi/assets/pi05_mecharm_trim_lora/local/mecharm_redblock_box_teach_v1_trim2
INFO:root:Loaded norm stats from /workspace/ckpt/3999/assets/local/mecharm_redblock_box_teach_v1_trim2
INFO:root:Creating server (host: ac175319dcb2, ip: 172.16.16.2)
INFO:websockets.server:server listening on 0.0.0.0:8000
INFO:websockets.server:connection open
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 53592) opened
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 53592) closed
INFO:websockets.server:connection open
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 48382) opened
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 48382) closed
INFO:websockets.server:connection open
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 59832) opened
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 59832) closed
INFO:websockets.server:connection open
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 37198) opened
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 37198) closed
INFO:websockets.server:connection open
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 44894) opened
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 44894) closed
INFO:websockets.server:connection open
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 42306) opened
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 42306) closed
INFO:websockets.server:connection open
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 38144) opened
INFO:openpi.serving.websocket_policy_server:Connection from ('127.0.0.1', 38144) closed
```

### Claude Code の作業記録 logs/20261031_1848.md

```markdown
# 2026-10-31 依頼 44: lab_start.sh で、同じ Log の Pod が残っていたらつなぎ直す

## やったこと
- lab_start.sh: <Log>/pod/lab_pod.json の Pod を API で見て分ける
  - RUNNING → 作らずにつなぎ直す。IP とポートは API から取り直す。Pod の中を1回の ssh で確かめ (serve のプロセス・8000 番の LISTEN・モデルの済んだ印・openpi の commit・.venv)、サーバーが待っていれば 3b〜4 を飛ばす。落ちていれば前の serve.log を serve_before_restart_<時刻>.log に持ち帰り、ないものだけやり直して 3f・4 を流す。3a (スクリプトを送る) は毎回
  - EXITED → lab_stop.sh --skip-log で消してから作る。TERMINATED・404 で一覧にもない → 作る。どちらも古い lab_pod.json は lab_pod_<時刻>.json に残す
  - API の答えが分からない・知らない状態・記録にない p2m-<Log> の Pod がある・一覧が読めない → 止まる (二重に借りない)
  - 同じ Log の lab_start.sh を同時に動かさない印 (<Log>/pod/.lab_start.lock)。印が残っていれば止まり、消し方を出す
  - 3c で hf download が最後まで済んだら /workspace/ckpt/3999/.lab_download_ok を付ける
  - かかった時間の一覧に「つなぎ直し」「(飛ばした)」の行
  - fail() の「${CUR_STAGE}」(bash 3.2 + UTF-8 で落ちて文言が出ていなかった)
- lab_lib.sh: lab_valid_pods / lab_pod_kind / lab_probe_cmd / lab_pod_probe / lab_archive_state、RUNPOD_HTTP の初期値
- lab_stop.sh: 消えたかの確かめで、読めない一覧を「消えた」にしない
- test_lab_start.sh (新規): API・SSH を差し替えて 68 件 OK

## レビュー
codex R1 (必須 4) → R2 (ロックの競合 必須) → R3 必須なし。docs/review_*_20261031_lab_start_reattach*

## 残り (エイイチの判断)
- serve=1・listen=0 (読み込み途中かもしれない) をすぐ起動し直すか、少し待つか
- 印 (.lab_start.lock) が残ったときは手で消す運用でよいか
```

### レビューの依頼文 review_request_20261031_lab_start_reattach.md

```markdown
# コードレビュー依頼：lab_start.sh で、同じ Log の Pod が残っていたら新しく作らずにつなぎ直す（2026-10-31 依頼 44）

前提: 依頼 37（lab_start.sh・lab_stop.sh・lab_lib.sh・コミット a043b60）と依頼 39（コミット 3fa44b5）の続き。

対象 (`git diff HEAD -- lab_start.sh lab_lib.sh` と新規の `test_lab_start.sh`。ほかのファイルの未コミット差分は対象外。lab_stop.sh は変えていない):

## 実機で起きたこと
`./lab_start.sh --log Log17` で推論を終え (Pod は残す)、同じ Log17 でもう一度打つと「Log17 の Pod (id …) がまだ残っています. 新しく作らずに止まります」で止まり、続けるには Pod を消して準備からやり直すしかなかった。

## 変えたこと
- lab_lib.sh
  - `lab_pod_kind ID`: GET /pods/ID で running (RUNNING) / stopped (EXITED など、TERMINATED 以外) / gone (API にない・TERMINATED・id のない 200) に分ける。2xx 以外は GET /pods の一覧に (TERMINATED 以外で) その id がないことを確かめてから gone。000・一覧が取れない・一覧にまだある・200 で desiredStatus が空・JSON が読めない → 戻り値 1 (呼ぶ側で止まる)。RUNPOD_HTTP を親に残すため `$(...)` に入れずに一時ファイルで受ける
  - `lab_probe_cmd COMMIT CKPT` / `lab_pod_probe`: 1 回の ssh で serve_policy.py のプロセス (pgrep -f '[s]cripts/serve_policy\.py')・8000 番の LISTEN (/proc/net/tcp・tcp6 の 1F40 で st=0A)・モデル (CKPT/assets/local があり *.incomplete がない)・openpi の HEAD が COMMIT・.venv/bin/python と $HOME/.local/bin/env を見て `PROBE serve=… listen=… ckpt=… openpi=… venv=…` を返し、PROBE_* に入れる。行が読めなければ戻り値 1
  - `lab_archive_state FILE`: lab_pod.json を lab_pod_<時刻>.json に mv (消さない)
  - `RUNPOD_HTTP=""` を初めに置く (`$(runpod_api …) || fail "… HTTP $RUNPOD_HTTP"` が set -u で落ちないように)
- lab_start.sh
  - 1: 記録があり running → POD_ID・料金・作った時刻を記録から取り「<Log> の Pod (id …) につなぎ直します」。stopped → `lab_stop.sh --log <Log> --skip-log` (serve.log は 1 回だけ試す・DELETE・消えたのを確かめる・費用) で消してから記録を時刻付きに変えて新しく作る。gone → 記録を時刻付きに変えて作る。記録に id がない → 時刻付きに変えて作る。lab_pod_kind が 1 → 止まる
  - 1 (作る側): 記録にない p2m-<Log> の Pod (TERMINATED 以外) が一覧にあれば止まる (二重に借りない)。ほかの Log の Pod は今までどおり WARN だけ
  - 2: 今までどおり lab_pod_addr で IP とポートを API から取る (つなぎ直しでも毎回取り直す)
  - 3 (つなぎ直しのときだけ): lab_pod_probe。serve と listen が両方 1 なら 3b〜4 を飛ばす。そうでなければ前の serve.log を <Log>/serve_before_restart_<時刻>.log に持ち帰り (だめでも続ける)、ckpt・openpi・venv のないものだけやり直す (openpi を取り直すなら uv sync も)。3f (install_addon.py・add_trim_config.py・assets の cp。どれも二度流しても同じ) と 4 (tmux kill-session してから起動) は流す
  - 3a (スクリプトを送る) はつなぎ直しでも毎回送る
  - かかった時間の一覧: 見出しに「(<Log> の Pod (id …) につなぎ直し)」、1 は「1. Pod につなぎ直す」、飛ばした段階は「… (飛ばした)  0 秒」
  - fail() の `「$CUR_STAGE」` を `「${CUR_STAGE}」` に (bash 3.2 + UTF-8 で「」のバイトが変数名に入り unbound variable で落ちていた。止まる道すべての文言が出ていなかった)
- test_lab_start.sh (新規): 一時フォルダに lab_start.sh・lab_stop.sh を写し、runpod_api・pod_ssh・pod_scp・ssh・lsof・python3 を偽物にして --dry-run で最後まで流す 14 の場合 + lab_probe_cmd を Mac の bash で実際に流す確かめ。47 件 OK

## 見てほしい点
1. 二重に借りる道が残っていないか (lab_pod_kind の分かれ道、stopped を消すのに失敗したとき、記録にない同名 Pod、API が一時的に落ちているとき)
2. Runpod REST API の答え方の想定 (GET /pods/ID の 404 などが本当に「ない」か、RUNNING 以外の desiredStatus を stopped として消してよいか。作ったばかりで起動中の Pod を stopped と取り違えて消す恐れはないか)
3. lab_probe_cmd の判定 (pgrep の自分自身への当たり、/proc/net/tcp の読み方、ckpt の判定が弱すぎないか、serve=1 listen=0 のとき起動し直すのでよいか)
4. つなぎ直しで 3f を毎回流すこと・3a を毎回送ることの是非
5. lab_stop.sh をサブプロセスで呼ぶことの副作用 (トンネルを閉じる、exec tee、終了コード)
6. テストの不足

ファイル変更・実機操作・Pod の操作はしないでください。読み取りだけでお願いします。日本語で、表（項目 / 判定 / 確認結果・修正案）と、必須 / 推奨 / 据え置きの分類で返してください。
```

### codex の答え review_result_20261031_lab_start_reattach_codex.md

```markdown
# codex レビュー結果：lab_start.sh のつなぎ直し（2026-10-31 依頼 44）

依頼文: docs/review_request_20261031_lab_start_reattach.md（codex exec -s read-only）

判定は **必須修正あり** です。通常の再接続経路は妥当ですが、API 応答異常と同時起動に対して、二重作成を防ぎ切れていません。

読み取りのみで確認しました。書き込みを伴うテストは実行せず、47 件 OK は未追試です。

| 項目 | 判定 | 確認結果・修正案 |
|---|---|---|
| 一覧 JSON の検証 | **必須** | [lab_start.sh:166](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_start.sh:166) の `same=$(jq …)` は終了コードを確認していません。HTTP 200 でも不正 JSON・`null`・想定外の構造なら、同名なしとして POST まで進めます。最初に「配列で、各要素が必要な属性を持つ」ことを検証し、解析失敗は必ず停止してください。 |
| 同じ Log の同時起動 | **必須** | [lab_start.sh:133](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_start.sh:133) から状態保存までロックがありません。2 プロセスがともに「記録なし・一覧に同名なし」を通過すると、両方 POST します。Log 単位の排他を、状態読み込み前から保持してください。Mac の bash 3.2 なら原子的な `mkdir` によるロックなどが候補です。 |
| stopped の削除確認 | **必須** | [lab_start.sh:147](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_start.sh:147) の子プロセス失敗時に停止する点は正しいです。ただし、呼び先の [lab_stop.sh:127](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_stop.sh:127) は `! jq -e …` により **解析エラーまで消滅確認成功にします**。変更対象外の既存問題ですが、今回これを自動削除の根拠に使います。呼び先の検証を直すか、start 側で厳密な一覧検証と消滅確認を追加してください。 |
| モデルの完了判定 | **必須** | [lab_lib.sh:124](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:124) は `assets/local` だけ存在すれば、重みがなくても `ckpt=1` です。ダウンロード中断がファイル取得の合間なら `.incomplete` がない場合もあります。成功した download 後の完了マーカーと、必要な重み・対象 assets の確認を組み合わせてください。`find` の失敗も現在は欠損なし扱いになります。 |
| GET /pods/ID の 404 | **据え置き** | 公式 OpenAPI は 404 を `Pod not found` と定義しています。一覧でも不存在を確認する方針は妥当です。ただし一覧の型検証は必要です。[Runpod OpenAPI](https://rest.runpod.io/v1/openapi.json) |
| RUNNING 以外の扱い | **推奨** | [lab_lib.sh:107](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:107) は未知の値まで stopped にします。公式 v1 の列挙は `RUNNING / EXITED / TERMINATED` なので、削除対象は **EXITED のみ**にし、未知値は停止する方が意図に合います。[Runpod OpenAPI](https://rest.runpod.io/v1/openapi.json) |
| 起動中 Pod の誤削除 | **据え置き** | `desiredStatus` は実際の起動完了ではなく要求状態です。イメージ取得中も RUNNING なので、通常の起動待ちを EXITED と誤認する構造ではありません。SSH 待ちへ進む実装は妥当です。[Runpod 公式 CLI 説明](https://github.com/runpod/runpodctl/blob/main/README.md) |
| 200・id なし／非 2xx | **推奨** | [lab_lib.sh:103](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:103) は `{}` や `[]` も gone にします。後段の同名確認はありますが、これらは仕様上の Pod 応答ではありません。200 の構造不正は停止、id は要求 id との一致も確認。401・403・5xx も原則停止とし、404 のみ不存在確認へ進めると明確です。 |
| pgrep と LISTEN | **据え置き／推奨** | `[s]cripts/…` による自己一致回避と、local address の `:1F40`・状態 `0A` の読み方は妥当です。ただし別プロセスの 8000 LISTEN と serve プロセスを組み合わせても成功します。可能ならサーバーへの応答確認を加えてください。 |
| serve=1・listen=0 | **推奨** | 即再起動は、初回起動がモデル読込中の場合にも発生します。短い再確認期間を設けてから再起動してください。また `tmux kill-session -t serve` で止められるのはそのセッション内のプロセスであり、外で起動した serve は残り得ます。 |
| 3a の毎回転送 | **据え置き** | 再接続でも最新スクリプトを転送する方針は妥当です。ただし SCP は削除済みファイルを消さないため、完全な同期ではありません。 |
| 3f の再実行 | **据え置き・確認留保** | 再起動する経路だけで実行する構成は妥当です。`install_addon.py` の二重登録回避は確認しました。SSD 上の `add_trim_config.py` の冪等性は今回確認していません。 |
| 子プロセス・tee・トンネル | **推奨** | 子の `exec > >(tee …)` は親の FD を変更せず、ログを双方に残せます。通常の DELETE 失敗も親へ伝わります。一方、トンネル終了は全 Log 共通のパターン検索なので、別 Log の使用中トンネルも閉じます。自動呼び出しでは対象 Pod のトンネルだけに限定するのが望ましいです。 |
| HTTP の表示 | **推奨** | `RUNPOD_HTTP=""` は unbound variable を防ぎますが、`$(runpod_api …)` 内の HTTP は親に戻りません。後続エラーで空欄や以前の 200 を表示し得ます。HTTP を表示する呼び出しも、一時ファイル方式などに揃えてください。 |

テスト追加の優先順位は次のとおりです。

| 項目 | 判定 | 確認結果・修正案 |
|---|---|---|
| API 異常系 | **必須** | 一覧の不正 JSON・`null`・`{}`・空本文、一覧取得失敗を追加し、POST・DELETE がないことを確認。 |
| 停止失敗 | **必須** | DELETE 失敗、削除後も一覧に残る、削除確認の JSON 異常を追加。子の非 0 終了後に archive・POST しないことを確認。 |
| 同時起動 | **必須** | 同じ Log の2プロセスを一覧確認地点で同期させ、POST が最大1回になることを確認。 |
| 不完全なモデル | **必須** | assets だけ、重み欠損、完了マーカーなし、探索失敗を追加。現在は「assets だけで成功」を正解としてテストしています。 |
| probe と再起動 | **推奨** | serve=0/listen=1、起動途中、別プロセスの LISTEN、SSH 失敗、前ログ取得失敗、tmux 起動失敗を追加。 |

特に、**一覧の解析失敗を「不存在」に変換しないこと**と、**Log 単位の排他**を先に直すのがよいです。
```

### review_request_20261031_lab_start_reattach_r2.md

```markdown
# コードレビュー依頼 R2：lab_start.sh のつなぎ直し（2026-10-31 依頼 44）

前回: docs/review_request_20261031_lab_start_reattach.md → docs/review_result_20261031_lab_start_reattach_codex.md
対象: `git diff HEAD -- lab_start.sh lab_lib.sh lab_stop.sh` と新規の `test_lab_start.sh`（65 件 OK）。ほかのファイルの未コミット差分は対象外。

## R1 の指摘への対応
| 指摘 | 分類 | 反映 | 対応内容 / 据え置き理由 | 再確認観点 |
|---|---|---|---|---|
| 一覧 JSON の検証 | 必須 | 反映 | lab_lib.sh に `lab_valid_pods` (配列で、どの要素も id が文字列の object)。lab_start.sh の作る道で一覧が読めなければ止まる。lab_pod_kind の 404 の一覧確認でも使う | null・{}・壊れた JSON・空・id のない要素で POST しないか (テスト 16) |
| 同じ Log の同時起動 | 必須 | 反映 | `<Log>/pod/.lab_start.lock` を mkdir で取り、pid を書く。stage 1 の前から終わるまで持ち、EXIT の trap で自分の pid のときだけ外す。生きている pid の印があれば API を呼ぶ前に止まる。pid が死んでいれば取り直す | script で再 exec する前 (親) では取らないこと、取り直しの競合の幅、Ctrl-C (fail→exit) で外れるか |
| stopped の削除確認 (lab_stop.sh) | 必須 | 反映 | lab_stop.sh の消えたかの確かめに `lab_valid_pods` を足し、読めない一覧を「消えた」にしない (2 分半待って exit 1 → lab_start.sh は作らずに止まる) | テスト 21 (DELETE 失敗)・22 (DELETE 後の一覧が読めない) |
| モデルの完了判定 | 必須 | 反映 | 3c で hf download の前に `.lab_download_ok` を消し、成功したら付ける。probe の ckpt は印と assets/local の両方。find はやめた。依頼 44 より前に作った Pod には印がないので、サーバーが落ちていればモデルを取り直す (前回 6.0G で 20 秒) | 印の付け方 |
| RUNNING 以外の扱い | 推奨→必須に上げた | 反映 | 自動で消すのは EXITED だけ。知らない状態は止まる (テスト 19) | |
| 200・id なし／非 2xx | 推奨→必須に上げた | 反映 | 200 は object で id が記録の id と同じときだけ読む。それ以外 ({}・[]・違う id) は止まる。404 だけ一覧で確かめて gone、ほか (401・5xx・000) は止まる (テスト 18・20・8・9) | |
| GET 404 / 起動中 Pod の誤削除 / 3a 毎回 | 据え置き | 非反映 | R1 で妥当の判定 | |
| 3f の再実行 | 据え置き | 非反映 | add_trim_config.py は先頭で MARK があれば「already installed」で終わる (Claude Code が SSD 上のファイルで確認) | |
| pgrep と LISTEN (別プロセスの 8000) | 推奨 | 非反映 | Pod は lab_start.sh 専用で 8000 を使うのは serve だけ。応答の確認は websocket の手順が要るので入れない。エイイチに判断を回す | |
| serve=1・listen=0 の即再起動 | 推奨 | 非反映 | 待つ秒数はエイイチが決めること (報告に回す) | |
| トンネルを全部閉じる | 推奨 | 非反映 | lab_stop.sh の既存の動き。Mac の 8000 番は1本しか張れず、残っていれば 5 で止まるため、閉じても困る場面は少ない | |
| HTTP の表示 | 推奨 | 非反映 | 表示だけの問題 | |

## 見てほしい点
1. R1 の必須がふさがったか。新しく二重に借りる道・誤って消す道ができていないか
2. ロックの扱い (stale の取り直し、trap での外し方、`script` を通るとき)
3. テストの不足

ファイル変更・実機操作・Pod の操作はしないでください。読み取りだけでお願いします。日本語で、表（項目 / 判定 / 確認結果・修正案）と、必須 / 推奨 / 据え置きの分類で返してください。
```

### review_result_20261031_lab_start_reattach_codex_r2.md

```markdown
# codex レビュー結果 R2：lab_start.sh のつなぎ直し（2026-10-31 依頼 44）

依頼文: docs/review_request_20261031_lab_start_reattach_r2.md（codex exec -s read-only）

判定は **必須修正あり（ロックの競合）** です。R1 の API 異常系は改善されていますが、同じ Log で二重に借りる経路が残っています。

読み取りのみで確認しました。4 ファイルの `bash -n` は成功。書き込みを伴うテストは実行しておらず、65 件 OK は未追試です。実機・Pod 操作、ファイル変更は行っていません。

| 項目 | 判定 | 確認結果・修正案 |
|---|---|---|
| ロック取得直後の競合 | **必須・未解決** | [lab_start.sh:131](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_start.sh:131)。A が `mkdir` に成功して pid を書く前に、B が取得を試すと、B は pid 不在を stale と判断して A のロックを削除できます。その後、両方が stage 1 に進み、一覧確認→POST が重なれば二重作成できます。**pid がない・読めない場合は削除せず停止**してください。 |
| stale 取り直しの競合 | **必須・未解決** | [lab_start.sh:132](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_start.sh:132)。B・C が同じ死んだ pid を読んだ後、B が削除→再取得→pid 記入まで済ませても、C の遅れた `rm -rf` が B の新しいロックを削除できます。取得済み所有者が共存し得ます。**最小の確実な修正は、自動 stale 回収をやめ、存在するロックでは停止すること**です。自動回収を残すなら、回収処理自体の排他と所有者の再確認を設計してください。pid 書き込み失敗も停止させてください。 |
| ロックのテスト | **必須・不足** | テスト 23〜25 は既存の生存 pid・死んだ pid・通常終了を順番に確認しています。実際の同時取得は検証していません。上記の「mkdir 後・pid 記入前」と「2者が stale を読んだ後」を同期点で再現し、**保護区間へ進むプロセスが最大1つ、POST が最大1回**になることを確認してください。 |
| 一覧 JSON の検証 | **据え置き・対応済み** | [lab_lib.sh:85](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:85)。配列・各要素の object 型・id の文字列型を検証し、新規作成前と 404 の確認に適用しています。依頼された `null`・`{}`・壊れた JSON・空本文・id 欠落は停止する構造です。 |
| stopped の削除確認 | **据え置き・対応済み** | [lab_stop.sh:127](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_stop.sh:127)。一覧検証に失敗すれば消滅確認を通過しません。待機後の非0終了を start が受け、archive・POST へ進まない構造です。 |
| 未知状態・不正な個別応答 | **据え置き・対応済み** | [lab_lib.sh:98](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:98)。2xx は object と id 一致を確認し、RUNNING／EXITED／TERMINATED のみ分類。404 以外の失敗は停止します。未知状態を自動削除する経路は解消しています。 |
| モデル完了マーカー | **据え置き・中断対策は対応済み** | [lab_start.sh:285](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_start.sh:285)。古い印の削除→download→成功時の touch が `&&` で連結されており、download 失敗で印を付けません。旧 Pod の印なしも再取得になります。 |
| モデルの実体確認 | **推奨** | [lab_lib.sh:128](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:128)。印と `assets/local` の存在確認なので、完了後に重みや対象 assets が欠損しても `ckpt=1` です。R1 の「必要な重み・対象 assets の確認」は未反映です。少なくとも実際に使う assets と主要重みの存在確認を追加すると堅くなります。 |
| マーカーの失敗系テスト | **推奨・不足** | `pod_ssh` の偽物は常に成功するため、テスト 3 はコマンド文字列の確認に留まります。ダウンロード部分だけをローカルの偽物で実行し、旧印あり→download 失敗で印なし、成功時のみ印ありを確認してください。 |
| `script` と EXIT／Ctrl-C | **据え置き・構造は妥当** | [lab_start.sh:67](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_start.sh:67)。端末経由では `exec script` より後の子だけがロックを取得します。通常の INT は `fail`→`exit`→EXIT cleanup に進みます。自分の pid のときだけ解除する方針も妥当ですが、上記の取得競合は防げません。 |
| 端末・割り込み等のテスト | **推奨・不足** | 現テストは標準入力を `/dev/null` にしており、`script` 経路と Ctrl-C は未検証です。偽物の API を使う PTY テストを追加してください。また、404＋一覧に対象あり、404＋不正一覧、DELETE 成功後も対象が残る場合も追加候補です。 |
| R1 の保留事項 | **据え置き** | 別プロセスの LISTEN、serve 起動途中の即再起動、全トンネル終了、HTTP 表示は今回の変更で解消していません。提示された運用判断に委ねる扱いでよいです。SSD 上の `add_trim_config.py` の冪等性は今回未確認です。 |

今回の差分から、新たな誤削除経路は確認していません。ただし、**ロックの追加だけでは R1 の同時起動問題は閉じていない**ため、ここを修正してから再判定するのが妥当です。
```

### review_request_20261031_lab_start_reattach_r3.md

```markdown
# コードレビュー依頼 R3：lab_start.sh のつなぎ直し・ロック（2026-10-31 依頼 44）

前回: docs/review_result_20261031_lab_start_reattach_codex_r2.md
対象: `git diff HEAD -- lab_start.sh lab_lib.sh lab_stop.sh` と新規の `test_lab_start.sh`（68 件 OK）。ほかのファイルの未コミット差分は対象外。

## R2 の指摘への対応
| 指摘 | 分類 | 反映 | 対応内容 / 据え置き理由 |
|---|---|---|---|
| ロック取得直後の競合 (pid 記入前) | 必須 | 反映 | 印 (.lab_start.lock) があれば、pid がなくても・読めなくても止まる。削除しない |
| stale 取り直しの競合 | 必須 | 反映 | 自動の取り直しをやめた。印があれば必ず止まり、pid が生きていなければ「ほかに動いていないことを確かめてから rm -r <印>」と出す。pid の書き込みに失敗したら止まる |
| ロックのテスト | 必須 | 反映 | テスト 24: 死んだ pid・pid なしで API を呼ばずに止まり印を残す、消せば進む。テスト 26: 同じ Log で 4 つ同時に打つ (一覧の答えを 2 秒遅らせる) → POST 1 回、終了コード 0 は 1 つ、3 つは止まる |
| モデルの実体確認・マーカー失敗系テスト・PTY テスト | 推奨 | 非反映 | エイイチに判断を回す |

## 見てほしい点
1. ロックで同じ Log の二重作成がふさがったか (mkdir の原子性だけに頼る形になったか)。印が残る場面 (kill -9・端末を閉じた) で困ることの大きさ
2. 新しく誤って消す道・二重に借りる道ができていないか

ファイル変更・実機操作・Pod の操作はしないでください。読み取りだけでお願いします。日本語で、表（項目 / 判定 / 確認結果・修正案）と、必須 / 推奨 / 据え置きの分類で返してください。
```

### review_result_20261031_lab_start_reattach_codex_r3.md

```markdown
# codex レビュー結果 R3：lab_start.sh のつなぎ直し・ロック（2026-10-31 依頼 44）

依頼文: docs/review_request_20261031_lab_start_reattach_r3.md（codex exec -s read-only）

判定は **R2の必須指摘は解消。今回の対象で新たな必須修正は確認しませんでした**。同じロックパスを使い、稼働中の印を外部から削除しない条件で、同じLogの同時起動を防ぐ構造になっています。

読み取りと4ファイルの `bash -n` は完了しました。書き込みを伴うテストは実行しておらず、申告の68件OKは未追試です。ファイル変更・実機・Pod操作はしていません。

| 項目 | 判定 | 確認結果・修正案 |
|---|---|---|
| ロック取得直後の競合 | **必須・対応済み** | [lab_start.sh:132](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_start.sh:132)。進める条件は `mkdir` 成功だけです。失敗時はpidの有無・可読性・生存にかかわらず終了し、印を削除しません。pid記入前に別起動が割り込んでも取得者は増えません。 |
| stale取り直しの競合 | **必須・対応済み** | 自動削除・再取得がなくなり、R2の「遅れた削除が別所有者の印を消す」経路は解消しています。pid書き込み失敗時もAPI処理前に終了します。 |
| 終了時の解除・誤削除 | **据え置き・妥当** | [lab_start.sh:120](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_start.sh:120)。取得済みかつ記録pidが自分と一致するときだけ解除します。取得失敗側は `LOCKED=0` のため、他者の印を削除しません。新たなPod誤削除経路も確認していません。 |
| ロックのテスト | **必須・対応済み** | [test_lab_start.sh:263](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/test_lab_start.sh:263) の4並列起動でPOST回数と各終了コードを検査しています。テスト24のpidなし状態も、新仕様の「所有者不明なら停止」を確認できています。実行結果は未追試です。 |
| kill -9・端末終了後の印 | **据え置き・運用上許容** | kill -9ではEXIT cleanupが動かず印が残ります。端末終了時の解除も保証できません。影響は**そのLogの再起動が手動解除まで止まること**です。Podは自動終了しないため、残存Podの料金も継続します。再起動後は既存Pod確認へ戻るので、印が残ること自体は二重作成につながりません。 |
| 手動解除の前提 | **据え置き・注意点** | [lab_start.sh:138](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_start.sh:138) の「ほかに動いていないことを確かめる」は必要です。pidなしは取得直後でも起こり、死んだpidでも子処理が残る可能性があります。生存中に印を消せば排他保証は失われます。現在の案内はこの前提を明示しています。 |
| stopped削除・二重借用防止 | **据え置き・対応維持** | EXITEDのみ削除へ進み、削除確認失敗ならarchive・POSTへ進みません。新規作成前の同名Pod確認、不明なAPI応答での停止も維持されています。ロックは同一パスを共有する起動間の排他で、別Macなどとの排他までは保証しません。 |
| ロック失敗系の追加テスト | **推奨** | pidが読めない場合・pid書き込み失敗・kill -9後の残存を追加すると、今回の方針を回帰テストで固定できます。4並列テストは2秒遅延に依存するため、同期点を置くとさらに安定します。 |
| R2の未反映推奨事項 | **推奨・継続** | モデル実体確認、download失敗時のマーカー検証、PTY経由の終了・割り込みテストは引き続き未対応です。今回のロック修正の合否とは分けて、エイイチ判断で据え置く扱いで問題ありません。 |
```


## c で直しても、次の回には反映されない

1回目と2回目のあと、c で直したことは次の回に反映されるのか、という疑問が出ました。答えは「反映されない」です。c の補正は、AI の中身（学習した重み）を変えません。できるのは2つです。

- その回の中だけ：直した姿勢から推論をやり直すので、その後のチャンクは直した位置を前提に動く
- 記録に残る：1刻みごとに `correction` として log.jsonl と録画に残り、次の学習の材料になる

実際、1回目も2回目も、つかむ前に j0 を +3° ほど直していて、1回目の補正を覚えていたわけではありませんでした。AI に反映させるには、直した記録を学習データにして、もう一度学習させる必要があります。そこで、成功した5回がそろった所で、学習データづくりを依頼45 として頼みました。


## 依頼45：補正つきの成功5本から学習データを作ると、動いている間の角度が抜けていた

### 依頼文 20261031_45_補正つきの成功5本から学習データを作る.md

```markdown
---
作業フォルダ: /Users/shimazueiichi/r2r2r-scripts
上限時間: 90
---
# 依頼：実機推論の補正つきの成功5本から、追加学習用のデータを作る（2026-10-31）

依頼 25（巻き戻しと補正・コミット 2c860e5）で作った `pi05/build_correction_episodes.py` を、はじめて本物の記録に使う。依頼 44 のあとに実行する。

## 元にする記録（2026-10-31・Log17、KIOXIA の r2r2r-data/runs/pi05_policy/）

成功（結果 y）の5本だけを使う。どれも補正（c）つき。

| run | log.jsonl の correction 行 |
|---|---|
| pi05_20261031_175527 | 15 |
| pi05_20261031_180435 | 20 |
| pi05_20261031_181946 | 19 |
| pi05_20261031_182545 | 52 |
| pi05_20261031_184016 | 19 |

失敗（n）の3本（pi05_20261031_180023・183219・183426）は入れない。

補正で直した関節は、ほぼ毎回、つかむ前に j0 を +2〜5°、つかんだあとに j2（白箱に当たらないように持ち上げる向き）。学習で効いてほしいのはこの2か所。

## やってほしいこと

1. `python3 pi05/build_correction_episodes.py --check-with <trim2 の raw_episodes>` で、上の5本から `datasets/mecharm_redblock_box_corr_v1` を作る（新しいフォルダ。元の runs/ と trim2 は読むだけで、上書き・移動・削除はしない。書く前に KIOXIA のマウントを確かめる）
2. お手本 trim2（19本）と形がそろっているかを確かめる（npz のキー・型、FPS 10、画像 384×216）
3. 依頼 25 の決めごとのまま、学習に使うのは model と correct のコマだけ、HOME へ戻る区間は入れない
4. R（爪を開いて閉じ直す）と補正の外の r（締め直し）の区間の扱いは、Claude Code が判断して報告に書く（依頼 25 の報告で聞かれていた点）
5. 学習に回すための準備まで行う。学習そのもの（Runpod で回すこと）はしない
   - trim2 の 19本と corr_v1 の 5本を合わせたデータセット（名前は Claude Code が決め、`mecharm_redblock_box_teach_v1_trim2` との関係が分かる名前にする）を、trim2 を学習したときと同じ形（LeRobot の形・repo_id の付け方）に変換する
   - openpi の学習設定を1つ足す（今の `pi05_mecharm_trim_lora` を元に、データだけ合わせたものに替える。続きから学習するか一から学習するかの案と、ステップ数の案を報告に書く。決めるのはエイイチ）
   - Pod に送る方法（Hugging Face の非公開リポジトリにデータを上げるか、Pod に直接送るか）の案を報告に書く。上げるのは決めてから

## 実機の記録で気になったこと（見て、必要なら報告に書く）

- 記録の実測角が 1 秒 10 回の予定に対し 4.66〜6.9 Hz、画像は 8.7 fps 前後だった。FPS 10 のお手本とそろえるとき、どう合わせたか（間引き・補間など）を報告に書く

## 確かめ

- 既存のテストが全部通ること
- 作ったデータの本数・コマ数・そのうち補正のコマ数を run ごとに出す
- データセットの中身のコードは「データと対のコード」として同じ場所に置く
- git は個別ファイルを指定して add する

## 報告に書くこと

- 作ったデータの場所と数（run ごと）
- 変えた・足したファイル、コミット、テストの件数
- 学習の設定の案（続きからか一からか・ステップ数・見込みの時間と費用。費用は円で）
- 決めてほしいこと
```

### Claude Code の報告（14分）

```markdown
# 結果：20261031_45_補正つきの成功5本から学習データを作る

- 状態：完了
- 始めた時刻：2026-10-31 18:50
- 終わった時刻：2026-10-31 19:05（14分）
- 作業フォルダ：/Users/shimazueiichi/r2r2r-scripts
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume f1ce9620-2b5e-4096-869a-50cfa6786542`

## Claude Code の報告

## やったこと
- KIOXIA のマウントを確かめてから、成功5本を `build_correction_episodes.py --check-with <trim2>` にかけ、`datasets/mecharm_redblock_box_corr_v1` を作りました。元の runs/ と trim2 は読んだだけで、変えていないことも確かめました。失敗の3本は入れていません。
- お手本 trim2 と形がそろっているかを確かめ、合っていました（npz のキー t・t_orig・state・actions、float32 の (N,7)、FPS 10、画像 384×216）。
- 途中で直したところが2つあります。
  - exFAT に macOS が作る `._000000.jpg` を画像として数えてしまい、枚数が倍になっていました。確かめ・変換・点検の3か所で数えないようにしました。
  - 作り直し（--force）のとき、フォルダを消す処理が途中で止まっていました。止まらないようにしました。
- trim2 の19本と corr_v1 の5本を合わせて `datasets/mecharm_redblock_box_teach_v1_trim2_corr_v1` を作りました。repo_id は `local/mecharm_redblock_box_teach_v1_trim2_corr_v1` です。Pod に送る tar（117 MB）も作りました。
- 学習の設定 `pi05_mecharm_trim_corr_lora` を足すスクリプトを作りました。中身は `pi05_mecharm_trim_lora` と同じで、データだけ替えています。ステップ数と「一からか続きからか」は既定値を置かず、実行のときに必ず指定する形にしました。
- LeRobot の形への変換は、まだしていません。Mac では動かないため、trim2 のときと同じく Pod で行います（`convert_to_lerobot.py --raw-dir … --repo-id local/mecharm_redblock_box_teach_v1_trim2_corr_v1`）。
- データを作ったコードは、それぞれのデータセットの `code/` に写しました。
- R と r の扱い：
  - R（爪を開いて閉じ直す）は、5本とも使われていませんでした。依頼 35 の決めのまま、学習から外します。
  - 補正の外の r（締め直し）は2本（181946・182545）にありました。どちらも確認の入力待ちの間で、その時間はもともと学習から外れています。爪の値も閉→閉で変わらないため、手を加えていません。
- FPS のそろえ方：
  - 角度は、実測を 10Hz の時刻に直線で補間しました。
  - 画像（約 8.7fps）は、各時刻にいちばん近い1枚を当てています。そのため同じ画像が2コマに入るところがあります。間引きはしていません。

## 結果
corr_v1 の数は次のとおりです（どれも巻き戻しは0回）。

| run | コマ | うち補正 | 補正の数 |
|---|---|---|---|
| 175527 | 259 | 0 | 2 |
| 180435 | 323 | 15 | 2 |
| 181946 | 269 | 4 | 2 |
| 182545 | 333 | 25 | 4 |
| 184016 | 285 | 6 | 2 |
| 合計 | 1,469 | 50 | 12 |

- 合わせたデータは 24本・4,186コマで、点検（check_dataset）は全項目 PASS でした。
- テストは全部通りました（新しく足した8件、既存の69件、lab_start の68項目）。
- コミットは e29754e です。

**このまま学習に回すのは勧めません。** 理由は次のとおりです。
- 実測角は、アームが動いている間ほとんど取れていません（1.5〜3.6秒ずつ抜けています）。動いた角度のうち抜けの間に動いた分は、モデルの区間で98〜99%、補正の区間で77〜99%です。
- そのため 10Hz の角度は、チャンクの前後をまっすぐ結んだ線になっています。ゆっくりした坂に見える部分は、止まっている区間を詰める処理で削られます。
- その結果、1コマで動く角度の最大は、trim2 の3.3°に対して14〜28°になりました（j2 の持ち上げの補正が1コマで −28° など）。
- いちばん効かせたかった補正のコマは50しか残っていません。175527 は0です。

学習設定の案（A40・1ステップ約6.6秒・1時間0.59ドル・1ドル150円で計算。Pod の準備30分ほどは別）：

| 案 | 学習時間 | 費用 |
|---|---|---|
| ① 一から 4,000ステップ（trim2 と同じ。データが54%増えたので、全体を回る回数は約47回から約31回に減る） | 約7.3時間 | 約650円 |
| ② 一から 6,200ステップ（全体を回る回数を trim2 とそろえる） | 約11.4時間 | 約1,000円 |
| ③ trim2 の 3999 から続けて 1,000〜1,500ステップ（`--init /workspace/ckpt/3999/params`） | 約1.8〜2.8時間 | 約160〜250円 |

- 続きから学習しても、学習率の予定は trim2 のまま（5,000ステップで下げきる形）です。そのため、終わったときの学習率は高めのまま残ります。
- 正規化の値は、合わせたデータで計算し直す必要があります（compute_norm_stats）。
- いまの勧めは③ですが、データを直してからの話です。

Pod に送る方法の案：
- 直接送る（scp）のを勧めます。117 MB なので1分ほどで、外に置かずに済みます。
- Hugging Face の非公開リポジトリは、何度も別の Pod で使うときに向いています。まだ上げていません。

## 変えたファイル
- `pi05/build_correction_episodes.py`（`._` を数えない・消す処理を直す・`code/` に写す）
- `pi05/convert_to_lerobot.py`
- `pi05/check_dataset.py`
- `pi05/merge_raw_episodes.py`（新）
- `pi05/openpi_addon/add_trim_corr_config.py`（新）
- `pi05/test_merge_and_config.py`（新）
- `logs/20261031_1905.md`

KIOXIA 側で新しく作ったもの：`datasets/mecharm_redblock_box_corr_v1/`、`datasets/mecharm_redblock_box_teach_v1_trim2_corr_v1/`（tar を含む）

## 決めてほしいこと
1. 動いている間の角度が抜けている問題をどう扱うか。
   - ア：このまま使う
   - イ：補正の1刻みごとに、ログにある「動く前と動いた後の実測角」から、1コマ3°以内の数コマに置き直す
   - ウ：実行した指令の道すじ（log の target・vias）と時刻から角度を作り直す
   - エ：これからの記録で、動いている間も角度を取るようにする
2. 学習を一からにするか、3999 から続けるか。ステップ数をいくつにするか（上の①〜③）。
3. Pod に送る方法（直接送るか、Hugging Face の非公開リポジトリに上げるか）。
4. 依頼文の「correction 行」の数は、log.jsonl で「correction」という文字を含む行の数と同じでした。補正の操作として記録された行は 13・18・16・47・17 です。どちらの数で記録するか。
```

報告のいちばん大事な所は、「このまま学習に回すのは勧めない」でした。1秒10コマの記録の関節の角度は、アームが動いている間ほとんど取れていませんでした。抜けた所をまっすぐ結んだため、1コマで動く角度の最大は、お手本の 3.3° に対して 14〜28° になっていました。覚えさせたかった補正のコマも、50 しか残っていませんでした。

この報告への答えは次のとおりです。

| 決めること | 答え |
|---|---|
| 角度の抜けの扱い | ウ（送った指令の道すじと時刻から作り直す）＋エ（これからの記録で、動いている間も角度を取る） |
| 学習 | 前のモデル（3999）から続けて 1,500 ステップ |
| Pod への送り方 | 直接送る（scp） |
| 補正の数 | 補正の操作として記録された行の数（13・18・16・47・17） |

### Claude Code の作業記録 logs/20261031_1905.md

```markdown
# 2026-10-31 19:05 依頼 45 補正つきの成功5本から学習データを作る

## やったこと
- `pi05/build_correction_episodes.py --check-with <trim2>` で Log17 の成功 5 本から `datasets/mecharm_redblock_box_corr_v1` を作った（KIOXIA のマウントを確かめてから。元の runs/ と trim2 は読むだけ）
- お手本 trim2 と同じ形か確かめた：npz のキー（t, t_orig, state, actions）・float32 (N,7)・FPS 10・画像 384×216 → OK
- trim2 19 本と corr_v1 5 本を合わせた `datasets/mecharm_redblock_box_teach_v1_trim2_corr_v1`（repo_id `local/mecharm_redblock_box_teach_v1_trim2_corr_v1`）と、Pod に送る tar（117 MB・._* なし）を作った
- openpi の学習設定 `pi05_mecharm_trim_corr_lora` を足すスクリプト `pi05/openpi_addon/add_trim_corr_config.py` を作った（--steps と --init は必ず指定する。既定値は置いていない）
- 直したところ：exFAT では macOS が `._000000.jpg` を作り、画像の枚数を倍に数えていた（check_compat・convert_to_lerobot・check_dataset）。また --force で作り直すときに rmtree が FileNotFoundError で止まっていた

## run ごとの数（corr_v1）
| run | コマ | model | correct（補正） | 補正の数 |
| --- | --- | --- | --- | --- |
| pi05_20261031_175527 | 259 | 259 | 0 | 2 |
| pi05_20261031_180435 | 323 | 308 | 15 | 2 |
| pi05_20261031_181946 | 269 | 265 | 4 | 2 |
| pi05_20261031_182545 | 333 | 308 | 25 | 4 |
| pi05_20261031_184016 | 285 | 279 | 6 | 2 |
| 合計 | 1469 | 1419 | 50 | 12 |

合わせたデータ：24 本 / 4186 コマ（trim2 2717 + corr_v1 1469）。check_dataset は全項目 PASS

## 気になったこと（大きい）
- 実測角は、アームが動いている間にほぼ取れていない（1.5〜3.6 秒の抜け）。動いた角度のうち、抜けの間に動いた分の割合は model 区間で 98〜99%、補正の区間で 77〜99%
- そのため 10Hz の state は「チャンクの前後をまっすぐ結んだ線」になる。ゆっくりな坂は止まっている区間を詰める処理（IDLE・mid_idle）で削られ、削ったつなぎ目が 1 コマの大きな段差になる
- 1 コマの最大の動き：trim2 は 3.3°。corr_v1 は 14〜28°（j2 の持ち上げの補正が 1 コマ −28° になるなど）
- 補正のコマは、補正の区間（5 本で合わせて約 530 秒。大半は次のキーを待っている時間）に対して 50 コマしか残らない

## 変えたファイル
- pi05/build_correction_episodes.py（._ を数えない・_rmtree・code/ に写す）
- pi05/convert_to_lerobot.py、pi05/check_dataset.py（._*.jpg を除く）
- pi05/merge_raw_episodes.py（新）
- pi05/openpi_addon/add_trim_corr_config.py（新）
- pi05/test_merge_and_config.py（新・8 件）

## テスト
- pi05/test_merge_and_config.py 8 件 OK / pi05/test_rewind_correct.py 69 件 OK / test_lab_start.sh OK 68・NG 0
```


## 依頼46：角度を指令の道すじから作り直すと、1コマの動きがお手本に近づいた

### 依頼文 20261031_46_補正データの角度を指令の道すじから作り直し動いている間も角度を記録する.md

```markdown
---
作業フォルダ: /Users/shimazueiichi/r2r2r-scripts
上限時間: 120
---
# 依頼：補正データの角度を指令の道すじから作り直す・これからの記録で動いている間も角度を取る（2026-10-31）

依頼 45（コミット e29754e）の続き。報告の「決めてほしいこと」への答え（エイイチ）：

1. 角度の抜け → **ウ＋エ**。今日の成功5本は撮り直さずに、ウで角度を作り直す。これからの記録はエで直す
2. 学習 → **trim2 の 3999 から続けて 1,500 ステップ**（学習は Claude が Runpod で回す。この依頼では回さない）
3. Pod への送り方 → **直接送る（scp）**。Hugging Face には上げない
4. 補正の数 → **補正の操作として記録された行の数（13・18・16・47・17）** で記録する

## A. ウ：今日の成功5本の角度を、実行した指令の道すじと時刻から作り直す

- 対象は依頼 45 と同じ5本（pi05_20261031_175527・180435・181946・182545・184016）
- log.jsonl にある、実行したチャンクの目標（target）と中継点（vias）、補正の1刻みの目標、それぞれを送った時刻・着いたと判定した時刻と、記録にある実測角を使って、10Hz の角度を作り直す
  - 実測角があるところは実測角を優先する。抜けている間だけ、送った目標へ向かう道すじで埋める
  - 埋め方（直線・速度20の動きに合わせた形など）は Claude Code が決め、理由を報告に書く
- 作り直したあと、1コマで動く角度の最大が trim2（3.3°）に近くなるかを run ごと・関節ごとに出す。補正のコマの数も出す（依頼 45 では50）
- 作り直した版は新しい名前（例 `mecharm_redblock_box_corr_v2`）で作る。corr_v1 は消さずに残す。合わせたデータセットも新しい名前で作り直し、Pod に送る tar も作る
- 正規化の値（compute_norm_stats）を、合わせたデータで計算し直す手順を、Pod で動かす形で用意する
- 学習設定 `pi05_mecharm_trim_corr_lora` が新しいデータを向くようにする。続きから（`--init /workspace/ckpt/3999/params`）・1,500 ステップで回すための、Pod で打つ手順を報告に書く（学習率の予定が trim2 のまま残る点への案があれば添える）

## B. エ：これからの記録で、動いている間も角度を取る

- 依頼 45 の報告：記録の実測角は、アームが動いている間ほとんど取れていない（1.5〜3.6秒ずつ抜けている。Log17 の記録で 4.66〜6.9 Hz）
- 原因を調べる（記録のスレッドと、送信・到着確認の待ちが、デーモンへの1本のつながりを取り合っている、などの見立てがあれば確かめる）
- 動いている間も、1秒10回に近い形で角度が残るように直す。送る指令・到着の判定・待ち時間の動きは変えない（変える必要があるなら、手を止めて報告の「決めてほしいこと」に書く）
- 関節を動かす指令の中身は変えないこと。apply_limits・check_send_safe はそのまま通す
- 直したあと、アームなしのテスト（偽のデーモン）で、動いている間の記録の間隔を出す
- 実機に流す前の確かめなので、実機では試さない。次の実機の最初に確かめる手順を報告に書く

## 確かめ

- 既存のテストが全部通ること
- codex のレビューを通す（docs/ に依頼文と結果を残す）。B は実機の記録まわりなので必ず通す
- 測定データ（runs/・datasets/ の既存のもの）は上書き・移動・削除しない。書く前に KIOXIA のマウントを確かめる
- git は個別ファイルを指定して add する

## 報告に書くこと

- 作り直したデータの場所と数（run ごと：コマ・補正のコマ・1コマの最大の動き）
- B の原因と直し方、テストでの記録の間隔
- 変えたファイル、コミット、テストの件数
- 学習を回すための Pod での手順（短く）
- 決めてほしいこと
```

### Claude Code の報告（24分）

```markdown
# 結果：20261031_46_補正データの角度を指令の道すじから作り直し動いている間も角度を記録する

- 状態：完了
- 始めた時刻：2026-10-31 19:23
- 終わった時刻：2026-10-31 19:46（24分）
- 作業フォルダ：/Users/shimazueiichi/r2r2r-scripts
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume 7df3ccdb-8b0e-4706-a5cf-e2d569708f0e`

## Claude Code の報告

A は終わり、5本の角度を作り直しました。B は記録の側で直せる分だけ直しました。動いている間の角度の抜けは、Pi のデーモンを変えないと消えません。どう直すかを決めてほしいことに書いています。

**やったこと**

A. 角度の作り直し（corr_v2）
- 記録の抜けは、送信1回分の時間（約1.6秒）とそろっていました。デーモンは関節の指令を送ったあと、角度を読み直してから返事をします。動いている間はこの読み直しが失敗してやり直すので、返事まで時間がかかります。腕はこの間に動き終わっています。
- 埋め方: 抜けの頭で動き出し、前後の実測角を結ぶまっすぐな道すじを30°/秒で進んで、着いたら止まる形にしました。実測角があるところは実測角のままです。
- 30°/秒にした理由: trim2 の元の記録（19本）では、速度20で動いている途中も0.32秒おきに角度が読めていました。そこで測った先頭の関節の速さは、中央値で29.8°/秒です。
- 送った目標は、抜けとの対応と、着いた位置とのずれを確かめるだけに使いました。線形で埋める元の設定にすると、corr_v1 と同じ1469コマ・補正50コマになることも確かめました。

B. 記録の抜け
- 原因: 上の読み直しの間は、デーモンへの1本のつながりがふさがります。デーモンは1件ずつしか処理しないので、記録スレッドも角度を読めません。
- 直し方: 送る指令・到着の判定・待ち時間は変えていません。apply_limits と check_send_safe もそのまま通ります。足したのは次の2つです。
  - 本体が読んだ角度（到着の確かめなど）も記録に残す。
  - 送信ごとに、送った時刻・目標・速度・返事までの長さを残す。
- 偽のデーモンでのテスト（中継点3つ）で、動いている間の記録の間隔の最大は次のとおりです。

| デーモンの読み直し | 動いている間の最大の間隔 | 動いている間に残った角度 |
| --- | --- | --- |
| 1.6秒（今の形）・直す前 | 1.68秒 | 0 |
| 1.6秒（今の形）・直した後 | 1.65秒 | 0 |
| 読み直しなし（参考） | 0.10秒 | 10 |

- codex のレビュー: 必須1件・推奨6件でした。必須（Pod で tar を前のフォルダに上書きして広げてしまう）と、推奨のうち4件を直しました。

**結果**

作り直したデータ: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_corr_v2

| run | コマ | 補正のコマ | 補正の行 | 1コマで動く最大 j0〜j5（°） |
| --- | --- | --- | --- | --- |
| 175527 | 192 | 39 | 13 | 3.31 / 3.75 / 3.00 / 1.31 / 3.00 / 0.77 |
| 180435 | 247 | 70 | 18 | 3.00 / 3.00 / 3.00 / 1.88 / 3.00 / 1.88 |
| 181946 | 210 | 54 | 16 | 3.00 / 4.40 / 2.96 / 0.70 / 3.00 / 0.73 |
| 182545 | 301 | 160 | 47 | 3.00 / 3.00 / 2.77 / 1.84 / 4.10 / 1.32 |
| 184016 | 209 | 61 | 17 | 3.00 / 3.00 / 3.00 / 0.78 / 3.00 / 0.56 |
| 合計 | 1159 | 384 | 111 | |

- 1コマで動く最大は、corr_v1 の14〜28°から3.0〜4.4°に下がり、trim2 の3.3°に近くなりました。3°を超えた4か所は、除いた区間のつなぎ目です。
- 補正のコマは50から384に増えました。
- 合わせたデータ: mecharm_redblock_box_teach_v1_trim2_corr_v2 は24本・3876コマです。Pod へ送る tar（109 MB）もあります。corr_v1 は残してあります。
- データの点検は FAIL なし、WARN が1つです。止まっているコマが全体の21.6%で、目安の20%を超えました（補正の5本はそれぞれ約50%、続けて止まるのは最長0.3秒）。中継点ごとに「速く動いて約1.6秒止まる」を繰り返す、実機の動きどおりの形です。

テスト: すべて通りました。
- test_rewind_correct 69件
- test_merge_and_config 9件
- test_gap_fill 7件（新）
- test_recorder_rpc 4件（新）
- test_lab_start.sh OK 68・NG 0

コミット: 1b47477

**学習を回すための Pod での手順**
1. Mac から tar と pi05/ を送る（scp）。
   - tar → /workspace/data/
   - pi05/ → /workspace/r2r2r/
2. 準備のスクリプトを流す。tar を広げ、学習設定を足し、変換し、正規化の値を計算し直します。
   `bash /workspace/r2r2r/pi05/openpi_addon/pod_prep_trim_corr.sh 1500 /workspace/ckpt/3999/params`
3. 学習を始める（スクリプトは流さずにコマンドを出すだけです）。
   `cd /workspace/openpi && XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_mecharm_trim_corr_lora --exp-name=trim_corr_v2 --overwrite`

**次の実機の最初に確かめる手順**
- 1チャンクを流したあと、記録の states.csv で次の2つを見ます。
  - 本体が読んだ角度の行と、送信の行が残っているか。
  - 送信の行に残る返事までの長さが約1.6秒で、角度の抜けとそろっているか。

**変えたファイル**
- pi05/build_correction_episodes.py
- pi05/policy_recorder.py
- pi05/run_policy_client.py（1行）
- pi05/openpi_addon/add_trim_corr_config.py（データを corr_v2 に向けた）
- 新しいファイル: pi05/openpi_addon/pod_prep_trim_corr.sh、pi05/test_gap_fill.py、pi05/test_recorder_rpc.py
- pi05/test_merge_and_config.py
- docs/ にレビューの依頼文と結果、logs/20261031_1945.md

**決めてほしいこと**
1. 動いている間の角度の抜けを、どう直すか。今のデーモンのままでは消えません。案は次のとおりです。
   - 案1: デーモンの送信の命令に、読み直しをしない指定を足す（何も指定しなければ今のまま）。あわせて、記録が角度を読むときは1回だけ試す形にする。
   - この場合、Pi のデーモンを入れ替える必要があります。また、送信の返事がすぐ返るので、到着を確かめ始める時刻や中継点の間隔が変わります。
   - 動いている途中で角度が読めるかどうかは、実機で測らないと分かりません。
2. 止まっているコマが約50%ある corr_v2 を、このまま学習に使うか。止まりをもっと詰めた版も作れます。
3. 学習率の予定。3999 から続けると予定が最初からやり直しになり、1,500 ステップで終わると学習率はまだ高いまま（最大の約8割）です。案は次のとおりです。
   - 立ち上がりを100ステップにする。
   - 下げきるまでを1,500ステップにする。
   - 最大の学習率を2.5e-5に下げる。
4. 正規化の値。合わせたデータで計算し直すと、3999 の学習のときと値が変わります。続きから学習するのはそれで良いか。代わりに trim2 の値をそのまま使うこともできます。
```

角度が抜けていた原因は、記録の側ではなく、アームの常駐プログラムにありました。常駐プログラムは、関節の指令を送ったあと、角度を読み直してから返事をします。動いている間はこの読み直しが失敗してやり直すので、返事まで約1.6秒かかります。その間、Mac とのつながりは1本しかないので、記録のほうも角度を読めません。

- ねらい：人が直した動きを、お手本と同じなめらかさの学習データにする
- 変わったこと：抜けた区間を、前後の実測角を結ぶ道すじで、1秒30°の速さ（お手本で測った動く速さの中央値 29.8°/秒）で埋めた
- 見込める効果：1コマで動く角度の最大は、14〜28° から 3.0〜4.4° に下がった（お手本は 3.3°）。補正のコマは 50 から 384 に増えた。いずれも記録から数えた値

常駐プログラムを直すと、到着を確かめ始める時刻や中継点の間隔も変わります。アームの動きに関わるので、学習のあとに回すことにしました。もう1つ、止まっているコマが全体の約50%あり、お手本の目安（20%）を大きく超えていました。中継点ごとに「速く動いて約1.6秒止まる」を繰り返す、実機の動きどおりの形です。止まりも覚えさせてしまわないよう、詰めた版を作ることにしました。

### Claude Code の作業記録 logs/20261031_1945.md

```markdown
# 2026-10-31 19:45 依頼 46 補正データの角度を作り直す・記録で daemon とのやりとりを残す

## A. corr_v2（今日の成功 5 本の角度の作り直し）
- 抜けの正体: 1 回の send_angles の間（daemon が送ったあとに角度を読み直す。約 1.6 秒・爪は約 3.6 秒）。補正の 1 刻みの時刻（log.jsonl の t）の直後に抜けが始まり、抜けの終わりの実測角は目標にほぼ着いている。0.1° しか動かない送信でも 1.6 秒の抜けになる
- 埋め方 `--gap-fill speed20`: 抜けの頭から、前後の実測角を結ぶ直線（関節空間・全関節が同時に着く）を、いちばん大きく動く関節が 30°/秒の速さで進み、着いたら止まる。30°/秒は trim2 の元の記録（run_pick_place 19 本。動いている途中も 0.32 秒おきに読めていた）の、動いている途中の先頭の関節の速さ（128 区間の中央値 29.8°/秒。10〜90% で 28.7〜31.1）
- `--gap-fill linear`（既定）は corr_v1 と同じ結果になることを確かめた（1469 コマ・補正 50）
- 送った目標（チャンクの sent_targets・補正の after）は、抜けと組にできるかと、着いた実測角との差を meta に出す確かめだけに使う

| run | コマ | 補正のコマ | 補正の行 | 1 コマの最大 j0〜j5（°） |
| --- | --- | --- | --- | --- |
| pi05_20261031_175527 | 192 | 39 | 13 | 3.31 3.75 3.00 1.31 3.00 0.77 |
| pi05_20261031_180435 | 247 | 70 | 18 | 3.00 3.00 3.00 1.88 3.00 1.88 |
| pi05_20261031_181946 | 210 | 54 | 16 | 3.00 4.40 2.96 0.70 3.00 0.73 |
| pi05_20261031_182545 | 301 | 160 | 47 | 3.00 3.00 2.77 1.84 4.10 1.32 |
| pi05_20261031_184016 | 209 | 61 | 17 | 3.00 3.00 3.00 0.78 3.00 0.56 |
| 合計 | 1159 | 384 | 111 | |

- 3° を超える 4 か所（3.31〜4.4°）は、除いた区間・詰めた区間のつなぎ目
- 合わせたデータ `mecharm_redblock_box_teach_v1_trim2_corr_v2`: 24 本 / 3876 コマ（trim2 2717 + corr_v2 1159）、tar 109 MB（._* なし）
- check_dataset: FAIL なし・WARN 1（停止の割合 21.6%。corr_v2 の 5 本はそれぞれ約 50% が停止。最長の連続は 0.3 秒）。中継点ごとに「速く動いて約 1.6 秒止まる」を繰り返す、実機の動きどおりの形

## B. 記録の角度の抜け
- 原因: daemon が send_angles のあとに角度を読み直す間（最大 12 回 × 約 0.31 秒）、返事をしない。daemon は 1 本のつながりを 1 件ずつ処理し、Mac 側も鍵で 1 回ずつ使うので、その間は記録スレッドも読めない。腕はその間に動き終わる
- 直したこと（送る指令・到着の判定・待ち時間は変えない）: 本体が読んだ角度も actual 行（note=main）に残す。send_angles ごとに、始めた時刻・目標・速度・やりとりの長さを残す（send_angles 行）
- 偽の daemon で、動いている間の最大の間隔: 読み直し 1.6 秒の daemon では 1.68 秒（前）→ 1.65 秒（後）で、動いている間に残る角度は 0 のまま。読み直しのない daemon（参考）なら 0.10 秒（残る角度 10）
- 抜けをなくすには daemon を変える必要がある → 決めてほしいこと

## レビュー
- codex: docs/review_result_20261031_gap_fill_recorder_rpc_codex.md（必須 1・推奨 6）。必須（Pod で tar を前のフォルダへ上書きして広げる）と、推奨 4 件（入れ子の ping を渡さない・書けた行だけ数える・あいまいな組を数えない・テストを強める）を直した。観察を同じスレッドで呼ぶ点（1 行書く分の遅れ）は説明を足すだけにした

## テスト
- test_rewind_correct 69 / test_merge_and_config 9 / test_gap_fill 7 / test_recorder_rpc 4 すべて OK、test_lab_start.sh OK 68・NG 0
```

### レビューの依頼文 review_request_20261031_gap_fill_recorder_rpc.md

```markdown
# コードレビュー依頼：補正データの角度の作り直し（A）と、記録で daemon とのやりとりを残す（B）（2026-10-31 依頼 46）

前提: 依頼 45（コミット e29754e）の続き。依頼 45 で作った corr_v1 は、実測角がアームの動いている間ほとんど取れておらず（1.5〜3.6 秒の抜け）、10Hz の state が抜けの前後をまっすぐ結ぶ線になっていた。
過去のレビュー: docs/review_result_20261031_confirm_keys_flush_codex.md ほか

対象（`git diff HEAD -- <下のファイル>` と新しいファイル。ほかのファイルの未コミット差分は対象外）:
- `pi05/build_correction_episodes.py`（A: fill_motion_gaps / logged_sends / match_gaps_to_sends / --gap-fill / meta の correction_rows・gap_fill・max_step_deg）
- `pi05/policy_recorder.py`（B: install_daemon_lock の観察口 / PolicyRecorder._on_rpc / angles_ok）
- `pi05/run_policy_client.py`（B: PolicyRecorder に angles_ok=wr._is_valid_angles を渡す 1 行だけ）
- `pi05/openpi_addon/add_trim_corr_config.py`（データ名を corr_v2 に。corr_v1 の設定が入っていたら止まる）
- `pi05/openpi_addon/pod_prep_trim_corr.sh`（新。Pod で tar を広げ・設定を足し・変換・正規化の値の計算）
- テスト: `pi05/test_gap_fill.py`（新 6 件）、`pi05/test_recorder_rpc.py`（新 3 件・偽の daemon）、`pi05/test_merge_and_config.py`（9 件）、`pi05/test_rewind_correct.py`（69 件・変更なし。全部通る）

## 調べて分かったこと（B の原因）
- Pi の daemon（mecharm_daemon.py.pi_deployed_20261019_LOG352）は send_angles を受けると、送ったあとに `read_angles_with_retry`（最大 12 回 × 約 0.31 秒）で角度を読み直してから返事をする。動いている間は読めずにやり直すので、Log17 では 1 回の送信が約 1.6 秒（爪は daemon の 2 秒の待ちを足して約 3.6 秒）
- daemon は 1 本のつながりを 1 件ずつ処理し（listen(1)・serve_client を順に）、Mac 側も install_daemon_lock の鍵で 1 回ずつ使う。だから送信の間は記録スレッドも読めない
- Log17 の 180435 では、補正の 1 刻みの時刻（log.jsonl の t）の直後から抜けが始まり、抜けの終わりの実測角は目標にほぼ着いている。中身がほとんど動かない送信（0.1° 程度）でも 1.6 秒の抜けになる
- trim2 の元の記録（run_pick_place 19 本。送信の wait=1.0）では 0.32 秒おきに動いている途中も読めており、先頭の関節の速さは 128 区間の中央値 29.8°/秒（10〜90% で 28.7〜31.1）

## 変えたこと
A. `--gap-fill speed20`：実測角の間が 0.25 秒より長い「抜け」[ta, tb] だけ、ta から前後の実測角を結ぶ直線（関節空間・全関節が同時に着く）を、いちばん大きく動く関節が 30°/秒になる速さで進み、着いたら tb まで止まる。着くのに抜けより長くかかる動きは抜けいっぱい（linear と同じ）。実測角があるところは今までどおり。`--gap-fill linear`（既定）は corr_v1 と同じ結果（5 本で 1469 コマ・補正 50 コマ。同じになることを確かめた）。log.jsonl の送った目標（チャンクの sent_targets・補正の after）は、抜けと組にできるかと、抜けの終わりの実測角との差を meta に出すだけで、埋め方には使わない
B. 記録の側で、送る指令・到着の判定・待ち時間を変えずにできることだけ：
  - install_daemon_lock の差し替えた関数が、やりとりが終わって鍵を外したあとに、足された観察の関数へ (送った dict, 返事, 始めた時刻, 終わった時刻, 例外) を渡す。返事・例外はそのまま返す／投げ直す。観察の関数の例外は捨てる
  - PolicyRecorder は start で観察を足し stop で外す。get_angles は記録スレッド以外（本体の到着の確かめ・送る直前の読み）の読めた角度を actual 行（note=main）に残す。send_angles は send_angles 行（ts=ts_send=始めた時刻・目標・速度・note=rpc_sec）、ping 以外のほかの cmd は rpc 行
  - 抜けそのものは daemon の読み直しが原因なので、記録の側だけでは消えない（偽の daemon で確かめた。下の表）。daemon を変えるかはエイイチが決める

偽の daemon（1 件ずつ処理・送ったあと 1.6 秒の読み直し・腕は 30°/秒で動く）で、中継点 3 つを run_policy_client と同じ順で送ったとき：

| daemon の送ったあとの読み直し | 本体の読みも残す | 動いている間の最大の間隔 | 動いている間に残った数 |
| --- | --- | --- | --- |
| 1.6 秒 | しない（前） | 1.74 秒 | 0 |
| 1.6 秒 | する | 1.65 秒 | 0 |
| 0 秒（参考） | しない | 0.18 秒 | 8 |
| 0 秒（参考） | する | 0.11 秒 | 11 |

## 見てほしい点
1. B の観察口が、本体の動き（daemon に届く指令・タイムアウト・例外の型・再接続の get_daemon_socket → 再帰の ping）を変えていないか。鍵の外で観察を呼ぶ順序・RLock の再入（ping）で問題がないか
2. _on_rpc がスレッドの間で安全か（csv_lock・stop のあとに呼ばれたとき・記録スレッドの読みを二重に残さない判定）。states.csv に新しい行（send_angles / rpc / actual note=main）が入っても build_demo_episodes.load_states・build_correction_episodes・ほかの読み手が壊れないか
3. A の埋め方：抜けの頭で動き出すと見なすこと・30°/秒・0.25 秒の閾値・直線で埋めることの妥当性。抜けが 2 つの送信をまたぐとき、送信でない抜け（爪・記録の止まり）での振る舞い
4. match_gaps_to_sends の数え方（補正は送る直前の t、チャンクは実行の窓の中を順に組にする）が誤って組にしていないか（確かめのためだけで、データには使わない）
5. add_trim_corr_config.py の corr_v1 → corr_v2 の切り替えと止まる条件、pod_prep_trim_corr.sh の手順（set -euo pipefail・何度流してもよいか・convert_to_lerobot の rmtree の範囲）
6. テストが A/B を十分に確かめているか

ファイル変更・実機操作はしないでください。読み取りだけでお願いします。日本語で、表（項目 / 判定 / 確認結果・修正案）と、必須 / 推奨 / 据え置きの分類で返してください。
```

### codex の答え review_result_20261031_gap_fill_recorder_rpc_codex.md

```markdown
# コードレビュー結果：補正データの角度の作り直し・記録で daemon とのやりとりを残す（codex・2026-10-31 / 依頼 46）

- 実施: codex exec -s read-only --skip-git-repo-check（読み取りのみ）
- 依頼文: docs/review_request_20261031_gap_fill_recorder_rpc.md

**必須1件、推奨6件です。** Bの通常経路で指令や例外の型を変える不具合は見つかりませんでした。Aは説明どおりの実装ですが、生成した角度は実測の復元ではなく、一定速度を仮定した推定値です。

| 項目 | 判定 | 確認結果・修正案 |
|---|---|---|
| Podのtar再展開 | **必須** | [pod_prep_trim_corr.sh:37](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/pi05/openpi_addon/pod_prep_trim_corr.sh:37)は既存ディレクトリへ上書き展開します。同じ名前でtarを作り直し、エピソードや末尾フレームを減らすと、旧ファイルが残ります。変換が旧エピソードを混入させたり、画像枚数不一致で停止したりします。**空の一時ディレクトリに展開・検証してから切り替える**方式にしてください。同一tarの再実行は可能ですが、更新tarへの追従は安全ではありません。 |
| 指令・返事・例外・timeout引数 | 据え置き | [policy_recorder.py:87](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/pi05/policy_recorder.py:87)は引数をそのまま`orig`へ渡し、返事をそのまま返し、元の例外を裸の`raise`で再送出します。timeout計算自体は変更していません。観察関数の通常の例外も本体へ漏れません。 |
| 再接続・再帰ping | **推奨** | RLockなので再帰pingで自己デッドロックしません。ただし内側pingの`_notify_rpc`実行時には、**外側RPCのロックは保持されたまま**です。「必ず鍵の外」は成立しません。現状の`_on_rpc`はpingを無視するので実害は見当たりませんが、外側RPC終了まで通知を保留するか、この例外を明記してください。 |
| 観察による本体の遅延 | **推奨** | 観察は同期呼び出しです。CSVロック待ち・書き込み・flushが終わるまでRPCが呼び出し元へ戻らず、到着確認の残り時間に影響し得ます。「timeout引数は変えない」は成立しますが、「処理時間への影響なし」は保証できません。必要なら観察結果をキューへ渡し、書き込みを別処理にしてください。 |
| CSVの排他・stop・二重記録 | 据え置き | 書き込みとcloseは`csv_lock`で排他され、close後は書き込みを避けます。通知のスナップショットにstop前の関数が残っても、`stop_flag`で通常は除外されます。記録スレッド自身のget_anglesはスレッドオブジェクトの同一性で除外され、既存`_angle_loop`だけが記録します。 |
| stopと集計値の競合 | **推奨** | `_on_rpc`がstop判定を通過したあとでstopすると、行が書かれなくても`n_actual_main`／`n_sends`だけ増える場合があります。カウンター更新も書き込み成功と同じロック内に置くと、metaとの整合性を保てます。 |
| states.csvの読み手 | 据え置き | `build_demo_episodes.load_states`は`actual`／`gripper_cmd`だけを読み、補正側のstage読み込みは`stage`行だけを読みます。追加の`send_angles`／`rpc`は無視され、`actual note=main`は実測として採用されます。両builderは実測時刻をソートするため、通知順によるCSVの時刻逆転にも対応しています。 |
| Aの速度・閾値・補間 | 据え置き・条件付き | [fill_motion_gaps:135](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/pi05/build_correction_episodes.py:135)は指定どおりです。linearは従来の`np.interp`、speed20は最大移動関節30°/秒で進んで保持し、時間不足時はlinearになります。30°/秒は提示された実測集計に根拠がありますが、全関節の同時到着・加減速・動き始めの時刻までは確認できません。0.25秒は抜けの検出基準として使えますが、送信由来であることの証明にはなりません。 |
| 複数送信・送信以外の抜け | **推奨** | Aは送信記録を参照せず、すべての長い抜けを同じ方法で埋めます。往復する2送信をまたぐと、端点が同じなら途中の動作が消えます。記録停止中の移動も抜けの頭へ前倒しされます。静止した爪操作は問題ありません。曖昧な抜けの一覧をmetaに残し、該当区間をlinearへ戻す／除外する判断材料にしてください。 |
| 抜けと送信の対応付け | **推奨** | [match_gaps_to_sends:192](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/pi05/build_correction_episodes.py:192)は誤対応し得ます。例として、抜け①が`[1.0, 2.6]`、抜け②が`[2.7, 4.3]`、補正時刻が`2.5`なら両方の候補になり、先の①を選びます。複数送信が1抜けに入っても最初の補正だけが対応済みになります。チャンクも個数一致だけでは対応の証明になりません。候補の重複・複数送信を`ambiguous`として分け、到着誤差の集計から外すことを勧めます。学習配列自体への影響はありません。 |
| corr_v2設定・変換先・処理順 | 据え置き | corr_v1の既定マーカーがあれば書き込み前に停止し、corr_v2の同じsteps/initでは再追加しません。手順は設定追加→変換→正規化で妥当です。`set -euo pipefail`もあります。変換の`rmtree`は、このスクリプトの固定repo_idでは`HF_LEROBOT_HOME/local/mecharm_redblock_box_teach_v1_trim2_corr_v2`に限定され、trim2やcorr_v1は対象外です。 |
| テストの十分性 | 推奨 | Aの基本形とBの正常通信は確認しています。ただしBの「二重記録なし」の件数比較は弱く、二重でも通る場合があります。再帰ping中のロック状態、timeout・同一例外の再送出、観察関数の失敗、stopとの競合、無効角度、複数送信をまたぐ抜け、曖昧な対応付け、更新tar再展開を追加すると、今回の懸念を直接検証できます。 |

`correction_rows`は全correction行、`correction_moves`は未送信を含むmove行を数えており、コメントと一致します。`max_step_deg`は**除外・圧縮後の隣接state間の差**なので、元の時間軸における0.1秒あたりの変化とは限りません。

ファイル変更・実機操作はしていません。テストは一時ファイルやソケットを作るため実行せず、読み取りで確認しました。申告の全テスト成功・5本のlinear一致・実測速度集計は再検証していません。
```


## 依頼47：つなぎ直しの表示を直し、途中の書き換えで壊れないようにした

### 依頼文 20261031_47_lab_startのモデルの確かめとつなぎ直しの決めごと.md

````markdown
---
作業フォルダ: /Users/shimazueiichi/r2r2r-scripts
上限時間: 60
---
# 依頼：lab_start.sh のつなぎ直しで、モデルの有無の確かめを直す・依頼 44 の決めごとを入れる（2026-10-31）

依頼 44（コミット 86ebc16）の続き。依頼 46 のあとに実行する。

## 実機で起きたこと（2026-10-31 18:50、エイイチが会話に貼った出力）

つなぎ直しは動いた（準備は16秒で、3b〜4 を飛ばしてトンネルへ進んだ）。ただ、モデルの有無の表示が実物と合っていない。サーバーはそのモデルを読み込んで動いていた。

```
=== 3. Pod の中を確かめる (つなぎ直し)
[POD   ] serve_policy.py のプロセス: ある  8000 番の LISTEN: ある
[POD   ] モデル (/workspace/ckpt/3999): ない  openpi (215abfb): ある  .venv: ある
[POD   ] サーバーは 8000 番で待っています. 3b〜4 を飛ばします
```

また、前の lab_start.sh が「もう1回やりますか?」で待っている間に依頼 44 で lab_start.sh が書き換わり、その回の終わりに `./lab_start.sh: line 305: syntax error near unexpected token ')'` が出た（bash がスクリプトを少しずつ読むため）。

## やってほしいこと

1. モデルの有無の確かめを、3c で実際に置いている場所と中身に合わせて直す（なぜ「ない」になったかを報告に書く）
2. 依頼 44 の「決めてほしいこと」への答え（エイイチ）を入れる
   - サーバーのプロセスはあるのに 8000 番で待っていないとき → 30秒待ち、それでも待っていなければ起動し直す
   - `.lab_start.lock` が残ったら止まる運用 → このままでよい。止まったときの表示に、消し方が出るようにする（出ていればそのまま）
   - codex がすすめた追加の確かめ（重みの確かめ・サーバーに実際に答えさせる・Ctrl-C のテスト）→ 今は入れない
3. 動いている途中で lab_start.sh が書き換わっても、その回が壊れないようにできるなら直す（例：中身全体を関数にして最後に呼ぶ、など）。やり方は Claude Code が決める

## 確かめ

- 既存のテストが全部通ること。1 と 2 のテストを足す
- codex のレビューを通す（docs/ に依頼文と結果を残す）
- git は個別ファイルを指定して add する

## 報告に書くこと

- 変えたファイル、コミット、テストの件数
- 次の実機で確かめる手順（短く）
````

### Claude Code の報告（36分）

```markdown
# 結果：20261031_47_lab_startのモデルの確かめとつなぎ直しの決めごと

- 状態：完了
- 始めた時刻：2026-10-31 19:46
- 終わった時刻：2026-10-31 20:22（36分）
- 作業フォルダ：/Users/shimazueiichi/r2r2r-scripts
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume d0336981-9c9b-4865-b314-a21f568b9137`
- 止められた操作：1件（いちばん下に一覧）

## Claude Code の報告

**やったこと**

1. **「モデル: ない」と出たわけと直し方**
   - わけ：Log17 の Pod は 18:15 に、依頼 44 より前の lab_start.sh で作ったものでした。その頃の 3c は「取り終えた印」（`/workspace/ckpt/3999/.lab_download_ok`）を付けていませんでした。依頼 44 の確かめは「印があること＋assets/local があること」だったので、モデルの中身（6.0G・33 ファイル）がそろっていても「ない」と出ました。
   - 直し方：3c が置く場所（`/workspace/ckpt/3999`）の中身で見るようにしました。
     - 見るファイルは `_CHECKPOINT_METADATA`、`params/` の中の 3 つ（`_METADATA`・`manifest.ocdbt`・`ocdbt.process_0/manifest.ocdbt`）、3f が写す `norm_stats.json` の 5 つです。
     - 取りかけのファイル（`*.incomplete`）が残っているときと、それを探せないときは「ない」にします。
     - 名前は Hugging Face のモデルの一覧（33 ファイル）を見て確かめました。
   - 表示は次の 3 通りです。
     - 中身がない →「ない」
     - 中身も印もある →「ある」
     - 中身はあるが印がない →「ある (取り終えた印はない…)」
   - サーバーが落ちていて準備をやり直すときは、印がなければ hf download をもう一度流します。取り終えたファイルは取り直さないので、すぐ終わります。

2. **依頼 44 の決めごと**
   - プロセスはあるのに 8000 番で待っていないとき：5 秒おきに確かめ直し、30 秒まで待ちます。待ち始めれば準備を飛ばします。待ち始めないまま 30 秒たつか、その間にプロセスが終われば、起動し直します。
   - 起動し直すときは、前のサーバーを別の ssh で止めてから起動します。止められなければ、そこで止まります。
   - `.lab_start.lock` が残ったとき：止まったときの表示に `rm -r <印>` の消し方がもう出ていたので、そのままにしました。
   - codex がすすめた 3 つ（重みの確かめ・サーバーに実際に答えさせる・Ctrl-C のテスト）は入れていません。

3. **動いている途中の書き換えへの対策**：中身を全部 `main()` という関数に入れ、最後の 1 行で呼ぶ形にしました。bash は関数を動かす前に最後まで読み込むので、途中でファイルが書き換わっても、その回は壊れません。

**結果**
- テストは 68 件から 93 件になり、全部通りました。
- 書き換えのテストは、直す前の lab_start.sh では実機と同じ `syntax error near unexpected token ')'` で落ちることも確かめました。
- codex のレビューは 3 回です。
  - 1 回目：必須 1 件。起動の ssh の中で前のサーバーを止める命令が、その ssh 自身も止めてしまう恐れ。止める ssh を分けて直しました。
  - 2 回目：必須 1 件（バックスラッシュが 2 つある）。ファイルでは 1 つで、codex の読み違いでした。
  - 3 回目：codex が 2 回目の指摘を取り下げ、必須はなくなりました。
- 前のサーバーを止める処理は Linux では試せていません（この Mac で docker が動いていないため）。同じ探し方は 18:50 の実機で「プロセス: ある」と正しく出ています。

**変えたファイル**（コミット 48d51b1）
- lab_start.sh
- lab_lib.sh
- test_lab_start.sh
- logs/20261031_2022.md
- docs/ の review_request_20261031_lab_start_model_check（1〜3 回目）と review_result_…_codex（1〜3 回目）の 6 つ

**次の実機で確かめる手順**
1. `./lab_start.sh --log Log17` を打ち、モデルの行が「ある」、または「ある (取り終えた印はない…)」と出るのを見る。
2. 「もう1回やりますか?」で待っている間に別の画面で lab_start.sh を書き換えても、その回が最後まで終わるのを見る。
3. （できれば）Pod の中で 8000 番が開く前につなぎ直したとき、「30 秒まで待ちます」と出て、待つか起動し直すかのどちらかになるのを見る。

**決めてほしいこと**
なし

## 止められた操作

- {"tool_name": "Bash", "tool_use_id": "toolu_0165KFCV3GwL5KNXK3tvfBax", "tool_input": {"command": "cd /Users/shimazueiichi/r2r2r-scripts; D=$(mktemp -d); cp test_lab_start.sh lab_lib.sh lab_stop.sh \"$D/\"; git show HEAD:lab_start.sh > \"$D/lab_start.sh\"; chmod +x \"$D\"/*.sh; (cd \"$D\" && ./test_lab_start.sh 2>&1 | grep -A3 \"== 30\"); rm -rf \"$D\"", "timeout": 600000}}
```

### Claude Code の作業記録 logs/20261031_2022.md

```markdown
# 2026-10-31 依頼 47: lab_start.sh のつなぎ直しで、モデルの有無の確かめを直す・依頼 44 の決めごとを入れる

## なぜ「モデル: ない」と出たか
Log17 の Pod (18:15 に作成) は依頼 44 (18:48 コミット) より前の lab_start.sh で作ったもので、3c が「取り終えた印」/workspace/ckpt/3999/.lab_download_ok を付けていなかった。依頼 44 の確かめは「印 + assets/local」だったので、中身 (6.0G・33 ファイル) があっても「ない」になった。

## やったこと
- lab_lib.sh: モデルの確かめを 3c の置き場所と中身で見る (_CHECKPOINT_METADATA・params/_METADATA・params/manifest.ocdbt・params/ocdbt.process_0/manifest.ocdbt・3f が写す norm_stats.json があり、.cache/huggingface に *.incomplete がない・探せないときは「ない」)。印は別の項目 (mark) にした。名前は Hugging Face の repo の一覧 (33 ファイル) で確かめた
- lab_lib.sh: lab_serve_stop_cmd (serve_policy.py を止め、30 秒まで終わるのを待ち、残れば -9)
- lab_start.sh
  - 表示: 「ない」/「ある」/「ある (取り終えた印 .lab_download_ok はない. 依頼 44 より前の lab_start.sh で取ったものなど)」
  - サーバーが落ちていたら、印がなければ 3b・3c を流し直す (hf download は取り終えたファイルを取り直さない)
  - プロセスはあるのに 8000 番で待っていない → 5 秒おきに 30 秒まで確かめ直し、待ち始めれば飛ばす。待たない・プロセスが終わった → 起動し直す (エイイチの決め)
  - 起動の前に前の serve_policy.py を別の ssh で止める (止められなければ止まる)
  - 中身全体を main() に入れ、最後の1行で呼ぶ (動いている途中の書き換えで壊れない)
  - .lab_start.lock が残ったときの消し方の表示は依頼 44 のまま (エイイチの決め)
- test_lab_start.sh: 68 → 93 件。書き換えのテスト (30) は、直す前の lab_start.sh では実機と同じ「syntax error near unexpected token ')'」で NG になるのを確かめた

## レビュー
codex R1 (必須: 起動の ssh の pkill が自分に当たる → 止める ssh を分けた) → R2 (必須: バックスラッシュが 2 つ → 誤読。R3 で撤回) → R3 必須なし。docs/review_*_20261031_lab_start_model_check*

## 入れていないもの (エイイチの決め: 今は入れない)
重みの確かめ・サーバーに実際に答えさせる確かめ・Ctrl-C のテスト。Linux の pgrep での止める処理の確かめ (docker が動いていない。同じパターンは実機の確かめで当たっている)
```

### review_request_20261031_lab_start_model_check.md

```markdown
# コードレビュー依頼：lab_start.sh のつなぎ直しでモデルの有無の確かめを直す・依頼 44 の決めごとを入れる（2026-10-31 依頼 47）

前提: 依頼 44（コミット 86ebc16）の続き。前回のレビュー: docs/review_result_20261031_lab_start_reattach_codex_r3.md

対象: `git diff HEAD -- lab_start.sh lab_lib.sh test_lab_start.sh`（ほかのファイルの未コミット差分は対象外）。テストは `./test_lab_start.sh` で 88 件 OK。

## 実機で起きたこと（2026-10-31 18:50、Log17）
1. つなぎ直しで「モデル (/workspace/ckpt/3999): ない」と出たが、サーバーはそのモデルを読み込んで動いていた。
   わけ: その Pod は 18:15 に依頼 44 より前の lab_start.sh で作ったもので、3c が「取り終えた印」`.lab_download_ok` を付けていなかった（印は依頼 44 で足した）。前の確かめは「印 + assets/local」だったので、中身があっても印がなければ「ない」になった。
2. 前の lab_start.sh が「もう1回やりますか?」で待つ間に lab_start.sh が書き換わり、その回の終わりに `line 305: syntax error near unexpected token ')'` が出た（bash がスクリプトを少しずつ読むため）。

## 変えたこと
- lab_lib.sh `lab_probe_cmd COMMIT CKPT NORM_STATS` / `lab_pod_probe`
  - ckpt = 3c の hf download が置く中身で見る: `_CHECKPOINT_METADATA`・`params/_METADATA`・`params/manifest.ocdbt`・`params/ocdbt.process_0/manifest.ocdbt`・3f が写す `assets/local/mecharm_redblock_box_teach_v1_trim2/norm_stats.json` があり、`.cache/huggingface` に `*.incomplete` がない（Hugging Face の repo の一覧 33 ファイルで確かめた名前）
  - mark = `.lab_download_ok` があるか（別の項目にした）。PROBE の行は `serve= listen= ckpt= mark= openpi= venv=`
- lab_start.sh
  - 3 の表示: ckpt=0 →「ない」、ckpt=1 mark=1 →「ある」、ckpt=1 mark=0 →「ある (取り終えた印 .lab_download_ok はない. 依頼 44 より前の lab_start.sh で取ったものなど)」
  - サーバーが落ちていてやり直すとき、3b・3c を飛ばすのは ckpt=1 かつ mark=1 のときだけ（印がなければ hf download を流し直して印を付ける。取り終えたファイルは取り直さない）
  - エイイチの決め: serve=1・listen=0 のとき、30 秒（5 秒おき）確かめ直して待つ。待ち始めれば 3b〜4 を飛ばす。待たないまま 30 秒、またはその間にプロセスが終わったら起動し直す
  - 4 の起動: tmux kill-session のあと `pkill -f '[s]cripts/serve_policy\.py'`、30 秒まで終わるのを待ち、残れば `pkill -9`、それから起動（起動し直すときに前のプロセスが 8000 番・GPU を持ったままにならないように）
  - 書き換え対策: 中身全体を `main() { … }` に入れ、最後の1行 `main "$@"; exit $?` で呼ぶ（字下げは変えていない）。--help の行の範囲を 2,32 に
  - `.lab_start.lock` が残ったときの表示（消し方 `rm -r <印>`）は依頼 44 のまま（エイイチの決め: このままでよい）
- test_lab_start.sh: 待つ時間をテストでは 2 秒・1 秒おきに置き換える。4（待っても待たない→起動し直す・pkill を流す）、4b（待つ間に待ち始めた→起動し直さない）、4c（待つ間にプロセスが終わった→1回でやめて起動し直す）、4d（待っていれば確かめ直さない）、27（印なし・中身あり・サーバー動作中→「ある (…印はない」で飛ばす。18:50 の実機の形）、28（印なし・サーバー落ち→hf download を流して印を付ける）、29（印あり→飛ばす）、30（推論のクライアントの偽物が動いている lab_start.sh を同じファイルに上書き→最後まで流れ syntax error が出ない。HEAD の lab_start.sh では実機と同じ syntax error で NG になるのを確かめた）、15（実際のフォルダで ckpt/mark の組み合わせ・*.incomplete・5 つの各ファイルがない形）

## 入れていないもの（エイイチの決め: 今は入れない）
重みの確かめ（ハッシュ等）・サーバーに実際に答えさせる確かめ・Ctrl-C のテスト

## 見てほしい点
1. 中身での確かめ（5 つのファイル + *.incomplete なし）が、3c の置き場所・中身と合っているか。取りかけの Pod を「ある」としてしまう道が増えていないか（印なしなら hf download を流し直す形で足りているか）
2. 30 秒待つ処理と、起動し直すときの pkill の書き方（自分の bash -c に当たらないか、set -o pipefail と pod_ssh の終了コードで変に止まらないか）
3. main で包む形で、書き換えに対して十分か。exec script・trap・exit・"$0" の扱いで振る舞いが変わっていないか
4. 新しく誤って消す道・二重に借りる道ができていないか

ファイル変更・実機操作・Pod の操作はしないでください。読み取りだけでお願いします。日本語で、表（項目 / 判定 / 確認結果・修正案）と、必須 / 推奨 / 据え置きの分類で返してください。
```

### review_result_20261031_lab_start_model_check_codex.md

```markdown
# codex レビュー結果 R1：lab_start.sh のモデルの確かめ・依頼 44 の決めごと（2026-10-31 依頼 47）

依頼文: docs/review_request_20261031_lab_start_model_check.md（codex exec -s read-only）

**判定：必須修正1件です。現在の起動コマンドは、`pkill` が実行元のシェル自身を終了させる可能性があります。**

対象3ファイルの `git diff HEAD` と前回レビューを確認し、各ファイルの `bash -n` は成功しました。読み取りのみとし、書き込みを伴うテストは実行していません。88件OKは申告結果として扱っています。

| 項目 | 判定 | 確認結果・修正案 |
|---|---|---|
| 起動時の `pkill` が自分に一致する | **必須・P1** | [lab_start.sh:355](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_start.sh:355)。同じSSHコマンドの後半に `uv run scripts/serve_policy.py …` があるため、リモートの `bash -c` の引数全体が `[s]cripts/serve_policy\.py` に一致します。最初の `pkill` で起動処理自身が終了し得ます。新規Podの初回起動も影響します。**停止・終了待ちのSSH呼び出しと、tmux起動のSSH呼び出しを分けてください。** |
| 停止処理の回帰テスト | **推奨** | 現在のテスト4はコマンド文字列に `pkill` が含まれることだけを確認します。停止用コマンド全体が検索パターンに一致しないことを、プロセスを終了させない検査で追加すると、今回の自己一致を検出できます。 |
| 30秒待機 | **据え置き・妥当** | [lab_start.sh:257](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_start.sh:257)。5秒おきに最大6回確認し、LISTEN開始またはプロセス終了で抜けます。264行の `A \|\| B && break` はBashでは左結合なので意図どおりです。SSH・probe失敗時は停止し、勝手に再起動へ進みません。30秒はsleepの合計で、SSH所要時間は別途加わります。 |
| `pipefail`・終了コード | **据え置き・概ね妥当** | ローカルは `set -e` を使っていないため、通常の「対象なし」による `pkill` の終了コード1だけでは途中停止しません。リモートの最終コマンドとSSHの失敗は `pod_ssh` のパイプライン経由で検出します。ただし、上記の自己終了はSSH失敗となり、起動前に止まります。 |
| モデルの確認場所 | **据え置き・整合** | [lab_lib.sh:132](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:132)。確認対象は3cの `--local-dir /workspace/ckpt/3999` 配下です。`norm_stats.json` の場所も3fのコピー元と一致します。3fはチェックポイントへ書く処理ではなく、そこからopenpi側へコピーします。HFの33ファイル一覧そのものは今回独立確認していません。 |
| 取りかけのモデルの扱い | **据え置き・今回の方針に適合** | 5ファイルだけでは、残りのデータファイルの欠落までは判定できません。ただし印なし・サーバー停止なら必ず `hf download` を再実行するため、この制限によって準備を飛ばす経路は増えていません。印ありの場合の後発的な欠落・破損検出は今回の対象外です。 |
| `.incomplete` の確認 | **推奨** | `find` のエラーを捨てるため、キャッシュ不存在だけでなく読み取り失敗も「取りかけなし」になります。将来強めるなら「ディレクトリ不存在は許容、存在するが探索失敗は確認不能」を区別してください。今回の必須修正には含めません。 |
| `main` による上書き対策 | **据え置き・妥当** | [lab_start.sh:446](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_start.sh:446)。関数全体と最後の `main "$@"; exit $?` が実行前に解析されるため、実行中の上書きによる続きを読み違える問題に対応しています。解析完了前の書き換えまでは保証しません。 |
| `exec`・trap・`exit`・`"$0"` | **据え置き・変更による問題なし** | 関数化しても `"$0"` とPIDは変わらず、引数は `main "$@"` へ渡ります。`exec script` は従来どおりプロセスを置換し、`exit` はスクリプト全体を終了します。cleanupで参照する変数を `local` にしていないため、正常終了後のEXIT trapからも参照できます。 |
| 誤削除・二重借用 | **据え置き・新たな経路なし** | Pod削除・作成条件、ロック取得・解除条件は維持されています。今回の `pkill` は同じPod内の一致するプロセス全体を対象とするため、そのPod内の別の `serve_policy.py` も終了対象です。 |
| 合意済みの対象外項目 | **据え置き** | ハッシュ検証・サーバーへの実問い合わせ・Ctrl-Cテスト・残存ロックの案内は、今回の必須修正に含めません。 |

**停止処理と起動処理のSSH呼び出しを分離する修正が、レビュー通過の条件です。**
```

### review_request_20261031_lab_start_model_check_r2.md

```markdown
# コードレビュー依頼 R2：lab_start.sh のモデルの確かめ・30 秒待ち・書き換え対策（2026-10-31 依頼 47）

前回: docs/review_result_20261031_lab_start_model_check_codex.md
対象: `git diff HEAD -- lab_start.sh lab_lib.sh test_lab_start.sh`（ほかの未コミット差分は対象外）。`./test_lab_start.sh` で 92 件 OK。

## R1 の指摘への対応
| 指摘 | 分類 | 反映 | 対応内容 / 据え置き理由 |
|---|---|---|---|
| 起動の ssh の pkill が自分の bash -c に当たる | 必須 | 反映 | 止める処理を lab_lib.sh の `lab_serve_stop_cmd`（`[s]` の形でしか書かない）にし、起動 (tmux new) とは別の pod_ssh で流す。止められなければ fail。最後に `! pgrep` で終わったことを確かめる |
| 止める処理の回帰テスト | 推奨 | 反映 | テスト 15: 止めるコマンドに `scripts/serve_policy` がそのまま書かれていない。偽の serve_policy.py を動かして止めるコマンドを `bash -c` で流し、偽物は終わり、自分は最後まで流れて 0 を返す。テスト 4: 止めるコマンドが起動より先に流れる |
| `.incomplete` を探せないときに「なし」になる | 推奨 | 反映 | `.cache/huggingface` がなければ取りかけなし、あれば `find … -print -quit` の終了コードを見て、探せなければ ckpt=0。テスト 15 に「読めない → 0」「.cache がない → 1」を足した |

## 見てほしい点
1. R1 の必須が解消したか。分けたことで起動の流れ (新しい Pod の初回起動を含む) に問題が出ていないか
2. 新しく誤って消す道・二重に借りる道ができていないか

ファイル変更・実機操作・Pod の操作はしないでください。読み取りだけでお願いします。日本語で、表（項目 / 判定 / 確認結果・修正案）と、必須 / 推奨 / 据え置きの分類で返してください。
```

### review_result_20261031_lab_start_model_check_codex_r2.md

```markdown
# codex レビュー結果 R2：lab_start.sh のモデルの確かめ・30 秒待ち・書き換え対策（2026-10-31 依頼 47）

依頼文: docs/review_request_20261031_lab_start_model_check_r2.md（codex exec -s read-only）

**判定：必須修正1件です。R1の自己終了は解消していますが、停止確認の正規表現に問題が残っています。**

対象3ファイルの差分と前回レビューを確認しました。各ファイルの `bash -n` は成功。テスト本体は書き込み・プロセス停止を伴うため実行せず、92件OKは申告結果として扱っています。ファイル変更・実機・Pod操作は行っていません。

| 項目 | 判定 | 確認結果・修正案 |
|---|---|---|
| 停止パターンのエスケープ | **必須・P1** | [lab_lib.sh:155](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:155)〜157のパターンを修正してください。`<<'EOF'` はバックスラッシュをそのまま残すため、生成されるパターンは `'[s]cripts/serve_policy\\.py'` です。Ubuntu側の正規表現では通常の `scripts/serve_policy.py` に一致せず、停止対象を見逃します。**3か所とも `'[s]cripts/serve_policy\.py'` に変更**してください。tmux外に残ったプロセスを止められず、最後の `! pgrep` も成功して次の起動へ進む経路があります。 |
| R1の自己終了 | **据え置き・解消** | [lab_start.sh:355](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_start.sh:355)。停止と起動が別のSSHになり、停止コマンド内にも通常表記のパスがありません。停止側シェル自身に一致する原因は除かれています。 |
| 新規Podの初回起動 | **据え置き・問題なし** | tmux導入後に停止処理へ進みます。対象プロセスがない場合、途中の `pkill` が1でも継続し、最後の `! pgrep` が0となるため起動できます。 |
| 停止処理の回帰テスト | **推奨** | [test_lab_start.sh:348](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/test_lab_start.sh:348)。偽プロセスを使う検証は有効です。ただし実行先はUbuntuなので、Linuxの `pgrep/pkill` でも確認してください。Macでの92件OKだけでは、今回の正規表現の問題を除外できません。停止失敗時に起動へ進まないモックテストも追加すると確実です。 |
| 30秒待機 | **据え置き・妥当** | 5秒ごとに再確認し、LISTEN開始またはプロセス終了で抜けます。確認失敗時は `fail` で停止します。30秒はsleepの合計で、SSH所要時間は別途加わります。 |
| `.incomplete` の探索失敗 | **据え置き・改善済み** | キャッシュディレクトリが存在する場合、`find` 成功と出力なしの両方を要求しています。探索失敗を取りかけなしと扱っていたR1の指摘に対応しています。 |
| モデル確認・再取得 | **据え置き・妥当** | 中身の確認と完了印を分離し、印なし・サーバー停止時は再取得します。全データの欠落・破損検証までは行わない、という従来の範囲も維持されています。 |
| 実行中の書き換え対策 | **据え置き・妥当** | `main` 全体と末尾の呼び出し・`exit` を先に解析する構成です。関数化による引数、PID、EXIT trapの参照変数への問題は見当たりません。 |
| 誤削除・二重借用 | **据え置き・新たな経路なし** | Pod削除・作成条件とロック処理は変更されていません。停止確認失敗時もPodを残して終了する構成です。ただし上記必須事項により、**同じPod内で旧サーバーを残したまま新サーバーを起動する可能性**があります。 |

レビュー通過の条件は、停止用パターン3か所のバックスラッシュ修正です。
```

### review_request_20261031_lab_start_model_check_r3.md

```markdown
# コードレビュー依頼 R3：lab_start.sh のモデルの確かめ・30 秒待ち・書き換え対策（2026-10-31 依頼 47）

前回: docs/review_result_20261031_lab_start_model_check_codex_r2.md
対象: `git diff HEAD -- lab_start.sh lab_lib.sh test_lab_start.sh`（ほかの未コミット差分は対象外）。`./test_lab_start.sh` で 93 件 OK。

## R2 の指摘への対応
| 指摘 | 分類 | 反映 | 対応内容 / 据え置き理由 |
|---|---|---|---|
| 停止パターンのバックスラッシュが 2 つ | 必須 | 非反映 (誤読と判断) | lab_lib.sh 154〜156 行のファイルの中身は `'[s]cripts/serve_policy\.py'`（バックスラッシュ 1 つ）。`bash -c '. ./lab_lib.sh; lab_serve_stop_cmd' \| od -c` でも `y \ . p y` の 1 つだけ。`<<'EOF'` はそのまま出すので、生成されるパターンも 1 つ。`sed -n 150,160p lab_lib.sh` で確かめてほしい。同じパターンは lab_probe_cmd の serve= でも使っていて、2026-10-31 18:50 の実機 (Ubuntu の Pod) で「serve_policy.py のプロセス: ある」と正しく出ている |
| Linux の pgrep/pkill で確かめる | 推奨 | 一部 | この Mac では docker が動いておらず Linux で流せなかった。上の実機の結果 (同じパターンで pgrep が当たった) を根拠とする。pkill は pgrep と同じパターンの読み方 |
| 止められないときに起動へ進まないテスト | 推奨 | 反映 | テスト 4e: 止めるコマンドが失敗 → 終了コード 1・tmux new を流さない・「前の serve_policy.py を止められない」 |

## 見てほしい点
1. 上の誤読の判断が正しいか（ファイルを実際に読んで）。R1・R2 の必須が残っていないか
2. 新しく誤って消す道・二重に借りる道ができていないか

ファイル変更・実機操作・Pod の操作はしないでください。読み取りだけでお願いします。日本語で、表（項目 / 判定 / 確認結果・修正案）と、必須 / 推奨 / 据え置きの分類で返してください。
```

### review_result_20261031_lab_start_model_check_codex_r3.md

```markdown
# codex レビュー結果 R3：lab_start.sh のモデルの確かめ・30 秒待ち・書き換え対策（2026-10-31 依頼 47）

依頼文: docs/review_request_20261031_lab_start_model_check_r3.md（codex exec -s read-only）

**必須修正なしと判定します。R2のバックスラッシュの指摘は誤読でした。失礼しました。ユーザー側の非反映判断が正しいです。**

対象3ファイルの `git diff HEAD` とR1・R2レビューを確認しました。

| 項目 | 判定 | 確認結果・修正案 |
|---|---|---|
| 停止パターンのバックスラッシュ | **据え置き・修正不要** | [lab_lib.sh:155](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:155)〜157を実際に確認しました。各パターンのバックスラッシュは**1文字**です。`<<'EOF'` がそのまま出力するため、生成パターンも正しい `'[s]cripts/serve_policy\.py'` です。R2の必須指摘を撤回します。 |
| R1の自己終了 | **据え置き・解消済み** | [lab_start.sh:355](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_start.sh:355)で停止と起動が別SSHになっています。停止コマンド内のパスは `[s]` 表記だけで、起動側の通常表記による自己一致は解消しています。 |
| 停止失敗時の起動防止 | **据え置き・対応済み** | 停止用SSHが失敗すると `fail` で終了し、ログ初期化・`tmux new` へ進みません。追加テスト4eも、終了コード1・起動なし・停止理由の表示を確認しています。 |
| 30秒待機 | **据え置き・妥当** | 5秒ごとに再確認し、LISTEN開始またはプロセス終了で抜けます。確認失敗時も停止します。30秒はsleepの合計で、SSH所要時間は別途加わります。 |
| モデル確認 | **据え置き・妥当** | 必要ファイルと完了印を分離し、サーバー停止時は両方が揃った場合だけ取得を省略します。キャッシュ探索失敗も `ckpt=0` になります。全データの欠落・破損検証は従来どおり対象外です。 |
| 実行中の書き換え対策 | **据え置き・妥当** | `main` 全体と末尾の `main "$@"; exit $?` を先に解析する構成です。引数・PID・EXIT trapで参照する変数にも、関数化による問題は見当たりません。 |
| 誤削除・二重借用 | **据え置き・新たな経路なし** | Pod削除・作成条件、同一Logのロック条件は維持されています。追加した停止処理はPodを削除しません。同じPod内のパターンに一致する別サーバーも停止対象になる点は、R1時点と同じです。 |
| Linuxでの停止検証 | **推奨・任意で継続** | 実機の `pgrep` 成功報告はパターン一致の根拠になります。今後Linux環境で検証できる際に、停止・終了待ちまで確認すると補強できます。今回の通過条件にはしません。 |

各ファイルの `bash -n` は成功しました。93件OKは申告結果として扱っています。テスト本体は書き込み・プロセス停止を伴うため実行していません。生成コマンドの `od` 確認は、Bashのhere-document用一時ファイルが読み取り専用環境で拒否されたため完遂できず、ファイル内容で確認しました。ファイル変更・実機・Pod操作は行っていません。
```


## 依頼48：止まりを詰めて、学習率を弱め、正規化の値は前のモデルのままにした

依頼46 の報告への答えは次のとおりです。

| 決めること | 答え |
|---|---|
| 常駐プログラムの直し | 学習のあとに直す |
| 止まっているコマが約50%ある | 止まりを詰めた版を作る |
| 学習率 | 最大を 2.5e-5 に弱め、立ち上がり 100 ステップ、1,500 ステップで下げきる |
| 正規化の値 | 前のモデル（3999）の学習で使った値をそのまま使う |

ステップ数を増やすと何が違うのか、という問いも、ここで出ました。1ステップは、データから少し取り出して AI の答えを1回直すことです。増やすと、お手本の動きにより近くなる一方で、増やしすぎるとお手本と同じ場面でしか動けなくなり、時間と費用もそのぶん増えます。今回は前のモデルから続けるので、基本の動きはもう覚えています。足すのは「つかむ前に j0 を少し回す」「つかんだあと j2 を持ち上げる」分だけなので、1,500ステップにしました。続きからで直しが減らなければ、一から学習することを考えます。

### 依頼文 20261031_48_補正データの止まりを詰め学習率と正規化を続きから用にする.md

```markdown
---
作業フォルダ: /Users/shimazueiichi/r2r2r-scripts
上限時間: 90
---
# 依頼：補正データの止まりを詰めた版を作り、続きからの学習の設定（学習率・正規化）を入れる（2026-10-31）

依頼 46（コミット 1b47477）の続き。依頼 47 のあとに実行する。報告の「決めてほしいこと」への答え（エイイチ）：

1. デーモンの読み直しの直し（案1）→ **学習のあとに直す**。この依頼では触らない
2. 止まっているコマが約50%ある corr_v2 → **止まりを詰めた版を作る**
3. 学習率 → **弱める**：最大の学習率 2.5e-5、立ち上がり 100 ステップ、1,500 ステップで下げきる
4. 正規化の値 → **3999 の学習のときと同じ値（trim2 の値）をそのまま使う**。計算し直さない

## A. 止まりを詰めた版（corr_v3）

- corr_v2 を元に、補正の5本の止まっているコマを、お手本 trim2 と同じ考え方・同じ目安（止まりが全体の20%前後）まで詰める。trim2 のときに止まりを詰めた処理があれば、同じ処理・同じしきい値を使う
- 補正のコマは、なるべく減らさない。詰めたあとの補正のコマの数を run ごとに出す（corr_v2 は 384）
- 止まりの判定と詰め方は Claude Code が決め、理由を報告に書く。爪を閉じる・開く前後の止まりは、爪が動き終わるのを待つ意味があるので、消しすぎないように注意する（どう扱ったかを書く）
- 新しい名前（`mecharm_redblock_box_corr_v3`）で作り、corr_v1・v2 は残す。合わせたデータセット（`..._trim2_corr_v3`）と Pod に送る tar も作る
- データの点検（check_dataset）を通し、止まりの割合・1コマの最大の動き・コマ数を出す

## B. 続きからの学習の設定

- `pi05_mecharm_trim_corr_lora` を corr_v3 に向ける
- 学習率の予定：最大 2.5e-5、立ち上がり 100 ステップ、1,500 ステップで下げきる（下げきる先は trim2 と同じ）
- 正規化の値：計算し直さず、3999 の学習で使った trim2 の値をそのまま使う。pod_prep_trim_corr.sh から compute_norm_stats を外し、trim2 の値を置く手順に替える（trim2 の値の置き場所を確かめて報告に書く）
- `--init /workspace/ckpt/3999/params`・1,500 ステップは依頼 46 のまま
- 学習は回さない。Pod で打つ手順を報告に書く

## 確かめ

- 既存のテストが全部通ること。A・B のテストを足す
- codex のレビューを通す（docs/ に依頼文と結果を残す）
- 測定データ（runs/・datasets/ の既存のもの）は上書き・移動・削除しない。書く前に KIOXIA のマウントを確かめる
- git は個別ファイルを指定して add する

## 報告に書くこと

- corr_v3 の場所と数（run ごと：コマ・補正のコマ・止まりの割合・1コマの最大の動き）
- 変えたファイル、コミット、テストの件数
- Pod での手順（短く）
- 決めてほしいこと
```

### Claude Code の報告（38分）

```markdown
# 結果：20261031_48_補正データの止まりを詰め学習率と正規化を続きから用にする

- 状態：完了
- 始めた時刻：2026-10-31 20:23
- 終わった時刻：2026-10-31 21:01（38分）
- 作業フォルダ：/Users/shimazueiichi/r2r2r-scripts
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume f2206a57-5acd-4dee-ad9a-bc5c125a584e`

## Claude Code の報告

## やったこと

### A. 止まりを詰めた版（corr_v3）
- **corr_v2 の止まりが約 50% だった理由**：中継点や補正の 1 刻みのたびに「1〜3 コマ動いて、着いたら止まる」をくり返しています。trim2 の決まり（止まりの区間ごとに先頭 2 コマ残す）だと、区間が 2〜3 コマおきに来るので、毎回 2 コマずつ残って約 50% になっていました。この止まりは、送るたびに本体が角度を読み直す時間（約 1.6 秒）を待っているだけで、動作の意味はありません。
- **詰め方**：止まりの判定（6 関節とも 0.3° 未満で、爪も変わらない）と、ずれで区間を区切る決まり（0.5°）は trim2 と同じにしました。変えたのは、区間ごとに何コマ残すかだけです。
  - 推論（model）の区間：0 コマ
  - 補正（correct）の区間：1 コマ（補正のコマを減らしすぎないため）
  - 爪を閉じる・開く直前と直後の区間：trim2 と同じ先頭 2 コマ。さらに切り替えの前後 1 コマと、エピソードの両端は必ず残します。爪が動き終わるのを待つ止まりは、corr_v2 と同じだけ残っていることを確かめました。
- **ほかに試した案**：全部 0 コマにすると止まり 7.3%・補正 171 コマ、全部 1 コマにすると 34.9%・補正 283 コマでした。目安の 20% 前後に収まり、補正のコマも多く残る今の組み合わせを選びました。
- codex の必須の指摘（0.2° ずつゆっくり動く区間が、1 コマの大きな跳びになってしまう）を直しました。区間の区切り目は、0 コマの決まりでも残すようにしています。

### B. 続きからの学習の設定
- `pi05_mecharm_trim_corr_lora` のデータを `local/mecharm_redblock_box_teach_v1_trim2_corr_v3` に向けました。
- 学習率は、最大 2.5e-5・立ち上がり 100 ステップ・1,500 ステップで下げきる、にしました。下げきる先の 5e-6 は trim2 と同じです。
- `--init /workspace/ckpt/3999/params` と 1,500 ステップは依頼 46 のままです。
- 前の版（corr_v1・corr_v2）の設定が入っているときは止まります。入れ直すときは、データ名と学習率が同じかも確かめます。
- `pod_prep_trim_corr.sh` から正規化の値の計算を外し、trim2 の値を写す手順に替えました。写す前と後で sha256 が同じかを確かめます。
  - **trim2 の値の元（Pod）**：`/workspace/ckpt/3999/assets/local/mecharm_redblock_box_teach_v1_trim2/norm_stats.json`（lab_start.sh の 3c で 3999 を取ると置かれる場所）
  - **Mac の写し**：`/Volumes/KIOXIA/r2r2r-data/checkpoints/pi05_mecharm_trim_lora_v1/3999/assets/local/mecharm_redblock_box_teach_v1_trim2/norm_stats.json`（sha256 80346837…）
  - **置く先**：`/workspace/openpi/assets/pi05_mecharm_trim_corr_lora/local/mecharm_redblock_box_teach_v1_trim2_corr_v3/norm_stats.json`。学習のときにこの値を読む場所で、codex にも確かめてもらいました。

## 結果

**corr_v3 の場所**：`/Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_corr_v3`（作る前に KIOXIA のマウントを確かめました）

| run | コマ | 補正のコマ | 止まり | 1 コマの最大の動き j0〜j5（°） |
| --- | --- | --- | --- | --- |
| pi05_20261031_175527 | 118 | 28 | 17.8% | 3.31 3.75 3.00 1.31 3.00 0.77 |
| pi05_20261031_180435 | 152 | 49 | 17.8% | 3.00 3.00 3.29 1.88 3.22 1.88 |
| pi05_20261031_181946 | 126 | 38 | 17.5% | 3.00 4.40 2.96 0.70 3.22 0.73 |
| pi05_20261031_182545 | 197 | 113 | 25.4% | 3.00 3.37 2.77 1.84 4.10 1.32 |
| pi05_20261031_184016 | 133 | 44 | 19.5% | 3.00 3.00 3.00 0.78 3.00 0.56 |
| 合計 | 726 | 272 | 20.1% | |

- 補正のコマは 384 → 272 に減りました。
- 止まりがいちばん長く続くところは 0.2 秒です。
- 1 コマの最大の動きは corr_v2 とほぼ同じです。3° を超えるところは、除いた区間や詰めた区間のつなぎ目です。
- **データの点検（check_dataset）**
  - corr_v3 だけ：FAIL なし、WARN 2 件（止まり 20.1% が目安の 20% をわずかに超える／つかんだ位置が 5 本とも j0 +15° 付近）
  - trim2 と合わせたもの：FAIL なし、WARN 1 件（182545 だけ止まり 25.4%）
- **合わせたデータ**：`mecharm_redblock_box_teach_v1_trim2_corr_v3` は 24 本 / 3443 コマ（trim2 2717 + corr_v3 726）、止まり 11.8% です。
- **Pod に送る tar**：`mecharm_redblock_box_teach_v1_trim2_corr_v3_raw_episodes.tar` は 97 MB で、`._` のファイルは入っていません。
- corr_v1・corr_v2 と、`runs/`・`datasets/` にあったものには手を付けていません。新しく作ったのは corr_v3 の 2 つのフォルダだけです。

**テスト**：全部通りました。
- test_rewind_correct 69 件 / test_merge_and_config 13 件（直した・足した） / test_gap_fill 7 件 / test_recorder_rpc 4 件 / test_trim_hold 5 件（新しく作った）
- test_lab_start.sh は 93 件通り、失敗 0 件です。

**codex のレビュー**
- 1 回目：必須 1 件・推奨 3 件。必須と推奨 2 件を直しました。
- 2 回目：必須なし。軽い推奨（確かめるテストを 5 つの値すべてに広げる）も足しました。
- 足していないもの：Pod の手順を実際に流して確かめるテストです。決まった `/workspace` の場所を使うため Mac では流せず、中身の文字・書き方・sha256 の確かめにとどめています。

**コミット**：c7ff7d9

**Pod での手順**（学習はまだ回していません）
1. lab_start.sh で Pod を用意する（3999 の取得まで）
2. tar を `/workspace/data/` に、この版の `pi05/` を `/workspace/r2r2r/pi05/` に送る
3. `bash /workspace/r2r2r/pi05/openpi_addon/pod_prep_trim_corr.sh 1500 /workspace/ckpt/3999/params`
4. 3 が最後に出すコマンドで学習を始める：`cd /workspace/openpi && XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_mecharm_trim_corr_lora --exp-name=trim_corr_v3 --overwrite 2>&1 | tee /workspace/logs/train_trim_corr_v3.log`

## 変えたファイル
- `pi05/build_correction_episodes.py`
- `pi05/openpi_addon/add_trim_corr_config.py`
- `pi05/openpi_addon/pod_prep_trim_corr.sh`
- `pi05/test_merge_and_config.py`
- `pi05/test_trim_hold.py`（新しく作った）
- `docs/review_request_20261031_trim_hold_resume_lr.md`、`docs/review_request_20261031_trim_hold_resume_lr_r2.md`
- `docs/review_result_20261031_trim_hold_resume_lr_codex.md`、`docs/review_result_20261031_trim_hold_resume_lr_codex_r2.md`
- `logs/20261031_2110.md`

## 決めてほしいこと
1. **止まりの割合**：corr_v3 は 20.1% で目安どおりですが、182545 だけ 25.4% です（補正が 113 コマと多い run）。このままでよいか、補正の区間も 0 コマにしてもっと詰めるか（その場合は全体で約 7%、補正は約 171 コマ）。
2. **学習の最初から（`--init base`）で使う場合の学習率**：この設定は、最初から学習するときにも今回の弱めた学習率（1,500 ステップで下げきる）を使います。もし最初からの学習にも使うなら、そのときの学習率をどうするか。
```

3つの版の学習データをならべると、次のとおりです（どれも成功した5本から作ったもの）。

| 版 | 作り方 | コマ | 補正のコマ | 1コマで動く最大 | 止まり |
|---|---|---|---|---|---|
| corr_v1 | 抜けた角度をまっすぐ結んだ | 1,469 | 50 | 14〜28° | ― |
| corr_v2 | 抜けた角度を指令の道すじから作り直した | 1,159 | 384 | 3.0〜4.4° | 約50% |
| corr_v3 | v2 の止まりを詰めた | 726 | 272 | 3.0〜4.4° | 20.1% |
| お手本 trim2 | 人が手で教えた19回 | 2,717 | ― | 3.3° | ― |

- ねらい：止まっている時間まで覚えさせず、動きと補正だけを学習させる
- 変わったこと：推論の区間の止まりは0コマ、補正の区間は1コマ、爪を閉じる・開く前後は2コマだけ残して詰めた
- 見込める効果：止まりが約50%から20.1%になった（記録から数えた値）。補正のコマは 384 から 272 に減ったが、corr_v1 の 50 よりずっと多い

お手本と合わせた学習データは、24本・3,443コマ、Pod に送る形で 97MB になりました。

### Claude Code の作業記録 logs/20261031_2110.md

```markdown
# 2026-10-31 21:10 依頼 48 補正データの止まりを詰める・続きからの学習の設定

## A. corr_v3（止まりを詰めた版）
- corr_v2 の止まり約 50% の形: 中継点・補正の 1 刻みごとに「1〜3 コマ動いて着いたら止まる」。trim2 の決まり（止まりの区間ごとに先頭 2 コマ）では区間が 2〜3 コマおきに来るので 2 コマずつ残る。止まりは daemon の読み直し（約 1.6 秒）を待つだけのもの
- `build_correction_episodes.py --trim-hold`（hold_keep_mask）: 止まりの判定（6 関節 < 0.3°・爪が同じ）とずれの切り方（0.5°）は trim2 の mid_idle_keep_mask と同じで、区間ごとに残す数を変える
  - model の区間 0 コマ / correct の区間 1 コマ / 爪の切り替えの直前・直後の区間は trim2 と同じ 2 コマ（+ 切り替えの前後 1 コマ・両端）
  - ずれの切れ目は残す数が 0 でも残す（codex 必須。ゆっくりした動きが 1 コマの跳びにならない）
  - 全部 2 にすると mid_idle_keep_mask と同じ結果（テスト）
- 試した案: 全部 0 → 停止 7.3%・補正 171 / 全部 1 → 34.9%・補正 283 / 採用（model 0・correct 1・爪 2）→ 20.1%・補正 272
- 作成: `python3 pi05/build_correction_episodes.py --dataset mecharm_redblock_box_corr_v3 --gap-fill speed20 --trim-hold --run <corr_v2 と同じ 5 本>`

| run | コマ | 補正のコマ | 止まり | 1 コマの最大 j0〜j5（°） |
| --- | --- | --- | --- | --- |
| pi05_20261031_175527 | 118 | 28 | 17.8% | 3.31 3.75 3.00 1.31 3.00 0.77 |
| pi05_20261031_180435 | 152 | 49 | 17.8% | 3.00 3.00 3.29 1.88 3.22 1.88 |
| pi05_20261031_181946 | 126 | 38 | 17.5% | 3.00 4.40 2.96 0.70 3.22 0.73 |
| pi05_20261031_182545 | 197 | 113 | 25.4% | 3.00 3.37 2.77 1.84 4.10 1.32 |
| pi05_20261031_184016 | 133 | 44 | 19.5% | 3.00 3.00 3.00 0.78 3.00 0.56 |
| 合計 | 726 | 272 | 20.1% | |

- 合わせたデータ `mecharm_redblock_box_teach_v1_trim2_corr_v3`: 24 本 / 3443 コマ・停止 11.8%・tar 97 MB（._ なし）
- check_dataset: FAIL なし。corr_v3 単独は WARN 2（停止 20.1%、j0 +15° に 5/5）。合わせたものは WARN 1（182545 の 25.4%）

## B. 続きからの学習の設定
- add_trim_corr_config.py: repo_id を corr_v3 に・warmup 100 / peak 2.5e-5 / decay_steps 1_500（decay_lr 5e-6 は trim2 のまま）・corr_v1/v2 が入っていたら止まる・入れ直しでデータ名と学習率も確かめる
- pod_prep_trim_corr.sh: compute_norm_stats を外し、`/workspace/ckpt/3999/assets/local/mecharm_redblock_box_teach_v1_trim2/norm_stats.json` を `assets/pi05_mecharm_trim_corr_lora/local/mecharm_redblock_box_teach_v1_trim2_corr_v3/norm_stats.json` へ写す。sha256 80346837… を前後で確かめる（Mac の写し: /Volumes/KIOXIA/r2r2r-data/checkpoints/pi05_mecharm_trim_lora_v1/3999/assets/...）

## テスト
- test_rewind_correct 69 / test_merge_and_config 13 / test_gap_fill 7 / test_recorder_rpc 4 / test_trim_hold 5 すべて OK、test_lab_start.sh OK 93・NG 0

## レビュー
- codex r1: docs/review_result_20261031_trim_hold_resume_lr_codex.md（必須 1・推奨 3）。必須と推奨 2 件を直した。Pod の手順の動作テストは据え置き
- codex r2: docs/review_result_20261031_trim_hold_resume_lr_codex_r2.md（必須なし。必須・推奨 2 件の直しは解消。軽微な推奨 1 件（不一致のテストを 5 つとも）を足した）
```

### review_request_20261031_trim_hold_resume_lr.md

```markdown
# コードレビュー依頼：補正データの止まりを詰める（A）と、続きからの学習の設定（B）（2026-10-31 依頼 48）

前提: 依頼 46（コミット 1b47477）の続き。corr_v2（補正つきの成功 5 本。抜けを速度 20 の動きで埋めたもの）は、check_dataset の停止の割合が約 50% だった。
過去のレビュー: docs/review_result_20261031_gap_fill_recorder_rpc_codex.md

対象（`git diff HEAD -- <下のファイル>` と新しいファイル。ほかのファイルの未コミット差分は対象外）:
- `pi05/build_correction_episodes.py`（A: hold_keep_mask / select_steps の trim_hold / --trim-hold / meta の trim_hold / README の 1 行）
- `pi05/openpi_addon/add_trim_corr_config.py`（B: データ名を corr_v3 に・学習率の予定を置き換え・corr_v2 が入っていたら止まる）
- `pi05/openpi_addon/pod_prep_trim_corr.sh`（B: compute_norm_stats を外し、3999 の学習の trim2 の正規化の値を置く・sha256 で確かめる）
- テスト: `pi05/test_trim_hold.py`（新 5 件）、`pi05/test_merge_and_config.py`（13 件）

## 調べて分かったこと（A）
- corr_v2 の止まりは、中継点・補正の 1 刻みごとに「1〜3 コマ動いて、着いたあと止まる」のくり返し。trim2 の決まり（mid_idle_keep_mask: 止まりの区間ごとに先頭 2 コマ）で詰めたあとも、区間が 2〜3 コマおきに来るので 2 コマずつ残って約 50% になる
- trim2（お手本 19 本）は止まりの区間が少なく 9.6%。爪の切り替えの前後は「直前の区間 2 コマ + 切り替えの前後 1 コマ + 直後の区間」が残っている
- この止まりは daemon の読み直し（約 1.6 秒）を待つだけのもの

## 変えたこと
A. `--trim-hold`（既定は付けない。付けなければ corr_v2 と同じ）: mid_idle_keep_mask と同じ止まりの判定（6 関節 < 0.3°・爪が同じ）・同じずれの切り方（0.5°）で、区間ごとに残す数を変える
  - 爪の切り替えのコマ（action[6] != state[6]）のすぐ前で終わる / すぐ後で始まる区間 → 2（trim2 と同じ）
  - それ以外: 区間の先頭のコマが correct → 1、model → 0
  - gripper_guard_mask と両端は必ず残す。残す数を全部 2 にすると mid_idle_keep_mask と同じ結果（テストで乱数 300 回）
  - 作ったデータ corr_v3（5 本）: 726 コマ・補正 272・停止 20.1%（run ごと 17.5〜25.4%）・最長の連続 0.2 秒。trim2 と合わせて 24 本 3443 コマ・停止 11.8%
B. `pi05_mecharm_trim_corr_lora` を `local/mecharm_redblock_box_teach_v1_trim2_corr_v3` に。学習率の予定を warmup 100 / peak 2.5e-5 / decay_steps 1_500 に（decay_lr 5e-6 は trim2 のまま）。Pod の準備では正規化の値を計算せず、`/workspace/ckpt/3999/assets/local/mecharm_redblock_box_teach_v1_trim2/norm_stats.json` を `assets/pi05_mecharm_trim_corr_lora/local/<データ名>/norm_stats.json` に写す（Mac の写しの sha256 と前後で比べる）

## 見てほしい点
1. hold_keep_mask の区間の決め方（爪の隣の判定・区間の状態を先頭のコマで決めること・ずれで区切ったあとも同じ数を使うこと）に、消しすぎ・残しすぎの穴がないか。爪の前後で trim2 と同じ扱いになっているか
2. 詰めたあとの state / actions のつながり（つなぎ目の跳び・actions = 次のコマの state）が崩れないか
3. openpi が学習で正規化の値を読む場所（assets_dirs = assets/<設定の名前>、asset_id = repo_id）と、置く先が合っているか。続きからの学習（weight_loader で params だけ読む）で、この値の置き方に問題がないか。学習のあと checkpoint に写る値は trim2 と同じになるか
4. add_trim_corr_config.py の置き換え（学習率 3 か所・decay_lr の確かめ・前の版で止まる条件・二重に入れない判定）
5. pod_prep_trim_corr.sh の手順（set -euo pipefail・sha256 の確かめ・何度流してもよいか）
6. テストが A/B を十分に確かめているか

ファイル変更・実機操作はしないでください。読み取りだけでお願いします。日本語で、表（項目 / 判定 / 確認結果・修正案）と、必須 / 推奨 / 据え置きの分類で返してください。
```

### review_result_20261031_trim_hold_resume_lr_codex.md

```markdown
# コードレビュー結果：補正データの止まりを詰める・続きからの学習の設定（codex・2026-10-31 / 依頼 48）

- 実施: codex exec -s read-only --skip-git-repo-check（読み取りのみ）
- 依頼文: docs/review_request_20261031_trim_hold_resume_lr.md

**必須1件、推奨3件です。** A は model 区間の低速移動を消しすぎる穴があります。B の通常経路では、設定・正規化値の配置に問題は見つかりませんでした。

| 項目 | 判定 | 確認結果・修正案 |
|---|---|---|
| A：model 区間のずれ保護 | **必須** | [build_correction_episodes.py:268](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/pi05/build_correction_episodes.py:268)：0.5°を超えて数え直しても、`k=0` なので新しい区間の先頭も削除されます。**0.2°ずつ動く30コマ**を入力すると、`hold_keep_mask` は両端だけを残し、元の0.2°刻みが**5.8°の1ステップ**になります。静止の削除と低速移動の保護を分け、累積ずれで区切った位置では model でも姿勢を残してください。全 keep 値が2の場合の互換性も維持してください。 |
| A：低速移動のテスト | **推奨** | [test_trim_hold.py:93](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/pi05/test_trim_hold.py:93) は「model でも消えすぎない」と説明していますが、model の残存数・最大跳びを検証していません。上の不具合がある状態でも成功します。model の低速移動について、経路の残存と圧縮後の最大角度差を直接検証してください。 |
| A：爪の前後 | 据え置き | 連続 idle 区間が爪指令の直前で終わる／直後で始まる場合、区間全体に `keep_grip=2` が適用されます。ずれで数え直した区間も2コマとなり、guard・両端保護を含め trim2 と同じ扱いです。 |
| A：先頭モードによる分類 | 据え置き | 指定どおり、連続 idle 区間の先頭モードで残す数を決め、ずれによる再分割後も同じ数を使います。区間内で model→correct に変わっても再判定しません。仕様には一致していますが、上の低速移動保護は別途必要です。 |
| A：state / actions の接続 | 据え置き・条件付き | 関節6列は選択後の次の state で再生成され、配列上の接続は保たれます。爪列は元の次指令を維持し、切り替え周辺も保護されます。ただし、**次の state と一致することは、つなぎ目の跳びが小さいことを保証しません**。上の必須事項が該当します。 |
| A：既定動作・meta | 据え置き | `--trim-hold` なしは従来経路です。`--no-trim-mid-idle` との併用はCLIで拒否し、有効時の keep 値をmetaへ記録します。 |
| B：正規化値の配置先 | 据え置き | ローカル openpi の実装では `assets_dirs=assets/<設定名>`、既定の `asset_id=repo_id` です。`cd "$OPENPI"` 後の配置先は一致します。追加設定にも assets の上書きはありません。[公式実装](https://github.com/Physical-Intelligence/openpi/blob/main/src/openpi/training/config.py)とも整合します。 |
| B：params からの継続学習 | 据え置き | weight loader は重みを読み、optimizer・学習ステップは新規初期化されます。正規化値はデータ設定から別に読むため、trim2 の値を配置する方式で問題ありません。warmup 100 も新しい学習の先頭から適用されます。[公式実装](https://github.com/Physical-Intelligence/openpi/blob/main/scripts/train.py) |
| B：checkpoint に保存される値 | 据え置き・条件付き | 読み込んだ正規化値は、新 checkpoint の `assets/local/<corr_v3データ名>/norm_stats.json` に保存されます。統計値はtrim2と同じです。ただし**JSONを読み直して再シリアライズするため、保存後のファイルのSHA一致までは保証しません**。[公式実装](https://github.com/Physical-Intelligence/openpi/blob/main/src/openpi/training/checkpoints.py) |
| B：置き換え・旧版拒否 | 据え置き | 初回追加では学習率3か所を各1件確認して置換し、`decay_lr=5e-6` の存在も確認します。corr_v1／corr_v2の既定マーカーがあれば書き込み前に停止します。同じsteps/initでの再実行は追加しません。 |
| B：再実行時の設定検証 | **推奨** | [add_trim_corr_config.py:90](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/pi05/openpi_addon/add_trim_corr_config.py:90)：既存corr_v3を認める際はsteps/initしか確認しません。repo_idや学習率を変更された設定でも `already installed` になります。既存ブロックでもデータ名・学習率4値を検証し、不一致なら停止することを勧めます。 |
| B：Pod準備・SHA・再実行 | 据え置き | `set -euo pipefail` があり、コピー前後に固定SHAを照合します。Macの実ファイルとのSHA一致も確認できました。一時ディレクトリへ展開後に置き換えるため、前回指摘の旧エピソード残存は解消しています。同一引数での逐次再実行は可能です。 |
| B：シェルのテスト範囲 | **推奨** | `TestPodPrep` は文字列・構文・Mac側SHAの確認です。コピー前後の不一致で本当に停止すること、失敗後の再実行、更新tarで旧ファイルが残らないことは未検証です。これらの動作テストを追加すると手順の保証が強まります。 |

読み取りとメモリ内の検証のみ実施しました。`test_trim_hold.py` **5件成功**、`TestPodPrep` **4件成功**です。`test_merge_and_config.py` の残り9件は一時ファイルを書き込むため実行せず、コードを確認しました。

ファイル変更・実機操作はしていません。申告されたcorr_v3の726コマ・停止率20.1%などの集計は再検証していません。
```

### review_request_20261031_trim_hold_resume_lr_r2.md

```markdown
# コードレビュー依頼 r2：補正データの止まりを詰める・続きからの学習の設定（2026-10-31 依頼 48）

前回の結果: docs/review_result_20261031_trim_hold_resume_lr_codex.md（必須 1・推奨 3）

直したこと:
- 必須（model の区間でずれの切れ目まで消え, 0.2° ずつの動きが 1 コマの大きな跳びになる）: `pi05/build_correction_episodes.py` の hold_keep_mask で, ずれで数え直すコマは残す数が 0 でも残すようにした。残す数が 1 以上のときは今までどおり（数え直したコマが先頭として残る）ので, 全部 2 のときは mid_idle_keep_mask と同じ結果のまま（乱数 300 回のテストが通る）
- 推奨（低速移動のテスト）: `pi05/test_trim_hold.py` の test_slow_drift_not_trimmed で, model / correct それぞれの残る数と詰めたあとの 1 コマの最大の跳び（0.7° 以下）を見るようにした
- 推奨（入れ直しの確かめ）: `pi05/openpi_addon/add_trim_corr_config.py` で, 入っている corr_v3 の設定のデータ名・学習率の予定 4 値も見て, 違えば止まる。テストを足した（`pi05/test_merge_and_config.py`）
- 据え置き: pod_prep_trim_corr.sh の動作テスト（/workspace の決まった場所を使うので Mac では流さない。文字列・構文・sha256 の確かめに留める）
- corr_v3 を作り直した: 数は変わらず（726 コマ・補正 272・停止 20.1%。このデータにはゆっくり動く区間がなかった）

見てほしい点: 必須の直し方が正しいか（ずれの切れ目を残すことで, ほかに消しすぎ・残しすぎ・trim2 との違いが出ないか）と, 推奨 2 件の直し方。

ファイル変更・実機操作はしないでください。読み取りだけでお願いします。日本語で、表（項目 / 判定 / 確認結果・修正案）と、必須 / 推奨 / 据え置きの分類で返してください。
```

### review_result_20261031_trim_hold_resume_lr_codex_r2.md

```markdown
# コードレビュー結果 r2：補正データの止まりを詰める・続きからの学習の設定（codex・2026-10-31 / 依頼 48）

- 実施: codex exec -s read-only --skip-git-repo-check（読み取りのみ）
- 依頼文: docs/review_request_20261031_trim_hold_resume_lr_r2.md
- 対応: 軽微な推奨（不一致のテストを 5 つとも・止まったときに書かないことの確かめ）を test_merge_and_config.py に足した

**必須の指摘は解消しています。新たな必須事項はありません。** 推奨2件の修正も妥当です。追加テストには軽微な拡充余地があります。

| 項目 | 判定 | 確認結果・修正案 |
|---|---|---|
| ずれの切れ目の保護 | **必須：解消** | `k=0` でも、累積ずれが0.5°を超えて数え直すコマは残ります。0.2°ずつ動く30コマでは、model／correctとも11コマが残り、最大跳びは **0.6°**。前回の5.8°への圧縮は解消しています。 |
| 消しすぎ・残しすぎ | 据え置き：問題なし | 変更によって残るのは、`k=0` のずれの切れ目だけです。完全静止の削除量、動いているコマ、爪周辺・両端の保護には変更がありません。`k>=1` の処理も従来どおりです。 |
| trim2との互換性 | 据え置き：問題なし | keep値がすべて2なら追加分岐を通らず、従来の数え直し処理と一致します。乱数300回の一致テストも成功しました。既定の0／1／2では、model・correctの停止をより多く削るという意図した違いが残ります。 |
| 低速移動のテスト | **推奨：解消** | model／correct両方の残存数と最大跳びを直接確認しており、旧実装の不具合を検出できます。この入力では両モードの残存数が同じになるため、最後の比較を `>=` にした点も妥当です。 |
| 再投入時の設定検証 | **推奨：解消** | 既存ブロックのデータ名と学習率4値を確認しています。メモリ内の検証で、正常設定は受理し、データ名・4値それぞれを変更した設定はすべて拒否しました。 |
| 設定検証の回帰テスト | 推奨：軽微 | 追加された不一致テストは `peak_lr` のみです。データ名・`warmup_steps`・`decay_steps`・`decay_lr` も個別に変更するケースと、拒否後にファイル内容が変わらない確認を加えると、今回の検証範囲を維持できます。 |
| Pod準備スクリプト | 据え置き | 文字列・構文・Mac側の正規化ファイルとのSHA照合の4テストは成功しました。実行時の停止・再実行・旧ファイル除去の動作保証は、従来どおり未検証です。 |
| corr_v3の再集計 | 据え置き | 726コマ・補正272・停止20.1%は今回再検証していません。低速移動区間がなければ、今回の変更で集計が変わらないこととは整合します。 |

`test_trim_hold.py` は **5件成功**、`TestPodPrep` は **4件成功**です。設定の不一致確認はファイル操作をモック化して実施しました。一時ファイルを書くテスト群は実行していません。

ファイル変更・実機操作は行っていません。
```

### 学習データの一覧 datasets/mecharm_redblock_box_corr_v3/README.md

```markdown
# mecharm_redblock_box_corr_v3

実機推論 (`pi05/run_policy_client.py --execute`) で, 失敗しかけたら巻き戻し (b) /
キーボードで関節を直し (c) ながら成功させた run から作ったエピソード。
お手本 `mecharm_redblock_box_teach_v1_trim2` と同じ形 (frames/ + episode.npz + meta.json, 10Hz)。

- 作成: `python3 pi05/build_correction_episodes.py` --gap-fill speed20 --trim-hold
- 元データ: `runs/pi05_policy/<run_stem>/` (読むだけ。上書き・移動・削除しない)

## 作り方

- 結果が「成功」(y) の run だけ使う (`{run_stem}.json` の outcome)
- 状態が model / correct のステップだけ使う。rewind / home / wait (確認の入力待ち。手が写り得る) / regrip (補正の R で開いてから閉じ終わるまで) は除く
- 巻き戻しで取り消した区間 (区間を始めた時刻 〜 巻き戻しが終わった時刻) と, 取り消した補正は除き,
  その手前と巻き戻したあとの続きをつなぐ
- actions は「0.1 秒後の state」(つないだ並びで作り直す。グリッパー列は次の指令)
- 止まっている区間は build_demo_episodes と同じ決まり (IDLE_* と mid_idle_keep_mask) で詰める。ただし途中の止まりは区間ごとに残す数を変える (--trim-hold): model 0 コマ / correct 1 コマ / 爪の切り替えの直前・直後 2 コマ (trim2 と同じ) + 切り替えの前後 1 コマ
- 実測角の抜け (送信の間 daemon とのつながりがふさがる. 約 1.6 秒) の埋め方: 抜けの頭から速度 20 の速さ (30°/秒. いちばん大きく動く関節) で前後の実測角を結ぶ直線を進み, 着いたら止まる (speed20)
- 戻りきれなかった巻き戻しがある run は使わない (前後の姿勢が続かない)

## 数

採用 5 本 / 総ステップ 726 (model 454 / correct 272)

| run_stem | 採用 | steps | model | correct | 巻き戻し | 補正 (受け入れ) | 補正の行 | 1 コマの最大 (j0〜j5) | 理由 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| pi05_20261031_175527 | ○ | 118 | 90 | 28 | 0 | 2 | 13 | 3.31 3.75 3.0 1.31 3.0 0.77 | ok |
| pi05_20261031_180435 | ○ | 152 | 103 | 49 | 0 | 2 | 18 | 3.0 3.0 3.29 1.88 3.22 1.88 | ok |
| pi05_20261031_181946 | ○ | 126 | 88 | 38 | 0 | 2 | 16 | 3.0 4.4 2.96 0.7 3.22 0.73 | ok |
| pi05_20261031_182545 | ○ | 197 | 84 | 113 | 0 | 4 | 47 | 3.0 3.37 2.77 1.84 4.1 1.32 | ok |
| pi05_20261031_184016 | ○ | 133 | 89 | 44 | 0 | 2 | 17 | 3.0 3.0 3.0 0.78 3.0 0.56 | ok |
```

### datasets/mecharm_redblock_box_corr_v3/index.json

```json
{
  "pi05_20261031_175527": {
    "run": "pi05_20261031_175527",
    "used": true,
    "reason": "ok",
    "steps": 118,
    "model_steps": 90,
    "correct_steps": 28,
    "rewinds": 0,
    "corrections_accepted": 2,
    "correction_rows": 13,
    "max_step_deg": [
      3.31,
      3.75,
      3.0,
      1.31,
      3.0,
      0.77
    ]
  },
  "pi05_20261031_180435": {
    "run": "pi05_20261031_180435",
    "used": true,
    "reason": "ok",
    "steps": 152,
    "model_steps": 103,
    "correct_steps": 49,
    "rewinds": 0,
    "corrections_accepted": 2,
    "correction_rows": 18,
    "max_step_deg": [
      3.0,
      3.0,
      3.29,
      1.88,
      3.22,
      1.88
    ]
  },
  "pi05_20261031_181946": {
    "run": "pi05_20261031_181946",
    "used": true,
    "reason": "ok",
    "steps": 126,
    "model_steps": 88,
    "correct_steps": 38,
    "rewinds": 0,
    "corrections_accepted": 2,
    "correction_rows": 16,
    "max_step_deg": [
      3.0,
      4.4,
      2.96,
      0.7,
      3.22,
      0.73
    ]
  },
  "pi05_20261031_182545": {
    "run": "pi05_20261031_182545",
    "used": true,
    "reason": "ok",
    "steps": 197,
    "model_steps": 84,
    "correct_steps": 113,
    "rewinds": 0,
    "corrections_accepted": 4,
    "correction_rows": 47,
    "max_step_deg": [
      3.0,
      3.37,
      2.77,
      1.84,
      4.1,
      1.32
    ]
  },
  "pi05_20261031_184016": {
    "run": "pi05_20261031_184016",
    "used": true,
    "reason": "ok",
    "steps": 133,
    "model_steps": 89,
    "correct_steps": 44,
    "rewinds": 0,
    "corrections_accepted": 2,
    "correction_rows": 17,
    "max_step_deg": [
      3.0,
      3.0,
      3.0,
      0.78,
      3.0,
      0.56
    ]
  }
}
```

### datasets/mecharm_redblock_box_corr_v2/index.json

```json
{
  "pi05_20261031_175527": {
    "run": "pi05_20261031_175527",
    "used": true,
    "reason": "ok",
    "steps": 192,
    "model_steps": 153,
    "correct_steps": 39,
    "rewinds": 0,
    "corrections_accepted": 2,
    "correction_rows": 13,
    "max_step_deg": [
      3.31,
      3.75,
      3.0,
      1.31,
      3.0,
      0.77
    ]
  },
  "pi05_20261031_180435": {
    "run": "pi05_20261031_180435",
    "used": true,
    "reason": "ok",
    "steps": 247,
    "model_steps": 177,
    "correct_steps": 70,
    "rewinds": 0,
    "corrections_accepted": 2,
    "correction_rows": 18,
    "max_step_deg": [
      3.0,
      3.0,
      3.0,
      1.88,
      3.0,
      1.88
    ]
  },
  "pi05_20261031_181946": {
    "run": "pi05_20261031_181946",
    "used": true,
    "reason": "ok",
    "steps": 210,
    "model_steps": 156,
    "correct_steps": 54,
    "rewinds": 0,
    "corrections_accepted": 2,
    "correction_rows": 16,
    "max_step_deg": [
      3.0,
      4.4,
      2.96,
      0.7,
      3.0,
      0.73
    ]
  },
  "pi05_20261031_182545": {
    "run": "pi05_20261031_182545",
    "used": true,
    "reason": "ok",
    "steps": 301,
    "model_steps": 141,
    "correct_steps": 160,
    "rewinds": 0,
    "corrections_accepted": 4,
    "correction_rows": 47,
    "max_step_deg": [
      3.0,
      3.0,
      2.77,
      1.84,
      4.1,
      1.32
    ]
  },
  "pi05_20261031_184016": {
    "run": "pi05_20261031_184016",
    "used": true,
    "reason": "ok",
    "steps": 209,
    "model_steps": 148,
    "correct_steps": 61,
    "rewinds": 0,
    "corrections_accepted": 2,
    "correction_rows": 17,
    "max_step_deg": [
      3.0,
      3.0,
      3.0,
      0.78,
      3.0,
      0.56
    ]
  }
}
```


## 依頼49：学習を1行で回し、終わったらモデルを持ち帰って Pod を消す lab_train.sh

学習には約3時間かかる見込みで、今から始めると0時を過ぎます。寝ている間に回しても、最後に Pod が消えている形にするため、学習用の起動の仕組みを頼みました。推論用の `lab_start.sh` は、アームを動かすところまで進むので、学習には使えません。

### 依頼文 20261031_49_学習を1行で回し終わったらモデルを持ち帰りPodを消すlab_train.md

````markdown
---
作業フォルダ: /Users/shimazueiichi/r2r2r-scripts
上限時間: 90
---
# 依頼：π0.5 の続きからの学習を、Mac の1行で回し、終わったらモデルと記録を持ち帰って Pod を消す（lab_train.sh）（2026-10-31）

依頼 48（コミット c7ff7d9）の続き。学習を今夜、エイイチが寝ている間に回す（23時ごろに打って、そのまま寝る）。途中で人が何もしなくても、最後に Pod が消えている形にする。

lab_start.sh（推論用）はアームを動かすところまで進むので、学習用には使えない。lab_start.sh と lab_lib.sh の Pod まわり（作る・待つ・SSH・鍵・hf download・openpi・uv sync・addon・消す・費用の表示）を使い回して、学習用の `lab_train.sh` を作る。

## 打つ形

```
cd ~/r2r2r-scripts
./lab_train.sh --log Log17
```

- 既定：GPU は A40、学習は依頼 48 の設定（`pi05_mecharm_trim_corr_lora`・`--init /workspace/ckpt/3999/params`・1,500 ステップ・exp-name `trim_corr_v3`）
- 記録は `lab/Log17/train/` に置く（lab_start.sh の `lab/Log17/pod/` と分け、lab_start.sh の「同じ Log の Pod が残っている」判定とぶつからないようにする。lab_stop.sh で学習の Pod も消せるようにするか、`lab_train.sh --stop` を作るかは Claude Code が決める）

## 流れ

1. Pod を作る（A40 が借りられないときの扱い：同じ 48GB 級の別の GPU を順に試すか、止まって知らせるかは Claude Code が決め、報告に書く）
2. lab_start.sh の 2〜3f と同じ準備（スクリプトを送る・鍵・3999 の取得・openpi 215abfb・uv sync・addon と trim の設定）。サーバーは起動しない
3. tar（`/Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2_corr_v3/` の中の `..._raw_episodes.tar`）を `/workspace/data/` に、この版の `pi05/` を `/workspace/r2r2r/pi05/` に送る
4. `bash /workspace/r2r2r/pi05/openpi_addon/pod_prep_trim_corr.sh 1500 /workspace/ckpt/3999/params`
5. 学習を、Mac とのつながりが切れても止まらない形で始める（nohup・tmux など）。ログは `/workspace/logs/train_trim_corr_v3.log`。GPU の様子（`nvidia-smi` を30秒おき）も残す
6. Mac 側は待ちながら、数分おきに進み（ステップ・loss）をターミナルと lab_start と同じ形の記録ファイルに出す
7. 学習が終わったら：
   - 最後のチェックポイント（params・assets・_CHECKPOINT_METADATA。train_state は要らない）を Hugging Face の非公開リポジトリ `PixelstoMotors/pi05-mecharm-trim-corr-lora-v1` に Pod から上げる（MASTER の決まり：名前は checkpoints/ のフォルダ名に合わせる。フォルダ名は `pi05_mecharm_trim_corr_lora_v1`）
   - KIOXIA の `checkpoints/pi05_mecharm_trim_corr_lora_v1/<最後のステップ>/` に Hugging Face から取って置く。Pod 側の一覧とファイル名・バイト数がすべて合うかを確かめる（du の数字は KIOXIA でずれるので使わない）
   - 学習のログ・GPU のログ・Pod 側のファイルの一覧を `lab/Log17/train/` に持ち帰る
   - そのあと Pod を消し（停止ではなく削除）、消えたことを API で確かめ、借りた時間と費用（ドルと円）を出す
8. 学習が途中で落ちたとき・止まったときも、ログを持ち帰ってから Pod を消す。上限の時間（例：始めてから5時間）を超えたら、同じように持ち帰って消す。上限は引数で変えられるようにする
9. 終わったら Mac に通知を出す（成功・失敗が分かる文で）

## 決まり

- 鍵（Runpod・Hugging Face）は KIOXIA の keys/ から読む。ログ・画面・記録ファイルに鍵を出さない
- Mac がスリープすると止まるので、学習の間は Mac がスリープしないようにする（caffeinate など）。Mac が止まっても Pod が残り続けないよう、Pod 側にも上限時間で自分を消す仕組みを置くかは Claude Code が判断する（置くなら、鍵の扱いを報告に書く）
- 測定データ（runs/・datasets/・checkpoints/ の既存のもの）は上書き・移動・削除しない。書く前に KIOXIA のマウントを確かめる
- lab_start.sh・lab_stop.sh の今の動きは変えない（共通部分を lab_lib.sh に移すのはよい。そのときは今のテスト93件が通ること）
- 依頼 47 と同じく、中身を関数に入れて最後に呼ぶ形にし、途中でファイルが書き換わっても壊れないようにする

## 確かめ

- `--dry-run` で、本物の Pod を借りずに流れを確かめる。API・SSH・hf の応答を差し替えるテストを足す（学習が終わる・落ちる・上限時間を超える・Hugging Face に上げられない、の4つの場合）
- 既存のテストが全部通ること
- codex のレビューを通す（docs/ に依頼文と結果を残す）
- git は個別ファイルを指定して add する

## 報告に書くこと

- 変えたファイル、コミット、テストの件数
- エイイチが打つ1行と、打ったあとに画面に出るもの（どこまで見届ければ寝てよいか）
- 学習が終わったあと、エイイチが朝に見るもの（記録ファイルの場所・通知の文）
- 決めてほしいこと（あれば）
````

### Claude Code の報告（57分）

```markdown
# 結果：20261031_49_学習を1行で回し終わったらモデルを持ち帰りPodを消すlab_train

- 状態：完了
- 始めた時刻：2026-10-31 21:04
- 終わった時刻：2026-10-31 22:00（57分）
- 作業フォルダ：/Users/shimazueiichi/r2r2r-scripts
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume a3c5c08e-4702-4b2d-9196-3336fb40101d`

## Claude Code の報告

依頼 49 は前の回で終わっていて、この回で新しくやったことはありません。

## やったこと
- codex レビュー bql10a8c7 は R1 でした。そのあと R2・R3 も通し、R3 で必須の直しがなくなりました。R3 の推奨 1 件（隠しファイルも移す）も直しました。
- コミット `0ba321e` に、`lab_train.sh` とテスト、レビューの依頼文と結果（`docs/review_*_20261031_lab_train*`）、作業の記録 `logs/20261031_2159.md` を入れました。

## 結果
- テストはすべて通りました。
  - `test_lab_train.sh`：118 件
  - `test_lab_start.sh`：93 件（今ある分）
  - `pi05/test_hf_upload_ckpt.py`：9 件
- 本物の Pod では、まだ一度も流していません。
- 打つのは `./lab_train.sh --log Log17` です。画面に「ここまで来れば寝てかまいません」が出るまで見届ければ大丈夫です。
- 朝は Mac の通知と、`/Volumes/KIOXIA/r2r2r-data/lab/Log17/train/result_<時刻>.txt` を見てください。

## 変えたファイル
- この回ではありません。依頼 49 で変えたファイルは、前の報告とコミット `0ba321e` のとおりです。

## 決めてほしいこと
前の報告の 4 点から変わっていません。
1. Pod 側で自分を消す仕組みが働かないとき、学習を止めるか続けるか。今は警告だけ出して続けます。
2. Pod を作ってから、自分を消す仕組みを置くまでの数分間の扱い。この間に Mac が止まると Pod が残ります。
3. A40 が借りられないとき、予備の GPU（RTX A6000・L40S）を使ってよいか。A40 より高くなることがあります。
4. 上限 5 時間（Pod を作った時刻から数える）でよいか。
```

報告の「決めてほしいこと」4つには、すべて今の作りのままで答えました（見張りが働かないときも学習を続ける・見張りを置くまでの数分はそのまま・A40 が借りられなければ RTX A6000 と L40S を使ってよい・上限は5時間）。

### Claude Code の作業記録 logs/20261031_2159.md

````markdown
# 2026-10-31 21:59 依頼 49 学習を1行で回し、終わったらモデルを持ち帰り Pod を消す（lab_train.sh）

## 打つ1行
```
cd ~/r2r2r-scripts
./lab_train.sh --log Log17
```
- 既定: A40・`pi05_mecharm_trim_corr_lora`・`--init /workspace/ckpt/3999/params`・1,500 ステップ・exp `trim_corr_v3`・上限 5 時間（Pod を作った時刻から）・5 分おきに進み・ログが 30 分書かれなければ止まったとみなす
- 記録: `/Volumes/KIOXIA/r2r2r-data/lab/Log17/train/`（lab_pod.json・lab_train_<時刻>.txt・result_<時刻>.txt・train_trim_corr_v3.log・gpu_train.csv・train_run.log・prep_trim_corr.log・pod_files_1499.tsv・pod_checkpoints.tsv）
- Pod の名前は `p2m-train-<Log>`（lab_start.sh の `p2m-<Log>`・`pod/` とは別）
- 片付けだけ: `./lab_train.sh --log Log17 --stop`。流れだけ: `--dry-run`（Pod を借りない。書くのは一時フォルダだけ）

## 決めたこと（依頼で Claude Code に任されたもの）
- GPU: A40 を 30 秒おきに 5 回 → RTX A6000 → L40S（どれも 48GB）を 2 回ずつ。`--no-fallback` で A40 だけ
- 止める口: `lab_train.sh --stop`（lab_stop.sh は変えない）。Ctrl-C・TERM・HUP・思わぬ終わり方も、ログを持ち帰ってから消す
- Pod 側の見張り: 置く。上限 + 60 分（片付けに入ったら今から 3 時間に延ばす）で、Runpod が Pod に入れる RUNPOD_POD_ID・RUNPOD_API_KEY（Pod 用の鍵）で DELETE（60 秒おき 30 回）→ runpodctl remove → stop。Mac の鍵は送らない。働かないときは止めずに警告（画面・寝てよいの案内・まとめ）
- 成功: Hugging Face（非公開を確かめる・別の中身があれば上書きしない・train_state は上げない）→ ログ → Pod を消す → Mac の hf download で KIOXIA の `.incoming_*` に取り、Pod 側の一覧と名前・バイト数を比べてから `checkpoints/pi05_mecharm_trim_corr_lora_v1/1499/` に（mkdir で取ってから移す。もとからあれば比べるだけ）
- Hugging Face に上げられなければ、Pod を消す前に scp で KIOXIA へ取る

## lab_lib.sh へ移したもの
- lab_start.sh 3b〜3f のコマンド（中身は同じ）・openpi のコミット・テンプレート・イメージ

## テスト
- test_lab_train.sh 118 件 OK（終わる・落ちる・印なしで消える・上限・止まり・HF に上げられない・取ったものが合わない・KIOXIA にもとからある・GPU の切り替え・借りられない・消せない・DELETE の一時失敗・上限直後に終わっていた・見守り前に上限・見張りなし・一覧が取れない/途中で失敗・--stop・TERM・引数・Pod で流すコマンドを Mac の bash で・pgrep が自分に当たらない・見張りのやり直し）
- test_lab_start.sh 93 件 OK、pi05/test_hf_upload_ckpt.py 9 件 OK

## レビュー
- codex R1（必須 7）→ R2（必須 4）→ R3（必須なし・推奨 1 を反映）。docs/review_*_20261031_lab_train*
- R1 の「Ubuntu で date -r が使えない」は誤り（GNU date も -r FILE を持つ）。R2 で codex が訂正。念のため stat -c を先に使う形にした

## 残っていること
- 本物の Pod では一度も流していない（Pod 用の鍵で自分を消せるか・openpi のログの形）
- Pod を作ってから見張りを置くまでの数分は、Mac が止まると Pod が残る
````

### review_request_20261031_lab_train.md

```markdown
# コードレビュー依頼：学習を1行で回し、終わったらモデルを持ち帰り Pod を消す lab_train.sh（2026-10-31 依頼 49）

前提: 依頼 48（コミット c7ff7d9）の続き。今夜、エイイチが寝ている間に π0.5 の続きからの学習（`pi05_mecharm_trim_corr_lora`・`--init /workspace/ckpt/3999/params`・1,500 ステップ・exp `trim_corr_v3`）を回す。途中で人が何もしなくても、最後に Pod が消えている形にする。
過去のレビュー: docs/review_result_20261031_lab_start_model_check_codex*.md（pkill が自分の bash -c に当たる件）

対象（新しいファイルと `git diff HEAD -- lab_lib.sh lab_start.sh`。ほかのファイルの未コミット差分は対象外）:
- `lab_train.sh`（新）: 本体。中身は main に入れて最後に呼ぶ
- `lab_lib.sh`: lab_start.sh 3b〜3f のコマンドを関数に移した（lab_start.sh と共用）。lab_train.sh 用に Pod の中で流すコマンド（学習の様子・始める・止める・一覧・見張り）、Mac 側（一覧・hf download・通知・caffeinate）、費用の行を足した
- `lab_start.sh`: 3b〜3f を lab_lib.sh の関数に置き換えただけ（流すコマンドの中身は同じ）
- `pi05/openpi_addon/hf_upload_ckpt.py`（新）: Pod で最後のチェックポイントを非公開リポジトリへ上げ、一覧を確かめる
- `lab_train_fakes.sh`（新）: `--dry-run` の差し替え（API・SSH・hf・通知）
- テスト: `test_lab_train.sh`（新 105 件）、`pi05/test_hf_upload_ckpt.py`（新 8 件）、`test_lab_start.sh`（既存 93 件。そのまま通る）

## 流れ
1. Pod を作る（名前 `p2m-train-<Log>`、記録 `lab/<Log>/train/lab_pod.json`。lab_start.sh の `p2m-<Log>`・`pod/` とは別）。A40 を 30 秒おき 5 回、空きがなければ RTX A6000・L40S（48GB）を 2 回ずつ。`--no-fallback` で A40 だけ
2. SSH を待ち、Pod 側に見張り（`lab_watchdog.sh`）を setsid nohup で置く。上限（Pod を作った時刻 + `--limit-hours` 既定 5 時間）+ 60 分を過ぎたら、Runpod が Pod に入れる `RUNPOD_POD_ID`・`RUNPOD_API_KEY`（Pod 用の鍵）で REST の DELETE → だめなら runpodctl remove → stop。Mac の鍵は送らない
3. lab_start.sh 3a〜3f と同じ準備（サーバーは起動しない）→ tar を送る → `pod_prep_trim_corr.sh 1500 /workspace/ckpt/3999/params`
4. `train_run.sh` を Pod に置いて setsid nohup で回す（train.py の終了コードを `/workspace/logs/train_exit_code` に書く）。nvidia-smi を 30 秒おきに `gpu_train.csv`
5. 5 分おきに様子（`STATUS run= exit= age= bar= logstep= loss= ckpt= cm=`）を見る。終了コード 0 かつ最後のチェックポイントが `steps-1` で `_CHECKPOINT_METADATA` あり → 成功。終了コードが 0 以外・印なしでプロセスが消えた・ログが 30 分書かれない・上限を超えた・Pod が RUNNING でない → 失敗
6. 成功: 見張りを 3 時間延ばす → Pod 側の一覧（train_state なし）→ hf_upload_ckpt.py（非公開で作る・非公開でなければ止まる・別の中身があれば止まる・上げたあと一覧を比べる）→ ログを持ち帰る → Pod を消す → Mac の hf download で KIOXIA の `checkpoints/pi05_mecharm_trim_corr_lora_v1/.incoming_*` に取り、Pod 側の一覧と名前・バイト数を比べてから `<step>/` に mv。`<step>/` がもとからあれば触らず比べるだけ
   上げられなかったとき: Pod を消す前に scp で KIOXIA へ取る（同じ比べ方）
7. 失敗: 学習を止め、ログを持ち帰ってから消す。Ctrl-C・TERM・HUP も同じ。set -u などで思わぬところで終わっても EXIT の trap で同じ片付けをする
8. 通知（osascript）と `result_<時刻>.txt`。Pod を消せなければ「残っているかもしれない」と `--stop` を案内
9. `--stop`: 記録の Pod の学習を止め、ログを持ち帰って消す

## 見てほしい点
1. Pod が残る道がないか（どの段階で落ちても・Ctrl-C でも・Mac が止まっても）。逆に、学習が正しく終わっているのに失敗扱いで消す道がないか（成功の判定・止まりの判定 30 分・tqdm の行の読み方）
2. pgrep / pkill が自分の bash -c に当たらないか（`^bash /workspace/r2r2r/train_run\.sh$` などの ^ を付けた形にした）。setsid nohup で ssh が返るか
3. Pod 側の見張り：Pod 用の鍵の探し方（環境変数・/proc/1/environ・/etc/rp_environment）、鍵をログ・画面に出さないか、時刻を延ばす仕組み、上げる途中で消えないか
4. Hugging Face：非公開の確かめ・上書きしない・train_state を上げない・一覧の比べ方（hf_upload_ckpt.py と Mac の lab_list_files）。Mac の hf download に鍵を HF_TOKEN_PATH（ファイルの場所）で渡すこと
5. KIOXIA：もとからある checkpoints/・datasets/・runs/ を上書き・移動・削除しないか（rm -rf は自分で作った一時フォルダの中だけか）
6. lab_start.sh の今の動きが変わっていないか（3b〜3f のコマンドの中身）。lab_start.sh の「同じ Log の Pod」判定とぶつからないか
7. テストが 4 つの場合（終わる・落ちる・上限を超える・Hugging Face に上げられない）とそれ以外を十分に確かめているか

ファイル変更・実機操作・Pod の操作・Hugging Face の操作はしないでください。読み取りだけでお願いします。日本語で、表（項目 / 判定 / 確認結果・修正案）と、必須 / 推奨 / 据え置きの分類で返してください。
```

### review_result_20261031_lab_train_codex.md

```markdown
# codex レビュー結果 R1：lab_train.sh（2026-10-31 依頼 49）

依頼文: docs/review_request_20261031_lab_train.md（codex exec -s read-only）

**判定：必須修正あり。現状のまま今夜の無人学習へ投入することは勧めません。** 特に、Ubuntuで状態取得が壊れる点と、見張りが機能しなくても学習へ進む点が問題です。

指定ファイル・差分・過去レビューR1〜R3を確認しました。Shellの構文検査とPythonの構文解析は成功しました。書き込み・プロセス操作を伴うテストは実行していないため、105件・8件・93件の成功は申告結果として扱います。ファイル変更・実機・Pod・Hugging Faceの操作はしていません。

| 項目 | 判定 | 確認結果・修正案 |
|---|---|---|
| Ubuntuでのログ更新時刻取得 | **必須・P1** | [lab_lib.sh:251](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:251)。`date -r "$L" +%s` はBSD/macOSの書き方です。UbuntuのGNU dateではログファイルを参照できず、続く算術展開が失敗してSTATUS行が出ません。正常終了も検出できず、最終的に上限でモデル未回収のまま削除する経路になります。Pod側は `stat -c %Y "$L"` を使い、取得失敗も明示的に扱ってください。 |
| 見張り不成立でも続行 | **必須・P1** | [lab_train.sh:500](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_train.sh:500)。`run/pod/key` が揃わなくても警告だけで続行します。その後Macが停止すると削除する主体がなくなります。**見張り不成立は準備失敗として削除へ進む**必要があります。また鍵の「存在確認」は削除権限の確認ではありません。現在のコードだけではPod用鍵でDELETE可能とは確認できません。 |
| 見張りの削除失敗 | **必須・P1** | [lab_lib.sh:320](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:320)。DELETEは1回だけで、CLIも失敗すると見張りが終了します。一時的な通信障害でもPodが残り続けます。各呼び出しに接続・処理時間の上限を設け、間隔を置いて再試行してください。`stop` 成功も削除完了ではなく、ディスク料金が残ります。 |
| 上限直前に正常終了した場合 | **必須・P1** | [lab_train.sh:557](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_train.sh:557)。STATUS取得より先に上限判定します。例えば前回確認後に正常終了し、次の確認が5時間を超えると、成功済みモデルを回収せず削除します。上限到達時も最後に状態を取得し、正常完了なら回収へ進めてください。 |
| 一覧比較のエラーを一致扱い | **必須・P1** | [lab_train.sh:296](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_train.sh:296)。`diff` の標準出力が空なら成功としており、一覧ファイルが読めない等の終了コード2も一致扱いになります。プロセス置換内の `lab_list_files` の失敗も直接確認できません。双方の一覧生成成功を確認してから、`diff` の**終了コード0だけ**を一致としてください。 |
| Pod作成〜見張り設置前のMac停止 | **必須・設計上の未充足** | [lab_train.sh:458](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_train.sh:458)から497行。POSTがサーバー側で成功して応答が失われた場合や、SSH待機中にMacが停止した場合、Podに見張りがありません。「どの段階でもMac停止後に自動削除」を満たすには、作成時から働く仕組み、またはMac・当該Podと独立した期限監視が必要です。EXIT trapではこの区間を保証できません。 |
| テストの不足 | **必須・上記修正と併せて** | [test_lab_train.sh:46](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/test_lab_train.sh:46)。指定4ケースに加え、印なし終了・stall・削除失敗・既存保存先等はあります。ただしSTATUSは主に偽物で、実コマンド検証もMac上です。**Ubuntuでの状態取得、上限前完了／上限後確認、見張り不成立、DELETE一時失敗、比較処理の読取エラー**を追加してください。158行のINT直後TERM送信では、Ctrl-C単独の処理成功は証明できません。 |
| 回収中の見張り延長 | **推奨** | [lab_train.sh:335](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_train.sh:335)。延長失敗でもアップロードへ進み、成功しても3時間固定です。従来期限や延長後期限を過ぎれば転送途中でも削除されます。延長失敗を明示し、転送処理に時間上限を設けるか、最大期限付きで定期更新してください。期限ファイルの更新は一時ファイルからの置換が堅実です。 |
| 見張りの鍵探索・秘匿 | **据え置き＋推奨** | [lab_lib.sh:307](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:307)。環境変数→PID 1の環境→設定ファイルという探索と、curlヘッダーをFD経由で渡す構成は妥当です。明示的な鍵の出力はありません。ただしCLIの出力はそのままログへ入るため、「必ず秘匿」は未確認です。探索元の形式差・鍵なし・CLI失敗のテストを補ってください。 |
| `pgrep/pkill` の自己一致 | **据え置き・妥当** | [lab_lib.sh:203](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:203)。wrapper・見張り・GPUの先頭固定パターンは `bash -c …` に一致しません。停止コマンドのtrain.pyも `[s]` 表記で、通常表記の起動コマンドとは分離されています。過去R1と同じ自己一致は見当たりません。 |
| `setsid nohup` とSSH終了 | **据え置き・構成は妥当** | [lab_lib.sh:224](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:224)。背景プロセスの標準入出力・標準エラーをSSHから切り離しており、SSHを保持する構成ではありません。実際のUbuntu上での起動・切断試験は未実施です。 |
| 成功判定・tqdm・30分判定 | **据え置き＋推奨** | [lab_train.sh:566](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_train.sh:566)。終了コード0・最終番号・metadataで成功を決め、tqdmやlossは表示用なので、表示の読み漏れ自体で成功判定は変わりません。一方、ログ無更新30分は長い初期化・保存も停止扱いにします。固定コミットの実ログで、CR・表示接頭辞・初期化・最終保存中の挙動を確認してください。 |
| HF非公開・上書き・除外 | **据え置き・通常経路は妥当** | [hf_upload_ckpt.py:79](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/pi05/openpi_addon/hf_upload_ckpt.py:79)。非公開で作成し、公開なら停止、既存一覧が違えばアップロードしません。`train_state/` の一覧除外とアップロード除外もあります。ただし名前・サイズ一致はバイト内容一致の証明ではなく、確認とアップロード間の並行更新防止もありません。単独運用という前提を明確にしてください。 |
| MacのHF認証 | **据え置き・要件どおり** | [lab_lib.sh:352](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:352)。`HF_TOKEN_PATH` にファイルの場所を渡しています。既存の環境変数 `HF_TOKEN` が設定されている場合の影響も避けるなら、そのコマンドに限ってunsetしてください。 |
| KIOXIAの既存データ | **据え置き＋推奨** | [lab_train.sh:306](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_train.sh:306)。既存の最終保存先には比較だけを行い、モデル回収での `rm -rf` は自分の一時フォルダ内です。datasets/runsを操作する追加処理もありません。ただし確認後に別実行が保存先を作ると、324行の `mv` がその中へ一時フォルダを入れ得ます。保存先単位の排他を加えると確実です。 |
| lab_start.shの回帰・名前衝突 | **据え置き・問題なし** | 3b〜3fは空白・改行を除き同じコマンドです。定数も同値です。`p2m-train-<Log>` と `p2m-<Log>`、`train/` と `pod/` は分離されており、同名判定への新たな衝突は見当たりません。 |

**今夜の投入前には、少なくとも必須項目の修正と、その失敗経路を通すテストが必要です。現状では「正常終了モデルの回収」と「Mac停止後のPod自動削除」の両方に未充足があります。**
```

### review_request_20261031_lab_train_r2.md

```markdown
# コードレビュー依頼 R2：lab_train.sh（2026-10-31 依頼 49）

前回: docs/review_result_20261031_lab_train_codex.md
対象: 新しいファイル `lab_train.sh`・`lab_train_fakes.sh`・`test_lab_train.sh`・`pi05/openpi_addon/hf_upload_ckpt.py`・`pi05/test_hf_upload_ckpt.py` と `git diff HEAD -- lab_lib.sh lab_start.sh`。`./test_lab_train.sh` OK 113、`./test_lab_start.sh` OK 93、`python3 pi05/test_hf_upload_ckpt.py` 8 件 OK。

## R1 の指摘への対応
| 指摘 | 分類 | 反映 | 対応内容 / 据え置き理由 |
|---|---|---|---|
| Ubuntu で `date -r FILE` が使えない | 必須 | 反映（理由は別） | GNU coreutils の date も `-r, --reference=FILE` でファイルの時刻を出すので壊れはしないと考えるが、`stat -c %Y` を先に使い、だめなら `date -r`、どちらも数でなければ `age=-`（止まったとはしない）にした。テスト 15 に偽の GNU stat・どちらも読めない場合を足した |
| 見張りが働かなくても続く | 必須 | 一部反映 | 止めずに続ける（Pod 用の鍵が入らない Pod だと毎回学習できなくなり、今夜の目的が果たせないため）。代わりに画面の警告・「寝てよい」の案内・まとめに注意を出す。止めるかどうかはエイイチに聞く。鍵の有無は削除の権限の確かめではない点も報告に書く |
| 見張りの DELETE が 1 回だけ | 必須 | 反映 | curl --max-time 30 の DELETE と runpodctl remove を 60 秒おきに 30 回。だめなら runpodctl stop。runpodctl の出力はログに入れない。テストに「1 回目 500 → 2 回目で消す」「ずっとだめ → 消せなかった・終了コード 1」 |
| 上限の直前に終わった学習を消す | 必須 | 反映 | 見守りで先に様子を取り、終わっていれば上限を超えていても成功へ。テスト 11c |
| 一覧の比べ方が diff の出力の空で判定 | 必須 | 反映 | 両方の一覧を作れたこと（lab_list_files の終了コード・Pod 側が空でない）を確かめ、diff の終了コード 0 だけを「合った」とする |
| Pod を作ってから見張りを置くまでの間に Mac が止まる | 必須（設計） | 据え置き | 見張りは Pod に SSH できてから置くので、作ってから数分の間は Mac だけが頼り。Runpod の作るときの API に寿命の指定は見当たらない。報告の「決めてほしいこと」に書く |
| テストの不足 | 必須 | 反映 | 11b（DELETE が一時だめ）・11c（上限直後に終わっていた）・11d（見張りなし）・11e（一覧が取れない）・15 の stat・見張りのやり直し。13 は TERM だけにした（裏で動かした bash は INT を受けないため。INT・HUP も同じ on_signal） |
| 片付け中の見張りの延長 | 推奨 | 反映 | extend_watchdog: 一時ファイルから mv で書き換え、失敗を警告で出す。上げる前と scp の前に延ばす |
| HF_TOKEN の環境変数 | 推奨 | 反映 | Mac の hf download は `env -u HF_TOKEN` |
| 置き先が途中でできる | 推奨 | 反映 | mv の直前にもう一度あるかを見て、あれば置かない |

## 見てほしい点
1. R1 の必須が解消したか（据え置きの 2 点を除く）
2. 直したことで、Pod が残る道・学習が終わっているのに消す道・KIOXIA の既存を書き換える道ができていないか

ファイル変更・実機操作・Pod の操作・Hugging Face の操作はしないでください。読み取りだけでお願いします。日本語で、表（項目 / 判定 / 確認結果・修正案）と、必須 / 推奨 / 据え置きの分類で返してください。
```

### review_result_20261031_lab_train_codex_r2.md

```markdown
# codex レビュー結果 R2：lab_train.sh（2026-10-31 依頼 49）

依頼文: docs/review_request_20261031_lab_train_r2.md（codex exec -s read-only）

**判定：R1の必須は、据え置き2点を除いても解消し切っていません。** 完了済み学習を回収せず削除する経路と、一覧取得失敗の見落としが残っています。

読み取りのみで確認しました。テストは一時ファイルを作成するため再実行せず、ご提示の結果とテストコードを確認しています。指定の前回レビュー結果ファイルは見出しと依頼文への参照だけだったため、R1指摘は今回の対応表を基準にしました。

| 項目 | 判定 | 確認結果・修正案 |
|---|---|---|
| 学習完了と上限の優先順位 | **必須・未解消** | [lab_train.sh:571](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_train.sh:571) の `stage` が、ステータス取得前に上限判定します。学習開始後のSSH応答遅延やMacの一時停止中に学習が完了し、上限も過ぎると、`wrap_fail timeout` → チェックポイント未回収のまま削除になります。見守り段階への移行時はこの判定を通さず、ループ内の完了優先判定に任せてください。11cはステータス取得中に上限を越えるケースだけで、この経路を検出しません。 |
| Pod側の一覧取得失敗 | **必須・一部未解消** | [lab_train.sh:354](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_train.sh:354) はSSHの終了コードを確認していません。また [lab_lib.sh:275](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:275) のリモートパイプラインに `pipefail` がなく、`find` の失敗が末尾の `sed` 成功で隠れます。メタデータを含む部分一覧なら通過します。リモート側に `set -o pipefail` を付け、SSH成功も必須にしてください。11eの空一覧だけでは不足です。 |
| KIOXIAの既存保存先保護 | **必須・競合が残る** | [lab_train.sh:329](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_train.sh:329) の存在確認と `mv` は別操作です。その間に別Logの実行などが保存先ディレクトリを作ると、通常の `mv` は既存ディレクトリ内へ一時フォルダを移動し、成功扱いにします。同じ保存先を使う全実行で共有するロックを取得し、存在確認から移動まで保護してください。ぶら下がったsymlinkも存在扱いにするなら `-L` も必要です。 |
| 見張りの削除再試行 | **必須・一部未解消** | [lab_lib.sh:327](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:327) の `runpodctl remove` と333行の `stop` に実行時間の上限がありません。そこでハングすると、後続のDELETE再試行や停止へ進まずPodが残ります。両方に時間制限を設け、タイムアウト後も再試行してください。現テストはこのハングを扱っていません。 |
| ログ更新時刻の取得 | **解消** | GNU `stat -c %Y` → `date -r`、数値以外なら `age=-` の実装を確認しました。今回の説明どおり、GNU `date -r FILE` 自体も有効なので、前回の「Ubuntuで使えない」という指摘は訂正します。 |
| Mac側の一覧比較 | **主要部分は解消・推奨あり** | `lab_list_files` の終了コードとPod一覧の非空、`diff` の終了コード0を確認しています。ただし [lab_lib.sh:284](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:284) と [hf_upload_ckpt.py:29](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/pi05/openpi_addon/hf_upload_ckpt.py:29) の `os.walk` はディレクトリ走査エラーを既定で無視します。`onerror` で例外にし、不完全な一覧を成功として返さないことを推奨します。 |
| 片付け前の見張り延長 | **解消** | アップロード前・scp前の延長、一時ファイルからの `mv`、失敗時の警告を確認しました。 |
| Macの `HF_TOKEN` | **解消** | `env -u HF_TOKEN` を確認しました。 |
| 見張りなしでの継続 | **据え置き** | 警告・就寝案内への注意・結果ファイルへの注意は実装済みです。鍵の存在だけでは削除権限を確認できません。継続可否は依頼どおり判断待ちとして扱います。 |
| Pod作成から見張り設置まで | **据え置き** | SSH接続後に設置する構成のため、設置前にMacが停止するとPodが残るリスクは変わりません。 |

優先する修正は、**見守り開始前の上限判定、Pod一覧取得の終了コード、保存先の共有ロック、`runpodctl` の時間制限**です。ファイル変更・実機操作・Pod操作・Hugging Face操作は行っていません。
```

### review_request_20261031_lab_train_r3.md

```markdown
# コードレビュー依頼 R3：lab_train.sh（2026-10-31 依頼 49）

前回: docs/review_result_20261031_lab_train_codex_r2.md
対象は R2 と同じ（新しいファイルと `git diff HEAD -- lab_lib.sh lab_start.sh`）。`./test_lab_train.sh` OK 118、`./test_lab_start.sh` OK 93、`python3 pi05/test_hf_upload_ckpt.py` 9 件 OK。

## R2 の指摘への対応
| 指摘 | 分類 | 反映 | 対応内容 |
|---|---|---|---|
| 見守りに入る stage の上限の確かめで, 終わった学習を消す | 必須 | 反映 | `stage "6. ..." nolimit` で上限を見ない。上限はループの中で, 様子を取って終わっていないときだけ。テスト 11f（学習を始めるのに手間取り, 見守りに入ったときにもう上限を過ぎている・学習は終わっている → 成功） |
| Pod 側の一覧の ssh の終了コード・pipefail | 必須 | 反映 | リモートに `set -o pipefail`。ssh の終了コードが 0・空でない・_CHECKPOINT_METADATA がある、のときだけ使う。テスト 11g（一部の行と終了コード 1 → 上げない） |
| KIOXIA の置き先の確かめと mv が別 | 必須 | 反映 | `mkdir "$dest"`（あれば失敗）で置き先を取ってから一時フォルダの中身を移し, rmdir。移したあともう一度 Pod 側と比べる。`-L`（壊れた symlink）もあるとみなす |
| 見張りの runpodctl に時間の上限がない | 必須 | 反映 | `timeout 60 runpodctl remove/stop`（テストでは 1 秒の偽物）。テスト: runpodctl が固まっても次へ進み, 最後まで行く |
| os.walk が読めないフォルダを黙って飛ばす | 推奨 | 反映 | lab_list_files・hf_upload_ckpt.py とも onerror で失敗にする（hf_upload_ckpt.py は HFUP error）。テストを足した |

## 見てほしい点
1. R2 の必須 4 点が解消したか
2. 直したことで新しい穴（Pod が残る・終わった学習を消す・KIOXIA の既存を書き換える）ができていないか

ファイル変更・実機操作・Pod の操作・Hugging Face の操作はしないでください。読み取りだけでお願いします。日本語で、表（項目 / 判定 / 確認結果・修正案）と、必須 / 推奨 / 据え置きの分類で返してください。
```

### review_result_20261031_lab_train_codex_r3.md

```markdown
# codex レビュー結果 R3：lab_train.sh（2026-10-31 依頼 49）

依頼文: docs/review_request_20261031_lab_train_r3.md（codex exec -s read-only）

**判定：R2 の必須4点は解消しています。今回の修正による新たな必須指摘はありません。推奨1点と、従来の据え置き2点が残ります。**

| 項目 | 判定 | 確認結果・修正案 |
|---|---|---|
| 見守り開始前に、完了済み学習を上限で消す | 必須・解消 | [lab_train.sh:573](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_train.sh:573) の `nolimit` と、ループ内の完了優先判定を確認。開始処理中に上限を過ぎても、完了条件を満たせば回収へ進みます。11f が対象経路を扱っています。 |
| Pod 側の部分一覧を成功扱いする | 必須・解消 | [lab_lib.sh:275](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:275) の `pipefail` と、[lab_train.sh:356](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_train.sh:356) のSSH終了コード・非空・メタデータの確認を確認。11g の部分出力＋終了コード1はアップロードへ進みません。 |
| KIOXIA の保存先競合・既存上書き | 必須・解消 | `mkdir "$dest"` に成功した実行だけが移動するため、同じスクリプト同士の競合を防げます。既存先への比較のみの分岐、`-L`、移動後の再比較も確認しました。この方式なら前回提案した共有ロックは不要です。 |
| 見張りの `runpodctl` が固まる | 必須・解消 | [lab_lib.sh:329](https://pixelstomotors.com/Users/shimazueiichi/r2r2r-scripts/lab_lib.sh:329) の remove と335行の stop に時間制限が入り、失敗後も再試行・最終処理へ進みます。ハングを扱うテストも追加されています。 |
| 読めないフォルダの黙示的な省略 | 推奨・解消 | `lab_list_files` と `hf_upload_ckpt.py` の両方で `os.walk(..., onerror=err)` を確認。走査失敗を比較成功・アップロード成功として扱いません。 |
| 隠しファイルが残ると保存失敗になる | **推奨・新規** | `place_ckpt` の `mv "$tmp"/*` は隠しファイルを移しません。一時フォルダ直下に `.DS_Store` や `._*` があると、一覧比較は通っても `rmdir` が失敗し、モデルを移せていても保存失敗になります。サブシェル内で `dotglob`・`nullglob` を使って全項目を移すなどの対応と、隠しファイル入りのテストを推奨します。 |
| 見張りが使えなくても継続する | 据え置き | 警告と結果への注意は維持されています。鍵の存在確認は削除権限の確認にはならず、Mac停止時にPodが残るリスクは変わりません。 |
| Pod作成から見張り設置まで | 据え置き | SSH接続後に設置するため、それ以前のMac停止への保険はありません。 |
| `lab_start.sh` の共通関数化 | 据え置き・問題なし | 差分を照合し、定数と3b〜3fのコマンドに意図しない動作変更は見当たりません。 |

読み取りのみで確認しました。テストはファイルを作成するため再実行せず、ご提示の **118件・93件・9件OK** とテストコードを確認しています。ファイル変更・実機操作・Pod操作・Hugging Face操作は行っていません。

## 反映（Claude Code）
- 推奨（隠しファイル）: place_ckpt の移動をサブシェルの dotglob・nullglob で行う。偽の hf download に ._params・.DS_Store を足し、テスト 1 で 1499 に移っていることを確かめる（OK 118）
```


## 22:02〜01:25 の学習：1,500 ステップ、loss 0.0075 → 0.0028、約313円

`./lab_train.sh --log Log17` を 22:02 に打ちました。途中で2つ止まって見える所がありましたが、学習は最後まで回りました。

| 段階 | 時刻 | かかった時間 |
|---|---|---|
| Pod を作る（A40・1時間 0.59ドル） | 22:02 | 2秒 |
| Pod が立ち上がるまで待つ（見張りを置く ssh が返らなかった） | 22:02〜22:13 | 641秒 |
| 準備（スクリプト・鍵・3999 の取得・openpi・uv sync・設定） | 22:13〜22:15 | 2分14秒 |
| 学習データ（97MB）を送る | 22:15〜22:19 | 243秒 |
| 学習データの変換と、正規化の値を置く | 22:19〜22:20 | 45秒 |
| 学習（1,500 ステップ） | 22:20〜01:22 | 3時間01分 |
| Hugging Face へ上げる・ログを持ち帰る | 01:22〜01:23 | 約1分 |
| Pod を消す | 01:23 | 借りた時間 3.36時間・約1.98ドル（約313円） |
| KIOXIA へ Hugging Face から取る | 01:23〜01:25 | 117秒 |

### 22:02：見張りを置く ssh が10分以上返らなかった

「Pod が立ち上がるまで待つ」で、Pod 側に上限の見張り（約束の時刻を過ぎたら Pod が自分を消す仕組み）を起動する1回の ssh が、10分以上返りませんでした。Mac の別のタブで、どのプロセスが待っているかを見ると、ssh が1本、ずっと残っていました。その ssh だけを止めると、見張りの返事（`WATCHDOG run=1 pod=1 key=1`）はもう届いていて、Pod 側の見張りも動いていました。

原因は、依頼52 の報告で分かりました。`pgrep … || setsid nohup … &` の `&` が、見張りの起動だけでなく「pgrep … || setsid nohup …」の全体に付いていました。そのため、裏の子シェルが ssh の出力をつかんだまま、見張りが終わるまで待っていました。

### 22:20〜01:22：見守りの画面に step が出なかった

学習が始まってから終わるまで、5分おきの見守りの行は `step -/1500  loss -` のままでした。前回の学習では2〜3分で `Step 0:` が出ていたので、何かで止まっているように見えました。持ち帰ったログを見ると、学習は 22:20 から正常に進んでいて、`Step 0:` から `Step 1450:` までの行が、学習の最後にまとめて書き出されていました。出力がためこまれていたためです。これも依頼52 で直しています。

この夜は、別の作業（サービスロボット導入シミュレーションの Unity の録画）が同じ Mac で 22:50 から動いていて、ターミナルの画面が固まりました。見守りの lab_train.sh は画面の裏で動き続け、5分おきの記録も書かれていました。学習は Pod の中で回っているので、Mac の重さの影響は受けていません。

### loss の下がり方

| Step | loss | grad_norm |
|---|---|---|
| 0 | 0.0075 | 0.0573 |
| 50 | 0.0125 | 0.0902 |
| 100 | 0.0077 | 0.0542 |
| 250 | 0.0048 | 0.0447 |
| 500 | 0.0042 | 0.0435 |
| 750 | 0.0039 | 0.0462 |
| 1000 | 0.0034 | 0.0461 |
| 1250 | 0.0027 | 0.0383 |
| 1450 | 0.0028 | 0.0369 |

Step 50 で一度 0.0125 に上がったのは、学習率の立ち上がり（100 ステップ）の途中で、足した5本のデータに合わせて動き始めたためと見ています。そのあとは下がり続けました。loss はお手本と直した動きの再現度で、ブロックの位置に合わせて手を伸ばせるか、直す回数が減るかは、実機で確かめます。

- 1ステップの時間：平均約7.25秒（3時間01分11秒で1,500ステップ）。前回の A40 の学習は 7.0〜7.1 秒
- GPU のメモリ：41,281 MiB（先に9割を確保する設定のため。実際に使った量ではない）
- GPU の使用率：30秒おきの記録 367回で、中央値 100%、平均 96%

### 持ち帰ったモデル

Hugging Face の `PixelstoMotors/pi05-mecharm-trim-corr-lora-v1`（非公開）に、37ファイル・6,335,841,169 バイトを上げ、名前とバイト数が全部合うのを確かめました。KIOXIA の `checkpoints/pi05_mecharm_trim_corr_lora_v1/1499/` にも同じ37ファイルがそろっていて、Pod 側の一覧と名前・バイト数がすべて一致しました。

まとめのファイルには「KIOXIA に置けなかった」と出ていますが、モデルの中身は全部移っています。KIOXIA（exFAT）が自動で作る `._` のファイルを移そうとしてエラーになっただけで、空の作業用フォルダが1つ残りました。これも依頼52 と依頼55 で直しています。

### 学習の端末の記録 lab_train_20261031_220221.txt

```text
[LOG   ] ターミナルの出力を残します → /Volumes/KIOXIA/r2r2r-data/lab/Log17/train/lab_train_20261031_220221.txt
[LAB   ] 2026-10-31 22:02:21  学習  GPU=NVIDIA A40 (借りられなければ NVIDIA RTX A6000 NVIDIA L40S)
         pi05_mecharm_trim_corr_lora --exp-name=trim_corr_v3  steps=1500  init=/workspace/ckpt/3999/params  上限 5 時間  記録 /Volumes/KIOXIA/r2r2r-data/lab/Log17/train

=== 0. 送るものと Mac の道具を確かめる  (22:02:21)
[DATA  ] tar 96670208 バイト  (/Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2_corr_v3/mecharm_redblock_box_teach_v1_trim2_corr_v3_raw_episodes.tar)
[MAC   ] 終わるまでスリープしないようにした (caffeinate pid 54405). ふたは閉じない
    (0 秒)

=== 1. Pod を作る  (22:02:21)
[POD   ] NVIDIA A40 を借ります (空きがなければ 30 秒おきに 5 回まで)
[POD   ] 作った: id e2bkjq722a33a1  GPU=NVIDIA A40  1時間 0.59 ドル  (記録 /Volumes/KIOXIA/r2r2r-data/lab/Log17/train/lab_pod.json)
[POD   ] 上限: 11-01 03:02 (5 時間) を過ぎたら, ログを持ち帰って消します
    (2 秒)

=== 2. Pod が立ち上がるまで待つ  (22:02:23)
[POD   ] SSH の IP とポートを API から受け取った (<POD_IP>:<SSH_PORT>)
[POD   ] 入れた: 2b07075eed8d
NVIDIA A40, 46068 MiB
[WATCH ] Pod 側の見張りを置いた: 11-01 04:02 を過ぎたら Pod が自分を消す (Pod 用の鍵. Mac の鍵は送っていない)
    (641 秒)

=== 3a. スクリプトを送る  (22:13:04)
    (58 秒)

=== 3b. huggingface_hub を入れ, 鍵を渡す  (22:14:02)
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.
[90mHint: The `hf-cli` skill is not installed. Run `hf skills add -g` to teach your AI agents how to use the `hf` CLI.[0m
[32m✓ Logged in[0m
  user: PixelstoMotors
    (15 秒)

=== 3c. 続きから学習するモデルを取る (PixelstoMotors/pi05-mecharm-trim-lora-v1 → /workspace/ckpt/3999)  (22:14:17)

Fetching 33 files:   0%|          | 0/33 [00:00<?, ?it/s]
Fetching 33 files:   3%|▎         | 1/33 [00:00<00:09,  3.47it/s]
Fetching 33 files:  27%|██▋       | 9/33 [00:00<00:01, 17.01it/s]
Fetching 33 files:  33%|███▎      | 11/33 [00:01<00:04,  4.62it/s]
Fetching 33 files:  36%|███▋      | 12/33 [00:02<00:04,  4.63it/s]
Fetching 33 files:  42%|████▏     | 14/33 [00:03<00:06,  3.16it/s]
Fetching 33 files:  45%|████▌     | 15/33 [00:04<00:07,  2.41it/s]
Fetching 33 files:  48%|████▊     | 16/33 [00:05<00:08,  2.00it/s]
Fetching 33 files:  52%|█████▏    | 17/33 [00:05<00:08,  1.94it/s]
Fetching 33 files:  55%|█████▍    | 18/33 [00:05<00:06,  2.19it/s]
Fetching 33 files:  61%|██████    | 20/33 [00:06<00:04,  3.08it/s]
Fetching 33 files:  70%|██████▉   | 23/33 [00:06<00:02,  3.92it/s]
Fetching 33 files:  73%|███████▎  | 24/33 [00:07<00:02,  3.20it/s]
Fetching 33 files:  79%|███████▉  | 26/33 [00:07<00:01,  3.84it/s]
Fetching 33 files:  88%|████████▊ | 29/33 [00:07<00:00,  5.72it/s]
Fetching 33 files:  91%|█████████ | 30/33 [00:08<00:00,  3.60it/s]
Fetching 33 files:  94%|█████████▍| 31/33 [00:08<00:00,  3.60it/s]
Fetching 33 files: 100%|██████████| 33/33 [00:09<00:00,  4.13it/s]
Fetching 33 files: 100%|██████████| 33/33 [00:09<00:00,  3.61it/s]
[32m✓ Downloaded[0m
  path: /workspace/ckpt/3999
6.0G	/workspace/ckpt/3999
    (13 秒)

=== 3d. openpi を取る (215abfb)  (22:14:30)
215abfb docs(droid): fix config search instruction (#1023)
    (22 秒)

=== 3e. uv sync  (22:14:52)
downloading uv 0.13.6 x86_64-unknown-linux-gnu
WARN: The following commands are shadowed by other commands in your PATH: uv uvx
Using CPython 3.11.13 interpreter at: /usr/bin/python3.11
Creating virtual environment at: .venv
Resolved 279 packages in 4ms
   Building openpi-client @ file:///workspace/openpi/packages/openpi-client
   Building openpi @ file:///workspace/openpi
   Updating https://github.com/huggingface/lerobot (0cf864870cf29f4738d3ade893e6fd13fbd7cdb5)
Downloading virtualenv (5.8MiB)
Downloading sympy (6.0MiB)
Downloading nvidia-cuda-cupti-cu12 (8.5MiB)
Downloading hf-transfer (3.4MiB)
Downloading lxml (4.7MiB)
Downloading numpy (17.4MiB)
Downloading mujoco (4.4MiB)
Downloading fonttools (4.7MiB)
Downloading nvidia-cudnn-cu12 (544.5MiB)
Downloading numba (3.7MiB)
Downloading opencv-python (60.1MiB)
Downloading labmaze (4.7MiB)
Downloading opencv-python-headless (47.7MiB)
Downloading nvidia-nccl-cu12 (192.0MiB)
Downloading cmake (26.6MiB)
Downloading llvmlite (40.4MiB)
Downloading ruff (11.0MiB)
Downloading h5py (4.3MiB)
Downloading torch (783.1MiB)
Downloading transformers (10.3MiB)
Downloading pillow (4.4MiB)
Downloading pyarrow (40.3MiB)
Downloading nvidia-curand-cu12 (53.7MiB)
Downloading scipy (35.9MiB)
Downloading pandas (12.5MiB)
Downloading wandb (20.4MiB)
Downloading jaxlib (100.2MiB)
Downloading polars (34.6MiB)
Downloading nvidia-cuda-nvrtc-cu12 (22.6MiB)
Downloading nvidia-cublas-cu12 (374.9MiB)
Downloading nvidia-cusparse-cu12 (206.5MiB)
Downloading numcodecs (8.4MiB)
Downloading pyopengl (3.0MiB)
Downloading triton (148.5MiB)
Downloading av (34.7MiB)
Downloading jax-cuda12-pjrt (99.8MiB)
Downloading hf-xet (4.9MiB)
Downloading rerun-sdk (68.1MiB)
Downloading dm-control (37.5MiB)
Downloading torchvision (7.1MiB)
Downloading nvidia-cuda-nvcc-cu12 (38.7MiB)
Downloading matplotlib (8.2MiB)
Downloading nvidia-cusolver-cu12 (150.9MiB)
Downloading nvidia-cufft-cu12 (190.9MiB)
Downloading nvidia-cusparselt-cu12 (149.5MiB)
Downloading diffusers (3.4MiB)
Downloading nvidia-nvjitlink-cu12 (18.8MiB)
Downloading jax-cuda12-plugin (15.9MiB)
Downloading tensorstore (17.5MiB)
Downloading imageio-ffmpeg (28.1MiB)
 Downloaded pyopengl
Downloading debugpy (3.0MiB)
 Downloaded hf-transfer
 Downloaded diffusers
Downloading tokenizers (2.9MiB)
Downloading jax (2.3MiB)
 Downloaded numba
Downloading widgetsnbextension (2.1MiB)
 Downloaded h5py
 Downloaded mujoco
Downloading ml-dtypes (2.1MiB)
 Downloaded pillow
Downloading networkx (1.9MiB)
 Downloaded labmaze
Downloading pydantic-core (1.9MiB)
 Downloaded fonttools
Downloading aiohttp (1.6MiB)
 Downloaded lxml
Downloading jedi (1.5MiB)
Downloading kiwisolver (1.4MiB)
 Downloaded hf-xet
Downloading torchcodec (1.3MiB)
 Downloaded widgetsnbextension
 Downloaded sympy
 Downloaded virtualenv
Downloading sentencepiece (1.2MiB)
 Downloaded jax
Downloading pygments (1.2MiB)
Downloading setuptools (1.1MiB)
Downloading nvidia-cufile-cu12 (1.1MiB)
 Downloaded debugpy
Downloading pymunk (1.0MiB)
 Downloaded tokenizers
 Downloaded kiwisolver
 Downloaded ml-dtypes
 Downloaded aiohttp
 Downloaded networkx
 Downloaded pydantic-core
 Downloaded torchcodec
 Downloaded jedi
 Downloaded torchvision
 Downloaded sentencepiece
 Downloaded pygments
 Downloaded nvidia-cufile-cu12
 Downloaded setuptools
 Downloaded pymunk
 Downloaded matplotlib
 Downloaded nvidia-cuda-cupti-cu12
 Downloaded numcodecs
   Building evdev==1.9.2
 Downloaded transformers
 Downloaded ruff
   Building antlr4-python3-runtime==4.9.3
 Downloaded pandas
 Downloaded jax-cuda12-plugin
 Downloaded numpy
 Downloaded tensorstore
      Built openpi-client @ file:///workspace/openpi/packages/openpi-client
 Downloaded nvidia-nvjitlink-cu12
      Built openpi @ file:///workspace/openpi
 Downloaded wandb
 Downloaded nvidia-cuda-nvrtc-cu12
      Built antlr4-python3-runtime==4.9.3
 Downloaded imageio-ffmpeg
 Downloaded cmake
 Downloaded polars
 Downloaded av
 Downloaded scipy
 Downloaded dm-control
 Downloaded nvidia-cuda-nvcc-cu12
 Downloaded llvmlite
 Downloaded pyarrow
 Downloaded opencv-python-headless
      Built evdev==1.9.2
 Downloaded nvidia-curand-cu12
 Downloaded opencv-python
 Downloaded rerun-sdk
    Updated https://github.com/huggingface/lerobot (0cf864870cf29f4738d3ade893e6fd13fbd7cdb5)
   Building lerobot @ git+https://github.com/huggingface/lerobot@0cf864870cf29f4738d3ade893e6fd13fbd7cdb5
 Downloaded jax-cuda12-pjrt
 Downloaded jaxlib
      Built lerobot @ git+https://github.com/huggingface/lerobot@0cf864870cf29f4738d3ade893e6fd13fbd7cdb5
 Downloaded triton
 Downloaded nvidia-cusparselt-cu12
 Downloaded nvidia-cusolver-cu12
 Downloaded nvidia-cufft-cu12
 Downloaded nvidia-nccl-cu12
 Downloaded nvidia-cusparse-cu12
 Downloaded nvidia-cublas-cu12
 Downloaded nvidia-cudnn-cu12
 Downloaded torch
Prepared 240 packages in 16.43s
Installed 240 packages in 1.71s
 + absl-py==2.3.0
 + aiohappyeyeballs==2.6.1
 + aiohttp==3.12.4
 + aiosignal==1.3.2
 + annotated-types==0.7.0
 + antlr4-python3-runtime==4.9.3
 + asttokens==3.0.0
 + attrs==25.3.0
 + augmax==0.4.1
 + av==17.0.0
 + beartype==0.19.0
 + beautifulsoup4==4.13.4
 + blinker==1.9.0
 + cachetools==5.5.2
 + certifi==2025.4.26
 + cffi==1.17.1
 + cfgv==3.4.0
 + charset-normalizer==3.4.2
 + chex==0.1.90
 + click==8.2.1
 + cloudpickle==3.1.1
 + cmake==4.0.2
 + comm==0.2.2
 + contourpy==1.3.2
 + crc32c==2.7.1
 + cycler==0.12.1
 + datasets==3.6.0
 + debugpy==1.8.14
 + decorator==5.2.1
 + deepdiff==8.5.0
 + diffusers==0.33.1
 + dill==0.3.8
 + distlib==0.3.9
 + dm-control==1.0.14
 + dm-env==1.6
 + dm-tree==0.1.9
 + docker-pycreds==0.4.0
 + docstring-parser==0.16
 + donfig==0.8.1.post1
 + draccus==0.10.0
 + einops==0.8.1
 + equinox==0.12.2
 + etils==1.12.2
 + evdev==1.9.2
 + executing==2.2.0
 + farama-notifications==0.0.4
 + filelock==3.18.0
 + flask==3.1.1
 + flatbuffers==25.2.10
 + flax==0.10.2
 + fonttools==4.58.1
 + frozenlist==1.6.0
 + fsspec==2025.3.0
 + gcsfs==2025.3.0
 + gdown==5.2.0
 + gitdb==4.0.12
 + gitpython==3.1.44
 + glfw==2.9.0
 + google-api-core==2.24.2
 + google-auth==2.40.2
 + google-auth-oauthlib==1.2.2
 + google-cloud-core==2.4.3
 + google-cloud-storage==3.1.0
 + google-crc32c==1.7.1
 + google-resumable-media==2.7.2
 + googleapis-common-protos==1.70.0
 + gym-aloha==0.1.1
 + gymnasium==0.29.1
 + h5py==3.13.0
 + hf-transfer==0.1.9
 + hf-xet==1.1.2
 + huggingface-hub==0.32.3
 + humanize==4.12.3
 + identify==2.6.12
 + idna==3.10
 + imageio==2.37.0
 + imageio-ffmpeg==0.6.0
 + importlib-metadata==8.7.0
 + importlib-resources==6.5.2
 + iniconfig==2.1.0
 + inquirerpy==0.3.4
 + ipykernel==6.29.5
 + ipython==9.2.0
 + ipython-pygments-lexers==1.1.1
 + ipywidgets==8.1.7
 + itsdangerous==2.2.0
 + jax==0.5.3
 + jax-cuda12-pjrt==0.5.3
 + jax-cuda12-plugin==0.5.3
 + jaxlib==0.5.3
 + jaxtyping==0.2.36
 + jedi==0.19.2
 + jinja2==3.1.6
 + jsonlines==4.0.0
 + jupyter-client==8.6.3
 + jupyter-core==5.8.1
 + jupyterlab-widgets==3.0.15
 + kiwisolver==1.4.8
 + labmaze==1.0.6
 + lerobot==0.1.0 (from git+https://github.com/huggingface/lerobot@0cf864870cf29f4738d3ade893e6fd13fbd7cdb5)
 + llvmlite==0.44.0
 + lxml==5.4.0
 + markdown-it-py==3.0.0
 + markupsafe==3.0.2
 + matplotlib==3.10.3
 + matplotlib-inline==0.1.7
 + mdurl==0.1.2
 + mergedeep==1.3.4
 + ml-collections==1.0.0
 + ml-dtypes==0.4.1
 + mpmath==1.3.0
 + msgpack==1.1.0
 + mujoco==2.3.7
 + multidict==6.4.4
 + multiprocess==0.70.16
 + mypy-extensions==1.1.0
 + nest-asyncio==1.6.0
 + networkx==3.5
 + nodeenv==1.9.1
 + numba==0.61.2
 + numcodecs==0.16.1
 + numpy==1.26.4
 + numpydantic==1.6.9
 + nvidia-cublas-cu12==12.6.4.1
 + nvidia-cuda-cupti-cu12==12.6.80
 + nvidia-cuda-nvcc-cu12==12.9.41
 + nvidia-cuda-nvrtc-cu12==12.6.77
 + nvidia-cuda-runtime-cu12==12.6.77
 + nvidia-cudnn-cu12==9.5.1.17
 + nvidia-cufft-cu12==11.3.0.4
 + nvidia-cufile-cu12==1.11.1.6
 + nvidia-curand-cu12==10.3.7.77
 + nvidia-cusolver-cu12==11.7.1.2
 + nvidia-cusparse-cu12==12.5.4.2
 + nvidia-cusparselt-cu12==0.6.3
 + nvidia-ml-py==12.575.51
 + nvidia-nccl-cu12==2.26.2
 + nvidia-nvjitlink-cu12==12.6.85
 + nvidia-nvtx-cu12==12.6.77
 + oauthlib==3.2.2
 + omegaconf==2.3.0
 + opencv-python==4.11.0.86
 + opencv-python-headless==4.11.0.86
 + openpi==0.1.0 (from file:///workspace/openpi)
 + openpi-client==0.1.0 (from file:///workspace/openpi/packages/openpi-client)
 + opt-einsum==3.4.0
 + optax==0.2.4
 + orbax-checkpoint==0.11.13
 + orderly-set==5.4.1
 + packaging==25.0
 + pandas==2.2.3
 + parso==0.8.4
 + pexpect==4.9.0
 + pfzy==0.3.4
 + pillow==11.2.1
 + platformdirs==4.3.8
 + pluggy==1.6.0
 + polars==1.30.0
 + pre-commit==4.2.0
 + prompt-toolkit==3.0.51
 + propcache==0.3.1
 + proto-plus==1.26.1
 + protobuf==4.25.8
 + psutil==7.0.0
 + ptyprocess==0.7.0
 + pure-eval==0.2.3
 + pyarrow==20.0.0
 + pyasn1==0.6.1
 + pyasn1-modules==0.4.2
 + pycparser==2.22
 + pydantic==2.11.5
 + pydantic-core==2.33.2
 + pygments==2.19.1
 + pymunk==7.0.0
 + pynput==1.8.1
 + pynvml==12.0.0
 + pyopengl==3.1.9
 + pyparsing==3.2.3
 + pysocks==1.7.1
 + pytest==8.3.5
 + python-dateutil==2.9.0.post0
 + python-xlib==0.33
 + pytz==2025.2
 + pyyaml==6.0.2
 + pyyaml-include==1.4.1
 + pyzmq==26.4.0
 + regex==2024.11.6
 + requests==2.32.3
 + requests-oauthlib==2.0.0
 + rerun-sdk==0.23.1
 + rich==14.0.0
 + rsa==4.9.1
 + ruff==0.11.12
 + safetensors==0.5.3
 + scipy==1.15.3
 + sentencepiece==0.2.0
 + sentry-sdk==2.29.1
 + setproctitle==1.3.6
 + setuptools==80.9.0
 + shtab==1.7.2
 + simplejson==3.20.1
 + six==1.17.0
 + smmap==5.0.2
 + soupsieve==2.7
 + stack-data==0.6.3
 + sympy==1.14.0
 + tensorstore==0.1.74
 + termcolor==3.1.0
 + tokenizers==0.21.1
 + toml==0.10.2
 + toolz==1.0.0
 + torch==2.7.1
 + torchcodec==0.4.0
 + torchvision==0.22.1
 + tornado==6.5.1
 + tqdm==4.67.1
 + tqdm-loggable==0.2
 + traitlets==5.14.3
 + transformers==4.53.2
 + treescope==0.1.9
 + triton==3.3.1
 + typeguard==4.4.2
 + typing-extensions==4.13.2
 + typing-inspect==0.9.0
 + typing-inspection==0.4.1
 + tyro==0.9.22
 + tzdata==2025.2
 + urllib3==2.4.0
 + virtualenv==20.31.2
 + wadler-lindig==0.1.6
 + wandb==0.19.11
 + wcwidth==0.2.13
 + websockets==15.0.1
 + werkzeug==3.1.3
 + widgetsnbextension==4.0.14
 + wrapt==1.14.1
 + xxhash==3.5.0
 + yarl==1.20.0
 + zarr==3.0.8
 + zipp==3.22.0
    (23 秒)

=== 3f. addon・設定・assets  (22:15:15)
installed: policies/mecharm_policy.py + config.py (pi05_mecharm_lora)
installed: pi05_mecharm_trim_lora (repo_id=local/mecharm_redblock_box_teach_v1_trim2, 4,000 steps)
    (3 秒)

=== 4a. tar を送る  (22:15:18)
-rwx------ 1 root root 96670208 Oct 31 13:19 /workspace/data/mecharm_redblock_box_teach_v1_trim2_corr_v3_raw_episodes.tar
    (243 秒)

=== 4b. pod_prep_trim_corr.sh 1500 /workspace/ckpt/3999/params  (22:19:21)
== 1. tar を広げる → /workspace/data/mecharm_redblock_box_teach_v1_trim2_corr_v3
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
   エピソード 24 本 (Mac で作ったときは 24 本)
== 2. 学習設定 pi05_mecharm_trim_corr_lora を足す (steps=1500 init=/workspace/ckpt/3999/params)
installed: pi05_mecharm_trim_corr_lora (repo_id=local/mecharm_redblock_box_teach_v1_trim2_corr_v3, 1500 steps, init=/workspace/ckpt/3999/params)
== 3. LeRobot 形式に変換 (local/mecharm_redblock_box_teach_v1_trim2_corr_v3)

Map:   0%|          | 0/118 [00:00<?, ? examples/s]
Map:  72%|███████▏  | 85/118 [00:00<00:00, 829.34 examples/s]
Map: 100%|██████████| 118/118 [00:00<00:00, 725.70 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 72.31ba/s]
  pi05_20261031_175527: 118 steps

Map:   0%|          | 0/152 [00:00<?, ? examples/s]
Map:  68%|██████▊   | 103/152 [00:00<00:00, 1015.99 examples/s]
Map: 100%|██████████| 152/152 [00:00<00:00, 858.50 examples/s] 

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 50.49ba/s]
  pi05_20261031_180435: 152 steps

Map:   0%|          | 0/126 [00:00<?, ? examples/s]
Map:  87%|████████▋ | 109/126 [00:00<00:00, 1066.47 examples/s]
Map: 100%|██████████| 126/126 [00:00<00:00, 939.32 examples/s] 

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 62.92ba/s]
  pi05_20261031_181946: 126 steps

Map:   0%|          | 0/197 [00:00<?, ? examples/s]
Map:  56%|█████▌    | 110/197 [00:00<00:00, 1082.30 examples/s]
Map: 100%|██████████| 197/197 [00:00<00:00, 920.09 examples/s] 

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 52.79ba/s]
  pi05_20261031_182545: 197 steps

Map:   0%|          | 0/133 [00:00<?, ? examples/s]
Map:  91%|█████████ | 121/133 [00:00<00:00, 1191.80 examples/s]
Map: 100%|██████████| 133/133 [00:00<00:00, 1071.29 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 117.78ba/s]
  pi05_20261031_184016: 133 steps

Map:   0%|          | 0/144 [00:00<?, ? examples/s]
Map:  76%|███████▌  | 109/144 [00:00<00:00, 1078.05 examples/s]
Map: 100%|██████████| 144/144 [00:00<00:00, 888.94 examples/s] 

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 62.38ba/s]
  run_0001_20261019_183454: 144 steps

Map:   0%|          | 0/147 [00:00<?, ? examples/s]
Map:  90%|█████████ | 133/147 [00:00<00:00, 1312.77 examples/s]
Map: 100%|██████████| 147/147 [00:00<00:00, 1169.30 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 131.02ba/s]
  run_0001_20261019_191257: 147 steps

Map:   0%|          | 0/144 [00:00<?, ? examples/s]
Map:  99%|█████████▉| 143/144 [00:00<00:00, 1407.97 examples/s]
Map: 100%|██████████| 144/144 [00:00<00:00, 1225.94 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 87.22ba/s]
  run_0001_20261019_191347: 144 steps

Map:   0%|          | 0/163 [00:00<?, ? examples/s]
Map:  79%|███████▉  | 129/163 [00:00<00:00, 1278.69 examples/s]
Map: 100%|██████████| 163/163 [00:00<00:00, 1120.02 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 83.80ba/s]
  run_0001_20261019_191441: 163 steps

Map:   0%|          | 0/139 [00:00<?, ? examples/s]
Map:  92%|█████████▏| 128/139 [00:00<00:00, 1267.98 examples/s]
Map: 100%|██████████| 139/139 [00:00<00:00, 1085.89 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 102.20ba/s]
  run_0001_20261019_191541: 139 steps

Map:   0%|          | 0/138 [00:00<?, ? examples/s]
Map:  87%|████████▋ | 120/138 [00:00<00:00, 1188.50 examples/s]
Map: 100%|██████████| 138/138 [00:00<00:00, 1000.55 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 67.12ba/s]
  run_0001_20261019_191635: 138 steps

Map:   0%|          | 0/140 [00:00<?, ? examples/s]
Map:  91%|█████████▏| 128/140 [00:00<00:00, 1268.92 examples/s]
Map: 100%|██████████| 140/140 [00:00<00:00, 1122.51 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 111.59ba/s]
  run_0001_20261019_192343: 140 steps

Map:   0%|          | 0/138 [00:00<?, ? examples/s]
Map:  83%|████████▎ | 115/138 [00:00<00:00, 1128.26 examples/s]
Map: 100%|██████████| 138/138 [00:00<00:00, 963.53 examples/s] 

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 77.85ba/s]
  run_0001_20261019_192438: 138 steps

Map:   0%|          | 0/140 [00:00<?, ? examples/s]
Map:  81%|████████▏ | 114/140 [00:00<00:00, 1123.96 examples/s]
Map: 100%|██████████| 140/140 [00:00<00:00, 962.68 examples/s] 

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 68.41ba/s]
  run_0001_20261019_192539: 140 steps

Map:   0%|          | 0/137 [00:00<?, ? examples/s]
Map:  71%|███████   | 97/137 [00:00<00:00, 948.46 examples/s]
Map: 100%|██████████| 137/137 [00:00<00:00, 838.50 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 81.29ba/s]
  run_0001_20261019_192633: 137 steps

Map:   0%|          | 0/164 [00:00<?, ? examples/s]
Map:  82%|████████▏ | 135/164 [00:00<00:00, 1336.74 examples/s]
Map: 100%|██████████| 164/164 [00:00<00:00, 1132.95 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 102.06ba/s]
  run_0001_20261019_193404: 164 steps

Map:   0%|          | 0/159 [00:00<?, ? examples/s]
Map:  59%|█████▉    | 94/159 [00:00<00:00, 923.87 examples/s]
Map: 100%|██████████| 159/159 [00:00<00:00, 943.35 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 80.14ba/s]
  run_0001_20261019_193459: 159 steps

Map:   0%|          | 0/156 [00:00<?, ? examples/s]
Map:  91%|█████████ | 142/156 [00:00<00:00, 1400.79 examples/s]
Map: 100%|██████████| 156/156 [00:00<00:00, 1225.07 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 116.58ba/s]
  run_0001_20261019_193617: 156 steps

Map:   0%|          | 0/165 [00:00<?, ? examples/s]
Map:  82%|████████▏ | 135/165 [00:00<00:00, 1333.55 examples/s]
Map: 100%|██████████| 165/165 [00:00<00:00, 1179.83 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 96.07ba/s]
  run_0001_20261019_193825: 165 steps

Map:   0%|          | 0/151 [00:00<?, ? examples/s]
Map:  97%|█████████▋| 146/151 [00:00<00:00, 1445.62 examples/s]
Map: 100%|██████████| 151/151 [00:00<00:00, 1255.20 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 97.86ba/s]
  run_0001_20261019_193932: 151 steps

Map:   0%|          | 0/123 [00:00<?, ? examples/s]
Map:  97%|█████████▋| 119/123 [00:00<00:00, 1181.23 examples/s]
Map: 100%|██████████| 123/123 [00:00<00:00, 1008.81 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 88.07ba/s]
  run_0001_20261019_194818: 123 steps

Map:   0%|          | 0/126 [00:00<?, ? examples/s]
Map: 100%|██████████| 126/126 [00:00<00:00, 1219.59 examples/s]
Map: 100%|██████████| 126/126 [00:00<00:00, 1191.98 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 148.24ba/s]
  run_0001_20261019_194913: 126 steps

Map:   0%|          | 0/123 [00:00<?, ? examples/s]
Map: 100%|██████████| 123/123 [00:00<00:00, 1207.38 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 107.63ba/s]
  run_0001_20261019_195023: 123 steps

Map:   0%|          | 0/120 [00:00<?, ? examples/s]
Map:  98%|█████████▊| 117/120 [00:00<00:00, 1153.90 examples/s]
Map: 100%|██████████| 120/120 [00:00<00:00, 978.50 examples/s] 

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 90.37ba/s]
  run_0001_20261019_195120: 120 steps
done: 24 episodes / 3443 frames → /root/.cache/huggingface/lerobot/local/mecharm_redblock_box_teach_v1_trim2_corr_v3
== 4. 正規化の値は trim2 の値をそのまま置く (計算し直さない)
   /workspace/ckpt/3999/assets/local/mecharm_redblock_box_teach_v1_trim2/norm_stats.json → /workspace/openpi/assets/pi05_mecharm_trim_corr_lora/local/mecharm_redblock_box_teach_v1_trim2_corr_v3/norm_stats.json (sha256 80346837eb12…)
== 5. 準備できました. 学習はこのコマンドで始める (このスクリプトでは流さない):
   cd /workspace/openpi && XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_mecharm_trim_corr_lora --exp-name=trim_corr_v3 --overwrite 2>&1 | tee /workspace/logs/train_trim_corr_v3.log
    (45 秒)

=== 5. 学習を始める  (22:20:06)
[TRAIN ] 学習を始めました (Pod の中で setsid nohup. Mac とのつながりが切れても続く)
         ログ /workspace/logs/train_trim_corr_v3.log  GPU /workspace/logs/gpu_train.csv (30 秒おき)
    (6 秒)

=== 6. 学習を見守る (5 分おき)  (22:20:12)
[TRAIN ] 22:20  step -/1500  loss -  経過 0:00  上限まで 4:42

========================================================================
 学習は Pod の中で回っています. ここまで来れば寝てかまいません.
 このターミナルは閉じない・Mac のふたは閉じない (電源につないだまま).
 終わると通知が出ます. まとめは /Volumes/KIOXIA/r2r2r-data/lab/Log17/train/result_*.txt
========================================================================

[TRAIN ] 22:25  step -/1500  loss -  経過 0:05  上限まで 4:37
[TRAIN ] 22:30  step -/1500  loss -  経過 0:10  上限まで 4:31
[TRAIN ] 22:35  step -/1500  loss -  経過 0:15  上限まで 4:26
[TRAIN ] 22:40  step -/1500  loss -  経過 0:20  上限まで 4:21
[TRAIN ] 22:45  step -/1500  loss -  経過 0:25  上限まで 4:16
[TRAIN ] 22:50  step -/1500  loss -  経過 0:30  上限まで 4:11
[TRAIN ] 22:55  step -/1500  loss -  経過 0:35  上限まで 4:06
[TRAIN ] 23:00  step -/1500  loss -  経過 0:40  上限まで 4:01
[TRAIN ] 23:05  step -/1500  loss -  経過 0:45  上限まで 3:56
[TRAIN ] 23:10  step -/1500  loss -  経過 0:50  上限まで 3:51
[TRAIN ] 23:16  step -/1500  loss -  経過 0:55  上限まで 3:46
[TRAIN ] 23:21  step -/1500  loss -  経過 1:00  上限まで 3:41
[TRAIN ] 23:26  step -/1500  loss -  経過 1:05  上限まで 3:36
[TRAIN ] 23:31  step -/1500  loss -  経過 1:10  上限まで 3:31
[TRAIN ] 23:36  step -/1500  loss -  経過 1:16  上限まで 3:26
[TRAIN ] 23:41  step -/1500  loss -  経過 1:21  上限まで 3:21
[TRAIN ] 23:46  step -/1500  loss -  経過 1:26  上限まで 3:16
[TRAIN ] 23:51  step -/1500  loss -  経過 1:31  上限まで 3:10
[TRAIN ] 23:56  step -/1500  loss -  経過 1:36  上限まで 3:05
[TRAIN ] 00:01  step -/1500  loss -  経過 1:41  上限まで 3:00
[TRAIN ] 00:06  step -/1500  loss -  経過 1:46  上限まで 2:55
[TRAIN ] 00:11  step -/1500  loss -  経過 1:51  上限まで 2:50
[TRAIN ] 00:16  step -/1500  loss -  経過 1:56  上限まで 2:45
[TRAIN ] 00:21  step -/1500  loss -  経過 2:01  上限まで 2:40
[TRAIN ] 00:26  step -/1500  loss -  経過 2:06  上限まで 2:35
[TRAIN ] 00:31  step -/1500  loss -  経過 2:11  上限まで 2:30
[TRAIN ] 00:37  step -/1500  loss -  経過 2:16  上限まで 2:25
[TRAIN ] 00:42  step -/1500  loss -  経過 2:21  上限まで 2:20
[TRAIN ] 00:47  step -/1500  loss -  経過 2:26  上限まで 2:15
[TRAIN ] 00:52  step -/1500  loss -  経過 2:32  上限まで 2:10
[TRAIN ] 00:57  step -/1500  loss -  経過 2:37  上限まで 2:05
[TRAIN ] 01:02  step -/1500  loss -  経過 2:42  上限まで 2:00
[TRAIN ] 01:07  step -/1500  loss -  経過 2:47  上限まで 1:54
[TRAIN ] 01:12  step -/1500  loss -  経過 2:52  上限まで 1:49
[TRAIN ] 01:17  step -/1500  loss -  経過 2:57  上限まで 1:44
[TRAIN ] 01:22  step 1450/1500  loss 0.0028 (Step 1450 の行)  経過 3:02  上限まで 1:39
    (10947 秒)

[TRAIN ] 学習が終わりました (最後のチェックポイント 1499, loss 0.0028)
[WATCH ] Pod 側の見張りを 04:22 まで延ばした (上げる・持ち帰る間に消えないように)

=== 7a. Pod 側の一覧 (1499)  (01:22:42)
[LIST  ] 37 ファイル 6335841169 バイト (train_state なし) → /Volumes/KIOXIA/r2r2r-data/lab/Log17/train/pod_files_1499.tsv
    (4 秒)

=== 7b. Hugging Face へ上げる (PixelstoMotors/pi05-mecharm-trim-corr-lora-v1・非公開)  (01:22:46)
[HF    ] 上げるもの: 37 ファイル 6,335,841,169 バイト (train_state/ は上げない)
HFUP ok PixelstoMotors/pi05-mecharm-trim-corr-lora-v1 に 37 ファイル 6,335,841,169 バイトを上げ, 名前・バイト数が全部合うのを確かめた
    (23 秒)

=== 7d. ログを持ち帰る  (01:23:09)
[LOG   ] train_trim_corr_v3.log を持ち帰った → /Volumes/KIOXIA/r2r2r-data/lab/Log17/train/train_trim_corr_v3.log (982 行)
[LOG   ] gpu_train.csv を持ち帰った → /Volumes/KIOXIA/r2r2r-data/lab/Log17/train/gpu_train.csv (368 行)
[LOG   ] train_run.log を持ち帰った → /Volumes/KIOXIA/r2r2r-data/lab/Log17/train/train_run.log (2 行)
[LOG   ] prep_trim_corr.log を持ち帰った → /Volumes/KIOXIA/r2r2r-data/lab/Log17/train/prep_trim_corr.log (3622 行)
[LOG   ] watchdog.log は Pod にない (持ち帰れなかった)
[LOG   ] Pod 側のチェックポイントの一覧 → /Volumes/KIOXIA/r2r2r-data/lab/Log17/train/pod_checkpoints.tsv (134 ファイル)
    (42 秒)

=== Pod を消す (id e2bkjq722a33a1)  (01:23:51)
[STOP  ] 削除 (Terminate) を送った (01:23:53)
[STOP  ] Pod (id e2bkjq722a33a1) が消えたことを API で確かめた
[COST  ] 借りていた時間 201 分 30 秒 (3.36 時間) × 1時間 0.59 ドル = 約 1.98 ドル (約 313 円. 1ドル=158円)  GPU=NVIDIA A40

=== 7e. KIOXIA へ Hugging Face から取る  (01:23:53)
[KIOXIA] Hugging Face (PixelstoMotors/pi05-mecharm-trim-corr-lora-v1) から取ります → /Volumes/KIOXIA/r2r2r-data/checkpoints/pi05_mecharm_trim_corr_lora_v1/.incoming_1499_20261101_012353_54379

Fetching 38 files:   3%|▎         | 1/38 [00:00<00:17,  2.08it/s]
Fetching 38 files:   8%|▊         | 3/38 [00:00<00:06,  5.35it/s]
Fetching 38 files:  24%|██▎       | 9/38 [00:01<00:02, 10.22it/s]
Fetching 38 files:  34%|███▍      | 13/38 [00:01<00:02,  8.94it/s]
Fetching 38 files:  39%|███▉      | 15/38 [00:02<00:03,  7.21it/s]
Fetching 38 files:  45%|████▍     | 17/38 [00:10<00:24,  1.16s/it]
Fetching 38 files:  47%|████▋     | 18/38 [00:56<02:38,  7.94s/it]
Fetching 38 files:  50%|█████     | 19/38 [00:57<02:05,  6.61s/it]
Fetching 38 files:  53%|█████▎    | 20/38 [00:57<01:36,  5.35s/it]
Fetching 38 files:  55%|█████▌    | 21/38 [00:57<01:11,  4.21s/it]
Fetching 38 files:  58%|█████▊    | 22/38 [00:58<00:51,  3.25s/it]
Fetching 38 files:  61%|██████    | 23/38 [00:58<00:37,  2.49s/it]
Fetching 38 files:  63%|██████▎   | 24/38 [01:02<00:42,  3.02s/it]
Fetching 38 files:  66%|██████▌   | 25/38 [01:06<00:41,  3.19s/it]
Fetching 38 files:  68%|██████▊   | 26/38 [01:12<00:48,  4.05s/it]
Fetching 38 files:  71%|███████   | 27/38 [01:17<00:46,  4.24s/it]
Fetching 38 files:  74%|███████▎  | 28/38 [01:18<00:32,  3.20s/it]
Fetching 38 files:  76%|███████▋  | 29/38 [01:18<00:21,  2.42s/it]
Fetching 38 files:  79%|███████▉  | 30/38 [01:19<00:15,  1.90s/it]
Fetching 38 files:  82%|████████▏ | 31/38 [01:19<00:10,  1.50s/it]
Fetching 38 files:  84%|████████▍ | 32/38 [01:25<00:16,  2.74s/it]
Fetching 38 files:  89%|████████▉ | 34/38 [01:27<00:07,  1.84s/it]
Fetching 38 files:  92%|█████████▏| 35/38 [01:43<00:16,  5.53s/it]
Fetching 38 files:  95%|█████████▍| 36/38 [01:49<00:11,  5.67s/it]
Fetching 38 files:  97%|█████████▋| 37/38 [01:50<00:04,  4.42s/it]
Fetching 38 files: 100%|██████████| 38/38 [01:54<00:00,  4.23s/it]
Fetching 38 files: 100%|██████████| 38/38 [01:54<00:00,  3.02s/it]
[32m✓ Downloaded[0m
  path: /Volumes/KIOXIA/r2r2r-data/checkpoints/pi05_mecharm_trim_corr_lora_v1/.incoming_1499_20261101_012353_54379
mv: /Volumes/KIOXIA/r2r2r-data/checkpoints/pi05_mecharm_trim_corr_lora_v1/.incoming_1499_20261101_012353_54379/.__CHECKPOINT_METADATA: No such file or directory
[KIOXIA] /Volumes/KIOXIA/r2r2r-data/checkpoints/pi05_mecharm_trim_corr_lora_v1/.incoming_1499_20261101_012353_54379 から /Volumes/KIOXIA/r2r2r-data/checkpoints/pi05_mecharm_trim_corr_lora_v1/1499 へ移せない (途中まで移したかもしれない)
    (117 秒)

=== かかった時間
  0. 送るものと Mac の道具を確かめる      0 秒
  1. Pod を作る                          2 秒
  2. Pod が立ち上がるまで待つ    641 秒
  3a. スクリプトを送る             58 秒
  3b. huggingface_hub を入れ, 鍵を渡す     15 秒
  3c. 続きから学習するモデルを取る (PixelstoMotors/pi05-mecharm-trim-lora-v1 → /workspace/ckpt/3999)     13 秒
  3d. openpi を取る (215abfb)           22 秒
  3e. uv sync                              23 秒
  3f. addon・設定・assets               3 秒
  4a. tar を送る                       243 秒
  4b. pod_prep_trim_corr.sh 1500 /workspace/ckpt/3999/params     45 秒
  5. 学習を始める                     6 秒
  6. 学習を見守る (5 分おき)   10947 秒
  7a. Pod 側の一覧 (1499)               4 秒
  7b. Hugging Face へ上げる (PixelstoMotors/pi05-mecharm-trim-corr-lora-v1・非公開)     23 秒
  7d. ログを持ち帰る                42 秒
  7e. KIOXIA へ Hugging Face から取る    117 秒

[RESULT] 学習は終わりました (step 1499) が, KIOXIA に置けなかった (/Volumes/KIOXIA/r2r2r-data/checkpoints/pi05_mecharm_trim_corr_lora_v1/.incoming_1499_20261101_012353_54379 から /Volumes/KIOXIA/r2r2r-data/checkpoints/pi05_mecharm_trim_corr_lora_v1/1499 へ移せない (途中まで移したかもしれない)). Pod は消しました.
[RESULT] まとめ → /Volumes/KIOXIA/r2r2r-data/lab/Log17/train/result_20261031_220221.txt
```

### まとめ result_20261031_220221.txt

```text
lab_train.sh Log17  2026-11-01 01:25:50
結果: 学習は終わりました (step 1499) が, KIOXIA に置けなかった (/Volumes/KIOXIA/r2r2r-data/checkpoints/pi05_mecharm_trim_corr_lora_v1/.incoming_1499_20261101_012353_54379 から /Volumes/KIOXIA/r2r2r-data/checkpoints/pi05_mecharm_trim_corr_lora_v1/1499 へ移せない (途中まで移したかもしれない)). Pod は消しました.
学習: pi05_mecharm_trim_corr_lora --exp-name=trim_corr_v3  最後のチェックポイント 1499  最後の loss 0.0028 (Step 1450)
Hugging Face (PixelstoMotors/pi05-mecharm-trim-corr-lora-v1): ok PixelstoMotors/pi05-mecharm-trim-corr-lora-v1 に 37 ファイル 6,335,841,169 バイトを上げ, 名前・バイト数が全部合うのを確かめた
KIOXIA: /Volumes/KIOXIA/r2r2r-data/checkpoints/pi05_mecharm_trim_corr_lora_v1/.incoming_1499_20261101_012353_54379 から /Volumes/KIOXIA/r2r2r-data/checkpoints/pi05_mecharm_trim_corr_lora_v1/1499 へ移せない (途中まで移したかもしれない)
ログを持ち帰った → /Volumes/KIOXIA/r2r2r-data/lab/Log17/train
Pod (id e2bkjq722a33a1) は消した (API で確かめた)
借りていた時間 201 分 30 秒 (3.36 時間) × 1時間 0.59 ドル = 約 1.98 ドル (約 313 円. 1ドル=158円)
ターミナルの記録: /Volumes/KIOXIA/r2r2r-data/lab/Log17/train/lab_train_20261031_220221.txt
```

### 学習のログ train_trim_corr_v3.log

```text
13:20:22.369 [I] Running on: 2b07075eed8d                                                         (1143:train.py:196)
INFO:2026-10-31 13:20:22,794:jax._src.xla_bridge:925: Unable to initialize backend 'rocm': module 'jaxlib.xla_extension' has no attribute 'GpuAllocatorConfig'
13:20:22.794 [I] Unable to initialize backend 'rocm': module 'jaxlib.xla_extension' has no attribute 'GpuAllocatorConfig' (1143:xla_bridge.py:925)
INFO:2026-10-31 13:20:22,799:jax._src.xla_bridge:925: Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory
13:20:22.799 [I] Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory (1143:xla_bridge.py:925)
13:20:23.780 [I] Created BasePyTreeCheckpointHandler: use_ocdbt=True, use_zarr3=False, pytree_metadata_options=PyTreeMetadataOptions(support_rich_types=False), array_metadata_store=<orbax.checkpoint._src.metadata.array_metadata_store.Store object at 0x7f3614dcbf10> (1143:base_pytree_checkpoint_handler.py:334)
13:20:23.780 [I] Created BasePyTreeCheckpointHandler: use_ocdbt=True, use_zarr3=False, pytree_metadata_options=PyTreeMetadataOptions(support_rich_types=False), array_metadata_store=<orbax.checkpoint._src.metadata.array_metadata_store.Store object at 0x7f3614dcbf10> (1143:base_pytree_checkpoint_handler.py:334)
13:20:23.781 [I] [thread=MainThread] Failed to get flag value for EXPERIMENTAL_ORBAX_USE_DISTRIBUTED_PROCESS_ID. (1143:multihost.py:390)
13:20:23.781 [I] [process=0][thread=MainThread] CheckpointManager init: checkpointers=None, item_names=None, item_handlers={'assets': <openpi.training.checkpoints.CallbackHandler object at 0x7f3476393cd0>, 'train_state': <orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeCheckpointHandler object at 0x7f347615c190>, 'params': <orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeCheckpointHandler object at 0x7f34774d1f50>}, handler_registry=None (1143:checkpoint_manager.py:620)
13:20:23.781 [I] Deferred registration for item: "assets". Adding handler `<openpi.training.checkpoints.CallbackHandler object at 0x7f3476393cd0>` for item "assets" and save args `<class 'openpi.training.checkpoints.CallbackSave'>` and restore args `<class 'openpi.training.checkpoints.CallbackRestore'>` to `_handler_registry`. (1143:composite_checkpoint_handler.py:234)
13:20:23.781 [I] Deferred registration for item: "train_state". Adding handler `<orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeCheckpointHandler object at 0x7f347615c190>` for item "train_state" and save args `<class 'orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeSaveArgs'>` and restore args `<class 'orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeRestoreArgs'>` to `_handler_registry`. (1143:composite_checkpoint_handler.py:234)
13:20:23.781 [I] Deferred registration for item: "params". Adding handler `<orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeCheckpointHandler object at 0x7f34774d1f50>` for item "params" and save args `<class 'orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeSaveArgs'>` and restore args `<class 'orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeRestoreArgs'>` to `_handler_registry`. (1143:composite_checkpoint_handler.py:234)
13:20:23.781 [I] Deferred registration for item: "metrics". Adding handler `<orbax.checkpoint._src.handlers.json_checkpoint_handler.JsonCheckpointHandler object at 0x7f34766021d0>` for item "metrics" and save args `<class 'orbax.checkpoint._src.handlers.json_checkpoint_handler.JsonSaveArgs'>` and restore args `<class 'orbax.checkpoint._src.handlers.json_checkpoint_handler.JsonRestoreArgs'>` to `_handler_registry`. (1143:composite_checkpoint_handler.py:234)
13:20:23.781 [I] Initialized registry DefaultCheckpointHandlerRegistry({('assets', <class 'openpi.training.checkpoints.CallbackSave'>): <openpi.training.checkpoints.CallbackHandler object at 0x7f3476393cd0>, ('assets', <class 'openpi.training.checkpoints.CallbackRestore'>): <openpi.training.checkpoints.CallbackHandler object at 0x7f3476393cd0>, ('train_state', <class 'orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeSaveArgs'>): <orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeCheckpointHandler object at 0x7f347615c190>, ('train_state', <class 'orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeRestoreArgs'>): <orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeCheckpointHandler object at 0x7f347615c190>, ('params', <class 'orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeSaveArgs'>): <orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeCheckpointHandler object at 0x7f34774d1f50>, ('params', <class 'orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeRestoreArgs'>): <orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeCheckpointHandler object at 0x7f34774d1f50>, ('metrics', <class 'orbax.checkpoint._src.handlers.json_checkpoint_handler.JsonSaveArgs'>): <orbax.checkpoint._src.handlers.json_checkpoint_handler.JsonCheckpointHandler object at 0x7f34766021d0>, ('metrics', <class 'orbax.checkpoint._src.handlers.json_checkpoint_handler.JsonRestoreArgs'>): <orbax.checkpoint._src.handlers.json_checkpoint_handler.JsonCheckpointHandler object at 0x7f34766021d0>}). (1143:composite_checkpoint_handler.py:502)
13:20:23.782 [I] orbax-checkpoint version: 0.11.13                                                (1143:abstract_checkpointer.py:35)
13:20:23.782 [I] [process=0][thread=MainThread] Using barrier_sync_fn: <function get_barrier_sync_fn.<locals>.<lambda> at 0x7f3475dda7a0> timeout: 7200 secs and primary_host=0 for async checkpoint writes (1143:async_checkpointer.py:170)
13:20:23.782 [I] Found 0 checkpoint steps in /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3 (1143:checkpoint_manager.py:1701)
13:20:23.782 [I] [process=0][thread=MainThread] CheckpointManager created,  primary_host=0, CheckpointManagerOptions=CheckpointManagerOptions(save_interval_steps=1, max_to_keep=1, keep_time_interval=None, keep_period=1000, should_keep_fn=None, best_fn=None, best_mode='max', keep_checkpoints_without_metrics=True, step_prefix=None, step_format_fixed_length=None, step_name_format=None, create=False, cleanup_tmp_directories=False, save_on_steps=frozenset(), single_host_load_and_broadcast=False, todelete_subdir=None, enable_background_delete=False, read_only=False, enable_async_checkpointing=True, async_options=AsyncOptions(timeout_secs=7200, barrier_sync_fn=None, post_finalization_callback=None, create_directories_asynchronously=True), multiprocessing_options=MultiprocessingOptions(primary_host=0, active_processes=None, barrier_sync_key_prefix=None), should_save_fn=None, file_options=FileOptions(path_permission_mode=None), save_root_metadata=True, temporary_path_class=None, save_decision_policy=None, prevent_write_metrics=False), root_directory=/workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3: <orbax.checkpoint.checkpoint_manager.CheckpointManager object at 0x7f3476210d90> (1143:checkpoint_manager.py:801)
13:20:23.792 [I] Downloading gs://big_vision/paligemma_tokenizer.model to /root/.cache/openpi/big_vision/paligemma_tokenizer.model (1143:download.py:86)
13:20:24.179 [I] Progress on: -/4264023 rate:- remaining:? elapsed:00:00 postfix:-                (1143:tqdm_logging.py:145)
13:20:25.181 [I] Progress on: 4.07MiB/4.07MiB rate:4,260,153.2iB/s remaining:00:00 elapsed:00:01 postfix:- (1143:tqdm_logging.py:145)
13:20:25.322 [I] Loaded norm stats from /workspace/openpi/assets/pi05_mecharm_trim_corr_lora/local/mecharm_redblock_box_teach_v1_trim2_corr_v3 (1143:config.py:197)
13:20:25.323 [I] data_config: DataConfig(repo_id='local/mecharm_redblock_box_teach_v1_trim2_corr_v3', asset_id='local/mecharm_redblock_box_teach_v1_trim2_corr_v3', norm_stats={'state': NormStats(mean=array([  0.11632019,  47.20463562,   4.25571823,   3.47346711,
       -49.80432129, -32.3266716 ,   0.42522314]), std=array([33.52104568, 21.01031494, 13.69488239,  5.18986511, 21.06582069,
        3.66200471,  0.49437681]), q01=array([-61.62614893,   1.48315994, -34.35241028,  -7.64541887,
       -86.05951349, -40.59999847,   0.        ]), q99=array([ 44.61974199,  87.87268339,  30.92747083,  16.58067341,
        -0.260924  , -26.45196724,   0.9998    ])), 'actions': NormStats(mean=array([ 0.192315  ,  0.027426  , -0.01522407,  0.04785711, -0.08074823,
       -0.05333935,  0.42522326]), std=array([9.28794479, 9.00317574, 4.14188147, 1.60169351, 9.50789356,
       0.9818573 , 0.49437684]), q01=array([-21.17317298, -23.18362675, -14.27432952,  -5.18250646,
       -26.67564539,  -3.16441521,   0.        ]), q99=array([27.84317563, 22.359031  , 11.17634333,  4.02140303, 25.71650509,
        3.24633011,  0.9998    ]))}, repack_transforms=Group(inputs=[RepackTransform(structure={'observation/image': 'image', 'observation/state': 'state', 'actions': 'actions', 'prompt': 'prompt'})], outputs=()), data_transforms=Group(inputs=(MecharmInputs(model_type=<ModelType.PI05: 'pi05'>), DeltaActions(mask=(True, True, True, True, True, True, False))), outputs=(AbsoluteActions(mask=(True, True, True, True, True, True, False)), MecharmOutputs())), model_transforms=Group(inputs=[InjectDefaultPrompt(prompt=None), ResizeImages(height=224, width=224), TokenizePrompt(tokenizer=<openpi.models.tokenizer.PaligemmaTokenizer object at 0x7f3476393950>, discrete_state_input=True), PadStatesAndActions(model_action_dim=32)], outputs=()), use_quantile_norm=True, action_sequence_keys=('actions',), prompt_from_task=True, rlds_data_dir=None, action_space=None, datasets=()) (1143:data_loader.py:243)

Downloading data:   0%|          | 0/24 [00:00<?, ?files/s]
Downloading data: 100%|██████████| 24/24 [00:00<00:00, 111600.11files/s]

Generating train split: 0 examples [00:00, ? examples/s]
Generating train split: 496 examples [00:00, 2369.91 examples/s]
Generating train split: 826 examples [00:00, 2239.10 examples/s]
Generating train split: 1261 examples [00:00, 2455.92 examples/s]
Generating train split: 1841 examples [00:00, 3127.10 examples/s]
Generating train split: 2420 examples [00:00, 2972.05 examples/s]
Generating train split: 3051 examples [00:00, 3545.91 examples/s]
Generating train split: 3443 examples [00:01, 3203.04 examples/s]
13:20:28.035 [I] local_batch_size: 32                                                             (1143:data_loader.py:324)
13:20:42.264 [I] Initialized data loader:
[0].images['base_0_rgb']: (32, 224, 224, 3)@float32
[0].images['left_wrist_0_rgb']: (32, 224, 224, 3)@float32
[0].images['right_wrist_0_rgb']: (32, 224, 224, 3)@float32
[0].image_masks['base_0_rgb']: (32,)@bool
[0].image_masks['left_wrist_0_rgb']: (32,)@bool
[0].image_masks['right_wrist_0_rgb']: (32,)@bool
[0].state: (32, 32)@float32
[0].tokenized_prompt: (32, 200)@int32
[0].tokenized_prompt_mask: (32, 200)@bool
[1]: (32, 10, 32)@float32 (1143:train.py:227)
13:20:43.483 [I] Created BasePyTreeCheckpointHandler: use_ocdbt=True, use_zarr3=False, pytree_metadata_options=PyTreeMetadataOptions(support_rich_types=False), array_metadata_store=<orbax.checkpoint._src.metadata.array_metadata_store.Store object at 0x7f3614dcbf10> (1143:base_pytree_checkpoint_handler.py:334)
13:20:43.513 [I] Restoring checkpoint from /workspace/ckpt/3999/params.                           (1143:checkpointer.py:298)
13:20:48.394 [I] [process=0] /jax/checkpoint/read/bytes_per_sec: 1.5 GiB/s (total bytes: 7.2 GiB) (time elapsed: 4 seconds) (per-host) (1143:base_pytree_checkpoint_handler.py:114)
13:20:48.395 [I] Finished restoring checkpoint in 4.88 seconds from /workspace/ckpt/3999/params.  (1143:checkpointer.py:309)
13:20:51.375 [I] Initialized train state:
['PaliGemma']['img']['Transformer']['encoder_norm']['bias'].value: (1152,)@float32
['PaliGemma']['img']['Transformer']['encoder_norm']['scale'].value: (1152,)@float32
['PaliGemma']['img']['Transformer']['encoderblock']['LayerNorm_0']['bias'].value: (27, 1152)@float32
['PaliGemma']['img']['Transformer']['encoderblock']['LayerNorm_0']['scale'].value: (27, 1152)@float32
['PaliGemma']['img']['Transformer']['encoderblock']['LayerNorm_1']['bias'].value: (27, 1152)@float32
['PaliGemma']['img']['Transformer']['encoderblock']['LayerNorm_1']['scale'].value: (27, 1152)@float32
['PaliGemma']['img']['Transformer']['encoderblock']['MlpBlock_0']['Dense_0']['bias'].value: (27, 4304)@float32
['PaliGemma']['img']['Transformer']['encoderblock']['MlpBlock_0']['Dense_0']['kernel'].value: (27, 1152, 4304)@float32
['PaliGemma']['img']['Transformer']['encoderblock']['MlpBlock_0']['Dense_1']['bias'].value: (27, 1152)@float32
['PaliGemma']['img']['Transformer']['encoderblock']['MlpBlock_0']['Dense_1']['kernel'].value: (27, 4304, 1152)@float32
['PaliGemma']['img']['Transformer']['encoderblock']['MultiHeadDotProductAttention_0']['key']['bias'].value: (27, 16, 72)@float32
['PaliGemma']['img']['Transformer']['encoderblock']['MultiHeadDotProductAttention_0']['key']['kernel'].value: (27, 1152, 16, 72)@float32
['PaliGemma']['img']['Transformer']['encoderblock']['MultiHeadDotProductAttention_0']['out']['bias'].value: (27, 1152)@float32
['PaliGemma']['img']['Transformer']['encoderblock']['MultiHeadDotProductAttention_0']['out']['kernel'].value: (27, 16, 72, 1152)@float32
['PaliGemma']['img']['Transformer']['encoderblock']['MultiHeadDotProductAttention_0']['query']['bias'].value: (27, 16, 72)@float32
['PaliGemma']['img']['Transformer']['encoderblock']['MultiHeadDotProductAttention_0']['query']['kernel'].value: (27, 1152, 16, 72)@float32
['PaliGemma']['img']['Transformer']['encoderblock']['MultiHeadDotProductAttention_0']['value']['bias'].value: (27, 16, 72)@float32
['PaliGemma']['img']['Transformer']['encoderblock']['MultiHeadDotProductAttention_0']['value']['kernel'].value: (27, 1152, 16, 72)@float32
['PaliGemma']['img']['embedding']['bias'].value: (1152,)@float32
['PaliGemma']['img']['embedding']['kernel'].value: (14, 14, 3, 1152)@float32
['PaliGemma']['img']['head']['bias'].value: (2048,)@float32
['PaliGemma']['img']['head']['kernel'].value: (1152, 2048)@float32
['PaliGemma']['img']['pos_embedding'].value: (1, 256, 1152)@float32
['PaliGemma']['llm']['embedder']['input_embedding'].value: (257152, 2048)@bfloat16
['PaliGemma']['llm']['final_norm']['scale'].value: (2048,)@bfloat16
['PaliGemma']['llm']['final_norm_1']['Dense_0']['bias'].value: (3072,)@bfloat16
['PaliGemma']['llm']['final_norm_1']['Dense_0']['kernel'].value: (1024, 3072)@bfloat16
['PaliGemma']['llm']['layers']['attn']['attn_vec_einsum']['lora_a'].value: (18, 8, 256, 16)@float32
['PaliGemma']['llm']['layers']['attn']['attn_vec_einsum']['lora_b'].value: (18, 8, 16, 2048)@float32
['PaliGemma']['llm']['layers']['attn']['attn_vec_einsum']['w'].value: (18, 8, 256, 2048)@bfloat16
['PaliGemma']['llm']['layers']['attn']['attn_vec_einsum_1']['lora_a'].value: (18, 8, 256, 32)@float32
['PaliGemma']['llm']['layers']['attn']['attn_vec_einsum_1']['lora_b'].value: (18, 8, 32, 1024)@float32
['PaliGemma']['llm']['layers']['attn']['attn_vec_einsum_1']['w'].value: (18, 8, 256, 1024)@bfloat16
['PaliGemma']['llm']['layers']['attn']['kv_einsum']['lora_a'].value: (18, 2, 1, 2048, 16)@float32
['PaliGemma']['llm']['layers']['attn']['kv_einsum']['lora_b'].value: (18, 2, 1, 16, 256)@float32
['PaliGemma']['llm']['layers']['attn']['kv_einsum']['w'].value: (18, 2, 1, 2048, 256)@bfloat16
['PaliGemma']['llm']['layers']['attn']['kv_einsum_1']['lora_a'].value: (18, 2, 1, 1024, 32)@float32
['PaliGemma']['llm']['layers']['attn']['kv_einsum_1']['lora_b'].value: (18, 2, 1, 32, 256)@float32
['PaliGemma']['llm']['layers']['attn']['kv_einsum_1']['w'].value: (18, 2, 1, 1024, 256)@bfloat16
['PaliGemma']['llm']['layers']['attn']['q_einsum']['lora_a'].value: (18, 8, 2048, 16)@float32
['PaliGemma']['llm']['layers']['attn']['q_einsum']['lora_b'].value: (18, 8, 16, 256)@float32
['PaliGemma']['llm']['layers']['attn']['q_einsum']['w'].value: (18, 8, 2048, 256)@bfloat16
['PaliGemma']['llm']['layers']['attn']['q_einsum_1']['lora_a'].value: (18, 8, 1024, 32)@float32
['PaliGemma']['llm']['layers']['attn']['q_einsum_1']['lora_b'].value: (18, 8, 32, 256)@float32
['PaliGemma']['llm']['layers']['attn']['q_einsum_1']['w'].value: (18, 8, 1024, 256)@bfloat16
['PaliGemma']['llm']['layers']['mlp']['gating_einsum'].value: (18, 2, 2048, 16384)@bfloat16
['PaliGemma']['llm']['layers']['mlp']['gating_einsum_lora_a'].value: (18, 2, 2048, 16)@float32
['PaliGemma']['llm']['layers']['mlp']['gating_einsum_lora_b'].value: (18, 2, 16, 16384)@float32
['PaliGemma']['llm']['layers']['mlp']['linear'].value: (18, 16384, 2048)@bfloat16
['PaliGemma']['llm']['layers']['mlp']['linear_lora_a'].value: (18, 16384, 16)@float32
['PaliGemma']['llm']['layers']['mlp']['linear_lora_b'].value: (18, 16, 2048)@float32
['PaliGemma']['llm']['layers']['mlp_1']['gating_einsum'].value: (18, 2, 1024, 4096)@bfloat16
['PaliGemma']['llm']['layers']['mlp_1']['gating_einsum_lora_a'].value: (18, 2, 1024, 32)@float32
['PaliGemma']['llm']['layers']['mlp_1']['gating_einsum_lora_b'].value: (18, 2, 32, 4096)@float32
['PaliGemma']['llm']['layers']['mlp_1']['linear'].value: (18, 4096, 1024)@bfloat16
['PaliGemma']['llm']['layers']['mlp_1']['linear_lora_a'].value: (18, 4096, 32)@float32
['PaliGemma']['llm']['layers']['mlp_1']['linear_lora_b'].value: (18, 32, 1024)@float32
['PaliGemma']['llm']['layers']['pre_attention_norm']['scale'].value: (18, 2048)@bfloat16
['PaliGemma']['llm']['layers']['pre_attention_norm_1']['Dense_0']['bias'].value: (18, 3072)@bfloat16
['PaliGemma']['llm']['layers']['pre_attention_norm_1']['Dense_0']['kernel'].value: (18, 1024, 3072)@bfloat16
['PaliGemma']['llm']['layers']['pre_ffw_norm']['scale'].value: (18, 2048)@bfloat16
['PaliGemma']['llm']['layers']['pre_ffw_norm_1']['Dense_0']['bias'].value: (18, 3072)@bfloat16
['PaliGemma']['llm']['layers']['pre_ffw_norm_1']['Dense_0']['kernel'].value: (18, 1024, 3072)@bfloat16
['action_in_proj']['bias'].value: (1024,)@float32
['action_in_proj']['kernel'].value: (32, 1024)@float32
['action_out_proj']['bias'].value: (32,)@float32
['action_out_proj']['kernel'].value: (1024, 32)@float32
['time_mlp_in']['bias'].value: (1024,)@float32
['time_mlp_in']['kernel'].value: (1024, 1024)@float32
['time_mlp_out']['bias'].value: (1024,)@float32
['time_mlp_out']['kernel'].value: (1024, 1024)@float32 (1143:train.py:238)
13:20:51.384 [I] Progress on: -/1500 rate:- remaining:? elapsed:00:00 postfix:-                   (1143:tqdm_logging.py:145)


13:25:37.985 [I] Progress on: -/1500 rate:- remaining:? elapsed:04:46 postfix:-                   (1143:tqdm_logging.py:145)
13:25:52.304 [I] Progress on: 4.00it/1.50kit rate:43.6s/it remaining:18:05:50 elapsed:05:00 postfix:- (1143:tqdm_logging.py:145)
13:26:06.233 [I] Progress on: 6.00it/1.50kit rate:22.4s/it remaining:9:17:50 elapsed:05:14 postfix:- (1143:tqdm_logging.py:145)
13:26:20.192 [I] Progress on: 8.00it/1.50kit rate:14.1s/it remaining:5:49:27 elapsed:05:28 postfix:- (1143:tqdm_logging.py:145)
13:26:34.185 [I] Progress on: 10.0it/1.50kit rate:10.4s/it remaining:4:17:02 elapsed:05:42 postfix:- (1143:tqdm_logging.py:145)
13:26:48.182 [I] Progress on: 12.0it/1.50kit rate:8.6s/it remaining:3:33:40 elapsed:05:56 postfix:- (1143:tqdm_logging.py:145)
13:27:02.241 [I] Progress on: 14.0it/1.50kit rate:7.8s/it remaining:3:13:14 elapsed:06:10 postfix:- (1143:tqdm_logging.py:145)
13:27:16.246 [I] Progress on: 16.0it/1.50kit rate:7.4s/it remaining:3:02:53 elapsed:06:24 postfix:- (1143:tqdm_logging.py:145)
13:27:30.291 [I] Progress on: 18.0it/1.50kit rate:7.2s/it remaining:2:57:56 elapsed:06:38 postfix:- (1143:tqdm_logging.py:145)
13:27:44.365 [I] Progress on: 20.0it/1.50kit rate:7.1s/it remaining:2:55:32 elapsed:06:52 postfix:- (1143:tqdm_logging.py:145)
13:27:58.402 [I] Progress on: 22.0it/1.50kit rate:7.1s/it remaining:2:54:06 elapsed:07:07 postfix:- (1143:tqdm_logging.py:145)
13:28:12.467 [I] Progress on: 24.0it/1.50kit rate:7.1s/it remaining:2:53:27 elapsed:07:21 postfix:- (1143:tqdm_logging.py:145)
13:28:26.559 [I] Progress on: 26.0it/1.50kit rate:7.0s/it remaining:2:53:10 elapsed:07:35 postfix:- (1143:tqdm_logging.py:145)
13:28:40.623 [I] Progress on: 28.0it/1.50kit rate:7.0s/it remaining:2:52:45 elapsed:07:49 postfix:- (1143:tqdm_logging.py:145)
13:28:54.692 [I] Progress on: 30.0it/1.50kit rate:7.0s/it remaining:2:52:26 elapsed:08:03 postfix:- (1143:tqdm_logging.py:145)
13:29:08.773 [I] Progress on: 32.0it/1.50kit rate:7.0s/it remaining:2:52:14 elapsed:08:17 postfix:- (1143:tqdm_logging.py:145)
13:29:22.856 [I] Progress on: 34.0it/1.50kit rate:7.0s/it remaining:2:52:02 elapsed:08:31 postfix:- (1143:tqdm_logging.py:145)
13:29:36.941 [I] Progress on: 36.0it/1.50kit rate:7.0s/it remaining:2:51:49 elapsed:08:45 postfix:- (1143:tqdm_logging.py:145)
13:29:51.047 [I] Progress on: 38.0it/1.50kit rate:7.0s/it remaining:2:51:44 elapsed:08:59 postfix:- (1143:tqdm_logging.py:145)
13:30:05.144 [I] Progress on: 40.0it/1.50kit rate:7.0s/it remaining:2:51:30 elapsed:09:13 postfix:- (1143:tqdm_logging.py:145)
13:30:19.245 [I] Progress on: 42.0it/1.50kit rate:7.0s/it remaining:2:51:18 elapsed:09:27 postfix:- (1143:tqdm_logging.py:145)
13:30:33.346 [I] Progress on: 44.0it/1.50kit rate:7.1s/it remaining:2:51:05 elapsed:09:41 postfix:- (1143:tqdm_logging.py:145)
13:30:47.441 [I] Progress on: 46.0it/1.50kit rate:7.0s/it remaining:2:50:49 elapsed:09:56 postfix:- (1143:tqdm_logging.py:145)
13:31:01.531 [I] Progress on: 48.0it/1.50kit rate:7.0s/it remaining:2:50:34 elapsed:10:10 postfix:- (1143:tqdm_logging.py:145)
13:31:15.628 [I] Progress on: 50.0it/1.50kit rate:7.0s/it remaining:2:50:20 elapsed:10:24 postfix:- (1143:tqdm_logging.py:145)


13:31:29.482 [I] Progress on: 50.0it/1.50kit rate:7.0s/it remaining:2:50:20 elapsed:10:38 postfix:- (1143:tqdm_logging.py:145)
13:31:43.999 [I] Progress on: 54.0it/1.50kit rate:6.8s/it remaining:2:43:06 elapsed:10:52 postfix:- (1143:tqdm_logging.py:145)
13:31:58.071 [I] Progress on: 56.0it/1.50kit rate:6.9s/it remaining:2:46:10 elapsed:11:06 postfix:- (1143:tqdm_logging.py:145)
13:32:12.160 [I] Progress on: 58.0it/1.50kit rate:7.0s/it remaining:2:47:39 elapsed:11:20 postfix:- (1143:tqdm_logging.py:145)
13:32:26.235 [I] Progress on: 60.0it/1.50kit rate:7.0s/it remaining:2:48:11 elapsed:11:34 postfix:- (1143:tqdm_logging.py:145)
13:32:40.300 [I] Progress on: 62.0it/1.50kit rate:7.0s/it remaining:2:48:15 elapsed:11:48 postfix:- (1143:tqdm_logging.py:145)
13:32:54.382 [I] Progress on: 64.0it/1.50kit rate:7.0s/it remaining:2:48:16 elapsed:12:02 postfix:- (1143:tqdm_logging.py:145)
13:33:08.455 [I] Progress on: 66.0it/1.50kit rate:7.0s/it remaining:2:48:06 elapsed:12:17 postfix:- (1143:tqdm_logging.py:145)
13:33:22.526 [I] Progress on: 68.0it/1.50kit rate:7.0s/it remaining:2:47:53 elapsed:12:31 postfix:- (1143:tqdm_logging.py:145)
13:33:36.608 [I] Progress on: 70.0it/1.50kit rate:7.0s/it remaining:2:47:44 elapsed:12:45 postfix:- (1143:tqdm_logging.py:145)
13:33:50.683 [I] Progress on: 72.0it/1.50kit rate:7.0s/it remaining:2:47:30 elapsed:12:59 postfix:- (1143:tqdm_logging.py:145)
13:34:04.778 [I] Progress on: 74.0it/1.50kit rate:7.0s/it remaining:2:47:23 elapsed:13:13 postfix:- (1143:tqdm_logging.py:145)
13:34:18.862 [I] Progress on: 76.0it/1.50kit rate:7.0s/it remaining:2:47:08 elapsed:13:27 postfix:- (1143:tqdm_logging.py:145)
13:34:32.940 [I] Progress on: 78.0it/1.50kit rate:7.0s/it remaining:2:46:50 elapsed:13:41 postfix:- (1143:tqdm_logging.py:145)
13:34:47.022 [I] Progress on: 80.0it/1.50kit rate:7.0s/it remaining:2:46:37 elapsed:13:55 postfix:- (1143:tqdm_logging.py:145)
13:35:01.118 [I] Progress on: 82.0it/1.50kit rate:7.0s/it remaining:2:46:27 elapsed:14:09 postfix:- (1143:tqdm_logging.py:145)
13:35:15.197 [I] Progress on: 84.0it/1.50kit rate:7.0s/it remaining:2:46:10 elapsed:14:23 postfix:- (1143:tqdm_logging.py:145)
13:35:29.275 [I] Progress on: 86.0it/1.50kit rate:7.0s/it remaining:2:45:55 elapsed:14:37 postfix:- (1143:tqdm_logging.py:145)
13:35:43.348 [I] Progress on: 88.0it/1.50kit rate:7.0s/it remaining:2:45:38 elapsed:14:51 postfix:- (1143:tqdm_logging.py:145)
13:35:57.423 [I] Progress on: 90.0it/1.50kit rate:7.0s/it remaining:2:45:22 elapsed:15:06 postfix:- (1143:tqdm_logging.py:145)
13:36:11.516 [I] Progress on: 92.0it/1.50kit rate:7.0s/it remaining:2:45:16 elapsed:15:20 postfix:- (1143:tqdm_logging.py:145)
13:36:25.617 [I] Progress on: 94.0it/1.50kit rate:7.0s/it remaining:2:45:08 elapsed:15:34 postfix:- (1143:tqdm_logging.py:145)
13:36:39.728 [I] Progress on: 96.0it/1.50kit rate:7.1s/it remaining:2:44:59 elapsed:15:48 postfix:- (1143:tqdm_logging.py:145)
13:36:53.826 [I] Progress on: 98.0it/1.50kit rate:7.1s/it remaining:2:44:45 elapsed:16:02 postfix:- (1143:tqdm_logging.py:145)
13:37:07.918 [I] Progress on: 100it/1.50kit rate:7.0s/it remaining:2:44:26 elapsed:16:16 postfix:- (1143:tqdm_logging.py:145)


13:37:21.654 [I] Progress on: 100it/1.50kit rate:7.0s/it remaining:2:44:26 elapsed:16:30 postfix:- (1143:tqdm_logging.py:145)
13:37:36.211 [I] Progress on: 104it/1.50kit rate:6.8s/it remaining:2:37:22 elapsed:16:44 postfix:- (1143:tqdm_logging.py:145)
13:37:50.308 [I] Progress on: 106it/1.50kit rate:6.9s/it remaining:2:40:32 elapsed:16:58 postfix:- (1143:tqdm_logging.py:145)
13:38:04.384 [I] Progress on: 108it/1.50kit rate:6.9s/it remaining:2:40:42 elapsed:17:12 postfix:- (1143:tqdm_logging.py:145)
13:38:18.476 [I] Progress on: 110it/1.50kit rate:7.0s/it remaining:2:41:52 elapsed:17:27 postfix:- (1143:tqdm_logging.py:145)
13:38:32.565 [I] Progress on: 112it/1.50kit rate:7.0s/it remaining:2:42:18 elapsed:17:41 postfix:- (1143:tqdm_logging.py:145)
13:38:46.640 [I] Progress on: 114it/1.50kit rate:7.0s/it remaining:2:42:18 elapsed:17:55 postfix:- (1143:tqdm_logging.py:145)
13:39:00.721 [I] Progress on: 116it/1.50kit rate:7.0s/it remaining:2:42:14 elapsed:18:09 postfix:- (1143:tqdm_logging.py:145)
13:39:14.815 [I] Progress on: 118it/1.50kit rate:7.0s/it remaining:2:42:09 elapsed:18:23 postfix:- (1143:tqdm_logging.py:145)
13:39:28.894 [I] Progress on: 120it/1.50kit rate:7.0s/it remaining:2:41:55 elapsed:18:37 postfix:- (1143:tqdm_logging.py:145)
13:39:43.009 [I] Progress on: 122it/1.50kit rate:7.1s/it remaining:2:41:55 elapsed:18:51 postfix:- (1143:tqdm_logging.py:145)
13:39:57.089 [I] Progress on: 124it/1.50kit rate:7.0s/it remaining:2:41:36 elapsed:19:05 postfix:- (1143:tqdm_logging.py:145)
13:40:11.142 [I] Progress on: 126it/1.50kit rate:7.0s/it remaining:2:41:09 elapsed:19:19 postfix:- (1143:tqdm_logging.py:145)
13:40:25.214 [I] Progress on: 128it/1.50kit rate:7.0s/it remaining:2:40:54 elapsed:19:33 postfix:- (1143:tqdm_logging.py:145)
13:40:39.296 [I] Progress on: 130it/1.50kit rate:7.0s/it remaining:2:40:44 elapsed:19:47 postfix:- (1143:tqdm_logging.py:145)
13:40:53.368 [I] Progress on: 132it/1.50kit rate:7.0s/it remaining:2:40:28 elapsed:20:01 postfix:- (1143:tqdm_logging.py:145)
13:41:07.450 [I] Progress on: 134it/1.50kit rate:7.0s/it remaining:2:40:16 elapsed:20:16 postfix:- (1143:tqdm_logging.py:145)
13:41:21.519 [I] Progress on: 136it/1.50kit rate:7.0s/it remaining:2:39:59 elapsed:20:30 postfix:- (1143:tqdm_logging.py:145)
13:41:35.602 [I] Progress on: 138it/1.50kit rate:7.0s/it remaining:2:39:48 elapsed:20:44 postfix:- (1143:tqdm_logging.py:145)
13:41:49.667 [I] Progress on: 140it/1.50kit rate:7.0s/it remaining:2:39:29 elapsed:20:58 postfix:- (1143:tqdm_logging.py:145)
13:42:03.747 [I] Progress on: 142it/1.50kit rate:7.0s/it remaining:2:39:18 elapsed:21:12 postfix:- (1143:tqdm_logging.py:145)
13:42:17.832 [I] Progress on: 144it/1.50kit rate:7.0s/it remaining:2:39:07 elapsed:21:26 postfix:- (1143:tqdm_logging.py:145)
13:42:31.918 [I] Progress on: 146it/1.50kit rate:7.0s/it remaining:2:38:54 elapsed:21:40 postfix:- (1143:tqdm_logging.py:145)
13:42:45.990 [I] Progress on: 148it/1.50kit rate:7.0s/it remaining:2:38:36 elapsed:21:54 postfix:- (1143:tqdm_logging.py:145)
13:43:00.064 [I] Progress on: 150it/1.50kit rate:7.0s/it remaining:2:38:21 elapsed:22:08 postfix:- (1143:tqdm_logging.py:145)


13:43:13.782 [I] Progress on: 150it/1.50kit rate:7.0s/it remaining:2:38:21 elapsed:22:22 postfix:- (1143:tqdm_logging.py:145)
13:43:28.302 [I] Progress on: 154it/1.50kit rate:6.8s/it remaining:2:31:31 elapsed:22:36 postfix:- (1143:tqdm_logging.py:145)
13:43:42.371 [I] Progress on: 156it/1.50kit rate:6.9s/it remaining:2:34:30 elapsed:22:50 postfix:- (1143:tqdm_logging.py:145)
13:43:56.448 [I] Progress on: 158it/1.50kit rate:7.0s/it remaining:2:35:52 elapsed:23:05 postfix:- (1143:tqdm_logging.py:145)
13:44:10.544 [I] Progress on: 160it/1.50kit rate:7.0s/it remaining:2:36:32 elapsed:23:19 postfix:- (1143:tqdm_logging.py:145)
13:44:24.621 [I] Progress on: 162it/1.50kit rate:7.0s/it remaining:2:36:36 elapsed:23:33 postfix:- (1143:tqdm_logging.py:145)
13:44:38.690 [I] Progress on: 164it/1.50kit rate:7.0s/it remaining:2:36:30 elapsed:23:47 postfix:- (1143:tqdm_logging.py:145)
13:44:52.766 [I] Progress on: 166it/1.50kit rate:7.0s/it remaining:2:36:22 elapsed:24:01 postfix:- (1143:tqdm_logging.py:145)
13:45:06.849 [I] Progress on: 168it/1.50kit rate:7.0s/it remaining:2:36:13 elapsed:24:15 postfix:- (1143:tqdm_logging.py:145)
13:45:20.936 [I] Progress on: 170it/1.50kit rate:7.0s/it remaining:2:36:03 elapsed:24:29 postfix:- (1143:tqdm_logging.py:145)
13:45:35.012 [I] Progress on: 172it/1.50kit rate:7.0s/it remaining:2:35:47 elapsed:24:43 postfix:- (1143:tqdm_logging.py:145)
13:45:49.084 [I] Progress on: 174it/1.50kit rate:7.0s/it remaining:2:35:31 elapsed:24:57 postfix:- (1143:tqdm_logging.py:145)
13:46:03.166 [I] Progress on: 176it/1.50kit rate:7.0s/it remaining:2:35:18 elapsed:25:11 postfix:- (1143:tqdm_logging.py:145)
13:46:17.260 [I] Progress on: 178it/1.50kit rate:7.0s/it remaining:2:35:06 elapsed:25:25 postfix:- (1143:tqdm_logging.py:145)
13:46:31.320 [I] Progress on: 180it/1.50kit rate:7.0s/it remaining:2:34:46 elapsed:25:39 postfix:- (1143:tqdm_logging.py:145)
13:46:45.397 [I] Progress on: 182it/1.50kit rate:7.0s/it remaining:2:34:34 elapsed:25:54 postfix:- (1143:tqdm_logging.py:145)
13:46:59.473 [I] Progress on: 184it/1.50kit rate:7.0s/it remaining:2:34:21 elapsed:26:08 postfix:- (1143:tqdm_logging.py:145)
13:47:13.553 [I] Progress on: 186it/1.50kit rate:7.0s/it remaining:2:34:09 elapsed:26:22 postfix:- (1143:tqdm_logging.py:145)
13:47:27.628 [I] Progress on: 188it/1.50kit rate:7.0s/it remaining:2:33:54 elapsed:26:36 postfix:- (1143:tqdm_logging.py:145)
13:47:41.715 [I] Progress on: 190it/1.50kit rate:7.0s/it remaining:2:33:42 elapsed:26:50 postfix:- (1143:tqdm_logging.py:145)
13:47:55.791 [I] Progress on: 192it/1.50kit rate:7.0s/it remaining:2:33:27 elapsed:27:04 postfix:- (1143:tqdm_logging.py:145)
13:48:09.866 [I] Progress on: 194it/1.50kit rate:7.0s/it remaining:2:33:10 elapsed:27:18 postfix:- (1143:tqdm_logging.py:145)
13:48:23.942 [I] Progress on: 196it/1.50kit rate:7.0s/it remaining:2:32:57 elapsed:27:32 postfix:- (1143:tqdm_logging.py:145)
13:48:38.015 [I] Progress on: 198it/1.50kit rate:7.0s/it remaining:2:32:42 elapsed:27:46 postfix:- (1143:tqdm_logging.py:145)
13:48:52.091 [I] Progress on: 200it/1.50kit rate:7.0s/it remaining:2:32:28 elapsed:28:00 postfix:- (1143:tqdm_logging.py:145)


13:49:05.867 [I] Progress on: 200it/1.50kit rate:7.0s/it remaining:2:32:28 elapsed:28:14 postfix:- (1143:tqdm_logging.py:145)
13:49:20.426 [I] Progress on: 204it/1.50kit rate:6.8s/it remaining:2:26:04 elapsed:28:29 postfix:- (1143:tqdm_logging.py:145)
13:49:34.494 [I] Progress on: 206it/1.50kit rate:6.9s/it remaining:2:28:50 elapsed:28:43 postfix:- (1143:tqdm_logging.py:145)
13:49:48.573 [I] Progress on: 208it/1.50kit rate:7.0s/it remaining:2:30:06 elapsed:28:57 postfix:- (1143:tqdm_logging.py:145)
13:50:02.662 [I] Progress on: 210it/1.50kit rate:7.0s/it remaining:2:30:40 elapsed:29:11 postfix:- (1143:tqdm_logging.py:145)
13:50:16.739 [I] Progress on: 212it/1.50kit rate:7.0s/it remaining:2:30:47 elapsed:29:25 postfix:- (1143:tqdm_logging.py:145)
13:50:31.371 [I] Progress on: 214it/1.50kit rate:7.2s/it remaining:2:34:15 elapsed:29:39 postfix:- (1143:tqdm_logging.py:145)
13:50:44.904 [I] Progress on: 216it/1.50kit rate:7.0s/it remaining:2:29:50 elapsed:29:53 postfix:- (1143:tqdm_logging.py:145)
13:50:58.975 [I] Progress on: 218it/1.50kit rate:7.0s/it remaining:2:29:57 elapsed:30:07 postfix:- (1143:tqdm_logging.py:145)
13:51:13.053 [I] Progress on: 220it/1.50kit rate:7.0s/it remaining:2:29:57 elapsed:30:21 postfix:- (1143:tqdm_logging.py:145)
13:51:27.131 [I] Progress on: 222it/1.50kit rate:7.0s/it remaining:2:29:49 elapsed:30:35 postfix:- (1143:tqdm_logging.py:145)
13:51:41.226 [I] Progress on: 224it/1.50kit rate:7.0s/it remaining:2:29:44 elapsed:30:49 postfix:- (1143:tqdm_logging.py:145)
13:51:55.315 [I] Progress on: 226it/1.50kit rate:7.0s/it remaining:2:29:33 elapsed:31:03 postfix:- (1143:tqdm_logging.py:145)
13:52:09.403 [I] Progress on: 228it/1.50kit rate:7.0s/it remaining:2:29:19 elapsed:31:18 postfix:- (1143:tqdm_logging.py:145)
13:52:23.492 [I] Progress on: 230it/1.50kit rate:7.0s/it remaining:2:29:06 elapsed:31:32 postfix:- (1143:tqdm_logging.py:145)
13:52:37.567 [I] Progress on: 232it/1.50kit rate:7.0s/it remaining:2:28:47 elapsed:31:46 postfix:- (1143:tqdm_logging.py:145)
13:52:51.645 [I] Progress on: 234it/1.50kit rate:7.0s/it remaining:2:28:32 elapsed:32:00 postfix:- (1143:tqdm_logging.py:145)
13:53:05.737 [I] Progress on: 236it/1.50kit rate:7.0s/it remaining:2:28:23 elapsed:32:14 postfix:- (1143:tqdm_logging.py:145)
13:53:19.819 [I] Progress on: 238it/1.50kit rate:7.0s/it remaining:2:28:07 elapsed:32:28 postfix:- (1143:tqdm_logging.py:145)
13:53:33.912 [I] Progress on: 240it/1.50kit rate:7.0s/it remaining:2:27:55 elapsed:32:42 postfix:- (1143:tqdm_logging.py:145)
13:53:47.993 [I] Progress on: 242it/1.50kit rate:7.0s/it remaining:2:27:39 elapsed:32:56 postfix:- (1143:tqdm_logging.py:145)
13:54:02.098 [I] Progress on: 244it/1.50kit rate:7.0s/it remaining:2:27:30 elapsed:33:10 postfix:- (1143:tqdm_logging.py:145)
13:54:16.177 [I] Progress on: 246it/1.50kit rate:7.0s/it remaining:2:27:11 elapsed:33:24 postfix:- (1143:tqdm_logging.py:145)
13:54:30.269 [I] Progress on: 248it/1.50kit rate:7.0s/it remaining:2:27:00 elapsed:33:38 postfix:- (1143:tqdm_logging.py:145)
13:54:44.353 [I] Progress on: 250it/1.50kit rate:7.0s/it remaining:2:26:44 elapsed:33:52 postfix:- (1143:tqdm_logging.py:145)


13:54:58.118 [I] Progress on: 250it/1.50kit rate:7.0s/it remaining:2:26:44 elapsed:34:06 postfix:- (1143:tqdm_logging.py:145)
13:55:12.665 [I] Progress on: 254it/1.50kit rate:6.8s/it remaining:2:20:25 elapsed:34:21 postfix:- (1143:tqdm_logging.py:145)
13:55:26.759 [I] Progress on: 256it/1.50kit rate:6.9s/it remaining:2:23:12 elapsed:34:35 postfix:- (1143:tqdm_logging.py:145)
13:55:40.856 [I] Progress on: 258it/1.50kit rate:7.0s/it remaining:2:24:27 elapsed:34:49 postfix:- (1143:tqdm_logging.py:145)
13:55:54.952 [I] Progress on: 260it/1.50kit rate:7.0s/it remaining:2:24:57 elapsed:35:03 postfix:- (1143:tqdm_logging.py:145)
13:56:09.047 [I] Progress on: 262it/1.50kit rate:7.0s/it remaining:2:25:03 elapsed:35:17 postfix:- (1143:tqdm_logging.py:145)
13:56:23.137 [I] Progress on: 264it/1.50kit rate:7.0s/it remaining:2:24:57 elapsed:35:31 postfix:- (1143:tqdm_logging.py:145)
13:56:37.231 [I] Progress on: 266it/1.50kit rate:7.0s/it remaining:2:24:50 elapsed:35:45 postfix:- (1143:tqdm_logging.py:145)
13:56:51.324 [I] Progress on: 268it/1.50kit rate:7.0s/it remaining:2:24:39 elapsed:35:59 postfix:- (1143:tqdm_logging.py:145)
13:57:05.416 [I] Progress on: 270it/1.50kit rate:7.0s/it remaining:2:24:25 elapsed:36:14 postfix:- (1143:tqdm_logging.py:145)
13:57:19.516 [I] Progress on: 272it/1.50kit rate:7.0s/it remaining:2:24:15 elapsed:36:28 postfix:- (1143:tqdm_logging.py:145)
13:57:33.609 [I] Progress on: 274it/1.50kit rate:7.0s/it remaining:2:24:00 elapsed:36:42 postfix:- (1143:tqdm_logging.py:145)
13:57:47.709 [I] Progress on: 276it/1.50kit rate:7.0s/it remaining:2:23:48 elapsed:36:56 postfix:- (1143:tqdm_logging.py:145)
13:58:01.803 [I] Progress on: 278it/1.50kit rate:7.0s/it remaining:2:23:31 elapsed:37:10 postfix:- (1143:tqdm_logging.py:145)
13:58:15.901 [I] Progress on: 280it/1.50kit rate:7.0s/it remaining:2:23:17 elapsed:37:24 postfix:- (1143:tqdm_logging.py:145)
13:58:30.003 [I] Progress on: 282it/1.50kit rate:7.0s/it remaining:2:23:05 elapsed:37:38 postfix:- (1143:tqdm_logging.py:145)
13:58:44.102 [I] Progress on: 284it/1.50kit rate:7.1s/it remaining:2:22:52 elapsed:37:52 postfix:- (1143:tqdm_logging.py:145)
13:58:58.175 [I] Progress on: 286it/1.50kit rate:7.0s/it remaining:2:22:31 elapsed:38:06 postfix:- (1143:tqdm_logging.py:145)
13:59:12.271 [I] Progress on: 288it/1.50kit rate:7.0s/it remaining:2:22:19 elapsed:38:20 postfix:- (1143:tqdm_logging.py:145)
13:59:26.359 [I] Progress on: 290it/1.50kit rate:7.0s/it remaining:2:22:05 elapsed:38:34 postfix:- (1143:tqdm_logging.py:145)
13:59:40.463 [I] Progress on: 292it/1.50kit rate:7.0s/it remaining:2:21:55 elapsed:38:49 postfix:- (1143:tqdm_logging.py:145)
13:59:54.558 [I] Progress on: 294it/1.50kit rate:7.0s/it remaining:2:21:40 elapsed:39:03 postfix:- (1143:tqdm_logging.py:145)
14:00:08.669 [I] Progress on: 296it/1.50kit rate:7.1s/it remaining:2:21:31 elapsed:39:17 postfix:- (1143:tqdm_logging.py:145)
14:00:22.785 [I] Progress on: 298it/1.50kit rate:7.1s/it remaining:2:21:20 elapsed:39:31 postfix:- (1143:tqdm_logging.py:145)
14:00:36.877 [I] Progress on: 300it/1.50kit rate:7.1s/it remaining:2:21:00 elapsed:39:45 postfix:- (1143:tqdm_logging.py:145)


14:00:50.609 [I] Progress on: 300it/1.50kit rate:7.1s/it remaining:2:21:00 elapsed:39:59 postfix:- (1143:tqdm_logging.py:145)
14:01:05.149 [I] Progress on: 304it/1.50kit rate:6.8s/it remaining:2:14:48 elapsed:40:13 postfix:- (1143:tqdm_logging.py:145)
14:01:19.241 [I] Progress on: 306it/1.50kit rate:6.9s/it remaining:2:17:27 elapsed:40:27 postfix:- (1143:tqdm_logging.py:145)
14:01:33.356 [I] Progress on: 308it/1.50kit rate:7.0s/it remaining:2:18:45 elapsed:40:41 postfix:- (1143:tqdm_logging.py:145)
14:01:47.443 [I] Progress on: 310it/1.50kit rate:7.0s/it remaining:2:19:08 elapsed:40:56 postfix:- (1143:tqdm_logging.py:145)
14:02:01.540 [I] Progress on: 312it/1.50kit rate:7.0s/it remaining:2:19:15 elapsed:41:10 postfix:- (1143:tqdm_logging.py:145)
14:02:15.628 [I] Progress on: 314it/1.50kit rate:7.0s/it remaining:2:19:07 elapsed:41:24 postfix:- (1143:tqdm_logging.py:145)
14:02:29.727 [I] Progress on: 316it/1.50kit rate:7.0s/it remaining:2:19:00 elapsed:41:38 postfix:- (1143:tqdm_logging.py:145)
14:02:43.833 [I] Progress on: 318it/1.50kit rate:7.0s/it remaining:2:18:51 elapsed:41:52 postfix:- (1143:tqdm_logging.py:145)
14:02:57.928 [I] Progress on: 320it/1.50kit rate:7.0s/it remaining:2:18:37 elapsed:42:06 postfix:- (1143:tqdm_logging.py:145)
14:03:12.003 [I] Progress on: 322it/1.50kit rate:7.0s/it remaining:2:17:16 elapsed:42:20 postfix:- (1143:tqdm_logging.py:145)
14:03:26.104 [I] Progress on: 324it/1.50kit rate:7.0s/it remaining:2:17:33 elapsed:42:34 postfix:- (1143:tqdm_logging.py:145)
14:03:40.211 [I] Progress on: 326it/1.50kit rate:7.0s/it remaining:2:17:35 elapsed:42:48 postfix:- (1143:tqdm_logging.py:145)
14:03:54.330 [I] Progress on: 328it/1.50kit rate:7.0s/it remaining:2:17:33 elapsed:43:02 postfix:- (1143:tqdm_logging.py:145)
14:04:08.425 [I] Progress on: 330it/1.50kit rate:7.0s/it remaining:2:17:16 elapsed:43:17 postfix:- (1143:tqdm_logging.py:145)
14:04:22.538 [I] Progress on: 332it/1.50kit rate:7.0s/it remaining:2:17:08 elapsed:43:31 postfix:- (1143:tqdm_logging.py:145)
14:04:36.631 [I] Progress on: 334it/1.50kit rate:7.0s/it remaining:2:16:50 elapsed:43:45 postfix:- (1143:tqdm_logging.py:145)
14:04:50.728 [I] Progress on: 336it/1.50kit rate:7.0s/it remaining:2:16:37 elapsed:43:59 postfix:- (1143:tqdm_logging.py:145)
14:05:04.819 [I] Progress on: 338it/1.50kit rate:7.0s/it remaining:2:16:20 elapsed:44:13 postfix:- (1143:tqdm_logging.py:145)
14:05:18.920 [I] Progress on: 340it/1.50kit rate:7.0s/it remaining:2:16:07 elapsed:44:27 postfix:- (1143:tqdm_logging.py:145)
14:05:33.017 [I] Progress on: 342it/1.50kit rate:7.0s/it remaining:2:15:52 elapsed:44:41 postfix:- (1143:tqdm_logging.py:145)
14:05:47.126 [I] Progress on: 344it/1.50kit rate:7.0s/it remaining:2:15:42 elapsed:44:55 postfix:- (1143:tqdm_logging.py:145)
14:06:01.223 [I] Progress on: 346it/1.50kit rate:7.0s/it remaining:2:15:26 elapsed:45:09 postfix:- (1143:tqdm_logging.py:145)
14:06:15.334 [I] Progress on: 348it/1.50kit rate:7.0s/it remaining:2:15:17 elapsed:45:23 postfix:- (1143:tqdm_logging.py:145)
14:06:29.422 [I] Progress on: 350it/1.50kit rate:7.0s/it remaining:2:14:57 elapsed:45:38 postfix:- (1143:tqdm_logging.py:145)


14:06:43.224 [I] Progress on: 350it/1.50kit rate:7.0s/it remaining:2:14:57 elapsed:45:51 postfix:- (1143:tqdm_logging.py:145)
14:06:57.748 [I] Progress on: 354it/1.50kit rate:6.8s/it remaining:2:09:04 elapsed:46:06 postfix:- (1143:tqdm_logging.py:145)
14:07:11.845 [I] Progress on: 356it/1.50kit rate:6.9s/it remaining:2:11:36 elapsed:46:20 postfix:- (1143:tqdm_logging.py:145)
14:07:25.930 [I] Progress on: 358it/1.50kit rate:7.0s/it remaining:2:12:39 elapsed:46:34 postfix:- (1143:tqdm_logging.py:145)
14:07:40.012 [I] Progress on: 360it/1.50kit rate:7.0s/it remaining:2:13:03 elapsed:46:48 postfix:- (1143:tqdm_logging.py:145)
14:07:54.081 [I] Progress on: 362it/1.50kit rate:7.0s/it remaining:2:13:02 elapsed:47:02 postfix:- (1143:tqdm_logging.py:145)
14:08:08.166 [I] Progress on: 364it/1.50kit rate:7.0s/it remaining:2:13:00 elapsed:47:16 postfix:- (1143:tqdm_logging.py:145)
14:08:22.258 [I] Progress on: 366it/1.50kit rate:7.0s/it remaining:2:12:53 elapsed:47:30 postfix:- (1143:tqdm_logging.py:145)
14:08:36.339 [I] Progress on: 368it/1.50kit rate:7.0s/it remaining:2:12:40 elapsed:47:44 postfix:- (1143:tqdm_logging.py:145)
14:08:50.431 [I] Progress on: 370it/1.50kit rate:7.0s/it remaining:2:12:30 elapsed:47:59 postfix:- (1143:tqdm_logging.py:145)
14:09:04.524 [I] Progress on: 372it/1.50kit rate:7.0s/it remaining:2:12:18 elapsed:48:13 postfix:- (1143:tqdm_logging.py:145)
14:09:18.596 [I] Progress on: 374it/1.50kit rate:7.0s/it remaining:2:11:56 elapsed:48:27 postfix:- (1143:tqdm_logging.py:145)
14:09:32.691 [I] Progress on: 376it/1.50kit rate:7.0s/it remaining:2:11:49 elapsed:48:41 postfix:- (1143:tqdm_logging.py:145)
14:09:46.780 [I] Progress on: 378it/1.50kit rate:7.0s/it remaining:2:11:34 elapsed:48:55 postfix:- (1143:tqdm_logging.py:145)
14:10:00.880 [I] Progress on: 380it/1.50kit rate:7.0s/it remaining:2:11:24 elapsed:49:09 postfix:- (1143:tqdm_logging.py:145)
14:10:14.966 [I] Progress on: 382it/1.50kit rate:7.0s/it remaining:2:11:07 elapsed:49:23 postfix:- (1143:tqdm_logging.py:145)
14:10:29.062 [I] Progress on: 384it/1.50kit rate:7.0s/it remaining:2:10:55 elapsed:49:37 postfix:- (1143:tqdm_logging.py:145)
14:10:43.155 [I] Progress on: 386it/1.50kit rate:7.0s/it remaining:2:10:41 elapsed:49:51 postfix:- (1143:tqdm_logging.py:145)
14:10:57.239 [I] Progress on: 388it/1.50kit rate:7.0s/it remaining:2:10:25 elapsed:50:05 postfix:- (1143:tqdm_logging.py:145)
14:11:11.328 [I] Progress on: 390it/1.50kit rate:7.0s/it remaining:2:10:09 elapsed:50:19 postfix:- (1143:tqdm_logging.py:145)
14:11:25.408 [I] Progress on: 392it/1.50kit rate:7.0s/it remaining:2:09:54 elapsed:50:34 postfix:- (1143:tqdm_logging.py:145)
14:11:39.501 [I] Progress on: 394it/1.50kit rate:7.0s/it remaining:2:09:43 elapsed:50:48 postfix:- (1143:tqdm_logging.py:145)
14:11:53.584 [I] Progress on: 396it/1.50kit rate:7.0s/it remaining:2:09:28 elapsed:51:02 postfix:- (1143:tqdm_logging.py:145)
14:12:07.672 [I] Progress on: 398it/1.50kit rate:7.0s/it remaining:2:09:13 elapsed:51:16 postfix:- (1143:tqdm_logging.py:145)
14:12:21.749 [I] Progress on: 400it/1.50kit rate:7.0s/it remaining:2:08:57 elapsed:51:30 postfix:- (1143:tqdm_logging.py:145)


14:12:35.500 [I] Progress on: 400it/1.50kit rate:7.0s/it remaining:2:08:57 elapsed:51:44 postfix:- (1143:tqdm_logging.py:145)
14:12:50.008 [I] Progress on: 404it/1.50kit rate:6.8s/it remaining:2:03:20 elapsed:51:58 postfix:- (1143:tqdm_logging.py:145)
14:13:04.133 [I] Progress on: 406it/1.50kit rate:6.9s/it remaining:2:05:59 elapsed:52:12 postfix:- (1143:tqdm_logging.py:145)
14:13:18.193 [I] Progress on: 408it/1.50kit rate:7.0s/it remaining:2:06:53 elapsed:52:26 postfix:- (1143:tqdm_logging.py:145)
14:13:32.299 [I] Progress on: 410it/1.50kit rate:7.0s/it remaining:2:07:24 elapsed:52:40 postfix:- (1143:tqdm_logging.py:145)
14:13:46.405 [I] Progress on: 412it/1.50kit rate:7.0s/it remaining:2:07:32 elapsed:52:55 postfix:- (1143:tqdm_logging.py:145)
14:14:00.498 [I] Progress on: 414it/1.50kit rate:7.0s/it remaining:2:07:26 elapsed:53:09 postfix:- (1143:tqdm_logging.py:145)
14:14:14.602 [I] Progress on: 416it/1.50kit rate:7.0s/it remaining:2:07:18 elapsed:53:23 postfix:- (1143:tqdm_logging.py:145)
14:14:28.697 [I] Progress on: 418it/1.50kit rate:7.0s/it remaining:2:07:05 elapsed:53:37 postfix:- (1143:tqdm_logging.py:145)
14:14:42.793 [I] Progress on: 420it/1.50kit rate:7.0s/it remaining:2:06:51 elapsed:53:51 postfix:- (1143:tqdm_logging.py:145)
14:14:56.899 [I] Progress on: 422it/1.50kit rate:7.0s/it remaining:2:06:39 elapsed:54:05 postfix:- (1143:tqdm_logging.py:145)
14:15:11.001 [I] Progress on: 424it/1.50kit rate:7.1s/it remaining:2:06:26 elapsed:54:19 postfix:- (1143:tqdm_logging.py:145)
14:15:25.093 [I] Progress on: 426it/1.50kit rate:7.0s/it remaining:2:06:10 elapsed:54:33 postfix:- (1143:tqdm_logging.py:145)
14:15:39.685 [I] Progress on: 428it/1.50kit rate:7.2s/it remaining:2:08:36 elapsed:54:48 postfix:- (1143:tqdm_logging.py:145)
14:15:53.306 [I] Progress on: 430it/1.50kit rate:7.0s/it remaining:2:05:17 elapsed:55:01 postfix:- (1143:tqdm_logging.py:145)
14:16:07.375 [I] Progress on: 432it/1.50kit rate:7.0s/it remaining:2:05:12 elapsed:55:15 postfix:- (1143:tqdm_logging.py:145)
14:16:21.479 [I] Progress on: 434it/1.50kit rate:7.0s/it remaining:2:05:08 elapsed:55:30 postfix:- (1143:tqdm_logging.py:145)
14:16:35.575 [I] Progress on: 436it/1.50kit rate:7.0s/it remaining:2:04:57 elapsed:55:44 postfix:- (1143:tqdm_logging.py:145)
14:16:49.671 [I] Progress on: 438it/1.50kit rate:7.0s/it remaining:2:04:43 elapsed:55:58 postfix:- (1143:tqdm_logging.py:145)
14:17:03.770 [I] Progress on: 440it/1.50kit rate:7.0s/it remaining:2:04:30 elapsed:56:12 postfix:- (1143:tqdm_logging.py:145)
14:17:17.893 [I] Progress on: 442it/1.50kit rate:7.1s/it remaining:2:04:24 elapsed:56:26 postfix:- (1143:tqdm_logging.py:145)
14:17:31.962 [I] Progress on: 444it/1.50kit rate:7.0s/it remaining:2:03:58 elapsed:56:40 postfix:- (1143:tqdm_logging.py:145)
14:17:46.045 [I] Progress on: 446it/1.50kit rate:7.0s/it remaining:2:03:44 elapsed:56:54 postfix:- (1143:tqdm_logging.py:145)
14:18:00.124 [I] Progress on: 448it/1.50kit rate:7.0s/it remaining:2:03:27 elapsed:57:08 postfix:- (1143:tqdm_logging.py:145)
14:18:14.204 [I] Progress on: 450it/1.50kit rate:7.0s/it remaining:2:03:13 elapsed:57:22 postfix:- (1143:tqdm_logging.py:145)


14:18:27.915 [I] Progress on: 450it/1.50kit rate:7.0s/it remaining:2:03:13 elapsed:57:36 postfix:- (1143:tqdm_logging.py:145)
14:18:42.417 [I] Progress on: 454it/1.50kit rate:6.8s/it remaining:1:57:43 elapsed:57:51 postfix:- (1143:tqdm_logging.py:145)
14:18:56.487 [I] Progress on: 456it/1.50kit rate:6.9s/it remaining:2:00:00 elapsed:58:05 postfix:- (1143:tqdm_logging.py:145)
14:19:10.557 [I] Progress on: 458it/1.50kit rate:7.0s/it remaining:2:01:00 elapsed:58:19 postfix:- (1143:tqdm_logging.py:145)
14:19:24.637 [I] Progress on: 460it/1.50kit rate:7.0s/it remaining:2:01:25 elapsed:58:33 postfix:- (1143:tqdm_logging.py:145)
14:19:38.719 [I] Progress on: 462it/1.50kit rate:7.0s/it remaining:2:01:31 elapsed:58:47 postfix:- (1143:tqdm_logging.py:145)
14:19:52.792 [I] Progress on: 464it/1.50kit rate:7.0s/it remaining:2:01:24 elapsed:59:01 postfix:- (1143:tqdm_logging.py:145)
14:20:06.864 [I] Progress on: 466it/1.50kit rate:7.0s/it remaining:2:01:13 elapsed:59:15 postfix:- (1143:tqdm_logging.py:145)
14:20:20.937 [I] Progress on: 468it/1.50kit rate:7.0s/it remaining:2:01:00 elapsed:59:29 postfix:- (1143:tqdm_logging.py:145)
14:20:35.012 [I] Progress on: 470it/1.50kit rate:7.0s/it remaining:2:00:47 elapsed:59:43 postfix:- (1143:tqdm_logging.py:145)
14:20:49.088 [I] Progress on: 472it/1.50kit rate:7.0s/it remaining:2:00:34 elapsed:59:57 postfix:- (1143:tqdm_logging.py:145)
14:21:03.166 [I] Progress on: 474it/1.50kit rate:7.0s/it remaining:2:00:21 elapsed:1:00:11 postfix:- (1143:tqdm_logging.py:145)
14:21:17.263 [I] Progress on: 476it/1.50kit rate:7.0s/it remaining:2:00:12 elapsed:1:00:25 postfix:- (1143:tqdm_logging.py:145)
14:21:31.336 [I] Progress on: 478it/1.50kit rate:7.0s/it remaining:1:59:54 elapsed:1:00:39 postfix:- (1143:tqdm_logging.py:145)
14:21:45.414 [I] Progress on: 480it/1.50kit rate:7.0s/it remaining:1:59:40 elapsed:1:00:54 postfix:- (1143:tqdm_logging.py:145)
14:21:59.494 [I] Progress on: 482it/1.50kit rate:7.0s/it remaining:1:59:26 elapsed:1:01:08 postfix:- (1143:tqdm_logging.py:145)
14:22:13.612 [I] Progress on: 484it/1.50kit rate:7.0s/it remaining:1:59:22 elapsed:1:01:22 postfix:- (1143:tqdm_logging.py:145)
14:22:27.705 [I] Progress on: 486it/1.50kit rate:7.0s/it remaining:1:59:05 elapsed:1:01:36 postfix:- (1143:tqdm_logging.py:145)
14:22:41.813 [I] Progress on: 488it/1.50kit rate:7.1s/it remaining:1:58:55 elapsed:1:01:50 postfix:- (1143:tqdm_logging.py:145)
14:22:55.923 [I] Progress on: 490it/1.50kit rate:7.1s/it remaining:1:58:44 elapsed:1:02:04 postfix:- (1143:tqdm_logging.py:145)
14:23:10.024 [I] Progress on: 492it/1.50kit rate:7.1s/it remaining:1:58:28 elapsed:1:02:18 postfix:- (1143:tqdm_logging.py:145)
14:23:24.138 [I] Progress on: 494it/1.50kit rate:7.1s/it remaining:1:58:17 elapsed:1:02:32 postfix:- (1143:tqdm_logging.py:145)
14:23:38.241 [I] Progress on: 496it/1.50kit rate:7.1s/it remaining:1:58:01 elapsed:1:02:46 postfix:- (1143:tqdm_logging.py:145)
14:23:52.338 [I] Progress on: 498it/1.50kit rate:7.1s/it remaining:1:57:44 elapsed:1:03:00 postfix:- (1143:tqdm_logging.py:145)
14:24:06.440 [I] Progress on: 500it/1.50kit rate:7.1s/it remaining:1:57:30 elapsed:1:03:15 postfix:- (1143:tqdm_logging.py:145)


14:24:20.185 [I] Progress on: 500it/1.50kit rate:7.1s/it remaining:1:57:30 elapsed:1:03:28 postfix:- (1143:tqdm_logging.py:145)
14:24:34.711 [I] Progress on: 504it/1.50kit rate:6.8s/it remaining:1:52:16 elapsed:1:03:43 postfix:- (1143:tqdm_logging.py:145)
14:24:48.802 [I] Progress on: 506it/1.50kit rate:6.9s/it remaining:1:54:25 elapsed:1:03:57 postfix:- (1143:tqdm_logging.py:145)
14:25:02.895 [I] Progress on: 508it/1.50kit rate:7.0s/it remaining:1:55:22 elapsed:1:04:11 postfix:- (1143:tqdm_logging.py:145)
14:25:17.020 [I] Progress on: 510it/1.50kit rate:7.0s/it remaining:1:55:50 elapsed:1:04:25 postfix:- (1143:tqdm_logging.py:145)
14:25:31.105 [I] Progress on: 512it/1.50kit rate:7.0s/it remaining:1:55:49 elapsed:1:04:39 postfix:- (1143:tqdm_logging.py:145)
14:25:45.196 [I] Progress on: 514it/1.50kit rate:7.0s/it remaining:1:55:41 elapsed:1:04:53 postfix:- (1143:tqdm_logging.py:145)
14:25:59.293 [I] Progress on: 516it/1.50kit rate:7.0s/it remaining:1:55:31 elapsed:1:05:07 postfix:- (1143:tqdm_logging.py:145)
14:26:13.372 [I] Progress on: 518it/1.50kit rate:7.0s/it remaining:1:55:15 elapsed:1:05:21 postfix:- (1143:tqdm_logging.py:145)
14:26:27.449 [I] Progress on: 520it/1.50kit rate:7.0s/it remaining:1:54:59 elapsed:1:05:36 postfix:- (1143:tqdm_logging.py:145)
14:26:41.519 [I] Progress on: 522it/1.50kit rate:7.0s/it remaining:1:54:43 elapsed:1:05:50 postfix:- (1143:tqdm_logging.py:145)
14:26:55.592 [I] Progress on: 524it/1.50kit rate:7.0s/it remaining:1:54:28 elapsed:1:06:04 postfix:- (1143:tqdm_logging.py:145)
14:27:09.672 [I] Progress on: 526it/1.50kit rate:7.0s/it remaining:1:54:15 elapsed:1:06:18 postfix:- (1143:tqdm_logging.py:145)
14:27:23.748 [I] Progress on: 528it/1.50kit rate:7.0s/it remaining:1:54:00 elapsed:1:06:32 postfix:- (1143:tqdm_logging.py:145)
14:27:37.838 [I] Progress on: 530it/1.50kit rate:7.0s/it remaining:1:53:50 elapsed:1:06:46 postfix:- (1143:tqdm_logging.py:145)
14:27:51.918 [I] Progress on: 532it/1.50kit rate:7.0s/it remaining:1:53:35 elapsed:1:07:00 postfix:- (1143:tqdm_logging.py:145)
14:28:05.998 [I] Progress on: 534it/1.50kit rate:7.0s/it remaining:1:53:21 elapsed:1:07:14 postfix:- (1143:tqdm_logging.py:145)
14:28:20.093 [I] Progress on: 536it/1.50kit rate:7.0s/it remaining:1:52:27 elapsed:1:07:28 postfix:- (1143:tqdm_logging.py:145)
14:28:34.192 [I] Progress on: 538it/1.50kit rate:7.0s/it remaining:1:52:38 elapsed:1:07:42 postfix:- (1143:tqdm_logging.py:145)
14:28:48.291 [I] Progress on: 540it/1.50kit rate:7.0s/it remaining:1:52:36 elapsed:1:07:56 postfix:- (1143:tqdm_logging.py:145)
14:29:02.383 [I] Progress on: 542it/1.50kit rate:7.0s/it remaining:1:52:25 elapsed:1:08:10 postfix:- (1143:tqdm_logging.py:145)
14:29:16.473 [I] Progress on: 544it/1.50kit rate:7.0s/it remaining:1:52:13 elapsed:1:08:25 postfix:- (1143:tqdm_logging.py:145)
14:29:30.569 [I] Progress on: 546it/1.50kit rate:7.0s/it remaining:1:52:01 elapsed:1:08:39 postfix:- (1143:tqdm_logging.py:145)
14:29:44.653 [I] Progress on: 548it/1.50kit rate:7.0s/it remaining:1:51:46 elapsed:1:08:53 postfix:- (1143:tqdm_logging.py:145)
14:29:58.751 [I] Progress on: 550it/1.50kit rate:7.0s/it remaining:1:51:34 elapsed:1:09:07 postfix:- (1143:tqdm_logging.py:145)


14:30:12.491 [I] Progress on: 550it/1.50kit rate:7.0s/it remaining:1:51:34 elapsed:1:09:21 postfix:- (1143:tqdm_logging.py:145)
14:30:26.993 [I] Progress on: 554it/1.50kit rate:6.8s/it remaining:1:46:31 elapsed:1:09:35 postfix:- (1143:tqdm_logging.py:145)
14:30:41.088 [I] Progress on: 556it/1.50kit rate:6.9s/it remaining:1:48:37 elapsed:1:09:49 postfix:- (1143:tqdm_logging.py:145)
14:30:55.189 [I] Progress on: 558it/1.50kit rate:7.0s/it remaining:1:49:34 elapsed:1:10:03 postfix:- (1143:tqdm_logging.py:145)
14:31:09.264 [I] Progress on: 560it/1.50kit rate:7.0s/it remaining:1:49:49 elapsed:1:10:17 postfix:- (1143:tqdm_logging.py:145)
14:31:23.371 [I] Progress on: 562it/1.50kit rate:7.0s/it remaining:1:49:56 elapsed:1:10:31 postfix:- (1143:tqdm_logging.py:145)
14:31:37.465 [I] Progress on: 564it/1.50kit rate:7.0s/it remaining:1:49:49 elapsed:1:10:46 postfix:- (1143:tqdm_logging.py:145)
14:31:51.550 [I] Progress on: 566it/1.50kit rate:7.0s/it remaining:1:49:37 elapsed:1:11:00 postfix:- (1143:tqdm_logging.py:145)
14:32:05.623 [I] Progress on: 568it/1.50kit rate:7.0s/it remaining:1:49:20 elapsed:1:11:14 postfix:- (1143:tqdm_logging.py:145)
14:32:19.713 [I] Progress on: 570it/1.50kit rate:7.0s/it remaining:1:49:09 elapsed:1:11:28 postfix:- (1143:tqdm_logging.py:145)
14:32:33.809 [I] Progress on: 572it/1.50kit rate:7.0s/it remaining:1:48:58 elapsed:1:11:42 postfix:- (1143:tqdm_logging.py:145)
14:32:47.890 [I] Progress on: 574it/1.50kit rate:7.0s/it remaining:1:48:41 elapsed:1:11:56 postfix:- (1143:tqdm_logging.py:145)
14:33:01.980 [I] Progress on: 576it/1.50kit rate:7.0s/it remaining:1:48:28 elapsed:1:12:10 postfix:- (1143:tqdm_logging.py:145)
14:33:16.075 [I] Progress on: 578it/1.50kit rate:7.0s/it remaining:1:48:16 elapsed:1:12:24 postfix:- (1143:tqdm_logging.py:145)
14:33:30.179 [I] Progress on: 580it/1.50kit rate:7.0s/it remaining:1:48:05 elapsed:1:12:38 postfix:- (1143:tqdm_logging.py:145)
14:33:44.297 [I] Progress on: 582it/1.50kit rate:7.1s/it remaining:1:47:55 elapsed:1:12:52 postfix:- (1143:tqdm_logging.py:145)
14:33:58.404 [I] Progress on: 584it/1.50kit rate:7.1s/it remaining:1:47:41 elapsed:1:13:07 postfix:- (1143:tqdm_logging.py:145)
14:34:12.503 [I] Progress on: 586it/1.50kit rate:7.1s/it remaining:1:47:26 elapsed:1:13:21 postfix:- (1143:tqdm_logging.py:145)
14:34:26.617 [I] Progress on: 588it/1.50kit rate:7.1s/it remaining:1:47:14 elapsed:1:13:35 postfix:- (1143:tqdm_logging.py:145)
14:34:40.732 [I] Progress on: 590it/1.50kit rate:7.1s/it remaining:1:47:01 elapsed:1:13:49 postfix:- (1143:tqdm_logging.py:145)
14:34:54.820 [I] Progress on: 592it/1.50kit rate:7.1s/it remaining:1:46:42 elapsed:1:14:03 postfix:- (1143:tqdm_logging.py:145)
14:35:08.926 [I] Progress on: 594it/1.50kit rate:7.1s/it remaining:1:46:29 elapsed:1:14:17 postfix:- (1143:tqdm_logging.py:145)
14:35:23.023 [I] Progress on: 596it/1.50kit rate:7.1s/it remaining:1:46:13 elapsed:1:14:31 postfix:- (1143:tqdm_logging.py:145)
14:35:37.115 [I] Progress on: 598it/1.50kit rate:7.0s/it remaining:1:45:56 elapsed:1:14:45 postfix:- (1143:tqdm_logging.py:145)
14:35:51.206 [I] Progress on: 600it/1.50kit rate:7.0s/it remaining:1:45:42 elapsed:1:14:59 postfix:- (1143:tqdm_logging.py:145)


14:36:04.920 [I] Progress on: 600it/1.50kit rate:7.0s/it remaining:1:45:42 elapsed:1:15:13 postfix:- (1143:tqdm_logging.py:145)
14:36:19.437 [I] Progress on: 604it/1.50kit rate:6.8s/it remaining:1:40:53 elapsed:1:15:28 postfix:- (1143:tqdm_logging.py:145)
14:36:33.508 [I] Progress on: 606it/1.50kit rate:6.9s/it remaining:1:42:47 elapsed:1:15:42 postfix:- (1143:tqdm_logging.py:145)
14:36:47.589 [I] Progress on: 608it/1.50kit rate:7.0s/it remaining:1:43:37 elapsed:1:15:56 postfix:- (1143:tqdm_logging.py:145)
14:37:01.652 [I] Progress on: 610it/1.50kit rate:7.0s/it remaining:1:43:51 elapsed:1:16:10 postfix:- (1143:tqdm_logging.py:145)
14:37:15.726 [I] Progress on: 612it/1.50kit rate:7.0s/it remaining:1:43:53 elapsed:1:16:24 postfix:- (1143:tqdm_logging.py:145)
14:37:29.805 [I] Progress on: 614it/1.50kit rate:7.0s/it remaining:1:43:48 elapsed:1:16:38 postfix:- (1143:tqdm_logging.py:145)
14:37:43.866 [I] Progress on: 616it/1.50kit rate:7.0s/it remaining:1:43:35 elapsed:1:16:52 postfix:- (1143:tqdm_logging.py:145)
14:37:57.943 [I] Progress on: 618it/1.50kit rate:7.0s/it remaining:1:43:24 elapsed:1:17:06 postfix:- (1143:tqdm_logging.py:145)
14:38:12.020 [I] Progress on: 620it/1.50kit rate:7.0s/it remaining:1:43:12 elapsed:1:17:20 postfix:- (1143:tqdm_logging.py:145)
14:38:26.101 [I] Progress on: 622it/1.50kit rate:7.0s/it remaining:1:43:00 elapsed:1:17:34 postfix:- (1143:tqdm_logging.py:145)
14:38:40.186 [I] Progress on: 624it/1.50kit rate:7.0s/it remaining:1:42:48 elapsed:1:17:48 postfix:- (1143:tqdm_logging.py:145)
14:38:54.274 [I] Progress on: 626it/1.50kit rate:7.0s/it remaining:1:42:37 elapsed:1:18:02 postfix:- (1143:tqdm_logging.py:145)
14:39:08.337 [I] Progress on: 628it/1.50kit rate:7.0s/it remaining:1:42:19 elapsed:1:18:16 postfix:- (1143:tqdm_logging.py:145)
14:39:22.426 [I] Progress on: 630it/1.50kit rate:7.0s/it remaining:1:42:06 elapsed:1:18:31 postfix:- (1143:tqdm_logging.py:145)
14:39:36.537 [I] Progress on: 632it/1.50kit rate:7.0s/it remaining:1:41:58 elapsed:1:18:45 postfix:- (1143:tqdm_logging.py:145)
14:39:50.633 [I] Progress on: 634it/1.50kit rate:7.0s/it remaining:1:41:44 elapsed:1:18:59 postfix:- (1143:tqdm_logging.py:145)
14:40:04.733 [I] Progress on: 636it/1.50kit rate:7.0s/it remaining:1:41:30 elapsed:1:19:13 postfix:- (1143:tqdm_logging.py:145)
14:40:18.848 [I] Progress on: 638it/1.50kit rate:7.1s/it remaining:1:41:19 elapsed:1:19:27 postfix:- (1143:tqdm_logging.py:145)
14:40:32.956 [I] Progress on: 640it/1.50kit rate:7.1s/it remaining:1:41:06 elapsed:1:19:41 postfix:- (1143:tqdm_logging.py:145)
14:40:47.618 [I] Progress on: 642it/1.50kit rate:7.2s/it remaining:1:43:15 elapsed:1:19:56 postfix:- (1143:tqdm_logging.py:145)
14:41:01.152 [I] Progress on: 644it/1.50kit rate:7.0s/it remaining:1:40:06 elapsed:1:20:09 postfix:- (1143:tqdm_logging.py:145)
14:41:15.261 [I] Progress on: 646it/1.50kit rate:7.0s/it remaining:1:40:08 elapsed:1:20:23 postfix:- (1143:tqdm_logging.py:145)
14:41:29.372 [I] Progress on: 648it/1.50kit rate:7.0s/it remaining:1:40:03 elapsed:1:20:37 postfix:- (1143:tqdm_logging.py:145)
14:41:43.486 [I] Progress on: 650it/1.50kit rate:7.1s/it remaining:1:39:54 elapsed:1:20:52 postfix:- (1143:tqdm_logging.py:145)


14:41:57.283 [I] Progress on: 650it/1.50kit rate:7.1s/it remaining:1:39:54 elapsed:1:21:05 postfix:- (1143:tqdm_logging.py:145)
14:42:11.837 [I] Progress on: 654it/1.50kit rate:6.8s/it remaining:1:35:25 elapsed:1:21:20 postfix:- (1143:tqdm_logging.py:145)
14:42:25.945 [I] Progress on: 656it/1.50kit rate:6.9s/it remaining:1:37:15 elapsed:1:21:34 postfix:- (1143:tqdm_logging.py:145)
14:42:40.055 [I] Progress on: 658it/1.50kit rate:7.0s/it remaining:1:38:02 elapsed:1:21:48 postfix:- (1143:tqdm_logging.py:145)
14:42:54.155 [I] Progress on: 660it/1.50kit rate:7.0s/it remaining:1:38:15 elapsed:1:22:02 postfix:- (1143:tqdm_logging.py:145)
14:43:08.267 [I] Progress on: 662it/1.50kit rate:7.0s/it remaining:1:38:16 elapsed:1:22:16 postfix:- (1143:tqdm_logging.py:145)
14:43:22.368 [I] Progress on: 664it/1.50kit rate:7.0s/it remaining:1:38:08 elapsed:1:22:30 postfix:- (1143:tqdm_logging.py:145)
14:43:36.474 [I] Progress on: 666it/1.50kit rate:7.0s/it remaining:1:37:57 elapsed:1:22:45 postfix:- (1143:tqdm_logging.py:145)
14:43:50.582 [I] Progress on: 668it/1.50kit rate:7.1s/it remaining:1:37:46 elapsed:1:22:59 postfix:- (1143:tqdm_logging.py:145)
14:44:04.703 [I] Progress on: 670it/1.50kit rate:7.1s/it remaining:1:37:36 elapsed:1:23:13 postfix:- (1143:tqdm_logging.py:145)
14:44:18.806 [I] Progress on: 672it/1.50kit rate:7.1s/it remaining:1:37:20 elapsed:1:23:27 postfix:- (1143:tqdm_logging.py:145)
14:44:32.907 [I] Progress on: 674it/1.50kit rate:7.1s/it remaining:1:37:05 elapsed:1:23:41 postfix:- (1143:tqdm_logging.py:145)
14:44:47.022 [I] Progress on: 676it/1.50kit rate:7.1s/it remaining:1:36:53 elapsed:1:23:55 postfix:- (1143:tqdm_logging.py:145)
14:45:01.126 [I] Progress on: 678it/1.50kit rate:7.1s/it remaining:1:36:37 elapsed:1:24:09 postfix:- (1143:tqdm_logging.py:145)
14:45:15.251 [I] Progress on: 680it/1.50kit rate:7.1s/it remaining:1:36:27 elapsed:1:24:23 postfix:- (1143:tqdm_logging.py:145)
14:45:29.368 [I] Progress on: 682it/1.50kit rate:7.1s/it remaining:1:36:12 elapsed:1:24:37 postfix:- (1143:tqdm_logging.py:145)
14:45:43.468 [I] Progress on: 684it/1.50kit rate:7.1s/it remaining:1:35:55 elapsed:1:24:52 postfix:- (1143:tqdm_logging.py:145)
14:45:57.583 [I] Progress on: 686it/1.50kit rate:7.1s/it remaining:1:35:43 elapsed:1:25:06 postfix:- (1143:tqdm_logging.py:145)
14:46:11.691 [I] Progress on: 688it/1.50kit rate:7.1s/it remaining:1:35:28 elapsed:1:25:20 postfix:- (1143:tqdm_logging.py:145)
14:46:25.824 [I] Progress on: 690it/1.50kit rate:7.1s/it remaining:1:35:19 elapsed:1:25:34 postfix:- (1143:tqdm_logging.py:145)
14:46:39.931 [I] Progress on: 692it/1.50kit rate:7.1s/it remaining:1:35:01 elapsed:1:25:48 postfix:- (1143:tqdm_logging.py:145)
14:46:54.043 [I] Progress on: 694it/1.50kit rate:7.1s/it remaining:1:34:47 elapsed:1:26:02 postfix:- (1143:tqdm_logging.py:145)
14:47:08.162 [I] Progress on: 696it/1.50kit rate:7.1s/it remaining:1:34:34 elapsed:1:26:16 postfix:- (1143:tqdm_logging.py:145)
14:47:22.270 [I] Progress on: 698it/1.50kit rate:7.1s/it remaining:1:34:18 elapsed:1:26:30 postfix:- (1143:tqdm_logging.py:145)
14:47:36.370 [I] Progress on: 700it/1.50kit rate:7.1s/it remaining:1:34:01 elapsed:1:26:44 postfix:- (1143:tqdm_logging.py:145)


14:47:50.116 [I] Progress on: 700it/1.50kit rate:7.1s/it remaining:1:34:01 elapsed:1:26:58 postfix:- (1143:tqdm_logging.py:145)
14:48:04.613 [I] Progress on: 704it/1.50kit rate:6.8s/it remaining:1:29:38 elapsed:1:27:13 postfix:- (1143:tqdm_logging.py:145)
14:48:18.710 [I] Progress on: 706it/1.50kit rate:6.9s/it remaining:1:31:22 elapsed:1:27:27 postfix:- (1143:tqdm_logging.py:145)
14:48:32.788 [I] Progress on: 708it/1.50kit rate:7.0s/it remaining:1:32:03 elapsed:1:27:41 postfix:- (1143:tqdm_logging.py:145)
14:48:46.858 [I] Progress on: 710it/1.50kit rate:7.0s/it remaining:1:32:13 elapsed:1:27:55 postfix:- (1143:tqdm_logging.py:145)
14:49:00.937 [I] Progress on: 712it/1.50kit rate:7.0s/it remaining:1:32:13 elapsed:1:28:09 postfix:- (1143:tqdm_logging.py:145)
14:49:15.010 [I] Progress on: 714it/1.50kit rate:7.0s/it remaining:1:32:05 elapsed:1:28:23 postfix:- (1143:tqdm_logging.py:145)
14:49:29.086 [I] Progress on: 716it/1.50kit rate:7.0s/it remaining:1:31:54 elapsed:1:28:37 postfix:- (1143:tqdm_logging.py:145)
14:49:43.159 [I] Progress on: 718it/1.50kit rate:7.0s/it remaining:1:31:41 elapsed:1:28:51 postfix:- (1143:tqdm_logging.py:145)
14:49:57.230 [I] Progress on: 720it/1.50kit rate:7.0s/it remaining:1:31:27 elapsed:1:29:05 postfix:- (1143:tqdm_logging.py:145)
14:50:11.307 [I] Progress on: 722it/1.50kit rate:7.0s/it remaining:1:31:14 elapsed:1:29:19 postfix:- (1143:tqdm_logging.py:145)
14:50:25.376 [I] Progress on: 724it/1.50kit rate:7.0s/it remaining:1:30:59 elapsed:1:29:33 postfix:- (1143:tqdm_logging.py:145)
14:50:39.465 [I] Progress on: 726it/1.50kit rate:7.0s/it remaining:1:30:49 elapsed:1:29:48 postfix:- (1143:tqdm_logging.py:145)
14:50:53.531 [I] Progress on: 728it/1.50kit rate:7.0s/it remaining:1:30:31 elapsed:1:30:02 postfix:- (1143:tqdm_logging.py:145)
14:51:07.606 [I] Progress on: 730it/1.50kit rate:7.0s/it remaining:1:30:17 elapsed:1:30:16 postfix:- (1143:tqdm_logging.py:145)
14:51:21.684 [I] Progress on: 732it/1.50kit rate:7.0s/it remaining:1:30:04 elapsed:1:30:30 postfix:- (1143:tqdm_logging.py:145)
14:51:35.759 [I] Progress on: 734it/1.50kit rate:7.0s/it remaining:1:29:50 elapsed:1:30:44 postfix:- (1143:tqdm_logging.py:145)
14:51:49.835 [I] Progress on: 736it/1.50kit rate:7.0s/it remaining:1:29:37 elapsed:1:30:58 postfix:- (1143:tqdm_logging.py:145)
14:52:03.903 [I] Progress on: 738it/1.50kit rate:7.0s/it remaining:1:29:21 elapsed:1:31:12 postfix:- (1143:tqdm_logging.py:145)
14:52:17.985 [I] Progress on: 740it/1.50kit rate:7.0s/it remaining:1:29:09 elapsed:1:31:26 postfix:- (1143:tqdm_logging.py:145)
14:52:32.058 [I] Progress on: 742it/1.50kit rate:7.0s/it remaining:1:28:54 elapsed:1:31:40 postfix:- (1143:tqdm_logging.py:145)
14:52:46.135 [I] Progress on: 744it/1.50kit rate:7.0s/it remaining:1:28:40 elapsed:1:31:54 postfix:- (1143:tqdm_logging.py:145)
14:53:00.212 [I] Progress on: 746it/1.50kit rate:7.0s/it remaining:1:28:26 elapsed:1:32:08 postfix:- (1143:tqdm_logging.py:145)
14:53:14.302 [I] Progress on: 748it/1.50kit rate:7.0s/it remaining:1:28:14 elapsed:1:32:22 postfix:- (1143:tqdm_logging.py:145)
14:53:28.381 [I] Progress on: 750it/1.50kit rate:7.0s/it remaining:1:27:24 elapsed:1:32:36 postfix:- (1143:tqdm_logging.py:145)


14:53:42.095 [I] Progress on: 750it/1.50kit rate:7.0s/it remaining:1:27:24 elapsed:1:32:50 postfix:- (1143:tqdm_logging.py:145)
14:53:56.615 [I] Progress on: 754it/1.50kit rate:6.7s/it remaining:1:23:49 elapsed:1:33:05 postfix:- (1143:tqdm_logging.py:145)
14:54:10.689 [I] Progress on: 756it/1.50kit rate:6.9s/it remaining:1:25:27 elapsed:1:33:19 postfix:- (1143:tqdm_logging.py:145)
14:54:24.762 [I] Progress on: 758it/1.50kit rate:7.0s/it remaining:1:26:08 elapsed:1:33:33 postfix:- (1143:tqdm_logging.py:145)
14:54:38.842 [I] Progress on: 760it/1.50kit rate:7.0s/it remaining:1:26:22 elapsed:1:33:47 postfix:- (1143:tqdm_logging.py:145)
14:54:52.914 [I] Progress on: 762it/1.50kit rate:7.0s/it remaining:1:26:20 elapsed:1:34:01 postfix:- (1143:tqdm_logging.py:145)
14:55:06.990 [I] Progress on: 764it/1.50kit rate:7.0s/it remaining:1:26:13 elapsed:1:34:15 postfix:- (1143:tqdm_logging.py:145)
14:55:21.067 [I] Progress on: 766it/1.50kit rate:7.0s/it remaining:1:26:02 elapsed:1:34:29 postfix:- (1143:tqdm_logging.py:145)
14:55:35.134 [I] Progress on: 768it/1.50kit rate:7.0s/it remaining:1:25:48 elapsed:1:34:43 postfix:- (1143:tqdm_logging.py:145)
14:55:49.197 [I] Progress on: 770it/1.50kit rate:7.0s/it remaining:1:25:34 elapsed:1:34:57 postfix:- (1143:tqdm_logging.py:145)
14:56:03.274 [I] Progress on: 772it/1.50kit rate:7.0s/it remaining:1:25:22 elapsed:1:35:11 postfix:- (1143:tqdm_logging.py:145)
14:56:17.352 [I] Progress on: 774it/1.50kit rate:7.0s/it remaining:1:25:09 elapsed:1:35:25 postfix:- (1143:tqdm_logging.py:145)
14:56:31.422 [I] Progress on: 776it/1.50kit rate:7.0s/it remaining:1:24:53 elapsed:1:35:40 postfix:- (1143:tqdm_logging.py:145)
14:56:45.496 [I] Progress on: 778it/1.50kit rate:7.0s/it remaining:1:24:40 elapsed:1:35:54 postfix:- (1143:tqdm_logging.py:145)
14:56:59.574 [I] Progress on: 780it/1.50kit rate:7.0s/it remaining:1:24:26 elapsed:1:36:08 postfix:- (1143:tqdm_logging.py:145)
14:57:13.660 [I] Progress on: 782it/1.50kit rate:7.0s/it remaining:1:24:15 elapsed:1:36:22 postfix:- (1143:tqdm_logging.py:145)
14:57:27.732 [I] Progress on: 784it/1.50kit rate:7.0s/it remaining:1:23:59 elapsed:1:36:36 postfix:- (1143:tqdm_logging.py:145)
14:57:41.803 [I] Progress on: 786it/1.50kit rate:7.0s/it remaining:1:23:44 elapsed:1:36:50 postfix:- (1143:tqdm_logging.py:145)
14:57:55.877 [I] Progress on: 788it/1.50kit rate:7.0s/it remaining:1:23:30 elapsed:1:37:04 postfix:- (1143:tqdm_logging.py:145)
14:58:09.958 [I] Progress on: 790it/1.50kit rate:7.0s/it remaining:1:23:17 elapsed:1:37:18 postfix:- (1143:tqdm_logging.py:145)
14:58:24.057 [I] Progress on: 792it/1.50kit rate:7.0s/it remaining:1:23:07 elapsed:1:37:32 postfix:- (1143:tqdm_logging.py:145)
14:58:38.131 [I] Progress on: 794it/1.50kit rate:7.0s/it remaining:1:22:50 elapsed:1:37:46 postfix:- (1143:tqdm_logging.py:145)
14:58:52.214 [I] Progress on: 796it/1.50kit rate:7.0s/it remaining:1:22:36 elapsed:1:38:00 postfix:- (1143:tqdm_logging.py:145)
14:59:06.302 [I] Progress on: 798it/1.50kit rate:7.0s/it remaining:1:22:24 elapsed:1:38:14 postfix:- (1143:tqdm_logging.py:145)
14:59:20.383 [I] Progress on: 800it/1.50kit rate:7.0s/it remaining:1:22:09 elapsed:1:38:28 postfix:- (1143:tqdm_logging.py:145)


14:59:34.114 [I] Progress on: 800it/1.50kit rate:7.0s/it remaining:1:22:09 elapsed:1:38:42 postfix:- (1143:tqdm_logging.py:145)
14:59:48.618 [I] Progress on: 804it/1.50kit rate:6.8s/it remaining:1:18:21 elapsed:1:38:57 postfix:- (1143:tqdm_logging.py:145)
15:00:02.709 [I] Progress on: 806it/1.50kit rate:6.9s/it remaining:1:19:49 elapsed:1:39:11 postfix:- (1143:tqdm_logging.py:145)
15:00:16.830 [I] Progress on: 808it/1.50kit rate:7.0s/it remaining:1:20:31 elapsed:1:39:25 postfix:- (1143:tqdm_logging.py:145)
15:00:30.916 [I] Progress on: 810it/1.50kit rate:7.0s/it remaining:1:20:38 elapsed:1:39:39 postfix:- (1143:tqdm_logging.py:145)
15:00:45.006 [I] Progress on: 812it/1.50kit rate:7.0s/it remaining:1:20:36 elapsed:1:39:53 postfix:- (1143:tqdm_logging.py:145)
15:00:59.087 [I] Progress on: 814it/1.50kit rate:7.0s/it remaining:1:20:25 elapsed:1:40:07 postfix:- (1143:tqdm_logging.py:145)
15:01:13.164 [I] Progress on: 816it/1.50kit rate:7.0s/it remaining:1:20:13 elapsed:1:40:21 postfix:- (1143:tqdm_logging.py:145)
15:01:27.235 [I] Progress on: 818it/1.50kit rate:7.0s/it remaining:1:19:58 elapsed:1:40:35 postfix:- (1143:tqdm_logging.py:145)
15:01:41.309 [I] Progress on: 820it/1.50kit rate:7.0s/it remaining:1:19:44 elapsed:1:40:49 postfix:- (1143:tqdm_logging.py:145)
15:01:55.384 [I] Progress on: 822it/1.50kit rate:7.0s/it remaining:1:19:30 elapsed:1:41:04 postfix:- (1143:tqdm_logging.py:145)
15:02:09.463 [I] Progress on: 824it/1.50kit rate:7.0s/it remaining:1:19:17 elapsed:1:41:18 postfix:- (1143:tqdm_logging.py:145)
15:02:23.539 [I] Progress on: 826it/1.50kit rate:7.0s/it remaining:1:19:03 elapsed:1:41:32 postfix:- (1143:tqdm_logging.py:145)
15:02:37.608 [I] Progress on: 828it/1.50kit rate:7.0s/it remaining:1:18:48 elapsed:1:41:46 postfix:- (1143:tqdm_logging.py:145)
15:02:51.692 [I] Progress on: 830it/1.50kit rate:7.0s/it remaining:1:18:36 elapsed:1:42:00 postfix:- (1143:tqdm_logging.py:145)
15:03:05.776 [I] Progress on: 832it/1.50kit rate:7.0s/it remaining:1:18:23 elapsed:1:42:14 postfix:- (1143:tqdm_logging.py:145)
15:03:19.836 [I] Progress on: 834it/1.50kit rate:7.0s/it remaining:1:18:05 elapsed:1:42:28 postfix:- (1143:tqdm_logging.py:145)
15:03:33.915 [I] Progress on: 836it/1.50kit rate:7.0s/it remaining:1:17:53 elapsed:1:42:42 postfix:- (1143:tqdm_logging.py:145)
15:03:47.984 [I] Progress on: 838it/1.50kit rate:7.0s/it remaining:1:17:37 elapsed:1:42:56 postfix:- (1143:tqdm_logging.py:145)
15:04:02.062 [I] Progress on: 840it/1.50kit rate:7.0s/it remaining:1:17:24 elapsed:1:43:10 postfix:- (1143:tqdm_logging.py:145)
15:04:16.140 [I] Progress on: 842it/1.50kit rate:7.0s/it remaining:1:17:10 elapsed:1:43:24 postfix:- (1143:tqdm_logging.py:145)
15:04:30.215 [I] Progress on: 844it/1.50kit rate:7.0s/it remaining:1:16:56 elapsed:1:43:38 postfix:- (1143:tqdm_logging.py:145)
15:04:44.290 [I] Progress on: 846it/1.50kit rate:7.0s/it remaining:1:16:42 elapsed:1:43:52 postfix:- (1143:tqdm_logging.py:145)
15:04:58.370 [I] Progress on: 848it/1.50kit rate:7.0s/it remaining:1:16:29 elapsed:1:44:06 postfix:- (1143:tqdm_logging.py:145)
15:05:12.444 [I] Progress on: 850it/1.50kit rate:7.0s/it remaining:1:16:14 elapsed:1:44:21 postfix:- (1143:tqdm_logging.py:145)


15:05:26.155 [I] Progress on: 850it/1.50kit rate:7.0s/it remaining:1:16:14 elapsed:1:44:34 postfix:- (1143:tqdm_logging.py:145)
15:05:40.636 [I] Progress on: 854it/1.50kit rate:6.7s/it remaining:1:12:38 elapsed:1:44:49 postfix:- (1143:tqdm_logging.py:145)
15:05:55.274 [I] Progress on: 856it/1.50kit rate:7.1s/it remaining:1:15:49 elapsed:1:45:03 postfix:- (1143:tqdm_logging.py:145)
15:06:08.794 [I] Progress on: 858it/1.50kit rate:6.9s/it remaining:1:14:13 elapsed:1:45:17 postfix:- (1143:tqdm_logging.py:145)
15:06:22.878 [I] Progress on: 860it/1.50kit rate:7.0s/it remaining:1:14:36 elapsed:1:45:31 postfix:- (1143:tqdm_logging.py:145)
15:06:36.942 [I] Progress on: 862it/1.50kit rate:7.0s/it remaining:1:14:37 elapsed:1:45:45 postfix:- (1143:tqdm_logging.py:145)
15:06:51.033 [I] Progress on: 864it/1.50kit rate:7.0s/it remaining:1:14:34 elapsed:1:45:59 postfix:- (1143:tqdm_logging.py:145)
15:07:05.104 [I] Progress on: 866it/1.50kit rate:7.0s/it remaining:1:14:23 elapsed:1:46:13 postfix:- (1143:tqdm_logging.py:145)
15:07:19.185 [I] Progress on: 868it/1.50kit rate:7.0s/it remaining:1:14:11 elapsed:1:46:27 postfix:- (1143:tqdm_logging.py:145)
15:07:33.247 [I] Progress on: 870it/1.50kit rate:7.0s/it remaining:1:13:56 elapsed:1:46:41 postfix:- (1143:tqdm_logging.py:145)
15:07:47.334 [I] Progress on: 872it/1.50kit rate:7.0s/it remaining:1:13:45 elapsed:1:46:55 postfix:- (1143:tqdm_logging.py:145)
15:08:01.400 [I] Progress on: 874it/1.50kit rate:7.0s/it remaining:1:13:28 elapsed:1:47:10 postfix:- (1143:tqdm_logging.py:145)
15:08:15.487 [I] Progress on: 876it/1.50kit rate:7.0s/it remaining:1:13:17 elapsed:1:47:24 postfix:- (1143:tqdm_logging.py:145)
15:08:29.546 [I] Progress on: 878it/1.50kit rate:7.0s/it remaining:1:13:00 elapsed:1:47:38 postfix:- (1143:tqdm_logging.py:145)
15:08:43.638 [I] Progress on: 880it/1.50kit rate:7.0s/it remaining:1:12:49 elapsed:1:47:52 postfix:- (1143:tqdm_logging.py:145)
15:08:57.703 [I] Progress on: 882it/1.50kit rate:7.0s/it remaining:1:12:33 elapsed:1:48:06 postfix:- (1143:tqdm_logging.py:145)
15:09:11.780 [I] Progress on: 884it/1.50kit rate:7.0s/it remaining:1:12:19 elapsed:1:48:20 postfix:- (1143:tqdm_logging.py:145)
15:09:25.855 [I] Progress on: 886it/1.50kit rate:7.0s/it remaining:1:12:05 elapsed:1:48:34 postfix:- (1143:tqdm_logging.py:145)
15:09:39.922 [I] Progress on: 888it/1.50kit rate:7.0s/it remaining:1:11:49 elapsed:1:48:48 postfix:- (1143:tqdm_logging.py:145)
15:09:53.993 [I] Progress on: 890it/1.50kit rate:7.0s/it remaining:1:11:33 elapsed:1:49:02 postfix:- (1143:tqdm_logging.py:145)
15:10:08.062 [I] Progress on: 892it/1.50kit rate:7.0s/it remaining:1:11:17 elapsed:1:49:16 postfix:- (1143:tqdm_logging.py:145)
15:10:22.144 [I] Progress on: 894it/1.50kit rate:7.0s/it remaining:1:11:05 elapsed:1:49:30 postfix:- (1143:tqdm_logging.py:145)
15:10:36.219 [I] Progress on: 896it/1.50kit rate:7.0s/it remaining:1:10:50 elapsed:1:49:44 postfix:- (1143:tqdm_logging.py:145)
15:10:50.298 [I] Progress on: 898it/1.50kit rate:7.0s/it remaining:1:10:37 elapsed:1:49:58 postfix:- (1143:tqdm_logging.py:145)
15:11:04.373 [I] Progress on: 900it/1.50kit rate:7.0s/it remaining:1:10:22 elapsed:1:50:12 postfix:- (1143:tqdm_logging.py:145)


15:11:18.087 [I] Progress on: 900it/1.50kit rate:7.0s/it remaining:1:10:22 elapsed:1:50:26 postfix:- (1143:tqdm_logging.py:145)
15:11:32.606 [I] Progress on: 904it/1.50kit rate:6.8s/it remaining:1:07:04 elapsed:1:50:41 postfix:- (1143:tqdm_logging.py:145)
15:11:46.682 [I] Progress on: 906it/1.50kit rate:6.9s/it remaining:1:08:17 elapsed:1:50:55 postfix:- (1143:tqdm_logging.py:145)
15:12:00.761 [I] Progress on: 908it/1.50kit rate:7.0s/it remaining:1:08:46 elapsed:1:51:09 postfix:- (1143:tqdm_logging.py:145)
15:12:14.854 [I] Progress on: 910it/1.50kit rate:7.0s/it remaining:1:08:55 elapsed:1:51:23 postfix:- (1143:tqdm_logging.py:145)
15:12:28.935 [I] Progress on: 912it/1.50kit rate:7.0s/it remaining:1:08:50 elapsed:1:51:37 postfix:- (1143:tqdm_logging.py:145)
15:12:43.032 [I] Progress on: 914it/1.50kit rate:7.0s/it remaining:1:08:43 elapsed:1:51:51 postfix:- (1143:tqdm_logging.py:145)
15:12:57.120 [I] Progress on: 916it/1.50kit rate:7.0s/it remaining:1:08:32 elapsed:1:52:05 postfix:- (1143:tqdm_logging.py:145)
15:13:11.201 [I] Progress on: 918it/1.50kit rate:7.0s/it remaining:1:08:17 elapsed:1:52:19 postfix:- (1143:tqdm_logging.py:145)
15:13:25.298 [I] Progress on: 920it/1.50kit rate:7.0s/it remaining:1:08:05 elapsed:1:52:33 postfix:- (1143:tqdm_logging.py:145)
15:13:39.375 [I] Progress on: 922it/1.50kit rate:7.0s/it remaining:1:07:50 elapsed:1:52:47 postfix:- (1143:tqdm_logging.py:145)
15:13:53.445 [I] Progress on: 924it/1.50kit rate:7.0s/it remaining:1:07:34 elapsed:1:53:02 postfix:- (1143:tqdm_logging.py:145)
15:14:07.527 [I] Progress on: 926it/1.50kit rate:7.0s/it remaining:1:07:20 elapsed:1:53:16 postfix:- (1143:tqdm_logging.py:145)
15:14:21.595 [I] Progress on: 928it/1.50kit rate:7.0s/it remaining:1:07:04 elapsed:1:53:30 postfix:- (1143:tqdm_logging.py:145)
15:14:35.672 [I] Progress on: 930it/1.50kit rate:7.0s/it remaining:1:06:51 elapsed:1:53:44 postfix:- (1143:tqdm_logging.py:145)
15:14:49.748 [I] Progress on: 932it/1.50kit rate:7.0s/it remaining:1:06:37 elapsed:1:53:58 postfix:- (1143:tqdm_logging.py:145)
15:15:03.839 [I] Progress on: 934it/1.50kit rate:7.0s/it remaining:1:06:25 elapsed:1:54:12 postfix:- (1143:tqdm_logging.py:145)
15:15:17.917 [I] Progress on: 936it/1.50kit rate:7.0s/it remaining:1:06:09 elapsed:1:54:26 postfix:- (1143:tqdm_logging.py:145)
15:15:31.991 [I] Progress on: 938it/1.50kit rate:7.0s/it remaining:1:05:54 elapsed:1:54:40 postfix:- (1143:tqdm_logging.py:145)
15:15:46.074 [I] Progress on: 940it/1.50kit rate:7.0s/it remaining:1:05:41 elapsed:1:54:54 postfix:- (1143:tqdm_logging.py:145)
15:16:00.138 [I] Progress on: 942it/1.50kit rate:7.0s/it remaining:1:05:24 elapsed:1:55:08 postfix:- (1143:tqdm_logging.py:145)
15:16:14.417 [I] Progress on: 944it/1.50kit rate:7.1s/it remaining:1:05:45 elapsed:1:55:23 postfix:- (1143:tqdm_logging.py:145)
15:16:28.441 [I] Progress on: 946it/1.50kit rate:7.1s/it remaining:1:05:06 elapsed:1:55:37 postfix:- (1143:tqdm_logging.py:145)
15:16:42.483 [I] Progress on: 948it/1.50kit rate:7.0s/it remaining:1:04:43 elapsed:1:55:51 postfix:- (1143:tqdm_logging.py:145)
15:16:56.554 [I] Progress on: 950it/1.50kit rate:7.0s/it remaining:1:04:29 elapsed:1:56:05 postfix:- (1143:tqdm_logging.py:145)


15:17:10.254 [I] Progress on: 950it/1.50kit rate:7.0s/it remaining:1:04:29 elapsed:1:56:18 postfix:- (1143:tqdm_logging.py:145)
15:17:24.715 [I] Progress on: 954it/1.50kit rate:6.7s/it remaining:1:01:18 elapsed:1:56:33 postfix:- (1143:tqdm_logging.py:145)
15:17:38.755 [I] Progress on: 956it/1.50kit rate:6.9s/it remaining:1:02:23 elapsed:1:56:47 postfix:- (1143:tqdm_logging.py:145)
15:17:52.792 [I] Progress on: 958it/1.50kit rate:7.0s/it remaining:1:02:47 elapsed:1:57:01 postfix:- (1143:tqdm_logging.py:145)
15:18:06.827 [I] Progress on: 960it/1.50kit rate:7.0s/it remaining:1:02:51 elapsed:1:57:15 postfix:- (1143:tqdm_logging.py:145)
15:18:20.856 [I] Progress on: 962it/1.50kit rate:7.0s/it remaining:1:02:45 elapsed:1:57:29 postfix:- (1143:tqdm_logging.py:145)
15:18:34.871 [I] Progress on: 964it/1.50kit rate:7.0s/it remaining:1:02:08 elapsed:1:57:43 postfix:- (1143:tqdm_logging.py:145)
15:18:48.910 [I] Progress on: 966it/1.50kit rate:7.0s/it remaining:1:02:09 elapsed:1:57:57 postfix:- (1143:tqdm_logging.py:145)
15:19:02.971 [I] Progress on: 968it/1.50kit rate:7.0s/it remaining:1:02:06 elapsed:1:58:11 postfix:- (1143:tqdm_logging.py:145)
15:19:16.996 [I] Progress on: 970it/1.50kit rate:7.0s/it remaining:1:01:52 elapsed:1:58:25 postfix:- (1143:tqdm_logging.py:145)
15:19:31.067 [I] Progress on: 972it/1.50kit rate:7.0s/it remaining:1:01:46 elapsed:1:58:39 postfix:- (1143:tqdm_logging.py:145)
15:19:45.121 [I] Progress on: 974it/1.50kit rate:7.0s/it remaining:1:01:34 elapsed:1:58:53 postfix:- (1143:tqdm_logging.py:145)
15:19:59.170 [I] Progress on: 976it/1.50kit rate:7.0s/it remaining:1:01:20 elapsed:1:59:07 postfix:- (1143:tqdm_logging.py:145)
15:20:13.209 [I] Progress on: 978it/1.50kit rate:7.0s/it remaining:1:01:05 elapsed:1:59:21 postfix:- (1143:tqdm_logging.py:145)
15:20:27.263 [I] Progress on: 980it/1.50kit rate:7.0s/it remaining:1:00:53 elapsed:1:59:35 postfix:- (1143:tqdm_logging.py:145)
15:20:41.302 [I] Progress on: 982it/1.50kit rate:7.0s/it remaining:1:00:37 elapsed:1:59:49 postfix:- (1143:tqdm_logging.py:145)
15:20:55.334 [I] Progress on: 984it/1.50kit rate:7.0s/it remaining:1:00:22 elapsed:2:00:03 postfix:- (1143:tqdm_logging.py:145)
15:21:09.387 [I] Progress on: 986it/1.50kit rate:7.0s/it remaining:1:00:10 elapsed:2:00:18 postfix:- (1143:tqdm_logging.py:145)
15:21:23.425 [I] Progress on: 988it/1.50kit rate:7.0s/it remaining:59:55 elapsed:2:00:32 postfix:- (1143:tqdm_logging.py:145)
15:21:37.480 [I] Progress on: 990it/1.50kit rate:7.0s/it remaining:59:42 elapsed:2:00:46 postfix:- (1143:tqdm_logging.py:145)
15:21:51.546 [I] Progress on: 992it/1.50kit rate:7.0s/it remaining:59:31 elapsed:2:01:00 postfix:- (1143:tqdm_logging.py:145)
15:22:05.590 [I] Progress on: 994it/1.50kit rate:7.0s/it remaining:59:14 elapsed:2:01:14 postfix:- (1143:tqdm_logging.py:145)
15:22:19.660 [I] Progress on: 996it/1.50kit rate:7.0s/it remaining:59:03 elapsed:2:01:28 postfix:- (1143:tqdm_logging.py:145)
15:22:33.710 [I] Progress on: 998it/1.50kit rate:7.0s/it remaining:58:44 elapsed:2:01:42 postfix:- (1143:tqdm_logging.py:145)
15:22:47.764 [I] Progress on: 1.00kit/1.50kit rate:7.0s/it remaining:58:31 elapsed:2:01:56 postfix:- (1143:tqdm_logging.py:145)


15:23:01.460 [I] Progress on: 1.00kit/1.50kit rate:7.0s/it remaining:58:31 elapsed:2:02:10 postfix:- (1143:tqdm_logging.py:145)
15:23:01.533 [I] [process=0][thread=MainThread][wait_until_finished] No Save Finalize thread to wait for. Returning. (1143:checkpoint_manager.py:1987)
15:23:01.534 [I] [process=0] Saving checkpoint at step 1000                                       (1143:checkpoint_manager.py:1408)
15:23:01.535 [I] [process=0] Started async saving checkpoint to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000. (1143:async_checkpointer.py:439)
15:23:01.537 [I] Using ThreadSafeKeyValueSignalingClient                                          (1143:signaling_client.py:332)
15:23:01.540 [I] Creating tmp directory /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000.orbax-checkpoint-tmp-0 (1143:atomicity.py:144)
15:23:01.564 [I] Wrote Metadata={'item_handlers': None, 'metrics': {}, 'performance_metrics': {}, 'init_timestamp_nsecs': 1793460181562130319, 'commit_timestamp_nsecs': None, 'custom_metadata': {}}, json={"item_handlers": null, "metrics": {}, "performance_metrics": {}, "init_timestamp_nsecs": 1793460181562130319, "commit_timestamp_nsecs": null, "custom_metadata": {}} to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000.orbax-checkpoint-tmp-0/_CHECKPOINT_METADATA (1143:checkpoint.py:186)
15:23:01.567 [I] Creating tmp directory /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000.orbax-checkpoint-tmp-0/assets.orbax-checkpoint-tmp-1 (1143:atomicity.py:144)
15:23:01.568 [I] Creating tmp directory /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000.orbax-checkpoint-tmp-0/params.orbax-checkpoint-tmp-2 (1143:atomicity.py:144)
15:23:01.568 [I] Creating tmp directory /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000.orbax-checkpoint-tmp-0/train_state.orbax-checkpoint-tmp-3 (1143:atomicity.py:144)
15:23:01.589 [I] Transferring arrays to host memory with options: use_replica_parallel=True, enable_pinned_host_transfer=False (1143:replica_slices.py:341)
15:23:23.491 [I] Transferring arrays to host memory with options: use_replica_parallel=True, enable_pinned_host_transfer=False (1143:replica_slices.py:341)
15:23:23.500 [I] Array name: 'params.PaliGemma.llm.layers.mlp.gating_einsum.value', global shape: (18, 2, 2048, 16384), write shape: (18, 2, 2048, 16384), chosen chunk shape: (18, 2, 2048, 8192) (1143:tensorstore_utils.py:408)
15:23:23.558 [I] [process=0][thread=array_type_handler] Wrote 71 array_metadata.ArrayMetadata to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000.orbax-checkpoint-tmp-0/params.orbax-checkpoint-tmp-2/array_metadatas/process_0 (1143:array_metadata_store.py:198)
15:23:26.678 [I] [process=0] /jax/checkpoint/write/blocking_bytes_per_sec: 293.7 MiB/s (total bytes: 7.2 GiB) (time elapsed: 25 seconds) (per-host) (1143:base_pytree_checkpoint_handler.py:114)
15:23:26.685 [I] [process=0] /jax/checkpoint/write/blocking_bytes_per_sec: 141.8 MiB/s (total bytes: 3.5 GiB) (time elapsed: 25 seconds) (per-host) (1143:base_pytree_checkpoint_handler.py:114)
15:23:26.701 [I] [process=0][thread=async_save] Background save thread started.                   (1143:async_checkpointer.py:77)
15:23:26.702 [I] Finished blocking save in 25.17 seconds. Continuing to save asynchronously to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000. (1143:async_checkpointer.py:548)
15:23:26.704 [I] [process=0][thread=MainThread][step=1000] Starting CheckpointManager Save Finalize thread=save_finalize (1143:checkpoint_manager.py:1453)
15:23:26.708 [I] [process=0][thread=save_finalize] Waiting for background save thread=async_save. (1143:async_checkpointer.py:258)
15:23:26.710 [I] {'step': 1000, 'event_type': 'save', 'directory': '/workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3', 'reached_preemption': False, 'preemption_received_at': None, 'synchronous': False, 'wait_for_prev_start_time': 1793460181.5333178, 'wait_for_prev_duration_secs': 0.0002067089080810547, 'checkpointer_blocking_start_time': 1793460181.5345185, 'checkpointer_blocking_duration_secs': 25.169535636901855, 'get_old_steps_start_time': 1793460206.704104, 'get_old_steps_duration_secs': 1.3113021850585938e-05, 'checkpoint_manager_blocking_start_time': 1793460181.53271, 'checkpoint_manager_blocking_duration_secs': 25.17711877822876} (1143:standard_logger.py:34)
15:23:26.714 [I] Progress on: 1.00kit/1.50kit rate:16.6s/it remaining:2:18:03 elapsed:2:02:35 postfix:- (1143:tqdm_logging.py:145)
15:23:26.769 [I] [process=0][thread=array_type_handler] Wrote 105 array_metadata.ArrayMetadata to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000.orbax-checkpoint-tmp-0/train_state.orbax-checkpoint-tmp-3/array_metadatas/process_0 (1143:array_metadata_store.py:198)
15:23:28.625 [I] [process=0] /jax/checkpoint/write/bytes_per_sec: 272.6 MiB/s (total bytes: 7.2 GiB) (time elapsed: 27 seconds) (per-host) (1143:base_pytree_checkpoint_handler.py:114)
15:23:29.590 [I] [process=0] /jax/checkpoint/write/bytes_per_sec: 127.1 MiB/s (total bytes: 3.5 GiB) (time elapsed: 28 seconds) (per-host) (1143:base_pytree_checkpoint_handler.py:114)
15:23:29.591 [I] [process=0][thread=async_save] 5 Handler Commit operations completed.            (1143:async_checkpointer.py:87)
15:23:29.592 [I] Read Metadata={'item_handlers': None, 'metrics': {}, 'performance_metrics': {}, 'init_timestamp_nsecs': 1793460181562130319, 'commit_timestamp_nsecs': None, 'custom_metadata': {}} from /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000.orbax-checkpoint-tmp-0/_CHECKPOINT_METADATA (1143:checkpoint.py:226)
15:23:29.593 [I] Renaming /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000.orbax-checkpoint-tmp-0/assets.orbax-checkpoint-tmp-1 to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000.orbax-checkpoint-tmp-0/assets (1143:atomicity.py:289)
15:23:29.596 [I] Updated Metadata={'item_handlers': {'assets': 'openpi.training.checkpoints.CallbackHandler', 'params': 'orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeCheckpointHandler', 'train_state': 'orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeCheckpointHandler'}, 'metrics': {}, 'performance_metrics': {}, 'init_timestamp_nsecs': 1793460181562130319, 'commit_timestamp_nsecs': None, 'custom_metadata': {}} to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000.orbax-checkpoint-tmp-0/_CHECKPOINT_METADATA (1143:checkpoint.py:245)
15:23:29.599 [I] [process=0][thread=async_save] Skipped cross-host ArrayMetadata validation because only one process is found: process_index=0. (1143:array_metadata_store.py:362)
15:23:29.606 [I] Renaming /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000.orbax-checkpoint-tmp-0/train_state.orbax-checkpoint-tmp-3 to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000.orbax-checkpoint-tmp-0/train_state (1143:atomicity.py:289)
15:23:29.610 [I] [process=0][thread=async_save] Skipped cross-host ArrayMetadata validation because only one process is found: process_index=0. (1143:array_metadata_store.py:362)
15:23:29.615 [I] Renaming /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000.orbax-checkpoint-tmp-0/params.orbax-checkpoint-tmp-2 to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000.orbax-checkpoint-tmp-0/params (1143:atomicity.py:289)
15:23:29.616 [I] Renaming /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000.orbax-checkpoint-tmp-0 to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000 (1143:atomicity.py:289)
15:23:29.617 [I] [process=0][thread=async_save] Finished saving checkpoint (finalized tmp dir) to `/workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000`. (1143:atomicity.py:573)
15:23:29.618 [I] Finished asynchronous save (blocking + background) in 28.08 seconds to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1000 (1143:async_checkpointer.py:412)
15:23:29.618 [I] [process=0][thread=async_save] Background save thread done.                      (1143:async_checkpointer.py:143)
15:23:29.618 [I] [process=0][thread=save_finalize] Done with waiting for background save thread=async_save. (1143:async_checkpointer.py:266)
15:23:29.618 [I] [process=0][thread=save_finalize] No errors found in background save thread=async_save. (1143:async_checkpointer.py:276)
15:23:29.618 [I] [process=0][thread=save_finalize][step=1000] CheckpointManager Save Finalize is syncing with other hosts... (1143:checkpoint_manager.py:2095)
15:23:29.618 [I] [process=0][thread=save_finalize][step=1000] CheckpointManager Save Finalize is done on all hosts. (1143:checkpoint_manager.py:2110)
15:23:41.077 [I] Progress on: 1.00kit/1.50kit rate:9.3s/it remaining:1:16:52 elapsed:2:02:49 postfix:- (1143:tqdm_logging.py:145)
15:23:55.057 [I] Progress on: 1.01kit/1.50kit rate:8.1s/it remaining:1:06:52 elapsed:2:03:03 postfix:- (1143:tqdm_logging.py:145)
15:24:09.077 [I] Progress on: 1.01kit/1.50kit rate:7.6s/it remaining:1:01:57 elapsed:2:03:17 postfix:- (1143:tqdm_logging.py:145)
15:24:23.102 [I] Progress on: 1.01kit/1.50kit rate:7.3s/it remaining:59:26 elapsed:2:03:31 postfix:- (1143:tqdm_logging.py:145)
15:24:37.150 [I] Progress on: 1.01kit/1.50kit rate:7.1s/it remaining:58:08 elapsed:2:03:45 postfix:- (1143:tqdm_logging.py:145)
15:24:51.210 [I] Progress on: 1.01kit/1.50kit rate:7.1s/it remaining:57:25 elapsed:2:03:59 postfix:- (1143:tqdm_logging.py:145)
15:25:05.321 [I] Progress on: 1.02kit/1.50kit rate:7.1s/it remaining:57:00 elapsed:2:04:13 postfix:- (1143:tqdm_logging.py:145)
15:25:19.371 [I] Progress on: 1.02kit/1.50kit rate:7.0s/it remaining:56:36 elapsed:2:04:27 postfix:- (1143:tqdm_logging.py:145)
15:25:33.461 [I] Progress on: 1.02kit/1.50kit rate:7.0s/it remaining:56:21 elapsed:2:04:42 postfix:- (1143:tqdm_logging.py:145)
15:25:47.558 [I] Progress on: 1.02kit/1.50kit rate:7.0s/it remaining:56:08 elapsed:2:04:56 postfix:- (1143:tqdm_logging.py:145)
15:26:01.660 [I] Progress on: 1.02kit/1.50kit rate:7.0s/it remaining:55:54 elapsed:2:05:10 postfix:- (1143:tqdm_logging.py:145)
15:26:15.753 [I] Progress on: 1.03kit/1.50kit rate:7.0s/it remaining:55:40 elapsed:2:05:24 postfix:- (1143:tqdm_logging.py:145)
15:26:29.832 [I] Progress on: 1.03kit/1.50kit rate:7.0s/it remaining:55:23 elapsed:2:05:38 postfix:- (1143:tqdm_logging.py:145)
15:26:43.913 [I] Progress on: 1.03kit/1.50kit rate:7.0s/it remaining:55:09 elapsed:2:05:52 postfix:- (1143:tqdm_logging.py:145)
15:26:57.979 [I] Progress on: 1.03kit/1.50kit rate:7.0s/it remaining:54:53 elapsed:2:06:06 postfix:- (1143:tqdm_logging.py:145)
15:27:12.053 [I] Progress on: 1.03kit/1.50kit rate:7.0s/it remaining:54:38 elapsed:2:06:20 postfix:- (1143:tqdm_logging.py:145)
15:27:26.134 [I] Progress on: 1.04kit/1.50kit rate:7.0s/it remaining:54:25 elapsed:2:06:34 postfix:- (1143:tqdm_logging.py:145)
15:27:40.209 [I] Progress on: 1.04kit/1.50kit rate:7.0s/it remaining:54:10 elapsed:2:06:48 postfix:- (1143:tqdm_logging.py:145)
15:27:54.286 [I] Progress on: 1.04kit/1.50kit rate:7.0s/it remaining:53:56 elapsed:2:07:02 postfix:- (1143:tqdm_logging.py:145)
15:28:08.360 [I] Progress on: 1.04kit/1.50kit rate:7.0s/it remaining:53:42 elapsed:2:07:16 postfix:- (1143:tqdm_logging.py:145)
15:28:22.428 [I] Progress on: 1.04kit/1.50kit rate:7.0s/it remaining:53:27 elapsed:2:07:31 postfix:- (1143:tqdm_logging.py:145)
15:28:36.510 [I] Progress on: 1.05kit/1.50kit rate:7.0s/it remaining:53:15 elapsed:2:07:45 postfix:- (1143:tqdm_logging.py:145)
15:28:50.577 [I] Progress on: 1.05kit/1.50kit rate:7.0s/it remaining:52:59 elapsed:2:07:59 postfix:- (1143:tqdm_logging.py:145)
15:29:04.651 [I] Progress on: 1.05kit/1.50kit rate:7.0s/it remaining:52:46 elapsed:2:08:13 postfix:- (1143:tqdm_logging.py:145)


15:29:18.379 [I] Progress on: 1.05kit/1.50kit rate:7.0s/it remaining:52:46 elapsed:2:08:26 postfix:- (1143:tqdm_logging.py:145)
15:29:32.872 [I] Progress on: 1.05kit/1.50kit rate:6.7s/it remaining:50:08 elapsed:2:08:41 postfix:- (1143:tqdm_logging.py:145)
15:29:46.935 [I] Progress on: 1.06kit/1.50kit rate:6.9s/it remaining:50:59 elapsed:2:08:55 postfix:- (1143:tqdm_logging.py:145)
15:30:00.987 [I] Progress on: 1.06kit/1.50kit rate:7.0s/it remaining:51:16 elapsed:2:09:09 postfix:- (1143:tqdm_logging.py:145)
15:30:15.037 [I] Progress on: 1.06kit/1.50kit rate:7.0s/it remaining:51:16 elapsed:2:09:23 postfix:- (1143:tqdm_logging.py:145)
15:30:29.080 [I] Progress on: 1.06kit/1.50kit rate:7.0s/it remaining:51:09 elapsed:2:09:37 postfix:- (1143:tqdm_logging.py:145)
15:30:43.134 [I] Progress on: 1.06kit/1.50kit rate:7.0s/it remaining:50:59 elapsed:2:09:51 postfix:- (1143:tqdm_logging.py:145)
15:30:57.181 [I] Progress on: 1.07kit/1.50kit rate:7.0s/it remaining:50:47 elapsed:2:10:05 postfix:- (1143:tqdm_logging.py:145)
15:31:11.218 [I] Progress on: 1.07kit/1.50kit rate:7.0s/it remaining:50:32 elapsed:2:10:19 postfix:- (1143:tqdm_logging.py:145)
15:31:25.779 [I] Progress on: 1.07kit/1.50kit rate:7.2s/it remaining:51:25 elapsed:2:10:34 postfix:- (1143:tqdm_logging.py:145)
15:31:39.320 [I] Progress on: 1.07kit/1.50kit rate:7.0s/it remaining:49:53 elapsed:2:10:47 postfix:- (1143:tqdm_logging.py:145)
15:31:53.391 [I] Progress on: 1.07kit/1.50kit rate:7.0s/it remaining:49:50 elapsed:2:11:02 postfix:- (1143:tqdm_logging.py:145)
15:32:07.417 [I] Progress on: 1.08kit/1.50kit rate:7.0s/it remaining:49:36 elapsed:2:11:16 postfix:- (1143:tqdm_logging.py:145)
15:32:21.462 [I] Progress on: 1.08kit/1.50kit rate:7.0s/it remaining:49:24 elapsed:2:11:30 postfix:- (1143:tqdm_logging.py:145)
15:32:35.491 [I] Progress on: 1.08kit/1.50kit rate:7.0s/it remaining:49:09 elapsed:2:11:44 postfix:- (1143:tqdm_logging.py:145)
15:32:49.546 [I] Progress on: 1.08kit/1.50kit rate:7.0s/it remaining:48:57 elapsed:2:11:58 postfix:- (1143:tqdm_logging.py:145)
15:33:03.570 [I] Progress on: 1.08kit/1.50kit rate:7.0s/it remaining:48:41 elapsed:2:12:12 postfix:- (1143:tqdm_logging.py:145)
15:33:17.624 [I] Progress on: 1.09kit/1.50kit rate:7.0s/it remaining:48:29 elapsed:2:12:26 postfix:- (1143:tqdm_logging.py:145)
15:33:31.650 [I] Progress on: 1.09kit/1.50kit rate:7.0s/it remaining:48:14 elapsed:2:12:40 postfix:- (1143:tqdm_logging.py:145)
15:33:45.708 [I] Progress on: 1.09kit/1.50kit rate:7.0s/it remaining:48:02 elapsed:2:12:54 postfix:- (1143:tqdm_logging.py:145)
15:33:59.737 [I] Progress on: 1.09kit/1.50kit rate:7.0s/it remaining:47:46 elapsed:2:13:08 postfix:- (1143:tqdm_logging.py:145)
15:34:13.785 [I] Progress on: 1.09kit/1.50kit rate:7.0s/it remaining:47:33 elapsed:2:13:22 postfix:- (1143:tqdm_logging.py:145)
15:34:27.808 [I] Progress on: 1.10kit/1.50kit rate:7.0s/it remaining:47:17 elapsed:2:13:36 postfix:- (1143:tqdm_logging.py:145)
15:34:41.851 [I] Progress on: 1.10kit/1.50kit rate:7.0s/it remaining:47:04 elapsed:2:13:50 postfix:- (1143:tqdm_logging.py:145)
15:34:55.878 [I] Progress on: 1.10kit/1.50kit rate:7.0s/it remaining:46:49 elapsed:2:14:04 postfix:- (1143:tqdm_logging.py:145)


15:35:09.553 [I] Progress on: 1.10kit/1.50kit rate:7.0s/it remaining:46:49 elapsed:2:14:18 postfix:- (1143:tqdm_logging.py:145)
15:35:24.014 [I] Progress on: 1.10kit/1.50kit rate:6.7s/it remaining:44:27 elapsed:2:14:32 postfix:- (1143:tqdm_logging.py:145)
15:35:38.055 [I] Progress on: 1.11kit/1.50kit rate:6.9s/it remaining:45:10 elapsed:2:14:46 postfix:- (1143:tqdm_logging.py:145)
15:35:52.096 [I] Progress on: 1.11kit/1.50kit rate:7.0s/it remaining:45:25 elapsed:2:15:00 postfix:- (1143:tqdm_logging.py:145)
15:36:06.129 [I] Progress on: 1.11kit/1.50kit rate:7.0s/it remaining:45:24 elapsed:2:15:14 postfix:- (1143:tqdm_logging.py:145)
15:36:20.175 [I] Progress on: 1.11kit/1.50kit rate:7.0s/it remaining:45:17 elapsed:2:15:28 postfix:- (1143:tqdm_logging.py:145)
15:36:34.218 [I] Progress on: 1.11kit/1.50kit rate:7.0s/it remaining:45:07 elapsed:2:15:42 postfix:- (1143:tqdm_logging.py:145)
15:36:48.252 [I] Progress on: 1.12kit/1.50kit rate:7.0s/it remaining:44:53 elapsed:2:15:56 postfix:- (1143:tqdm_logging.py:145)
15:37:02.301 [I] Progress on: 1.12kit/1.50kit rate:7.0s/it remaining:44:41 elapsed:2:16:10 postfix:- (1143:tqdm_logging.py:145)
15:37:16.348 [I] Progress on: 1.12kit/1.50kit rate:7.0s/it remaining:44:27 elapsed:2:16:24 postfix:- (1143:tqdm_logging.py:145)
15:37:30.438 [I] Progress on: 1.12kit/1.50kit rate:7.0s/it remaining:44:18 elapsed:2:16:39 postfix:- (1143:tqdm_logging.py:145)
15:37:44.518 [I] Progress on: 1.12kit/1.50kit rate:7.0s/it remaining:44:05 elapsed:2:16:53 postfix:- (1143:tqdm_logging.py:145)
15:37:58.630 [I] Progress on: 1.13kit/1.50kit rate:7.0s/it remaining:43:55 elapsed:2:17:07 postfix:- (1143:tqdm_logging.py:145)
15:38:12.725 [I] Progress on: 1.13kit/1.50kit rate:7.0s/it remaining:43:41 elapsed:2:17:21 postfix:- (1143:tqdm_logging.py:145)
15:38:26.815 [I] Progress on: 1.13kit/1.50kit rate:7.0s/it remaining:43:27 elapsed:2:17:35 postfix:- (1143:tqdm_logging.py:145)
15:38:40.915 [I] Progress on: 1.13kit/1.50kit rate:7.0s/it remaining:43:13 elapsed:2:17:49 postfix:- (1143:tqdm_logging.py:145)
15:38:55.037 [I] Progress on: 1.13kit/1.50kit rate:7.1s/it remaining:43:01 elapsed:2:18:03 postfix:- (1143:tqdm_logging.py:145)
15:39:09.133 [I] Progress on: 1.14kit/1.50kit rate:7.1s/it remaining:42:46 elapsed:2:18:17 postfix:- (1143:tqdm_logging.py:145)
15:39:23.225 [I] Progress on: 1.14kit/1.50kit rate:7.0s/it remaining:42:31 elapsed:2:18:31 postfix:- (1143:tqdm_logging.py:145)
15:39:37.296 [I] Progress on: 1.14kit/1.50kit rate:7.0s/it remaining:42:14 elapsed:2:18:45 postfix:- (1143:tqdm_logging.py:145)
15:39:51.373 [I] Progress on: 1.14kit/1.50kit rate:7.0s/it remaining:42:00 elapsed:2:18:59 postfix:- (1143:tqdm_logging.py:145)
15:40:05.449 [I] Progress on: 1.14kit/1.50kit rate:7.0s/it remaining:41:45 elapsed:2:19:14 postfix:- (1143:tqdm_logging.py:145)
15:40:19.524 [I] Progress on: 1.15kit/1.50kit rate:7.0s/it remaining:41:31 elapsed:2:19:28 postfix:- (1143:tqdm_logging.py:145)
15:40:33.597 [I] Progress on: 1.15kit/1.50kit rate:7.0s/it remaining:41:17 elapsed:2:19:42 postfix:- (1143:tqdm_logging.py:145)
15:40:47.672 [I] Progress on: 1.15kit/1.50kit rate:7.0s/it remaining:41:03 elapsed:2:19:56 postfix:- (1143:tqdm_logging.py:145)


15:41:01.399 [I] Progress on: 1.15kit/1.50kit rate:7.0s/it remaining:41:03 elapsed:2:20:10 postfix:- (1143:tqdm_logging.py:145)
15:41:15.922 [I] Progress on: 1.15kit/1.50kit rate:6.8s/it remaining:38:57 elapsed:2:20:24 postfix:- (1143:tqdm_logging.py:145)
15:41:29.995 [I] Progress on: 1.16kit/1.50kit rate:6.9s/it remaining:39:33 elapsed:2:20:38 postfix:- (1143:tqdm_logging.py:145)
15:41:44.076 [I] Progress on: 1.16kit/1.50kit rate:7.0s/it remaining:39:44 elapsed:2:20:52 postfix:- (1143:tqdm_logging.py:145)
15:41:58.146 [I] Progress on: 1.16kit/1.50kit rate:7.0s/it remaining:39:41 elapsed:2:21:06 postfix:- (1143:tqdm_logging.py:145)
15:42:12.224 [I] Progress on: 1.16kit/1.50kit rate:7.0s/it remaining:39:33 elapsed:2:21:20 postfix:- (1143:tqdm_logging.py:145)
15:42:26.298 [I] Progress on: 1.16kit/1.50kit rate:7.0s/it remaining:39:22 elapsed:2:21:34 postfix:- (1143:tqdm_logging.py:145)
15:42:40.374 [I] Progress on: 1.17kit/1.50kit rate:7.0s/it remaining:39:09 elapsed:2:21:48 postfix:- (1143:tqdm_logging.py:145)
15:42:54.446 [I] Progress on: 1.17kit/1.50kit rate:7.0s/it remaining:38:55 elapsed:2:22:03 postfix:- (1143:tqdm_logging.py:145)
15:43:08.524 [I] Progress on: 1.17kit/1.50kit rate:7.0s/it remaining:38:42 elapsed:2:22:17 postfix:- (1143:tqdm_logging.py:145)
15:43:22.599 [I] Progress on: 1.17kit/1.50kit rate:7.0s/it remaining:38:28 elapsed:2:22:31 postfix:- (1143:tqdm_logging.py:145)
15:43:36.673 [I] Progress on: 1.17kit/1.50kit rate:7.0s/it remaining:38:14 elapsed:2:22:45 postfix:- (1143:tqdm_logging.py:145)
15:43:50.753 [I] Progress on: 1.18kit/1.50kit rate:7.0s/it remaining:38:00 elapsed:2:22:59 postfix:- (1143:tqdm_logging.py:145)
15:44:04.800 [I] Progress on: 1.18kit/1.50kit rate:7.0s/it remaining:37:28 elapsed:2:23:13 postfix:- (1143:tqdm_logging.py:145)
15:44:18.876 [I] Progress on: 1.18kit/1.50kit rate:7.0s/it remaining:37:22 elapsed:2:23:27 postfix:- (1143:tqdm_logging.py:145)
15:44:32.947 [I] Progress on: 1.18kit/1.50kit rate:7.0s/it remaining:37:11 elapsed:2:23:41 postfix:- (1143:tqdm_logging.py:145)
15:44:47.031 [I] Progress on: 1.18kit/1.50kit rate:7.0s/it remaining:37:00 elapsed:2:23:55 postfix:- (1143:tqdm_logging.py:145)
15:45:01.101 [I] Progress on: 1.19kit/1.50kit rate:7.0s/it remaining:36:46 elapsed:2:24:09 postfix:- (1143:tqdm_logging.py:145)
15:45:15.184 [I] Progress on: 1.19kit/1.50kit rate:7.0s/it remaining:36:33 elapsed:2:24:23 postfix:- (1143:tqdm_logging.py:145)
15:45:29.256 [I] Progress on: 1.19kit/1.50kit rate:7.0s/it remaining:36:19 elapsed:2:24:37 postfix:- (1143:tqdm_logging.py:145)
15:45:43.333 [I] Progress on: 1.19kit/1.50kit rate:7.0s/it remaining:36:05 elapsed:2:24:51 postfix:- (1143:tqdm_logging.py:145)
15:45:57.403 [I] Progress on: 1.19kit/1.50kit rate:7.0s/it remaining:35:50 elapsed:2:25:06 postfix:- (1143:tqdm_logging.py:145)
15:46:11.483 [I] Progress on: 1.20kit/1.50kit rate:7.0s/it remaining:35:37 elapsed:2:25:20 postfix:- (1143:tqdm_logging.py:145)
15:46:25.555 [I] Progress on: 1.20kit/1.50kit rate:7.0s/it remaining:35:23 elapsed:2:25:34 postfix:- (1143:tqdm_logging.py:145)
15:46:39.628 [I] Progress on: 1.20kit/1.50kit rate:7.0s/it remaining:35:09 elapsed:2:25:48 postfix:- (1143:tqdm_logging.py:145)


15:46:53.373 [I] Progress on: 1.20kit/1.50kit rate:7.0s/it remaining:35:09 elapsed:2:26:01 postfix:- (1143:tqdm_logging.py:145)
15:47:07.847 [I] Progress on: 1.20kit/1.50kit rate:6.7s/it remaining:33:16 elapsed:2:26:16 postfix:- (1143:tqdm_logging.py:145)
15:47:21.914 [I] Progress on: 1.21kit/1.50kit rate:6.9s/it remaining:33:45 elapsed:2:26:30 postfix:- (1143:tqdm_logging.py:145)
15:47:35.993 [I] Progress on: 1.21kit/1.50kit rate:7.0s/it remaining:33:52 elapsed:2:26:44 postfix:- (1143:tqdm_logging.py:145)
15:47:50.069 [I] Progress on: 1.21kit/1.50kit rate:7.0s/it remaining:33:49 elapsed:2:26:58 postfix:- (1143:tqdm_logging.py:145)
15:48:04.150 [I] Progress on: 1.21kit/1.50kit rate:7.0s/it remaining:33:40 elapsed:2:27:12 postfix:- (1143:tqdm_logging.py:145)
15:48:18.219 [I] Progress on: 1.21kit/1.50kit rate:7.0s/it remaining:33:28 elapsed:2:27:26 postfix:- (1143:tqdm_logging.py:145)
15:48:32.294 [I] Progress on: 1.22kit/1.50kit rate:7.0s/it remaining:33:15 elapsed:2:27:40 postfix:- (1143:tqdm_logging.py:145)
15:48:46.368 [I] Progress on: 1.22kit/1.50kit rate:7.0s/it remaining:33:01 elapsed:2:27:54 postfix:- (1143:tqdm_logging.py:145)
15:49:00.451 [I] Progress on: 1.22kit/1.50kit rate:7.0s/it remaining:32:48 elapsed:2:28:09 postfix:- (1143:tqdm_logging.py:145)
15:49:14.516 [I] Progress on: 1.22kit/1.50kit rate:7.0s/it remaining:32:33 elapsed:2:28:23 postfix:- (1143:tqdm_logging.py:145)
15:49:28.599 [I] Progress on: 1.22kit/1.50kit rate:7.0s/it remaining:32:20 elapsed:2:28:37 postfix:- (1143:tqdm_logging.py:145)
15:49:42.670 [I] Progress on: 1.23kit/1.50kit rate:7.0s/it remaining:32:06 elapsed:2:28:51 postfix:- (1143:tqdm_logging.py:145)
15:49:56.762 [I] Progress on: 1.23kit/1.50kit rate:7.0s/it remaining:31:53 elapsed:2:29:05 postfix:- (1143:tqdm_logging.py:145)
15:50:10.824 [I] Progress on: 1.23kit/1.50kit rate:7.0s/it remaining:31:37 elapsed:2:29:19 postfix:- (1143:tqdm_logging.py:145)
15:50:24.910 [I] Progress on: 1.23kit/1.50kit rate:7.0s/it remaining:31:24 elapsed:2:29:33 postfix:- (1143:tqdm_logging.py:145)
15:50:38.986 [I] Progress on: 1.23kit/1.50kit rate:7.0s/it remaining:31:10 elapsed:2:29:47 postfix:- (1143:tqdm_logging.py:145)
15:50:53.070 [I] Progress on: 1.24kit/1.50kit rate:7.0s/it remaining:30:56 elapsed:2:30:01 postfix:- (1143:tqdm_logging.py:145)
15:51:07.156 [I] Progress on: 1.24kit/1.50kit rate:7.0s/it remaining:30:42 elapsed:2:30:15 postfix:- (1143:tqdm_logging.py:145)
15:51:21.258 [I] Progress on: 1.24kit/1.50kit rate:7.0s/it remaining:30:29 elapsed:2:30:29 postfix:- (1143:tqdm_logging.py:145)
15:51:35.350 [I] Progress on: 1.24kit/1.50kit rate:7.0s/it remaining:30:15 elapsed:2:30:43 postfix:- (1143:tqdm_logging.py:145)
15:51:49.459 [I] Progress on: 1.24kit/1.50kit rate:7.0s/it remaining:30:03 elapsed:2:30:58 postfix:- (1143:tqdm_logging.py:145)
15:52:03.545 [I] Progress on: 1.25kit/1.50kit rate:7.0s/it remaining:29:47 elapsed:2:31:12 postfix:- (1143:tqdm_logging.py:145)
15:52:17.646 [I] Progress on: 1.25kit/1.50kit rate:7.0s/it remaining:29:34 elapsed:2:31:26 postfix:- (1143:tqdm_logging.py:145)
15:52:31.720 [I] Progress on: 1.25kit/1.50kit rate:7.0s/it remaining:29:18 elapsed:2:31:40 postfix:- (1143:tqdm_logging.py:145)


15:52:45.458 [I] Progress on: 1.25kit/1.50kit rate:7.0s/it remaining:29:18 elapsed:2:31:54 postfix:- (1143:tqdm_logging.py:145)
15:52:59.980 [I] Progress on: 1.25kit/1.50kit rate:6.7s/it remaining:27:40 elapsed:2:32:08 postfix:- (1143:tqdm_logging.py:145)
15:53:14.064 [I] Progress on: 1.26kit/1.50kit rate:6.9s/it remaining:28:02 elapsed:2:32:22 postfix:- (1143:tqdm_logging.py:145)
15:53:28.135 [I] Progress on: 1.26kit/1.50kit rate:7.0s/it remaining:28:04 elapsed:2:32:36 postfix:- (1143:tqdm_logging.py:145)
15:53:42.227 [I] Progress on: 1.26kit/1.50kit rate:7.0s/it remaining:28:00 elapsed:2:32:50 postfix:- (1143:tqdm_logging.py:145)
15:53:56.300 [I] Progress on: 1.26kit/1.50kit rate:7.0s/it remaining:27:50 elapsed:2:33:04 postfix:- (1143:tqdm_logging.py:145)
15:54:10.378 [I] Progress on: 1.26kit/1.50kit rate:7.0s/it remaining:27:38 elapsed:2:33:18 postfix:- (1143:tqdm_logging.py:145)
15:54:24.458 [I] Progress on: 1.27kit/1.50kit rate:7.0s/it remaining:27:26 elapsed:2:33:33 postfix:- (1143:tqdm_logging.py:145)
15:54:38.536 [I] Progress on: 1.27kit/1.50kit rate:7.0s/it remaining:27:12 elapsed:2:33:47 postfix:- (1143:tqdm_logging.py:145)
15:54:52.608 [I] Progress on: 1.27kit/1.50kit rate:7.0s/it remaining:26:58 elapsed:2:34:01 postfix:- (1143:tqdm_logging.py:145)
15:55:06.678 [I] Progress on: 1.27kit/1.50kit rate:7.0s/it remaining:26:44 elapsed:2:34:15 postfix:- (1143:tqdm_logging.py:145)
15:55:20.752 [I] Progress on: 1.27kit/1.50kit rate:7.0s/it remaining:26:30 elapsed:2:34:29 postfix:- (1143:tqdm_logging.py:145)
15:55:34.829 [I] Progress on: 1.28kit/1.50kit rate:7.0s/it remaining:26:16 elapsed:2:34:43 postfix:- (1143:tqdm_logging.py:145)
15:55:48.906 [I] Progress on: 1.28kit/1.50kit rate:7.0s/it remaining:26:02 elapsed:2:34:57 postfix:- (1143:tqdm_logging.py:145)
15:56:02.980 [I] Progress on: 1.28kit/1.50kit rate:7.0s/it remaining:25:48 elapsed:2:35:11 postfix:- (1143:tqdm_logging.py:145)
15:56:17.057 [I] Progress on: 1.28kit/1.50kit rate:7.0s/it remaining:25:34 elapsed:2:35:25 postfix:- (1143:tqdm_logging.py:145)
15:56:31.611 [I] Progress on: 1.28kit/1.50kit rate:7.2s/it remaining:25:51 elapsed:2:35:40 postfix:- (1143:tqdm_logging.py:145)
15:56:45.212 [I] Progress on: 1.29kit/1.50kit rate:7.0s/it remaining:25:00 elapsed:2:35:53 postfix:- (1143:tqdm_logging.py:145)
15:56:59.278 [I] Progress on: 1.29kit/1.50kit rate:7.0s/it remaining:24:48 elapsed:2:36:07 postfix:- (1143:tqdm_logging.py:145)
15:57:13.364 [I] Progress on: 1.29kit/1.50kit rate:7.0s/it remaining:24:36 elapsed:2:36:21 postfix:- (1143:tqdm_logging.py:145)
15:57:27.432 [I] Progress on: 1.29kit/1.50kit rate:7.0s/it remaining:24:22 elapsed:2:36:36 postfix:- (1143:tqdm_logging.py:145)
15:57:41.514 [I] Progress on: 1.29kit/1.50kit rate:7.0s/it remaining:24:09 elapsed:2:36:50 postfix:- (1143:tqdm_logging.py:145)
15:57:55.586 [I] Progress on: 1.30kit/1.50kit rate:7.0s/it remaining:23:55 elapsed:2:37:04 postfix:- (1143:tqdm_logging.py:145)
15:58:09.658 [I] Progress on: 1.30kit/1.50kit rate:7.0s/it remaining:23:41 elapsed:2:37:18 postfix:- (1143:tqdm_logging.py:145)
15:58:23.727 [I] Progress on: 1.30kit/1.50kit rate:7.0s/it remaining:23:27 elapsed:2:37:32 postfix:- (1143:tqdm_logging.py:145)


15:58:37.453 [I] Progress on: 1.30kit/1.50kit rate:7.0s/it remaining:23:27 elapsed:2:37:46 postfix:- (1143:tqdm_logging.py:145)
15:58:51.913 [I] Progress on: 1.30kit/1.50kit rate:6.7s/it remaining:22:01 elapsed:2:38:00 postfix:- (1143:tqdm_logging.py:145)
15:59:05.948 [I] Progress on: 1.31kit/1.50kit rate:6.9s/it remaining:22:14 elapsed:2:38:14 postfix:- (1143:tqdm_logging.py:145)
15:59:19.987 [I] Progress on: 1.31kit/1.50kit rate:7.0s/it remaining:22:14 elapsed:2:38:28 postfix:- (1143:tqdm_logging.py:145)
15:59:34.020 [I] Progress on: 1.31kit/1.50kit rate:7.0s/it remaining:22:07 elapsed:2:38:42 postfix:- (1143:tqdm_logging.py:145)
15:59:48.065 [I] Progress on: 1.31kit/1.50kit rate:7.0s/it remaining:21:56 elapsed:2:38:56 postfix:- (1143:tqdm_logging.py:145)
16:00:02.133 [I] Progress on: 1.31kit/1.50kit rate:7.0s/it remaining:21:45 elapsed:2:39:10 postfix:- (1143:tqdm_logging.py:145)
16:00:16.191 [I] Progress on: 1.32kit/1.50kit rate:7.0s/it remaining:21:32 elapsed:2:39:24 postfix:- (1143:tqdm_logging.py:145)
16:00:30.227 [I] Progress on: 1.32kit/1.50kit rate:7.0s/it remaining:21:17 elapsed:2:39:38 postfix:- (1143:tqdm_logging.py:145)
16:00:44.257 [I] Progress on: 1.32kit/1.50kit rate:7.0s/it remaining:21:03 elapsed:2:39:52 postfix:- (1143:tqdm_logging.py:145)
16:00:58.293 [I] Progress on: 1.32kit/1.50kit rate:7.0s/it remaining:20:49 elapsed:2:40:06 postfix:- (1143:tqdm_logging.py:145)
16:01:12.338 [I] Progress on: 1.32kit/1.50kit rate:7.0s/it remaining:20:35 elapsed:2:40:20 postfix:- (1143:tqdm_logging.py:145)
16:01:26.391 [I] Progress on: 1.33kit/1.50kit rate:7.0s/it remaining:20:21 elapsed:2:40:35 postfix:- (1143:tqdm_logging.py:145)
16:01:40.445 [I] Progress on: 1.33kit/1.50kit rate:7.0s/it remaining:20:08 elapsed:2:40:49 postfix:- (1143:tqdm_logging.py:145)
16:01:54.503 [I] Progress on: 1.33kit/1.50kit rate:7.0s/it remaining:19:54 elapsed:2:41:03 postfix:- (1143:tqdm_logging.py:145)
16:02:08.532 [I] Progress on: 1.33kit/1.50kit rate:7.0s/it remaining:19:39 elapsed:2:41:17 postfix:- (1143:tqdm_logging.py:145)
16:02:22.566 [I] Progress on: 1.33kit/1.50kit rate:7.0s/it remaining:19:25 elapsed:2:41:31 postfix:- (1143:tqdm_logging.py:145)
16:02:36.614 [I] Progress on: 1.34kit/1.50kit rate:7.0s/it remaining:19:11 elapsed:2:41:45 postfix:- (1143:tqdm_logging.py:145)
16:02:50.661 [I] Progress on: 1.34kit/1.50kit rate:7.0s/it remaining:18:57 elapsed:2:41:59 postfix:- (1143:tqdm_logging.py:145)
16:03:04.719 [I] Progress on: 1.34kit/1.50kit rate:7.0s/it remaining:18:44 elapsed:2:42:13 postfix:- (1143:tqdm_logging.py:145)
16:03:18.805 [I] Progress on: 1.34kit/1.50kit rate:7.0s/it remaining:18:31 elapsed:2:42:27 postfix:- (1143:tqdm_logging.py:145)
16:03:32.883 [I] Progress on: 1.34kit/1.50kit rate:7.0s/it remaining:18:17 elapsed:2:42:41 postfix:- (1143:tqdm_logging.py:145)
16:03:46.979 [I] Progress on: 1.35kit/1.50kit rate:7.0s/it remaining:18:04 elapsed:2:42:55 postfix:- (1143:tqdm_logging.py:145)
16:04:01.077 [I] Progress on: 1.35kit/1.50kit rate:7.0s/it remaining:17:50 elapsed:2:43:09 postfix:- (1143:tqdm_logging.py:145)
16:04:15.174 [I] Progress on: 1.35kit/1.50kit rate:7.0s/it remaining:17:37 elapsed:2:43:23 postfix:- (1143:tqdm_logging.py:145)


16:04:28.909 [I] Progress on: 1.35kit/1.50kit rate:7.0s/it remaining:17:37 elapsed:2:43:37 postfix:- (1143:tqdm_logging.py:145)
16:04:43.422 [I] Progress on: 1.35kit/1.50kit rate:6.8s/it remaining:16:26 elapsed:2:43:52 postfix:- (1143:tqdm_logging.py:145)
16:04:57.519 [I] Progress on: 1.36kit/1.50kit rate:6.9s/it remaining:16:34 elapsed:2:44:06 postfix:- (1143:tqdm_logging.py:145)
16:05:11.613 [I] Progress on: 1.36kit/1.50kit rate:7.0s/it remaining:16:31 elapsed:2:44:20 postfix:- (1143:tqdm_logging.py:145)
16:05:25.707 [I] Progress on: 1.36kit/1.50kit rate:7.0s/it remaining:16:21 elapsed:2:44:34 postfix:- (1143:tqdm_logging.py:145)
16:05:39.792 [I] Progress on: 1.36kit/1.50kit rate:7.0s/it remaining:16:09 elapsed:2:44:48 postfix:- (1143:tqdm_logging.py:145)
16:05:53.878 [I] Progress on: 1.36kit/1.50kit rate:7.0s/it remaining:15:56 elapsed:2:45:02 postfix:- (1143:tqdm_logging.py:145)
16:06:07.956 [I] Progress on: 1.37kit/1.50kit rate:7.0s/it remaining:15:42 elapsed:2:45:16 postfix:- (1143:tqdm_logging.py:145)
16:06:22.033 [I] Progress on: 1.37kit/1.50kit rate:7.0s/it remaining:15:28 elapsed:2:45:30 postfix:- (1143:tqdm_logging.py:145)
16:06:36.102 [I] Progress on: 1.37kit/1.50kit rate:7.0s/it remaining:15:14 elapsed:2:45:44 postfix:- (1143:tqdm_logging.py:145)
16:06:50.174 [I] Progress on: 1.37kit/1.50kit rate:7.0s/it remaining:15:00 elapsed:2:45:58 postfix:- (1143:tqdm_logging.py:145)
16:07:04.255 [I] Progress on: 1.37kit/1.50kit rate:7.0s/it remaining:14:46 elapsed:2:46:12 postfix:- (1143:tqdm_logging.py:145)
16:07:18.328 [I] Progress on: 1.38kit/1.50kit rate:7.0s/it remaining:14:32 elapsed:2:46:26 postfix:- (1143:tqdm_logging.py:145)
16:07:32.409 [I] Progress on: 1.38kit/1.50kit rate:7.0s/it remaining:14:18 elapsed:2:46:41 postfix:- (1143:tqdm_logging.py:145)
16:07:46.476 [I] Progress on: 1.38kit/1.50kit rate:7.0s/it remaining:14:04 elapsed:2:46:55 postfix:- (1143:tqdm_logging.py:145)
16:08:00.552 [I] Progress on: 1.38kit/1.50kit rate:7.0s/it remaining:13:50 elapsed:2:47:09 postfix:- (1143:tqdm_logging.py:145)
16:08:14.626 [I] Progress on: 1.38kit/1.50kit rate:7.0s/it remaining:13:36 elapsed:2:47:23 postfix:- (1143:tqdm_logging.py:145)
16:08:28.701 [I] Progress on: 1.39kit/1.50kit rate:7.0s/it remaining:13:22 elapsed:2:47:37 postfix:- (1143:tqdm_logging.py:145)
16:08:42.782 [I] Progress on: 1.39kit/1.50kit rate:7.0s/it remaining:13:08 elapsed:2:47:51 postfix:- (1143:tqdm_logging.py:145)
16:08:56.867 [I] Progress on: 1.39kit/1.50kit rate:7.0s/it remaining:12:54 elapsed:2:48:05 postfix:- (1143:tqdm_logging.py:145)
16:09:10.942 [I] Progress on: 1.39kit/1.50kit rate:7.0s/it remaining:12:35 elapsed:2:48:19 postfix:- (1143:tqdm_logging.py:145)
16:09:25.016 [I] Progress on: 1.39kit/1.50kit rate:7.0s/it remaining:12:23 elapsed:2:48:33 postfix:- (1143:tqdm_logging.py:145)
16:09:39.082 [I] Progress on: 1.40kit/1.50kit rate:7.0s/it remaining:12:10 elapsed:2:48:47 postfix:- (1143:tqdm_logging.py:145)
16:09:53.160 [I] Progress on: 1.40kit/1.50kit rate:7.0s/it remaining:11:57 elapsed:2:49:01 postfix:- (1143:tqdm_logging.py:145)
16:10:07.234 [I] Progress on: 1.40kit/1.50kit rate:7.0s/it remaining:11:43 elapsed:2:49:15 postfix:- (1143:tqdm_logging.py:145)


16:10:20.956 [I] Progress on: 1.40kit/1.50kit rate:7.0s/it remaining:11:43 elapsed:2:49:29 postfix:- (1143:tqdm_logging.py:145)
16:10:35.465 [I] Progress on: 1.40kit/1.50kit rate:6.7s/it remaining:10:47 elapsed:2:49:44 postfix:- (1143:tqdm_logging.py:145)
16:10:49.509 [I] Progress on: 1.41kit/1.50kit rate:6.9s/it remaining:10:47 elapsed:2:49:58 postfix:- (1143:tqdm_logging.py:145)
16:11:03.550 [I] Progress on: 1.41kit/1.50kit rate:7.0s/it remaining:10:39 elapsed:2:50:12 postfix:- (1143:tqdm_logging.py:145)
16:11:17.583 [I] Progress on: 1.41kit/1.50kit rate:7.0s/it remaining:10:28 elapsed:2:50:26 postfix:- (1143:tqdm_logging.py:145)
16:11:31.632 [I] Progress on: 1.41kit/1.50kit rate:7.0s/it remaining:10:16 elapsed:2:50:40 postfix:- (1143:tqdm_logging.py:145)
16:11:45.679 [I] Progress on: 1.41kit/1.50kit rate:7.0s/it remaining:10:03 elapsed:2:50:54 postfix:- (1143:tqdm_logging.py:145)
16:11:59.727 [I] Progress on: 1.42kit/1.50kit rate:7.0s/it remaining:09:49 elapsed:2:51:08 postfix:- (1143:tqdm_logging.py:145)
16:12:13.762 [I] Progress on: 1.42kit/1.50kit rate:7.0s/it remaining:09:35 elapsed:2:51:22 postfix:- (1143:tqdm_logging.py:145)
16:12:27.799 [I] Progress on: 1.42kit/1.50kit rate:7.0s/it remaining:09:21 elapsed:2:51:36 postfix:- (1143:tqdm_logging.py:145)
16:12:41.837 [I] Progress on: 1.42kit/1.50kit rate:7.0s/it remaining:09:07 elapsed:2:51:50 postfix:- (1143:tqdm_logging.py:145)
16:12:55.886 [I] Progress on: 1.42kit/1.50kit rate:7.0s/it remaining:08:53 elapsed:2:52:04 postfix:- (1143:tqdm_logging.py:145)
16:13:09.936 [I] Progress on: 1.43kit/1.50kit rate:7.0s/it remaining:08:39 elapsed:2:52:18 postfix:- (1143:tqdm_logging.py:145)
16:13:23.990 [I] Progress on: 1.43kit/1.50kit rate:7.0s/it remaining:08:25 elapsed:2:52:32 postfix:- (1143:tqdm_logging.py:145)
16:13:38.040 [I] Progress on: 1.43kit/1.50kit rate:7.0s/it remaining:08:11 elapsed:2:52:46 postfix:- (1143:tqdm_logging.py:145)
16:13:52.083 [I] Progress on: 1.43kit/1.50kit rate:7.0s/it remaining:07:57 elapsed:2:53:00 postfix:- (1143:tqdm_logging.py:145)
16:14:06.134 [I] Progress on: 1.43kit/1.50kit rate:7.0s/it remaining:07:43 elapsed:2:53:14 postfix:- (1143:tqdm_logging.py:145)
16:14:20.174 [I] Progress on: 1.44kit/1.50kit rate:7.0s/it remaining:07:29 elapsed:2:53:28 postfix:- (1143:tqdm_logging.py:145)
16:14:34.224 [I] Progress on: 1.44kit/1.50kit rate:7.0s/it remaining:07:15 elapsed:2:53:42 postfix:- (1143:tqdm_logging.py:145)
16:14:48.256 [I] Progress on: 1.44kit/1.50kit rate:7.0s/it remaining:07:01 elapsed:2:53:56 postfix:- (1143:tqdm_logging.py:145)
16:15:02.296 [I] Progress on: 1.44kit/1.50kit rate:7.0s/it remaining:06:47 elapsed:2:54:10 postfix:- (1143:tqdm_logging.py:145)
16:15:16.349 [I] Progress on: 1.44kit/1.50kit rate:7.0s/it remaining:06:33 elapsed:2:54:24 postfix:- (1143:tqdm_logging.py:145)
16:15:30.386 [I] Progress on: 1.45kit/1.50kit rate:7.0s/it remaining:06:19 elapsed:2:54:39 postfix:- (1143:tqdm_logging.py:145)
16:15:44.423 [I] Progress on: 1.45kit/1.50kit rate:7.0s/it remaining:06:04 elapsed:2:54:53 postfix:- (1143:tqdm_logging.py:145)
16:15:58.463 [I] Progress on: 1.45kit/1.50kit rate:7.0s/it remaining:05:50 elapsed:2:55:07 postfix:- (1143:tqdm_logging.py:145)


16:16:12.172 [I] Progress on: 1.45kit/1.50kit rate:7.0s/it remaining:05:50 elapsed:2:55:20 postfix:- (1143:tqdm_logging.py:145)
16:16:26.684 [I] Progress on: 1.45kit/1.50kit rate:6.7s/it remaining:05:10 elapsed:2:55:35 postfix:- (1143:tqdm_logging.py:145)
16:16:40.758 [I] Progress on: 1.46kit/1.50kit rate:6.9s/it remaining:05:03 elapsed:2:55:49 postfix:- (1143:tqdm_logging.py:145)
16:16:54.857 [I] Progress on: 1.46kit/1.50kit rate:7.0s/it remaining:04:52 elapsed:2:56:03 postfix:- (1143:tqdm_logging.py:145)
16:17:08.936 [I] Progress on: 1.46kit/1.50kit rate:7.0s/it remaining:04:40 elapsed:2:56:17 postfix:- (1143:tqdm_logging.py:145)
16:17:23.026 [I] Progress on: 1.46kit/1.50kit rate:7.0s/it remaining:04:26 elapsed:2:56:31 postfix:- (1143:tqdm_logging.py:145)
16:17:37.109 [I] Progress on: 1.46kit/1.50kit rate:7.0s/it remaining:04:13 elapsed:2:56:45 postfix:- (1143:tqdm_logging.py:145)
16:17:51.196 [I] Progress on: 1.47kit/1.50kit rate:7.0s/it remaining:03:59 elapsed:2:56:59 postfix:- (1143:tqdm_logging.py:145)
16:18:05.280 [I] Progress on: 1.47kit/1.50kit rate:7.0s/it remaining:03:45 elapsed:2:57:13 postfix:- (1143:tqdm_logging.py:145)
16:18:19.351 [I] Progress on: 1.47kit/1.50kit rate:7.0s/it remaining:03:31 elapsed:2:57:27 postfix:- (1143:tqdm_logging.py:145)
16:18:33.440 [I] Progress on: 1.47kit/1.50kit rate:7.0s/it remaining:03:17 elapsed:2:57:42 postfix:- (1143:tqdm_logging.py:145)
16:18:47.518 [I] Progress on: 1.47kit/1.50kit rate:7.0s/it remaining:03:03 elapsed:2:57:56 postfix:- (1143:tqdm_logging.py:145)
16:19:01.589 [I] Progress on: 1.48kit/1.50kit rate:7.0s/it remaining:02:48 elapsed:2:58:10 postfix:- (1143:tqdm_logging.py:145)
16:19:15.663 [I] Progress on: 1.48kit/1.50kit rate:7.0s/it remaining:02:34 elapsed:2:58:24 postfix:- (1143:tqdm_logging.py:145)
16:19:29.735 [I] Progress on: 1.48kit/1.50kit rate:7.0s/it remaining:02:20 elapsed:2:58:38 postfix:- (1143:tqdm_logging.py:145)
16:19:43.857 [I] Progress on: 1.48kit/1.50kit rate:7.0s/it remaining:02:06 elapsed:2:58:52 postfix:- (1143:tqdm_logging.py:145)
16:19:57.897 [I] Progress on: 1.48kit/1.50kit rate:7.0s/it remaining:01:52 elapsed:2:59:06 postfix:- (1143:tqdm_logging.py:145)
16:20:11.973 [I] Progress on: 1.49kit/1.50kit rate:7.0s/it remaining:01:38 elapsed:2:59:20 postfix:- (1143:tqdm_logging.py:145)
16:20:26.050 [I] Progress on: 1.49kit/1.50kit rate:7.0s/it remaining:01:24 elapsed:2:59:34 postfix:- (1143:tqdm_logging.py:145)
16:20:40.123 [I] Progress on: 1.49kit/1.50kit rate:7.0s/it remaining:01:10 elapsed:2:59:48 postfix:- (1143:tqdm_logging.py:145)
16:20:54.190 [I] Progress on: 1.49kit/1.50kit rate:7.0s/it remaining:00:56 elapsed:3:00:02 postfix:- (1143:tqdm_logging.py:145)
16:21:08.263 [I] Progress on: 1.49kit/1.50kit rate:7.0s/it remaining:00:42 elapsed:3:00:16 postfix:- (1143:tqdm_logging.py:145)
16:21:22.352 [I] Progress on: 1.50kit/1.50kit rate:7.0s/it remaining:00:28 elapsed:3:00:30 postfix:- (1143:tqdm_logging.py:145)
16:21:36.975 [I] Progress on: 1.50kit/1.50kit rate:7.2s/it remaining:00:14 elapsed:3:00:45 postfix:- (1143:tqdm_logging.py:145)
16:21:50.491 [I] [process=0][thread=MainThread][wait_until_finished] No Save Finalize thread to wait for. Returning. (1143:checkpoint_manager.py:1987)
16:21:50.492 [I] [process=0] Saving checkpoint at step 1499                                       (1143:checkpoint_manager.py:1408)
16:21:50.493 [I] [process=0] Started async saving checkpoint to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499. (1143:async_checkpointer.py:439)
16:21:50.506 [I] Creating tmp directory /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499.orbax-checkpoint-tmp-4 (1143:atomicity.py:144)
16:21:50.512 [I] Creating tmp directory /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499.orbax-checkpoint-tmp-4/assets.orbax-checkpoint-tmp-5 (1143:atomicity.py:144)
16:21:50.513 [I] Creating tmp directory /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499.orbax-checkpoint-tmp-4/params.orbax-checkpoint-tmp-6 (1143:atomicity.py:144)
16:21:50.513 [I] Creating tmp directory /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499.orbax-checkpoint-tmp-4/train_state.orbax-checkpoint-tmp-7 (1143:atomicity.py:144)
16:21:50.527 [I] Transferring arrays to host memory with options: use_replica_parallel=True, enable_pinned_host_transfer=False (1143:replica_slices.py:341)
16:22:01.053 [I] Transferring arrays to host memory with options: use_replica_parallel=True, enable_pinned_host_transfer=False (1143:replica_slices.py:341)
16:22:01.056 [I] Array name: 'params.PaliGemma.llm.layers.mlp.gating_einsum.value', global shape: (18, 2, 2048, 16384), write shape: (18, 2, 2048, 16384), chosen chunk shape: (18, 2, 2048, 8192) (1143:tensorstore_utils.py:408)
16:22:01.122 [I] [process=0][thread=array_type_handler] Wrote 71 array_metadata.ArrayMetadata to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499.orbax-checkpoint-tmp-4/params.orbax-checkpoint-tmp-6/array_metadatas/process_0 (1143:array_metadata_store.py:198)
16:22:03.057 [I] [process=0] /jax/checkpoint/write/blocking_bytes_per_sec: 587.8 MiB/s (total bytes: 7.2 GiB) (time elapsed: 12 seconds) (per-host) (1143:base_pytree_checkpoint_handler.py:114)
16:22:03.060 [I] [process=0] /jax/checkpoint/write/blocking_bytes_per_sec: 283.7 MiB/s (total bytes: 3.5 GiB) (time elapsed: 12 seconds) (per-host) (1143:base_pytree_checkpoint_handler.py:114)
16:22:03.065 [I] [process=0][thread=async_save] Background save thread started.                   (1143:async_checkpointer.py:77)
16:22:03.066 [I] Finished blocking save in 12.57 seconds. Continuing to save asynchronously to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499. (1143:async_checkpointer.py:548)
16:22:03.066 [I] Preserving Checkpoint[step=1000 | time=2026-10-31 15:23:26.704081+00:00]: (Reason: on keep_period=1000). (1143:checkpoint_manager.py:1949)
16:22:03.066 [I] [process=0][thread=MainThread][step=1499] Starting CheckpointManager Save Finalize thread=save_finalize (1143:checkpoint_manager.py:1453)
16:22:03.067 [I] [process=0][thread=save_finalize] Waiting for background save thread=async_save. (1143:async_checkpointer.py:258)
16:22:03.067 [I] {'step': 1499, 'event_type': 'save', 'directory': '/workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3', 'reached_preemption': False, 'preemption_received_at': None, 'synchronous': False, 'wait_for_prev_start_time': 1793463710.4910753, 'wait_for_prev_duration_secs': 0.00032019615173339844, 'checkpointer_blocking_start_time': 1793463710.492204, 'checkpointer_blocking_duration_secs': 12.574098110198975, 'get_old_steps_start_time': 1793463723.066328, 'get_old_steps_duration_secs': 0.0001480579376220703, 'checkpoint_manager_blocking_start_time': 1793463710.4905412, 'checkpoint_manager_blocking_duration_secs': 12.577093124389648} (1143:standard_logger.py:34)
16:22:03.068 [I] Progress on: 1.50kit/1.50kit rate:10.8s/it remaining:00:00 elapsed:3:01:11 postfix:- (1143:tqdm_logging.py:145)
16:22:03.068 [I] Progress on: 1.50kit/1.50kit rate:10.8s/it remaining:00:00 elapsed:3:01:11 postfix:- (1143:tqdm_logging.py:145)
16:22:03.068 [I] Waiting for checkpoint manager to finish                                         (1143:train.py:275)
16:22:03.069 [I] [process=0][thread=MainThread][step=1499][wait_until_finished] Waiting for Save Finalize thread (save_finalize) to complete. (1143:checkpoint_manager.py:1998)
16:22:03.122 [I] [process=0][thread=array_type_handler] Wrote 105 array_metadata.ArrayMetadata to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499.orbax-checkpoint-tmp-4/train_state.orbax-checkpoint-tmp-7/array_metadatas/process_0 (1143:array_metadata_store.py:198)
16:22:06.607 [I] [process=0] /jax/checkpoint/write/bytes_per_sec: 458.2 MiB/s (total bytes: 7.2 GiB) (time elapsed: 16 seconds) (per-host) (1143:base_pytree_checkpoint_handler.py:114)
16:22:06.607 [I] [process=0] /jax/checkpoint/write/bytes_per_sec: 221.3 MiB/s (total bytes: 3.5 GiB) (time elapsed: 16 seconds) (per-host) (1143:base_pytree_checkpoint_handler.py:114)
16:22:06.607 [I] [process=0][thread=async_save] 5 Handler Commit operations completed.            (1143:async_checkpointer.py:87)
16:22:06.608 [I] Renaming /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499.orbax-checkpoint-tmp-4/assets.orbax-checkpoint-tmp-5 to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499.orbax-checkpoint-tmp-4/assets (1143:atomicity.py:289)
16:22:06.611 [I] [process=0][thread=async_save] Skipped cross-host ArrayMetadata validation because only one process is found: process_index=0. (1143:array_metadata_store.py:362)
16:22:06.615 [I] Renaming /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499.orbax-checkpoint-tmp-4/train_state.orbax-checkpoint-tmp-7 to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499.orbax-checkpoint-tmp-4/train_state (1143:atomicity.py:289)
16:22:06.618 [I] [process=0][thread=async_save] Skipped cross-host ArrayMetadata validation because only one process is found: process_index=0. (1143:array_metadata_store.py:362)
16:22:06.622 [I] Renaming /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499.orbax-checkpoint-tmp-4/params.orbax-checkpoint-tmp-6 to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499.orbax-checkpoint-tmp-4/params (1143:atomicity.py:289)
16:22:06.622 [I] Renaming /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499.orbax-checkpoint-tmp-4 to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499 (1143:atomicity.py:289)
16:22:06.623 [I] [process=0][thread=async_save] Finished saving checkpoint (finalized tmp dir) to `/workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499`. (1143:atomicity.py:573)
16:22:06.623 [I] Finished asynchronous save (blocking + background) in 16.13 seconds to /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499 (1143:async_checkpointer.py:412)
16:22:06.623 [I] [process=0][thread=async_save] Background save thread done.                      (1143:async_checkpointer.py:143)
16:22:06.623 [I] [process=0][thread=save_finalize] Done with waiting for background save thread=async_save. (1143:async_checkpointer.py:266)
16:22:06.624 [I] [process=0][thread=save_finalize] No errors found in background save thread=async_save. (1143:async_checkpointer.py:276)
16:22:06.624 [I] [process=0][thread=save_finalize][step=1499] CheckpointManager Save Finalize is syncing with other hosts... (1143:checkpoint_manager.py:2095)
16:22:06.624 [I] [process=0][thread=save_finalize][step=1499] CheckpointManager Save Finalize is done on all hosts. (1143:checkpoint_manager.py:2110)
16:22:06.624 [I] [process=0][thread=MainThread][step=1499][wait_until_finished] Done waiting for Save Finalize thread (save_finalize) running at step=1499. (1143:checkpoint_manager.py:2010)
Step 0: grad_norm=0.0573, loss=0.0075, param_norm=1804.1436
Step 50: grad_norm=0.0902, loss=0.0125, param_norm=1804.1436
Step 100: grad_norm=0.0542, loss=0.0077, param_norm=1804.1445
Step 150: grad_norm=0.0483, loss=0.0060, param_norm=1804.1471
Step 200: grad_norm=0.0446, loss=0.0051, param_norm=1804.1493
Step 250: grad_norm=0.0447, loss=0.0048, param_norm=1804.1520
Step 300: grad_norm=0.0463, loss=0.0051, param_norm=1804.1549
Step 350: grad_norm=0.0469, loss=0.0048, param_norm=1804.1571
Step 400: grad_norm=0.0412, loss=0.0043, param_norm=1804.1592
Step 450: grad_norm=0.0520, loss=0.0049, param_norm=1804.1616
Step 500: grad_norm=0.0435, loss=0.0042, param_norm=1804.1635
Step 550: grad_norm=0.0468, loss=0.0042, param_norm=1804.1653
Step 600: grad_norm=0.0446, loss=0.0040, param_norm=1804.1671
Step 650: grad_norm=0.0470, loss=0.0038, param_norm=1804.1692
Step 700: grad_norm=0.0413, loss=0.0036, param_norm=1804.1705
Step 750: grad_norm=0.0462, loss=0.0039, param_norm=1804.1721
Step 800: grad_norm=0.0452, loss=0.0037, param_norm=1804.1731
Step 850: grad_norm=0.0433, loss=0.0033, param_norm=1804.1741
Step 900: grad_norm=0.0415, loss=0.0034, param_norm=1804.1752
Step 950: grad_norm=0.0409, loss=0.0031, param_norm=1804.1760
Step 1000: grad_norm=0.0461, loss=0.0034, param_norm=1804.1766
Step 1050: grad_norm=0.0448, loss=0.0032, param_norm=1804.1771
Step 1100: grad_norm=0.0433, loss=0.0033, param_norm=1804.1777
Step 1150: grad_norm=0.0374, loss=0.0029, param_norm=1804.1783
Step 1200: grad_norm=0.0452, loss=0.0033, param_norm=1804.1783
Step 1250: grad_norm=0.0383, loss=0.0027, param_norm=1804.1791
Step 1300: grad_norm=0.0362, loss=0.0025, param_norm=1804.1797
Step 1350: grad_norm=0.0426, loss=0.0030, param_norm=1804.1799
Step 1400: grad_norm=0.0368, loss=0.0028, param_norm=1804.1799
Step 1450: grad_norm=0.0369, loss=0.0028, param_norm=1804.1803
```

### 学習の準備のログ prep_trim_corr.log

```text
== 1. tar を広げる → /workspace/data/mecharm_redblock_box_teach_v1_trim2_corr_v3
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance'
   エピソード 24 本 (Mac で作ったときは 24 本)
== 2. 学習設定 pi05_mecharm_trim_corr_lora を足す (steps=1500 init=/workspace/ckpt/3999/params)
installed: pi05_mecharm_trim_corr_lora (repo_id=local/mecharm_redblock_box_teach_v1_trim2_corr_v3, 1500 steps, init=/workspace/ckpt/3999/params)
== 3. LeRobot 形式に変換 (local/mecharm_redblock_box_teach_v1_trim2_corr_v3)

Map:   0%|          | 0/118 [00:00<?, ? examples/s]
Map:  72%|███████▏  | 85/118 [00:00<00:00, 829.34 examples/s]
Map: 100%|██████████| 118/118 [00:00<00:00, 725.70 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 72.31ba/s]
  pi05_20261031_175527: 118 steps

Map:   0%|          | 0/152 [00:00<?, ? examples/s]
Map:  68%|██████▊   | 103/152 [00:00<00:00, 1015.99 examples/s]
Map: 100%|██████████| 152/152 [00:00<00:00, 858.50 examples/s] 

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 50.49ba/s]
  pi05_20261031_180435: 152 steps

Map:   0%|          | 0/126 [00:00<?, ? examples/s]
Map:  87%|████████▋ | 109/126 [00:00<00:00, 1066.47 examples/s]
Map: 100%|██████████| 126/126 [00:00<00:00, 939.32 examples/s] 

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 62.92ba/s]
  pi05_20261031_181946: 126 steps

Map:   0%|          | 0/197 [00:00<?, ? examples/s]
Map:  56%|█████▌    | 110/197 [00:00<00:00, 1082.30 examples/s]
Map: 100%|██████████| 197/197 [00:00<00:00, 920.09 examples/s] 

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 52.79ba/s]
  pi05_20261031_182545: 197 steps

Map:   0%|          | 0/133 [00:00<?, ? examples/s]
Map:  91%|█████████ | 121/133 [00:00<00:00, 1191.80 examples/s]
Map: 100%|██████████| 133/133 [00:00<00:00, 1071.29 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 117.78ba/s]
  pi05_20261031_184016: 133 steps

Map:   0%|          | 0/144 [00:00<?, ? examples/s]
Map:  76%|███████▌  | 109/144 [00:00<00:00, 1078.05 examples/s]
Map: 100%|██████████| 144/144 [00:00<00:00, 888.94 examples/s] 

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 62.38ba/s]
  run_0001_20261019_183454: 144 steps

Map:   0%|          | 0/147 [00:00<?, ? examples/s]
Map:  90%|█████████ | 133/147 [00:00<00:00, 1312.77 examples/s]
Map: 100%|██████████| 147/147 [00:00<00:00, 1169.30 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 131.02ba/s]
  run_0001_20261019_191257: 147 steps

Map:   0%|          | 0/144 [00:00<?, ? examples/s]
Map:  99%|█████████▉| 143/144 [00:00<00:00, 1407.97 examples/s]
Map: 100%|██████████| 144/144 [00:00<00:00, 1225.94 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 87.22ba/s]
  run_0001_20261019_191347: 144 steps

Map:   0%|          | 0/163 [00:00<?, ? examples/s]
Map:  79%|███████▉  | 129/163 [00:00<00:00, 1278.69 examples/s]
Map: 100%|██████████| 163/163 [00:00<00:00, 1120.02 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 83.80ba/s]
  run_0001_20261019_191441: 163 steps

Map:   0%|          | 0/139 [00:00<?, ? examples/s]
Map:  92%|█████████▏| 128/139 [00:00<00:00, 1267.98 examples/s]
Map: 100%|██████████| 139/139 [00:00<00:00, 1085.89 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 102.20ba/s]
  run_0001_20261019_191541: 139 steps

Map:   0%|          | 0/138 [00:00<?, ? examples/s]
Map:  87%|████████▋ | 120/138 [00:00<00:00, 1188.50 examples/s]
Map: 100%|██████████| 138/138 [00:00<00:00, 1000.55 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 67.12ba/s]
  run_0001_20261019_191635: 138 steps

Map:   0%|          | 0/140 [00:00<?, ? examples/s]
Map:  91%|█████████▏| 128/140 [00:00<00:00, 1268.92 examples/s]
Map: 100%|██████████| 140/140 [00:00<00:00, 1122.51 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 111.59ba/s]
  run_0001_20261019_192343: 140 steps

Map:   0%|          | 0/138 [00:00<?, ? examples/s]
Map:  83%|████████▎ | 115/138 [00:00<00:00, 1128.26 examples/s]
Map: 100%|██████████| 138/138 [00:00<00:00, 963.53 examples/s] 

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 77.85ba/s]
  run_0001_20261019_192438: 138 steps

Map:   0%|          | 0/140 [00:00<?, ? examples/s]
Map:  81%|████████▏ | 114/140 [00:00<00:00, 1123.96 examples/s]
Map: 100%|██████████| 140/140 [00:00<00:00, 962.68 examples/s] 

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 68.41ba/s]
  run_0001_20261019_192539: 140 steps

Map:   0%|          | 0/137 [00:00<?, ? examples/s]
Map:  71%|███████   | 97/137 [00:00<00:00, 948.46 examples/s]
Map: 100%|██████████| 137/137 [00:00<00:00, 838.50 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 81.29ba/s]
  run_0001_20261019_192633: 137 steps

Map:   0%|          | 0/164 [00:00<?, ? examples/s]
Map:  82%|████████▏ | 135/164 [00:00<00:00, 1336.74 examples/s]
Map: 100%|██████████| 164/164 [00:00<00:00, 1132.95 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 102.06ba/s]
  run_0001_20261019_193404: 164 steps

Map:   0%|          | 0/159 [00:00<?, ? examples/s]
Map:  59%|█████▉    | 94/159 [00:00<00:00, 923.87 examples/s]
Map: 100%|██████████| 159/159 [00:00<00:00, 943.35 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 80.14ba/s]
  run_0001_20261019_193459: 159 steps

Map:   0%|          | 0/156 [00:00<?, ? examples/s]
Map:  91%|█████████ | 142/156 [00:00<00:00, 1400.79 examples/s]
Map: 100%|██████████| 156/156 [00:00<00:00, 1225.07 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 116.58ba/s]
  run_0001_20261019_193617: 156 steps

Map:   0%|          | 0/165 [00:00<?, ? examples/s]
Map:  82%|████████▏ | 135/165 [00:00<00:00, 1333.55 examples/s]
Map: 100%|██████████| 165/165 [00:00<00:00, 1179.83 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 96.07ba/s]
  run_0001_20261019_193825: 165 steps

Map:   0%|          | 0/151 [00:00<?, ? examples/s]
Map:  97%|█████████▋| 146/151 [00:00<00:00, 1445.62 examples/s]
Map: 100%|██████████| 151/151 [00:00<00:00, 1255.20 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 97.86ba/s]
  run_0001_20261019_193932: 151 steps

Map:   0%|          | 0/123 [00:00<?, ? examples/s]
Map:  97%|█████████▋| 119/123 [00:00<00:00, 1181.23 examples/s]
Map: 100%|██████████| 123/123 [00:00<00:00, 1008.81 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 88.07ba/s]
  run_0001_20261019_194818: 123 steps

Map:   0%|          | 0/126 [00:00<?, ? examples/s]
Map: 100%|██████████| 126/126 [00:00<00:00, 1219.59 examples/s]
Map: 100%|██████████| 126/126 [00:00<00:00, 1191.98 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 148.24ba/s]
  run_0001_20261019_194913: 126 steps

Map:   0%|          | 0/123 [00:00<?, ? examples/s]
Map: 100%|██████████| 123/123 [00:00<00:00, 1207.38 examples/s]

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 107.63ba/s]
  run_0001_20261019_195023: 123 steps

Map:   0%|          | 0/120 [00:00<?, ? examples/s]
Map:  98%|█████████▊| 117/120 [00:00<00:00, 1153.90 examples/s]
Map: 100%|██████████| 120/120 [00:00<00:00, 978.50 examples/s] 

Creating parquet from Arrow format:   0%|          | 0/2 [00:00<?, ?ba/s]
Creating parquet from Arrow format: 100%|██████████| 2/2 [00:00<00:00, 90.37ba/s]
  run_0001_20261019_195120: 120 steps
done: 24 episodes / 3443 frames → /root/.cache/huggingface/lerobot/local/mecharm_redblock_box_teach_v1_trim2_corr_v3
== 4. 正規化の値は trim2 の値をそのまま置く (計算し直さない)
   /workspace/ckpt/3999/assets/local/mecharm_redblock_box_teach_v1_trim2/norm_stats.json → /workspace/openpi/assets/pi05_mecharm_trim_corr_lora/local/mecharm_redblock_box_teach_v1_trim2_corr_v3/norm_stats.json (sha256 80346837eb12…)
== 5. 準備できました. 学習はこのコマンドで始める (このスクリプトでは流さない):
   cd /workspace/openpi && XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_mecharm_trim_corr_lora --exp-name=trim_corr_v3 --overwrite 2>&1 | tee /workspace/logs/train_trim_corr_v3.log
```

### train_run.log

```text
2026-10-31 13:20:09 始める
2026-10-31 16:22:11 終わった (終了コード 0)
```

### GPU の記録 gpu_train.csv

```csv
timestamp, name, memory.used [MiB], memory.total [MiB], utilization.gpu [%], temperature.gpu, power.draw [W]
2026/10/31 13:20:09.770, NVIDIA A40, 0 MiB, 46068 MiB, 0 %, 31, 31.66 W
2026/10/31 13:20:39.787, NVIDIA A40, 41219 MiB, 46068 MiB, 0 %, 36, 85.98 W
2026/10/31 13:21:09.788, NVIDIA A40, 41229 MiB, 46068 MiB, 0 %, 38, 86.96 W
2026/10/31 13:21:39.789, NVIDIA A40, 41229 MiB, 46068 MiB, 0 %, 39, 87.81 W
2026/10/31 13:22:09.883, NVIDIA A40, 41229 MiB, 46068 MiB, 0 %, 41, 89.16 W
2026/10/31 13:22:39.885, NVIDIA A40, 41229 MiB, 46068 MiB, 0 %, 42, 89.46 W
2026/10/31 13:23:09.885, NVIDIA A40, 41229 MiB, 46068 MiB, 0 %, 41, 89.26 W
2026/10/31 13:23:39.887, NVIDIA A40, 41229 MiB, 46068 MiB, 0 %, 41, 89.12 W
2026/10/31 13:24:09.888, NVIDIA A40, 41261 MiB, 46068 MiB, 97 %, 58, 260.47 W
2026/10/31 13:24:39.888, NVIDIA A40, 41273 MiB, 46068 MiB, 0 %, 47, 91.56 W
2026/10/31 13:25:09.889, NVIDIA A40, 41273 MiB, 46068 MiB, 0 %, 44, 91.65 W
2026/10/31 13:25:39.891, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 58, 289.59 W
2026/10/31 13:26:09.891, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 65, 282.60 W
2026/10/31 13:26:39.893, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 69, 285.15 W
2026/10/31 13:27:09.894, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 299.78 W
2026/10/31 13:27:39.895, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 297.46 W
2026/10/31 13:28:09.897, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 291.44 W
2026/10/31 13:28:39.898, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 294.74 W
2026/10/31 13:29:09.899, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 285.71 W
2026/10/31 13:29:39.900, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 284.15 W
2026/10/31 13:30:09.901, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 281.76 W
2026/10/31 13:30:39.902, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 287.56 W
2026/10/31 13:31:09.902, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 272.69 W
2026/10/31 13:31:39.904, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 280.70 W
2026/10/31 13:32:09.905, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 287.52 W
2026/10/31 13:32:39.906, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 303.23 W
2026/10/31 13:33:09.923, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 253.65 W
2026/10/31 13:33:39.923, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 292.83 W
2026/10/31 13:34:09.924, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 291.41 W
2026/10/31 13:34:39.926, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 295.26 W
2026/10/31 13:35:09.927, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 326.38 W
2026/10/31 13:35:39.928, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 295.74 W
2026/10/31 13:36:09.929, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 283.42 W
2026/10/31 13:36:39.930, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 296.20 W
2026/10/31 13:37:09.931, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 302.47 W
2026/10/31 13:37:39.932, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 292.81 W
2026/10/31 13:38:09.933, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 293.43 W
2026/10/31 13:38:39.935, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 297.77 W
2026/10/31 13:39:09.936, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 289.96 W
2026/10/31 13:39:39.937, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 290.60 W
2026/10/31 13:40:09.939, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 290.29 W
2026/10/31 13:40:39.939, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 299.80 W
2026/10/31 13:41:09.941, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 309.27 W
2026/10/31 13:41:39.945, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 291.58 W
2026/10/31 13:42:09.946, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 288.62 W
2026/10/31 13:42:39.954, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 320.67 W
2026/10/31 13:43:09.955, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 295.04 W
2026/10/31 13:43:39.956, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 292.62 W
2026/10/31 13:44:09.957, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 282.06 W
2026/10/31 13:44:39.958, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 303.26 W
2026/10/31 13:45:09.959, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 290.22 W
2026/10/31 13:45:39.960, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 292.54 W
2026/10/31 13:46:09.961, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 294.19 W
2026/10/31 13:46:39.962, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 295.78 W
2026/10/31 13:47:09.963, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 296.60 W
2026/10/31 13:47:39.964, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 290.61 W
2026/10/31 13:48:09.965, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 294.68 W
2026/10/31 13:48:39.966, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 297.78 W
2026/10/31 13:49:09.967, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 291.43 W
2026/10/31 13:49:39.968, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 287.60 W
2026/10/31 13:50:09.969, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 296.51 W
2026/10/31 13:50:39.970, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 302.92 W
2026/10/31 13:51:09.971, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 291.70 W
2026/10/31 13:51:39.977, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 291.58 W
2026/10/31 13:52:09.978, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 291.41 W
2026/10/31 13:52:39.979, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 280.55 W
2026/10/31 13:53:09.980, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 288.45 W
2026/10/31 13:53:39.981, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 296.94 W
2026/10/31 13:54:09.981, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 305.09 W
2026/10/31 13:54:39.983, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 285.78 W
2026/10/31 13:55:09.983, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 288.00 W
2026/10/31 13:55:39.985, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 289.13 W
2026/10/31 13:56:09.987, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 293.85 W
2026/10/31 13:56:39.988, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 303.77 W
2026/10/31 13:57:09.989, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 290.11 W
2026/10/31 13:57:39.990, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 300.80 W
2026/10/31 13:58:09.991, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 315.39 W
2026/10/31 13:58:39.992, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 289.97 W
2026/10/31 13:59:09.993, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 290.77 W
2026/10/31 13:59:39.994, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 294.58 W
2026/10/31 14:00:09.995, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 312.53 W
2026/10/31 14:00:39.996, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 292.47 W
2026/10/31 14:01:09.997, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 286.63 W
2026/10/31 14:01:39.998, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 304.57 W
2026/10/31 14:02:10.000, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 308.22 W
2026/10/31 14:02:40.001, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 287.83 W
2026/10/31 14:03:10.002, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 285.76 W
2026/10/31 14:03:40.004, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 295.69 W
2026/10/31 14:04:10.012, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 259.17 W
2026/10/31 14:04:40.013, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 294.42 W
2026/10/31 14:05:10.014, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 288.84 W
2026/10/31 14:05:40.015, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 297.32 W
2026/10/31 14:06:10.016, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 329.75 W
2026/10/31 14:06:40.017, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 290.99 W
2026/10/31 14:07:10.018, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 288.60 W
2026/10/31 14:07:40.019, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 298.28 W
2026/10/31 14:08:10.020, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 255.40 W
2026/10/31 14:08:40.021, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 293.48 W
2026/10/31 14:09:10.022, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 288.96 W
2026/10/31 14:09:40.024, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 292.28 W
2026/10/31 14:10:10.025, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 257.61 W
2026/10/31 14:10:40.026, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 293.61 W
2026/10/31 14:11:10.027, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 291.28 W
2026/10/31 14:11:40.028, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 278.99 W
2026/10/31 14:12:10.029, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 289.15 W
2026/10/31 14:12:40.031, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 291.21 W
2026/10/31 14:13:10.033, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 292.64 W
2026/10/31 14:13:40.034, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 310.91 W
2026/10/31 14:14:10.035, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 268.14 W
2026/10/31 14:14:40.036, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 285.60 W
2026/10/31 14:15:10.038, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 290.74 W
2026/10/31 14:15:40.038, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 284.84 W
2026/10/31 14:16:10.039, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 300.31 W
2026/10/31 14:16:40.040, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 290.18 W
2026/10/31 14:17:10.041, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 283.12 W
2026/10/31 14:17:40.042, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 251.58 W
2026/10/31 14:18:10.043, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 288.41 W
2026/10/31 14:18:40.045, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 291.82 W
2026/10/31 14:19:10.046, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 294.11 W
2026/10/31 14:19:40.048, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 309.15 W
2026/10/31 14:20:10.048, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 286.34 W
2026/10/31 14:20:40.049, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 290.54 W
2026/10/31 14:21:10.050, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 294.98 W
2026/10/31 14:21:40.052, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 297.92 W
2026/10/31 14:22:10.053, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 291.21 W
2026/10/31 14:22:40.054, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 291.75 W
2026/10/31 14:23:10.055, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 296.76 W
2026/10/31 14:23:40.057, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 308.32 W
2026/10/31 14:24:10.058, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 290.19 W
2026/10/31 14:24:40.058, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 291.57 W
2026/10/31 14:25:10.059, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 294.53 W
2026/10/31 14:25:40.061, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 258.68 W
2026/10/31 14:26:10.062, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 292.09 W
2026/10/31 14:26:40.063, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 287.03 W
2026/10/31 14:27:10.064, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 296.58 W
2026/10/31 14:27:40.069, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 315.54 W
2026/10/31 14:28:10.070, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 292.28 W
2026/10/31 14:28:40.071, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 289.88 W
2026/10/31 14:29:10.072, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 287.47 W
2026/10/31 14:29:40.073, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 311.45 W
2026/10/31 14:30:10.076, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 294.75 W
2026/10/31 14:30:40.082, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 291.30 W
2026/10/31 14:31:10.083, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 282.51 W
2026/10/31 14:31:40.084, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 301.88 W
2026/10/31 14:32:10.085, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 289.62 W
2026/10/31 14:32:40.086, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 289.41 W
2026/10/31 14:33:10.087, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 267.65 W
2026/10/31 14:33:40.088, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 296.65 W
2026/10/31 14:34:10.090, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 287.49 W
2026/10/31 14:34:40.091, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 302.29 W
2026/10/31 14:35:10.092, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 331.37 W
2026/10/31 14:35:40.093, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 288.77 W
2026/10/31 14:36:10.094, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 293.80 W
2026/10/31 14:36:40.095, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 286.96 W
2026/10/31 14:37:10.097, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 303.01 W
2026/10/31 14:37:40.098, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 290.25 W
2026/10/31 14:38:10.099, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 291.85 W
2026/10/31 14:38:40.100, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 296.55 W
2026/10/31 14:39:10.101, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 278.53 W
2026/10/31 14:39:40.102, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 292.59 W
2026/10/31 14:40:10.103, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 293.57 W
2026/10/31 14:40:40.104, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 301.36 W
2026/10/31 14:41:10.105, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 333.43 W
2026/10/31 14:41:40.106, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 290.71 W
2026/10/31 14:42:10.108, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 293.22 W
2026/10/31 14:42:40.110, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 299.67 W
2026/10/31 14:43:10.111, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 332.84 W
2026/10/31 14:43:40.113, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 289.65 W
2026/10/31 14:44:10.114, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 287.74 W
2026/10/31 14:44:40.114, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 297.26 W
2026/10/31 14:45:10.116, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 301.98 W
2026/10/31 14:45:40.117, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 289.52 W
2026/10/31 14:46:10.118, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 281.71 W
2026/10/31 14:46:40.119, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 303.82 W
2026/10/31 14:47:10.120, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 326.87 W
2026/10/31 14:47:40.121, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 293.44 W
2026/10/31 14:48:10.122, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 286.00 W
2026/10/31 14:48:40.123, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 285.67 W
2026/10/31 14:49:10.124, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 305.20 W
2026/10/31 14:49:40.125, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 290.08 W
2026/10/31 14:50:10.126, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 291.05 W
2026/10/31 14:50:40.127, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 297.62 W
2026/10/31 14:51:10.128, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 298.33 W
2026/10/31 14:51:40.129, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 290.88 W
2026/10/31 14:52:10.130, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 287.35 W
2026/10/31 14:52:40.131, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 306.24 W
2026/10/31 14:53:10.132, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 294.99 W
2026/10/31 14:53:40.134, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 291.38 W
2026/10/31 14:54:10.135, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 298.08 W
2026/10/31 14:54:40.136, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 277.37 W
2026/10/31 14:55:10.137, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 281.44 W
2026/10/31 14:55:40.138, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 291.37 W
2026/10/31 14:56:10.139, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 301.68 W
2026/10/31 14:56:40.140, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 249.93 W
2026/10/31 14:57:10.141, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 285.91 W
2026/10/31 14:57:40.141, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 292.63 W
2026/10/31 14:58:10.142, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 295.33 W
2026/10/31 14:58:40.143, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 255.89 W
2026/10/31 14:59:10.144, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 293.37 W
2026/10/31 14:59:40.145, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 291.75 W
2026/10/31 15:00:10.147, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 304.03 W
2026/10/31 15:00:40.148, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 294.54 W
2026/10/31 15:01:10.149, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 292.07 W
2026/10/31 15:01:40.150, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 288.49 W
2026/10/31 15:02:10.151, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 266.89 W
2026/10/31 15:02:40.152, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 293.66 W
2026/10/31 15:03:10.153, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 292.48 W
2026/10/31 15:03:40.154, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 282.27 W
2026/10/31 15:04:10.155, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 327.26 W
2026/10/31 15:04:40.157, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 287.80 W
2026/10/31 15:05:10.158, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 292.63 W
2026/10/31 15:05:40.159, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 297.05 W
2026/10/31 15:06:10.161, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 248.19 W
2026/10/31 15:06:40.162, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 285.05 W
2026/10/31 15:07:10.163, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 289.45 W
2026/10/31 15:07:40.164, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 306.15 W
2026/10/31 15:08:10.165, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 325.63 W
2026/10/31 15:08:40.166, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 286.79 W
2026/10/31 15:09:10.167, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 291.27 W
2026/10/31 15:09:40.168, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 284.92 W
2026/10/31 15:10:10.170, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 296.93 W
2026/10/31 15:10:40.171, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 288.93 W
2026/10/31 15:11:10.172, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 290.52 W
2026/10/31 15:11:40.173, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 295.38 W
2026/10/31 15:12:10.174, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 293.61 W
2026/10/31 15:12:40.175, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 292.17 W
2026/10/31 15:13:10.177, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 292.55 W
2026/10/31 15:13:40.178, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 322.59 W
2026/10/31 15:14:10.179, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 282.90 W
2026/10/31 15:14:40.180, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 290.94 W
2026/10/31 15:15:10.181, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 294.92 W
2026/10/31 15:15:40.183, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 303.71 W
2026/10/31 15:16:10.184, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 286.82 W
2026/10/31 15:16:40.185, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 290.64 W
2026/10/31 15:17:10.186, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 296.69 W
2026/10/31 15:17:40.188, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 308.29 W
2026/10/31 15:18:10.189, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 285.68 W
2026/10/31 15:18:40.190, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 291.96 W
2026/10/31 15:19:10.191, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 295.82 W
2026/10/31 15:19:40.192, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 303.45 W
2026/10/31 15:20:10.193, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 286.12 W
2026/10/31 15:20:40.194, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 286.67 W
2026/10/31 15:21:10.196, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 311.49 W
2026/10/31 15:21:40.197, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 286.11 W
2026/10/31 15:22:10.198, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 286.55 W
2026/10/31 15:22:40.199, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 295.70 W
2026/10/31 15:23:10.200, NVIDIA A40, 41281 MiB, 46068 MiB, 6 %, 58, 100.77 W
2026/10/31 15:23:40.202, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 64, 286.43 W
2026/10/31 15:24:10.202, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 69, 321.75 W
2026/10/31 15:24:40.204, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 286.17 W
2026/10/31 15:25:10.205, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 290.13 W
2026/10/31 15:25:40.206, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 284.12 W
2026/10/31 15:26:10.207, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 250.09 W
2026/10/31 15:26:40.209, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 289.73 W
2026/10/31 15:27:10.209, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 290.56 W
2026/10/31 15:27:40.211, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 303.21 W
2026/10/31 15:28:10.212, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 324.61 W
2026/10/31 15:28:40.213, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 288.84 W
2026/10/31 15:29:10.214, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 289.64 W
2026/10/31 15:29:40.215, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 301.79 W
2026/10/31 15:30:10.216, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 309.33 W
2026/10/31 15:30:40.218, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 286.72 W
2026/10/31 15:31:10.219, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 290.31 W
2026/10/31 15:31:40.220, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 262.07 W
2026/10/31 15:32:10.221, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 278.54 W
2026/10/31 15:32:40.222, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 288.26 W
2026/10/31 15:33:10.223, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 298.12 W
2026/10/31 15:33:40.224, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 263.77 W
2026/10/31 15:34:10.225, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 285.21 W
2026/10/31 15:34:40.226, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 291.58 W
2026/10/31 15:35:10.227, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 302.58 W
2026/10/31 15:35:40.228, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 297.38 W
2026/10/31 15:36:10.229, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 289.12 W
2026/10/31 15:36:40.230, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 289.53 W
2026/10/31 15:37:10.231, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 330.88 W
2026/10/31 15:37:40.232, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 283.33 W
2026/10/31 15:38:10.234, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 288.94 W
2026/10/31 15:38:40.235, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 74, 302.89 W
2026/10/31 15:39:10.236, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 328.41 W
2026/10/31 15:39:40.237, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 288.05 W
2026/10/31 15:40:10.238, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 292.56 W
2026/10/31 15:40:40.240, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 292.56 W
2026/10/31 15:41:10.241, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 303.87 W
2026/10/31 15:41:40.242, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 286.60 W
2026/10/31 15:42:10.243, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 294.60 W
2026/10/31 15:42:40.244, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 296.46 W
2026/10/31 15:43:10.245, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 277.38 W
2026/10/31 15:43:40.246, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 289.49 W
2026/10/31 15:44:10.247, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 289.79 W
2026/10/31 15:44:40.248, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 299.04 W
2026/10/31 15:45:10.249, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 297.85 W
2026/10/31 15:45:40.251, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 289.66 W
2026/10/31 15:46:10.252, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 286.35 W
2026/10/31 15:46:40.253, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 299.57 W
2026/10/31 15:47:10.253, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 298.53 W
2026/10/31 15:47:40.254, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 288.01 W
2026/10/31 15:48:10.255, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 288.50 W
2026/10/31 15:48:40.256, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 325.96 W
2026/10/31 15:49:10.257, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 295.84 W
2026/10/31 15:49:40.259, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 290.79 W
2026/10/31 15:50:10.260, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 282.38 W
2026/10/31 15:50:40.261, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 293.23 W
2026/10/31 15:51:10.262, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 291.78 W
2026/10/31 15:51:40.263, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 287.50 W
2026/10/31 15:52:10.264, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 286.67 W
2026/10/31 15:52:40.266, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 292.81 W
2026/10/31 15:53:10.267, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 289.67 W
2026/10/31 15:53:40.268, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 286.24 W
2026/10/31 15:54:10.268, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 299.07 W
2026/10/31 15:54:40.271, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 304.39 W
2026/10/31 15:55:10.272, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 290.10 W
2026/10/31 15:55:40.273, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 288.38 W
2026/10/31 15:56:10.275, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 301.46 W
2026/10/31 15:56:40.276, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 285.36 W
2026/10/31 15:57:10.278, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 297.52 W
2026/10/31 15:57:42.723, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 249.40 W
2026/10/31 15:58:12.724, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 287.21 W
2026/10/31 15:58:42.725, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 292.14 W
2026/10/31 15:59:12.727, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 290.63 W
2026/10/31 15:59:42.729, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 297.44 W
2026/10/31 16:00:12.730, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 288.84 W
2026/10/31 16:00:42.731, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 292.21 W
2026/10/31 16:01:12.732, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 281.48 W
2026/10/31 16:01:42.733, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 265.97 W
2026/10/31 16:02:12.734, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 285.45 W
2026/10/31 16:02:42.736, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 287.09 W
2026/10/31 16:03:12.737, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 330.69 W
2026/10/31 16:03:42.738, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 295.04 W
2026/10/31 16:04:12.739, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 292.11 W
2026/10/31 16:04:42.740, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 296.90 W
2026/10/31 16:05:12.741, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 298.37 W
2026/10/31 16:05:42.742, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 289.10 W
2026/10/31 16:06:12.743, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 294.16 W
2026/10/31 16:06:42.744, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 286.81 W
2026/10/31 16:07:12.746, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 303.58 W
2026/10/31 16:07:42.747, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 289.01 W
2026/10/31 16:08:12.748, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 293.40 W
2026/10/31 16:08:42.749, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 295.90 W
2026/10/31 16:09:12.750, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 275.90 W
2026/10/31 16:09:42.751, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 289.98 W
2026/10/31 16:10:12.754, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 286.98 W
2026/10/31 16:10:42.755, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 307.61 W
2026/10/31 16:11:12.756, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 253.41 W
2026/10/31 16:11:42.757, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 285.73 W
2026/10/31 16:12:12.758, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 292.92 W
2026/10/31 16:12:42.761, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 259.25 W
2026/10/31 16:13:12.762, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 289.20 W
2026/10/31 16:13:42.763, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 290.88 W
2026/10/31 16:14:12.764, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 299.42 W
2026/10/31 16:14:42.765, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 276.56 W
2026/10/31 16:15:12.766, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 285.55 W
2026/10/31 16:15:42.767, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 293.23 W
2026/10/31 16:16:12.768, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 289.97 W
2026/10/31 16:16:42.769, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 266.79 W
2026/10/31 16:17:12.770, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 290.37 W
2026/10/31 16:17:42.771, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 286.55 W
2026/10/31 16:18:12.772, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 73, 303.85 W
2026/10/31 16:18:42.773, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 306.64 W
2026/10/31 16:19:12.774, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 72, 290.37 W
2026/10/31 16:19:42.775, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 288.94 W
2026/10/31 16:20:12.776, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 321.70 W
2026/10/31 16:20:42.778, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 290.23 W
2026/10/31 16:21:12.779, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 70, 291.79 W
2026/10/31 16:21:42.780, NVIDIA A40, 41281 MiB, 46068 MiB, 100 %, 71, 284.55 W
2026/10/31 16:22:12.781, NVIDIA A40, 0 MiB, 46068 MiB, 0 %, 55, 98.26 W
2026/10/31 16:22:42.782, NVIDIA A40, 0 MiB, 46068 MiB, 0 %, 40, 34.68 W
2026/10/31 16:23:12.783, NVIDIA A40, 0 MiB, 46068 MiB, 0 %, 36, 33.11 W
```

### Pod の記録 lab_pod.json

```json
{
  "id": "e2bkjq722a33a1",
  "kind": "train",
  "gpu": "NVIDIA A40",
  "log": "Log17",
  "costPerHr": 0.59,
  "created_epoch": 1793451743,
  "created_at": "2026-10-31 22:02:23",
  "config": "pi05_mecharm_trim_corr_lora",
  "exp": "trim_corr_v3",
  "steps": 1500,
  "limit_sec": 18000,
  "limit_at": "2026-11-01 03:02:23",
  "watchdog_epoch": 1793473343,
  "watchdog": "WATCHDOG run=1 pod=1 key=1 ctl=1",
  "train_started_epoch": 1793452812,
  "train_started_at": "2026-10-31 22:20:12",
  "terminated_epoch": 1793463833,
  "terminated_at": "2026-11-01 01:23:53",
  "rented_sec": 12090,
  "gone_confirmed": true
}
```

### Pod 側のファイルの一覧 pod_files_1499.tsv

```text
_CHECKPOINT_METADATA	426
assets/local/mecharm_redblock_box_teach_v1_trim2_corr_v3/norm_stats.json	1766
params/_METADATA	33052
params/_sharding	17773
params/array_metadatas/process_0	12891
params/d/9d4847e996eeb8be5e9981a6eaa6b1e6	2758
params/manifest.ocdbt	118
params/ocdbt.process_0/d/095005085fe95ac3375f00d971e7b5c0	945626146
params/ocdbt.process_0/d/242bea07244baeb0aac79a2bcf870796	356286183
params/ocdbt.process_0/d/258f4bf46e284809253bcf473c1016b3	76572634
params/ocdbt.process_0/d/2f20f8c2cef330537e8140e410c85940	945630439
params/ocdbt.process_0/d/3bec810e5780256477a2a7e5aa5b5c50	1184
params/ocdbt.process_0/d/4a0feb7dfaff89e7930cb1ea485dda84	1255
params/ocdbt.process_0/d/4d194a248c16a818460277a208db05e4	1328
params/ocdbt.process_0/d/4e1d874b781033dcb5024f6cfbf426eb	997
params/ocdbt.process_0/d/5455f2cebf044101c53f48a4349763f7	828933359
params/ocdbt.process_0/d/5a3026d6979bb1109610e966a2523173	1286
params/ocdbt.process_0/d/5aba5557f1ad889b4cdba99ac49c525e	1376
params/ocdbt.process_0/d/5dd4840d88f7079a571939b782fcf0dd	497034197
params/ocdbt.process_0/d/61d13462c485da9952c11b25b201aef0	444
params/ocdbt.process_0/d/670009b581b136352a48b5e376919a86	979
params/ocdbt.process_0/d/72d0095aa0d8acd67e09fad7fa4d9093	235536893
params/ocdbt.process_0/d/72dc2420eb9f6b4d76c5d70f5cdf864b	126084645
params/ocdbt.process_0/d/73a2842032575f60f4d66731114d39c1	85582455
params/ocdbt.process_0/d/74bc08e3b9a0ef000ac1ba2137524bd6	5721
params/ocdbt.process_0/d/7ca4fd82494c617699f46c6db1bf9fde	675
params/ocdbt.process_0/d/8a785a2b79f52fac16e9b84ba41512cd	902
params/ocdbt.process_0/d/8efc2e798af8f8929a4be6b8c7a337ab	213
params/ocdbt.process_0/d/a0fe838c5ac791f4ef84008f589da960	945879476
params/ocdbt.process_0/d/a2f177b064e4c3fc835765f7c720cb59	369616350
params/ocdbt.process_0/d/aaf9a3d50c7113bf4f13e0e7501ff4be	341005662
params/ocdbt.process_0/d/ae48897b0b14f6b776f7bd3abd6de2c0	84776637
params/ocdbt.process_0/d/b6503bcaa255910bd0635c462f9ffd3b	497187475
params/ocdbt.process_0/d/c28105c73563fd8038458ec5c9841a46	1083
params/ocdbt.process_0/d/c7e92762410de6e8b5bbb641f3cf0d25	538
params/ocdbt.process_0/d/d649fbed2bf769f632a399860548bf40	1131
params/ocdbt.process_0/manifest.ocdbt	722
```

### Pod 側のチェックポイントの一覧 pod_checkpoints.tsv

```text
1000/_CHECKPOINT_METADATA	426
1000/assets/local/mecharm_redblock_box_teach_v1_trim2_corr_v3/norm_stats.json	1766
1000/params/_METADATA	33052
1000/params/_sharding	17773
1000/params/array_metadatas/process_0	12891
1000/params/d/b5cdde8c53a53caca99e8f43ab9943eb	2659
1000/params/manifest.ocdbt	118
1000/params/ocdbt.process_0/d/0b445e48af7694ad7b69b6f352e34e94	740002891
1000/params/ocdbt.process_0/d/10422438c4041a170da4a1fe7d0c3678	104044839
1000/params/ocdbt.process_0/d/1d98a855a1b80f34847bfe331e11f31c	945879366
1000/params/ocdbt.process_0/d/2978ac06007b1ec6b2e61ce57901aff4	497037443
1000/params/ocdbt.process_0/d/5a018196196d7b652ce99c7f54dc8e99	98497134
1000/params/ocdbt.process_0/d/6840400babed9346ea836c48e24f1b6d	1376
1000/params/ocdbt.process_0/d/6bb8a7b415dde67bfa213fc45c4cdfc4	213
1000/params/ocdbt.process_0/d/6cd1a235d8566404e0ba8779ed7a8c6f	695
1000/params/ocdbt.process_0/d/70f007614ff6aaad22eb83d2f7347ffa	828933237
1000/params/ocdbt.process_0/d/774ebef8bc7582f8000b8aaaa82d397c	945631165
1000/params/ocdbt.process_0/d/8070d223b237ab56cb9a1dee9770ceea	1315
1000/params/ocdbt.process_0/d/980a40db227950e77e7dde14c6662594	874
1000/params/ocdbt.process_0/d/a2135d5013e022d1d4f624d034f1d476	497188196
1000/params/ocdbt.process_0/d/a753daa93a5d2a49c0cda71924bbd186	945626036
1000/params/ocdbt.process_0/d/c170e8fe7575822b8ddfa01bc2395c72	1255
1000/params/ocdbt.process_0/d/cde689e959e5cc766a1ee0b07b79a3c8	562442708
1000/params/ocdbt.process_0/d/de55f609dc821c7bf7369e8964800158	170476862
1000/params/ocdbt.process_0/manifest.ocdbt	140
1000/train_state/_METADATA	60265
1000/train_state/_sharding	27701
1000/train_state/array_metadatas/process_0	19941
1000/train_state/d/72563725011ebd681babde16738acc52	2874
1000/train_state/manifest.ocdbt	118
1000/train_state/ocdbt.process_0/d/00c1767e1cceefcb7da80ec0fd76a094	608
1000/train_state/ocdbt.process_0/d/0187071fa43e7d965998184c3f1ba310	455977791
1000/train_state/ocdbt.process_0/d/08d612087191af84c19111013f8db3e0	1149
1000/train_state/ocdbt.process_0/d/0e0c970cc239c600d5a9d485f9f1f6ff	131289488
1000/train_state/ocdbt.process_0/d/0e677472e5723fe65cb058993c47ce3a	440478448
1000/train_state/ocdbt.process_0/d/110c3eda8da4c9ae2f02b5a789e5a514	641
1000/train_state/ocdbt.process_0/d/1724b04b42aca4cd934bfaf748874f7d	1149
1000/train_state/ocdbt.process_0/d/1b244f4110475cd0044b0bc175f0ecc1	1709
1000/train_state/ocdbt.process_0/d/1daa5619c06d5cd2a470590e298234f0	756
1000/train_state/ocdbt.process_0/d/1e38cb885ceb546cad384b8dcae7b693	267223496
1000/train_state/ocdbt.process_0/d/2763b43718b0c897198c57c5f69bea35	319
1000/train_state/ocdbt.process_0/d/2d325b2acfb3af3a607f8190adb1c9a1	525248523
1000/train_state/ocdbt.process_0/d/36953c61f5bfd75b9138d8ce3fd4b4ab	845
1000/train_state/ocdbt.process_0/d/36cfe09c975d2c07d78dbf64deebdd37	337
1000/train_state/ocdbt.process_0/d/3d598865abd6af7077be248d533142da	450497034
1000/train_state/ocdbt.process_0/d/46c365046cf2929db96423dcca3750c2	197714037
1000/train_state/ocdbt.process_0/d/47137844ee72aeed83a036c9100eda27	1150
1000/train_state/ocdbt.process_0/d/49ca2331af882034bdc6495021bb52aa	566
1000/train_state/ocdbt.process_0/d/4a6b8b2c67e9ce51cdef098fb848b929	1145
1000/train_state/ocdbt.process_0/d/4d9368e8f6a6ccafa8882d9b620598f2	83592136
1000/train_state/ocdbt.process_0/d/4e9d292a58ff304e8f866de5541f18dd	476
1000/train_state/ocdbt.process_0/d/51554c2564f4fc0fc7eeacbd662c6821	435425741
1000/train_state/ocdbt.process_0/d/56280aa28515c24ab561e297385d97ba	664
1000/train_state/ocdbt.process_0/d/5fe1fbccb4a87a81b62250dbf4a7ea0c	1016
1000/train_state/ocdbt.process_0/d/66cba5f0aa8f7f070f4d0fe14b34c995	1112
1000/train_state/ocdbt.process_0/d/6b842c263b2ddb28ad34b5ff530e7eb7	934
1000/train_state/ocdbt.process_0/d/6e3be54f03155747f289d2dff45e8b2a	126064
1000/train_state/ocdbt.process_0/d/78c76855eb0acc9e8ac70606daff8778	885
1000/train_state/ocdbt.process_0/d/7a38e89e831ea9effa015adf53cadf36	1132
1000/train_state/ocdbt.process_0/d/7d2291086bdbda2b3940a120636781e2	1149
1000/train_state/ocdbt.process_0/d/826c9bb5b898c20985740942266e2477	1150
1000/train_state/ocdbt.process_0/d/894931f3891e2a1dc1baef6b16a4dac8	1149
1000/train_state/ocdbt.process_0/d/8eabea3075a904526a4a7a4dd2314d26	744
1000/train_state/ocdbt.process_0/d/8eb341a2dde358ae3ab25ca56368aac2	1160
1000/train_state/ocdbt.process_0/d/8f0a321f9b338da7a37e045f90bffd1d	133946523
1000/train_state/ocdbt.process_0/d/9274d9ffd07fe5e664078bb4fbca3741	346
1000/train_state/ocdbt.process_0/d/aaf5db70d87c73a892305c699d35d3d6	171
1000/train_state/ocdbt.process_0/d/adad8e410c41be7ce599be431e2ad7b0	1876
1000/train_state/ocdbt.process_0/d/b12db7ec9da082d9d60de82bdf7e67d0	1150
1000/train_state/ocdbt.process_0/d/b421e703905fd68c2e6df6a95598409a	557
1000/train_state/ocdbt.process_0/d/bc48b7e76afac245b5703aef45a907f4	1143
1000/train_state/ocdbt.process_0/d/cf9ac808783446d16aad4478046eb0cb	1145
1000/train_state/ocdbt.process_0/d/d958b474a923f0d93b3906d9e5fc08a2	1134
1000/train_state/ocdbt.process_0/d/e04bcbfd5aab4a79fd98012cff7612e3	60775918
1000/train_state/ocdbt.process_0/d/e56a6e587c2c656a9d047b21b668cfd3	1147
1000/train_state/ocdbt.process_0/manifest.ocdbt	707
1499/_CHECKPOINT_METADATA	426
1499/assets/local/mecharm_redblock_box_teach_v1_trim2_corr_v3/norm_stats.json	1766
1499/params/_METADATA	33052
1499/params/_sharding	17773
1499/params/array_metadatas/process_0	12891
1499/params/d/9d4847e996eeb8be5e9981a6eaa6b1e6	2758
1499/params/manifest.ocdbt	118
1499/params/ocdbt.process_0/d/095005085fe95ac3375f00d971e7b5c0	945626146
1499/params/ocdbt.process_0/d/242bea07244baeb0aac79a2bcf870796	356286183
1499/params/ocdbt.process_0/d/258f4bf46e284809253bcf473c1016b3	76572634
1499/params/ocdbt.process_0/d/2f20f8c2cef330537e8140e410c85940	945630439
1499/params/ocdbt.process_0/d/3bec810e5780256477a2a7e5aa5b5c50	1184
1499/params/ocdbt.process_0/d/4a0feb7dfaff89e7930cb1ea485dda84	1255
1499/params/ocdbt.process_0/d/4d194a248c16a818460277a208db05e4	1328
1499/params/ocdbt.process_0/d/4e1d874b781033dcb5024f6cfbf426eb	997
1499/params/ocdbt.process_0/d/5455f2cebf044101c53f48a4349763f7	828933359
1499/params/ocdbt.process_0/d/5a3026d6979bb1109610e966a2523173	1286
1499/params/ocdbt.process_0/d/5aba5557f1ad889b4cdba99ac49c525e	1376
1499/params/ocdbt.process_0/d/5dd4840d88f7079a571939b782fcf0dd	497034197
1499/params/ocdbt.process_0/d/61d13462c485da9952c11b25b201aef0	444
1499/params/ocdbt.process_0/d/670009b581b136352a48b5e376919a86	979
1499/params/ocdbt.process_0/d/72d0095aa0d8acd67e09fad7fa4d9093	235536893
1499/params/ocdbt.process_0/d/72dc2420eb9f6b4d76c5d70f5cdf864b	126084645
1499/params/ocdbt.process_0/d/73a2842032575f60f4d66731114d39c1	85582455
1499/params/ocdbt.process_0/d/74bc08e3b9a0ef000ac1ba2137524bd6	5721
1499/params/ocdbt.process_0/d/7ca4fd82494c617699f46c6db1bf9fde	675
1499/params/ocdbt.process_0/d/8a785a2b79f52fac16e9b84ba41512cd	902
1499/params/ocdbt.process_0/d/8efc2e798af8f8929a4be6b8c7a337ab	213
1499/params/ocdbt.process_0/d/a0fe838c5ac791f4ef84008f589da960	945879476
1499/params/ocdbt.process_0/d/a2f177b064e4c3fc835765f7c720cb59	369616350
1499/params/ocdbt.process_0/d/aaf9a3d50c7113bf4f13e0e7501ff4be	341005662
1499/params/ocdbt.process_0/d/ae48897b0b14f6b776f7bd3abd6de2c0	84776637
1499/params/ocdbt.process_0/d/b6503bcaa255910bd0635c462f9ffd3b	497187475
1499/params/ocdbt.process_0/d/c28105c73563fd8038458ec5c9841a46	1083
1499/params/ocdbt.process_0/d/c7e92762410de6e8b5bbb641f3cf0d25	538
1499/params/ocdbt.process_0/d/d649fbed2bf769f632a399860548bf40	1131
1499/params/ocdbt.process_0/manifest.ocdbt	722
1499/train_state/_METADATA	60265
1499/train_state/_sharding	27701
1499/train_state/array_metadatas/process_0	19941
1499/train_state/d/68aecd1cd88e83241fc50e5f5dc5fc51	2917
1499/train_state/manifest.ocdbt	118
1499/train_state/ocdbt.process_0/d/1ca0b8471d9a70e52b75dfce7a56925a	439650503
1499/train_state/ocdbt.process_0/d/1e8f8c000114a03d94c672e57f255da3	260574722
1499/train_state/ocdbt.process_0/d/21f3c1b66bd1981da2e3ce7f03b78185	448420403
1499/train_state/ocdbt.process_0/d/2a2c8dc70c150c33a56971927e3471f8	455910901
1499/train_state/ocdbt.process_0/d/2e21c385bf8f54ee7729de6e54a67e26	129755435
1499/train_state/ocdbt.process_0/d/2e58c1fa02365fa9f22c350f760f654b	1156
1499/train_state/ocdbt.process_0/d/3c23bf975810004897a9fb13a509dfce	9537117
1499/train_state/ocdbt.process_0/d/50c75ed434cc107f4599a0f0e61001bc	46640779
1499/train_state/ocdbt.process_0/d/65916b560fad0bd228704f7ce3a6261d	171
1499/train_state/ocdbt.process_0/d/70bd5493b3b2759663d9578743573293	116582674
1499/train_state/ocdbt.process_0/d/84739f4fd24d65a77a9b5dfb0820a401	133394796
1499/train_state/ocdbt.process_0/d/87a428004884ebc6ba1b9e88b7717b95	528277704
1499/train_state/ocdbt.process_0/d/940b9be9224cda3567518036401533a8	434221028
1499/train_state/ocdbt.process_0/d/a1c56c9b29217ebede6cfb67fecadd85	168853917
1499/train_state/ocdbt.process_0/d/b2e9ac4db69ea96c5baf4cd3685b83fa	121038
1499/train_state/ocdbt.process_0/manifest.ocdbt	759
```


## 学習中に出した依頼50（Pod のログを読むだけ）は、回さずに止めた

学習が始まって30分たっても `step -` のままだったので、Claude Code に Pod の中のログを読むだけの依頼を出しました。ただ、そのとき依頼箱では Unity の録画（最長12時間）が動いていて、順番が回ってきません。朝には学習が終わってログを持ち帰れるので、この依頼は確認待ちに移して、回していません。

### 依頼文 20261031_50_学習中のPodのログを読むだけ.md

```markdown
---
作業フォルダ: /Users/shimazueiichi/r2r2r-scripts
上限時間: 20
---
# 依頼：いま学習中の Pod の様子を読むだけ（何も変えない）（2026-10-31 22:51）

`./lab_train.sh --log Log17` が 22:20 に学習を始めたが、30分たっても見守りの行が `step -/1500  loss -` のまま。前回（Log10）の学習では、始めてから約2.5分で `Step 0:` が出ていた。何で待っているのかを知りたい。

## やってほしいこと（読むだけ）

- Pod の記録 `/Volumes/KIOXIA/r2r2r-data/lab/Log17/train/lab_pod.json` と lab_lib.sh の ssh の決まりで Pod に入り、次を出す
  - `tail -c 6000 /workspace/logs/train_trim_corr_v3.log | tr '\r' '\n' | tail -60`
  - `/workspace/logs/` の中身（名前・大きさ・最終更新時刻）と、train_run の記録
  - `nvidia-smi`（メモリ・使用率）と、`tail -5 /workspace/logs/gpu_train.csv`
  - `ps -eo pid,etime,cmd | grep -E 'train|uv' | grep -v grep`
  - `df -h /workspace /root`
  - `ls /root/.cache/openpi/openpi-assets/checkpoints/ 2>/dev/null` と、その大きさ
- 見立て（いま何をしているか・このまま待てば学習が始まりそうか・止まっているか）を書く

## してはいけないこと

- 学習・見張り・lab_train.sh を止めない。Pod を消さない。Pod の中のファイルを変えない
- ssh は時間の上限（ConnectTimeout・timeout 60 など）を付けて使う。学習のログ以外の鍵・IP を報告に出さない（IP は <POD_IP> に置き換える）
- git の操作はしない
```


## この回で変えたコード（コミット 86ebc16〜0ba321e の時点の全文）

コミットの一覧です。

```text
0ba321e 10-31 22:00 学習を Mac の1行で回す lab_train.sh を足す. Pod を作り, lab_start.sh と同じ準備と pod_prep_trim_corr.sh のあと学習を setsid nohup で回して数分おきに進みを出し, 終わったら最後のチェックポイントを Hugging Face の非公開リポジトリへ上げて KIOXIA へ取り, Pod 側の一覧と名前・バイト数を比べ, ログを持ち帰って Pod を消し, 費用と通知を出す. 落ちた・止まった・上限・Ctrl-C でもログを持ち帰ってから消し, Pod 側にも上限で自分を消す見張りを置く. lab_start.sh 3b〜3f のコマンドは lab_lib.sh に移して共用する (依頼 49)
c7ff7d9 10-31 21:00 補正の成功5本の着いたあとの止まりを, model 0・補正 1・爪の前後は trim2 と同じ 2 コマ残して詰め corr_v3 とし, trim2 と合わせたデータを作る. 続きからの学習を corr_v3 に向け, 学習率を最大 2.5e-5・立ち上がり 100・1,500 で下げきるに弱め, 正規化の値は計算せず 3999 の trim2 の値を置く (依頼 48)
48d51b1 10-31 20:22 lab_start.sh のつなぎ直しで, モデルの有無を 3c が置く中身で見て, 取り終えた印は別に出す. サーバーが 8000 番で待っていなければ 30 秒待ってから起動し直し, 前のプロセスは別の ssh で止める. 中身を main に入れて, 動いている途中の書き換えで壊れないようにする (依頼 47)
1b47477 10-31 19:46 補正の成功5本の角度を, 送信の抜けの頭から速度20の速さで進んで止まる形で埋め直して corr_v2 とし, trim2 と合わせたデータと Pod の準備手順を作る. 記録では本体が読んだ角度と send_angles の時刻・目標も残す (依頼 46)
e29754e 10-31 19:04 補正つきの成功5本から corr_v1 を作り, trim2 と合わせたデータセットと学習設定 pi05_mecharm_trim_corr_lora を足す. exFAT の ._ を画像として数えないようにし, 作り直しの rmtree が止まらないようにする (依頼 45)
86ebc16 10-31 18:48 lab_start.sh で同じ Log の Pod が動いていれば新しく作らずにつなぎ直し, 済んでいる準備を飛ばす. 止まっている Pod は消してから作り, 古い記録は時刻付きで残す. 同じ Log の同時起動を止める (依頼 44)
```

### lab_lib.sh

```bash
# lab_lib.sh — lab_start.sh / lab_stop.sh / lab_train.sh が読む共通の関数 (単体では動かさない)
#
# 鍵の扱い:
#   - Runpod の API キーは curl のヘッダーを <(printf ...) で渡す (printf は bash の組み込みなので
#     ps にもシェルの履歴にも出ない)
#   - Hugging Face の鍵は ssh の標準入力で Pod の ~/.cache/huggingface/token に書く
#   - Pod の IP とポートは画面・ログに出さない. Pod に入る ssh の出力は lab_mask で <POD_IP>・<SSH_PORT> に置き換える

LAB_ROOT=/Volumes/KIOXIA/r2r2r-data/lab
LAB_CURRENT="$LAB_ROOT/.lab_current"      # 今使っている Log 名 (lab_stop.sh が --log なしで読む)
RUNPOD_KEY_FILE=/Volumes/KIOXIA/keys/runpod_api_key.txt
HF_TOKEN_FILE=/Volumes/KIOXIA/keys/hf_token.txt
POD_SSH_KEY="$HOME/.ssh/id_ed25519"
RUNPOD_API=https://rest.runpod.io/v1
TUNNEL_PORT=8000
YEN_PER_USD=158
RUNPOD_HTTP=""             # runpod_api が最後に受けた HTTP の番号 ($(...) の中で呼ぶと親には残らない)

lab_need_key() {            # 鍵のファイルがない・空なら, どこに書けばよいかを出して止まる
    local f="$1" what="$2"
    if [ ! -s "$f" ]; then
        echo "[ERROR] $what がありません (または空です)." >&2
        echo "        次のファイルに鍵だけを1行で書いてください: $f" >&2
        exit 1
    fi
}

runpod_api() {              # runpod_api METHOD PATH [JSON]  → 本文を出す. 失敗の HTTP は戻り値 1
    local method="$1" path="$2" data="${3:-}" out code
    out=$(mktemp)
    if [ -n "$data" ]; then
        code=$(curl -sS -o "$out" -w '%{http_code}' -X "$method" \
            -H @<(printf 'Authorization: Bearer %s\n' "$(tr -d '\r\n' < "$RUNPOD_KEY_FILE")") \
            -H 'Content-Type: application/json' --data "$data" "$RUNPOD_API$path") || code=000
    else
        code=$(curl -sS -o "$out" -w '%{http_code}' -X "$method" \
            -H @<(printf 'Authorization: Bearer %s\n' "$(tr -d '\r\n' < "$RUNPOD_KEY_FILE")") \
            "$RUNPOD_API$path") || code=000
    fi
    cat "$out"
    rm -f "$out"
    RUNPOD_HTTP=$code
    case "$code" in 2??) return 0 ;; *) return 1 ;; esac
}

lab_pod_addr() {            # POD_ID から POD_IP / SSH_PORT を API で受け取る (画面には出さない)
    local j
    j=$(runpod_api GET "/pods/$POD_ID") || return 1
    POD_IP=$(jq -r '.publicIp // ""' <<<"$j")
    SSH_PORT=$(jq -r '.portMappings["22"] // ""' <<<"$j")
    POD_STATUS=$(jq -r '.desiredStatus // ""' <<<"$j")
    [ -n "$POD_IP" ] && [ -n "$SSH_PORT" ]
}

lab_mask() {                # Pod の IP とポートを置き換えて流す
    if [ -n "${POD_IP:-}" ] && [ -n "${SSH_PORT:-}" ]; then
        sed -l -e "s/${POD_IP//./\\.}/<POD_IP>/g" \
               -e "s/\([^0-9]\)${SSH_PORT}\([^0-9]\)/\1<SSH_PORT>\2/g" \
               -e "s/\([^0-9]\)${SSH_PORT}\$/\1<SSH_PORT>/"
    else
        cat
    fi
}

# known_hosts は使わない (Pod ごとに IP が変わる). LogLevel=ERROR で「Permanently added <IP>」も出さない
lab_ssh_opts() {
    SSH_OPTS=(-i "$POD_SSH_KEY" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
              -o LogLevel=ERROR -o ConnectTimeout=10 -o ServerAliveInterval=30)
}

pod_ssh() {                 # pod_ssh 'コマンド'  (標準入力はそのまま Pod へ)
    { ssh "${SSH_OPTS[@]}" -p "$SSH_PORT" "root@$POD_IP" "$@" 2>&1; } | lab_mask
}

pod_scp() {                 # pod_scp 送る元... 送り先 (送り先の「:」の前に root@IP を付ける)
    { scp "${SSH_OPTS[@]}" -P "$SSH_PORT" "$@" 2>&1; } | lab_mask
}

lab_tunnel_pids() {         # このスクリプトが張った 8000 番のトンネル (ssh -N -L 8000:localhost:8000)
    pgrep -f "ssh -N -L ${TUNNEL_PORT}:localhost:${TUNNEL_PORT}" || true
}

# ---- lab_start.sh のつなぎ直し (依頼 44) ----

lab_valid_pods() {          # lab_valid_pods JSON → GET /pods の答えが「id を持つものの配列」なら 0 (読めない答えを「ない」にしない)
    jq -e 'type == "array" and all(.[]; type == "object" and (.id | type) == "string")' <<<"$1" >/dev/null 2>&1
}

lab_pod_kind() {            # lab_pod_kind ID → LAB_POD_KIND=running|stopped|gone と LAB_POD_STATUS (API の desiredStatus)
    # running = RUNNING. stopped = EXITED (止まっていてもディスクの料金がかかる). gone = TERMINATED,
    # または 404 で一覧にもない. それ以外 (つながらない・404 以外の失敗・答えが読めない・id が違う・知らない状態) は
    # 戻り値 1 (二重に借りないよう, 呼ぶ側で止まる)
    local id="$1" out j list rc
    LAB_POD_KIND=""; LAB_POD_STATUS=""
    out=$(mktemp)
    runpod_api GET "/pods/$id" > "$out"     # $(...) に入れない (RUNPOD_HTTP をこのシェルに残す)
    j=$(cat "$out"); rm -f "$out"
    case "$RUNPOD_HTTP" in
        2??) ;;
        404)    # 一覧にもないことを確かめてから「ない」とする
            list=$(runpod_api GET /pods) || return 1
            lab_valid_pods "$list" || return 1
            jq -e --arg id "$id" 'any(.[]; .id == $id and .desiredStatus != "TERMINATED")' <<<"$list" >/dev/null 2>&1
            rc=$?
            [ $rc = 1 ] && { LAB_POD_KIND=gone; return 0; }
            return 1 ;;
        *) return 1 ;;
    esac
    jq -e --arg id "$id" 'type == "object" and .id == $id' <<<"$j" >/dev/null 2>&1 || return 1
    LAB_POD_STATUS=$(jq -r '.desiredStatus // ""' <<<"$j")
    case "$LAB_POD_STATUS" in
        RUNNING) LAB_POD_KIND=running ;;
        EXITED) LAB_POD_KIND=stopped ;;
        TERMINATED) LAB_POD_KIND=gone ;;
        *) return 1 ;;
    esac
}

lab_probe_cmd() {           # lab_probe_cmd OPENPI_COMMIT モデルのフォルダ assets の norm_stats.json (フォルダからの相対) → Pod の中で流すコマンド (結果は PROBE の1行)
    # serve  = serve_policy.py のプロセスがある ([s] は, このコマンドを流す bash -c 自身に当たらないため)
    # listen = 8000 番 (16進 1F40) が LISTEN (0A). ss がないこともあるので /proc/net/tcp を見る
    # ckpt   = 3c の hf download が置く中身がある (依頼 47): _CHECKPOINT_METADATA・params/ の _METADATA と
    #          manifest.ocdbt・ocdbt.process_0/manifest.ocdbt・3f が写す norm_stats.json. 取りかけ
    #          (.cache/huggingface/download の *.incomplete) が残っている・探せないときは 0
    # mark   = hf download が最後まで済んだ印 (.lab_download_ok. 依頼 44 からの 3c が付ける. それより前に作った Pod にはない)
    # openpi = /workspace/openpi の HEAD が OPENPI_COMMIT
    # venv   = .venv の python と uv の env がある
    cat <<EOF
s=0; pgrep -f '[s]cripts/serve_policy\.py' >/dev/null && s=1
l=0; cat /proc/net/tcp /proc/net/tcp6 2>/dev/null | awk '\$4 == "0A" && \$2 ~ /:1F40\$/ {f=1} END {exit !f}' && l=1
c=0; [ -f $2/_CHECKPOINT_METADATA ] && [ -f $2/params/_METADATA ] && [ -f $2/params/manifest.ocdbt ] \\
  && [ -f $2/params/ocdbt.process_0/manifest.ocdbt ] && [ -f $2/$3 ] \\
  && { [ ! -d $2/.cache/huggingface ] || { r=\$(find $2/.cache/huggingface -name '*.incomplete' -print -quit 2>/dev/null) && [ -z "\$r" ]; }; } && c=1
m=0; [ -f $2/.lab_download_ok ] && m=1
o=0; h=\$(git -C /workspace/openpi rev-parse HEAD 2>/dev/null) && case "\$h" in $1*) o=1 ;; esac
v=0; [ -x /workspace/openpi/.venv/bin/python ] && [ -f \$HOME/.local/bin/env ] && v=1
echo "PROBE serve=\$s listen=\$l ckpt=\$c mark=\$m openpi=\$o venv=\$v"
EOF
}

lab_pod_probe() {           # lab_pod_probe OPENPI_COMMIT モデルのフォルダ norm_stats.json → PROBE_SERVE / PROBE_LISTEN / PROBE_CKPT / PROBE_MARK / PROBE_OPENPI / PROBE_VENV (1 か 0)
    local out line k
    out=$(pod_ssh "$(lab_probe_cmd "$1" "$2" "$3")") || return 1
    line=$(grep -E '^PROBE serve=[01] listen=[01] ckpt=[01] mark=[01] openpi=[01] venv=[01]$' <<<"$out" | tail -1)
    [ -n "$line" ] || return 1
    for k in serve listen ckpt mark openpi venv; do
        printf -v "PROBE_$(tr '[:lower:]' '[:upper:]' <<<"$k")" '%s' "$(sed -E "s/.* $k=([01]).*/\1/" <<<"$line")"
    done
}

lab_serve_stop_cmd() {      # Pod の中で serve_policy.py を止めるコマンド (30 秒まで終わるのを待ち, 残れば -9)
    # 起動のコマンド (scripts/serve_policy.py をそのまま含む) とは別の ssh で流す. 同じ bash -c に入れると
    # pkill がその bash -c 自身に当たる (依頼 47 の codex R1). このコマンドには [s] の形でしか書かない
    cat <<'EOF'
tmux kill-session -t serve 2>/dev/null; pkill -f '[s]cripts/serve_policy\.py'
for i in $(seq 1 30); do pgrep -f '[s]cripts/serve_policy\.py' >/dev/null || break; sleep 1; done
pkill -9 -f '[s]cripts/serve_policy\.py'; sleep 1; ! pgrep -f '[s]cripts/serve_policy\.py' >/dev/null
EOF
}

lab_archive_state() {       # lab_archive_state FILE → 消さずに <名前>_<時刻>.json に変えて残す. 新しい名前は LAB_ARCHIVED
    local f="$1" dest
    dest="${f%.json}_$(date +%Y%m%d_%H%M%S).json"
    [ -e "$dest" ] && dest="${f%.json}_$(date +%Y%m%d_%H%M%S)_$$.json"
    mv "$f" "$dest" && LAB_ARCHIVED="$dest"
}

# ---- Pod の準備で流すコマンド (lab_start.sh 3b〜3f と lab_train.sh が同じものを流す. 依頼 49 で lab_start.sh から移した) ----
LAB_OPENPI_COMMIT=215abfb
LAB_TEMPLATE_ID=runpod-torch-v280
LAB_IMAGE=runpod/pytorch:1.0.2-cu1281-torch280-ubuntu2404

lab_cmd_hf_install() { echo "pip install -q -U --break-system-packages huggingface_hub"; }

lab_send_hf_token() {       # Hugging Face の鍵を ssh の標準入力で渡す (コマンドの引数・履歴に残らない). hf はこのファイルを読む
    tr -d '\r\n' < "$HF_TOKEN_FILE" | pod_ssh 'umask 077; mkdir -p ~/.cache/huggingface; cat > ~/.cache/huggingface/token'
}

lab_cmd_ckpt() {            # lab_cmd_ckpt リポジトリ 置く場所 → hf download (最後まで済んだら .lab_download_ok を付ける)
    echo "rm -f $2/.lab_download_ok && hf download $1 --local-dir $2 && touch $2/.lab_download_ok && du -sh $2"
}

lab_cmd_openpi() {          # lab_cmd_openpi コミット
    echo "cd /workspace && { [ -d openpi/.git ] || git clone -q --recurse-submodules https://github.com/Physical-Intelligence/openpi.git; } && cd openpi && git checkout -q $1 && git log --oneline -1"
}

lab_cmd_uv_sync() {
    echo "curl -LsSf https://astral.sh/uv/install.sh | sh >/dev/null && source \$HOME/.local/bin/env && cd /workspace/openpi && GIT_LFS_SKIP_SMUDGE=1 uv sync"
}

lab_cmd_addon() {           # 3f. 何度流しても同じ結果 (install_addon.py・add_trim_config.py とも二重に入れない)
    echo "cd /workspace/openpi && python3 /workspace/r2r2r/pi05/openpi_addon/install_addon.py /workspace/openpi && python3 /workspace/r2r2r/add_trim_config.py /workspace/openpi && mkdir -p assets/pi05_mecharm_trim_lora/local && cp -r /workspace/ckpt/3999/assets/local/mecharm_redblock_box_teach_v1_trim2 assets/pi05_mecharm_trim_lora/local/"
}

lab_cost_line() {           # lab_cost_line 秒 1時間のドル → 「借りていた時間 × 料金 = ドル (円)」の1行
    awk -v s="$1" -v c="$2" -v y="$YEN_PER_USD" 'BEGIN {
        h = s / 3600; usd = h * c
        printf "借りていた時間 %d 分 %d 秒 (%.2f 時間) × 1時間 %.2f ドル = 約 %.2f ドル (約 %d 円. 1ドル=%d円)\n",
               int(s / 60), s % 60, h, c, usd, int(usd * y + 0.5), y }'
}

# ---- lab_train.sh (依頼 49) が Pod の中で流すコマンド. テストでこの Mac の bash でも流すので, GNU と BSD の両方で動く書き方にする ----
# pgrep / pkill -f は, そのコマンドを流している bash -c 自身の引数にも当たる (依頼 47 の codex R1).
# 裏で回すものは「bash <パス>」「nvidia-smi --query-gpu=timestamp」で始まる形で起動し, ^ を付けた形で探す
# (bash -c の引数は「bash -c」で始まるので当たらない)
LAB_RUN_PAT='^bash /workspace/r2r2r/train_run\.sh$'
LAB_WD_PAT='^bash /workspace/r2r2r/lab_watchdog\.sh$'
LAB_GPU_PAT='^nvidia-smi --query-gpu=timestamp'

lab_train_start_cmd() {     # lab_train_start_cmd 設定 exp 学習のログ GPU のログ 回したログ 終わりの印 → 学習を setsid nohup で始める (STARTED が出れば始まった)
    cat <<EOF
: lt=start_train
rm -f $6
cat > /workspace/r2r2r/train_run.sh <<'RUN_EOF'
#!/bin/bash
# lab_train.sh が置く. train.py を回し, 終わったら終了コードを $6 に書く
echo "\$(date '+%F %T') 始める" >> $5
{ cd /workspace/openpi && source \$HOME/.local/bin/env \\
  && XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py $1 --exp-name=$2 --overwrite > $3 2>&1; }
rc=\$?
echo "\$(date '+%F %T') 終わった (終了コード \$rc)" >> $5
echo \$rc > $6
RUN_EOF
setsid nohup bash /workspace/r2r2r/train_run.sh >/dev/null 2>&1 < /dev/null &
pkill -f '$LAB_GPU_PAT'
setsid nohup nvidia-smi --query-gpu=timestamp,name,memory.used,memory.total,utilization.gpu,temperature.gpu,power.draw --format=csv -l 30 > $4 2>&1 < /dev/null &
sleep 3
pgrep -f '$LAB_RUN_PAT' >/dev/null && echo STARTED
EOF
}

lab_train_kill_cmd() {      # 学習を止める (片付けの前. 書き終わったログを取るため)
    echo ": lt=kill_train; pkill -f '$LAB_RUN_PAT'; pkill -f '[s]cripts/train\.py'; sleep 3; pkill -9 -f '[s]cripts/train\.py'; true"
}

lab_train_status_cmd() {    # lab_train_status_cmd 学習のログ 終わりの印 チェックポイントのフォルダ ステップ数 → STATUS の1行
    # run  = 学習を回すスクリプト (train_run.sh) が動いている. train.py が終わったあと終わりの印を書いてから終わるので,
    #        run=0 で exit=- なら「書く前に消えた」(殺された)
    # exit = train.py の終了コード (まだなら -)
    # age  = 学習のログが最後に書かれてからの秒 (tqdm が 1 ステップごとに書くので, 長く書かれなければ止まっている)
    # bar  = tqdm の「N/ステップ数」の N.  logstep / loss = 最後の「Step N: ... loss=...」の行
    # ckpt = 数字だけのフォルダのいちばん大きい番号 (orbax の書きかけ *.orbax-checkpoint-tmp-* は数えない)
    # cm   = そのフォルダに _CHECKPOINT_METADATA がある
    cat <<EOF
: lt=status
L=$1; E=$2; C=$3
r=0; pgrep -f "$LAB_RUN_PAT" >/dev/null && r=1
e=-; [ -f \$E ] && e=\$(tr -d ' \n' < \$E)
a=-; s=-; ls=-; lo=-
if [ -f \$L ]; then
  mt=\$(stat -c %Y \$L 2>/dev/null || date -r \$L +%s 2>/dev/null)     # GNU (Pod) は stat -c, Mac (テスト) は date -r
  case "\$mt" in ''|*[!0-9]*) a=- ;; *) a=\$(( \$(date +%s) - mt )) ;; esac
  t=\$(tail -c 400000 \$L | tr '\r' '\n')
  s=\$(printf '%s\n' "\$t" | grep -oE '[0-9]+/$4 \[' | tail -1 | cut -d/ -f1)
  ln=\$(printf '%s\n' "\$t" | grep -E '^Step [0-9]+:' | tail -1)
  [ -n "\$ln" ] && { ls=\$(printf '%s\n' "\$ln" | sed -E 's/^Step ([0-9]+):.*/\1/'); lo=\$(printf '%s\n' "\$ln" | grep -oE '(^|[ ,])loss=[0-9.eE+-]+' | head -1 | sed 's/.*=//'); }
fi
c=\$(ls \$C 2>/dev/null | grep -E '^[0-9]+\$' | sort -n | tail -1)
m=0; [ -n "\$c" ] && [ -f \$C/\$c/_CHECKPOINT_METADATA ] && m=1
echo "STATUS run=\$r exit=\${e:--} age=\${a:--} bar=\${s:--} logstep=\${ls:--} loss=\${lo:--} ckpt=\${c:--} cm=\$m"
EOF
}

lab_train_parse_status() {  # lab_train_parse_status 出力 → S_RUN S_EXIT S_AGE S_BAR S_LOGSTEP S_LOSS S_CKPT S_CM. STATUS の行がなければ 1
    local line k v
    line=$(grep -E '^STATUS run=[01] ' <<<"$1" | tail -1)
    [ -n "$line" ] || return 1
    for k in run exit age bar logstep loss ckpt cm; do
        v=$(sed -nE "s/.* $k=([^ ]*).*/\1/p" <<<" ${line#STATUS }")
        printf -v "S_$(tr '[:lower:]' '[:upper:]' <<<"$k")" '%s' "${v:--}"
    done
}

lab_train_list_cmd() {      # lab_train_list_cmd フォルダ → 「F<TAB>パス<TAB>バイト数」を名前順に (train_state/ は数えない)
    echo ": lt=list_ckpt; set -o pipefail; cd $1 && find . -type f ! -path './train_state/*' -printf '%P\t%s\n' | LC_ALL=C sort | sed 's/^/F\t/'"
}

lab_list_files() {          # lab_list_files フォルダ → 「パス<TAB>バイト数」を名前順に (Mac 側. du は KIOXIA でずれるので stat の大きさ)
    # 数えない: .cache/ (hf download の印)・._* (exFAT が付ける)・.DS_Store・.gitattributes・train_state/
    python3 -I -c '
import os, sys
root = sys.argv[1]
out = []
def err(e):
    raise e                 # 読めないフォルダを黙って飛ばさない (一覧が足りないまま「合った」としない)
for d, dirs, files in os.walk(root, onerror=err):
    rel = os.path.relpath(d, root)
    if rel == ".":
        dirs[:] = [x for x in dirs if x not in (".cache", "train_state")]
    for f in files:
        if f.startswith("._") or f in (".DS_Store", ".gitattributes"):
            continue
        p = os.path.normpath(os.path.join(rel, f))
        out.append((p, os.path.getsize(os.path.join(d, f))))
for p, s in sorted(out, key=lambda x: x[0].encode()):
    print(f"{p}\t{s}")
' "$1"
}

lab_watchdog_script() {     # Pod 側の上限の見張り (lab_train.sh が /workspace/r2r2r/lab_watchdog.sh に置き, setsid nohup で裏で回す)
    cat <<'WATCHDOG_EOF'
#!/bin/bash
# lab_watchdog.sh — 上限の時刻を過ぎたら, この Pod を自分で消す (lab_train.sh が置く. 依頼 49)
# Mac が止まって lab_train.sh が Pod を消せなくても, Pod が残り続けないための保険.
# 鍵は Mac から送らない. Runpod が Pod に入れる RUNPOD_POD_ID と Pod 用の鍵 RUNPOD_API_KEY を使う
# (ssh のシェルには入っていないことがあるので, 1 番のプロセスの環境と /etc/rp_environment からも探す). 鍵は書き出さない
F=${LAB_WD_DEADLINE:-/workspace/logs/.lab_deadline}     # 上限の時刻 (epoch). lab_train.sh が書き換えて延ばす
L=${LAB_WD_LOG:-/workspace/logs/watchdog.log}
RUNPOD_REST=${LAB_WD_API:-https://rest.runpod.io/v1}
penv() {
    { tr '\0' '\n' < /proc/1/environ; sed -E 's/^export //; s/"//g' /etc/rp_environment; } 2>/dev/null \
        | sed -n "s/^$1=//p" | head -1
}
while :; do
    d=$(cat "$F" 2>/dev/null)
    case "$d" in ''|*[!0-9]*) ;; *) [ "$(date +%s)" -ge "$d" ] && break ;; esac
    sleep "${LAB_WD_POLL:-60}"
done
echo "$(date '+%F %T') 上限の時刻を過ぎた. この Pod を消します" >> "$L"
id=${RUNPOD_POD_ID:-$(penv RUNPOD_POD_ID)}
key=${RUNPOD_API_KEY:-$(penv RUNPOD_API_KEY)}
[ -n "$id" ] || { echo "RUNPOD_POD_ID が見つからない. 消せない" >> "$L"; exit 1; }
# 通信が一時だめでも残らないよう, DELETE と runpodctl remove を間を置いてくり返す (runpodctl の出力は鍵を含まないが, 念のため捨てる)
for i in $(seq 1 "${LAB_WD_TRIES:-30}"); do
    code=$(curl -sS --max-time 30 -o /dev/null -w '%{http_code}' -X DELETE \
        -H @<(printf 'Authorization: Bearer %s\n' "$key") "$RUNPOD_REST/pods/$id" 2>/dev/null) || code=000
    echo "$(date '+%F %T') ($i) DELETE → HTTP $code" >> "$L"
    case "$code" in 2??) exit 0 ;; esac
    if command -v runpodctl >/dev/null 2>&1 && RUNPOD_API_KEY="$key" timeout "${LAB_WD_CTL_TIMEOUT:-60}" runpodctl remove pod "$id" >/dev/null 2>&1; then
        echo "$(date '+%F %T') ($i) runpodctl remove pod で消した" >> "$L"; exit 0
    fi
    sleep "${LAB_WD_RETRY:-60}"
done
# 消せなければ, せめて止める (GPU の料金は止まる. ディスクの料金は残る)
if command -v runpodctl >/dev/null 2>&1 && RUNPOD_API_KEY="$key" timeout "${LAB_WD_CTL_TIMEOUT:-60}" runpodctl stop pod "$id" >/dev/null 2>&1; then
    echo "$(date '+%F %T') 消せず, runpodctl stop pod で止めた (ディスクの料金は残る)" >> "$L"; exit 0
fi
echo "$(date '+%F %T') 消せなかった" >> "$L"
exit 1
WATCHDOG_EOF
}

lab_watchdog_start_cmd() {  # lab_watchdog_start_cmd 上限の時刻 → 見張りを (なければ) 起動し, 様子を WATCHDOG の1行で出す (鍵の中身は出さない)
    cat <<EOF
: lt=watchdog
mkdir -p /workspace/logs; echo $1 > /workspace/logs/.lab_deadline.tmp && mv /workspace/logs/.lab_deadline.tmp /workspace/logs/.lab_deadline; chmod +x /workspace/r2r2r/lab_watchdog.sh
pgrep -f '$LAB_WD_PAT' >/dev/null || setsid nohup bash /workspace/r2r2r/lab_watchdog.sh >/dev/null 2>&1 < /dev/null &
sleep 1
pe() { [ -n "\$(printenv \$1)" ] || { tr '\0' '\n' < /proc/1/environ; cat /etc/rp_environment; } 2>/dev/null | grep -qE "^(export )?\$1=.+"; }
w=0; pgrep -f '$LAB_WD_PAT' >/dev/null && w=1
p=0; pe RUNPOD_POD_ID && p=1
k=0; pe RUNPOD_API_KEY && k=1
c=0; command -v runpodctl >/dev/null 2>&1 && c=1
echo "WATCHDOG run=\$w pod=\$p key=\$k ctl=\$c"
EOF
}

# ---- lab_train.sh の Mac 側 (--dry-run とテストでは lab_train_fakes.sh が差し替える) ----

lab_have_hf_cli() { command -v hf >/dev/null 2>&1; }

lab_hf_download_mac() {     # lab_hf_download_mac リポジトリ 置く場所 → Mac の hf で取る. 鍵は HF_TOKEN_PATH でファイルの場所だけを渡す
    env -u HF_TOKEN HF_TOKEN_PATH="$HF_TOKEN_FILE" HF_HUB_DISABLE_TELEMETRY=1 hf download "$1" --local-dir "$2" > "$2.download.log" 2>&1
    local rc=$?
    tail -3 "$2.download.log"; rm -f "$2.download.log"
    return $rc
}

lab_notify() {              # lab_notify 題 文 終了コード → Mac の通知 (0 なら Glass, それ以外は Basso の音)
    local sound=Basso
    [ "$3" = 0 ] && sound=Glass
    osascript -e 'on run argv' -e 'display notification (item 2 of argv) with title (item 1 of argv) sound name (item 3 of argv)' \
              -e 'end run' "$1" "$2" "$sound" >/dev/null 2>&1 \
        || echo "[WARN  ] Mac の通知を出せなかった"
}

lab_keep_awake() {          # このスクリプトが終わるまで Mac をスリープさせない (CAFF_PID)
    caffeinate -i -s -w $$ >/dev/null 2>&1 &
    CAFF_PID=$!
    echo "[MAC   ] 終わるまでスリープしないようにした (caffeinate pid $CAFF_PID). ふたは閉じない"
    if ! pmset -g batt 2>/dev/null | grep -q "'AC Power'"; then
        echo "[WARN  ] 電源につながっていない. バッテリーだとスリープを止めきれないので, 電源につないでください"
    fi
}
```

### lab_start.sh

```bash
#!/bin/bash
# lab_start.sh — Runpod の Pod の準備から mechArm 270 の実機推論までを1行で行う (依頼 37 / 手順は LOG407「起動の手順」)
#
#   ./lab_start.sh --gpu A40 --episode run_0001_20261019_194818 --log Log17
#   ./lab_start.sh --log Log17 --dry-run      アームなしで試す (デーモン・HOME・爪・位置合わせを飛ばし,
#                                             run_policy_client.py を --execute なし・--dry-keys で呼ぶ)
#
#   --gpu      GPU の種類 (既定 A40). 「A40」は「NVIDIA A40」として API に渡す. 名前に空白を含む種類は
#              「--gpu "NVIDIA RTX A6000"」のように Runpod の名前のまま渡す
#   --episode  位置合わせ (camera_align.py) で重ねるお手本 (既定 run_0001_20261019_194818)
#   --log      ターミナルの出力を残す /Volumes/KIOXIA/r2r2r-data/lab/<Log>/ (なければ聞く)
#
# 1. Pod を作る (A40×1・Runpod Pytorch 2.8.0・コンテナのディスク 200GB・22/tcp を外へ出す)
#    「resources」で借りられなければ 30 秒待って, 合わせて 5 回まで作り直す
#    <Log>/pod/lab_pod.json の Pod が API で RUNNING なら, 作らずにつなぎ直す (依頼 44)
#      - 3. で Pod の中を見る. サーバーが 8000 番で待っていれば 3b〜4 を飛ばす. 落ちていれば前の serve.log を
#        持ち帰り, モデル・openpi・.venv のないものだけやり直し, 3f と 4 を流す. 3a (スクリプトを送る) は毎回
#        プロセスはあるのに 8000 番で待っていなければ 30 秒待ち, それでも待っていなければ起動し直す (依頼 47)
#      - 止まっている (EXITED など) なら lab_stop.sh --skip-log で消してから作る. API にない・TERMINATED なら作る
#        どちらも古い lab_pod.json は lab_pod_<時刻>.json に名前を変えて残す
#      - API で様子が分からないとき・記録にない p2m-<Log> の Pod が残っているときは, 二重に借りないよう止まる
# 2. Pod が立ち上がり, SSH の IP とポートが API から出るまで待つ (画面・ログには出さない)
# 3. Pod を準備する (3b〜3f のコマンドは lab_lib.sh. lab_train.sh と同じもの) (pi05/ と add_trim_config.py → huggingface_hub → hf download → openpi 215abfb → uv sync
#    → addon・設定・assets → serve_policy.py を tmux の中で起動し /workspace/logs/serve.log に残す)
# 4. serve.log に「server listening on 0.0.0.0:8000」が出るまで待つ
# 5. Mac の 8000 番へのトンネルを裏で張る (このスクリプトが終わるときに閉じる)
# 6. tools/daemon_ctl.sh status で 5555 の LISTEN を見る. なければ start
# 7. HOME → 爪を開く → camera_align.py (q で閉じる)
# 8. run_policy_client.py (LOG407 と同じ引数). 終わったら, もう1回やるかを聞く (y なら 7 へ)
# 9. Pod は消さない. 片付けは ./lab_stop.sh
#
# Pod の情報 (id・GPU・1時間の料金・作った時刻) は <Log>/pod/lab_pod.json に残す (IP とポートは残さない).

set -u
set -o pipefail

# 中身は全部 main の中に置き, 最後の1行で呼ぶ (依頼 47). bash はスクリプトを少しずつ読みながら流すので,
# 動いている途中でこのファイルが書き換わると, 続きを新しい中身の途中から読んで壊れる. 関数は呼ぶ前に最後まで読む
main() {
HERE="$(cd "$(dirname "$0")" && pwd)"
# shellcheck source=lab_lib.sh
. "$HERE/lab_lib.sh"

ORIG_ARGS=("$@")
GPU=A40
EPISODE=run_0001_20261019_194818
LOG=""
DRY_RUN=0
while [ $# -gt 0 ]; do
    case "$1" in
        --gpu) GPU="$2"; shift 2 ;;
        --episode) EPISODE="$2"; shift 2 ;;
        --log) LOG="$2"; shift 2 ;;
        --dry-run) DRY_RUN=1; shift ;;
        -h|--help) sed -n '2,32p' "$0"; exit 0 ;;
        *) echo "[ERROR] 知らない引数: $1  (./lab_start.sh --help)" >&2; exit 2 ;;
    esac
done
case "$GPU" in *" "*) GPU_ID="$GPU" ;; *) GPU_ID="NVIDIA $GPU" ;; esac

if [ ! -d /Volumes/KIOXIA/r2r2r-data ]; then
    echo "[ERROR] SSD 未マウント: /Volumes/KIOXIA/r2r2r-data" >&2; exit 1
fi
if [ -z "$LOG" ]; then
    if [ -t 0 ]; then read -r -p "Log 番号 (例 Log17) > " LOG; fi
    [ -n "$LOG" ] || { echo "[ERROR] --log Log17 のように Log 番号を付けてください" >&2; exit 2; }
fi
LOGDIR="$LAB_ROOT/$LOG"
STATE="$LOGDIR/pod/lab_pod.json"

# ---- ターミナルの出力を画面に出しつつ <Log>/ に残す ----
if [ -z "${LAB_LOGGED:-}" ]; then
    mkdir -p "$LOGDIR/pod"
    LOGFILE="$LOGDIR/lab_start_$(date +%Y%m%d_%H%M%S).txt"
    echo "[LOG   ] ターミナルの出力を残します → $LOGFILE"
    if [ -t 0 ] && [ -t 1 ]; then
        # script は端末のまま記録する (camera_align.py・run_policy_client.py の入力待ちもそのまま使える)
        exec env LAB_LOGGED=1 script -q -a "$LOGFILE" "$0" "${ORIG_ARGS[@]}" --log "$LOG"
    fi
    export LAB_LOGGED=1
    exec > >(tee -a "$LOGFILE") 2>&1
fi
export PYTHONUNBUFFERED=1

lab_need_key "$RUNPOD_KEY_FILE" "Runpod の API キー"
lab_need_key "$HF_TOKEN_FILE" "Hugging Face の鍵"
[ -s "$POD_SSH_KEY" ] || { echo "[ERROR] Pod に入る SSH の鍵がありません: $POD_SSH_KEY" >&2; exit 1; }
[ -s "$POD_SSH_KEY.pub" ] || { echo "[ERROR] SSH の公開鍵がありません: $POD_SSH_KEY.pub" >&2; exit 1; }
ADD_TRIM=/Volumes/KIOXIA/r2r2r-data/lab/Log11/pod/add_trim_config.py
[ -f "$ADD_TRIM" ] || { echo "[ERROR] add_trim_config.py がありません: $ADD_TRIM" >&2; exit 1; }
RAW=/Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes
[ -d "$RAW/$EPISODE" ] || { echo "[ERROR] お手本がありません: $RAW/$EPISODE" >&2; exit 1; }
lab_ssh_opts

HF_REPO=PixelstoMotors/pi05-mecharm-trim-lora-v1
OPENPI_COMMIT=$LAB_OPENPI_COMMIT                                          # lab_lib.sh (lab_train.sh と同じ)
CKPT=/workspace/ckpt/3999                                                  # 3c で hf download が置く場所
NORM_STATS=assets/local/mecharm_redblock_box_teach_v1_trim2/norm_stats.json  # 3f が写す assets (CKPT からの相対)
LISTEN_WAIT=30; LISTEN_POLL=5    # プロセスはあるのに 8000 番で待っていないとき, 何秒待つか・何秒おきに見るか
TEMPLATE_ID=$LAB_TEMPLATE_ID
IMAGE=$LAB_IMAGE

# ---- 段階ごとの秒数 ----
T_NAMES=(); T_SECS=()
CUR_STAGE="(始める前)"
stage() { CUR_STAGE="$1"; STAGE_T0=$SECONDS; echo; echo "=== $1"; }
stage_done() { T_NAMES+=("$CUR_STAGE"); T_SECS+=($((SECONDS - STAGE_T0))); echo "    ($((SECONDS - STAGE_T0)) 秒)"; }
summary() {
    echo
    echo "=== かかった時間$([ "${REATTACH:-0}" = 1 ] && echo " ($LOG の Pod (id $POD_ID) につなぎ直し)")"
    local i
    for i in "${!T_NAMES[@]}"; do printf '  %-32s %6d 秒\n' "${T_NAMES[$i]}" "${T_SECS[$i]}"; done
}
POD_ID=""
fail() {
    echo
    echo "[STOP  ] 「${CUR_STAGE}」で止まりました: $*"
    if [ -n "$POD_ID" ]; then
        echo "[STOP  ] Pod は残っています (id $POD_ID). 消すなら ./lab_stop.sh --log $LOG"
    fi
    summary
    exit 1
}

TUNNEL_PID=""
LOCK="$LOGDIR/pod/.lab_start.lock"
LOCKED=0
cleanup() {
    if [ $LOCKED = 1 ] && [ "$(cat "$LOCK/pid" 2>/dev/null)" = "$$" ]; then rm -rf "$LOCK"; fi
    if [ -n "$TUNNEL_PID" ] && kill -0 "$TUNNEL_PID" 2>/dev/null; then
        kill "$TUNNEL_PID" 2>/dev/null
        echo "[TUNNEL] 8000 番のトンネルを閉じました"
    fi
}
trap cleanup EXIT
trap 'fail "Ctrl-C で止めました"' INT

# ---- 同じ Log の lab_start.sh を2つ同時に動かさない (mkdir は1つだけが成り立つ. 終わるときに外す) ----
# 印が残っていれば, 動いていてもいなくても止まる (自動で取り直すと, 2つが同時に取り直したときに両方進めるため)
if ! mkdir "$LOCK" 2>/dev/null; then
    other=$(cat "$LOCK/pid" 2>/dev/null)
    if [ -n "$other" ] && kill -0 "$other" 2>/dev/null; then
        echo "[ERROR] $LOG の lab_start.sh がもう動いています (pid $other). 二重に借りないよう止まります"
    else
        echo "[ERROR] $LOG の lab_start.sh の印が残っています (pid ${other:-?}・動いていないように見える). 二重に借りないよう止まります"
        echo "        ほかに $LOG の lab_start.sh が動いていないことを確かめてから, 印を消して打ち直してください:"
        echo "        rm -r $LOCK"
    fi
    exit 1
fi
LOCKED=1
echo $$ > "$LOCK/pid" || { echo "[ERROR] $LOCK/pid を書けない"; exit 1; }

echo "$LOG" > "$LAB_CURRENT"
echo "[LAB   ] $(date '+%Y-%m-%d %H:%M:%S')  GPU=$GPU_ID  episode=$EPISODE  log=$LOGDIR  $([ $DRY_RUN = 1 ] && echo 'ドライラン (アームなし)')"

# ---- 1. Pod を作る (同じ Log の Pod が動いていれば, 作らずにつなぎ直す) ----
REATTACH=0
stage "1. Pod を作る"
if [ -f "$STATE" ]; then
    OLD_ID=$(jq -r '.id // ""' "$STATE" 2>/dev/null)
    if [ -z "$OLD_ID" ]; then
        lab_archive_state "$STATE" || fail "読めない $STATE を残せない"
        echo "[POD   ] $STATE に Pod の id がない. $LAB_ARCHIVED に名前を変えて残し, 新しく作ります"
    elif ! lab_pod_kind "$OLD_ID"; then
        fail "記録の Pod (id $OLD_ID) の様子を API で確かめられない (HTTP ${RUNPOD_HTTP:-?}). 二重に借りないよう止まります"
    else
        case "$LAB_POD_KIND" in
            running)
                REATTACH=1 ;;
            stopped)
                echo "[POD   ] $LOG の Pod (id $OLD_ID) は止まっています (状態 $LAB_POD_STATUS). 止まっていてもディスクの料金がかかるので,"
                echo "         ./lab_stop.sh と同じ消し方で消してから新しく作ります"
                "$HERE/lab_stop.sh" --log "$LOG" --skip-log || fail "止まっている Pod (id $OLD_ID) を消せない (上の lab_stop.sh の出力を見る)"
                lab_archive_state "$STATE" || fail "古い $STATE を残せない"
                echo "[POD   ] 古い記録は $LAB_ARCHIVED に残しました" ;;
            gone)
                lab_archive_state "$STATE" || fail "古い $STATE を残せない"
                echo "[POD   ] 記録の Pod (id $OLD_ID) は API で見ると残っていない${LAB_POD_STATUS:+ (状態 $LAB_POD_STATUS)}. 新しく作ります"
                echo "         古い記録は $LAB_ARCHIVED に残しました" ;;
        esac
    fi
fi
if [ $REATTACH = 1 ]; then
    POD_ID=$OLD_ID
    COST_PER_HR=$(jq -r '.costPerHr // 0' "$STATE")
    POD_T0=$(jq -r '.created_epoch // 0' "$STATE")
    OLD_GPU=$(jq -r '.gpu // ""' "$STATE")
    echo "[POD   ] $LOG の Pod (id $POD_ID) につなぎ直します (状態 RUNNING  GPU=$OLD_GPU  1時間 $COST_PER_HR ドル  作った時刻 $(jq -r '.created_at // "?"' "$STATE"))"
    [ "$OLD_GPU" = "$GPU_ID" ] || echo "[POD   ] --gpu は $GPU_ID ですが, 残っている Pod の $OLD_GPU をそのまま使います"
    CUR_STAGE="1. Pod につなぎ直す"
else
    others=$(runpod_api GET /pods) || fail "Pod の一覧を API から取れない (HTTP $RUNPOD_HTTP)"
    lab_valid_pods "$others" || fail "Pod の一覧の答えが読めない. 二重に借りないよう止まります"
    same=$(jq -r --arg name "p2m-$LOG" '.[] | select(.name == $name and .desiredStatus != "TERMINATED") | .id' <<<"$others")
    if [ -n "$same" ]; then
        fail "記録にない $LOG の Pod (p2m-$LOG, id $(echo $same)) が残っている. 二重に借りないよう止まります (Runpod の画面か ./lab_stop.sh --check で確かめる)"
    fi
    n_others=$(jq 'length' <<<"$others")
    if [ "$n_others" -gt 0 ]; then
        echo "[WARN  ] ほかに Pod が $n_others 個あります (消し忘れなら ./lab_stop.sh --check で確かめる):"
        jq -r '.[] | "         \(.id)  \(.name)  \(.desiredStatus)  \(.costPerHr) ドル/時"' <<<"$others"
    fi
    body=$(jq -n --arg name "p2m-$LOG" --arg gpu "$GPU_ID" --arg tpl "$TEMPLATE_ID" --arg img "$IMAGE" \
              --arg pk "$(cat "$POD_SSH_KEY.pub")" \
              '{name:$name, templateId:$tpl, imageName:$img, gpuTypeIds:[$gpu], gpuCount:1,
                cloudType:"SECURE", containerDiskInGb:200, volumeInGb:0, ports:["22/tcp"],
                env:{PUBLIC_KEY:$pk}}')
    for attempt in 1 2 3 4 5; do
        resp=$(runpod_api POST /pods "$body") && break
        msg=$(jq -r '.error // .message // .' <<<"$resp" 2>/dev/null || echo "$resp")
        echo "[POD   ] 作れなかった ($attempt/5, HTTP $RUNPOD_HTTP): $msg"
        case "$msg" in
            *resources*|*"no longer any instances"*|*"not available"*|*"no instances"*)
                [ "$attempt" -lt 5 ] && { echo "[POD   ] 30 秒待って作り直します"; sleep 30; continue; } ;;
        esac
        fail "Pod を作れない: $msg"
    done
    POD_ID=$(jq -r '.id // ""' <<<"$resp")
    [ -n "$POD_ID" ] || fail "API の答えに Pod の id がない"
    COST_PER_HR=$(jq -r '.costPerHr // 0' <<<"$resp")
    POD_T0=$(date +%s)
    jq -n --arg id "$POD_ID" --arg gpu "$GPU_ID" --arg log "$LOG" --argjson cost "$COST_PER_HR" --argjson t0 "$POD_T0" \
          '{id:$id, gpu:$gpu, log:$log, costPerHr:$cost, created_epoch:$t0,
            created_at:($t0|strflocaltime("%Y-%m-%d %H:%M:%S"))}' > "$STATE"
    echo "[POD   ] 作った: id $POD_ID  GPU=$GPU_ID  1時間 $COST_PER_HR ドル  (記録 $STATE)"
fi
stage_done

# ---- 2. Pod が立ち上がり, SSH の IP とポートが出るまで待つ ----
stage "2. Pod が立ち上がるまで待つ"
for _ in $(seq 1 90); do
    lab_pod_addr && break
    sleep 10
done
[ -n "${POD_IP:-}" ] && [ -n "${SSH_PORT:-}" ] || fail "15 分待っても SSH の IP とポートが出ない"
echo "[POD   ] SSH の IP とポートを API から$([ $REATTACH = 1 ] && echo '取り直した' || echo '受け取った') (<POD_IP>:<SSH_PORT>)"
for _ in $(seq 1 60); do
    pod_ssh true >/dev/null && break
    sleep 5
done
pod_ssh 'echo "[POD   ] 入れた: $(hostname)"; nvidia-smi --query-gpu=name,memory.total --format=csv,noheader' \
    || fail "Pod に SSH で入れない"
stage_done

# ---- 3. Pod を準備する (つなぎ直しは, 済んでいるものを飛ばす) ----
NEED_PREP=1; NEED_CKPT=1; NEED_OPENPI=1; NEED_VENV=1
if [ $REATTACH = 1 ]; then
    stage "3. Pod の中を確かめる (つなぎ直し)"
    lab_pod_probe "$OPENPI_COMMIT" "$CKPT" "$NORM_STATS" || fail "Pod の中を確かめられない"
    yn() { [ "$1" = 1 ] && echo ある || echo ない; }
    if [ "$PROBE_CKPT" = 0 ]; then ckpt_msg=ない
    elif [ "$PROBE_MARK" = 1 ]; then ckpt_msg=ある
    else ckpt_msg="ある (取り終えた印 .lab_download_ok はない. 依頼 44 より前の lab_start.sh で取ったものなど)"; fi
    echo "[POD   ] serve_policy.py のプロセス: $(yn "$PROBE_SERVE")  8000 番の LISTEN: $(yn "$PROBE_LISTEN")"
    echo "[POD   ] モデル ($CKPT): $ckpt_msg  openpi ($OPENPI_COMMIT): $(yn "$PROBE_OPENPI")  .venv: $(yn "$PROBE_VENV")"
    if [ "$PROBE_SERVE" = 1 ] && [ "$PROBE_LISTEN" = 0 ]; then
        # 読み込みの途中かもしれないので少し待つ (エイイチの決め: 30 秒待ち, それでも待っていなければ起動し直す)
        echo "[POD   ] serve_policy.py は動いているが 8000 番で待っていない. 読み込み中かもしれないので $LISTEN_WAIT 秒まで待ちます"
        waited=0
        while [ $waited -lt $LISTEN_WAIT ]; do
            sleep $LISTEN_POLL; waited=$((waited + LISTEN_POLL))
            lab_pod_probe "$OPENPI_COMMIT" "$CKPT" "$NORM_STATS" || fail "Pod の中を確かめられない"
            [ "$PROBE_LISTEN" = 1 ] || [ "$PROBE_SERVE" = 0 ] && break
        done
        if [ "$PROBE_LISTEN" = 1 ]; then
            echo "[POD   ] $waited 秒で 8000 番で待ち始めました"
        else
            echo "[POD   ] $waited 秒待っても 8000 番で待っていない$([ "$PROBE_SERVE" = 0 ] && echo " (その間にプロセスが終わった)"). 起動し直します"
        fi
    fi
    if [ "$PROBE_SERVE" = 1 ] && [ "$PROBE_LISTEN" = 1 ]; then
        NEED_PREP=0
        echo "[POD   ] サーバーは 8000 番で待っています. 3b〜4 を飛ばします"
        pod_ssh "grep 'server listening' /workspace/logs/serve.log | tail -1"
    else
        echo "[POD   ] サーバーが動いていません. ないものだけやり直してサーバーを起動します"
        # 起動し直すと serve.log を空にするので, 前の serve.log を先に持ち帰る (落ちたわけを残す. だめでも続ける)
        dest="$LOGDIR/serve_before_restart_$(date +%Y%m%d_%H%M%S).log"
        if pod_scp "root@$POD_IP:/workspace/logs/serve.log" "$dest"; then
            echo "[LOG   ] 前の serve.log を持ち帰った → $dest ($(wc -l < "$dest" | tr -d ' ') 行)"
        else
            rm -f "$dest"; echo "[LOG   ] 前の serve.log は持ち帰れなかった (ないのかもしれない). 続けます"
        fi
        # 中身があっても印がなければ 3b・3c を流し直す (hf download は取り終えたファイルを取り直さない)
        [ "$PROBE_CKPT" = 1 ] && [ "$PROBE_MARK" = 1 ] && NEED_CKPT=0
        [ "$PROBE_OPENPI" = 1 ] && NEED_OPENPI=0
        [ "$PROBE_VENV" = 1 ] && [ $NEED_OPENPI = 0 ] && NEED_VENV=0     # openpi を取り直したら uv sync もやり直す
    fi
    stage_done
fi
skip() { T_NAMES+=("$1 (飛ばした)"); T_SECS+=(0); echo; echo "=== $1 → 飛ばす ($2)"; }

# スクリプトはつなぎ直しでも毎回送る (Mac 側の pi05/ が変わっているかもしれないため. 動いているサーバーには効かない)
stage "3a. スクリプトを送る"
pod_ssh "mkdir -p /workspace/r2r2r /workspace/logs /workspace/ckpt" || fail "Pod にフォルダを作れない"
pod_scp -r "$HERE/pi05" "root@$POD_IP:/workspace/r2r2r/" || fail "pi05/ を送れない"
pod_scp "$ADD_TRIM" "root@$POD_IP:/workspace/r2r2r/" || fail "add_trim_config.py を送れない"
stage_done

if [ $NEED_PREP = 0 ]; then
    skip "3b〜4. 準備とサーバーの起動" "サーバーが 8000 番で待っている"
else
    if [ $NEED_CKPT = 1 ]; then
        stage "3b. huggingface_hub を入れ, 鍵を渡す"
        pod_ssh "$(lab_cmd_hf_install)" || fail "huggingface_hub を入れられない"
        lab_send_hf_token || fail "Hugging Face の鍵を渡せない"     # 鍵は ssh の標準入力で渡す (lab_lib.sh)
        pod_ssh 'hf auth whoami' || fail "Hugging Face に入れない (鍵が違う: $HF_TOKEN_FILE を確かめる)"
        stage_done

        stage "3c. モデルを取る (hf download)"
        pod_ssh "$(lab_cmd_ckpt "$HF_REPO" "$CKPT")" || fail "hf download に失敗"
        stage_done
    else
        skip "3b・3c. huggingface_hub・モデル" "モデルがある"
    fi

    if [ $NEED_OPENPI = 1 ]; then
        stage "3d. openpi を取る ($OPENPI_COMMIT)"
        pod_ssh "$(lab_cmd_openpi "$OPENPI_COMMIT")" || fail "openpi を取れない"
        stage_done
    else
        skip "3d. openpi を取る ($OPENPI_COMMIT)" "openpi がある"
    fi

    if [ $NEED_VENV = 1 ]; then
        stage "3e. uv sync"
        pod_ssh "$(lab_cmd_uv_sync)" || fail "uv sync に失敗"
        stage_done
    else
        skip "3e. uv sync" ".venv がある"
    fi

    # 3f は何度流しても同じ結果 (install_addon.py・add_trim_config.py とも二重に入れない) なので毎回流す
    stage "3f. addon・設定・assets"
    pod_ssh "$(lab_cmd_addon)" || fail "addon・設定・assets に失敗"
    stage_done

    # ---- 3g・4. サーバーを tmux の中で起動し, 受け付けを始めるまで待つ ----
    stage "4. サーバーの起動"
    pod_ssh 'command -v tmux >/dev/null || { apt-get update -qq && apt-get install -y -qq tmux >/dev/null; }' \
        || fail "tmux を入れられない"
    # 起動し直すときは, 前の serve_policy.py が終わってから起動する (8000 番・GPU を空ける. 止めるのは別の ssh で)
    pod_ssh "$(lab_serve_stop_cmd)" || fail "前の serve_policy.py を止められない"
    pod_ssh ": > /workspace/logs/serve.log; \
             tmux new -d -s serve 'cd /workspace/openpi && source \$HOME/.local/bin/env && uv run scripts/serve_policy.py policy:checkpoint --policy.config=pi05_mecharm_trim_lora --policy.dir=/workspace/ckpt/3999 2>&1 | tee /workspace/logs/serve.log'" \
        || fail "serve_policy.py を起動できない"
    listening=0
    for _ in $(seq 1 120); do
        if pod_ssh "grep -q 'server listening on 0.0.0.0:8000' /workspace/logs/serve.log"; then listening=1; break; fi
        if ! pod_ssh "tmux has-session -t serve 2>/dev/null"; then
            pod_ssh "tail -20 /workspace/logs/serve.log"
            fail "serve_policy.py が終わってしまった (上は serve.log の末尾)"
        fi
        sleep 10
    done
    [ $listening = 1 ] || { pod_ssh "tail -20 /workspace/logs/serve.log"; fail "20 分待っても server listening が出ない"; }
    pod_ssh "grep 'server listening' /workspace/logs/serve.log | tail -1"
    stage_done
fi

# ---- 5. トンネル ----
stage "5. Mac の 8000 番へのトンネル"
if lsof -nP -iTCP:$TUNNEL_PORT -sTCP:LISTEN >/dev/null 2>&1; then
    fail "Mac の $TUNNEL_PORT 番がすでに使われている (前のトンネルなら ./lab_stop.sh で閉じる)"
fi
ssh -N -L $TUNNEL_PORT:localhost:$TUNNEL_PORT "${SSH_OPTS[@]}" -o ExitOnForwardFailure=yes \
    -p "$SSH_PORT" "root@$POD_IP" 2>&1 | lab_mask &
sleep 1
TUNNEL_PID=$(lab_tunnel_pids | head -1)
for _ in $(seq 1 15); do
    lsof -nP -iTCP:$TUNNEL_PORT -sTCP:LISTEN >/dev/null 2>&1 && break
    sleep 1
done
lsof -nP -iTCP:$TUNNEL_PORT -sTCP:LISTEN >/dev/null 2>&1 || fail "トンネルを張れない"
echo "[TUNNEL] localhost:$TUNNEL_PORT → Pod の 8000 番 (pid $TUNNEL_PID. このスクリプトが終わると閉じる)"
stage_done

cd "$HERE" || fail "$HERE に移れない"

# ---- 6. デーモン ----
if [ $DRY_RUN = 0 ]; then
    stage "6. デーモンの状態"
    st=$("$HERE/tools/daemon_ctl.sh" status 2>&1); echo "$st"
    if ! grep -q ':5555 ' <<<"$st"; then
        echo "[DAEMON] 5555 番で受け付けていないので起動します"
        st=$("$HERE/tools/daemon_ctl.sh" start 2>&1); echo "$st"
        grep -q ':5555 ' <<<"$st" || fail "デーモンが 5555 番で受け付けない (tools/daemon_ctl.sh log で確かめる)"
    fi
    stage_done
fi

# ---- 7・8. 位置合わせと実機推論 (くり返せる) ----
# ここから先の Ctrl-C は, 動いている Python (位置合わせ・推論) だけを止める (このスクリプトは続ける)
trap ':' INT
round=0
while :; do
    round=$((round + 1))
    if [ $DRY_RUN = 0 ]; then
        stage "7. HOME → 爪を開く → 位置合わせ ($round 回目)"
        python3 dynamic_tracking_limits/place/place_modules/08_home_from_anywhere.py || fail "HOME に戻せない"
        python3 -c "from visual_servo_pick import get_daemon_socket, daemon_set_gripper, close_daemon_socket; get_daemon_socket(); daemon_set_gripper(0); close_daemon_socket()" \
            || fail "爪を開けない"
        python3 pi05/camera_align.py --raw-dir "$RAW" --episode "$EPISODE" --scale 5 --alpha 0.7
        rc=$?
        [ $rc = 0 ] || [ $rc = 130 ] || fail "camera_align.py が失敗 (終了コード $rc)"
        stage_done
        stage "8. 実機推論 ($round 回目)"
        python3 pi05/run_policy_client.py --raw-dir "$RAW" --steps-per-chunk 10 --via-stride 3 \
            --settle-retries 0 --state-from-target --execute --ignore-framing
        rc=$?
    else
        stage "8. 推論のクライアント (ドライラン・--dry-keys. アームには触らない)"
        python3 pi05/run_policy_client.py --raw-dir "$RAW" --steps-per-chunk 10 --via-stride 3 \
            --settle-retries 0 --state-from-target --dry-keys --ignore-framing
        rc=$?
    fi
    echo "[CLIENT] run_policy_client.py が終わった (終了コード $rc)"
    stage_done
    if [ -t 0 ]; then
        read -r -p "もう1回やりますか? y=やる / 他=終わる > " again
    else
        again=n
    fi
    [ "$again" = y ] || break
done

# ---- 9. Pod は残す ----
summary
echo
echo "[LAB   ] Pod は残しています (id $POD_ID). 片付けは ./lab_stop.sh --log $LOG"
}

main "$@"; exit $?
```

### lab_stop.sh

```bash
#!/bin/bash
# lab_stop.sh — lab_start.sh で作った Pod を片付ける (依頼 37)
#
#   ./lab_stop.sh --log Log17      serve.log を持ち帰り, Pod を Terminate まで消し, 費用の見込みを出す
#   ./lab_stop.sh                  --log なしは, 最後に lab_start.sh を動かした Log を使う
#   ./lab_stop.sh --check          Pod が残っていないかを確かめるだけ (消さない. 残っていれば終了コード 1)
#   ./lab_stop.sh --log Log17 --skip-log   serve.log の持ち帰りは1回だけ試し, だめでもやり直さずに消す
#
# 1. Pod の /workspace/logs/serve.log を /Volumes/KIOXIA/r2r2r-data/lab/<Log>/ へ持ち帰る
#    (serve.log がすでにあれば serve_<時刻>.log にする). 持ち帰れなければ 10 秒待ってやり直す (合わせて 3 回).
#    3 回ともだめなら「serve.log を持ち帰れなかった」と画面と lab_stop のログに残し, そのまま 2 へ進んで消す
# 2. Pod を Terminate (DELETE) する. 一覧からも消えたことを API で確かめる
# 3. 借りていた時間 × 1時間の料金 で費用の見込みを出す (ドルと円. 1ドル=158円)
# 4. 裏の 8000 番のトンネルが残っていれば閉じる

set -u
set -o pipefail
HERE="$(cd "$(dirname "$0")" && pwd)"
# shellcheck source=lab_lib.sh
. "$HERE/lab_lib.sh"

LOG=""; CHECK=0; SKIP_LOG=0
while [ $# -gt 0 ]; do
    case "$1" in
        --log) LOG="$2"; shift 2 ;;
        --check) CHECK=1; shift ;;
        --skip-log) SKIP_LOG=1; shift ;;
        -h|--help) sed -n '2,16p' "$0"; exit 0 ;;
        *) echo "[ERROR] 知らない引数: $1  (./lab_stop.sh --help)" >&2; exit 2 ;;
    esac
done
lab_need_key "$RUNPOD_KEY_FILE" "Runpod の API キー"

close_tunnel() {
    local pids
    pids=$(lab_tunnel_pids)
    if [ -n "$pids" ]; then
        kill $pids 2>/dev/null
        echo "[TUNNEL] 残っていた 8000 番のトンネルを閉じました (pid $(echo $pids))"
    else
        echo "[TUNNEL] 8000 番のトンネルは残っていません"
    fi
}

list_pods() {               # 残っている Pod を出す. 戻り値は数
    local j n
    j=$(runpod_api GET /pods) || { echo "[ERROR] Pod の一覧を API から取れない (HTTP $RUNPOD_HTTP)" >&2; return 255; }
    n=$(jq 'length' <<<"$j")
    if [ "$n" -eq 0 ]; then
        echo "[CHECK ] 残っている Pod はありません"
    else
        echo "[CHECK ] 残っている Pod が $n 個あります:"
        jq -r '.[] | "         \(.id)  \(.name)  \(.desiredStatus)  \(.costPerHr) ドル/時"' <<<"$j"
    fi
    return "$n"
}

if [ $CHECK = 1 ]; then
    list_pods; n=$?
    if [ -n "$(lab_tunnel_pids)" ]; then
        echo "[CHECK ] 8000 番のトンネルが残っています (pid $(echo $(lab_tunnel_pids)))"
    fi
    [ $n = 0 ] && exit 0 || exit 1
fi

if [ -z "$LOG" ] && [ -s "$LAB_CURRENT" ]; then LOG=$(cat "$LAB_CURRENT"); fi
[ -n "$LOG" ] || { echo "[ERROR] --log Log17 のように Log 番号を付けてください" >&2; exit 2; }
LOGDIR="$LAB_ROOT/$LOG"
STATE="$LOGDIR/pod/lab_pod.json"
if [ -d "$LOGDIR" ]; then      # 画面に出しつつ <Log>/ に残す
    exec > >(tee -a "$LOGDIR/lab_stop_$(date +%Y%m%d_%H%M%S).txt") 2>&1
fi
[ -f "$STATE" ] || { echo "[ERROR] $STATE がありません (lab_start.sh で作った Pod の記録). ./lab_stop.sh --check で確かめる" >&2; exit 1; }
POD_ID=$(jq -r '.id' "$STATE")
COST_PER_HR=$(jq -r '.costPerHr' "$STATE")
GPU_ID=$(jq -r '.gpu' "$STATE")
POD_T0=$(jq -r '.created_epoch' "$STATE")
echo "[STOP  ] $LOG の Pod: id $POD_ID  GPU=$GPU_ID  作った時刻 $(jq -r '.created_at' "$STATE")"
lab_ssh_opts

# ---- 1. serve.log を持ち帰る ----
LOG_TRIES=${LAB_LOG_TRIES:-3}       # 合わせて何回試すか (--skip-log は 1 回)
[ $SKIP_LOG = 1 ] && LOG_TRIES=1
LOG_WAIT=${LAB_LOG_WAIT:-10}        # やり直す前に待つ秒数

fetch_serve_log() {         # serve.log を持ち帰る. LOG_TRIES 回ともだめなら戻り値 1
    local i dest
    dest="$LOGDIR/serve.log"
    [ -e "$dest" ] && dest="$LOGDIR/serve_$(date +%Y%m%d_%H%M%S).log"
    for i in $(seq 1 "$LOG_TRIES"); do
        if ! lab_pod_addr; then
            echo "[LOG   ] ($i/$LOG_TRIES) Pod の SSH の IP とポートが API から出ない (状態 ${POD_STATUS:-?})"
        elif pod_scp "root@$POD_IP:/workspace/logs/serve.log" "$dest"; then
            echo "[LOG   ] serve.log を持ち帰った → $dest ($(wc -l < "$dest" | tr -d ' ') 行)"
            return 0
        else
            echo "[LOG   ] ($i/$LOG_TRIES) serve.log の scp に失敗"
            rm -f "$dest"       # 途中まで書いたものは残さない
        fi
        if [ "$i" -lt "$LOG_TRIES" ]; then
            echo "[LOG   ] ${LOG_WAIT} 秒待ってやり直します"
            sleep "$LOG_WAIT"
        fi
    done
    return 1
}

if runpod_api GET "/pods/$POD_ID" >/dev/null; then
    if ! fetch_serve_log; then
        echo "[WARN  ] serve.log を持ち帰れなかった ($LOG_TRIES 回試した). Pod はこのまま Terminate まで消します"
    fi
else
    echo "[STOP  ] Pod (id $POD_ID) は API から見つかりません (HTTP $RUNPOD_HTTP). すでに消えている見込み"
fi

# ---- 2. Terminate ----
if runpod_api GET "/pods/$POD_ID" >/dev/null; then
    runpod_api DELETE "/pods/$POD_ID" >/dev/null || { echo "[ERROR] Pod を消せない (HTTP $RUNPOD_HTTP)"; exit 1; }
    T_END=$(date +%s)
    echo "[STOP  ] Terminate を送った ($(date -r "$T_END" '+%H:%M:%S'))"
else
    T_END=$(jq -r '.terminated_epoch // empty' "$STATE")    # 前に消したときの時刻 (なければ今)
    [ -n "$T_END" ] || T_END=$(date +%s)
fi
gone=0
for _ in $(seq 1 30); do
    if pods=$(runpod_api GET /pods) && lab_valid_pods "$pods" \
       && ! jq -e --arg id "$POD_ID" 'any(.[]; .id == $id and .desiredStatus != "TERMINATED")' <<<"$pods" >/dev/null; then
        gone=1; break
    fi
    sleep 5
done
if [ $gone = 1 ]; then
    echo "[STOP  ] Pod (id $POD_ID) が消えたことを API で確かめた"
else
    echo "[ERROR] 2 分半待っても Pod (id $POD_ID) が API に残っています. Runpod の画面で確かめてください"
fi

# ---- 3. 費用の見込み ----
secs=$((T_END - POD_T0))
awk -v s="$secs" -v c="$COST_PER_HR" -v y="$YEN_PER_USD" 'BEGIN {
    h = s / 3600; usd = h * c
    printf "[COST  ] 借りていた時間 %d 分 %d 秒 (%.2f 時間) × 1時間 %.2f ドル = 約 %.2f ドル (約 %d 円. 1ドル=%d円)\n",
           int(s / 60), s % 60, h, c, usd, int(usd * y + 0.5), y }'
jq --argjson t "$T_END" --argjson s "$secs" \
   '. + {terminated_epoch:$t, terminated_at:($t|strflocaltime("%Y-%m-%d %H:%M:%S")), rented_sec:$s}' \
   "$STATE" > "$STATE.tmp" && mv "$STATE.tmp" "$STATE"

# ---- 4. トンネル ----
close_tunnel
list_pods >/dev/null; n=$?
[ $gone = 1 ] || exit 1
[ $n = 0 ] || { echo "[WARN  ] ほかの Pod が $n 個残っています (./lab_stop.sh --check)"; }
```

### lab_train.sh

```bash
#!/bin/bash
# lab_train.sh — π0.5 の続きからの学習を Runpod で回し, 終わったらモデルと記録を持ち帰って Pod を消す (依頼 49)
#
#   ./lab_train.sh --log Log17             学習 → Hugging Face → KIOXIA → Pod を消す → Mac に通知
#   ./lab_train.sh --log Log17 --dry-run   Pod を借りずに流れだけ確かめる (API・SSH・hf・通知を差し替え,
#                                          書くのは一時フォルダだけ. 差し替えは lab_train_fakes.sh)
#   ./lab_train.sh --log Log17 --stop      この Log の学習の Pod のログを持ち帰って消す (Mac が途中で止まったときなど)
#
#   --gpu          最初に試す GPU (既定 A40). 借りられなければ RTX A6000 → L40S (どれも 48GB) を順に試す
#   --no-fallback  ほかの GPU を試さない (借りられなければ通知して終わる)
#   --limit-hours  上限の時間 (既定 5. Pod を作った時刻から数える). 超えたらログを持ち帰って消す
#   --steps / --init / --exp-name   学習 (既定 1500 / /workspace/ckpt/3999/params / trim_corr_v3)
#   --poll-min     進みを見る間 (既定 5 分)
#   --stall-min    学習のログが何分書かれなければ「止まった」とするか (既定 30 分)
#
# 1. Pod を作る (名前 p2m-train-<Log>. lab_start.sh の p2m-<Log> とは別). 記録は lab/<Log>/train/lab_pod.json
# 2. SSH が通るまで待ち, Pod 側に上限の見張りを置く (上限 + 60 分で, Runpod が Pod に入れる Pod 用の鍵で自分を消す)
# 3. 準備 (lab_start.sh 3a〜3f と同じ. サーバーは起動しない)
# 4. tar を /workspace/data/ へ送り, pod_prep_trim_corr.sh <steps> <init>
# 5. 学習を setsid nohup で始める (Mac とのつながりが切れても止まらない). ログ /workspace/logs/train_<exp>.log,
#    GPU の様子は 30 秒おきに /workspace/logs/gpu_train.csv
# 6. 数分おきにステップ・loss を出す
# 7. 終わったら: 最後のチェックポイントを Hugging Face (非公開) へ上げて一覧を確かめる → ログと一覧を持ち帰る
#    → Pod を消す → KIOXIA の checkpoints/ へ Hugging Face から取り, Pod 側の一覧と名前・バイト数を比べる.
#    上げられなければ, Pod から KIOXIA へ scp で取ってから消す
# 8. 落ちた・止まった・上限を超えた・Ctrl-C: ログを持ち帰ってから消す
# 9. Mac に通知を出す. まとめは lab/<Log>/train/result_<時刻>.txt, ターミナルの出力は lab_train_<時刻>.txt
#
# 鍵 (Runpod・Hugging Face) は KIOXIA の keys/ から読み, 画面・記録には出さない (lab_lib.sh).
# Pod 側の見張りには Mac の鍵を送らない.

set -u
set -o pipefail

# 中身は全部 main の中に置き, 最後の1行で呼ぶ (依頼 47 と同じ. 動いている途中でこのファイルが書き換わっても壊れない)
main() {
HERE="$(cd "$(dirname "$0")" && pwd)"
# shellcheck source=lab_lib.sh
. "$HERE/lab_lib.sh"

GPU=A40; FALLBACK=1; LIMIT_HOURS=5; STEPS=1500; INIT=/workspace/ckpt/3999/params; EXP=trim_corr_v3
POLL_MIN=5; STALL_MIN=30; LOG=""; DRY_RUN=0; MODE=train
while [ $# -gt 0 ]; do
    case "$1" in
        --log) LOG="${2:-}"; shift 2 ;;
        --gpu) GPU="${2:-}"; shift 2 ;;
        --no-fallback) FALLBACK=0; shift ;;
        --limit-hours) LIMIT_HOURS="${2:-}"; shift 2 ;;
        --steps) STEPS="${2:-}"; shift 2 ;;
        --init) INIT="${2:-}"; shift 2 ;;
        --exp-name) EXP="${2:-}"; shift 2 ;;
        --poll-min) POLL_MIN="${2:-}"; shift 2 ;;
        --stall-min) STALL_MIN="${2:-}"; shift 2 ;;
        --stop) MODE=stop; shift ;;
        --dry-run) DRY_RUN=1; shift ;;
        -h|--help) sed -n '2,29p' "$0"; exit 0 ;;
        *) echo "[ERROR] 知らない引数: $1  (./lab_train.sh --help)" >&2; exit 2 ;;
    esac
done
[ -n "$LOG" ] || { echo "[ERROR] --log Log17 のように Log 番号を付けてください" >&2; exit 2; }
num() { awk -v x="$1" 'BEGIN { exit !(x ~ /^[0-9]+(\.[0-9]+)?$/ && x > 0) }'; }
for v in LIMIT_HOURS POLL_MIN STALL_MIN; do num "${!v}" || { echo "[ERROR] $v は 0 より大きい数: ${!v}" >&2; exit 2; }; done
[[ "$STEPS" =~ ^[1-9][0-9]*$ ]] || { echo "[ERROR] --steps は 1 以上の整数: $STEPS" >&2; exit 2; }
[[ "$EXP" =~ ^[A-Za-z0-9_.-]+$ ]] || { echo "[ERROR] --exp-name は英数字と _ . - だけ: $EXP" >&2; exit 2; }
[[ "$INIT" =~ ^[A-Za-z0-9_./-]+$ ]] || { echo "[ERROR] --init に使えない文字がある: $INIT" >&2; exit 2; }
case "$GPU" in *" "*) GPU_ID="$GPU" ;; *) GPU_ID="NVIDIA $GPU" ;; esac
secs() { awk -v x="$1" -v m="$2" 'BEGIN { printf "%d", x * m }'; }
LIMIT_SEC=$(secs "$LIMIT_HOURS" 3600); POLL_SEC=$(secs "$POLL_MIN" 60); STALL_SEC=$(secs "$STALL_MIN" 60)
WD_MARGIN_SEC=3600          # Pod 側の見張りは Mac の上限のこれだけあと (Mac が先に片付けるのがふつう)
WRAP_EXTEND_SEC=10800       # 片付け (上げる・持ち帰る) を始めたら, Pod 側の見張りを今から 3 時間あとへ延ばす
CREATE_WAIT=30; SSH_WAIT=10; SSH_TRIES=90; LOGIN_WAIT=5; LOGIN_TRIES=60; GONE_WAIT=5; GONE_TRIES=30
FETCH_TRIES=3; FETCH_WAIT=10
FALLBACK_GPUS=("NVIDIA RTX A6000" "NVIDIA L40S")    # A40 と同じ 48GB. この順に試す

DATA_ROOT=/Volumes/KIOXIA/r2r2r-data
NOTIFY_TITLE="lab_train $LOG"
if [ $DRY_RUN = 1 ]; then
    # shellcheck source=lab_train_fakes.sh
    . "$HERE/lab_train_fakes.sh"      # DATA_ROOT・LAB_ROOT・鍵を一時フォルダへ, API・SSH・hf・通知を偽物に, 待ちを短く
fi
CKPT_ROOT="$DATA_ROOT/checkpoints"
DATA_NAME=mecharm_redblock_box_teach_v1_trim2_corr_v3
TAR="$DATA_ROOT/datasets/$DATA_NAME/${DATA_NAME}_raw_episodes.tar"
ADD_TRIM="$DATA_ROOT/lab/Log11/pod/add_trim_config.py"
CONFIG=pi05_mecharm_trim_corr_lora
HF_REPO_IN=PixelstoMotors/pi05-mecharm-trim-lora-v1           # 続きから学習する 3999 (lab_start.sh と同じ)
HF_REPO_OUT=PixelstoMotors/pi05-mecharm-trim-corr-lora-v1     # 上げる先 (非公開). 名前は checkpoints/ のフォルダ名に合わせる
CKPT_NAME=pi05_mecharm_trim_corr_lora_v1                      # KIOXIA の checkpoints/<これ>/<ステップ>/
CKPT_IN=/workspace/ckpt/3999
POD_EXP_DIR=/workspace/openpi/checkpoints/$CONFIG/$EXP
TRAIN_LOG=/workspace/logs/train_$EXP.log
GPU_LOG=/workspace/logs/gpu_train.csv
RUN_LOG=/workspace/logs/train_run.log
EXIT_FILE=/workspace/logs/train_exit_code
PREP_LOG=/workspace/logs/prep_trim_corr.log
LAST_STEP=$((STEPS - 1))      # openpi は 0 から数え, 最後のステップ (num_train_steps - 1) を必ず保存する

# ---- 書く前に KIOXIA のマウントを確かめる ----
if [ ! -d "$DATA_ROOT" ]; then
    echo "[ERROR] SSD 未マウント: $DATA_ROOT" >&2; exit 1
fi
LOGDIR="$LAB_ROOT/$LOG/train"
STATE="$LOGDIR/lab_pod.json"
mkdir -p "$LOGDIR" || { echo "[ERROR] $LOGDIR を作れない" >&2; exit 1; }
LOGFILE="$LOGDIR/lab_train_$(date +%Y%m%d_%H%M%S)$([ $MODE = stop ] && echo _stop).txt"
trap '' PIPE                # ターミナルが閉じて tee が終わっても, 書けないだけで続ける (Pod を消すところまで行く)
exec > >(tee -a "$LOGFILE") 2>&1
echo "[LOG   ] ターミナルの出力を残します → $LOGFILE"

lab_need_key "$RUNPOD_KEY_FILE" "Runpod の API キー"
lab_need_key "$HF_TOKEN_FILE" "Hugging Face の鍵"
[ -s "$POD_SSH_KEY" ] || { echo "[ERROR] Pod に入る SSH の鍵がありません: $POD_SSH_KEY" >&2; exit 1; }
[ -s "$POD_SSH_KEY.pub" ] || { echo "[ERROR] SSH の公開鍵がありません: $POD_SSH_KEY.pub" >&2; exit 1; }
lab_ssh_opts
pssh() { pod_ssh "$@" < /dev/null; }      # 標準入力を Pod へ渡さない ssh

# ---- 段階ごとの秒数 ----
T_NAMES=(); T_SECS=()
CUR_STAGE="(始める前)"; STAGE_T0=$SECONDS
POD_ID=""; POD_T0=""; COST_PER_HR=0; GPU_USED=""; WRAPPING=0; TRAIN_T0=""
stage() {                   # stage 名前 [nolimit]  (nolimit: 上限の確かめをしない. 見守りは様子を見てから上限を見る)
    CUR_STAGE="$1"; STAGE_T0=$SECONDS; echo; echo "=== $1  ($(date '+%H:%M:%S'))"
    if [ "${2:-}" != nolimit ] && [ $WRAPPING = 0 ] && [ -n "$POD_T0" ] && [ $(( $(date +%s) - POD_T0 )) -ge "$LIMIT_SEC" ]; then
        wrap_fail timeout "上限 $LIMIT_HOURS 時間を超えた (「$1」の前)"
    fi
}
stage_done() { T_NAMES+=("$CUR_STAGE"); T_SECS+=($((SECONDS - STAGE_T0))); echo "    ($((SECONDS - STAGE_T0)) 秒)"; }
summary() {
    local i
    echo; echo "=== かかった時間"
    for i in "${!T_NAMES[@]}"; do printf '  %-36s %6d 秒\n' "${T_NAMES[$i]}" "${T_SECS[$i]}"; done
}
hm() { local x=$1; [ "$x" -lt 0 ] && x=0; printf '%d:%02d' $((x / 3600)) $((x % 3600 / 60)); }

# ---- 通知とまとめ ----
RESULT="$LOGDIR/result_$(date +%Y%m%d_%H%M%S).txt"
finish() {                  # finish 終了コード 通知の文 (まとめを書き, 通知を出して終わる)
    local rc="$1" msg="$2"
    FINISHED=1
    summary
    {
        echo "lab_train.sh $LOG  $(date '+%Y-%m-%d %H:%M:%S')"
        echo "結果: $msg"
        echo "${RESULT_LINES:-}"
    [ "${WD_OK:-1}" = 1 ] || echo "※ Pod 側の見張りは働いていなかった (${wd:-答えなし}). ./lab_stop.sh --check で Pod が残っていないか確かめる"
        echo "ターミナルの記録: $LOGFILE"
    } > "$RESULT"
    echo; echo "[RESULT] $msg"; echo "[RESULT] まとめ → $RESULT"
    lab_notify "$NOTIFY_TITLE" "$msg" "$rc"
    exit "$rc"
}
early_fail() {              # Pod を作る前に止まる (借りていないので消すものはない)
    echo; echo "[STOP  ] 「${CUR_STAGE}」で止まりました: $*"
    RESULT_LINES="Pod は借りていません"
    finish 1 "失敗: $* (Pod は借りていません)"
}

# ---- 同じ Log の lab_train.sh を2つ同時に動かさない (lab_start.sh と同じ形の印. 別のフォルダなのでぶつからない) ----
LOCK="$LOGDIR/.lab_train.lock"
LOCKED=0
FINISHED=0
cleanup() {
    # 思わぬところで終わった (set -u の止まりなど) ときも, 借りた Pod は残さない
    if [ "$FINISHED" = 0 ] && [ -n "$POD_ID" ]; then
        FINISHED=1
        echo "[ERROR] lab_train.sh が思わぬところで終わりました (「${CUR_STAGE}」). ログを持ち帰って Pod を消します"
        ( wrap_fail unexpected "lab_train.sh が思わぬところで終わった (「${CUR_STAGE}」)" )
    fi
    if [ $LOCKED = 1 ] && [ "$(cat "$LOCK/pid" 2>/dev/null)" = "$$" ]; then rm -rf "$LOCK"; fi
    [ -n "${CAFF_PID:-}" ] && kill "$CAFF_PID" 2>/dev/null
}
trap cleanup EXIT
if ! mkdir "$LOCK" 2>/dev/null; then
    other=$(cat "$LOCK/pid" 2>/dev/null)
    if [ -n "$other" ] && kill -0 "$other" 2>/dev/null; then
        echo "[ERROR] $LOG の lab_train.sh がもう動いています (pid $other). 止めるならそのターミナルで Ctrl-C (ログを持ち帰って Pod を消します)"
    else
        echo "[ERROR] $LOG の lab_train.sh の印が残っています (pid ${other:-?}・動いていないように見える)"
        echo "        ほかに動いていないことを確かめてから, 印を消して打ち直してください: rm -r $LOCK"
    fi
    exit 1
fi
LOCKED=1
echo $$ > "$LOCK/pid" || { echo "[ERROR] $LOCK/pid を書けない"; exit 1; }

save_state() {              # save_state jq の式 [--arg/--argjson ...]
    local f="$1"; shift
    jq "$@" "$f" "$STATE" > "$STATE.tmp" && mv "$STATE.tmp" "$STATE"
}

# ---- 片付け (持ち帰る・消す) ----
dest_of() {                 # dest_of 名前 → <train>/名前 (あれば 名前_<時刻>)
    local d="$LOGDIR/$1"
    if [ -e "$d" ]; then
        case "$1" in *.*) d="$LOGDIR/${1%.*}_$(date +%Y%m%d_%H%M%S).${1##*.}" ;; *) d="${d}_$(date +%Y%m%d_%H%M%S)" ;; esac
    fi
    echo "$d"
}

fetch_logs() {              # 学習のログ・GPU のログなどを持ち帰る. Pod に入れなければ FETCH_TRIES 回まで待ってやり直す
    local i f dest got=0 listing
    for i in $(seq 1 "$FETCH_TRIES"); do
        if lab_pod_addr && pssh true >/dev/null; then
            for f in "$TRAIN_LOG" "$GPU_LOG" "$RUN_LOG" "$PREP_LOG" /workspace/logs/watchdog.log; do
                dest=$(dest_of "$(basename "$f")")
                if pod_scp "root@$POD_IP:$f" "$dest" >/dev/null; then
                    echo "[LOG   ] $(basename "$f") を持ち帰った → $dest ($(wc -l < "$dest" | tr -d ' ') 行)"; got=$((got + 1))
                else
                    rm -f "$dest"; echo "[LOG   ] $(basename "$f") は Pod にない (持ち帰れなかった)"
                fi
            done
            # Pod 側のチェックポイントの一覧 (全部のステップ. train_state も含む. 名前とバイト数)
            dest=$(dest_of pod_checkpoints.tsv)
            listing=$(pssh ": lt=ls_all; cd $POD_EXP_DIR 2>/dev/null && find . -type f -printf '%P\t%s\n' | LC_ALL=C sort | sed 's/^/F\t/'")
            grep $'^F\t' <<<"$listing" | cut -f2- > "$dest"
            if [ -s "$dest" ]; then echo "[LOG   ] Pod 側のチェックポイントの一覧 → $dest ($(wc -l < "$dest" | tr -d ' ') ファイル)"
            else rm -f "$dest"; echo "[LOG   ] Pod 側にチェックポイントはない ($POD_EXP_DIR)"; fi
            FETCHED=$got
            return 0
        fi
        echo "[LOG   ] ($i/$FETCH_TRIES) Pod に入れない (状態 ${POD_STATUS:-?})"
        [ "$i" -lt "$FETCH_TRIES" ] && { echo "[LOG   ] $FETCH_WAIT 秒待ってやり直します"; sleep "$FETCH_WAIT"; }
    done
    FETCHED=0
    return 1
}

delete_pod() {              # Pod を消し (停止ではなく削除), 一覧からも消えたのを API で確かめ, 費用を出す. 消せなければ 1
    local tries pods gone=0 t_end s sent=1
    echo
    echo "=== Pod を消す (id $POD_ID)  ($(date '+%H:%M:%S'))"
    lab_pod_kind "$POD_ID"; local known=$?
    if [ $known = 0 ] && [ "$LAB_POD_KIND" = gone ]; then
        echo "[STOP  ] Pod (id $POD_ID) はもう API にない"
        t_end=$(jq -r '.terminated_epoch // empty' "$STATE" 2>/dev/null); [ -n "$t_end" ] || t_end=$(date +%s)
    else
        sent=0
        for tries in 1 2 3; do
            if runpod_api DELETE "/pods/$POD_ID" >/dev/null; then sent=1; break; fi
            echo "[STOP  ] ($tries/3) Pod を消せない (HTTP $RUNPOD_HTTP)"
            [ $tries -lt 3 ] && sleep "$GONE_WAIT"
        done
        t_end=$(date +%s)
        [ $sent = 1 ] && echo "[STOP  ] 削除 (Terminate) を送った ($(date -r "$t_end" '+%H:%M:%S'))"
    fi
    for _ in $(seq 1 "$([ "${sent:-1}" = 1 ] && echo "$GONE_TRIES" || echo 1)"); do
        if pods=$(runpod_api GET /pods) && lab_valid_pods "$pods" \
           && ! jq -e --arg id "$POD_ID" 'any(.[]; .id == $id and .desiredStatus != "TERMINATED")' <<<"$pods" >/dev/null; then
            gone=1; break
        fi
        sleep "$GONE_WAIT"
    done
    s=$((t_end - POD_T0))
    COST_LINE=$(lab_cost_line "$s" "$COST_PER_HR")
    save_state '. + {terminated_epoch:$t, terminated_at:($t|strflocaltime("%Y-%m-%d %H:%M:%S")), rented_sec:$s, gone_confirmed:($g == 1)}' \
        --argjson t "$t_end" --argjson s "$s" --argjson g "$gone"
    if [ $gone = 1 ]; then
        echo "[STOP  ] Pod (id $POD_ID) が消えたことを API で確かめた"
    else
        echo "[ERROR] Pod (id $POD_ID) が API の一覧に残っています$([ $sent = 0 ] && echo " (削除を受け付けなかった)"). Runpod の画面で確かめてください"
    fi
    echo "[COST  ] $COST_LINE  GPU=$GPU_USED"
    POD_GONE=$gone
    [ $gone = 1 ]
}

pod_left_msg() { echo "Pod (id $POD_ID) が残っているかもしれません. ./lab_train.sh --log $LOG --stop か Runpod の画面で消してください"; }

wrap_fail() {               # wrap_fail 種類 わけ → ログを持ち帰ってから Pod を消し, 通知して終わる (終了コード 1)
    local kind="$1" why="$2" logs
    WRAPPING=1; trap '' INT TERM HUP     # ここからは Ctrl-C でも止めない (Pod を消すところまで行く. 二重には入らない)
    echo; echo "[STOP  ] 「${CUR_STAGE}」で止めます: $why"
    if [ -z "$POD_ID" ]; then RESULT_LINES="Pod は借りていません"; finish 1 "失敗: $why (Pod は借りていません)"; fi
    # 学習を止めてからログを持ち帰る (消す前に書き終わったログを取る. 止められなくても続ける)
    if [ "$kind" != crash ] && [ -n "$TRAIN_T0" ]; then
        pssh "$(lab_train_kill_cmd)" >/dev/null
    fi
    if fetch_logs; then logs="ログを持ち帰った ($FETCHED 個)"; else logs="ログは持ち帰れなかった (Pod に入れない)"; fi
    if delete_pod; then
        RESULT_LINES=$(printf '%s\n' "わけ: $why" "$logs → $LOGDIR" "Pod (id $POD_ID) は消した (API で確かめた)" "$COST_LINE")
        finish 1 "失敗: $why. $logs. Pod は消しました. ${COST_LINE#借りていた時間 }"
    else
        RESULT_LINES=$(printf '%s\n' "わけ: $why" "$logs → $LOGDIR" "$(pod_left_msg)" "${COST_LINE:-}")
        finish 1 "失敗: $why. $logs. $(pod_left_msg)"
    fi
}

on_signal() { wrap_fail signal "$1 で止めた"; }
trap 'on_signal Ctrl-C' INT
trap 'on_signal "TERM (kill)"' TERM
trap 'on_signal "ターミナルが閉じた (HUP)"' HUP

# ---- KIOXIA の checkpoints/ に置く ----
POD_LIST=""                  # Pod 側の最後のチェックポイントの一覧 (パス<TAB>バイト数. train_state なし)
compare_with_pod() {        # compare_with_pod フォルダ → Pod 側の一覧と名前・バイト数が全部同じなら 0
    local mine d rc
    mine=$(mktemp)
    if ! lab_list_files "$1" > "$mine" || [ ! -s "$POD_LIST" ]; then
        echo "[KIOXIA] 一覧を作れない (KIOXIA 側 $1 か Pod 側 $POD_LIST). 合ったとはしない"; rm -f "$mine"; return 1
    fi
    d=$(diff "$mine" "$POD_LIST"); rc=$?; rm -f "$mine"
    [ $rc = 0 ] && return 0          # diff の終了コードが 0 のときだけ「合った」(2 = 読めない も合わないとする)
    echo "[KIOXIA] Pod 側の一覧と合わない (diff の終了コード $rc. < KIOXIA / > Pod. 先頭 20 行):"
    head -20 <<<"$d" | sed 's/^/         /'
    return 1
}
place_ckpt() {              # place_ckpt hf|scp → KIOXIA の checkpoints/<CKPT_NAME>/<ステップ>/ に置いて確かめる. KIOXIA_MSG に結果
    local how="$1" parent="$CKPT_ROOT/$CKPT_NAME" dest tmp n bytes
    dest="$parent/$CKPT_STEP"
    if [ ! -d "$DATA_ROOT" ]; then KIOXIA_MSG="KIOXIA がマウントされていない (置けなかった)"; return 1; fi
    if [ -e "$dest" ] || [ -L "$dest" ]; then         # 前からあるものは上書き・移動・削除しない. 中身が同じかだけを見る
        if compare_with_pod "$dest"; then KIOXIA_MSG="$dest はもとからあり, Pod 側と全部同じ (書き換えていない)"; return 0; fi
        KIOXIA_MSG="$dest がもとからあり, Pod 側と違う. 上書きしなかった"; return 1
    fi
    mkdir -p "$parent" || { KIOXIA_MSG="$parent を作れない"; return 1; }
    tmp="$parent/.incoming_${CKPT_STEP}_$(date +%Y%m%d_%H%M%S)_$$"
    mkdir "$tmp" || { KIOXIA_MSG="$tmp を作れない"; return 1; }
    if [ "$how" = hf ]; then
        echo "[KIOXIA] Hugging Face ($HF_REPO_OUT) から取ります → $tmp"
        lab_hf_download_mac "$HF_REPO_OUT" "$tmp" || { KIOXIA_MSG="Hugging Face から取れなかった (途中のものは $tmp)"; return 1; }
    else
        echo "[KIOXIA] Pod から scp で取ります → $tmp"
        pod_scp -r "root@$POD_IP:$POD_CKPT/params" "root@$POD_IP:$POD_CKPT/assets" \
                   "root@$POD_IP:$POD_CKPT/_CHECKPOINT_METADATA" "$tmp/" \
            || { KIOXIA_MSG="Pod から scp で取れなかった (途中のものは $tmp)"; return 1; }
    fi
    rm -rf "${tmp:?}/.cache" "${tmp:?}/.gitattributes"     # hf download の印 (自分で作った一時フォルダの中だけ)
    if ! compare_with_pod "$tmp"; then KIOXIA_MSG="取ったものが Pod 側の一覧と合わない (そのまま $tmp に置いた)"; return 1; fi
    # mkdir は「なければ作る」を1回で行う (あれば失敗). 作れたら中身を移す (確かめと移すの間に別の実行が作っても上書きしない)
    if ! mkdir "$dest" 2>/dev/null; then KIOXIA_MSG="$dest が途中でできた. 上書きしない (取ったものは $tmp)"; return 1; fi
    # ._* (exFAT が付ける)・.DS_Store なども移す (残ると rmdir が失敗する. codex R3)
    if ! ( shopt -s dotglob nullglob; mv "$tmp"/* "$dest"/ ) || ! rmdir "$tmp"; then KIOXIA_MSG="$tmp から $dest へ移せない (途中まで移したかもしれない)"; return 1; fi
    compare_with_pod "$dest" || { KIOXIA_MSG="$dest に移したあとの一覧が Pod 側と合わない"; return 1; }
    n=$(wc -l < "$POD_LIST" | tr -d ' '); bytes=$(awk -F'\t' '{s += $2} END {printf "%d", s}' "$POD_LIST")
    KIOXIA_MSG="$dest に置いた ($n ファイル $bytes バイト. Pod 側と名前・バイト数が全部合った)"
}

extend_watchdog() {         # Pod 側の見張りの時刻を, 今から WRAP_EXTEND_SEC あとへ延ばす (片付けの途中で消えないように)
    local t=$(( $(date +%s) + WRAP_EXTEND_SEC ))
    if pssh ": lt=deadline; echo $t > /workspace/logs/.lab_deadline.tmp && mv /workspace/logs/.lab_deadline.tmp /workspace/logs/.lab_deadline" >/dev/null; then
        echo "[WATCH ] Pod 側の見張りを $(date -r "$t" '+%H:%M') まで延ばした (上げる・持ち帰る間に消えないように)"
    else
        echo "[WARN  ] Pod 側の見張りを延ばせなかった. 前の時刻 ($(date -r "$WD_AT" '+%H:%M')) を過ぎると片付けの途中でも Pod が消える"
    fi
}

wrap_success() {            # 学習が最後まで終わった: 上げる → 持ち帰る → 消す → KIOXIA へ
    local hf_ok=0 hf_line out k_ok=0 k_how="" logs msg rc
    WRAPPING=1; trap '' INT TERM HUP
    CKPT_STEP=$S_CKPT
    POD_CKPT="$POD_EXP_DIR/$CKPT_STEP"
    echo; echo "[TRAIN ] 学習が終わりました (最後のチェックポイント $CKPT_STEP, loss ${S_LOSS})"
    extend_watchdog

    stage "7a. Pod 側の一覧 ($CKPT_STEP)"
    POD_LIST=$(dest_of "pod_files_$CKPT_STEP.tsv")
    out=$(pssh "$(lab_train_list_cmd "$POD_CKPT")"); local list_rc=$?
    grep $'^F\t' <<<"$out" | cut -f2- > "$POD_LIST"
    if [ $list_rc = 0 ] && [ -s "$POD_LIST" ] && grep -q $'^_CHECKPOINT_METADATA\t' "$POD_LIST"; then
        echo "[LIST  ] $(wc -l < "$POD_LIST" | tr -d ' ') ファイル $(awk -F'\t' '{s += $2} END {printf "%d", s}' "$POD_LIST") バイト (train_state なし) → $POD_LIST"
    else
        stage_done; wrap_fail list "Pod 側のチェックポイント ($POD_CKPT) の一覧を取れない"
    fi
    stage_done

    stage "7b. Hugging Face へ上げる (${HF_REPO_OUT}・非公開)"
    out=$(pssh "cd /workspace && HF_HUB_DISABLE_PROGRESS_BARS=1 python3 /workspace/r2r2r/pi05/openpi_addon/hf_upload_ckpt.py --dir $POD_CKPT --repo $HF_REPO_OUT --message 'lab_train.sh $LOG: $CONFIG $EXP step $CKPT_STEP'")
    echo "$out" | grep -v '^$'
    hf_line=$(grep '^HFUP ' <<<"$out" | tail -1)
    case "$hf_line" in "HFUP ok "*|"HFUP same "*) hf_ok=1 ;; esac
    HF_MSG=${hf_line#HFUP }; [ -n "$HF_MSG" ] || HF_MSG="答えがない (ssh が切れたなど)"
    stage_done

    if [ $hf_ok = 0 ]; then         # 上げられなければ, Pod を消す前に Pod から KIOXIA へ取る
        stage "7c. KIOXIA へ Pod から取る (Hugging Face に上げられなかったため)"
        extend_watchdog
        place_ckpt scp && k_ok=1; k_how=scp
        echo "[KIOXIA] $KIOXIA_MSG"
        stage_done
    fi

    stage "7d. ログを持ち帰る"
    if fetch_logs; then logs="ログを持ち帰った"; else logs="ログは持ち帰れなかった"; fi
    stage_done
    delete_pod; local gone=$?

    if [ $hf_ok = 1 ]; then         # Hugging Face にあるので, Pod を消してから取る (取れなくても Hugging Face に残る)
        stage "7e. KIOXIA へ Hugging Face から取る"
        place_ckpt hf && k_ok=1; k_how=hf
        echo "[KIOXIA] $KIOXIA_MSG"
        stage_done
    fi

    RESULT_LINES=$(printf '%s\n' "学習: $CONFIG --exp-name=$EXP  最後のチェックポイント $CKPT_STEP  最後の loss ${S_LOSS} (Step ${S_LOGSTEP})" \
        "Hugging Face ($HF_REPO_OUT): $HF_MSG" "KIOXIA: $KIOXIA_MSG" "$logs → $LOGDIR" \
        "$([ $gone = 0 ] && echo "Pod (id $POD_ID) は消した (API で確かめた)" || pod_left_msg)" "${COST_LINE:-}")
    if [ $hf_ok = 1 ] && [ $k_ok = 1 ] && [ $gone = 0 ]; then
        rc=0; msg="成功: 学習が終わりました (step $CKPT_STEP, loss ${S_LOSS}). Hugging Face と KIOXIA に置き, Pod を消しました. ${COST_LINE#借りていた時間 }"
    else
        rc=1; msg="学習は終わりました (step $CKPT_STEP) が,"
        [ $hf_ok = 0 ] && msg="$msg Hugging Face に上げられなかった ($HF_MSG)."
        if [ $k_ok = 1 ]; then msg="$msg KIOXIA には置いた ($k_how)."; else msg="$msg KIOXIA に置けなかった ($KIOXIA_MSG)."; fi
        if [ $gone = 0 ]; then msg="$msg Pod は消しました."; else msg="$msg $(pod_left_msg)"; fi
    fi
    finish "$rc" "$msg"
}

# ---- --stop: 残っている学習の Pod のログを持ち帰って消す ----
if [ $MODE = stop ]; then
    CUR_STAGE="--stop"
    [ -f "$STATE" ] || { echo "[ERROR] $STATE がありません (lab_train.sh で作った Pod の記録). ./lab_stop.sh --check で Pod の一覧を見る"; exit 1; }
    POD_ID=$(jq -r '.id // ""' "$STATE"); POD_T0=$(jq -r '.created_epoch // 0' "$STATE")
    COST_PER_HR=$(jq -r '.costPerHr // 0' "$STATE"); GPU_USED=$(jq -r '.gpu // ""' "$STATE")
    TRAIN_T0=$(jq -r '.train_started_epoch // ""' "$STATE")
    EXP=$(jq -r --arg e "$EXP" '.exp // $e' "$STATE")
    POD_EXP_DIR=/workspace/openpi/checkpoints/$CONFIG/$EXP; TRAIN_LOG=/workspace/logs/train_$EXP.log
    [ -n "$POD_ID" ] || { echo "[ERROR] $STATE に Pod の id がない"; exit 1; }
    echo "[STOP  ] $LOG の学習の Pod: id $POD_ID  GPU=$GPU_USED  作った時刻 $(jq -r '.created_at // "?"' "$STATE")"
    wrap_fail stop "--stop で止めた"
fi

echo "[LAB   ] $(date '+%Y-%m-%d %H:%M:%S')  学習  GPU=$GPU_ID$([ $FALLBACK = 1 ] && echo " (借りられなければ ${FALLBACK_GPUS[*]})")"
echo "         $CONFIG --exp-name=$EXP  steps=$STEPS  init=$INIT  上限 $LIMIT_HOURS 時間  記録 $LOGDIR$([ $DRY_RUN = 1 ] && echo '  ドライラン (Pod は借りない)')"

# ---- 0. 送るものと Mac の道具 ----
stage "0. 送るものと Mac の道具を確かめる"
[ -f "$TAR" ] || early_fail "tar がない: $TAR"
[ -f "$ADD_TRIM" ] || early_fail "add_trim_config.py がない: $ADD_TRIM"
[ -f "$HERE/pi05/openpi_addon/pod_prep_trim_corr.sh" ] && [ -f "$HERE/pi05/openpi_addon/hf_upload_ckpt.py" ] \
    || early_fail "pi05/openpi_addon/ の pod_prep_trim_corr.sh・hf_upload_ckpt.py がない"
lab_have_hf_cli || early_fail "Mac に hf (huggingface_hub) がない. KIOXIA へ取れないので借りずに止めます"
if [ -e "$CKPT_ROOT/$CKPT_NAME/$LAST_STEP" ]; then
    echo "[WARN  ] $CKPT_ROOT/$CKPT_NAME/$LAST_STEP がもうあります. 学習のあと上書きはせず, 中身が同じかだけを見ます"
fi
echo "[DATA  ] tar $(stat -f '%z' "$TAR" 2>/dev/null || wc -c < "$TAR") バイト  ($TAR)"
lab_keep_awake
stage_done

# ---- 1. Pod を作る ----
stage "1. Pod を作る"
if [ -f "$STATE" ]; then
    OLD_ID=$(jq -r '.id // ""' "$STATE" 2>/dev/null)
    if [ -n "$OLD_ID" ] && [ -z "$(jq -r '.gone_confirmed // empty | select(. == true)' "$STATE" 2>/dev/null)" ]; then
        lab_pod_kind "$OLD_ID" || early_fail "前の学習の Pod (id $OLD_ID) の様子を API で確かめられない (HTTP ${RUNPOD_HTTP:-?}). 二重に借りないよう止めます"
        case "$LAB_POD_KIND" in
            running|stopped)
                early_fail "前の学習の Pod (id ${OLD_ID}・$LAB_POD_STATUS) が残っている. ./lab_train.sh --log $LOG --stop で持ち帰って消してから打ち直す" ;;
        esac
    fi
    lab_archive_state "$STATE" || early_fail "古い $STATE を残せない"
    echo "[POD   ] 前の記録は $LAB_ARCHIVED に残しました"
fi
others=$(runpod_api GET /pods) || early_fail "Pod の一覧を API から取れない (HTTP $RUNPOD_HTTP)"
lab_valid_pods "$others" || early_fail "Pod の一覧の答えが読めない. 二重に借りないよう止めます"
same=$(jq -r --arg name "p2m-train-$LOG" '.[] | select(.name == $name and .desiredStatus != "TERMINATED") | .id' <<<"$others")
[ -z "$same" ] || early_fail "記録にない p2m-train-$LOG の Pod (id $(echo $same)) が残っている. 二重に借りないよう止めます (./lab_stop.sh --check)"
n_others=$(jq 'length' <<<"$others")
if [ "$n_others" -gt 0 ]; then
    echo "[WARN  ] ほかに Pod が $n_others 個あります (消し忘れなら ./lab_stop.sh --check で確かめる):"
    jq -r '.[] | "         \(.id)  \(.name)  \(.desiredStatus)  \(.costPerHr) ドル/時"' <<<"$others"
fi
GPUS=("$GPU_ID")
if [ $FALLBACK = 1 ]; then for g in "${FALLBACK_GPUS[@]}"; do [ "$g" = "$GPU_ID" ] || GPUS+=("$g"); done; fi
for gi in "${!GPUS[@]}"; do
    g=${GPUS[$gi]}
    tries=$([ "$gi" = 0 ] && echo 5 || echo 2)
    echo "[POD   ] $g を借ります (空きがなければ $CREATE_WAIT 秒おきに $tries 回まで)"
    body=$(jq -n --arg name "p2m-train-$LOG" --arg gpu "$g" --arg tpl "$LAB_TEMPLATE_ID" --arg img "$LAB_IMAGE" \
              --arg pk "$(cat "$POD_SSH_KEY.pub")" \
              '{name:$name, templateId:$tpl, imageName:$img, gpuTypeIds:[$gpu], gpuCount:1,
                cloudType:"SECURE", containerDiskInGb:200, volumeInGb:0, ports:["22/tcp"],
                env:{PUBLIC_KEY:$pk}}')
    busy=0
    for attempt in $(seq 1 "$tries"); do
        out=$(mktemp)
        runpod_api POST /pods "$body" > "$out"; ok=$?        # $(...) に入れない (RUNPOD_HTTP を残す)
        resp=$(cat "$out"); rm -f "$out"
        if [ $ok = 0 ]; then
            POD_ID=$(jq -r '.id // ""' <<<"$resp")
            [ -n "$POD_ID" ] || early_fail "API の答えに Pod の id がない"
            COST_PER_HR=$(jq -r '.costPerHr // 0' <<<"$resp"); GPU_USED=$g
            break 2
        fi
        msg=$(jq -r '.error // .message // .' <<<"$resp" 2>/dev/null || echo "$resp")
        echo "[POD   ] 作れなかった ($g $attempt/$tries, HTTP $RUNPOD_HTTP): $msg"
        case "$msg" in
            *resources*|*"no longer any instances"*|*"not available"*|*"no instances"*) busy=1 ;;
            *) early_fail "Pod を作れない: $msg" ;;
        esac
        [ "$attempt" -lt "$tries" ] && { echo "[POD   ] $CREATE_WAIT 秒待って作り直します"; sleep "$CREATE_WAIT"; }
    done
    [ $busy = 1 ] && echo "[POD   ] $g は空きがない"
done
[ -n "$POD_ID" ] || early_fail "どの GPU (${GPUS[*]}) も借りられなかった"
POD_T0=$(date +%s)
jq -n --arg id "$POD_ID" --arg gpu "$GPU_USED" --arg log "$LOG" --argjson cost "$COST_PER_HR" --argjson t0 "$POD_T0" \
      --arg exp "$EXP" --argjson steps "$STEPS" --arg config "$CONFIG" --argjson lim "$LIMIT_SEC" \
      '{id:$id, kind:"train", gpu:$gpu, log:$log, costPerHr:$cost, created_epoch:$t0,
        created_at:($t0|strflocaltime("%Y-%m-%d %H:%M:%S")), config:$config, exp:$exp, steps:$steps,
        limit_sec:$lim, limit_at:(($t0 + $lim)|strflocaltime("%Y-%m-%d %H:%M:%S"))}' > "$STATE"
echo "[POD   ] 作った: id $POD_ID  GPU=$GPU_USED  1時間 $COST_PER_HR ドル  (記録 $STATE)"
echo "[POD   ] 上限: $(date -r $((POD_T0 + LIMIT_SEC)) '+%m-%d %H:%M') ($LIMIT_HOURS 時間) を過ぎたら, ログを持ち帰って消します"
stage_done

# ---- 2. SSH が通るまで待ち, Pod 側に上限の見張りを置く ----
stage "2. Pod が立ち上がるまで待つ"
for _ in $(seq 1 "$SSH_TRIES"); do lab_pod_addr && break; sleep "$SSH_WAIT"; done
[ -n "${POD_IP:-}" ] && [ -n "${SSH_PORT:-}" ] || wrap_fail prep "待っても SSH の IP とポートが出ない"
echo "[POD   ] SSH の IP とポートを API から受け取った (<POD_IP>:<SSH_PORT>)"
for _ in $(seq 1 "$LOGIN_TRIES"); do pssh true >/dev/null && break; sleep "$LOGIN_WAIT"; done
pssh 'echo "[POD   ] 入れた: $(hostname)"; nvidia-smi --query-gpu=name,memory.total --format=csv,noheader' \
    || wrap_fail prep "Pod に SSH で入れない"
WD_AT=$((POD_T0 + LIMIT_SEC + WD_MARGIN_SEC))
pssh "mkdir -p /workspace/r2r2r /workspace/logs /workspace/ckpt /workspace/data" || wrap_fail prep "Pod にフォルダを作れない"
lab_watchdog_script | pod_ssh "cat > /workspace/r2r2r/lab_watchdog.sh" || wrap_fail prep "見張りのスクリプトを置けない"
out=$(pssh "$(lab_watchdog_start_cmd "$WD_AT")")
wd=$(grep -E '^WATCHDOG ' <<<"$out" | tail -1)
WD_OK=0
case "$wd" in
    "WATCHDOG run=1 pod=1 key=1"*)
        WD_OK=1
        echo "[WATCH ] Pod 側の見張りを置いた: $(date -r "$WD_AT" '+%m-%d %H:%M') を過ぎたら Pod が自分を消す (Pod 用の鍵. Mac の鍵は送っていない)" ;;
    *)
        # 止めずに続ける (Pod 用の鍵が入らない Pod だと毎回学習できなくなるため). 画面・通知・まとめで目立たせる
        echo "[WARN  ] Pod 側の見張りが働かないかもしれない (${wd:-答えなし}). Mac 側の上限だけで消します. Mac を止めないでください" ;;
esac
save_state '. + {watchdog_epoch:$w, watchdog:$s}' --argjson w "$WD_AT" --arg s "${wd:-なし}"
stage_done

# ---- 3. 準備 (lab_start.sh 3a〜3f と同じ. サーバーは起動しない) ----
stage "3a. スクリプトを送る"
pod_scp -r "$HERE/pi05" "root@$POD_IP:/workspace/r2r2r/" || wrap_fail prep "pi05/ を送れない"
pod_scp "$ADD_TRIM" "root@$POD_IP:/workspace/r2r2r/" || wrap_fail prep "add_trim_config.py を送れない"
stage_done
stage "3b. huggingface_hub を入れ, 鍵を渡す"
pssh "$(lab_cmd_hf_install)" || wrap_fail prep "huggingface_hub を入れられない"
lab_send_hf_token || wrap_fail prep "Hugging Face の鍵を渡せない"
pssh 'hf auth whoami' || wrap_fail prep "Hugging Face に入れない (鍵が違う: $HF_TOKEN_FILE を確かめる)"
stage_done
stage "3c. 続きから学習するモデルを取る ($HF_REPO_IN → $CKPT_IN)"
pssh "$(lab_cmd_ckpt "$HF_REPO_IN" "$CKPT_IN")" || wrap_fail prep "hf download に失敗"
stage_done
stage "3d. openpi を取る ($LAB_OPENPI_COMMIT)"
pssh "$(lab_cmd_openpi "$LAB_OPENPI_COMMIT")" || wrap_fail prep "openpi を取れない"
stage_done
stage "3e. uv sync"
pssh "$(lab_cmd_uv_sync)" || wrap_fail prep "uv sync に失敗"
stage_done
stage "3f. addon・設定・assets"
pssh "$(lab_cmd_addon)" || wrap_fail prep "addon・設定・assets に失敗"
stage_done

# ---- 4. データを送り, 学習の準備 ----
stage "4a. tar を送る"
pod_scp "$TAR" "root@$POD_IP:/workspace/data/" || wrap_fail prep "tar を送れない"
pssh "ls -l /workspace/data/$(basename "$TAR")" || wrap_fail prep "送った tar が見えない"
stage_done
stage "4b. pod_prep_trim_corr.sh $STEPS $INIT"
pssh "set -o pipefail; bash /workspace/r2r2r/pi05/openpi_addon/pod_prep_trim_corr.sh $STEPS $INIT 2>&1 | tee $PREP_LOG" \
    || wrap_fail prep "pod_prep_trim_corr.sh に失敗 (上の出力を見る)"
stage_done

# ---- 5. 学習を始める ----
stage "5. 学習を始める"
out=$(pssh "$(lab_train_start_cmd "$CONFIG" "$EXP" "$TRAIN_LOG" "$GPU_LOG" "$RUN_LOG" "$EXIT_FILE")")
grep -q '^STARTED' <<<"$out" || wrap_fail prep "学習を始められない ($(tail -3 <<<"$out" | tr '\n' ' '))"
TRAIN_T0=$(date +%s)
save_state '. + {train_started_epoch:$t, train_started_at:($t|strflocaltime("%Y-%m-%d %H:%M:%S"))}' --argjson t "$TRAIN_T0"
echo "[TRAIN ] 学習を始めました (Pod の中で setsid nohup. Mac とのつながりが切れても続く)"
echo "         ログ $TRAIN_LOG  GPU $GPU_LOG (30 秒おき)"
stage_done

# ---- 6. 見守る ----
stage "6. 学習を見守る ($POLL_MIN 分おき)" nolimit       # 上限は下のループで, 終わっているかを見てから
told=0; ssh_ng=0
while :; do
    # 上限を超えていても, 先に様子を見る (確かめる間に学習が終わっていれば, 消さずに持ち帰る)
    out=$(pssh "$(lab_train_status_cmd "$TRAIN_LOG" "$EXIT_FILE" "$POD_EXP_DIR" "$STEPS")")
    now=$(date +%s)
    if lab_train_parse_status "$out" && [ "$S_EXIT" = 0 ] && [ "$S_CKPT" = "$LAST_STEP" ] && [ "$S_CM" = 1 ]; then
        :       # 終わっている → 下で成功へ
    elif [ $((now - POD_T0)) -ge "$LIMIT_SEC" ]; then
        wrap_fail timeout "上限 $LIMIT_HOURS 時間を超えた (学習を始めてから $(hm $((now - TRAIN_T0))))"
    fi
    if lab_train_parse_status "$out"; then
        ssh_ng=0
        step=$S_BAR; [ "$step" = - ] && step=$S_LOGSTEP
        printf '[TRAIN ] %s  step %s/%s  loss %s%s  経過 %s  上限まで %s\n' "$(date '+%H:%M')" "$step" "$STEPS" "$S_LOSS" \
            "$([ "$S_LOGSTEP" != - ] && echo " (Step $S_LOGSTEP の行)")" "$(hm $((now - TRAIN_T0)))" "$(hm $((POD_T0 + LIMIT_SEC - now)))"
        if [ "$S_EXIT" != - ]; then
            if [ "$S_EXIT" = 0 ] && [ "$S_CKPT" = "$LAST_STEP" ] && [ "$S_CM" = 1 ]; then
                stage_done; wrap_success
            fi
            wrap_fail crash "学習が終わったが, 終了コード ${S_EXIT}・最後のチェックポイント $S_CKPT (待っていたのは $LAST_STEP)"
        fi
        [ "$S_RUN" = 0 ] && wrap_fail crash "学習のプロセスが終わりの印を書かずに消えた"
        if [ "$S_AGE" != - ] && [ "$S_AGE" -ge "$STALL_SEC" ]; then
            wrap_fail stall "学習のログが $((S_AGE / 60)) 分書かれていない (止まった. $STALL_MIN 分で止めると決めている)"
        fi
        if [ $told = 0 ]; then
            told=1
            echo
            echo "========================================================================"
            echo " 学習は Pod の中で回っています. ここまで来れば寝てかまいません."
            echo " このターミナルは閉じない・Mac のふたは閉じない (電源につないだまま)."
            echo " 終わると通知が出ます. まとめは $LOGDIR/result_*.txt"
            [ $WD_OK = 1 ] || echo " ※ Pod 側の見張りがない. Mac が止まると Pod が残る (朝に ./lab_stop.sh --check で確かめる)"
            echo "========================================================================"
            echo
        fi
    else
        ssh_ng=$((ssh_ng + 1))
        echo "[WARN  ] $(date '+%H:%M') Pod の様子を見られない ($ssh_ng 回続けて)"
        if lab_pod_kind "$POD_ID" && [ "$LAB_POD_KIND" != running ]; then
            wrap_fail gone "Pod が動いていない (API の状態 ${LAB_POD_STATUS:-なし})"
        fi
        lab_pod_addr || true      # IP とポートが変わっていれば取り直す
    fi
    sleep "$POLL_SEC"
done
}

main "$@"; exit $?
```

### lab_train_fakes.sh

```bash
# lab_train_fakes.sh — lab_train.sh --dry-run が読む差し替え (単体では動かさない. 依頼 49)
#
# 本物の Pod を借りずに lab_train.sh の流れを最後まで流す:
#   - 書く場所 (DATA_ROOT・LAB_ROOT・checkpoints)・鍵を一時フォルダ LAB_DRY_ROOT (なければ作る) へ
#   - runpod_api / pod_ssh / pod_scp / Mac の hf download / 通知 / caffeinate を偽物にする
#     (呼ばれた中身を $LAB_DRY_ROOT/calls.log・ssh.log・scp.log・notify.log に残す)
#   - 待ちを短くする (進みを見るのは 1 秒おき)
# どうなるかは LAB_FAKE_SCENARIO で決める (test_lab_train.sh が使う):
#   success (既定)  学習が最後まで終わる
#   crash           学習が終了コード 1 で落ちる
#   killed          学習のプロセスが終わりの印を書かずに消える
#   timeout         学習が終わらない (--limit-hours を小さくして使う)
#   stall           学習のログが長く書かれない
#   hf_fail         Hugging Face に上げられない (Pod から scp で KIOXIA へ取る)
#   dl_mismatch     Hugging Face から取ったものが Pod 側の一覧と合わない
#   gpu_busy        A40 が借りられない (RTX A6000 で借りる)
#   all_busy        どの GPU も借りられない
#   delete_fail     Pod を消せない
#   delete_flaky    1 回目の DELETE だけ失敗する
#   late_finish     上限を超えた直後の確かめで, 学習が終わっている (消さずに持ち帰る)
#   wd_missing      Pod 用の鍵が見つからず, Pod 側の見張りが働かない
#   list_empty      Pod 側のチェックポイントの一覧が取れない
#   list_partial    Pod 側の一覧の途中で find が失敗する (一部の行と終了コード 1)
#   late_start      学習を始めるのに手間取り, 見守りに入ったときにはもう上限を過ぎている (学習は終わっている)

LAB_DRY_ROOT=${LAB_DRY_ROOT:-$(mktemp -d /tmp/lab_train_dry.XXXXXX)}
LAB_FAKE_SCENARIO=${LAB_FAKE_SCENARIO:-success}
FAKE_POD_ID=dryrunpod0001
echo "[DRY   ] ドライラン: Pod は借りません. 書くのは $LAB_DRY_ROOT の中だけ (場合: $LAB_FAKE_SCENARIO)"
if [ -d /Volumes/KIOXIA/r2r2r-data ]; then
    for f in "/Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2_corr_v3/mecharm_redblock_box_teach_v1_trim2_corr_v3_raw_episodes.tar" \
             /Volumes/KIOXIA/r2r2r-data/lab/Log11/pod/add_trim_config.py "$RUNPOD_KEY_FILE" "$HF_TOKEN_FILE"; do
        echo "[DRY   ] 本物の $(basename "$f"): $([ -s "$f" ] && echo ある || echo ない)"
    done
fi

DATA_ROOT="$LAB_DRY_ROOT/data"
LAB_ROOT="$DATA_ROOT/lab"; LAB_CURRENT="$LAB_ROOT/.lab_current"
RUNPOD_KEY_FILE="$LAB_DRY_ROOT/keys/runpod_api_key.txt"; HF_TOKEN_FILE="$LAB_DRY_ROOT/keys/hf_token.txt"
POD_SSH_KEY="$LAB_DRY_ROOT/keys/id_ed25519"
mkdir -p "$LAB_DRY_ROOT/keys" "$LAB_DRY_ROOT/fake" "$DATA_ROOT/lab/Log11/pod" \
         "$DATA_ROOT/datasets/mecharm_redblock_box_teach_v1_trim2_corr_v3"
[ -s "$RUNPOD_KEY_FILE" ] || echo "DRY-RUNPOD-SECRET-KEY" > "$RUNPOD_KEY_FILE"
[ -s "$HF_TOKEN_FILE" ] || echo "hf_DRYSECRETTOKEN" > "$HF_TOKEN_FILE"
[ -s "$POD_SSH_KEY" ] || echo "dry-ssh-key" > "$POD_SSH_KEY"
[ -s "$POD_SSH_KEY.pub" ] || echo "ssh-ed25519 AAAA dry" > "$POD_SSH_KEY.pub"
[ -f "$DATA_ROOT/lab/Log11/pod/add_trim_config.py" ] || echo "# dry" > "$DATA_ROOT/lab/Log11/pod/add_trim_config.py"
TARF="$DATA_ROOT/datasets/mecharm_redblock_box_teach_v1_trim2_corr_v3/mecharm_redblock_box_teach_v1_trim2_corr_v3_raw_episodes.tar"
[ -f "$TARF" ] || echo "dry tar" > "$TARF"
touch "$LAB_DRY_ROOT/calls.log" "$LAB_DRY_ROOT/ssh.log" "$LAB_DRY_ROOT/scp.log"

CREATE_WAIT=0; SSH_WAIT=0; LOGIN_WAIT=0; GONE_WAIT=0; FETCH_WAIT=0
POLL_SEC=${LAB_DRY_POLL_SEC:-1}
NOTIFY_TITLE="$NOTIFY_TITLE (ドライラン)"

# 偽物のチェックポイント (Pod 側の一覧と同じ中身を Hugging Face / scp で取ったことにする)
FAKE_CKPT_FILES=$'_CHECKPOINT_METADATA\t426\nassets/local/mecharm_redblock_box_teach_v1_trim2_corr_v3/norm_stats.json\t2120\nparams/_METADATA\t33052\nparams/d/0123abcd\t1048576\nparams/manifest.ocdbt\t118'
fake_make_ckpt() {          # fake_make_ckpt フォルダ [ずらす] → FAKE_CKPT_FILES のとおりのファイルを作る
    local d="$1" p n
    while IFS=$'\t' read -r p n; do
        [ "${2:-}" = shift ] && [ "$p" = params/manifest.ocdbt ] && n=$((n + 1))
        mkdir -p "$d/$(dirname "$p")"; head -c "$n" /dev/zero > "$d/$p"
    done <<<"$FAKE_CKPT_FILES"
}
fake_n() { echo x >> "$LAB_DRY_ROOT/fake/$1.n"; wc -l < "$LAB_DRY_ROOT/fake/$1.n" | tr -d ' '; }

runpod_api() {
    local m="$1" p="$2" data="${3:-}" gpu
    echo "$m $p" >> "$LAB_DRY_ROOT/calls.log"
    case "$m $p" in
        "POST /pods")
            gpu=$(jq -r '.gpuTypeIds[0]' <<<"$data"); echo "POST gpu=$gpu name=$(jq -r .name <<<"$data")" >> "$LAB_DRY_ROOT/calls.log"
            if [ "$LAB_FAKE_SCENARIO" = all_busy ] || { [ "$LAB_FAKE_SCENARIO" = gpu_busy ] && [ "$gpu" = "NVIDIA A40" ]; }; then
                echo '{"error":"There are no longer any instances available with the requested specifications."}'; RUNPOD_HTTP=500
            else
                echo "{\"id\":\"$FAKE_POD_ID\",\"costPerHr\":0.44}"; RUNPOD_HTTP=200
                echo "$gpu" > "$LAB_DRY_ROOT/fake/created"
            fi ;;
        "GET /pods")
            if [ -f "$LAB_DRY_ROOT/fake/created" ] && [ ! -f "$LAB_DRY_ROOT/fake/deleted" ]; then
                echo "[{\"id\":\"$FAKE_POD_ID\",\"name\":\"p2m-train-x\",\"desiredStatus\":\"RUNNING\",\"costPerHr\":0.44}]"
            else
                cat "$LAB_DRY_ROOT/fake/others.json" 2>/dev/null || echo '[]'
            fi
            RUNPOD_HTTP=200 ;;
        "GET /pods/"*)
            if [ "${p#/pods/}" = "$FAKE_POD_ID" ] && [ -f "$LAB_DRY_ROOT/fake/created" ] && [ ! -f "$LAB_DRY_ROOT/fake/deleted" ]; then
                echo "{\"id\":\"$FAKE_POD_ID\",\"desiredStatus\":\"RUNNING\",\"publicIp\":\"10.9.8.7\",\"portMappings\":{\"22\":40123}}"
                RUNPOD_HTTP=200
            else
                echo '{"error":"pod not found"}'; RUNPOD_HTTP=404
            fi ;;
        "DELETE /pods/"*)
            if [ "$LAB_FAKE_SCENARIO" = delete_fail ] || { [ "$LAB_FAKE_SCENARIO" = delete_flaky ] && [ "$(fake_n delete)" = 1 ]; }; then
                echo '{"error":"internal"}'; RUNPOD_HTTP=500
            else echo '{}'; RUNPOD_HTTP=200; touch "$LAB_DRY_ROOT/fake/deleted"; fi ;;
        *) echo '{}'; RUNPOD_HTTP=404 ;;
    esac
    case "$RUNPOD_HTTP" in 2??) return 0 ;; *) return 1 ;; esac
}

pod_ssh() {
    printf '%s\n----\n' "$*" >> "$LAB_DRY_ROOT/ssh.log"
    cat > /dev/null
    [ -f "$LAB_DRY_ROOT/fake/deleted" ] && return 255
    local n
    case "$*" in
        *": lt=watchdog"*) [ "$LAB_FAKE_SCENARIO" = wd_missing ] && echo "WATCHDOG run=1 pod=1 key=0 ctl=0" || echo "WATCHDOG run=1 pod=1 key=1 ctl=1" ;;
        *": lt=start_train"*) [ "$LAB_FAKE_SCENARIO" = late_start ] && sleep 9; echo STARTED ;;
        *": lt=status"*)
            n=$(fake_n status)
            if [ "$LAB_FAKE_SCENARIO" = late_start ]; then echo "STATUS run=0 exit=0 age=4 bar=1500 logstep=1400 loss=0.0215 ckpt=1499 cm=1"; return 0; fi
            if [ "$LAB_FAKE_SCENARIO" = late_finish ]; then     # 確かめている間に上限を過ぎ, 学習も終わる
                sleep 9; echo "STATUS run=0 exit=0 age=4 bar=1500 logstep=1400 loss=0.0215 ckpt=1499 cm=1"; return 0
            fi
            case "$LAB_FAKE_SCENARIO:$n" in
                crash:1|killed:1|stall:1|timeout:*|*:1)
                    if [ "$LAB_FAKE_SCENARIO" = stall ]; then echo "STATUS run=1 exit=- age=99999 bar=40 logstep=- loss=- ckpt=- cm=0"
                    else echo "STATUS run=1 exit=- age=3 bar=$((n * 100)) logstep=$((n * 100)) loss=0.0412 ckpt=- cm=0"; fi ;;
                crash:*) echo "STATUS run=0 exit=1 age=5 bar=650 logstep=600 loss=0.0399 ckpt=- cm=0" ;;
                killed:*) echo "STATUS run=0 exit=- age=5 bar=650 logstep=600 loss=0.0399 ckpt=- cm=0" ;;
                *) echo "STATUS run=0 exit=0 age=4 bar=1500 logstep=1400 loss=0.0215 ckpt=1499 cm=1" ;;
            esac ;;
        *": lt=list_ckpt"*|*": lt=ls_all"*)
            if [ "$LAB_FAKE_SCENARIO" = list_partial ] && [[ "$*" == *"lt=list_ckpt"* ]]; then
                sed 's/^/F\t/' <<<"$FAKE_CKPT_FILES" | head -2; echo "find: './params/d': Input/output error"; return 1
            fi
            if [ -f "$LAB_DRY_ROOT/fake/status.n" ] && [ "$LAB_FAKE_SCENARIO" != crash ] && [ "$LAB_FAKE_SCENARIO" != list_empty ] && [ "$LAB_FAKE_SCENARIO" != killed ] \
               && [ "$LAB_FAKE_SCENARIO" != timeout ] && [ "$LAB_FAKE_SCENARIO" != stall ]; then
                sed 's/^/F\t/' <<<"$FAKE_CKPT_FILES"
            fi ;;
        *"hf_upload_ckpt.py"*)
            if [ "$LAB_FAKE_SCENARIO" = hf_fail ]; then echo "HFUP error HfHubHTTPError: 401 Client Error"; return 6; fi
            echo "HFUP ok PixelstoMotors/pi05-mecharm-trim-corr-lora-v1 に 5 ファイルを上げ, 名前・バイト数が全部合うのを確かめた" ;;
        *"pod_prep_trim_corr.sh"*) echo "== 5. 準備できました (ドライラン)" ;;
        *"hf auth whoami"*) echo "user: PixelstoMotors (ドライラン)" ;;
    esac
    return 0
}

pod_scp() {
    echo "$*" >> "$LAB_DRY_ROOT/scp.log"
    [ -f "$LAB_DRY_ROOT/fake/deleted" ] && return 1
    local last="${!#}"
    case "$*" in
        *":/workspace/openpi/checkpoints/"*) fake_make_ckpt "$last" ;;
        *":/workspace/logs/watchdog.log"*) return 1 ;;      # 見張りが働いていなければ, ないのがふつう
        *" root@"*":/workspace/logs/"*|"root@"*":/workspace/logs/"*) echo "dry log line (${1##*/})" > "$last" ;;
    esac
    return 0
}

lab_have_hf_cli() { return 0; }
lab_hf_download_mac() {
    echo "hf download $1 → $2" >> "$LAB_DRY_ROOT/calls.log"
    fake_make_ckpt "$2" "$([ "$LAB_FAKE_SCENARIO" = dl_mismatch ] && echo shift)"
    mkdir -p "$2/.cache/huggingface/download"; echo x > "$2/.cache/huggingface/download/x.metadata"; echo "*" > "$2/.gitattributes"
    echo x > "$2/._params"; echo x > "$2/.DS_Store"         # KIOXIA (exFAT) が付けるもの
}
lab_notify() { echo "[NOTIFY] $1: $2" | tee -a "$LAB_DRY_ROOT/notify.log"; }
lab_keep_awake() { echo "[MAC   ] (ドライラン) caffeinate は使わない"; }
```

### test_lab_start.sh

```bash
#!/bin/bash
# test_lab_start.sh — lab_start.sh のつなぎ直し (依頼 44) を, Pod を借りずに確かめる
#
#   ./test_lab_start.sh          全部流す (最後に「OK n / NG m」. NG があれば終了コード 1)
#
# 一時フォルダに lab_start.sh・lab_stop.sh を写し, 次を差し替えて --dry-run で最後まで流す:
#   - lab_lib.sh: 本物を読んだあとで, 置き場所を一時フォルダへ, runpod_api / pod_ssh / pod_scp を偽物にする
#     (偽物の API は api/ のファイルで答えを決め, 呼ばれた中身を calls.log・ssh.log・scp.log に残す)
#   - PATH の先頭に ssh (トンネル)・lsof・python3 (run_policy_client.py) の偽物
#   - lab_start.sh の写しの /Volumes/KIOXIA/r2r2r-data を一時フォルダに置き換える (SSD には触らない)
# Pod の中で流す確かめのコマンド (lab_probe_cmd) は, この Mac の bash で実際に流して書き方を確かめる

set -u
HERE="$(cd "$(dirname "$0")" && pwd)"
OK=0; NG=0
ok() { OK=$((OK + 1)); echo "  ok   $1"; }
ng() { NG=$((NG + 1)); echo "  NG   $1"; }
check() { if eval "$2"; then ok "$1"; else ng "$1"; fi; }

ID_OLD=oldpod0000001
ID_NEW=newpod0000002

setup() {                   # 1 つの場合ごとに新しい一時フォルダを作る
    T=$(mktemp -d)
    mkdir -p "$T/bin" "$T/api" "$T/keys" "$T/pi05" \
             "$T/data/lab/Log11/pod" "$T/data/lab/LogT/pod" \
             "$T/data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_194818"
    echo "x" > "$T/data/lab/Log11/pod/add_trim_config.py"
    echo "rk" > "$T/keys/runpod"; echo "hk" > "$T/keys/hf"; echo "k" > "$T/keys/id"; echo "k.pub" > "$T/keys/id.pub"
    sed -e "s#/Volumes/KIOXIA/r2r2r-data#$T/data#g" -e 's#^LISTEN_WAIT=30; LISTEN_POLL=5#LISTEN_WAIT=2; LISTEN_POLL=1#' \
        "$HERE/lab_start.sh" > "$T/lab_start.sh"
    cp "$HERE/lab_stop.sh" "$T/lab_stop.sh"
    chmod +x "$T/lab_start.sh" "$T/lab_stop.sh"
    cat > "$T/lab_lib.sh" <<EOF
. "$HERE/lab_lib.sh"
T="$T"
LAB_ROOT="\$T/data/lab"; LAB_CURRENT="\$LAB_ROOT/.lab_current"
RUNPOD_KEY_FILE="\$T/keys/runpod"; HF_TOKEN_FILE="\$T/keys/hf"; POD_SSH_KEY="\$T/keys/id"
. "\$T/fakes.sh"
EOF
    cat > "$T/fakes.sh" <<'EOF'
runpod_api() {              # api/ の答えを返す. DELETE のあとは, その Pod はないことにする
    local m="$1" p="$2" id
    echo "$m $p" >> "$T/calls.log"
    case "$m $p" in
        "GET /pods")
            [ -f "$T/api/list_delay" ] && . "$T/api/list_delay"
            if [ -f "$T/api/deleted" ] && [ -f "$T/api/list_after.txt" ]; then
                cat "$T/api/list_after.txt"
            elif [ -f "$T/api/deleted" ]; then
                jq --arg id "$(cat "$T/api/deleted")" 'map(select(.id != $id))' "$T/api/list.json"
            else cat "$T/api/list.json"; fi
            RUNPOD_HTTP=$(cat "$T/api/list.code" 2>/dev/null || echo 200) ;;
        "GET /pods/"*)
            id=${p#/pods/}
            if [ -f "$T/api/deleted" ] && [ "$(cat "$T/api/deleted")" = "$id" ]; then
                echo '{"error":"pod not found"}'; RUNPOD_HTTP=404
            elif [ "$id" = "$ID_NEW" ]; then
                echo "{\"id\":\"$ID_NEW\",\"desiredStatus\":\"RUNNING\",\"publicIp\":\"10.9.8.7\",\"portMappings\":{\"22\":40123}}"
                RUNPOD_HTTP=200
            else
                cat "$T/api/pod.json"; RUNPOD_HTTP=$(cat "$T/api/pod.code")
            fi ;;
        "POST /pods")
            echo "{\"id\":\"$ID_NEW\",\"costPerHr\":0.59}"; RUNPOD_HTTP=200 ;;
        "DELETE /pods/"*)
            RUNPOD_HTTP=$(cat "$T/api/delete.code" 2>/dev/null || echo 200)
            case "$RUNPOD_HTTP" in 2??) echo "${p#/pods/}" > "$T/api/deleted" ;; esac
            echo '{}' ;;
    esac
    case "$RUNPOD_HTTP" in 2??) return 0 ;; *) return 1 ;; esac
}
pod_ssh() {                 # 呼ばれたコマンドを ssh.log に. 確かめのコマンドには api/probe.txt (2 回目からは api/probe2.txt があればそれ) を返す
    printf '%s\n----\n' "$*" >> "$T/ssh.log"
    cat > /dev/null
    case "$*" in
        *"echo \"PROBE serve="*)
            echo x >> "$T/probe.n"
            if [ -f "$T/api/probe2.txt" ] && [ $(wc -l < "$T/probe.n") -ge 2 ]; then cat "$T/api/probe2.txt"; else cat "$T/api/probe.txt"; fi ;;
        *"grep 'server listening'"*) echo "INFO:websockets.server:server listening on 0.0.0.0:8000" ;;
        *"pkill -9 -f"*) [ -f "$T/api/stop_fail" ] && return 1 ;;
    esac
    return 0
}
pod_scp() {
    echo "$*" >> "$T/scp.log"
    case "$1" in *:/workspace/logs/serve.log) echo "old serve line" > "$2" ;; esac
    return 0
}
lab_tunnel_pids() { :; }
EOF
    echo "ID_NEW=$ID_NEW" >> "$T/fakes.sh"
    printf '#!/bin/bash\nsleep 1\n' > "$T/bin/ssh"
    printf '#!/bin/bash\nn=$(cat "%s/lsof.n" 2>/dev/null || echo 0); echo $((n+1)) > "%s/lsof.n"; [ "$n" -gt 0 ]\n' "$T" "$T" > "$T/bin/lsof"
    printf '#!/bin/bash\necho "python3 $*" >> "%s/py.log"\n' "$T" > "$T/bin/python3"
    chmod +x "$T/bin/"*
    echo '[]' > "$T/api/list.json"
    : > "$T/calls.log"; : > "$T/ssh.log"; : > "$T/scp.log"
}

state() {                   # 記録の lab_pod.json を置く
    jq -n --arg id "$1" '{id:$id, gpu:"NVIDIA A40", log:"LogT", costPerHr:0.59, created_epoch:1793438135,
                          created_at:"2026-10-31 18:15:35"}' > "$T/data/lab/LogT/pod/lab_pod.json"
}
pod() { echo "$2" > "$T/api/pod.json"; echo "$1" > "$T/api/pod.code"; }
probe() { echo "PROBE serve=$1 listen=$2 ckpt=$3 mark=${6:-$3} openpi=$4 venv=$5" > "$T/api/probe.txt"; }   # 6 番目は済んだ印 (既定は ckpt と同じ)
probe2() { echo "PROBE serve=$1 listen=$2 ckpt=$3 mark=$3 openpi=$4 venv=$5" > "$T/api/probe2.txt"; }
run() { (cd "$T" && PATH="$T/bin:$PATH" ./lab_start.sh --log LogT --dry-run < /dev/null > "$T/out.txt" 2>&1); RC=$?; }
has() { grep -qF -- "$2" "$T/$1"; }
n_call() { grep -c -- "^$1" "$T/calls.log"; }
archived() { ls "$T/data/lab/LogT/pod/" | grep -cE '^lab_pod_[0-9]{8}_[0-9]{6}(_[0-9]+)?\.json$'; }
RUNNING="{\"id\":\"$ID_OLD\",\"desiredStatus\":\"RUNNING\",\"publicIp\":\"10.1.2.3\",\"portMappings\":{\"22\":40999}}"

echo "== 1. RUNNING・サーバーが待っている → つなぎ直し, 3b〜4 を飛ばす"
setup; state $ID_OLD; pod 200 "$RUNNING"; probe 1 1 1 1 1; run
check "終了コード 0" '[ $RC = 0 ]'
check "「つなぎ直します」と出る" 'has out.txt "LogT の Pod (id $ID_OLD) につなぎ直します"'
check "POST・DELETE を呼ばない" '[ $(n_call POST) = 0 ] && [ $(n_call DELETE) = 0 ]'
check "IP とポートを API から取り直す (GET /pods/id)" '[ $(n_call "GET /pods/$ID_OLD") -ge 2 ] && has out.txt "API から取り直した"'
check "スクリプトは送る (3a)" 'has scp.log "/pi05 root@10.1.2.3:/workspace/r2r2r/"'
check "hf download・git clone・uv sync・tmux new を流さない" '! has ssh.log "hf download" && ! has ssh.log "git clone" && ! has ssh.log "uv sync" && ! has ssh.log "tmux new"'
check "一覧に「つなぎ直し」の行" 'has out.txt "1. Pod につなぎ直す" && has out.txt "かかった時間 (LogT の Pod (id $ID_OLD) につなぎ直し)" && has out.txt "3b〜4. 準備とサーバーの起動 (飛ばした)"'
check "記録はそのまま (名前を変えない)" '[ "$(jq -r .id "$T/data/lab/LogT/pod/lab_pod.json")" = $ID_OLD ] && [ $(archived) = 0 ]'
check "推論のクライアントまで進む" 'has py.log "run_policy_client.py"'
check "ターミナルの記録 lab_start_*.txt が残る" 'ls "$T/data/lab/LogT"/lab_start_*.txt >/dev/null 2>&1 && grep -qF "つなぎ直し)" "$T/data/lab/LogT"/lab_start_*.txt'
check "IP とポートを画面に出さない" '! has out.txt "10.1.2.3" && ! has out.txt "40999"'
sed -n '/=== 1. Pod/,/=== 3a/p' "$T/out.txt" > /tmp/lab_reattach_sample.txt; sed -n '/=== かかった時間/,$p' "$T/out.txt" >> /tmp/lab_reattach_sample.txt
rm -rf "$T"

echo "== 2. RUNNING・サーバーが落ちている・モデルと openpi はある・.venv がない"
setup; state $ID_OLD; pod 200 "$RUNNING"; probe 0 0 1 1 0; run
check "終了コード 0" '[ $RC = 0 ]'
check "hf download・git clone を流さない" '! has ssh.log "hf download" && ! has ssh.log "git clone"'
check "uv sync・3f・サーバーの起動を流す" 'has ssh.log "uv sync" && has ssh.log "install_addon.py" && has ssh.log "tmux new -d -s serve"'
check "前の serve.log を持ち帰る" 'ls "$T/data/lab/LogT"/serve_before_restart_*.log >/dev/null 2>&1'
check "一覧に飛ばした行" 'has out.txt "3b・3c. huggingface_hub・モデル (飛ばした)" && has out.txt "3d. openpi を取る (215abfb) (飛ばした)"'
check "POST しない" '[ $(n_call POST) = 0 ]'
rm -rf "$T"

echo "== 3. RUNNING・サーバーが落ちている・モデルも openpi もない (.venv はある)"
setup; state $ID_OLD; pod 200 "$RUNNING"; probe 0 0 0 0 1; run
check "終了コード 0" '[ $RC = 0 ]'
check "hf download・openpi・(openpi を取り直したので) uv sync を流す" 'has ssh.log "hf download" && has ssh.log "touch /workspace/ckpt/3999/.lab_download_ok" && has ssh.log "git checkout -q 215abfb" && has ssh.log "uv sync"'
rm -rf "$T"

echo "== 4. RUNNING・プロセスはあるが 8000 番で待っていない → 待っても待たない → 起動し直す (依頼 47. テストでは 30 秒を 2 秒に)"
setup; state $ID_OLD; pod 200 "$RUNNING"; probe 1 0 1 1 1; run
check "終了コード 0" '[ $RC = 0 ]'
check "待つと出し, 待つ間に確かめ直す" 'has out.txt "読み込み中かもしれないので 2 秒まで待ちます" && [ $(wc -l < "$T/probe.n") -ge 2 ] && has out.txt "2 秒待っても 8000 番で待っていない. 起動し直します"'
check "サーバーを起動し直す (前のプロセスを止めてから)・ほかの準備は飛ばす" 'has ssh.log "tmux new -d -s serve" && has ssh.log "pkill -f '"'"'[s]cripts/serve_policy" && [ $(grep -n "^tmux kill-session" "$T/ssh.log" | head -1 | cut -d: -f1) -lt $(grep -n "tmux new -d -s serve" "$T/ssh.log" | cut -d: -f1) ] && ! has ssh.log "hf download" && ! has ssh.log "uv sync"'
check "前の serve.log を持ち帰る" 'ls "$T/data/lab/LogT"/serve_before_restart_*.log >/dev/null 2>&1'
rm -rf "$T"

echo "== 4b. プロセスはあるが 8000 番で待っていない → 待つ間に待ち始めた → 起動し直さない"
setup; state $ID_OLD; pod 200 "$RUNNING"; probe 1 0 1 1 1; probe2 1 1 1 1 1; run
check "終了コード 0・待ち始めたと出す" '[ $RC = 0 ] && has out.txt "秒で 8000 番で待ち始めました" && has out.txt "3b〜4 を飛ばします"'
check "起動し直さない・前の serve.log も持ち帰らない" '! has ssh.log "tmux new" && ! has ssh.log "pkill" && ! ls "$T/data/lab/LogT"/serve_before_restart_*.log >/dev/null 2>&1'
rm -rf "$T"

echo "== 4c. プロセスはあるが 8000 番で待っていない → 待つ間にプロセスが終わった → 待つのをやめて起動し直す"
setup; state $ID_OLD; pod 200 "$RUNNING"; probe 1 0 1 1 1; probe2 0 0 1 1 1; run
check "終了コード 0・終わったと出して起動し直す" '[ $RC = 0 ] && has out.txt "(その間にプロセスが終わった). 起動し直します" && has ssh.log "tmux new -d -s serve"'
check "1 回確かめ直したところで待つのをやめる" '[ $(wc -l < "$T/probe.n") = 2 ]'
rm -rf "$T"

echo "== 4e. 前の serve_policy.py を止められない → 起動せずに止まる"
setup; state $ID_OLD; pod 200 "$RUNNING"; probe 0 0 1 1 1; touch "$T/api/stop_fail"; run
check "終了コード 1・起動しない・止められないと出す" '[ $RC = 1 ] && ! has ssh.log "tmux new" && has out.txt "前の serve_policy.py を止められない"'
rm -rf "$T"

echo "== 4d. 待っていれば, 待たずに進む (確かめは 1 回)"
setup; state $ID_OLD; pod 200 "$RUNNING"; probe 1 1 1 1 1; run
check "確かめ直さない・待つと出さない" '[ $(wc -l < "$T/probe.n") = 1 ] && ! has out.txt "秒まで待ちます"'
rm -rf "$T"

echo "== 27. 依頼 44 より前に作った Pod (モデルの中身はあるが済んだ印がない)・サーバーは待っている (2026-10-31 18:50 の実機)"
setup; state $ID_OLD; pod 200 "$RUNNING"; probe 1 1 1 1 1 0; run
check "終了コード 0・モデルを「ない」と出さない" '[ $RC = 0 ] && ! has out.txt "モデル (/workspace/ckpt/3999): ない" && has out.txt "モデル (/workspace/ckpt/3999): ある (取り終えた印 .lab_download_ok はない"'
check "3b〜4 を飛ばす" 'has out.txt "3b〜4 を飛ばします" && ! has ssh.log "hf download"'
rm -rf "$T"

echo "== 28. モデルの中身はあるが済んだ印がない・サーバーが落ちている → 3b・3c を流し直す (openpi・.venv は飛ばす)"
setup; state $ID_OLD; pod 200 "$RUNNING"; probe 0 0 1 1 1 0; run
check "終了コード 0・hf download を流し, 印を付ける" '[ $RC = 0 ] && has ssh.log "hf download" && has ssh.log "touch /workspace/ckpt/3999/.lab_download_ok"'
check "openpi・uv sync は飛ばす" '! has ssh.log "git clone" && ! has ssh.log "uv sync"'
rm -rf "$T"

echo "== 29. モデルの中身も印もある・サーバーが落ちている → 3b・3c を飛ばす"
setup; state $ID_OLD; pod 200 "$RUNNING"; probe 0 0 1 1 1 1; run
check "終了コード 0・hf download を流さない・起動はする" '[ $RC = 0 ] && ! has ssh.log "hf download" && has ssh.log "tmux new -d -s serve" && has out.txt "モデル (/workspace/ckpt/3999): ある  "'
rm -rf "$T"

echo "== 30. 動いている途中で lab_start.sh が書き換わっても, その回は最後まで流れる (依頼 47)"
setup; state $ID_OLD; pod 200 "$RUNNING"; probe 1 1 1 1 1
# 推論のクライアント (偽物) が, 動いている lab_start.sh をその場で書き換える (同じファイルに上書き)
printf '#!/bin/bash\necho "python3 $*" >> "%s/py.log"\n{ cat "%s/lab_start.sh.new"; echo "echo REWRITTEN-RAN; )"; } > "%s/lab_start.sh"\n' "$T" "$T" "$T" > "$T/bin/python3"
{ echo '#!/bin/bash'; for i in $(seq 1 600); do echo "# 書き換えたあとの行 $i ......................................"; done; } > "$T/lab_start.sh.new"
run
check "終了コード 0・最後まで流れる・syntax error が出ない" '[ $RC = 0 ] && has out.txt "Pod は残しています" && ! has out.txt "syntax error" && ! has out.txt "REWRITTEN-RAN"'
check "書き換わっている (テストの前提)" 'grep -q "REWRITTEN-RAN" "$T/lab_start.sh"'
rm -rf "$T"

echo "== 5. 記録の Pod が止まっている (EXITED) → lab_stop.sh と同じ消し方で消してから作る"
setup; state $ID_OLD; pod 200 "{\"id\":\"$ID_OLD\",\"desiredStatus\":\"EXITED\"}"
echo "[{\"id\":\"$ID_OLD\",\"name\":\"p2m-LogT\",\"desiredStatus\":\"EXITED\",\"costPerHr\":0.59}]" > "$T/api/list.json"
probe 1 1 1 1 1; run
check "終了コード 0" '[ $RC = 0 ]'
check "止まっていると出す" 'has out.txt "(id $ID_OLD) は止まっています (状態 EXITED)"'
check "DELETE してから POST" '[ $(n_call DELETE) = 1 ] && [ $(n_call POST) = 1 ] && [ $(grep -n "^DELETE" "$T/calls.log" | cut -d: -f1) -lt $(grep -n "^POST" "$T/calls.log" | cut -d: -f1) ]'
check "lab_stop の記録 (lab_stop_*.txt) が残る" 'ls "$T/data/lab/LogT"/lab_stop_*.txt >/dev/null 2>&1'
check "古い記録は時刻付きで残り, 消した時刻が入っている" '[ $(archived) = 1 ] && jq -e ".id == \"$ID_OLD\" and (.terminated_epoch | type) == \"number\"" "$T"/data/lab/LogT/pod/lab_pod_2*.json >/dev/null'
check "新しい記録は新しい Pod" '[ "$(jq -r .id "$T/data/lab/LogT/pod/lab_pod.json")" = $ID_NEW ]'
check "新しい Pod は全部の準備を流す" 'has ssh.log "hf download" && has ssh.log "uv sync" && has ssh.log "tmux new -d -s serve"'
rm -rf "$T"

echo "== 6. 記録の Pod が API にない (404・一覧にもない) → 作る"
setup; state $ID_OLD; pod 404 '{"error":"pod not found"}'; run
check "終了コード 0・DELETE なし・POST 1 回" '[ $RC = 0 ] && [ $(n_call DELETE) = 0 ] && [ $(n_call POST) = 1 ]'
check "古い記録は時刻付きで残る" '[ $(archived) = 1 ] && has out.txt "は API で見ると残っていない"'
rm -rf "$T"

echo "== 7. 記録の Pod が TERMINATED (200 で返る) → 作る"
setup; state $ID_OLD; pod 200 "{\"id\":\"$ID_OLD\",\"desiredStatus\":\"TERMINATED\"}"; run
check "終了コード 0・DELETE なし・POST 1 回・古い記録を残す" '[ $RC = 0 ] && [ $(n_call DELETE) = 0 ] && [ $(n_call POST) = 1 ] && [ $(archived) = 1 ]'
rm -rf "$T"

echo "== 8. GET が 500 で, 一覧にはまだある → 分からないので止まる (作らない)"
setup; state $ID_OLD; pod 500 '{"error":"internal"}'
echo "[{\"id\":\"$ID_OLD\",\"name\":\"p2m-LogT\",\"desiredStatus\":\"RUNNING\",\"costPerHr\":0.59}]" > "$T/api/list.json"; run
check "終了コード 1・POST・DELETE なし" '[ $RC = 1 ] && [ $(n_call POST) = 0 ] && [ $(n_call DELETE) = 0 ]'
check "二重に借りないよう止まると出す・記録はそのまま" 'has out.txt "二重に借りないよう止まります" && [ $(archived) = 0 ]'
rm -rf "$T"

echo "== 9. API につながらない (000) → 止まる"
setup; state $ID_OLD; pod 000 ''; run
check "終了コード 1・POST なし・一覧も見ない" '[ $RC = 1 ] && [ $(n_call POST) = 0 ] && [ $(n_call "GET /pods$") = 0 ]'
rm -rf "$T"

echo "== 10. 200 なのに状態がない → 止まる"
setup; state $ID_OLD; pod 200 "{\"id\":\"$ID_OLD\"}"; run
check "終了コード 1・POST・DELETE なし" '[ $RC = 1 ] && [ $(n_call POST) = 0 ] && [ $(n_call DELETE) = 0 ]'
rm -rf "$T"

echo "== 11. 記録はないが p2m-LogT が残っている → 止まる"
setup; echo "[{\"id\":\"$ID_OLD\",\"name\":\"p2m-LogT\",\"desiredStatus\":\"RUNNING\",\"costPerHr\":0.59}]" > "$T/api/list.json"; run
check "終了コード 1・POST なし" '[ $RC = 1 ] && [ $(n_call POST) = 0 ] && has out.txt "記録にない LogT の Pod"'
rm -rf "$T"

echo "== 12. 記録がなく, ほかの Log の Pod だけが残っている → 今までどおり作る"
setup; echo "[{\"id\":\"other01\",\"name\":\"p2m-Log16\",\"desiredStatus\":\"RUNNING\",\"costPerHr\":0.59}]" > "$T/api/list.json"; run
check "終了コード 0・POST 1 回・ほかの Pod の WARN" '[ $RC = 0 ] && [ $(n_call POST) = 1 ] && has out.txt "ほかに Pod が 1 個あります"'
check "準備を全部流す・つなぎ直しの行はない" 'has ssh.log "hf download" && has ssh.log "git clone" && has ssh.log "uv sync" && ! has out.txt "つなぎ直し"'
rm -rf "$T"

echo "== 13. 記録に id がない → 時刻付きで残して作る"
setup; echo '{}' > "$T/data/lab/LogT/pod/lab_pod.json"; run
check "終了コード 0・POST 1 回・古い記録を残す" '[ $RC = 0 ] && [ $(n_call POST) = 1 ] && [ $(archived) = 1 ]'
rm -rf "$T"

echo "== 14. Pod の中を確かめる答えが読めない → 止まる"
setup; state $ID_OLD; pod 200 "$RUNNING"; echo "garbage" > "$T/api/probe.txt"; run
check "終了コード 1・サーバーを起動しない" '[ $RC = 1 ] && ! has ssh.log "tmux new" && has out.txt "Pod の中を確かめられない"'
rm -rf "$T"

echo "== 16. 記録がなく, 一覧の答えが読めない (null・{}・壊れた JSON・空・id のない要素) → 止まる"
for bad in 'null' '{}' 'garbage' '' '[{"name":"p2m-LogT"}]'; do
    setup; printf '%s' "$bad" > "$T/api/list.json"; run
    check "一覧 '$bad': 終了コード 1・POST なし" '[ $RC = 1 ] && [ $(n_call POST) = 0 ] && has out.txt "一覧の答えが読めない"'
    rm -rf "$T"
done

echo "== 17. 記録がなく, 一覧が取れない (500) → 止まる"
setup; echo 500 > "$T/api/list.code"; run
check "終了コード 1・POST なし" '[ $RC = 1 ] && [ $(n_call POST) = 0 ]'
rm -rf "$T"

echo "== 18. 200 だが id が記録と違う / {} → 止まる"
for body in '{"id":"someoneelse","desiredStatus":"RUNNING"}' '{}' '[]'; do
    setup; state $ID_OLD; pod 200 "$body"; run
    check "答え '$body': 終了コード 1・POST・DELETE なし・記録はそのまま" '[ $RC = 1 ] && [ $(n_call POST) = 0 ] && [ $(n_call DELETE) = 0 ] && [ $(archived) = 0 ]'
    rm -rf "$T"
done

echo "== 19. 知らない状態 (CREATED) → 消さずに止まる"
setup; state $ID_OLD; pod 200 "{\"id\":\"$ID_OLD\",\"desiredStatus\":\"CREATED\"}"; run
check "終了コード 1・POST・DELETE なし" '[ $RC = 1 ] && [ $(n_call POST) = 0 ] && [ $(n_call DELETE) = 0 ]'
rm -rf "$T"

echo "== 20. GET が 401 → 一覧も見ずに止まる"
setup; state $ID_OLD; pod 401 '{"error":"unauthorized"}'; run
check "終了コード 1・POST なし・一覧を見ない" '[ $RC = 1 ] && [ $(n_call POST) = 0 ] && [ $(n_call "GET /pods$") = 0 ]'
rm -rf "$T"

echo "== 21. EXITED を消そうとして DELETE が失敗 → 作らずに止まる"
setup; state $ID_OLD; pod 200 "{\"id\":\"$ID_OLD\",\"desiredStatus\":\"EXITED\"}"; echo 500 > "$T/api/delete.code"; run
check "終了コード 1・POST なし・記録はそのまま" '[ $RC = 1 ] && [ $(n_call POST) = 0 ] && [ $(archived) = 0 ] && has out.txt "止まっている Pod (id $ID_OLD) を消せない"'
rm -rf "$T"

echo "== 22. EXITED を DELETE したあと, 一覧の答えが読めない → 消えたと見なさず止まる (lab_stop.sh が 2 分半待つ)"
setup; state $ID_OLD; pod 200 "{\"id\":\"$ID_OLD\",\"desiredStatus\":\"EXITED\"}"; echo 'garbage' > "$T/api/list_after.txt"; run
check "終了コード 1・POST なし・記録は残る" '[ $RC = 1 ] && [ $(n_call POST) = 0 ] && [ -f "$T/data/lab/LogT/pod/lab_pod.json" ] && [ $(archived) = 0 ]'
rm -rf "$T"

echo "== 23. 同じ Log の lab_start.sh が動いている (印あり・pid が生きている) → 止まる"
setup; state $ID_OLD; pod 200 "$RUNNING"; probe 1 1 1 1 1
mkdir "$T/data/lab/LogT/pod/.lab_start.lock"; sleep 30 & live=$!; echo $live > "$T/data/lab/LogT/pod/.lab_start.lock/pid"; run
check "終了コード 1・API を呼ばない・印は残す" '[ $RC = 1 ] && [ ! -s "$T/calls.log" ] && has out.txt "lab_start.sh がもう動いています" && [ -d "$T/data/lab/LogT/pod/.lab_start.lock" ]'
kill $live 2>/dev/null; wait $live 2>/dev/null
echo "== 24. 印が残っているが pid はもういない・pid がない → 取り直さずに止まる (消し方を出す)"
run
check "死んだ pid: 終了コード 1・API を呼ばない・印は残す・消し方を出す" '[ $RC = 1 ] && [ ! -s "$T/calls.log" ] && has out.txt "印が残っています (pid ${live}・" && has out.txt "rm -r " && [ -d "$T/data/lab/LogT/pod/.lab_start.lock" ]'
rm -f "$T/data/lab/LogT/pod/.lab_start.lock/pid"; run
check "pid がない (mkdir の直後): 終了コード 1・API を呼ばない・印は残す" '[ $RC = 1 ] && [ ! -s "$T/calls.log" ] && [ -d "$T/data/lab/LogT/pod/.lab_start.lock" ]'
rm -r "$T/data/lab/LogT/pod/.lab_start.lock"; run
check "印を消せば進む・終わったら印は外れる" '[ $RC = 0 ] && has out.txt "につなぎ直します" && [ ! -e "$T/data/lab/LogT/pod/.lab_start.lock" ]'
rm -rf "$T"

echo "== 26. 同じ Log の lab_start.sh を 4 つ同時に打つ (一覧の答えを 2 秒遅らせる) → 作るのは 1 回だけ"
setup; echo "sleep 2" > "$T/api/list_delay"
for i in 1 2 3 4; do
    (cd "$T" && PATH="$T/bin:$PATH" ./lab_start.sh --log LogT --dry-run < /dev/null > "$T/out$i.txt" 2>&1; echo $? > "$T/rc$i") &
done
wait
check "POST は 1 回・終了コード 0 は 1 つ・ほかは「もう動いています」で止まる" '[ $(n_call POST) = 1 ] && [ "$(cat "$T"/rc? | sort | tr -d "\n")" = "0111" ] && [ $(grep -l "lab_start.sh がもう動いています\|印が残っています" "$T"/out?.txt | wc -l) = 3 ]'
rm -rf "$T"

echo "== 25. ふつうに終わったら・止まったら印を外す"
setup; run
check "作る道で終わったあと印がない" '[ $RC = 0 ] && [ ! -e "$T/data/lab/LogT/pod/.lab_start.lock" ]'
rm -rf "$T"
setup; state $ID_OLD; pod 000 ''; run
check "止まったあとも印がない" '[ $RC = 1 ] && [ ! -e "$T/data/lab/LogT/pod/.lab_start.lock" ]'
rm -rf "$T"

echo "== 15. lab_probe_cmd をこの Mac の bash で流す"
. "$HERE/lab_lib.sh"
NS=assets/local/mecharm_redblock_box_teach_v1_trim2/norm_stats.json
cmd=$(lab_probe_cmd 215abfb /nonexistent/ckpt "$NS")
check "bash で書き方の誤りがない" 'bash -n <<<"$cmd"'
out=$(bash -c "$cmd" 2>&1)
check "PROBE の1行だけを出し, 自分の bash -c をサーバーと取り違えない" '[ "$out" = "PROBE serve=0 listen=0 ckpt=0 mark=0 openpi=0 venv=0" ]'
fd=$(mktemp -d); mkdir -p "$fd/scripts"; echo 'sleep 5' > "$fd/scripts/serve_policy.py"
bash "$fd/scripts/serve_policy.py" &
fake=$!; sleep 0.3
check "serve_policy.py のプロセスがあれば serve=1" '[[ "$(bash -c "$cmd")" == "PROBE serve=1 "* ]]'
kill $fake 2>/dev/null; wait $fake 2>/dev/null; rm -rf "$fd"
sample=$(mktemp)
printf '  sl  local_address rem_address   st\n   0: 00000000:1F40 00000000:0000 0A 0\n' > "$sample"
lcmd=$(grep '^l=0' <<<"$cmd" | sed "s#cat /proc/net/tcp /proc/net/tcp6 2>/dev/null#cat $sample#")
check "8000 番 (1F40) が LISTEN (0A) なら listen=1" '[ "$(bash -c "$lcmd; echo \$l")" = 1 ]'
printf '  sl  local_address rem_address   st\n   0: 00000000:1F40 0100007F:1234 01 0\n   1: 00000000:1F41 00000000:0000 0A 0\n' > "$sample"
check "つながっているだけ (01)・別の番号なら listen=0" '[ "$(bash -c "$lcmd; echo \$l")" = 0 ]'
rm -f "$sample"
stopc=$(lab_serve_stop_cmd)
check "止めるコマンドに scripts/serve_policy.py をそのまま書かない (自分の bash -c に当たらない)" '! grep -q "[^[]scripts/serve_policy" <<<"$stopc"'
fd=$(mktemp -d); mkdir -p "$fd/scripts"; echo 'sleep 30' > "$fd/scripts/serve_policy.py"
bash "$fd/scripts/serve_policy.py" &
fake=$!; sleep 0.3
out=$(bash -c "$stopc; echo STOP-RAN-TO-END:\$?" 2>&1)
check "止めるコマンドを流すと, serve_policy.py は終わり, 自分は最後まで流れて 0 を返す" '! kill -0 $fake 2>/dev/null && [[ "$out" == *"STOP-RAN-TO-END:0"* ]]'
wait $fake 2>/dev/null; rm -rf "$fd"
# hf download が /workspace/ckpt/3999 に置くもの (Hugging Face の一覧の 33 ファイルのうち確かめに使うもの) を作る
d=$(mktemp -d)
pr() { bash -c "$(lab_probe_cmd 215abfb "$d" "$NS")"; }
mkdir -p "$d/params/ocdbt.process_0/d" "$d/assets/local/mecharm_redblock_box_teach_v1_trim2" "$d/.cache/huggingface/download/params"
touch "$d/_CHECKPOINT_METADATA" "$d/params/_METADATA" "$d/params/manifest.ocdbt" "$d/params/ocdbt.process_0/manifest.ocdbt" "$d/$NS"
check "中身がそろっていて済んだ印がない (依頼 44 より前の Pod) → ckpt=1 mark=0" '[[ "$(pr)" == *" ckpt=1 mark=0 "* ]]'
touch "$d/.lab_download_ok"
check "中身と済んだ印 → ckpt=1 mark=1" '[[ "$(pr)" == *" ckpt=1 mark=1 "* ]]'
touch "$d/.cache/huggingface/download/params/x.incomplete"
check "取りかけ (*.incomplete) が残っていれば ckpt=0" '[[ "$(pr)" == *" ckpt=0 mark=1 "* ]]'
rm "$d/.cache/huggingface/download/params/x.incomplete"
chmod 000 "$d/.cache/huggingface/download"
check "取りかけを探せない (読めない) ときは ckpt=0" '[[ "$(pr)" == *" ckpt=0 "* ]]'
chmod 755 "$d/.cache/huggingface/download"
rm -rf "$d/.cache"
check ".cache/huggingface がなければ (取りかけはない) ckpt=1" '[[ "$(pr)" == *" ckpt=1 "* ]]'
for f in _CHECKPOINT_METADATA params/_METADATA params/manifest.ocdbt params/ocdbt.process_0/manifest.ocdbt "$NS"; do
    mv "$d/$f" "$d/$f.bak"
    check "$f がなければ ckpt=0" '[[ "$(pr)" == *" ckpt=0 "* ]]'
    mv "$d/$f.bak" "$d/$f"
done
rm -rf "$d/params" "$d/_CHECKPOINT_METADATA"; mkdir -p "$d/assets/local"
check "済んだ印と assets だけ (前の確かめなら ckpt=1 だった形) → ckpt=0" '[[ "$(pr)" == *" ckpt=0 mark=1 "* ]]'
rm -rf "$d"

echo
echo "OK $OK / NG $NG"
[ $NG = 0 ]
```

### test_lab_train.sh

```bash
#!/bin/bash
# test_lab_train.sh — lab_train.sh (依頼 49) を, Pod を借りずに確かめる
#
#   ./test_lab_train.sh          全部流す (最後に「OK n / NG m」. NG があれば終了コード 1)
#
# lab_train.sh --dry-run を場合ごとに流す. --dry-run は lab_train_fakes.sh で API・SSH・hf・通知を差し替え,
# 書くのは一時フォルダ (LAB_DRY_ROOT) だけ. 場合は LAB_FAKE_SCENARIO で決める.
# Pod の中で流すコマンド (学習の様子・見張り) は, この Mac の bash で実際に流して書き方を確かめる

set -u
HERE="$(cd "$(dirname "$0")" && pwd)"
OK=0; NG=0
ok() { OK=$((OK + 1)); echo "  ok   $1"; }
ng() { NG=$((NG + 1)); echo "  NG   $1"; }
check() { if eval "$2"; then ok "$1"; else ng "$1"; fi; }
run_to() {                  # run_to 秒 コマンド... (macOS には timeout がない. 時間が来たら TERM で止める → 143)
    local s="$1"; shift
    "$@" & local p=$!
    ( sleep "$s"; kill "$p" 2>/dev/null ) & local w=$!
    wait "$p"; local rc=$?
    kill "$w" 2>/dev/null; wait "$w" 2>/dev/null
    return $rc
}

run() {                     # run 場合 [lab_train.sh の引数...]
    local sc="$1"; shift
    T=$(mktemp -d)
    (cd "$HERE" && LAB_DRY_ROOT="$T" LAB_FAKE_SCENARIO="$sc" ./lab_train.sh --log LogT --dry-run "$@" < /dev/null > "$T/out.txt" 2>&1)
    RC=$?
    TD="$T/data/lab/LogT/train"
    CK="$T/data/checkpoints/pi05_mecharm_trim_corr_lora_v1"
}
has() { grep -qF -- "$2" "$T/$1"; }
n_call() { grep -c -- "^$1" "$T/calls.log"; }
line_of() { grep -nF -- "$2" "$T/$1" | head -1 | cut -d: -f1; }
no_secret() { ! grep -rqE 'DRY-RUNPOD-SECRET-KEY|hf_DRYSECRETTOKEN|10\.9\.8\.7|40123' "$T/out.txt" "$T/data/lab" "$T/notify.log" 2>/dev/null; }
common_wrap() {             # どの終わり方でも: ログを持ち帰ってから消し, 消えたのを確かめ, 費用を出し, 通知する
    check "ログを持ち帰ってから DELETE" '[ -f "$TD/train_trim_corr_v3.log" ] && [ -f "$TD/gpu_train.csv" ] && [ $(n_call DELETE) = 1 ] && [ $(line_of scp.log train_trim_corr_v3.log) -ge 1 ]'
    check "消えたのを API で確かめた・費用 (ドルと円)" 'has out.txt "が消えたことを API で確かめた" && grep -qE "約 [0-9.]+ ドル \(約 [0-9]+ 円" "$T/out.txt"'
    check "記録に消した時刻と gone_confirmed" '[ "$(jq -r .gone_confirmed "$TD/lab_pod.json")" = true ] && [ -n "$(jq -r ".terminated_at // empty" "$TD/lab_pod.json")" ]'
    check "通知を1回出す・まとめ result_*.txt" '[ $(wc -l < "$T/notify.log") = 1 ] && ls "$TD"/result_*.txt >/dev/null 2>&1'
    check "鍵・IP・ポートを画面・記録・通知に出さない" 'no_secret'
    check "印 (.lab_train.lock) を外す" '[ ! -e "$TD/.lab_train.lock" ]'
}

echo "== 1. 学習が最後まで終わる"
run success
check "終了コード 0" '[ $RC = 0 ]'
check "A40 で p2m-train-LogT を1つ作る" '[ $(n_call "POST gpu=NVIDIA A40 name=p2m-train-LogT") = 1 ] && [ $(n_call "POST /pods") = 1 ]'
check "Pod 側に見張りを置く (上限+60分の時刻を書く)" 'has ssh.log ": lt=watchdog" && has ssh.log "cat > /workspace/r2r2r/lab_watchdog.sh" && [ "$(jq -r ".watchdog_epoch - .created_epoch" "$TD/lab_pod.json")" = 21600 ]'
check "準備は lab_start.sh 3b〜3f と同じコマンド" 'has ssh.log "hf download PixelstoMotors/pi05-mecharm-trim-lora-v1 --local-dir /workspace/ckpt/3999" && has ssh.log "git checkout -q 215abfb" && has ssh.log "uv sync" && has ssh.log "install_addon.py" && has ssh.log "add_trim_config.py /workspace/openpi"'
check "サーバーは起動しない" '! has ssh.log "serve_policy.py"'
check "pi05/・add_trim_config.py・tar を送る" 'has scp.log "/pi05 root@" && has scp.log "add_trim_config.py root@" && grep -q "_raw_episodes.tar root@.*:/workspace/data/" "$T/scp.log"'
check "pod_prep_trim_corr.sh 1500 /workspace/ckpt/3999/params" 'has ssh.log "bash /workspace/r2r2r/pi05/openpi_addon/pod_prep_trim_corr.sh 1500 /workspace/ckpt/3999/params"'
check "学習は setsid nohup・exp trim_corr_v3・ログ train_trim_corr_v3.log・GPU 30 秒おき" 'has ssh.log "setsid nohup bash /workspace/r2r2r/train_run.sh" && has ssh.log "uv run scripts/train.py pi05_mecharm_trim_corr_lora --exp-name=trim_corr_v3 --overwrite > /workspace/logs/train_trim_corr_v3.log" && has ssh.log "--format=csv -l 30 > /workspace/logs/gpu_train.csv"'
check "進み (step・loss) を出す・寝てよいと出す" 'has out.txt "step 100/1500  loss 0.0412" && has out.txt "ここまで来れば寝てかまいません"'
check "Hugging Face へ上げる (train_state は上げない)" 'has ssh.log "hf_upload_ckpt.py --dir /workspace/openpi/checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499 --repo PixelstoMotors/pi05-mecharm-trim-corr-lora-v1"'
check "上げる → ログ → DELETE → KIOXIA の順" '[ $(line_of ssh.log hf_upload_ckpt.py) -lt $(line_of ssh.log ": lt=ls_all") ] && [ $(line_of calls.log "DELETE") -lt $(line_of calls.log "hf download") ]'
check "KIOXIA の checkpoints/pi05_mecharm_trim_corr_lora_v1/1499 に置く (.cache・.gitattributes・一時フォルダは残さない)" '[ -f "$CK/1499/_CHECKPOINT_METADATA" ] && [ -f "$CK/1499/params/manifest.ocdbt" ] && [ ! -e "$CK/1499/.cache" ] && [ ! -e "$CK/1499/.gitattributes" ] && [ -z "$(ls -A "$CK" | grep -v "^1499$")" ] && [ -f "$CK/1499/._params" ]'
check "Pod 側の一覧 (pod_files_1499.tsv・pod_checkpoints.tsv) を持ち帰る" '[ $(wc -l < "$TD/pod_files_1499.tsv") = 5 ] && [ -s "$TD/pod_checkpoints.tsv" ]'
check "通知は「成功」" 'grep -q "成功: 学習が終わりました (step 1499" "$T/notify.log"'
check "lab_start.sh の pod/ には触らない" '[ ! -e "$T/data/lab/LogT/pod" ]'
common_wrap
OUT1="$T"

echo "== 2. 学習が落ちる (終了コード 1)"
run crash
check "終了コード 1" '[ $RC = 1 ]'
check "Hugging Face に上げない・KIOXIA に置かない" '! has ssh.log "hf_upload_ckpt.py" && [ ! -e "$CK" ]'
check "わけを出す" 'has out.txt "終了コード 1" && grep -q "^\[NOTIFY\].*失敗: 学習が終わったが, 終了コード 1" "$T/notify.log"'
common_wrap
rm -rf "$T"

echo "== 3. 学習のプロセスが終わりの印を書かずに消える"
run killed
check "終了コード 1・わけ" '[ $RC = 1 ] && has notify.log "終わりの印を書かずに消えた"'
common_wrap
rm -rf "$T"

echo "== 4. 上限の時間を超える (--limit-hours 0.001 = 3.6 秒)"
run timeout --limit-hours 0.001
check "終了コード 1・上限を超えたと出す" '[ $RC = 1 ] && has notify.log "上限 0.001 時間を超えた"'
check "学習を止めてからログを持ち帰る" 'has ssh.log ": lt=kill_train" && [ $(line_of ssh.log ": lt=kill_train") -lt $(line_of ssh.log ": lt=ls_all") ]'
check "Hugging Face に上げない" '! has ssh.log "hf_upload_ckpt.py"'
common_wrap
rm -rf "$T"

echo "== 5. 学習のログが長く書かれない (止まった)"
run stall
check "終了コード 1・止まったと出す" '[ $RC = 1 ] && has notify.log "分書かれていない (止まった"'
common_wrap
rm -rf "$T"

echo "== 6. Hugging Face に上げられない → Pod から scp で KIOXIA へ取ってから消す"
run hf_fail
check "終了コード 1 (全部はそろっていない)" '[ $RC = 1 ]'
check "KIOXIA に scp で置く (Pod を消す前)" '[ -f "$CK/1499/_CHECKPOINT_METADATA" ] && grep -q "checkpoints/pi05_mecharm_trim_corr_lora/trim_corr_v3/1499/params" "$T/scp.log" && [ $(line_of out.txt "Pod から scp で取ります") -lt $(line_of out.txt "削除 (Terminate) を送った") ]'
check "Mac の hf download はしない" '[ $(n_call "hf download") = 0 ]'
check "通知に「Hugging Face に上げられなかった」「KIOXIA には置いた」" 'has notify.log "Hugging Face に上げられなかった" && has notify.log "KIOXIA には置いた (scp)" && has notify.log "Pod は消しました"'
common_wrap
rm -rf "$T"

echo "== 7. Hugging Face から取ったものが Pod 側と合わない"
run dl_mismatch
check "終了コード 1・1499 は作らず一時フォルダのまま残す" '[ $RC = 1 ] && [ ! -e "$CK/1499" ] && ls -d "$CK"/.incoming_1499_* >/dev/null 2>&1'
check "どのファイルが違うかを出す" 'has out.txt "params/manifest.ocdbt	119" && has notify.log "KIOXIA に置けなかった"'
rm -rf "$T"

echo "== 8. KIOXIA に 1499 がもとからある → 上書きしない"
T=$(mktemp -d); mkdir -p "$T/data/checkpoints/pi05_mecharm_trim_corr_lora_v1/1499"; echo old > "$T/data/checkpoints/pi05_mecharm_trim_corr_lora_v1/1499/keep.txt"
(cd "$HERE" && LAB_DRY_ROOT="$T" LAB_FAKE_SCENARIO=success ./lab_train.sh --log LogT --dry-run < /dev/null > "$T/out.txt" 2>&1); RC=$?
CK="$T/data/checkpoints/pi05_mecharm_trim_corr_lora_v1"
check "前もって知らせる" 'has out.txt "がもうあります. 学習のあと上書きはせず"'
check "もとの中身はそのまま・終了コード 1・一時フォルダも作らない" '[ "$(cat "$CK/1499/keep.txt")" = old ] && [ $RC = 1 ] && [ $(n_call "hf download") = 0 ] && has notify.log "上書きしなかった"'
rm -rf "$T"

echo "== 9. A40 が借りられない → RTX A6000 で借りる"
run gpu_busy
check "A40 を 5 回試し, RTX A6000 で作る" '[ $(n_call "POST gpu=NVIDIA A40") = 5 ] && [ $(n_call "POST gpu=NVIDIA RTX A6000") = 1 ] && [ "$(jq -r .gpu "$TD/lab_pod.json")" = "NVIDIA RTX A6000" ]'
check "終了コード 0・費用の行に GPU" '[ $RC = 0 ] && has out.txt "GPU=NVIDIA RTX A6000"'
rm -rf "$T"

echo "== 10. どの GPU も借りられない → 借りずに通知して終わる"
run all_busy
check "終了コード 1・A40 5 回 + A6000 2 回 + L40S 2 回" '[ $RC = 1 ] && [ $(n_call "POST gpu=NVIDIA A40") = 5 ] && [ $(n_call "POST gpu=NVIDIA RTX A6000") = 2 ] && [ $(n_call "POST gpu=NVIDIA L40S") = 2 ]'
check "DELETE しない・通知に「Pod は借りていません」" '[ $(n_call DELETE) = 0 ] && has notify.log "Pod は借りていません"'
rm -rf "$T"
run all_busy --no-fallback
check "--no-fallback は A40 だけ" '[ $(n_call "POST gpu=NVIDIA A40") = 5 ] && [ $(n_call "POST gpu=NVIDIA RTX A6000") = 0 ]'
rm -rf "$T"

echo "== 11. Pod を消せない → 残っているかもしれないと通知する"
run delete_fail
check "終了コード 1・--stop の案内" '[ $RC = 1 ] && has notify.log "残っているかもしれません" && has notify.log "--stop"'
check "記録は gone_confirmed=false" '[ "$(jq -r .gone_confirmed "$TD/lab_pod.json")" = false ]'
rm -rf "$T"

echo "== 11b. 1 回目の DELETE だけ失敗 → やり直して消す"
run delete_flaky
check "終了コード 0・DELETE 2 回・消えたのを確かめた" '[ $RC = 0 ] && [ $(n_call DELETE) = 2 ] && has out.txt "(1/3) Pod を消せない" && [ "$(jq -r .gone_confirmed "$TD/lab_pod.json")" = true ]'
rm -rf "$T"

echo "== 11c. 上限を超えた直後の確かめで学習が終わっていた → 消さずに持ち帰る (codex R1)"
run late_finish --limit-hours 0.002
check "終了コード 0・成功・上限で止めない" '[ $RC = 0 ] && has notify.log "成功: 学習が終わりました" && ! has out.txt "上限 0.002 時間を超えた" && [ -f "$CK/1499/_CHECKPOINT_METADATA" ]'
rm -rf "$T"

echo "== 11d. Pod 側の見張りが働かない → 続けるが, 画面・まとめで目立たせる"
run wd_missing
check "終了コード 0・警告・寝てよいの案内に注意・まとめに注意" '[ $RC = 0 ] && has out.txt "Pod 側の見張りが働かないかもしれない (WATCHDOG run=1 pod=1 key=0 ctl=0)" && has out.txt "※ Pod 側の見張りがない" && grep -q "Pod 側の見張りは働いていなかった" "$TD"/result_*.txt'
rm -rf "$T"

echo "== 11e. Pod 側のチェックポイントの一覧が取れない → 上げずに, ログを持ち帰って消す"
run list_empty
check "終了コード 1・上げない・DELETE" '[ $RC = 1 ] && ! has ssh.log "hf_upload_ckpt.py" && [ $(n_call DELETE) = 1 ] && has notify.log "一覧を取れない"'
rm -rf "$T"

echo "== 11f. 見守りに入る前に上限を過ぎた (学習は終わっている) → 消さずに持ち帰る (codex R2)"
run late_start --limit-hours 0.002
check "終了コード 0・成功" '[ $RC = 0 ] && has notify.log "成功: 学習が終わりました" && ! has out.txt "時間を超えた"'
rm -rf "$T"

echo "== 11g. Pod 側の一覧が途中で失敗 (一部の行・終了コード 1) → 合ったとせず, 上げない (codex R2)"
run list_partial
check "終了コード 1・上げない・一覧を取れない" '[ $RC = 1 ] && ! has ssh.log "hf_upload_ckpt.py" && has notify.log "一覧を取れない"'
check "一覧のコマンドは pipefail 付き" 'has ssh.log ": lt=list_ckpt; set -o pipefail;"'
rm -rf "$T"

echo "== 12. 前の学習の Pod が動いている → 作らずに止まる / --stop で持ち帰って消す"
T=$(mktemp -d); mkdir -p "$T/data/lab/LogT/train" "$T/fake"
jq -n '{id:"dryrunpod0001", kind:"train", gpu:"NVIDIA A40", costPerHr:0.44, created_epoch:1793449178, created_at:"2026-10-31 21:19:38", exp:"trim_corr_v3", train_started_epoch:1793449300}' > "$T/data/lab/LogT/train/lab_pod.json"
echo "NVIDIA A40" > "$T/fake/created"
(cd "$HERE" && LAB_DRY_ROOT="$T" ./lab_train.sh --log LogT --dry-run < /dev/null > "$T/out.txt" 2>&1); RC=$?
TD="$T/data/lab/LogT/train"
check "終了コード 1・POST しない・--stop の案内" '[ $RC = 1 ] && [ $(n_call POST) = 0 ] && has out.txt "前の学習の Pod (id dryrunpod0001・RUNNING) が残っている" && [ $(n_call DELETE) = 0 ]'
(cd "$HERE" && LAB_DRY_ROOT="$T" ./lab_train.sh --log LogT --dry-run --stop < /dev/null > "$T/out.txt" 2>&1); RC=$?
check "--stop: 学習を止め, ログを持ち帰って DELETE" '[ $(n_call DELETE) = 1 ] && has ssh.log ": lt=kill_train" && [ -f "$TD/train_trim_corr_v3.log" ] && has out.txt "--stop で止めた"'
check "--stop の出力は lab_train_*_stop.txt に残る" 'ls "$TD"/lab_train_*_stop.txt >/dev/null 2>&1'
(cd "$HERE" && LAB_DRY_ROOT="$T" ./lab_train.sh --log LogT --dry-run < /dev/null > "$T/out2.txt" 2>&1)
check "消したあとは前の記録を名前を変えて残し, 新しく作る" '[ $(n_call "POST /pods") = 1 ] && ls "$TD"/lab_pod_*.json >/dev/null 2>&1'
rm -rf "$T"

echo "== 13. 見守る途中で止められても Pod を残さない (TERM. Ctrl-C・HUP も同じ扱い)"
T=$(mktemp -d)
(cd "$HERE" && LAB_DRY_ROOT="$T" LAB_FAKE_SCENARIO=timeout LAB_DRY_POLL_SEC=1 ./lab_train.sh --log LogT --dry-run --limit-hours 1 < /dev/null > "$T/out.txt" 2>&1) &
bg=$!
for _ in $(seq 1 40); do grep -q "ここまで来れば寝て" "$T/out.txt" 2>/dev/null && break; sleep 0.5; done
pk=$(pgrep -f "lab_train.sh --log LogT --dry-run --limit-hours 1" | head -1)
kill -TERM "$pk" 2>/dev/null       # 裏で動かした bash は INT を受けない (始まる前から無視) ので TERM で確かめる. INT も同じ on_signal
wait $bg; TD="$T/data/lab/LogT/train"
check "止められたら, ログを持ち帰って DELETE・通知" '[ $(n_call DELETE) = 1 ] && [ -f "$TD/train_trim_corr_v3.log" ] && grep -q "TERM (kill) で止めた" "$T/notify.log"'
rm -rf "$T"

echo "== 14. 引数"
for a in "--limit-hours 0" "--limit-hours x" "--steps 0" "--exp-name a;b" "--init /a b"; do
    T=$(mktemp -d)
    # shellcheck disable=SC2086
    (cd "$HERE" && LAB_DRY_ROOT="$T" ./lab_train.sh --log LogT --dry-run $a < /dev/null > "$T/out.txt" 2>&1); RC=$?
    check "$a は終了コード 2" '[ $RC = 2 ]'
    rm -rf "$T"
done

echo "== 15. Pod の中で流すコマンドを, この Mac の bash で流す"
. "$HERE/lab_lib.sh"
d=$(mktemp -d); L="$d/train.log"; E="$d/exit"; C="$d/ck"
st() { bash -c "$(lab_train_status_cmd "$L" "$E" "$C" 1500)" 2>/dev/null; }
check "ログがない: STATUS run=0 exit=- age=-" '[[ "$(st)" == "STATUS run=0 exit=- age=- bar=- logstep=- loss=- ckpt=- cm=0" ]]'
printf 'loading\r  5%%|▌  | 75/1500 [08:00<2:30:00, 6.6s/it]\rStep 0: grad_norm=1.2000, loss=0.0800, param_norm=300.1\n 13%%|█▎ | 200/1500 [22:00<2:23:00, 6.6s/it]\rStep 100: grad_norm=0.5000, loss=0.0412, param_norm=300.2\n\r 14%%|█▍ | 210/1500 [23:00<2:22:00, 6.6s/it]' > "$L"
mkdir -p "$C/1000" "$C/1499" "$C/1499.orbax-checkpoint-tmp-123"; touch "$C/1499/_CHECKPOINT_METADATA"
check "tqdm と Step の行・チェックポイント" '[[ "$(st)" == "STATUS run=0 exit=- age="[0-9]*" bar=210 logstep=100 loss=0.0412 ckpt=1499 cm=1" ]]'
echo 0 > "$E"
check "終わりの印 → exit=0" '[[ "$(st)" == *" exit=0 "* ]]'
lab_train_parse_status "$(st)"
check "読み分け (S_EXIT=0 S_BAR=210 S_LOSS=0.0412 S_CKPT=1499 S_CM=1)" '[ "$S_EXIT" = 0 ] && [ "$S_BAR" = 210 ] && [ "$S_LOSS" = 0.0412 ] && [ "$S_CKPT" = 1499 ] && [ "$S_CM" = 1 ]'
mkdir -p "$d/gnu"; printf '#!/bin/bash\n[ "$1" = -c ] && [ "$2" = %%Y ] && { echo 1000; exit 0; }; exit 1\n' > "$d/gnu/stat"; chmod +x "$d/gnu/stat"
check "Pod (GNU) では stat -c %Y で書いた時刻を読む" '[ $(PATH="$d/gnu:$PATH" st | sed -E "s/.* age=([0-9]+) .*/\1/") -gt 1000000000 ]'
printf '#!/bin/bash\nexit 1\n' > "$d/gnu/stat"; mkdir -p "$d/nodate"; printf '#!/bin/bash\n[ "$1" = -r ] && exit 1; exec /bin/date "$@"\n' > "$d/nodate/date"; chmod +x "$d/gnu/stat" "$d/nodate/date"
check "書いた時刻が読めなければ age=- (止まったとしない)" '[[ "$(PATH="$d/gnu:$d/nodate:$PATH" st)" == *" age=- "* ]]'
check "STATUS の行がなければ読めない" '! lab_train_parse_status "ssh: connect to host"'
touch -t 202601010000 "$L"
check "古いログ → age が大きい" '[ $(st | sed -E "s/.* age=([0-9]+) .*/\1/") -gt 100000 ]'
mkdir -p "$d/x/.cache/huggingface" "$d/x/params" "$d/x/train_state"
printf 'abc' > "$d/x/params/a"; printf '12345' > "$d/x/_CHECKPOINT_METADATA"; touch "$d/x/._a" "$d/x/.gitattributes" "$d/x/.DS_Store" "$d/x/.cache/huggingface/m" "$d/x/train_state/t"
mkdir -p "$d/x/params/locked"; chmod 000 "$d/x/params/locked"
check "Mac の一覧は読めないフォルダがあれば失敗する (黙って飛ばさない)" '! lab_list_files "$d/x" >/dev/null 2>&1'
chmod 755 "$d/x/params/locked"; rmdir "$d/x/params/locked"
check "Mac の一覧は ._・.cache・.gitattributes・train_state を数えない" '[ "$(lab_list_files "$d/x")" = "$(printf "_CHECKPOINT_METADATA\t5\nparams/a\t3")" ]'
# 見張り: 上限の時刻を過ぎたら Pod 用の鍵で DELETE を送る (偽物の curl). 鍵は書き出さない
mkdir -p "$d/bin"; printf '#!/bin/bash\nfor a in "$@"; do case "$a" in @/dev/fd/*|@/proc/*) cat "${a#@}" > "%s/hdr" ;; esac; done\necho "$*" > "%s/curl_args"; printf 204\n' "$d" "$d" > "$d/bin/curl"; chmod +x "$d/bin/curl"
lab_watchdog_script > "$d/wd.sh"
echo $(( $(date +%s) + 2 )) > "$d/deadline"
run_to 20 env PATH="$d/bin:$PATH" LAB_WD_DEADLINE="$d/deadline" LAB_WD_LOG="$d/wd.log" LAB_WD_POLL=1 LAB_WD_API=http://fake \
    RUNPOD_POD_ID=pod123 RUNPOD_API_KEY=podscoped-SECRET bash "$d/wd.sh"; wrc=$?
check "見張り: 時刻まで待ってから DELETE (Pod 用の鍵をヘッダーで)・0 で終わる" '[ $wrc = 0 ] && grep -q -- "-X DELETE .*http://fake/pods/pod123" "$d/curl_args" && grep -q "Bearer podscoped-SECRET" "$d/hdr" && grep -q "HTTP 204" "$d/wd.log"'
check "見張り: 鍵をログ・引数に出さない" '! grep -q SECRET "$d/wd.log" "$d/curl_args"'
# 1 回目は 500 → やり直して 204
printf '#!/bin/bash\nn=$(cat "%s/cn" 2>/dev/null || echo 0); echo $((n+1)) > "%s/cn"; [ "$n" = 0 ] && printf 500 || printf 204\n' "$d" "$d" > "$d/bin/curl"
echo 1 > "$d/deadline"; : > "$d/wd.log"
run_to 20 env PATH="$d/bin:$PATH" LAB_WD_DEADLINE="$d/deadline" LAB_WD_LOG="$d/wd.log" LAB_WD_RETRY=0 RUNPOD_POD_ID=p RUNPOD_API_KEY=k bash "$d/wd.sh"; wrc=$?
check "見張り: DELETE が一時だめでもやり直して消す" '[ $wrc = 0 ] && grep -q "(1) DELETE → HTTP 500" "$d/wd.log" && grep -q "(2) DELETE → HTTP 204" "$d/wd.log"'
printf '#!/bin/bash\nprintf 500\n' > "$d/bin/curl"; : > "$d/wd.log"
run_to 20 env PATH="$d/bin:$PATH" LAB_WD_DEADLINE="$d/deadline" LAB_WD_LOG="$d/wd.log" LAB_WD_RETRY=0 LAB_WD_TRIES=3 RUNPOD_POD_ID=p RUNPOD_API_KEY=k bash "$d/wd.sh"; wrc=$?
check "見張り: ずっとだめなら 3 回試して「消せなかった」・終了コード 1" '[ $wrc = 1 ] && grep -q "(3) DELETE" "$d/wd.log" && grep -q "消せなかった" "$d/wd.log"'
# runpodctl が固まっても, 時間で切って次へ進む (Mac には timeout がないので偽物)
printf '#!/bin/bash\ns=$1; shift; "$@" & p=$!; ( sleep "$s"; kill $p 2>/dev/null ) & w=$!; wait $p; r=$?; kill $w 2>/dev/null; exit $r\n' > "$d/bin/timeout"
printf '#!/bin/bash\necho call >> "%s/ctl"; sleep 30\n' "$d" > "$d/bin/runpodctl"; chmod +x "$d/bin/timeout" "$d/bin/runpodctl"; : > "$d/wd.log"
run_to 25 env PATH="$d/bin:$PATH" LAB_WD_DEADLINE="$d/deadline" LAB_WD_LOG="$d/wd.log" LAB_WD_RETRY=0 LAB_WD_TRIES=2 LAB_WD_CTL_TIMEOUT=1 RUNPOD_POD_ID=p RUNPOD_API_KEY=k bash "$d/wd.sh"; wrc=$?
check "見張り: runpodctl が固まっても時間で切ってやり直し, 最後まで行く" '[ $wrc = 1 ] && grep -q "(2) DELETE" "$d/wd.log" && [ $(wc -l < "$d/ctl") = 3 ] && grep -q "消せなかった" "$d/wd.log"'
rm -f "$d/bin/timeout" "$d/bin/runpodctl"
echo $(( $(date +%s) + 3600 )) > "$d/deadline"; : > "$d/wd.log"
run_to 3 env PATH="$d/bin:$PATH" LAB_WD_DEADLINE="$d/deadline" LAB_WD_LOG="$d/wd.log" LAB_WD_POLL=1 RUNPOD_POD_ID=p RUNPOD_API_KEY=k \
    bash "$d/wd.sh"; wrc=$?
check "見張り: 時刻の前は何もしない (延ばした時刻を読む)" '[ $wrc = 143 ] && [ ! -s "$d/wd.log" ]'
bash -n <(lab_watchdog_start_cmd 123) && ok "見張りを起動するコマンドの書き方" || ng "見張りを起動するコマンドの書き方"
check "見張りを起動するコマンドは鍵の中身を出さない (有無だけ)" '! lab_watchdog_start_cmd 1 | grep -qE "echo .*\\\$RUNPOD_API_KEY|printenv RUNPOD_API_KEY\$"'
rm -rf "$d"

echo "== 15b. pgrep / pkill の形が, そのコマンドを流す bash -c 自身に当たらない (依頼 47 の codex R1)"
. "$HERE/lab_lib.sh"
all_cmds="$(lab_train_start_cmd c e /w/l /w/g /w/r /w/x)
$(lab_watchdog_start_cmd 1)
$(lab_train_kill_cmd)
$(lab_train_status_cmd /w/l /w/x /w/c 1500)"
self_hit() {                # self_hit 形 → コマンドの中身を引数に持つ bash -c の中から pgrep し, 自分に当たれば 0
    bash -c "true <<'X_EOF'
$all_cmds
X_EOF
pgrep -a -f '$1' >/dev/null; r=\$?; exit \$r" 2>/dev/null
    # Mac の pgrep は自分の親を数えない (-a で数える). Pod (Linux) の pgrep は数えるので, -a で Pod と同じにする.
    # pgrep を最後に置くと bash が exec で pgrep に置き換わるので, 後ろに 1 つ置く
}
for pat in "$LAB_RUN_PAT" "$LAB_WD_PAT" "$LAB_GPU_PAT"; do
    check "「${pat}」は自分に当たらない" '! self_hit "$pat"'
done
check "(確かめの確かめ) ^ のない形なら自分に当たる" 'self_hit "[n]vidia-smi --query-gpu=timestamp"'
check "学習の Pod のコマンドに ^ のない train_run・lab_watchdog・nvidia-smi の pgrep/pkill がない" '! grep -E "(pgrep|pkill)( -9)? -f .\[?(t\]?rain_run|l\]?ab_watchdog|n\]?vidia-smi)" <<<"$all_cmds" | grep -q .'
mkdir -p /tmp/lt_$$/r2r2r && LC_ALL=C sed -e 's#/workspace/r2r2r/train_run.sh#/tmp/lt_'$$'/r2r2r/train_run.sh#g' <<<"$(lab_train_start_cmd c e /w/l /w/g /w/r /w/x)" | LC_ALL=C sed -n "/^cat > /,/^RUN_EOF\$/p" | bash
bash -n "/tmp/lt_$$/r2r2r/train_run.sh" && ok "Pod に置く train_run.sh の書き方" || ng "Pod に置く train_run.sh の書き方"
check "train_run.sh は終了コードを終わりの印に書く・\$HOME を Pod 側で読む" 'grep -q "^echo \$rc > /w/x$" /tmp/lt_$$/r2r2r/train_run.sh && grep -q "source \$HOME/.local/bin/env" /tmp/lt_$$/r2r2r/train_run.sh'
rm -rf /tmp/lt_$$

echo "== 16. lab_start.sh が lab_lib.sh の準備のコマンドで同じものを流す"
. "$HERE/lab_lib.sh"
check "3c は lab_start.sh の時と同じ中身" '[ "$(lab_cmd_ckpt PixelstoMotors/pi05-mecharm-trim-lora-v1 /workspace/ckpt/3999)" = "rm -f /workspace/ckpt/3999/.lab_download_ok && hf download PixelstoMotors/pi05-mecharm-trim-lora-v1 --local-dir /workspace/ckpt/3999 && touch /workspace/ckpt/3999/.lab_download_ok && du -sh /workspace/ckpt/3999" ]'
check "3e は \$HOME を Pod 側で読む" '[[ "$(lab_cmd_uv_sync)" == *"source \$HOME/.local/bin/env"* ]]'

rm -rf "$OUT1"
echo
echo "OK $OK / NG $NG"
[ $NG = 0 ]
```

### pi05/build_correction_episodes.py

```python
#!/usr/bin/env python3
"""build_correction_episodes.py — 実機推論 (巻き戻し・補正つき) の記録から π0.5 学習用エピソードを作る (2026-10-29).

入力 (1 試行 = 1 run_stem. run_policy_client.py --execute が残したもの):
  runs/pi05_policy/{run_stem}/{run_stem}.json            結果 (outcome / judgments)
  runs/pi05_policy/{run_stem}/log.jsonl                  推論・巻き戻し・補正の記録
  runs/pi05_policy/{run_stem}/recording/states.csv       actual (実測6軸) / gripper_cmd / stage (= 状態)
  runs/pi05_policy/{run_stem}/recording/top.mp4 + top_frame_log.csv

出力 (お手本 mecharm_redblock_box_teach_v1_trim2 と同じ形):
  datasets/{DATASET}/raw_episodes/{run_stem}/frames/000000.jpg ... / episode.npz / meta.json
  datasets/{DATASET}/index.json / README.md
  datasets/{DATASET}/code/  このスクリプトと読み込む部品の写し (データと対のコード)

作り方:
  - 使うのは 結果が「成功」(y) の run だけ
  - 時間軸は 10Hz. state は実測角の線形補間 + グリッパーは指令の時刻で 0/1 (build_demo_episodes と同じ)
    実測角の抜け (送信中) は --gap-fill で埋める (linear = corr_v1 / speed20 = corr_v2. 依頼 46)
  - 学習に使うのは状態が model / correct のステップだけ. rewind / home / wait (確認の入力待ち.
    人がブロックを置き直すと手が写る) / regrip (補正の R で開いてから閉じ終わるまで. 2026-10-30 依頼 35)
    のステップと,
    巻き戻しで取り消した区間 (区間を始めた時刻 〜 巻き戻しが終わった時刻) と,
    取り消した補正 (補正を始めた時刻 〜 戻り終えた時刻) は除く.
    除いたあとは「その手前」と「巻き戻したあとの続き」をつなぐ (戻った先は区間の始めの姿勢なので続く)
  - actions は「0.1 秒後の state」. 除いたあとに残ったステップで作り直す (trim2 と同じ作り方)
  - 止まっている区間は build_demo_episodes と同じ決まりで詰める (IDLE_* と --trim-mid-idle の
    mid_idle_keep_mask. 既定で詰める. --no-trim-mid-idle で前者だけ)
  - --trim-hold (corr_v3. 依頼 48): 中継点・補正の 1 刻みごとの「着いたあとの止まり」を, 区間ごとに
    残す数を変えて詰める (hold_keep_mask. 止まりの判定とずれの切り方は mid_idle_keep_mask と同じ)
  - 元の記録は読むだけ (上書き・移動・削除しない)

Usage:
  python3 pi05/build_correction_episodes.py                       # runs/pi05_policy の全 run
  python3 pi05/build_correction_episodes.py --run pi05_20261030_101500 --force
  python3 pi05/build_correction_episodes.py --check-with \\
      /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes
"""
import argparse
import csv
import json
import shutil
import sys
from pathlib import Path

import cv2
import numpy as np

_HERE = Path(__file__).resolve().parent
sys.path.insert(0, str(_HERE))

import build_demo_episodes as bde  # noqa: E402
from rewind_correct import MODE_CORRECT, MODE_MODEL, excluded_windows, step_keep_mask  # noqa: E402

DATA_ROOT = bde.DATA_ROOT
RUNS_ROOT = DATA_ROOT / "runs" / "pi05_policy"
DEFAULT_DATASET = "mecharm_redblock_box_corr_v1"
FPS = bde.FPS
# ---- 実測角の抜けの埋め方 (--gap-fill. 2026-10-31 依頼 46) ----
# 記録スレッドと本体は daemon への 1 本のつながりを鍵で順に使う. send_angles は daemon が送ったあとに
# 角度を読み直す間 (約 1.6 秒. 動いている間は読めずにやり直す) 返ってこないので, その間は実測角が残らない.
# 腕はこの抜けの頭で動き出し, 抜けの終わりの実測角 (着いた姿勢) で止まっている.
#   linear  : 抜けの前後の実測角をまっすぐ結ぶ (corr_v1. 1.6 秒かけてゆっくり動いたことになる)
#   speed20 : 抜けの頭から, 速度 20 の速さで前後の実測角を結ぶ直線 (関節空間. 全関節が同時に着く) を進み,
#             着いたら抜けの終わりまで止まる. 速さは trim2 の元の記録 (run_pick_place 19 本. 速度 20 で
#             0.32 秒おきに動いている間も読めていた) の, 動いている途中の先頭の関節の速さ 128 区間の中央値 29.8°/秒
GAP_FILL_MODES = ("linear", "speed20")
GAP_SEC = 0.25                  # 実測角の間がこれより長いところを「抜け」とみなす (ふだんは 0.1 秒おき)
SPEED20_DEG_PER_SEC = 30.0      # 速度 20 で動いている間の先頭の関節の速さ (上の 29.8°/秒)
GAP_MOVE_MIN_DEG = 0.5          # 抜けの前後でこれより動いていれば「動いた抜け」として数える
# ---- 着いたあとの止まりの詰め方 (--trim-hold. 2026-10-31 依頼 48. corr_v3) ----
# 推論・補正では 1 回の send_angles ごとに daemon の読み直し (約 1.6 秒) を待つので, 中継点・補正の 1 刻みの
# たびに「動いて止まる」をくり返す. trim2 の決まり (止まりの区間ごとに先頭 2 コマ) では, 区間が 2〜3 コマ
# おきに来るため止まりが約 50% 残る (corr_v2). この止まりは送信の確かめを待つだけで, 動作の意味はない.
#   model の区間       : 残さない (中継点の動きだけをつなぐ)
#   correct の区間     : 先頭 1 コマ (補正のコマを減らしすぎない. 補正は 1 刻みが 1 コマで動き終わる)
#   爪の切り替えの直前・直後の区間 : trim2 と同じ先頭 2 コマ (爪が動き終わるのを待つ意味がある) + gripper_guard
HOLD_KEEP_MODEL = 0
HOLD_KEEP_CORRECT = 1
HOLD_KEEP_GRIP = bde.MID_IDLE_KEEP_STEPS


def _rmtree(path):
    """exFAT では本体を消すと macOS が ._ (AppleDouble) も一緒に消すため, 後から ._ を消そうとして
    FileNotFoundError になる. もう無いものは飛ばして消す."""
    def _skip_missing(func, p, exc):
        exc = exc[1] if isinstance(exc, tuple) else exc   # onerror (3.11 まで) は exc_info
        if not isinstance(exc, FileNotFoundError):
            raise exc
    if sys.version_info >= (3, 12):
        shutil.rmtree(path, onexc=_skip_missing)
    else:
        shutil.rmtree(path, onerror=_skip_missing)


def load_stage_times(path):
    """states.csv の stage 行 (状態の切り替わり) と, 各行の stage 列."""
    ts, modes = [], []
    with path.open(newline="") as f:
        for row in csv.DictReader(f):
            if row.get("event_type") != "stage":
                continue
            try:
                ts.append(float(row["ts"])); modes.append(row.get("stage") or MODE_MODEL)
            except Exception:
                continue
    return np.array(ts), modes


def load_log(path):
    out = []
    if not path.exists():
        return out
    for line in path.read_text().splitlines():
        line = line.strip()
        if line:
            try:
                out.append(json.loads(line))
            except Exception:
                continue
    return out


def idle_keep_mask(state, actions):
    """build_demo_episodes.build_one の「停止区間を詰める」(IDLE_*) と同じ決まり. 戻り値: (keep, 詰めた数)."""
    n = len(state)
    motion = np.max(np.abs(actions - state), axis=1)
    keep = np.ones(n, dtype=bool)
    i, trimmed = 0, 0
    while i < n:
        if motion[i] < bde.IDLE_EPS_DEG:
            j = i
            while j < n and motion[j] < bde.IDLE_EPS_DEG:
                j += 1
            if (j - i) / FPS > bde.IDLE_MAX_SEC:
                cut_from = i + int(bde.IDLE_KEEP_SEC * FPS)
                keep[cut_from:j] = False
                trimmed += j - cut_from
            i = j
        else:
            i += 1
    guard = bde.gripper_guard_mask(state)
    trimmed -= int((~keep & guard).sum())
    keep |= guard
    return keep, trimmed


def fill_motion_gaps(t, at, aq, mode="speed20", gap_sec=GAP_SEC, speed=SPEED20_DEG_PER_SEC):
    """10Hz の時刻 t の関節角を, 実測角 (at, aq) から作る. 実測角があるところは実測角の線形補間.

    実測角の間が gap_sec より長い「抜け」[ta, tb] だけ, mode で埋め方を変える:
      linear  : qa → qb を ta〜tb でまっすぐ結ぶ (np.interp と同じ)
      speed20 : ta から qa → qb の直線を, いちばん大きく動く関節が speed (°/秒) になる速さで進み,
                着いたら tb まで qb で止まる. 着くまでの時間が抜けより長いときは抜けいっぱいを使う (linear と同じ)
    戻り値: (q (len(t), 6), 抜けの一覧 [{ta, tb, move_deg, move_sec}])
    """
    if mode not in GAP_FILL_MODES:
        raise ValueError(f"gap fill mode: {mode}")
    q = np.stack([np.interp(t, at, aq[:, k]) for k in range(6)], axis=1)
    gaps = []
    for i in np.flatnonzero(np.diff(at) > gap_sec):
        ta, tb, qa, qb = at[i], at[i + 1], aq[i], aq[i + 1]
        d = float(np.max(np.abs(qb - qa)))
        dur = min(d / speed, tb - ta) if mode == "speed20" else tb - ta
        gaps.append({"ta": float(ta), "tb": float(tb), "move_deg": d, "move_sec": float(dur)})
        if mode == "linear":
            continue
        m = (t > ta) & (t < tb)
        if not m.any():
            continue
        frac = np.ones(int(m.sum())) if dur <= 0 else np.clip((t[m] - ta) / dur, 0.0, 1.0)
        q[m] = qa + frac[:, None] * (qb - qa)
    return q, gaps


def logged_sends(log):
    """log.jsonl から, 送った目標とそのときの時刻の手がかりを集める.

    chunk  : 推論のチャンク. 実行した窓 [t_exec_start, t_exec_end] と, 送った順の目標 sent_targets
    correct: 補正の 1 刻み (送ったもの). 送る直前の時刻 t と目標 after
    """
    chunks, corr = [], []
    for r in log:
        if r.get("type") is None and "chunk" in r and r.get("t_exec_start") is not None:
            chunks.append({"chunk": r["chunk"], "t0": float(r["t_exec_start"]),
                           "t1": float(r.get("t_exec_end") or r["t_exec_start"]),
                           "targets": [np.asarray(x, dtype=float) for x in (r.get("sent_targets") or [])]})
        elif r.get("type") == "correction" and r.get("action") == "move" and r.get("sent"):
            corr.append({"t": float(r["t"]), "target": np.asarray(r["after"], dtype=float)})
    return chunks, corr


def match_gaps_to_sends(gaps, log, min_move=GAP_MOVE_MIN_DEG):
    """動いた抜けが, 記録にある送信 (チャンクの中継点 / 補正の 1 刻み) のどれに当たるかを数える.

    補正: 送る直前の時刻 t が [ta - 0.3, tb] に入る抜け. チャンク: 実行した窓の中の動いた抜けを
    送った順に sent_targets と組にする (数が合うときだけ). 組にできたものは, 抜けの終わりの実測角と
    目標の差 (いちばん大きい関節) を出す. 埋め方そのものには使わない (確かめるためだけ).
    """
    chunks, corr = logged_sends(log)
    moved = [g for g in gaps if g["move_deg"] > min_move]
    out = {"motion_gaps": len(moved), "matched_correction": 0, "matched_chunk": 0,
           "chunk_count_mismatch": 0, "ambiguous": 0, "unmatched": 0, "max_arrival_err_deg": None}
    errs, used = [], set()
    # codex 推奨: 候補の抜けが 2 つ以上ある補正 / 1 つの抜けに補正が 2 つ以上入るものは ambiguous として
    # 組にせず, 差の集計から外す
    cand = [[j for j, g in enumerate(moved) if g["ta"] - 0.3 <= c["t"] <= g["tb"]] for c in corr]
    hits = {}
    for js in cand:
        for j in js:
            hits[j] = hits.get(j, 0) + 1
    for c, js in zip(corr, cand):
        if len(js) == 1 and hits[js[0]] == 1:
            used.add(js[0]); out["matched_correction"] += 1
            errs.append(float(np.max(np.abs(moved[js[0]]["qb"] - c["target"]))))
        elif js:
            out["ambiguous"] += 1
            used.update(js)
    for ch in chunks:
        inside = [j for j, g in enumerate(moved) if j not in used and ch["t0"] - 0.3 <= g["ta"] <= ch["t1"]]
        if len(inside) != len(ch["targets"]):
            out["chunk_count_mismatch"] += 1
            continue
        for j, tg in zip(inside, ch["targets"]):
            used.add(j); out["matched_chunk"] += 1
            errs.append(float(np.max(np.abs(moved[j]["qb"] - tg))))
    out["unmatched"] = len(moved) - len(used)
    out["note"] = "確かめのためだけ (埋め方には使わない). チャンクは数が合うとき送った順に組にする"
    if errs:
        out["max_arrival_err_deg"] = round(max(errs), 2)
    return out


def next_state_actions(state):
    """actions = 次のステップの state (最後は自分自身). 7 列とも."""
    return np.concatenate([state[1:], state[-1:]], axis=0)


def hold_keep_mask(state, actions, modes, keep_model=HOLD_KEEP_MODEL, keep_correct=HOLD_KEEP_CORRECT,
                   keep_grip=HOLD_KEEP_GRIP):
    """bde.mid_idle_keep_mask と同じ止まりの判定・同じずれの切り方で, 区間ごとに残す数を変える (依頼 48).

    止まりの区間 (つながった止まりのコマ) ごとに残す数を決める:
      爪の切り替えのコマ (action[6] != state[6]) のすぐ前で終わる / すぐ後で始まる区間 → keep_grip
      それ以外は区間の先頭のコマの状態で, correct → keep_correct / それ以外 → keep_model
    区間の中で先頭からのずれが MID_IDLE_DRIFT_DEG を超えたら, そこから数え直す (mid_idle_keep_mask と同じ).
    codex 必須 (依頼 48): 数え直すコマ (ずれの切れ目) は残す数が 0 でも残す. 0.2° ずつ動き続ける区間が
    1 コマの大きな跳びにならないように (ゆっくりした動きは 0.5° ごとの姿勢が残る).
    爪の切り替えの前後 (gripper_guard_mask) とエピソードの両端は必ず残す.
    keep_model = keep_correct = keep_grip = MID_IDLE_KEEP_STEPS なら mid_idle_keep_mask と同じ結果.
    """
    n = len(state)
    joint_still = np.max(np.abs(actions[:, :6] - state[:, :6]), axis=1) < bde.MID_IDLE_EPS_DEG
    grip_step = actions[:, 6] != state[:, 6]
    idle = joint_still & ~grip_step
    keep = np.ones(n, dtype=bool)
    i = 0
    while i < n:
        if not idle[i]:
            i += 1
            continue
        j = i
        while j < n and idle[j]:
            j += 1
        if (j < n and grip_step[j]) or (i > 0 and grip_step[i - 1]):
            k = keep_grip
        else:
            k = keep_correct if modes[i] == MODE_CORRECT else keep_model
        anchor, kept = i, 0
        for x in range(i, j):
            if np.max(np.abs(state[x, :6] - state[anchor, :6])) > bde.MID_IDLE_DRIFT_DEG:
                anchor, kept = x, 0
                if k == 0:
                    continue        # ずれの切れ目は残す (keep[x] は True のまま)
            if kept < k:
                kept += 1
            else:
                keep[x] = False
        i = j
    keep |= bde.gripper_guard_mask(state)
    if n:
        keep[0] = True
        keep[-1] = True
    return keep


def select_steps(t, q, g, mode_ts, modes, windows, trim_mid_idle=True, trim_hold=False):
    """学習に使うステップを選び, state / actions を作る (ファイルを読まない部分. テストで使う).

    戻り値: dict(idx=元の t の添字, state, actions, modes, counts)
    """
    state_all = np.concatenate([q, g[:, None]], axis=1).astype(np.float32)
    keep, m_all = step_keep_mask(t, mode_ts, modes, windows)
    idx = np.flatnonzero(keep)
    counts = {"grid_steps": int(len(t)),
              "excluded_mode": int((~np.isin(m_all, (MODE_MODEL, MODE_CORRECT))).sum()),
              "excluded_window": int((np.isin(m_all, (MODE_MODEL, MODE_CORRECT)) & ~keep).sum())}
    if len(idx) == 0:
        return {"idx": idx, "state": state_all[:0], "actions": state_all[:0], "modes": [], "counts": counts}
    state = state_all[idx]
    # 除いたあとに残ったステップでつなぐ. actions は「つないだ並びでの次の state」
    actions = next_state_actions(state)
    k1, idle_trimmed = idle_keep_mask(state, actions)
    idx, state, actions = idx[k1], state[k1], actions[k1]
    counts["idle_trimmed"] = int(idle_trimmed)
    counts["steps_before_mid_trim"] = int(len(idx))
    mid = 0
    if trim_mid_idle and len(idx):
        if trim_hold:
            mk = hold_keep_mask(state, actions, [str(m_all[k]) for k in idx])
        else:
            mk = bde.mid_idle_keep_mask(state, actions)
        mid = int((~mk).sum())
        idx, state, actions = idx[mk], state[mk], actions[mk]
    # trim2 と同じ: 関節 6 列は残ったステップで作り直す. グリッパー列は元の (次の) 指令のまま
    actions = actions.copy()
    actions[:-1, :6] = state[1:, :6]
    actions[-1, :6] = state[-1, :6]
    counts["mid_idle_trimmed"] = mid
    sel_modes = [str(m_all[k]) for k in idx]
    counts["model_steps"] = sel_modes.count(MODE_MODEL)
    counts["correct_steps"] = sel_modes.count(MODE_CORRECT)
    return {"idx": idx, "state": state, "actions": actions, "modes": sel_modes, "counts": counts}


def build_one(run_dir, out_dir, args):
    stem = run_dir.name
    trial_p = run_dir / f"{stem}.json"
    rec = run_dir / "recording"
    if not trial_p.exists():
        return {"run": stem, "used": False, "reason": f"missing:{trial_p.name}"}
    trial = json.loads(trial_p.read_text())
    if trial.get("recording_enabled") is not True:
        return {"run": stem, "used": False, "reason": "no_recording"}
    if trial.get("outcome") != "success":
        return {"run": stem, "used": False, "reason": f"outcome={trial.get('outcome')}"}
    need = [rec / "states.csv", rec / "top.mp4", rec / "top_frame_log.csv"]
    missing = [p.name for p in need if not p.exists()]
    if missing:
        return {"run": stem, "used": False, "reason": "missing:" + ",".join(missing)}
    log = load_log(run_dir / "log.jsonl")
    unfinished = [r for r in log if r.get("type") == "rewind" and not r.get("finished", True)]
    unfinished += [r for r in log if r.get("type") == "correction" and r.get("action") == "cancel"
                   and not r.get("finished", True)]
    if unfinished:
        # 戻りきれなかった巻き戻しがあると, つないだ前後で姿勢が続かない
        return {"run": stem, "used": False, "reason": f"rewind_unfinished x{len(unfinished)}"}

    at, aq, gt, gs = bde.load_states(rec / "states.csv")
    if len(at) < bde.MIN_ACTUAL_SAMPLES:
        return {"run": stem, "used": False, "reason": f"actual 実測が少ない ({len(at)})"}
    order = np.argsort(at); at, aq = at[order], aq[order]
    at, aq = bde.drop_spikes(at, aq)
    try:
        tm = json.loads((rec / "top_meta.json").read_text())
    except Exception:
        tm = {}
    if tm.get("status") != "ok":
        return {"run": stem, "used": False, "reason": f"recording_status={tm.get('status')}"}
    fidx, fts = bde.load_frame_log(rec / "top_frame_log.csv")
    if len(fts) < FPS:
        return {"run": stem, "used": False, "reason": f"top フレームが少ない ({len(fts)})"}
    t0, t1 = max(fts[0], at[0]), min(fts[-1], at[-1])
    if t1 - t0 < 3.0:
        return {"run": stem, "used": False, "reason": "記録の重なりが短い"}
    t = np.arange(t0, t1, 1.0 / FPS)
    gap_fill = getattr(args, "gap_fill", "linear")
    q, gaps = fill_motion_gaps(t, at, aq, mode=gap_fill)
    for g in gaps:
        k = int(np.searchsorted(at, g["tb"]))
        g["qb"] = aq[k]
    gap_match = match_gaps_to_sends(gaps, log)
    g = np.zeros(len(t))
    if len(gt):
        go = np.argsort(gt); gt, gs = gt[go], gs[go]
        for i, ti in enumerate(t):
            k = np.searchsorted(gt, ti, side="right") - 1
            g[i] = gs[k] if k >= 0 else 0.0

    mode_ts, modes = load_stage_times(rec / "states.csv")
    windows = excluded_windows(log)
    trim_hold = getattr(args, "trim_hold", False)
    sel = select_steps(t, q, g, mode_ts, modes, windows, trim_mid_idle=not args.no_trim_mid_idle,
                       trim_hold=trim_hold)
    if len(sel["idx"]) < FPS:
        return {"run": stem, "used": False, "reason": f"使えるステップが少ない ({len(sel['idx'])})"}
    tt = t[sel["idx"]]

    # codex R1-4: 画像の候補も同じ決まりで絞る (除いた区間・rewind / home の画像を, 境界の
    # 最近傍として拾わない). 候補から選ぶので, 除いた時刻の画像は入らない
    fkeep, _ = step_keep_mask(fts, mode_ts, modes, windows)
    fidx, fts = fidx[fkeep], fts[fkeep]
    if len(fts) < 2:
        return {"run": stem, "used": False, "reason": "使える画像が少ない"}
    nearest = np.clip(np.searchsorted(fts, tt), 1, len(fts) - 1)
    left = fts[nearest - 1]; right = fts[nearest]
    nearest = np.where(np.abs(tt - left) <= np.abs(right - tt), nearest - 1, nearest)
    want = {}
    for step, n in enumerate(nearest):
        want.setdefault(int(fidx[n]), []).append(step)

    if out_dir.exists():
        if not args.force:
            return {"run": stem, "used": True, "reason": "既存 (スキップ・--force で再生成)",
                    "steps": int(len(tt))}
        _rmtree(out_dir)
    (out_dir / "frames").mkdir(parents=True)
    cap = cv2.VideoCapture(str(rec / "top.mp4"))
    fi, written, max_need, size = 0, 0, max(want), None
    while fi <= max_need:
        ok, frame = cap.read()
        if not ok:
            break
        if fi in want:
            h, w = frame.shape[:2]
            s = bde.IMG_LONG / max(h, w)
            small = cv2.resize(frame, (round(w * s), round(h * s)), interpolation=cv2.INTER_AREA)
            size = small.shape[1], small.shape[0]
            for step in want[fi]:
                # codex R3 P2: 保存に失敗したコマは数えない (欠けたエピソードを採用しない)
                if cv2.imwrite(str(out_dir / "frames" / f"{step:06d}.jpg"), small,
                               [cv2.IMWRITE_JPEG_QUALITY, bde.JPEG_QUALITY]):
                    written += 1
        fi += 1
    cap.release()
    if written != len(tt):
        _rmtree(out_dir)
        return {"run": stem, "used": False,
                "reason": f"フレーム抽出不足 written={written} steps={len(tt)} (mp4 と frame_log の不一致)"}

    np.savez_compressed(out_dir / "episode.npz",
                        t=(np.arange(len(tt)) / FPS).astype(np.float64),
                        t_orig=tt - tt[0], state=sel["state"], actions=sel["actions"])
    c = sel["counts"]
    meta = {
        "run_stem": stem, "task": bde.TASK, "fps": FPS, "steps": int(len(tt)),
        "duration_sec": round(len(tt) / FPS, 1),
        "idle_trimmed_sec": round(c.get("idle_trimmed", 0) / FPS, 1),
        "trim_mid_idle": not args.no_trim_mid_idle,
        "trim_hold": ({"keep_model": HOLD_KEEP_MODEL, "keep_correct": HOLD_KEEP_CORRECT,
                       "keep_grip": HOLD_KEEP_GRIP} if trim_hold and not args.no_trim_mid_idle else None),
        "steps_before_mid_trim": c.get("steps_before_mid_trim"),
        "mid_idle_trimmed_steps": c.get("mid_idle_trimmed", 0),
        "image_size": size, "state_dim": 7,
        "state_names": ["j0", "j1", "j2", "j3", "j4", "j5", "gripper"],
        "action": "absolute target = state 0.1s later",
        "actual_samples": int(len(at)), "gripper_cmds": int(len(gt)),
        "human_verdict": {"pick": "yes", "place": "yes"},
        "source": "pi05_policy (model + correct)",
        "model_steps": c.get("model_steps", 0), "correct_steps": c.get("correct_steps", 0),
        "excluded_mode_steps": c["excluded_mode"], "excluded_window_steps": c["excluded_window"],
        "excluded_windows": [[round(a, 3), round(b, 3)] for a, b in windows],
        "rewinds": sum(1 for r in log if r.get("type") == "rewind"),
        "corrections_accepted": sum(1 for r in log if r.get("type") == "correction"
                                    and r.get("action") == "accept"),
        # 依頼 46: 補正の数は「補正の操作として記録された行の数」(log.jsonl の type=correction の行. move / accept /
        # cancel / gripper など全部) で数える
        "correction_rows": sum(1 for r in log if r.get("type") == "correction"),
        "correction_moves": sum(1 for r in log if r.get("type") == "correction" and r.get("action") == "move"),
        "gap_fill": {"mode": gap_fill, "gap_sec": GAP_SEC,
                     "speed_deg_per_sec": SPEED20_DEG_PER_SEC if gap_fill == "speed20" else None,
                     "gaps": len(gaps), **gap_match},
        "max_step_deg": [round(float(v), 2) for v in
                         (np.abs(np.diff(sel["state"][:, :6], axis=0)).max(axis=0) if len(sel["state"]) > 1
                          else np.zeros(6))],
        "step_modes": sel["modes"],
    }
    (out_dir / "meta.json").write_text(json.dumps(meta, indent=2, ensure_ascii=False))
    return {"run": stem, "used": True, "reason": "ok", "steps": int(len(tt)),
            "model_steps": meta["model_steps"], "correct_steps": meta["correct_steps"],
            "rewinds": meta["rewinds"], "corrections_accepted": meta["corrections_accepted"],
            "correction_rows": meta["correction_rows"], "max_step_deg": meta["max_step_deg"]}


def check_compat(ours, ref):
    """補正エピソードがお手本と一緒に学習に使えるか (形・キー・FPS・画像の大きさ). 問題の一覧を返す."""
    probs = []

    def _eps(d):
        return sorted(p.parent for p in Path(d).glob("*/episode.npz"))
    a, b = _eps(ours), _eps(ref)
    if not a:
        return ["補正エピソードがない"]
    if not b:
        return ["お手本エピソードがない"]
    rm = json.loads((b[0] / "meta.json").read_text())
    rz = np.load(b[0] / "episode.npz")
    for ep in a:
        m = json.loads((ep / "meta.json").read_text())
        z = np.load(ep / "episode.npz")
        if sorted(z.files) != sorted(rz.files):
            probs.append(f"{ep.name}: npz のキー {sorted(z.files)} != お手本 {sorted(rz.files)}")
        for k in ("state", "actions"):
            if z[k].dtype != rz[k].dtype or z[k].shape[1:] != rz[k].shape[1:]:
                probs.append(f"{ep.name}: {k} {z[k].dtype}{z[k].shape} != お手本 {rz[k].dtype}{rz[k].shape}")
        for k in ("fps", "image_size", "state_dim", "state_names", "task"):
            if m.get(k) != rm.get(k):
                probs.append(f"{ep.name}: meta {k}={m.get(k)} != お手本 {rm.get(k)}")
        n = len(z["state"])
        # exFAT に macOS が作る AppleDouble (._000000.jpg) は画像ではないので数えない
        nf = len(list((ep / "frames").glob("[!.]*.jpg")))
        if not (n == len(z["actions"]) == nf == len(z["t"])):
            probs.append(f"{ep.name}: 長さが合わない state={n} actions={len(z['actions'])} frames={nf}")
        img = cv2.imread(str(ep / "frames" / "000000.jpg"))
        if img is None or (img.shape[1], img.shape[0]) != tuple(rm["image_size"]):
            probs.append(f"{ep.name}: 画像の大きさ {None if img is None else img.shape[:2][::-1]} "
                         f"!= {rm['image_size']}")
    return probs


def write_readme(ds, results, args):
    used = [r for r in results.values() if r.get("used")]
    lines = [
        f"# {ds.name}", "",
        "実機推論 (`pi05/run_policy_client.py --execute`) で, 失敗しかけたら巻き戻し (b) /",
        "キーボードで関節を直し (c) ながら成功させた run から作ったエピソード。",
        "お手本 `mecharm_redblock_box_teach_v1_trim2` と同じ形 (frames/ + episode.npz + meta.json, 10Hz)。", "",
        "- 作成: `python3 pi05/build_correction_episodes.py`"
        + ("" if not args.no_trim_mid_idle else " --no-trim-mid-idle")
        + f" --gap-fill {args.gap_fill}"
        + (" --trim-hold" if getattr(args, "trim_hold", False) else ""),
        f"- 元データ: `runs/pi05_policy/<run_stem>/` (読むだけ。上書き・移動・削除しない)", "",
        "## 作り方", "",
        "- 結果が「成功」(y) の run だけ使う (`{run_stem}.json` の outcome)",
        "- 状態が model / correct のステップだけ使う。rewind / home / wait (確認の入力待ち。手が写り得る) / "
        "regrip (補正の R で開いてから閉じ終わるまで) は除く",
        "- 巻き戻しで取り消した区間 (区間を始めた時刻 〜 巻き戻しが終わった時刻) と, 取り消した補正は除き,",
        "  その手前と巻き戻したあとの続きをつなぐ",
        "- actions は「0.1 秒後の state」(つないだ並びで作り直す。グリッパー列は次の指令)",
        "- 止まっている区間は build_demo_episodes と同じ決まり (IDLE_* と mid_idle_keep_mask) で詰める"
        + ("" if not getattr(args, "trim_hold", False) else
           f"。ただし途中の止まりは区間ごとに残す数を変える (--trim-hold): model {HOLD_KEEP_MODEL} コマ / "
           f"correct {HOLD_KEEP_CORRECT} コマ / 爪の切り替えの直前・直後 {HOLD_KEEP_GRIP} コマ (trim2 と同じ) + 切り替えの前後 1 コマ"),
        "- 実測角の抜け (送信の間 daemon とのつながりがふさがる. 約 1.6 秒) の埋め方: "
        + ("前後の実測角をまっすぐ結ぶ (linear)" if args.gap_fill == "linear" else
           f"抜けの頭から速度 20 の速さ ({SPEED20_DEG_PER_SEC:.0f}°/秒. いちばん大きく動く関節) で前後の実測角を結ぶ"
           "直線を進み, 着いたら止まる (speed20)"),
        "- 戻りきれなかった巻き戻しがある run は使わない (前後の姿勢が続かない)", "",
        "## 数", "",
        f"採用 {len(used)} 本 / 総ステップ {sum(r.get('steps', 0) for r in used)} "
        f"(model {sum(r.get('model_steps', 0) for r in used)} / correct {sum(r.get('correct_steps', 0) for r in used)})", "",
        "| run_stem | 採用 | steps | model | correct | 巻き戻し | 補正 (受け入れ) | 補正の行 | 1 コマの最大 (j0〜j5) | 理由 |",
        "| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |",
    ]
    for k in sorted(results):
        r = results[k]
        lines.append(f"| {k} | {'○' if r.get('used') else '-'} | {r.get('steps', '')} | "
                     f"{r.get('model_steps', '')} | {r.get('correct_steps', '')} | {r.get('rewinds', '')} | "
                     f"{r.get('corrections_accepted', '')} | {r.get('correction_rows', '')} | "
                     f"{' '.join(str(v) for v in r.get('max_step_deg') or [])} | {r.get('reason', '')} |")
    (ds / "README.md").write_text("\n".join(lines) + "\n")


def copy_code(ds):
    """データと対のコード: このデータを作ったスクリプト (と読み込む部品) を ds/code/ に写す."""
    dest = ds / "code"
    dest.mkdir(parents=True, exist_ok=True)
    for name in ("build_correction_episodes.py", "rewind_correct.py", "build_demo_episodes.py"):
        shutil.copy2(_HERE / name, dest / name)
    return dest


def main():
    ap = argparse.ArgumentParser()
    ap.add_argument("--dataset", default=DEFAULT_DATASET)
    ap.add_argument("--runs-root", default=str(RUNS_ROOT), help="run_policy_client の記録の置き場所")
    ap.add_argument("--run", action="append", help="特定の run_stem だけ (複数可)")
    ap.add_argument("--force", action="store_true", help="既存エピソードを作り直す")
    ap.add_argument("--no-trim-mid-idle", action="store_true",
                    help="途中の停止を mid_idle_keep_mask で詰めない (既定は詰める = trim2 と同じ)")
    ap.add_argument("--check-with", help="お手本の raw_episodes. 一緒に学習に使えるかを確かめる")
    ap.add_argument("--gap-fill", choices=GAP_FILL_MODES, default="linear",
                    help="実測角の抜けの埋め方. linear = 前後をまっすぐ (corr_v1) / speed20 = 速度 20 の速さで進んで止まる "
                         "(corr_v2. 依頼 46)")
    ap.add_argument("--trim-hold", action="store_true",
                    help="中継点・補正の 1 刻みごとの着いたあとの止まりを区間ごとに詰める (corr_v3. 依頼 48)")
    ap.add_argument("--data-root", help=argparse.SUPPRESS)   # テスト用 (KIOXIA の代わり)
    args = ap.parse_args()
    if args.trim_hold and args.no_trim_mid_idle:
        sys.exit("[ERROR] --trim-hold は途中の止まりを詰めるときの決まり. --no-trim-mid-idle とは一緒に使えない")
    if args.data_root:
        root = Path(args.data_root)
    else:
        bde.ensure_ssd()
        root = DATA_ROOT
    runs_root = Path(args.runs_root)
    ds = root / "datasets" / args.dataset
    out_root = ds / "raw_episodes"
    # 既存のお手本データセット (pi05_policy 以外から作ったエピソード) には書かない (codex R1 B3)
    others = [p.parent.name for p in out_root.glob("*/meta.json")
              if not str(json.loads(p.read_text()).get("source", "")).startswith("pi05_policy")]
    if others:
        sys.exit(f"[ABORT] 出力先に補正エピソード以外が入っています: {ds} (例: {', '.join(others[:3])})\n"
                 "        元データを上書きしないよう, --dataset に別の名前を指定してください")
    runs = sorted(p for p in runs_root.glob("pi05_*") if p.is_dir() and (p / "recording").is_dir())
    if args.run:
        runs = [p for p in runs if p.name in set(args.run)]
    if not runs:
        print(f"[INFO] 記録つきの run がない: {runs_root}")
    out_root.mkdir(parents=True, exist_ok=True)
    results = {}
    for r in runs:
        try:
            res = build_one(r, out_root / r.name, args)
        except Exception as e:
            res = {"run": r.name, "used": False, "reason": f"exception:{type(e).__name__}:{e}"}
        results[r.name] = res
        print(f"[{'OK ' if res['used'] else '-- '}] {res['run']}  {res.get('steps', '')}  {res['reason']}")
    index_path = ds / "index.json"
    old = json.loads(index_path.read_text()) if index_path.exists() else {}
    old.update(results)
    index_path.write_text(json.dumps(old, indent=2, ensure_ascii=False))
    write_readme(ds, old, args)
    print(f"[CODE] データと対のコード → {copy_code(ds)}")
    used = [v for v in old.values() if v.get("used")]
    print(f"\n採用エピソード合計: {len(used)}  総ステップ: {sum(v.get('steps', 0) for v in used)}  → {out_root}")
    if args.check_with:
        probs = check_compat(out_root, args.check_with)
        print("[CHECK] お手本と一緒に使えるか: " + ("OK" if not probs else f"NG {len(probs)} 件"))
        for p in probs:
            print("        " + p)
        return 1 if probs else 0
    return 0


if __name__ == "__main__":
    sys.exit(main())
```

### pi05/merge_raw_episodes.py

```python
#!/usr/bin/env python3
"""merge_raw_episodes.py — いくつかの raw_episodes を 1 つのデータセットにまとめる (2026-10-31 依頼 45).

お手本 (teach_v1_trim2) と補正エピソード (corr_v1) を合わせて, 1 つの raw_episodes にする.
1 つにするのは, 学習 (convert_to_lerobot.py --raw-dir) も実機 (run_policy_client.py --raw-dir の安全範囲・
eval_policy_offline.py) も「学習に使ったデータ」を 1 つのフォルダで受け取るため.

  python3 pi05/merge_raw_episodes.py \\
      --src mecharm_redblock_box_teach_v1_trim2 --src mecharm_redblock_box_corr_v1 \\
      --dataset mecharm_redblock_box_teach_v1_trim2_corr_v1 --tar

出力:
  datasets/{DATASET}/raw_episodes/{エピソード}/  元のエピソードの写し (frames/ episode.npz meta.json)
  datasets/{DATASET}/index.json / README.md     どの元から何本・何コマ
  datasets/{DATASET}/code/merge_raw_episodes.py このスクリプトの写し (データと対のコード)
  datasets/{DATASET}/{DATASET}_raw_episodes.tar (--tar) Pod へ送る形. ._* (AppleDouble) は入れない

決まり:
  - 元のデータセットは読むだけ (上書き・移動・削除しない)
  - 写す前に, 全部の元が お手本 (最初の --src) と一緒に使えるか (キー・型・FPS・画像の大きさ) を確かめ,
    合わなければ何も書かずに止まる
  - エピソード名が重なったら止まる. 出力先がもうあれば止まる (--force で作り直す)
  - exFAT に macOS が作る ._* (AppleDouble) は写さない
"""
import argparse
import json
import os
import shutil
import subprocess
import sys
from pathlib import Path

_HERE = Path(__file__).resolve()
sys.path.insert(0, str(_HERE.parent))

import build_demo_episodes as bde  # noqa: E402
from build_correction_episodes import _rmtree, check_compat  # noqa: E402

DATA_ROOT = bde.DATA_ROOT


def episodes(raw):
    return sorted(p.parent for p in Path(raw).glob("[!.]*/episode.npz"))


def ep_summary(ep):
    meta = json.loads((ep / "meta.json").read_text())
    return {"steps": int(meta["steps"]), "correct_steps": int(meta.get("correct_steps", 0)),
            "model_steps": int(meta.get("model_steps", 0)), "source": meta.get("source", "")}


def _ignore_appledouble(_dir, names):
    return [n for n in names if n.startswith("._")]


def make_tar(ds, name):
    """Pod へ送る tar (中身は raw_episodes/ だけ). ._* と macOS の拡張属性を入れない."""
    out = ds / f"{name}_raw_episodes.tar"
    env = dict(os.environ, COPYFILE_DISABLE="1")
    subprocess.run(["tar", "--exclude", "._*", "-cf", str(out), "raw_episodes"],
                   cwd=str(ds), env=env, check=True)
    return out


def main():
    ap = argparse.ArgumentParser()
    ap.add_argument("--src", action="append", required=True,
                    help="まとめる元のデータセット名 (datasets/ の下). 最初の 1 つをお手本として形をそろえる")
    ap.add_argument("--dataset", required=True, help="まとめた先のデータセット名 (新しい名前)")
    ap.add_argument("--force", action="store_true", help="まとめた先を作り直す (元には触らない)")
    ap.add_argument("--tar", action="store_true", help="Pod へ送る tar も作る")
    ap.add_argument("--data-root", help=argparse.SUPPRESS)   # テスト用 (KIOXIA の代わり)
    args = ap.parse_args()
    if args.data_root:
        root = Path(args.data_root)
    else:
        bde.ensure_ssd()
        root = DATA_ROOT
    dsroot = root / "datasets"
    if args.dataset in args.src:
        sys.exit(f"[ABORT] まとめた先が元と同じ名前: {args.dataset}")
    srcs = [dsroot / s / "raw_episodes" for s in args.src]
    for s in srcs:
        if not episodes(s):
            sys.exit(f"[ABORT] エピソードがない: {s}")

    # 形の確かめ (書く前に)
    ref = srcs[0]
    for s in srcs[1:]:
        probs = check_compat(s, ref)
        if probs:
            print(f"[ABORT] {s} がお手本 {ref} と合わない:")
            for p in probs:
                print("        " + p)
            return 1
    names = {}
    for s in srcs:
        for ep in episodes(s):
            if ep.name in names:
                sys.exit(f"[ABORT] エピソード名が重なる: {ep.name} ({names[ep.name]} と {s})")
            names[ep.name] = s

    ds = dsroot / args.dataset
    if ds.exists():
        if not args.force:
            sys.exit(f"[ABORT] もうある: {ds} (作り直すなら --force)")
        _rmtree(ds)
    out = ds / "raw_episodes"
    out.mkdir(parents=True)
    index = {"sources": {}, "episodes": {}}
    for src_name, s in zip(args.src, srcs):
        eps = episodes(s)
        for ep in eps:
            shutil.copytree(ep, out / ep.name, ignore=_ignore_appledouble)
            index["episodes"][ep.name] = dict(ep_summary(ep), from_dataset=src_name)
        index["sources"][src_name] = {
            "episodes": len(eps), "steps": sum(index["episodes"][e.name]["steps"] for e in eps),
            "correct_steps": sum(index["episodes"][e.name]["correct_steps"] for e in eps)}
        print(f"[COPY] {src_name}: {len(eps)} 本 / {index['sources'][src_name]['steps']} コマ")

    # 写したあとも同じ形か (コマ数・キー)
    probs = check_compat(out, ref)
    if probs:
        print("[NG  ] まとめたあとの確かめ:")
        for p in probs:
            print("        " + p)
        return 1
    total_eps = len(index["episodes"])
    total_steps = sum(v["steps"] for v in index["episodes"].values())
    index.update(total_episodes=total_eps, total_steps=total_steps,
                 repo_id=f"local/{args.dataset}")
    (ds / "index.json").write_text(json.dumps(index, indent=2, ensure_ascii=False))
    lines = [
        f"# {args.dataset}", "",
        "いくつかの raw_episodes を 1 つにまとめたデータセット (元は読むだけ。写しを置く)。", "",
        "- 作成: `python3 pi05/merge_raw_episodes.py "
        + " ".join(f"--src {s}" for s in args.src) + f" --dataset {args.dataset}`",
        f"- LeRobot に変換するときの repo_id: `local/{args.dataset}`", "",
        f"合計 {total_eps} 本 / {total_steps} コマ", "",
        "| 元 | 本数 | コマ | うち補正 (correct) |", "| --- | --- | --- | --- |",
    ]
    for k, v in index["sources"].items():
        lines.append(f"| {k} | {v['episodes']} | {v['steps']} | {v['correct_steps']} |")
    (ds / "README.md").write_text("\n".join(lines) + "\n")
    code = ds / "code"
    code.mkdir(exist_ok=True)
    shutil.copy2(_HERE, code / _HERE.name)   # データと対のコード
    print(f"\n合計 {total_eps} 本 / {total_steps} コマ → {out}")
    if args.tar:
        t = make_tar(ds, args.dataset)
        print(f"[TAR ] {t} ({t.stat().st_size / 1e6:.0f} MB)")
    return 0


if __name__ == "__main__":
    sys.exit(main())
```

### pi05/policy_recorder.py

```python
#!/usr/bin/env python3
"""policy_recorder.py — 実機推論 (run_policy_client.py --execute) の間, 上カメラと実測角を 1 秒 10 コマで残す (2026-10-29).

お手本 (record_teach_demo.py + recorder.py --top) と同じ形で書くので,
build_demo_episodes.build_one() がそのまま読める:
  {run_dir}/recording/states.csv          recorder.py と同じ列. actual / gripper_cmd / stage 行.
                                          stage 列 = その時の状態 (model / rewind / correct / home / wait)
  {run_dir}/recording/top.mp4             上カメラ (元の大きさ. 10 コマ/秒)
  {run_dir}/recording/top_frame_log.csv   frame_idx, capture_ts (+ mode 列. 1 コマごとの状態)
  {run_dir}/recording/top_meta.json       コマ数・実効 fps など

アームへは何も送らない (関節角を読むだけ). daemon のソケットは 1 本を本体と共用するので,
install_daemon_lock() で 1 回のやりとりごとに鍵をかける (読み書きが混ざらないように).

2026-10-31 依頼 46: 送っている間の角度の抜けについて
  daemon は send_angles を受けると, 送ったあとに角度を読み直す (動いている間は読めずにやり直す) まで
  返事をしない (約 1.6 秒. 爪は約 3.6 秒). daemon は 1 本のつながりを 1 件ずつ処理するので, その間は
  記録スレッドも角度を読めない. 腕はこの間に動き終わる (Log17 の記録で 1.5〜3.6 秒の抜け).
  記録の側で直せるのは次の 2 つだけ (送る指令・到着の判定・待ち時間は変えない):
    - 本体が読んだ角度 (到着の確かめ・送る直前の読み) も actual 行に残す (note=main)
    - daemon とのやりとり 1 回ごとの始まりと長さを残す (send_angles 行 / rpc 行). 送った目標と時刻が
      分かるので, あとから build_correction_episodes.py --gap-fill speed20 で抜けを埋められる
  抜けそのものをなくすには daemon の送ったあとの読み直しを変える必要がある (決めるのはエイイチ).
"""
import csv
import json
import math
import threading
import time
from pathlib import Path

import cv2

import visual_servo_pick as vsp

RECORD_FPS = 10.0
FRAME_INTERVAL = 1.0 / RECORD_FPS
ANGLE_INTERVAL = 1.0 / RECORD_FPS
FOURCC = "avc1"                 # recorder.py と同じ
STATES_COLS = ["ts", "event_type", "stage",
               "j0", "j1", "j2", "j3", "j4", "j5",
               "speed", "gripper_state",
               "ts_send", "ts_arrival", "attempt", "arrived",
               "note"]          # recorder.py の STATES_COLS と同じ
FRAME_LOG_COLS = ["frame_idx", "capture_ts", "mode"]
FLUSH_INTERVAL = 1.0
STOP_JOIN_SEC = 5.0             # stop() でスレッドの終わりを待つ上限
FRAME_WAIT_SEC = 2.0            # 本体が画像を求めたとき, 新しいコマを待つ上限


_rpc_observers = []             # daemon とのやりとり 1 回ごとに呼ぶ関数 (記録用. 依頼 46)


def add_rpc_observer(fn):
    if fn not in _rpc_observers:
        _rpc_observers.append(fn)


def remove_rpc_observer(fn):
    if fn in _rpc_observers:
        _rpc_observers.remove(fn)


def _notify_rpc(cmd_obj, resp, t0, t1, err):
    for fn in list(_rpc_observers):
        try:
            fn(cmd_obj, resp, t0, t1, err)
        except Exception:
            pass                # 記録の失敗で本体を止めない


def install_daemon_lock():
    """visual_servo_pick._daemon_request を「1 回のやりとりごとに鍵をかける」版に差し替える.

    daemon_get_angles / daemon_send_angles / daemon_set_gripper* はどれも
    モジュールの _daemon_request を呼ぶので, ここを差し替えれば全部に効く.
    記録スレッドの get_angles と本体の send_angles が同じソケットで混ざらないようにする.
    中身 (送る内容・タイムアウト) は変えない. 2 回呼んでも 1 回だけ差し替える.
    依頼 46: やりとりが終わったら (鍵を外してから) add_rpc_observer で足した関数に
    (送った dict, 返事 or None, 始めた時刻, 終わった時刻, 例外 or None) を渡す. 返事と例外はそのまま返す.
    再接続のときの入れ子の ping (外のやりとりの鍵の中) は渡さない (codex 推奨).
    観察は同じスレッドで呼ぶ (states.csv に 1 行書くだけ. 本体へ返るのがその分だけ遅れる).
    """
    if getattr(vsp._daemon_request, "_policy_locked", False):
        return
    orig = vsp._daemon_request
    lock = threading.RLock()
    depth = threading.local()       # 再接続の中の ping (鍵の中で呼ばれる入れ子) は観察に渡さない

    def _locked(*a, **k):
        cmd_obj = a[0] if a else k.get("cmd_obj")
        resp, err, t0, t1 = None, None, None, None
        nested = getattr(depth, "n", 0) > 0
        try:
            depth.n = getattr(depth, "n", 0) + 1
            with lock:
                t0 = time.time()
                try:
                    resp = orig(*a, **k)
                finally:
                    t1 = time.time()
        except BaseException as e:
            err = e
            raise
        finally:
            depth.n -= 1
            if _rpc_observers and t0 is not None and not nested:
                _notify_rpc(cmd_obj, resp, t0, t1, err)
        return resp
    _locked._policy_locked = True
    _locked._orig = orig
    vsp._daemon_request = _locked


class PolicyRecorder:
    """カメラを読むスレッドと関節角を読むスレッドを持つ. 本体は grab() で最新のコマを受け取る."""

    def __init__(self, run_dir, cap, read_angles_fn, to_model_fn, angles_ok=None):
        self.dir = Path(run_dir) / "recording"
        self.angles_ok = angles_ok      # 本体が読んだ角度を残すときの確かめ (None なら 6 個の有限な数)
        self.dir.mkdir(parents=True, exist_ok=True)
        self.cap = cap
        self.read_angles_fn = read_angles_fn
        self.to_model_fn = to_model_fn
        self.mode = "model"
        self.stop_flag = False
        self.stopped_cleanly = None     # stop() のあと: スレッドが止まって書き切れたか
        self.csv_lock = threading.Lock()
        self.frame_cv = threading.Condition()
        self.latest = None              # (frame, capture_ts)
        self.writer = None
        self.size = None
        self.n_frames = 0
        self.n_actual = 0
        self.n_actual_fail = 0
        self.n_actual_main = 0          # 本体が読んだ角度を残した数 (依頼 46)
        self.n_sends = 0                # send_angles のやりとりを残した数
        self.write_errors = 0           # mp4 を開けない / 書けなかった回数 (codex R2 A5)
        self.started = time.time()
        self.last_flush = self.started
        self.states_f = (self.dir / "states.csv").open("w", newline="")
        self.states_w = csv.writer(self.states_f)
        self.states_w.writerow(STATES_COLS)
        self.flog_f = (self.dir / "top_frame_log.csv").open("w", newline="")
        self.flog_w = csv.writer(self.flog_f)
        self.flog_w.writerow(FRAME_LOG_COLS)
        self._state_row("stage", time.time())
        self.t_cam = threading.Thread(target=self._cam_loop, daemon=True, name="record_camera")
        self.t_ang = threading.Thread(target=self._angle_loop, daemon=True, name="record_angles")

    def start(self):
        self.t_cam.start()
        self.t_ang.start()
        add_rpc_observer(self._on_rpc)

    # ---- 本体から呼ぶ -------------------------------------------------------
    def set_mode(self, mode):
        if mode == self.mode:
            return
        self.mode = mode
        self._state_row("stage", time.time())

    def gripper(self, state):
        """グリッパーに指令した瞬間に呼ぶ (build_demo_episodes は指令の時刻で 0/1 を切り替える)."""
        self._state_row("gripper_cmd", time.time(), gripper_state=int(state))

    def grab(self):
        """呼んだあとに撮れたコマを返す (古いコマを渡さない). 戻り値は grab_rgb と同じ (rgb, bgr_small)."""
        t_req = time.time()
        deadline = t_req + FRAME_WAIT_SEC
        with self.frame_cv:
            while not self.stop_flag:
                if self.latest is not None and self.latest[1] >= t_req:
                    return self.to_model_fn(self.latest[0])
                left = deadline - time.time()
                if left <= 0:
                    break
                self.frame_cv.wait(left)
        return None, None

    def stop(self):
        """スレッドを止めて書き切る. 何度呼んでもよい."""
        if self.stop_flag:
            return
        remove_rpc_observer(self._on_rpc)
        self.stop_flag = True
        with self.frame_cv:
            self.frame_cv.notify_all()
        for t in (self.t_cam, self.t_ang):
            if t.is_alive():
                t.join(timeout=STOP_JOIN_SEC)
        ended = time.time()
        alive = [t.name for t in (self.t_cam, self.t_ang) if t.is_alive()]
        # codex R1-5: スレッドが止まっていないのに mp4 を閉じると, あとから write() が走って競合する.
        # 止まらなかったときは mp4 を閉じず (カメラも本体で閉じない: alive() を見る),
        # 記録を「異常」として残す (build_correction_episodes はこの run を使わない).
        self.stopped_cleanly = not alive and not self.write_errors
        with self.csv_lock:
            for f in (self.states_f, self.flog_f):
                try:
                    f.flush(); f.close()
                except Exception:
                    pass
        if self.writer is not None and not alive:
            try:
                self.writer.release()
            except Exception:
                pass
        el = ended - self.started
        meta = {"frames": self.n_frames, "elapsed_sec": round(el, 3),
                "effective_fps": round(self.n_frames / el, 3) if el > 0 else 0.0,
                "width": self.size[0] if self.size else None,
                "height": self.size[1] if self.size else None,
                "actual_samples": self.n_actual, "actual_read_failures": self.n_actual_fail,
                "actual_hz": round(self.n_actual / el, 2) if el > 0 else 0.0,
                "actual_main_samples": self.n_actual_main, "send_rpcs": self.n_sends,
                "target_fps": RECORD_FPS, "status": ("thread_not_stopped" if alive else "write_error" if self.write_errors else "ok"),
                "write_errors": self.write_errors,
                "threads_alive": alive}
        (self.dir / "top_meta.json").write_text(json.dumps(meta, indent=2, ensure_ascii=False))
        if alive:
            print(f"[RECORD] [WARN] 記録スレッドが止まりません ({', '.join(alive)}). "
                  "mp4 を閉じずに終えます (この記録は学習データに使いません)")
        print(f"[RECORD] 記録終了 コマ {self.n_frames} ({meta['effective_fps']} fps) "
              f"実測角 {self.n_actual} 回 ({meta['actual_hz']} Hz)  → {self.dir}")

    # ---- 中身 ---------------------------------------------------------------
    def alive(self):
        """記録スレッドがまだ動いているか (stop() のあとに見る. 動いていればカメラを閉じない)."""
        return self.t_cam.is_alive() or self.t_ang.is_alive()

    def _state_row(self, ev, ts, angles=None, gripper_state=None, speed=None, ts_send=None, note=""):
        row = [f"{ts:.6f}", ev, self.mode]
        for k in range(6):
            row.append("" if angles is None else f"{float(angles[k]):.3f}")
        row += ["" if speed is None else str(speed), "" if gripper_state is None else str(gripper_state),
                "" if ts_send is None else f"{ts_send:.6f}", "", "", "", note]
        with self.csv_lock:
            if self.states_f.closed:
                return False
            self.states_w.writerow(row)
            self._maybe_flush(ts)
        return True

    def _valid(self, a):
        if self.angles_ok is not None:
            return bool(self.angles_ok(a))
        try:
            return len(a) == 6 and all(math.isfinite(float(v)) for v in a)
        except Exception:
            return False

    def _on_rpc(self, cmd_obj, resp, t0, t1, err):
        """daemon とのやりとり 1 回ごと (install_daemon_lock から). 何も送らない・読み直さない.

        get_angles: 本体 (記録スレッド以外) が読めた角度を actual 行に残す (note=main. 記録スレッドの分は
                    _angle_loop が残すので二重にしない)
        send_angles: 始めた時刻 (ts / ts_send)・目標・速度・やりとりの長さ (note) を send_angles 行に残す
        そのほか (ping 以外): rpc 行に cmd とやりとりの長さを残す
        """
        if self.stop_flag or not isinstance(cmd_obj, dict):
            return
        cmd = cmd_obj.get("cmd")
        dur = f"rpc_sec={t1 - t0:.3f}" + ("" if err is None else f" error={type(err).__name__}")
        if cmd == "get_angles":
            if threading.current_thread() is self.t_ang or err is not None or not isinstance(resp, dict):
                return
            a = resp.get("angles")
            if a is None or not self._valid(a):
                return
            if self._state_row("actual", t1, angles=a, note="main"):   # 書けた行だけ数える (codex 推奨)
                self.n_actual_main += 1
        elif cmd == "send_angles":
            ang = cmd_obj.get("angles")
            if self._state_row("send_angles", t0, angles=ang if ang is not None and len(ang) == 6 else None,
                               speed=cmd_obj.get("speed"), ts_send=t0, note=dur):
                self.n_sends += 1
        elif cmd != "ping":
            self._state_row("rpc", t0, ts_send=t0, note=f"cmd={cmd} {dur}")

    def _maybe_flush(self, now):
        if now - self.last_flush >= FLUSH_INTERVAL:
            try:
                self.states_f.flush(); self.flog_f.flush()
            except Exception:
                pass
            self.last_flush = now

    def _cam_loop(self):
        last_written = 0.0
        while not self.stop_flag:
            ok, frame = self.cap.read()
            ts = time.time()
            if self.stop_flag:
                break
            if not ok or frame is None:
                time.sleep(0.02)
                continue
            with self.frame_cv:
                self.latest = (frame, ts)
                self.frame_cv.notify_all()
            if ts - last_written < FRAME_INTERVAL - 1e-3:
                continue
            last_written = ts
            try:
                if self.writer is None:
                    h, w = frame.shape[:2]
                    self.size = (w, h)
                    self.writer = cv2.VideoWriter(str(self.dir / "top.mp4"),
                                                  cv2.VideoWriter_fourcc(*FOURCC), RECORD_FPS, (w, h))
                    if not self.writer.isOpened():
                        raise RuntimeError(f"VideoWriter を開けない ({FOURCC})")
                if not self.writer.isOpened():
                    raise RuntimeError("VideoWriter が閉じている")
                self.writer.write(frame)
                with self.csv_lock:
                    if not self.flog_f.closed:
                        self.flog_w.writerow([self.n_frames, f"{ts:.6f}", self.mode])
                        self._maybe_flush(ts)
                self.n_frames += 1
            except Exception as e:
                self.write_errors += 1
                if self.write_errors <= 3:
                    print(f"[RECORD] [WARN] コマの書き込みに失敗: {e}")

    def _angle_loop(self):
        nxt = time.time()
        while not self.stop_flag:
            try:
                a = self.read_angles_fn()
            except Exception:
                a = None
            ts = time.time()
            if a is None:
                self.n_actual_fail += 1
            else:
                self._state_row("actual", ts, angles=a)
                self.n_actual += 1
            nxt += ANGLE_INTERVAL
            wait = nxt - time.time()
            if wait > 0:
                time.sleep(wait)
            else:
                nxt = time.time()       # 遅れた分は取り戻さない (詰めて読まない)
```

### pi05/run_policy_client.py

```python
#!/usr/bin/env python3
"""run_policy_client.py — π0.5 (Runpod の serve_policy) の出力で mechArm 270 を動かす Mac 側クライアント.

流れ (1 チャンクごと):
  上カメラ画像 + 実測 6 軸 + グリッパー状態 → π0.5 → 行動チャンク (10 x 7, 0.1 秒刻みの絶対角)
  → 先頭 N ステップ先 (既定 5 = 0.5 秒先) の姿勢へ単発 send_angles (学習データと同じ速度 20)
  → --via-stride N を付けると, 途中の姿勢 (N-1, 2N-1, ... ステップ) も中継点として
     順に送る (チャンクの中の順番を残すため. 既定 0 = 1 点だけ送る従来どおり)
  → グリッパーの開閉がチャンク内で切り替わるなら, その直前の姿勢まで動いてから開閉
  → 撮り直して次のチャンクへ

安全策:
  - 既定はドライラン (アームに送らない). 送るには --execute
  - --execute でも既定は 1 チャンクごとに Enter で確認 (--auto で連続)
  - 学習データで通った関節範囲 ±ENVELOPE_MARGIN_DEG の外へは出さない (クランプ)
  - 肩 j1 の上限は J1_SAFE_MAX (88°) で更に切る. これを超える指令はアームが黙って捨てる (LOG352)
  - 送る直前に最終検査. 6 関節のどれかが安全範囲の外か非有限値なら, 送信もグリッパー操作もせず
    停止 (codex R1 / C2). HOME 復帰 (h) はこの検査を通さずに送れる
  - 1 回の移動量を --max-move-deg で制限 (クランプ), j4 は J4_SAFE 範囲内
  - グリッパー操作後は GRIPPER_SLEEP 待つ (2026-10-30 依頼 35 で 2.0 → 0.8 秒. --grip-wait で戻せる)
  - --raw-dir は必須. 安全範囲は **学習に使ったデータ** から作る (別のデータだと範囲が合わない)
  - 開始時に上カメラの写り方をお手本と比べ, OK 以外ならアームに何も送らずに終了
    (ずれ / 測れない. --ignore-framing で続行). この確認が通るまで daemon にも触らない
  - 開始時のグリッパー開放も, 最初に送る目標が検査を通ってから (codex R2)
  - --state-from-target を付けると, モデルに渡す state の 6 関節を「直前に送った目標」に
    する (既定 off = 実測). 肩の不足 (ブロックを持つと毎チャンク 2.4〜2.6°) が
    チャンクごとに積み重なるのを防ぐ. 目標と実測の差が 6° を超えたチャンクは実測に戻す.
    クランプ・検査・中継点のかけ直しは今までどおり実測が基準 (変わるのは state だけ)
  - 送ったあとに残ったずれ (動きが止まってから測る. > --settle-tol) は, **同じ目標を
    もう一度送って** 詰める (送信 --settle-retries 回まで. LOG359. 0 で従来どおり
    送り直さない). 新しい目標は作らない. 動きが止まらない / 読めない / 送信が失敗した
    ときは送り直しをやめる. どの終わり方でも止めずに次のチャンクへ進む
  - 止まったときに finally でアームを動かさない. 戻すときは Enter 確認の h で明示的に送る

巻き戻しと関節の補正 (2026-10-29. 推論のあとの確認で選ぶ. b / c を押さなければ今までと同じ動き):
  - b = 巻き戻し. 直前に実行した 1 回分 (推論 1 回 か 補正 1 回) で送った目標を逆順にたどり,
    始めたときの姿勢 (推論なら measured_state) へ戻す. 戻ったらその姿勢からもう一度推論する.
    続けて b を押すと 1 回分ずつさかのぼる. グリッパーを動かした回は巻き戻さない (断って聞き直す).
    ただし つかんだ区間 (グリッパーを閉じた推論 1 回分) は 1 文字で聞いて巻き戻す (2026-10-29 依頼 27):
      y = 持っている: 逆にたどって つかんだ位置まで下ろす → 開いて置く → 始めの姿勢へ
      n = 落とした:   今の位置ですぐ開く → 逆にたどって始めの姿勢へ → 人がブロックを置き直して Enter
      その他 = やめる.  rewind 行に grasp_undo: "placed" / "dropped"
    離した区間 (グリッパーを開いた推論) と グリッパーを動かした補正 は今までどおり断る.
    log.jsonl に {"type": "rewind", "rewound": true, "chunk": 巻き戻した推論の番号, ...} を足す
    (推論の行は消さない・書き換えない)
  - c = 関節の補正. Enter を待たずに 1 文字ずつ読む (押し続けるとキーリピートで繰り返す.
    1 回送るごとに溜まったキーは捨てる). 1〜6 で関節, + / - (. / ,) で 1 刻み, [ ] で刻み
    0.5/1/2°, g でグリッパー, Enter で推論に戻る, b で取り消して始めの姿勢へ戻る.
    送り方は推論と同じ (_send_and_wait_arrival = send_angles speed 20 と到着確認) で,
    apply_limits と check_send_safe をそのまま通す (通らない 1 刻みは送らない).
    1 刻みごとに log.jsonl へ {"type": "correction", ...}
    r = 爪を開かずに閉じる指令をもう一度 (締め直し) / R = 開いてから閉じ直す (つかみ直し).
    どちらも爪が閉じているときだけ (開いていれば何もしない. 閉じるのは g). 2026-10-30 依頼 34
    1 刻みの「着いた」は, 止まるのを待ってから 動かした関節だけ を 刻みの半分 (下限 0.5°) で見る
    (表示と記録の joint_reached だけ. 送り方・再送・未到達のときの数え直しは今までどおり 3°)
    届いていないときは, 同じ関節・同じ向きの次の 1 刻みに 足りなかった分 を足す (上限は刻みの大きさ.
    move 行の carry_deg). 届いた・向きを変えた・ほかの関節を選んだら足すのをやめる. 2026-10-30 依頼 35
    R で開いてから閉じ終わるまでのコマは regrip (学習データに使わない). R だけを使った補正は
    b で巻き戻せる (つかんだ区間と同じく y=持っている / n=落とした を聞く). 依頼 35
  - --execute の間は上カメラと実測角を 1 秒 10 コマで recording/ に残す (policy_recorder.py.
    お手本と同じ形). 1 コマごとに状態 (model / rewind / correct / home / wait) を付ける.
    wait = 推論のあとの確認で入力を待っている間 (人が手でブロックを置き直すので学習データに使わない)
    h / q で終えるときに 結果 (y / n / Enter=記録しない) を聞き, {run_stem}.json に残す
  - 推論のあとの確認 (2026-10-31 依頼 40): 実行するのは何も打たずに Enter を押したときだけ.
    知らない入力 (R・c] ・空白だけ など) は実行せずに聞き直す. r は補正の中と同じく爪を締め直す
    (閉じているときだけ. チャンクは実行しない. log.jsonl に type=confirm / action=regrip_tighten).
    確認と結果を聞く前には, 端末にたまっているキー (位置合わせを閉じたキーなど) を捨てる.
    捨てたあとに届いたキー (押しっぱなしのリピート) は捨てられないので, 問いが出てから打つ
  - --dry-keys: ドライランでも 1 回ごとに止まり b / c を試せる (アームにも daemon にも触らない.
    仮の姿勢を HOME から動かして流れだけ確かめる. Enter で「仮に実行」= 仮の姿勢が目標へ移る)

待ち時間 (2026-10-30 依頼 35. エイイチの判断で縮めた. 本線と共有の定数は変えず, ここで上書きする):
  --send-wait 0.0 (前 1.0) / --grip-wait 0.8 (前 2.0) / --grip-open-wait 0.0 (前 2.0) / --settle-wait 0.8 (前 2.0)
  前の値に戻すには  --send-wait 1.0 --grip-wait 2.0 --grip-open-wait 2.0 --settle-wait 2.0
  送ったあとの到着の確認 (_send_and_wait_arrival の 3°) はそのまま行う. 未到達のときに続けるか止めるかは
  今までどおり (--auto は止める. 手動の推論・巻き戻しは警告を出して続ける)

終了コード: 0 = 最後まで / q / h / Ctrl-C,  1 = 安全停止・写り方の不一致・途中のエラー

前提:
  - Pi の daemon が待ち受け中 / 上カメラ (iPhone 連係) が見えている
  - Runpod で serve_policy が起動し, Mac から SSH トンネル (localhost:8000) が張れている
  - pip install msgpack "websockets>=11"

Usage:
  RAW=/Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes
  python3 pi05/camera_align.py --raw-dir $RAW                   # 先に上カメラの写り方を合わせる
  python3 pi05/run_policy_client.py --raw-dir $RAW              # ドライラン (予測を表示・記録するだけ)
  python3 pi05/run_policy_client.py --raw-dir $RAW --execute    # 1 チャンクごとに Enter で実行
  python3 pi05/run_policy_client.py --raw-dir $RAW --execute --auto --max-chunks 40
  python3 pi05/run_policy_client.py --raw-dir $RAW --dry-keys   # アームなしで b / c の流れを試す
記録: /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy/{stamp}/ (log.jsonl + 各チャンクの入力画像.
      --execute のときは recording/ と {run_stem}.json も)
--record を付けると recorder.py --top にも trial_start/trial_end を送り, 上カメラ動画を残す.
"""
import argparse
import json
import socket
import sys
import time
import types
from datetime import datetime
from pathlib import Path

import cv2
import numpy as np

# ---- パス (run_pick_place.py と同じ構成) ----------------------------------------
_HERE = Path(__file__).resolve().parent
_ROOT = _HERE.parent
_PLACE = _ROOT / "dynamic_tracking_limits" / "place" / "place_modules"
_DRAG = _ROOT / "dynamic_tracking_limits" / "drag_teaching"
for p in (_HERE, _ROOT, _PLACE, _DRAG):
    sys.path.insert(0, str(p))

# pymycobot スタブ (waypoint_replay 経由の import を Mac 上で通すため. アーム制御は daemon 経由のみ)
if "pymycobot" not in sys.modules:
    _pkg = types.ModuleType("pymycobot"); _mod = types.ModuleType("pymycobot.mycobot")

    class _MyCobotStub:
        def __init__(self, *a, **k):
            raise RuntimeError("MyCobot は直接使わない (daemon 経由のみ)")
    _mod.MyCobot = _MyCobotStub
    sys.modules["pymycobot"] = _pkg; sys.modules["pymycobot.mycobot"] = _mod

import camera_resolver  # noqa: E402
import waypoint_replay as wr  # noqa: E402
from camera_align import (  # noqa: E402
    FRAMING_MAX_DX, FRAMING_MAX_DY, FRAMING_MIN_RESPONSE, framing_verdict, load_reference, measure_framing,
)
from fk_lookup import J1_SAFE_MAX  # noqa: E402  88.0. 本線と二重定義しない
from j0_sweep_scan import SEND_WAIT_SEC, SPEED, _send_and_wait_arrival  # noqa: E402  本線と同じ 20 / 1.0 (待ちは下の SEND_WAIT で上書き)
from policy_recorder import PolicyRecorder, install_daemon_lock  # noqa: E402
from policy_ws import PolicyClient  # noqa: E402
from rewind_correct import (  # noqa: E402
    CORRECTION_DEFAULT_STEP_INDEX, CORRECTION_HELP, CORRECTION_STEPS, GRASP_DROPPED, GRASP_PLACED, MODE_CORRECT,
    GRASP_HELD, MODE_HOME, MODE_MODEL, MODE_REGRIP, MODE_REWIND, MODE_WAIT, correction_carry_used,
    correction_joint_reached, correction_reach_tol, correction_shortfall, next_step_index, parse_correction_key,
    rewind_waypoints, split_leg,
)
from visual_servo_pick import (  # noqa: E402
    close_daemon_socket, daemon_get_angles, daemon_send_angles, daemon_set_gripper,
    daemon_set_gripper_value, get_daemon_socket,
)

TASK = "put the red block in the white box"
IMG_LONG = 384                  # build_demo_episodes.py と同じ (学習画像の長辺)
HOME = [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]
GRIP_VALUE = 20                 # run_pick_place.py の close 値
# ---- 待ち時間 (2026-10-30 依頼 35. エイイチの判断で縮めた. 「time.sleep() を短縮しない」より優先) ----
# 本線 (j0_sweep_scan.py / visual_servo_pick.py) と共有の定数は変えず, この中でだけ上書きする.
# コマンドの引数 (--send-wait / --grip-wait / --grip-open-wait / --settle-wait) で前の値に戻せる.
# 2026-10-30 の実機 (184245 / 185133 / 190659) では中継点 4 点のチャンクを送り終えるのに 10.5〜10.8 秒.
GRIPPER_SLEEP = 0.8             # 爪の開け閉めのあと Mac で待つ秒 (前 2.0. DAY175 対策の daemon 側の 2 秒は Pi のまま)
GRIP_OPEN_DAEMON_WAIT = 0.0     # 開くとき daemon が指令のあとで待つ秒 (前 2.0 = daemon_set_gripper の既定.
                                # 前は開くたびに daemon 2 + Mac 2.0 = 4 秒待っていた. 閉じる方は daemon で待たない)
SEND_WAIT = 0.0                 # 送ったあと daemon が待つ秒 (前 SEND_WAIT_SEC 1.0). この待ちは daemon の
                                # 「送信後の現在角度」の記録を遅らせるだけで, 着いたかは Mac が 3° で読んで確かめる.
                                # 0 にするのは, 0 < wait のとき Mac の待ち上限が wait + 3 秒になり, 動いている間の
                                # daemon の読み直し (最長 3.7 秒. LOG352) より短くなるため (0 なら上限 35 秒)
J4_SAFE = (-90.0, 60.0)         # run_pick_place.py の J4_SAFE_MIN/MAX
ENVELOPE_MARGIN_DEG = 10.0
SEND_EPS_DEG = 1e-6             # 送信前の検査の余裕 (小数の誤差で止まらないように)
SETTLE_POLL_SEC = 0.2           # 送り直しの前後, 関節角をこの間隔で読む (codex A2)
SETTLE_STILL_DEG = 0.2          # 続けて読んだ 2 回の差が 6 関節すべてこれ未満なら「止まった」
SETTLE_WAIT_SEC = 0.8           # 止まらなくてもここで待つのをやめ, そのときの値で判定する (前 2.0. 依頼 35)
# --state-from-target で「直前に送った目標」を渡すのをやめる差 (LOG359).
# 腕がどこかに当たって止まっているときに, 目標だけが先へ進むのを防ぐ.
STATE_TARGET_MAX_GAP_DEG = 6.0
DATA_ROOT = Path("/Volumes/KIOXIA/r2r2r-data")
LOG_ROOT = DATA_ROOT / "runs" / "pi05_policy"
RECORDER = ("127.0.0.1", 5556)


def load_envelope(raw_dir: Path):
    """学習データで通った各関節の範囲 ± マージン. 物理可動域 (wr.JOINT_LIMITS)・J4_SAFE・J1_SAFE_MAX で更に絞る."""
    qs = [np.load(p)["state"][:, :6] for p in raw_dir.glob("*/episode.npz")]
    if not qs:
        sys.exit(f"[ERROR] 学習エピソードが見つからない (安全範囲を作れない): {raw_dir}")
    q = np.concatenate(qs)
    lo = q.min(axis=0) - ENVELOPE_MARGIN_DEG
    hi = q.max(axis=0) + ENVELOPE_MARGIN_DEG
    for k, (plo, phi) in enumerate(wr.JOINT_LIMITS):
        lo[k], hi[k] = max(lo[k], plo), min(hi[k], phi)
    lo[4], hi[4] = max(lo[4], J4_SAFE[0]), min(hi[4], J4_SAFE[1])
    # 肩 j1: wr.JOINT_LIMITS[1] の上限は +123° なので, マージンを足すと +98° まで通ってしまう.
    # 88° を超える指令はアームが黙って捨てる (LOG352) ので, ここで切る.
    hi[1] = min(hi[1], J1_SAFE_MAX)
    # codex R3: lo > hi や非有限値のまま運転しない (np.clip は例外を出さないので黙って通る).
    # lo を書き換えて辻褄を合わせるのではなく, 起動を中止する.
    bad = [k for k in range(6)
           if not (np.isfinite(lo[k]) and np.isfinite(hi[k])) or lo[k] > hi[k]]
    if bad:
        sys.exit("[ERROR] 安全範囲が不整合 (lo > hi か非有限値): "
                 + "  ".join(f"j{k}[{lo[k]:+.1f},{hi[k]:+.1f}]" for k in bad)
                 + f"\n        学習データが安全制約 (J1_SAFE_MAX={J1_SAFE_MAX:.0f}° / J4_SAFE / "
                 f"JOINT_LIMITS) と合っていない: {raw_dir}")
    return lo, hi, len(qs)


def read_angles():
    for _ in range(5):
        try:
            a = daemon_get_angles()
        except Exception:
            a = None
        if wr._is_valid_angles(a):
            return np.array([float(x) for x in a])
        time.sleep(0.1)
    return None


def grab_rgb(cap):
    for _ in range(3):            # バッファに溜まった古いフレームを捨てる
        cap.grab()
    ok, frame = cap.read()
    if not ok or frame is None:
        return None, None
    return frame_to_model(frame)


def frame_to_model(frame):
    """カメラの 1 コマ (BGR) → (モデルに渡す RGB, 保存用の BGR). 長辺 IMG_LONG に縮める."""
    h, w = frame.shape[:2]
    s = IMG_LONG / max(h, w)
    small = cv2.resize(frame, (round(w * s), round(h * s)), interpolation=cv2.INTER_AREA)
    return cv2.cvtColor(small, cv2.COLOR_BGR2RGB), small   # モデルへは RGB, 保存は BGR


def plan_chunk(actions, q, grip, n_steps):
    """チャンクから今回動かす目標を決める. 戻り値: (目標6軸, グリッパー指令 None/0/1, 使ったステップ)."""
    want = (actions[:, 6] > 0.5).astype(int)
    for f in range(min(n_steps, len(actions))):
        if want[f] != grip:
            target = q.copy() if f == 0 else actions[f - 1, :6]
            return np.asarray(target, dtype=float), int(want[f]), f
    k = min(n_steps, len(actions)) - 1
    return np.asarray(actions[k, :6], dtype=float), None, k


def apply_limits(target, q, lo, hi, max_move):
    notes = []
    t = target.copy()
    clipped = np.clip(t, lo, hi)
    for k in np.where(np.abs(clipped - t) > 1e-6)[0]:
        notes.append(f"j{k} 安全範囲でクランプ {t[k]:+.1f}→{clipped[k]:+.1f}")
    t = clipped
    d = t - q
    big = np.abs(d) > max_move
    for k in np.where(big)[0]:
        notes.append(f"j{k} 移動量 {d[k]:+.1f}° を ±{max_move:.0f}° に制限")
    t = q + np.clip(d, -max_move, max_move)
    return t, notes


def check_send_safe(target, lo, hi):
    """送る直前の最終検査 (codex R1 / C2). 違反の理由を返す (空なら送って良い).

    apply_limits は「安全範囲でクランプ → 移動量の上限」の順なので, 現在角が安全範囲の
    外にあると, クランプで範囲内に入れた目標が移動量の制限でまた範囲の外に戻る.
      j1 (codex R1): 現在 110° / 予測 100° / 上限 20° → 88° にクランプ後, 110-20 = 90° を送る
      j4 (codex C2): 現在 100° / 予測  90° / 上限 20° → 60° にクランプ後, 100-20 = 80° を送る
    j1 だけでなく 6 関節すべてを見る. ここで再クランプすると移動量の上限を破るので, 送らずに止める.
    HOME 復帰 (Enter 確認の h) はこの検査を通さない: 範囲の外にいるアームを戻す手段として残す.
    """
    if not np.all(np.isfinite(target)):
        return ["目標に非有限値が入っている: " + " ".join(f"j{k}={v}" for k, v in enumerate(target))]
    bad = []
    for k in range(6):
        if target[k] < lo[k] - SEND_EPS_DEG or target[k] > hi[k] + SEND_EPS_DEG:
            msg = f"j{k} {target[k]:+.2f}° が安全範囲 [{lo[k]:+.2f}, {hi[k]:+.2f}] の外"
            if k == 1 and target[k] > hi[k] and abs(hi[k] - J1_SAFE_MAX) < 1e-9:
                msg += (f" (上限は J1_SAFE_MAX={J1_SAFE_MAX:.0f}°. "
                        "これを超える指令はアームが黙って捨てる / LOG352)")
            elif k == 4:
                msg += f" (j4 の範囲は 学習データ ∩ J4_SAFE [{J4_SAFE[0]:+.0f}, {J4_SAFE[1]:+.0f}])"
            bad.append(msg)
    return bad


def _fmt6(a):
    return None if a is None else [round(float(v), 2) for v in a[:6]]


def read_until_still():
    """関節角が止まるまで待ってから読む (codex A2/A6).

    戻り値: (角度 or None, 止まったか, 直前に読めた角度 or None)
      1 番目は **読めたときだけ** 値が入る. 読み取りに失敗したら None で,
      古い値を代わりに返さない (A6: 失敗を隠さない). 3 番目に最後に読めた値を別に返す.

    _send_and_wait_arrival も daemon_send_angles も, 戻った直後はまだ動いている
    ことがある. その値で残りのずれを測ると, 動いている途中の姿勢で判断してしまう.
    SETTLE_POLL_SEC おきに読み, 続けて読んだ 2 回の差が 6 関節すべてで
    SETTLE_STILL_DEG 未満になったら「止まった」とみなす.
    SETTLE_WAIT_SEC まで止まらなければ打ち切り, そのときの値を still=False で返す.
    """
    prev = read_angles()
    if prev is None:
        return None, False, None
    t0 = time.time()
    while time.time() - t0 < SETTLE_WAIT_SEC:
        time.sleep(SETTLE_POLL_SEC)
        cur = read_angles()
        if cur is None:
            return None, False, prev
        if np.max(np.abs(cur[:6] - prev[:6])) < SETTLE_STILL_DEG:
            return cur, True, cur
        prev = cur
    return prev, False, prev


def plan_vias(acts, q, final_target, used, stride, lo, hi, max_move, final_raw_index=None):
    """チャンクの途中の姿勢も中継点として順に通る計画を作る (LOG359).

    今までは plan_chunk が選んだ 1 点だけを送っていたので, アームはそこへ一直線に動き,
    チャンクの中の順番が消えていた. 2026-10-22 の実機 114643 のチャンク 04 では,
    予測が「最初の 0.4 秒は持ち上げだけ (j0 はほぼ動かない) → 0.5 秒から土台 j0 が回る」
    だったのに, 上げながら回る動きになっていた (お手本は つかんだあと 1.5 秒 j0 を止めて
    持ち上げている).

    stride=0 (既定) なら中継点なし = used の 1 点だけ (従来と同じ計算).
    stride=N なら 0 始まりで N-1, 2N-1, ... のうち used より小さいステップを中継点にし,
    最後に used (plan_chunk が選んだ姿勢) を置く. 例: N=3 used=9 → 2, 5, 8, 9 /
    N=3 used=6 (7 番目でグリッパーが変わる) → 2, 5, 6.

    移動量の制限 (apply_limits) は **直前の中継点の目標から** 測る. 最初の中継点だけ
    今の実測角 q から測る. 実測ではなく目標から測るので, 送る前に全部計算できる
    (= 送り始める前に全部の中継点を check_send_safe にかけられる).

    final_raw_index は, 最後の点 (used) の raw が actions の何行目か. グリッパーが
    切り替わるチャンクでは plan_chunk が used-1 行目を返すので step とずれる (codex A1).

    戻り値: [{"step", "raw_index", "raw", "target", "notes", "delta"}] の並び
    (target は ndarray). target は計画時のもので, 送る直前に実測角からかけ直す.
    """
    steps = [k for k in range(stride - 1, used, stride)] if stride and stride > 0 else []
    steps.append(int(used))
    plan = []
    prev = np.asarray(q, dtype=float).copy()
    for k in steps:
        last = k == used
        raw = (np.asarray(final_target, dtype=float) if last
               else np.asarray(acts[k, :6], dtype=float))
        t, notes = apply_limits(raw, prev, lo, hi, max_move)
        plan.append({"step": int(k), "raw_index": (final_raw_index if last else int(k)),
                     "raw": raw, "target": t, "notes": notes, "delta": t - prev})
        prev = t
    return plan


def settle_target(target, label, tol, retries):
    """送ったあとに残ったずれを, **同じ目標をもう一度送って** 詰める (LOG359).

    2026-10-21/22 の実機 4 回 (183245 / 095251 / 100713 / 102053) で, ブロックを持って
    肩を持ち上げる指令 (j1 を小さくする向き) は 28 回すべて指令まで届かず,
    0.77〜2.80° (中央 2.00°) 低いところで止まっていた. 逆向き (下げる) は 0.5〜1° 行き過ぎる.
    到達判定は _send_and_wait_arrival(..., 3.0) の 3° なので, このずれは「着いた」と
    見なされ, モデルは実際の姿勢から次を予測する. その結果 持ち上げが毎回 2° ずつ失われ,
    ブロックがマットから離れない (102053 は上げる指令の合計 41° に対して実際は 11°).

    新しい目標は作らない. 渡された target (apply_limits と check_send_safe を通ったもの) を
    そのまま送り直すだけ. どの終わり方でも止めない (警告を出して呼び出し側が次へ進む).

    retries は **settle で送る送信回数の上限** (codex A5). 送り直しは
    _send_and_wait_arrival ではなく, その中で使っている 1 回だけ送る層
    daemon_send_angles(..., speed=SPEED, wait=SEND_WAIT) を直接呼ぶ.
    中で再送しないので送信回数を正確に数えられる (上限を超えない).
    送ったあとは read_until_still() で止まるのを待ってから測る.
    チャンク本体の送信は今までどおり _send_and_wait_arrival のまま.

    戻り値: (記録用の dict, 送信回数).  dict の reason は
      within_tol    tol 以内 (送っていない)
      converged     送り直して tol 以内に入った
      not_converged 送信回数の上限まで送っても tol を超えたまま
      not_still     SETTLE_WAIT_SEC 待っても動きが止まらない (動いている最中には送らない)
      send_failed   daemon_send_angles が例外を投げた
      read_failed   関節角を読めない (古い値で判定しない)
      disabled      --settle-retries 0 (何も読まない・何も送らない)
    どの reason でも形は同じ (final_err / joint / final_actual / last_valid_actual / tries).
    """
    out = {"reason": "disabled", "tol": tol, "sends": 0, "final_err": None, "joint": None,
           "final_actual": None, "last_valid_actual": None, "tries": []}
    if retries <= 0:                   # --settle-retries 0 で従来と同じ動き (読みも送りもしない)
        return out, 0

    tgt = np.asarray(target, dtype=float)[:6]
    tries, sends, n = [], 0, 0
    actual, still, last_valid = read_until_still()
    while True:
        if actual is None:             # 読めない値で判定しない (A6)
            reason = "read_failed"
            break
        err = np.abs(tgt - actual[:6])
        k = int(err.argmax())
        cur_err = float(err[k])
        if cur_err <= tol:
            reason = "converged" if sends else "within_tol"
            break
        if not still:                  # 動いている最中には送らない (A2)
            reason = "not_still"
            break
        if sends >= retries:
            reason = "not_converged"
            break
        n += 1
        entry = {"try": n, "max_err_before": round(cur_err, 2), "joint": k, "sends": 1,
                 "sent": True, "still": None, "max_err_after": None, "actual": None}
        sends += 1
        try:
            daemon_send_angles(tgt.tolist(), speed=SPEED, wait=SEND_WAIT)
        except Exception as e:
            entry["sent"] = False
            entry["error"] = f"{type(e).__name__}: {e}"
            tries.append(entry)
            print(f"       [SETTLE] 送り直し {n} 回目の送信に失敗: {entry['error']}")
            reason = "send_failed"
            break
        after, still, lv = read_until_still()
        if lv is not None:
            last_valid = lv
        if after is None:
            tries.append(entry)
            print(f"       [SETTLE] 送り直し {n} 回目  最大ずれ {cur_err:.2f}°（関節 j{k}）→ 読めず")
            actual = None
            reason = "read_failed"
            break
        entry["still"] = bool(still)
        after_err = float(np.abs(tgt - after[:6]).max())
        entry["max_err_after"] = round(after_err, 2)
        entry["actual"] = _fmt6(after)
        tries.append(entry)
        print(f"       [SETTLE] 送り直し {n} 回目  最大ずれ {cur_err:.2f}°（関節 j{k}）→ {after_err:.2f}°"
              + ("" if still else f"  (動きが止まらないまま {SETTLE_WAIT_SEC:.1f} 秒で打ち切り)"))
        actual = after

    out.update(reason=reason, sends=sends, tries=tries, last_valid_actual=_fmt6(last_valid))
    if actual is not None:
        err = np.abs(tgt - actual[:6])
        k = int(err.argmax())
        out.update(final_err=round(float(err[k]), 2), joint=k, final_actual=_fmt6(actual))
    if sends or reason != "within_tol":
        gloss = {"within_tol": "もともと範囲内", "converged": "詰まった",
                 "not_converged": "詰まらなかった", "not_still": "動きが止まらない",
                 "send_failed": "送信が失敗", "read_failed": "関節角を読めない"}[reason]
        tail = ("最後の最大ずれ 不明" if out["final_err"] is None
                else f"最後の最大ずれ {out['final_err']:.2f}°（関節 j{out['joint']}）")
        print(f"       [SETTLE] {reason} ({gloss})  送信 {sends} 回  {tail}")
        if reason != "converged":
            print("       [WARN] 送り直しで詰めきれませんでした (止めずに次へ進みます)")
    return out, sends


def gripper_cmd(state):
    """爪の指令と, そのあとの待ち (推論・補正・巻き戻しで共通).
    閉 = daemon_set_gripper_value(GRIP_VALUE) / 開 = daemon_set_gripper(0, wait=GRIP_OPEN_DAEMON_WAIT).
    そのあと GRIPPER_SLEEP 待つ (依頼 35 で縮めた. 引数で前の値に戻せる)."""
    if state == 1:
        daemon_set_gripper_value(GRIP_VALUE)
    else:
        daemon_set_gripper(0, wait=GRIP_OPEN_DAEMON_WAIT)
    time.sleep(GRIPPER_SLEEP)


def read_angles_once():
    """記録スレッド用: 1 回だけ読む (読めなければ None. 待たない・繰り返さない)."""
    try:
        a = daemon_get_angles()
    except Exception:
        return None
    return [float(x) for x in a] if wr._is_valid_angles(a) else None


class ArmIO:
    """巻き戻しと補正で使う送り口. --execute なら daemon, ドライラン (--dry-keys) なら仮の姿勢を動かす.

    実機での送り方は推論のチャンクと同じ _send_and_wait_arrival (send_angles speed 20 + 到着確認 3°).
    グリッパーも推論と同じ gripper_cmd (閉 = daemon_set_gripper_value(GRIP_VALUE) / 開 = daemon_set_gripper(0)
    のあと GRIPPER_SLEEP 待つ).
    """

    def __init__(self, execute, recorder=None, sim_q=None):
        self.execute = execute
        self.recorder = recorder
        self.sim_q = None if sim_q is None else np.asarray(sim_q, dtype=float).copy()

    def read(self):
        if self.execute:
            return read_angles()
        return None if self.sim_q is None else self.sim_q.copy()

    def send(self, target, tag):
        if self.execute:
            ok, _ = _send_and_wait_arrival(np.asarray(target, dtype=float).tolist(), tag, 3.0,
                                           send_wait_sec=SEND_WAIT)
            return bool(ok)
        self.sim_q = np.asarray(target, dtype=float).copy()
        print(f"       [DRY   ] {tag}: 送らない (仮の姿勢を "
              + " ".join(f"{v:+.1f}" for v in self.sim_q) + " に)")
        return True

    def read_settled(self):
        """補正の 1 刻みの到着判定用: 動きが止まるのを待ってから読む (read_until_still).
        戻り値: (角度 or None (読めない), 止まったか). 止まるのを待つのは目安 SETTLE_WAIT_SEC
        (読み取りの通信時間は含まない). ドライランは仮の姿勢をそのまま返す (止まった扱い)."""
        if self.execute:
            q, still, _ = read_until_still()
            return q, bool(still)
        return (None if self.sim_q is None else self.sim_q.copy()), True

    def gripper(self, state):
        if self.recorder is not None:
            self.recorder.gripper(state)
        if not self.execute:
            print(f"       [DRY   ] グリッパー→{'閉' if state == 1 else '開'} (送らない)")
            return
        gripper_cmd(state)


class KeyReader:
    """補正モード用: Enter を待たずに 1 文字ずつ読む (termios の cbreak).

    端末でないとき (テストでパイプから流すとき) は普通に 1 文字ずつ読む.
    flush() で溜まったキー (キーリピートで送っている間に溜まった分) を捨てる.
    """

    def __enter__(self):
        self.fd = None
        if sys.stdin.isatty():
            import termios
            import tty
            self.fd = sys.stdin.fileno()
            self.old = termios.tcgetattr(self.fd)
            tty.setcbreak(self.fd)
        return self

    def get(self):
        if self.fd is None:
            return sys.stdin.read(1)
        # 端末では os.read で 1 バイトずつ読む (Python 側の読み置きに溜めない. 溜まると
        # flush() で捨てられず, 送ったあとに余分な刻みが出る)
        import os
        import select
        b = os.read(self.fd, 1)
        if b == b"\x1b":
            # 矢印キーなど (ESC [ A ...) は丸ごと読み捨てる ('[' を刻みの切り替えと取り違えない)
            while select.select([self.fd], [], [], 0.02)[0]:
                os.read(self.fd, 8)
            return "\x1b"
        if not b:
            return ""                                   # 入力の終わり
        return b.decode("utf-8", errors="ignore") or "\x00"   # 日本語入力の途中のバイトなどは無視

    def flush(self):
        if self.fd is not None:
            import termios
            termios.tcflush(self.fd, termios.TCIFLUSH)

    def __exit__(self, *exc):
        if self.fd is not None:
            import termios
            termios.tcsetattr(self.fd, termios.TCSADRAIN, self.old)
        return False


def plan_correction_step(cur, joint, sign, step, q, lo, hi, max_move):
    """補正の 1 刻み. cur (今の補正目標) の joint を sign*step 動かし, 推論と同じ
    apply_limits (実測 q から) と check_send_safe を通す. 戻り値: (目標, notes, unsafe)."""
    want = np.asarray(cur, dtype=float)[:6].copy()
    want[joint] += sign * step
    t, notes = apply_limits(want, np.asarray(q, dtype=float)[:6], lo, hi, max_move)
    return t, notes, check_send_safe(t, lo, hi)


REACH_TOL_DEG = 3.0        # 戻れたかの判定 (推論の到着確認 _send_and_wait_arrival(..., 3.0) と同じ)


def reached_pose(qa, pose):
    """実測 qa が pose から REACH_TOL_DEG 以内か. 戻り値: (以内か, 最大ずれ or None)."""
    if qa is None:
        return False, None
    err = float(np.max(np.abs(np.asarray(qa, dtype=float)[:6] - np.asarray(pose, dtype=float)[:6])))
    return err <= REACH_TOL_DEG, round(err, 2)


def traverse(arm, waypoints, lo, hi, max_move, tag):
    """中継点を順に送る (巻き戻し・補正の取り消し). 1 点ごとに実測から apply_limits と
    check_send_safe をかけ直す (推論の中継点と同じ). 通らない点が出たらそこで止める
    (送らない). 戻り値: (最後まで行けたか, 1 点ごとの記録)."""
    out = []
    for n, wp in enumerate(waypoints):
        qa = arm.read()
        if qa is None:
            print("       [WARN] 関節角を読めない. ここで止めます (送らない)")
            out.append({"n": n, "waypoint": _fmt6(wp), "sent": False, "why": "read_failed"})
            return False, out
        t, notes = apply_limits(np.asarray(wp, dtype=float), qa[:6], lo, hi, max_move)
        unsafe = check_send_safe(t, lo, hi)
        e = {"n": n, "waypoint": _fmt6(wp), "target": _fmt6(t), "notes": notes,
             "measured_before": _fmt6(qa), "sent": False}
        for x in notes:
            print(f"       [LIMIT] {tag} {n}: {x}")
        if unsafe:
            for u in unsafe:
                print(f"       [ABORT] {tag} {n}: {u}")
            e["unsafe"] = unsafe
            out.append(e)
            return False, out
        if np.max(np.abs(t - qa[:6])) <= 0.5:        # 推論の中継点と同じ「0.5° 以下は送らない」
            out.append(e)
            continue
        ok = arm.send(t, f"{tag}_{n:02d}")
        e.update(sent=True, arrived=bool(ok))
        print(f"       [BACK  ] {n + 1}/{len(waypoints)}  → "
              + " ".join(f"{v:+.1f}" for v in t) + ("  着いた" if ok else "  未到達"))
        if not ok:
            print("       [WARN] 未到達. j4 の発熱などを確認してください")
        out.append(e)
    return True, out


def run_rewind(entry, arm, lo, hi, max_move, recorder, grasp=None):
    """history の 1 件 (推論 1 回分 / 補正 1 回分) を巻き戻す. 戻り値は log.jsonl に足す記録.

    grasp は つかんだ区間 (グリッパーを閉じた推論) と R を使った補正 を巻き戻すときだけ渡す (依頼 27 / 35):
      GRASP_PLACED  (y = 持っている): 送った目標を逆にたどって つかんだ位置 (最後に送った目標) まで
                    下ろす → 開いてブロックを置く → 残りを逆にたどって始めの姿勢へ.
                    つかんだ位置まで下ろせなかったら開かない (宙で落とさない. 補正の取り消しと同じ決まり)
      GRASP_DROPPED (n = 落とした): 今の位置ですぐ開く (閉じた指が置き直したブロックに当たらないよう)
                    → 逆にたどって始めの姿勢へ
      GRASP_HELD    (y = 持っている. R を使った補正だけ): 閉じたまま逆にたどって始めの姿勢へ (開かない)
    送り方・範囲チェックは grasp なしの巻き戻しと同じ traverse."""
    t_start = time.time()
    rec = {"type": "rewind", "rewound": True, "kind": entry["kind"], "chunk": entry.get("chunk"),
           "correction_id": entry.get("correction_id"),
           "segment_t": [entry["t_start"], entry["t_end"]], "start_pose": _fmt6(entry["start_pose"]),
           "sent_targets": [_fmt6(x) for x in entry["sent_targets"]], "t_start": t_start}
    if grasp is not None:
        rec.update(grasp_undo=grasp, gripper_opened=False)
    q0 = arm.read()
    if q0 is None:
        print("       [WARN] 関節角を読めないので巻き戻せません")
        rec.update(finished=False, why="read_failed", t_end=time.time(), waypoints=[])
        return rec
    sent = entry["sent_targets"]
    name = ('推論 ' + str(entry['chunk']) if entry['kind'] == 'chunk' else '補正 ' + str(entry['correction_id']))
    if recorder is not None:
        recorder.set_mode(MODE_REWIND)
    opened = False
    if grasp == GRASP_PLACED:
        # つかんだ位置 = グリッパーを閉じた時点の姿勢 (閉じる前に最後に送った目標. 送っていなければ始めの姿勢)
        grasp_pose = np.asarray(sent[-1] if sent else entry["start_pose"], dtype=float)[:6]
        down = split_leg(q0[:6], grasp_pose, max_move)
        back = rewind_waypoints(sent, entry["start_pose"], current=grasp_pose, max_move=max_move)
        print(f"[REWIND] {name} (つかんだ区間) を巻き戻す: つかんだ位置 "
              + " ".join(f"{v:+.1f}" for v in grasp_pose) + " まで下ろす → 開いて置く → "
              f"中継点 {len(back)} 点 → 始めの姿勢 "
              + " ".join(f"{v:+.1f}" for v in np.asarray(entry["start_pose"])[:6]))
        completed, pts = traverse(arm, down, lo, hi, max_move, "pi05_rewind_down")
        for e in pts:
            e["leg"] = "down"
        qg = arm.read()
        reached_g, err_g = reached_pose(qg, grasp_pose)
        rec.update(grasp_pose=_fmt6(grasp_pose), reached_grasp=reached_g, grasp_err_deg=err_g)
        if completed and reached_g:
            print("[REWIND] つかんだ位置に着いたのでグリッパーを開いてブロックを置きます")
            arm.gripper(0)
            opened = True
            completed, pts2 = traverse(arm, back, lo, hi, max_move, "pi05_rewind")
            for e in pts2:
                e["leg"] = "back"
            pts += pts2
        else:
            completed = False
            print("[REWIND] [WARN] つかんだ位置まで下ろせていないので, グリッパーは閉じたままにします (落とさない)")
    else:
        if grasp == GRASP_DROPPED:
            what = "つかんだ区間" if entry["kind"] == "chunk" else "R でつかみ直した補正"
            print(f"[REWIND] {name} ({what}) を巻き戻す: 落としたので先にグリッパーを開きます")
            arm.gripper(0)
            opened = True
        wps = rewind_waypoints(sent, entry["start_pose"], current=q0[:6], max_move=max_move)
        print(f"[REWIND] {name} を巻き戻す: 中継点 {len(wps)} 点 → 始めの姿勢 "
              + " ".join(f"{v:+.1f}" for v in np.asarray(entry["start_pose"])[:6]))
        completed, pts = traverse(arm, wps, lo, hi, max_move, "pi05_rewind")
    if recorder is not None:
        recorder.set_mode(MODE_MODEL)
    qa = arm.read()
    reached, err = reached_pose(qa, entry["start_pose"])
    rec.update(finished=bool(completed and reached and (grasp in (None, GRASP_HELD) or opened)),
               traverse_completed=completed, reached_start=reached,
               start_err_deg=err, waypoints=pts, t_end=time.time(), measured_after=_fmt6(qa))
    if grasp is not None:
        rec["gripper_opened"] = opened
    if not completed:
        print("[REWIND] 途中で止めました (送れない中継点). h で HOME に戻せます")
    elif not reached:
        print(f"[REWIND] [WARN] 始めの姿勢まで戻りきっていません (最大ずれ "
              f"{'不明' if err is None else f'{err:.2f}°'} > {REACH_TOL_DEG:.0f}°). "
              "この run は補正エピソードに使いません")
    return rec


def run_correction(arm, keys, lo, hi, max_move, grip, corr_id, chunk, log_f, recorder):
    """補正モード. 戻り値: (結果 dict, 補正後のグリッパー状態).
    結果 dict の action は accept (この姿勢から推論に戻る) / cancel (取り消して戻った)."""
    start_q = arm.read()
    if start_q is None:
        print("[CORR  ] 関節角を読めないので補正に入れません")
        return None, grip
    start_q = start_q[:6].copy()
    start_grip = grip
    cur = start_q.copy()
    joint, si = 0, CORRECTION_DEFAULT_STEP_INDEX
    t_start = time.time()
    sent, n_steps = [], 0
    resync = False             # 直前の 1 刻みが未到達 → 次の刻みは実測から数える
    grip_used = False          # 補正中に一度でも g でグリッパーを動かしたか (往復でも True. codex R1-2)
    regrip_used = False        # R (つかみ直し) を使ったか. 始めと終わりはどちらも閉 → b で巻き戻せる (依頼 35)
    carry, carry_key = 0.0, None   # 届かなかった分 と それを足す (関節, 向き) (依頼 35)
    if recorder is not None:
        recorder.set_mode(MODE_CORRECT)
    print(f"[CORR  ] 補正 {corr_id} に入りました (推論 {chunk} のあと)")
    print(CORRECTION_HELP)

    def _status():
        print(f"  [補正] 関節 j{joint}  刻み {CORRECTION_STEPS[si]:.1f}°  補正目標 "
              + " ".join(f"j{k}={v:+.1f}" for k, v in enumerate(cur))
              + f"  グリッパー {'閉' if grip == 1 else '開'}")
    _status()
    while True:
        ch = keys.get()
        act = parse_correction_key(ch)
        if act is None:
            continue
        kind, val = act
        if kind == "help":
            print(CORRECTION_HELP); _status()
        elif kind == "select":
            if val != joint:
                carry, carry_key = 0.0, None     # ほかの関節を選んだら足すのをやめる (依頼 35)
            joint = val; _status()
        elif kind == "step":
            si = next_step_index(si, val); _status()
        elif kind == "move":
            qa = arm.read()
            if qa is None:
                print("  [補正] 関節角を読めない. この 1 刻みは送りません")
                keys.flush(); continue
            if resync:
                cur = qa[:6].copy()
                resync = False
                carry, carry_key = 0.0, None     # 実測から数え直すので足りない分はもう入っている
            if carry_key != (joint, val):
                carry, carry_key = 0.0, None     # 向きを変えた (+ と - / ほかの関節) ら足すのをやめる
            step = CORRECTION_STEPS[si]
            if carry > 0:
                # codex 依頼 35 ⚠️: 止まる前に打ち切って測った不足は, 入力を待つ間に解消していることがある.
                # 送る直前の実測 qa で足りない分を測り直す (届いていれば 0)
                jr_now, _ = correction_joint_reached(qa, cur, joint, correction_reach_tol(step))
                carry = correction_shortfall(qa, cur, joint, val, jr_now)
            # 依頼 35: 前の 1 刻みが届いていなければ, 足りなかった分 (上限は刻みの大きさ) を足して送る.
            # 範囲チェック (apply_limits / check_send_safe) はそのまま通す
            add = correction_carry_used(carry, step)
            t, notes, unsafe = plan_correction_step(cur, joint, val, step + add, qa, lo, hi, max_move)
            e = {"type": "correction", "action": "move", "correction_id": corr_id, "after_chunk": chunk,
                 "joint": joint, "step_deg": step, "sign": val, "carry_deg": round(add, 3), "t": time.time(),
                 "before": _fmt6(cur), "after": _fmt6(t), "measured_before": _fmt6(qa),
                 "notes": notes, "sent": False}
            if add > 0:
                print(f"  [補正] 足りなかった {add:.1f}° を足して送る (j{joint} を {val * (step + add):+.1f}°)")
            for x in notes:
                print(f"  [LIMIT] {x}")
            if unsafe:
                for u in unsafe:
                    print(f"  [補正] 送りません: {u}")
                e["unsafe"] = unsafe
            elif np.max(np.abs(t - cur)) <= 1e-6:
                print(f"  [補正] j{joint} は範囲の端なのでこれ以上動かせません")
            else:
                ok = arm.send(t, f"pi05_corr{corr_id:02d}_{n_steps:03d}")
                # 依頼 34: 「着いた」は動かした関節だけを, 刻みの半分 (下限 0.5°) で見る.
                # 送り方・再送・resync は今までどおり send の結果 (3°) で決める (表示と記録だけ)
                qs, settled = arm.read_settled()
                tol = correction_reach_tol(step)
                jr, jerr = correction_joint_reached(qs, t, joint, tol)
                e.update(sent=True, arrived=bool(ok), measured_after=_fmt6(qs),
                         joint_reached=bool(jr), joint_err_deg=jerr, reach_tol_deg=tol, settled=settled)
                e["delta"] = round(float(t[joint] - cur[joint]), 3)
                cur = t
                sent.append(t.copy())
                n_steps += 1
                if not settled and jerr is not None:
                    print(f"  [補正] (動きが止まらないまま {SETTLE_WAIT_SEC:.1f} 秒で打ち切って測りました)")
                if jerr is None:
                    print(f"  [補正] j{joint} 届いたか分からない (関節角を読めない)")
                elif jr:
                    print(f"  [補正] j{joint} 着いた (目標 {t[joint]:+.1f} / 実測 {qs[joint]:+.1f}, "
                          f"ずれ {jerr:.2f}° ≤ {tol:.2f}°)")
                else:
                    print(f"  [補正] j{joint} 届いていない (目標 {t[joint]:+.1f} / 実測 {qs[joint]:+.1f}, "
                          f"ずれ {jerr:.2f}° > {tol:.2f}°)")
                # 依頼 35: 届いていなければ, 足りなかった分を次の同じ向きの 1 刻みに足す. 届いたらやめる
                carry = correction_shortfall(qs, t, joint, val, jr)
                carry_key = (joint, val) if carry > 0 else None
                if not ok:
                    print("  [WARN] 未到達. j4 の発熱などを確認してください")
                    # codex R1/R2 A3: 次の 1 刻みは届いた所 (次の move で読む実測) から数える
                    resync = True
                _status()
            log_f.write(json.dumps(e) + "\n"); log_f.flush()
            keys.flush()       # 送っている間にキーリピートで溜まった分は捨てる (送りすぎない)
        elif kind == "grip":
            new = 0 if grip == 1 else 1
            arm.gripper(new)
            log_f.write(json.dumps({"type": "correction", "action": "gripper", "correction_id": corr_id,
                                    "after_chunk": chunk, "t": time.time(), "before": grip,
                                    "after": new}) + "\n"); log_f.flush()
            grip = new
            grip_used = True
            _status()
            keys.flush()
        elif kind == "regrip":
            # 依頼 34: r = 開かずに閉じる指令をもう一度 / R = 開く → 閉じる (その場でつかみ直す).
            # 閉じる・開くは g と同じ arm.gripper (値 GRIP_VALUE・速さ・待ち GRIPPER_SLEEP も同じ)
            action = "regrip_tighten" if val == "tighten" else "regrip_reopen"
            e = {"type": "correction", "action": action, "where": "correction", "correction_id": corr_id,
                 "after_chunk": chunk, "t": time.time(), "key": "r" if val == "tighten" else "R", "before": grip}
            if grip != 1:
                what = "締め直し" if val == "tighten" else "つかみ直し"
                print(f"  [補正] 爪が開いているので{what}はしない（閉じるのは g）")
                e.update(after=grip, sent=False, skipped="gripper_open")
            elif val == "tighten":
                print("  [補正] 爪を締め直します (開かずに閉じる指令をもう一度)")
                arm.gripper(1)
                e.update(after=1, sent=True)
            else:
                print("  [補正] 爪を開いて, 閉じ直します (つかみ直し)")
                # 依頼 35: 開いてから閉じ終わるまでのコマは regrip (学習データに使わない)
                if recorder is not None:
                    recorder.set_mode(MODE_REGRIP)
                arm.gripper(0)
                arm.gripper(1)
                if recorder is not None:
                    recorder.set_mode(MODE_CORRECT)
                e.update(after=1, sent=True)
                # 始めも終わりも閉. g の往復とは分け, b で巻き戻せるようにする (y/n を聞く. 依頼 35)
                regrip_used = True
            log_f.write(json.dumps(e) + "\n"); log_f.flush()
            _status()
            keys.flush()
        elif kind == "accept":
            res = {"type": "correction", "action": "accept", "correction_id": corr_id, "after_chunk": chunk,
                   "t_start": t_start, "t_end": time.time(), "start_pose": _fmt6(start_q),
                   "final_target": _fmt6(cur), "measured_after": _fmt6(arm.read()),
                   "steps_sent": n_steps, "grip_before": start_grip, "grip_after": grip,
                   "grip_used": grip_used, "regrip_used": regrip_used,
                   "sent_targets": [_fmt6(x) for x in sent]}
            if recorder is not None:
                recorder.set_mode(MODE_MODEL)
            print(f"[CORR  ] 補正 {corr_id} を終えました ({n_steps} 刻み). この姿勢から推論に戻ります")
            return res, grip
        elif kind == "cancel":
            print(f"[CORR  ] 補正 {corr_id} を取り消して, 始めの姿勢へ戻ります")
            if recorder is not None:
                recorder.set_mode(MODE_REWIND)
            q0 = arm.read()
            completed, pts = False, []
            if q0 is not None:
                wps = rewind_waypoints(sent, start_q, current=q0[:6], max_move=max_move) if sent else []
                completed, pts = traverse(arm, wps, lo, hi, max_move, "pi05_corr_cancel")
            else:
                print("       [WARN] 関節角を読めないので戻せません")
            qa = arm.read()
            reached, err = reached_pose(qa, start_q)
            if grip != start_grip:
                if completed and reached:
                    arm.gripper(start_grip)
                    grip = start_grip
                else:
                    # codex R1 C3: 姿勢が戻っていないのにグリッパーだけ戻さない (物を落とさない)
                    print("       [WARN] 始めの姿勢へ戻れていないので, グリッパーは今のままにします")
            if recorder is not None:
                recorder.set_mode(MODE_MODEL)
            res = {"type": "correction", "action": "cancel", "correction_id": corr_id, "after_chunk": chunk,
                   "t_start": t_start, "t_end": time.time(), "start_pose": _fmt6(start_q),
                   "steps_sent": n_steps, "finished": bool(completed and reached and grip == start_grip),
                   "traverse_completed": completed, "reached_start": reached, "start_err_deg": err,
                   "waypoints": pts, "measured_after": _fmt6(qa), "grip_after": grip,
                   "grip_used": grip_used, "regrip_used": regrip_used}
            return res, grip


def write_trial_json(run_dir, run_stem, args, recorded, end_reason, outcome, history_log, n_rewinds,
                     n_corrections, exit_code):
    """{run_stem}.json. お手本の試行 JSON と同じキー (recording_enabled / result / judgments) を持つ.
    結果 y なら pick / place とも human_verdict=yes (build_demo_episodes の採否と同じ読み方)."""
    verdict = {"y": "yes", "n": "no"}.get(outcome)
    result = ("completed" if end_reason in ("h", "q", "max_chunks") else
              "interrupted" if end_reason == "ctrl_c" else "aborted")
    j = {"script": "run_policy_client.py", "source": "pi05_policy", "run_stem": run_stem,
         "run_dir": str(run_dir), "recording_enabled": bool(recorded), "end_reason": end_reason,
         "result": result, "exit_code": exit_code,
         "outcome": {"y": "success", "n": "failure"}.get(outcome),
         "rewinds": n_rewinds, "corrections": n_corrections, "history_left": history_log,
         "args": {k: (str(v) if isinstance(v, Path) else v) for k, v in vars(args).items()},
         "ended_at": datetime.now().isoformat()}
    if verdict is not None:
        j["judgments"] = {"pick": {"human_verdict": verdict, "verdict": verdict, "source": "human"},
                          "place": {"human_verdict": verdict, "verdict": verdict, "source": "human"}}
    (Path(run_dir) / f"{run_stem}.json").write_text(json.dumps(j, indent=1, ensure_ascii=False))


def flush_stdin():
    """端末の入力にたまっているキーを捨てる (依頼 40: 位置合わせの画面を閉じたキーや, 送っている間に
    押したキーで確認が先へ進まないように). 端末でないとき (テストでパイプから流すとき) は何もしない."""
    try:
        tty = sys.stdin.isatty()
    except Exception:
        return
    if not tty:
        return
    try:
        import termios
        termios.tcflush(sys.stdin.fileno(), termios.TCIFLUSH)
    except Exception as ex:
        # 捨てられなかったことが分かるように残す (入力が勝手に進むのがまた起きたときに追えるように. codex 依頼 40)
        print(f"       [WARN] たまった入力を捨てられませんでした ({ex})")


CONFIRM_PROMPT = ("       Enter=実行 / s=送らず次へ / b=巻き戻し / c=補正 / r=爪の締め直し / "
                  "h=HOMEに戻して終了 / q=終了 > ")
CONFIRM_KEYS = ("s", "b", "c", "r", "h", "q")


def ask_outcome():
    while True:
        flush_stdin()
        raw = input("       結果: y=成功 / n=失敗 / Enter=記録しない > ")
        if raw == "":
            return None                  # 何も打たずに Enter だけ「記録しない」(空白だけは聞き直す. 依頼 40)
        a = raw.strip().lower()
        if a in ("y", "n"):
            return a
        print(f"       分からない入力: {raw}（y=成功 / n=失敗 / Enter=記録しない）")


def notify_recorder(sock, payload):
    try:
        payload = dict(payload, ts=time.time())
        sock.sendto((json.dumps(payload) + "\n").encode(), RECORDER)
    except Exception:
        pass


def apply_wait_args(args):
    """--send-wait などを この中の待ち (SEND_WAIT / GRIPPER_SLEEP / GRIP_OPEN_DAEMON_WAIT / SETTLE_WAIT_SEC)
    へ入れる. 指定がなければ今の値のまま. 決まった値は args にも書き戻す ({run_stem}.json の args に残る)."""
    global SEND_WAIT, GRIPPER_SLEEP, GRIP_OPEN_DAEMON_WAIT, SETTLE_WAIT_SEC
    for name, attr in (("send_wait", "SEND_WAIT"), ("grip_wait", "GRIPPER_SLEEP"),
                       ("grip_open_wait", "GRIP_OPEN_DAEMON_WAIT"), ("settle_wait", "SETTLE_WAIT_SEC")):
        v = getattr(args, name, None)
        if v is None:
            setattr(args, name, globals()[attr])
            continue
        if not np.isfinite(v) or v < 0:
            sys.exit(f"[ERROR] --{name.replace('_', '-')} は 0 以上の数で指定する (指定: {v})")
        globals()[attr] = float(v)
    print(f"[WAIT  ] 送ったあと {SEND_WAIT:.1f}s / 爪のあと {GRIPPER_SLEEP:.1f}s (開くときの daemon "
          f"{GRIP_OPEN_DAEMON_WAIT:.1f}s) / 止まるのを待つ目安 {SETTLE_WAIT_SEC:.1f}s")


def main():
    ap = argparse.ArgumentParser()
    ap.add_argument("--host", default="localhost")
    ap.add_argument("--port", type=int, default=8000)
    ap.add_argument("--execute", action="store_true", help="アームに送る (未指定はドライラン)")
    ap.add_argument("--auto", action="store_true", help="Enter 確認なしで連続実行")
    ap.add_argument("--steps-per-chunk", type=int, default=5, help="1 チャンクで何ステップ先まで進むか (0.1 秒単位)")
    ap.add_argument("--max-chunks", type=int, default=60)
    ap.add_argument("--max-move-deg", type=float, default=20.0, help="1 回の移動で各関節が動ける上限")
    ap.add_argument("--raw-dir", required=True,
                    help="安全範囲の算出に使う学習エピソード (必須. 学習に使った raw_episodes を指定する)")
    ap.add_argument("--prompt", default=TASK)
    ap.add_argument("--record", action="store_true", help="recorder.py --top に上カメラ動画を記録させる")
    ap.add_argument("--ignore-framing", action="store_true",
                    help="上カメラの写り方がお手本と違っても続ける (既定は何も送らずに終了)")
    ap.add_argument("--state-from-target", action="store_true",
                    help="モデルに渡す state の 6 関節を, 実測ではなく直前に送った目標にする "
                         "(既定 off = 実測). 肩の不足がチャンクごとに積み重なるのを防ぐ")
    ap.add_argument("--via-stride", type=int, default=0,
                    help="チャンクの途中の姿勢も中継点として順に送る (0 始まりで N-1, 2N-1, ... の "
                         "ステップ. 既定 0 = 従来どおり選んだ 1 点だけ送る)")
    ap.add_argument("--settle-tol", type=float, default=1.0,
                    help="送ったあとの残りのずれ (動きが止まってから測る) がこれを超えていたら "
                         "同じ目標を送り直す (度)")
    ap.add_argument("--settle-retries", type=int, default=2,
                    help="settle で同じ目標を送り直す回数の上限 (送信の試行回数). "
                         "0 で送り直さない = 従来の動き")
    ap.add_argument("--dry-keys", action="store_true",
                    help="ドライランでも 1 回ごとに止まり, b (巻き戻し) / c (補正) の流れを試す. "
                         "アームにも daemon にも触らず, HOME から始まる仮の姿勢を動かす")
    # 待ち時間 (依頼 35). 既定 None = この中の値 (縮めた値). 前の値に戻すときに指定する
    ap.add_argument("--send-wait", type=float, default=None,
                    help=f"送ったあと daemon が待つ秒 (既定 {SEND_WAIT:.1f}. 前は {SEND_WAIT_SEC:.1f}). "
                         "0 より大きいと Mac の応答待ちの上限が この値 + 3 秒になる")
    ap.add_argument("--grip-wait", type=float, default=None,
                    help=f"爪の開け閉めのあと Mac で待つ秒 (既定 {GRIPPER_SLEEP:.1f}. 前は 2.0)")
    ap.add_argument("--grip-open-wait", type=float, default=None,
                    help=f"爪を開くとき daemon が待つ秒 (既定 {GRIP_OPEN_DAEMON_WAIT:.1f}. 前は 2.0)")
    ap.add_argument("--settle-wait", type=float, default=None,
                    help=f"動きが止まるのを待つ目安の秒 (補正の 1 刻み・settle. 既定 {SETTLE_WAIT_SEC:.1f}. 前は 2.0)")
    args = ap.parse_args()
    if args.dry_keys and (args.execute or args.auto):
        sys.exit("[ERROR] --dry-keys はドライラン用 (--execute / --auto と一緒には使えない)")
    apply_wait_args(args)

    if not DATA_ROOT.exists():
        sys.exit(f"[ERROR] SSD 未マウント: {DATA_ROOT}")
    lo, hi, n_eps = load_envelope(Path(args.raw_dir))
    print(f"[SAFE  ] 安全範囲 (学習 {n_eps} 本 ±{ENVELOPE_MARGIN_DEG:.0f}°): "
          + "  ".join(f"j{k}[{lo[k]:+.0f},{hi[k]:+.0f}]" for k in range(6)))
    print(f"[SAFE  ] 肩 j1 の上限は J1_SAFE_MAX={J1_SAFE_MAX:.0f}° で切った "
          f"(これを超える指令はアームが黙って捨てる / LOG352)  元データ: {args.raw_dir}")

    stamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    log_dir = LOG_ROOT / f"pi05_{stamp}"
    (log_dir / "frames").mkdir(parents=True, exist_ok=True)
    log_f = (log_dir / "log.jsonl").open("w")
    run_stem = f"pi05_{stamp}"
    mode = "EXECUTE" if args.execute else "DRY-RUN (アームには送らない)"
    print(f"[MODE  ] {mode}  steps/chunk={args.steps_per_chunk}  max_move={args.max_move_deg}°  log={log_dir}")

    # 以降は try/finally の中だけで資源を触る (codex R3: 途中で終了しても cap / log_f を必ず閉じる).
    # sys.exit は SystemExit を投げるので, この finally を通って後始末される.
    cap = policy = rec_sock = None
    exit_code = 0
    grip = 0
    grip_opened = False          # 開始時のグリッパー開放を済ませたか (codex R2)
    last_sent_target = None      # 直前のチャンクで最後に送った目標 (--state-from-target 用)
    recorder = None              # --execute のときの 1 秒 10 コマの記録 (policy_recorder.py)
    arm = None                   # 巻き戻し・補正の送り口 (ArmIO)
    history = []                 # 巻き戻せる区間 (推論 1 回分 / 補正 1 回分). 新しいものが後ろ
    n_rewinds = n_corrections = 0
    end_reason, outcome = None, None
    try:
        cams = camera_resolver.resolve_cameras(require_top=True, require_side=False, verbose=False)
        cap = cv2.VideoCapture(cams["top"])
        if not cap.isOpened():
            sys.exit("[ERROR] 上カメラを開けない")
        t_cam = time.time()
        while time.time() - t_cam < 8.0:       # 連係カメラは映像が来るまで数秒かかることがある
            ok, _f = cap.read()
            if ok and _f is not None:
                break
            time.sleep(0.2)
        else:
            sys.exit("[ERROR] 上カメラから映像が来ない. iPhone のロック解除・連係カメラの接続を確認 "
                     "(Photo Booth の『カメラ』メニューに iPhone が出るか)")

        # E (2026-10-21): 上カメラの写り方は 2 通りあり, カメラを開くたびに切り替わることがある.
        # お手本と違う写り方のまま動かすと, 学習と別の画像を見せることになる
        # (082645 は dy=+37.5 のまま実機を動かした. その 1 分前のドライラン 082512 は dy=-7.8).
        # アームは HOME に置いた状態で, 1 枚目を お手本の 1 枚目 (同じく HOME) と比べる.
        # **この確認が通るまで daemon にも触らない** (アームには何も送らない).
        ref_bgr, ref_path = load_reference(Path(args.raw_dir))
        bgr0 = None
        for _ in range(10):
            _rgb0, bgr0 = grab_rgb(cap)
            if bgr0 is not None:
                break
            time.sleep(0.2)
        if bgr0 is None:
            sys.exit("[ERROR] 上カメラの 1 枚目を撮れない")
        dx, dy, resp = measure_framing(ref_bgr, bgr0)
        verdict, why = framing_verdict(dx, dy, resp)
        print(f"[CAMERA] 写り方 dy={dy:+.1f} dx={dx:+.1f} response={resp:.3f} → {verdict} ({why})")
        print(f"[CAMERA] 基準: {ref_path}")
        log_f.write(json.dumps({"type": "framing", "dy": round(dy, 2), "dx": round(dx, 2),
                                "response": round(resp, 3), "verdict": verdict, "why": why,
                                "max_dy": FRAMING_MAX_DY, "max_dx": FRAMING_MAX_DX,
                                "min_response": FRAMING_MIN_RESPONSE,
                                "ok": verdict == "OK", "ignored": bool(args.ignore_framing),
                                "reference": str(ref_path)}) + "\n")
        log_f.flush()
        if verdict != "OK":
            if not args.ignore_framing:
                sys.exit(f"[ABORT ] 上カメラの写り方が『{verdict}』. アームには何も送らずに終了しました.\n"
                         f"         {why}\n"
                         "         pi05/camera_align.py で合わせ直す "
                         "(iPhone を付け直す / 連係カメラを開き直す).\n"
                         "         この写り方のまま続けるなら --ignore-framing")
            print(f"[WARN  ] 写り方が『{verdict}』だが --ignore-framing が指定されたので続けます")

        # ---- ここから先でアームに触る (写り方の確認を通ったあと) ----
        if not args.dry_keys:            # --dry-keys は daemon に触らない (アームなしで試す)
            get_daemon_socket()
        policy = PolicyClient(args.host, args.port)
        print(f"[POLICY] 接続 {policy.uri}  metadata={policy.metadata}")
        rec_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        if args.record:
            notify_recorder(rec_sock, {"type": "trial_start", "run_stem": run_stem})
        if args.execute:
            # 1 秒 10 コマの記録 (上カメラ + 実測角). ここから先, 上カメラは記録スレッドだけが読む
            install_daemon_lock()
            recorder = PolicyRecorder(log_dir, cap, read_angles_once, frame_to_model,
                                      angles_ok=wr._is_valid_angles)   # 本体が読んだ角度も同じ確かめで残す (依頼 46)
            recorder.start()
            print(f"[RECORD] 上カメラと実測角を 1 秒 10 コマで記録します → {log_dir / 'recording'}")
        arm = ArmIO(args.execute, recorder, sim_q=(HOME if args.dry_keys else None))
        if args.dry_keys:
            print("[DRY   ] --dry-keys: アームには送らず, HOME から始まる仮の姿勢で流れを試します")

        q = arm.read() if args.dry_keys else read_angles()
        if q is None:
            sys.exit("[ERROR] 関節角を読めない (daemon を確認)")
        if np.max(np.abs(q - np.array(HOME))) > 5.0:
            print(f"[WARN  ] HOME から離れています (max|Δ|={np.max(np.abs(q - np.array(HOME))):.1f}°). "
                  "学習データは HOME から始まっています")
            print("         現在角: " + " ".join(f"j{k}={v:+.1f}" for k, v in enumerate(q)))
        if args.execute:
            # 開始時の開放は, 最初に送る目標が検査を通ってからにする (codex R2).
            # 以前はここで開いていたので, 1 チャンク目が安全ガードで止まる場合でも
            # 爪だけ先に開いてしまっていた (物を持っていれば落とす).
            print("[GRIP  ] 開始時のグリッパー開放は, 最初の目標が検査を通ってから行います "
                  "(爪が閉じていたら手で開けておく)")

        end_reason = "max_chunks"
        for i in range(args.max_chunks):
            q = arm.read() if args.dry_keys else read_angles()
            if q is None:
                print("[ERROR] 関節角を読めない (daemon を確認). 停止"); exit_code = 1; end_reason = "error"; break
            rgb = bgr_small = None
            for _ in range(10):
                rgb, bgr_small = grab_rgb(cap) if recorder is None else recorder.grab()
                if rgb is not None:
                    break
                time.sleep(0.2)
            if rgb is None:
                print("[ERROR] 上カメラの映像が途切れた (iPhone のスリープ等). 停止")
                exit_code = 1; break
            # モデルに渡す state の 6 関節 (--state-from-target のときだけ「直前に送った目標」).
            # apply_limits / check_send_safe / 中継点のかけ直しは今までどおり実測 q を使う.
            measured_state = np.concatenate([q, [float(grip)]]).astype(np.float32)
            state_joints, state_source = q, "measured"
            if args.state_from_target:
                if last_sent_target is None:
                    print("[STATE ] 実測を渡す (直前に送った目標がない)")
                else:
                    gap = float(np.max(np.abs(last_sent_target - q[:6])))
                    if gap > STATE_TARGET_MAX_GAP_DEG:
                        print(f"[WARN  ] 目標と実測の差が {gap:.2f}° > {STATE_TARGET_MAX_GAP_DEG:.0f}° "
                              "なので実測を渡します (腕がどこかに当たって止まっている可能性)")
                    else:
                        state_joints, state_source = last_sent_target, "target"
                    print(f"[STATE ] {'目標' if state_source == 'target' else '実測'}を渡す  "
                          f"目標と実測の最大差 {gap:.2f}°"
                          f"（関節 j{int(np.argmax(np.abs(last_sent_target - q[:6])))}）")
            state = np.concatenate([state_joints, [float(grip)]]).astype(np.float32)
            t0 = time.time()
            out = policy.infer({"observation/image": rgb, "observation/state": state, "prompt": args.prompt})
            latency = time.time() - t0
            acts = np.asarray(out["actions"], dtype=float)
            raw_target, grip_cmd, used = plan_chunk(acts, q, grip, args.steps_per_chunk)
            # plan_chunk は, グリッパーが切り替わるチャンクでは used-1 行目 (used=0 なら実測角)
            # を目標に返す. actions の何行目を使ったかを記録に残す (codex A1).
            final_raw_index = (used if grip_cmd is None else (used - 1 if used > 0 else None))
            # 中継点の計画 (--via-stride 0 なら used の 1 点だけ = 従来と同じ).
            plan = plan_vias(acts, q, raw_target, used, args.via_stride, lo, hi,
                             args.max_move_deg, final_raw_index)
            target, notes = plan[-1]["target"], plan[-1]["notes"]     # チャンクの最終目標
            delta = target - q

            cv2.imwrite(str(log_dir / "frames" / f"{i:04d}.jpg"), bgr_small)
            rec = {"chunk": i, "t": time.time(), "latency_s": round(latency, 3), "state": state.tolist(),
                   "state_source": state_source, "measured_state": measured_state.tolist(),
                   "actions": acts.tolist(), "used_step": used, "target": target.tolist(),
                   "grip_cmd": grip_cmd, "notes": notes, "executed": False}
            gtxt = "" if grip_cmd is None else ("  グリッパー→閉" if grip_cmd == 1 else "  グリッパー→開")
            print(f"[{i:03d}] 推論 {latency*1000:.0f}ms  {used + 1}ステップ先  Δ="
                  + " ".join(f"{d:+5.1f}" for d in delta) + gtxt)
            for n in notes:
                print(f"       [LIMIT] {n}")
            if args.via_stride > 0:
                rec["vias"] = [{"step": v["step"], "raw_index": v["raw_index"],
                                "raw": _fmt6(v["raw"]), "planned_target": _fmt6(v["target"]),
                                "target": _fmt6(v["target"]), "notes": v["notes"],
                                "called": False, "success": None, "retried": None,
                                "actual_after": None} for v in plan]
                print(f"       [VIA   ] 中継点 {len(plan)} 点: step "
                      + ", ".join(str(v["step"]) for v in plan))
                for v in plan:
                    for n in v["notes"]:
                        print(f"       [LIMIT] step {v['step']}: {n}")
                    if not args.execute:   # ドライランは中継点の一覧だけ出して送らない
                        print(f"       [VIA   ] step {v['step']:2d}  Δ="
                              + " ".join(f"{d:+5.1f}" for d in v["delta"]))

            # 送る直前の最終検査 (codex R1 / C2). 中継点は 1 点でも引っかかったら
            # **どれも送らずに** 止める (途中まで動かして止まる方が危ない).
            # 送信にもグリッパー操作にも入らず止める.
            # HOME 復帰 (h) だけはこの検査を通さずに送れる (範囲の外にいるアームを戻す手段).
            unsafe = []
            for v in plan:
                for u in check_send_safe(v["target"], lo, hi):
                    unsafe.append(u if args.via_stride <= 0 else f"step {v['step']}: {u}")

            stopped = False
            if not unsafe and (args.execute or args.dry_keys):
                # ここから先で送れなかった経路 (s / 送信なし / 中断) は, 次のチャンクで
                # 実測を渡すために None のままにする (--state-from-target 用).
                last_sent_target = None
                grasp = None         # つかんだ区間を巻き戻すときの答え (GRASP_PLACED / GRASP_DROPPED)
                if not args.auto:
                    # 入力を待っている間は wait (人が手でブロックを置き直す. 学習データに使わない. 依頼 27)
                    if recorder is not None:
                        recorder.set_mode(MODE_WAIT)
                    while True:
                        grasp = None
                        # 依頼 40: たまっているキー (位置合わせを閉じたキー・押しっぱなし) で先へ進まない
                        flush_stdin()
                        raw = input(CONFIRM_PROMPT)
                        ans = raw.strip()
                        if raw == "":
                            break                # 実行するのは何も打たずに Enter を押したときだけ (依頼 40)
                        if ans not in CONFIRM_KEYS:
                            # 知らない文字 (R・c] ・空白だけ など) は実行せずに聞き直す. 先頭の文字だけでは見ない
                            print(f"       分からない入力: {raw}（{CONFIRM_PROMPT.strip().rstrip('>').strip()}）")
                            continue
                        if ans == "r":
                            # 依頼 40: 補正の外でも r で爪を締め直す (補正の中の r と同じ. チャンクは実行しない)
                            e = {"type": "confirm", "action": "regrip_tighten", "where": "confirm",
                                 "correction_id": None, "after_chunk": i, "chunk": i, "t": time.time(),
                                 "key": "r", "before": grip}
                            if grip != 1:
                                print("       爪が開いているので締め直しはしない（閉じるのは g）")
                                e.update(after=grip, sent=False, skipped="gripper_open")
                            else:
                                print("       爪を締め直します (開かずに閉じる指令をもう一度)")
                                arm.gripper(1)
                                e.update(after=1, sent=True)
                            log_f.write(json.dumps(e) + "\n"); log_f.flush()
                            continue
                        if ans != "b":
                            break
                        # 巻き戻せない場合は断って聞き直す (アームは動かさない)
                        if not history:
                            print("       [REWIND] 巻き戻せる区間がありません (まだ何も実行していない)")
                            continue
                        if history[-1].get("blocked"):
                            print("       [REWIND] 直前の巻き戻し / 補正の取り消しが始めの姿勢まで戻りきれなかったので, "
                                  "これより前へは巻き戻しません (h で HOME に戻せます)")
                            continue
                        h_last = history[-1]
                        if (h_last["kind"] == "correction" and h_last.get("regrip")
                                and not h_last["grip_changed"]):
                            # R を使った補正 (依頼 35): 始めも終わりも閉. つかんだ区間と同じく 1 文字で聞く
                            a = input(f"       [REWIND] 補正 {h_last['correction_id']} では R でつかみ直しました. "
                                      "y=持っている（閉じたまま戻る） / "
                                      "n=落とした（先に開いてから戻る） / その他=やめる > ").strip().lower()
                            if a == "y":
                                grasp = GRASP_HELD
                            elif a == "n":
                                grasp = GRASP_DROPPED
                            else:
                                print("       [REWIND] やめました (アームは動かしていません)")
                                continue
                            break
                        if h_last["grip_changed"]:
                            if h_last["kind"] == "chunk" and h_last.get("grip_cmd") == 1:
                                # つかんだ区間 (依頼 27): 持っているか落としたかを 1 文字で聞く
                                a = input(f"       [REWIND] 推論 {h_last['chunk']} はつかんだ区間です. "
                                          "y=持っている（下ろして置いてから戻る） / "
                                          "n=落とした（先に開いてから戻る） / その他=やめる > ").strip().lower()
                                if a == "y":
                                    grasp = GRASP_PLACED
                                elif a == "n":
                                    grasp = GRASP_DROPPED
                                else:
                                    print("       [REWIND] やめました (アームは動かしていません)")
                                    continue
                                break
                            if h_last["kind"] == "chunk" and h_last.get("grip_cmd") == 0:
                                print(f"       [REWIND] 直前の区間 (推論 {h_last['chunk']}) でグリッパーを開いた"
                                      "ので巻き戻しません. ブロックを置き直すなら h で終えてやり直してください")
                                continue
                            print(f"       [REWIND] 直前の区間 ({'推論 ' + str(h_last['chunk']) if h_last['kind'] == 'chunk' else '補正 ' + str(h_last['correction_id'])})"
                                  " でグリッパーを動かしたので巻き戻しません")
                            continue
                        break
                    if recorder is not None and ans not in ("q", "h"):
                        recorder.set_mode(MODE_MODEL)
                    if ans == "q":
                        end_reason = "q"
                        log_f.write(json.dumps(rec) + "\n"); log_f.flush()
                        if recorder is not None:
                            recorder.stop()
                            outcome = ask_outcome()
                        break
                    if ans == "h":
                        end_reason = "h"
                        if recorder is not None:
                            recorder.set_mode(MODE_HOME)
                        if args.dry_keys:
                            print("       [DRY   ] HOME へは送らない (ドライラン)")
                        else:
                            ok_home, _ = _send_and_wait_arrival(HOME, "pi05_home", 2.5, send_wait_sec=SEND_WAIT)
                            rec["home_requested"] = True
                            rec["home_arrived"] = bool(ok_home)
                        log_f.write(json.dumps(rec) + "\n"); log_f.flush()
                        if recorder is not None:
                            recorder.stop()
                            outcome = ask_outcome()
                        break
                    if ans == "s":
                        log_f.write(json.dumps(rec) + "\n"); continue
                    if ans == "b":
                        # 直前の 1 回分を巻き戻して, 戻った姿勢からもう一度推論する
                        rec["rewind_requested"] = True
                        log_f.write(json.dumps(rec) + "\n"); log_f.flush()
                        entry = history.pop()
                        rw = run_rewind(entry, arm, lo, hi, args.max_move_deg, recorder, grasp=grasp)
                        rw["after_chunk"] = i
                        n_rewinds += 1
                        if rw.get("gripper_opened"):
                            grip = 0
                        if grasp == GRASP_DROPPED and entry["kind"] == "chunk":
                            rw["start_frame"] = str(log_dir / "frames" / f"{entry['chunk']:04d}.jpg")
                        if not rw["finished"]:
                            # codex R2-2: 戻りきれなかったら境界を積む (次の b で古い区間の経路へ飛ばない)
                            history.append({"kind": "blocked", "blocked": True, "chunk": entry.get("chunk"),
                                            "correction_id": entry.get("correction_id"),
                                            "grip_changed": False, "t_start": rw["t_start"],
                                            "t_end": rw["t_end"]})
                        log_f.write(json.dumps(rw) + "\n"); log_f.flush()
                        if grasp == GRASP_DROPPED and rw.get("gripper_opened"):
                            # 落としたブロックを人が元の位置へ置き直す間は wait (手が写る)
                            if "start_frame" in rw:
                                print(f"       [REWIND] 元の位置の目安 (推論 {entry['chunk']} の始めの写真): "
                                      f"{rw['start_frame']}")
                            if recorder is not None:
                                recorder.set_mode(MODE_WAIT)
                            input("       ブロックを元の位置へ置き直したら Enter で続ける > ")
                            if recorder is not None:
                                recorder.set_mode(MODE_MODEL)
                        continue
                    if ans == "c":
                        rec["correction_requested"] = True
                        log_f.write(json.dumps(rec) + "\n"); log_f.flush()
                        n_corrections += 1
                        with KeyReader() as keys:
                            cr, grip = run_correction(arm, keys, lo, hi, args.max_move_deg, grip,
                                                      n_corrections, i, log_f, recorder)
                        if cr is not None:
                            log_f.write(json.dumps(cr) + "\n"); log_f.flush()
                            if cr["grip_used"] or cr.get("regrip_used"):
                                # codex R2-1: 補正でグリッパーを動かしたら, 開始時の開放は済んだことにする
                                # (このあと最初の推論の実行で勝手に開いて物を落とさない. R も同じ)
                                grip_opened = True
                            if cr["action"] == "cancel" and not cr["finished"]:
                                history.append({"kind": "blocked", "blocked": True, "chunk": None,
                                                "correction_id": n_corrections, "grip_changed": False,
                                                "t_start": cr["t_start"], "t_end": cr["t_end"]})
                            if cr["action"] == "accept" and (cr["steps_sent"] or cr["grip_used"]
                                                             or cr["regrip_used"]):
                                history.append({"kind": "correction", "correction_id": n_corrections,
                                                "chunk": None,
                                                "start_pose": np.asarray(cr["start_pose"], dtype=float),
                                                "sent_targets": [np.asarray(x, dtype=float)
                                                                 for x in cr["sent_targets"]],
                                                "grip_changed": cr["grip_used"],
                                                "regrip": cr["regrip_used"],
                                                "t_start": cr["t_start"], "t_end": cr["t_end"]})
                        continue
            if not unsafe and args.dry_keys:
                # --dry-keys の Enter: 送らずに仮の姿勢を目標へ移す (b / c の流れを試すため)
                t_ex0 = time.time()
                sent = [np.asarray(v["target"], dtype=float).copy() for v in plan]
                arm.send(sent[-1], f"pi05_chunk{i:03d}")
                if grip_cmd is not None:
                    arm.gripper(grip_cmd)
                    grip = grip_cmd
                history.append({"kind": "chunk", "chunk": i, "correction_id": None,
                                "start_pose": q[:6].copy(), "sent_targets": sent,
                                "grip_changed": grip_cmd is not None, "grip_cmd": grip_cmd,
                                "t_start": t_ex0, "t_end": time.time()})
                rec["simulated"] = True
            if not unsafe and args.execute:
                t_exec_start = time.time()
                sent_targets = []        # 実際に送った目標 (送った順. 巻き戻しでこれを逆にたどる)
                if not grip_opened:
                    # 開始時の開放はここで 1 度だけ (写り方の確認と目標の検査を通り, 送ると決めてから)
                    print("[GRIP  ] 開始時にグリッパーを開く")
                    if recorder is not None:
                        recorder.gripper(0)
                    gripper_cmd(0)
                    grip_opened = True
                    rec["initial_gripper_open"] = True
                broke, final_target, final_sent, sent_any = False, None, False, False
                for vi, v in enumerate(plan):
                    v_last = vi == len(plan) - 1
                    tag = (f"pi05_chunk{i:03d}" if args.via_stride <= 0
                           else f"pi05_chunk{i:03d}_via{v['step']:02d}")
                    tgt, vdelta = v["target"], v["delta"]
                    if args.via_stride > 0:
                        # 送る直前に実測角を読み, そこから apply_limits と check_send_safe を
                        # かけ直す (codex A2: 1 点だけ送る従来の方式と同じ基準にそろえる).
                        qa = read_angles()
                        if qa is None:
                            print("       [WARN] 送る直前の関節角を読めない. "
                                  "この中継点も残りの中継点も送りません")
                            print("       [WARN] 未到達. j4 の発熱などを確認してください")
                            rec["arrived"] = False
                            broke = True
                            if args.auto:
                                exit_code = 1
                                log_f.write(json.dumps(rec) + "\n")
                                stopped = True
                            break
                        tgt, notes_now = apply_limits(v["raw"], qa, lo, hi, args.max_move_deg)
                        if notes_now != v["notes"]:
                            for n in notes_now:
                                print(f"       [LIMIT] step {v['step']} (実測から): {n}")
                        rec["vias"][vi].update(target=_fmt6(tgt), notes=notes_now)
                        u2 = check_send_safe(tgt, lo, hi)
                        if u2:
                            unsafe = [f"step {v['step']}: {x}" for x in u2]
                            broke = True
                            break
                        vdelta = tgt - qa          # 送らない判定は実測との差で見る (codex ❌1)
                    final_target = tgt
                    if np.max(np.abs(vdelta)) <= 0.5:
                        if args.via_stride > 0:
                            print(f"       [VIA   ] step {v['step']:2d}  Δ="
                                  + " ".join(f"{d:+5.1f}" for d in vdelta) + "  送らず (0.5° 以下)")
                        continue
                    ok, retried = _send_and_wait_arrival(tgt.tolist(), tag, 3.0, send_wait_sec=SEND_WAIT)
                    sent_any = True
                    sent_targets.append(np.asarray(tgt, dtype=float).copy())
                    if args.via_stride > 0:
                        rec["vias"][vi].update(called=True, success=bool(ok), retried=bool(retried),
                                               actual_after=_fmt6(read_angles()))
                        print(f"       [VIA   ] step {v['step']:2d}  Δ="
                              + " ".join(f"{d:+5.1f}" for d in vdelta)
                              + ("  着いた" if ok else "  未到達"))
                    if v_last:
                        rec["arrived"] = bool(ok)
                        final_sent = True
                    if not ok:
                        print("       [WARN] 未到達. j4 の発熱などを確認してください")
                        if args.auto:
                            exit_code = 1
                            log_f.write(json.dumps(rec) + "\n")
                            stopped = True
                            broke = True
                            break
                    if v_last:
                        # 残ったずれを同じ目標の送り直しで詰める (LOG359). 止める条件は増やさない.
                        rec["settle"], rec["settle_retries_used"] = settle_target(
                            tgt, f"pi05_chunk{i:03d}", args.settle_tol, args.settle_retries)
                if not broke and args.via_stride > 0 and not final_sent and final_target is not None:
                    # 最後の中継点が「送らない」になった場合も, チャンクの最後の目標について
                    # 到達の記録と settle は必ず行う (codex ❌2: 重複送信を省くことと分ける).
                    qa = read_angles()
                    rec["arrived"] = bool(qa is not None
                                          and float(np.max(np.abs(final_target - qa[:6]))) <= 3.0)
                    rec["settle"], rec["settle_retries_used"] = settle_target(
                        final_target, f"pi05_chunk{i:03d}", args.settle_tol, args.settle_retries)
                if not broke:
                    # 次のチャンクで --state-from-target が使う「直前に送った目標」.
                    # 送らなかった (s / 送信なし / 中断) ときは None に戻して実測を渡す.
                    last_sent_target = (np.asarray(final_target, dtype=float).copy()
                                        if sent_any and final_target is not None else None)
                    if grip_cmd is not None:
                        if recorder is not None:
                            recorder.gripper(grip_cmd)
                        gripper_cmd(grip_cmd)
                        grip = grip_cmd
                    rec["executed"] = True
                # 巻き戻し (b) 用に, この推論で実際に送った目標と始めの姿勢 (実測) を残す.
                # 途中で止まった (broke) 推論も, 1 点でも送っていれば残す (codex R1-3:
                # 残さないと次の b が 1 つ古い区間を巻き戻してしまう)
                t_exec_end = time.time()
                rec["t_exec_start"], rec["t_exec_end"] = t_exec_start, t_exec_end
                rec["sent_targets"] = [_fmt6(x) for x in sent_targets]
                grip_moved = (not broke) and grip_cmd is not None
                if sent_targets or grip_moved:
                    history.append({"kind": "chunk", "chunk": i, "correction_id": None,
                                    "start_pose": q[:6].copy(), "sent_targets": sent_targets,
                                    "grip_changed": grip_moved, "grip_cmd": grip_cmd if grip_moved else None,
                                    "partial": bool(broke),
                                    "t_start": t_exec_start, "t_end": t_exec_end})
            if stopped:
                break
            if unsafe:
                # 計画の検査 または 送る直前のかけ直しで範囲の外になったとき.
                # 送信にもグリッパー操作にも入らず止める.
                # HOME 復帰 (h) だけはこの検査を通さずに送れる (範囲の外にいるアームを戻す手段).
                rec["unsafe"] = unsafe
                rec["envelope"] = {"lo": [round(float(v), 2) for v in lo],
                                   "hi": [round(float(v), 2) for v in hi]}
                for u in unsafe:
                    print(f"       [ABORT] {u}")
                print("[STOP  ] 安全でない目標のため, 送らずに停止します "
                      "(現在角が安全範囲の外にあると, 移動量の制限で範囲の外に戻る)")
                # 記録は入力より前に書いて flush する (codex C2-1: 入力待ちや HOME 復帰中の
                # Ctrl-C でこのチャンクの unsafe / envelope が消えないように).
                log_f.write(json.dumps(rec) + "\n"); log_f.flush()
                exit_code = 1
                if args.execute and not args.auto:
                    if recorder is not None:
                        recorder.set_mode(MODE_WAIT)      # 入力待ちは wait (codex 依頼 27 P3)
                    ans = input("       h=HOMEに戻して終了 / 他=そのまま終了 > ").strip().lower()
                    if ans == "h":
                        if recorder is not None:
                            recorder.set_mode(MODE_HOME)
                        ok_home, _ = _send_and_wait_arrival(HOME, "pi05_home", 2.5, send_wait_sec=SEND_WAIT)
                        log_f.write(json.dumps({"chunk": i, "type": "home_return", "t": time.time(),
                                                "home_requested": True,
                                                "home_arrived": bool(ok_home)}) + "\n")
                        log_f.flush()
                else:
                    print("         アームを HOME に置き直してからやり直してください")
                break
            log_f.write(json.dumps(rec) + "\n"); log_f.flush()
    except KeyboardInterrupt:
        print("\n[STOP  ] Ctrl-C")
        end_reason = "ctrl_c"
    finally:
        # finally ではアームを動かさない (HOME 復帰もサーボ解放もしない). 止まった姿勢は
        # そのまま保つ: 未知の姿勢から勝手に動かす方が危ない. 戻すときは h で明示的に送る.
        if recorder is not None:
            recorder.stop()
            try:
                write_trial_json(log_dir, run_stem, args, bool(recorder.stopped_cleanly),
                                 end_reason if not (exit_code and end_reason in (None, "max_chunks"))
                                 else "error",
                                 outcome, [{k: v for k, v in h_.items()
                                            if k in ("kind", "chunk", "correction_id", "grip_changed")}
                                           for h_ in history], n_rewinds, n_corrections, exit_code)
            except Exception as e:
                print(f"[WARN  ] {run_stem}.json を書けない: {e}")
        if args.record and rec_sock is not None:
            notify_recorder(rec_sock, {"type": "trial_end", "run_stem": run_stem})
        if not log_f.closed:
            log_f.close()
        if cap is not None and not (recorder is not None and recorder.alive()):
            cap.release()      # 記録スレッドが止まらなかったときは閉じない (読みかけと競合する)
        if policy is not None:
            policy.close()
        try:
            close_daemon_socket()
        except Exception:
            pass
        print(f"[DONE  ] 記録: {log_dir}")
    # 終了コードは正常に抜けた経路でだけ表示する (sys.exit で抜ける場合は, その [ABORT] /
    # [ERROR] の文言が出て終了コード 1 になるので, ここで 0 と書くと食い違う).
    if exit_code:
        print(f"[DONE  ] 終了コード {exit_code} (安全停止 / 途中のエラー)")
    return exit_code


if __name__ == "__main__":
    sys.exit(main())
```

### pi05/check_dataset.py

```python
#!/usr/bin/env python3
"""check_dataset.py — 学習に出す前に、お手本データ (raw_episodes) を点検する (Mac 側・読むだけ).

2026-10-21 (lab Log11 / LOG358): teach_v1 で学習したモデルが、ブロックの真上で止まった.
原因はお手本の側で、停止しているステップが 40% あり、真上で 1.5〜2 秒止まっていた.
action_horizon は 10 (1 秒) なので、1 秒を超える停止は「止まる」という動作として丸ごと覚える.
学習の前に数えれば分かったことなので、毎回の学習前にこれを実行する.

点検する項目 (FAIL が 1 つでもあれば終了コード 1):
  1. そろい方   画像の枚数 = ステップ数 / 画像サイズが全エピソードで同じ / meta の task が同じ   違えば FAIL
  2. 停止       停止ステップの割合と、いちばん長い連続         1.0 秒超で FAIL / 割合 20% 超で WARN
  3. グリッパー 切り替えが「閉 → 開」の 2 回か                 違えば WARN
  4. 肩と j4    j1 が J1_SAFE_MAX 超 / j4 が J4_SAFE の外       どちらも FAIL
  5. ばらつき   つかんだ瞬間の j0 を 5° 刻みで数える           1 か所が半分を超えたら WARN
  6. action     |action[t] - state[t+1]| の最大                 3.5° 超で WARN

データには一切書き込まない (np.load と meta.json の読み取りだけ).

Usage:
  python3 pi05/check_dataset.py /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes
"""
import argparse
import json
import sys
from collections import Counter
from pathlib import Path

import cv2
import numpy as np

# 肩の上限は本線 fk_lookup.py の値をそのまま使う (二重定義しない. record_teach_demo.py と同じ扱い)
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "dynamic_tracking_limits" / "place" / "place_modules"))
from fk_lookup import J1_SAFE_MAX  # noqa: E402  88.0. これを超える指令はアームが黙って捨てる (LOG352)

FPS_DEFAULT = 10                # meta.json の fps が無いときの既定 (build_demo_episodes.py の FPS)
ACTION_HORIZON = 10             # 学習設定の action_horizon (openpi_addon の config と同じ)
STOP_EPS_DEG = 0.3              # build_demo_episodes.py の MID_IDLE_EPS_DEG と同じ「停止」の定義
STOP_RUN_FAIL_SEC = ACTION_HORIZON / FPS_DEFAULT    # 1.0 秒. これを超える連続停止は丸ごと覚える
STOP_RATIO_WARN = 0.20          # 停止ステップの割合がこれを超えたら WARN
J4_SAFE = (-90.0, 60.0)         # run_pick_place.py の J4_SAFE_MIN/MAX
J0_BIN_DEG = 5.0                # つかんだ瞬間の j0 を分ける刻み (eval_policy_offline.py と同じ)
POS_SHARE_WARN = 0.5            # 1 か所がこれを超えたら WARN (LOG348: 同じ場所ばかりで画像を見ずに手を伸ばした)
ACT_STATE_WARN_DEG = 3.5        # |action[t] - state[t+1]| がこれを超えたら WARN
_LEVELS = {"PASS": 0, "WARN": 1, "FAIL": 2}


class Check:
    """1 項目の結果. fail/warn を呼ぶと status がその分だけ悪くなる."""

    def __init__(self, num, title):
        self.num, self.title, self.status, self.lines = num, title, "PASS", []

    def fail(self, msg):
        self._add("FAIL", msg)

    def warn(self, msg):
        self._add("WARN", msg)

    def note(self, msg):
        self.lines.append(("", msg))

    def _add(self, level, msg):
        if _LEVELS[level] > _LEVELS[self.status]:
            self.status = level
        self.lines.append((level, msg))

    def report(self):
        print(f"[{self.status:4s}] {self.num}. {self.title}")
        for level, msg in self.lines:
            print(f"         {('[' + level + '] ') if level else ''}{msg}")


def load_episodes(raw_dir: Path):
    eps = sorted(p.parent for p in raw_dir.glob("*/episode.npz"))
    if not eps:
        sys.exit(f"[ERROR] お手本が見つからない (*/episode.npz): {raw_dir}")
    out = []
    for ep in eps:
        z = np.load(ep / "episode.npz")
        meta_p = ep / "meta.json"
        out.append({
            "name": ep.name,
            "dir": ep,
            "state": np.asarray(z["state"], dtype=np.float64),
            "actions": np.asarray(z["actions"], dtype=np.float64),
            "frames": sorted((ep / "frames").glob("[!.]*.jpg")),   # ._*.jpg (exFAT の AppleDouble) を除く
            "meta": json.loads(meta_p.read_text()) if meta_p.exists() else None,
        })
    return out


def fps_of(e):
    meta = e["meta"] or {}
    try:
        return float(meta.get("fps") or FPS_DEFAULT)
    except (TypeError, ValueError):
        return float(FPS_DEFAULT)


def stop_mask(e):
    """停止ステップ: 6 関節すべて |action - state| < 0.3° かつ グリッパーの action と state が同じ."""
    s, a = e["state"], e["actions"]
    n = min(len(s), len(a))
    if n == 0 or s.shape[1] < 7 or a.shape[1] < 7:
        return np.zeros(0, dtype=bool)
    moved = np.abs(a[:n, :6] - s[:n, :6]) < STOP_EPS_DEG
    return moved.all(axis=1) & (a[:n, 6] == s[:n, 6])


def longest_run(mask):
    best = cur = 0
    for v in mask:
        cur = cur + 1 if v else 0
        best = max(best, cur)
    return best


def grip_changes(e):
    """グリッパーの切り替え: [(ステップ, '閉' or '開'), ...]."""
    g = (e["state"][:, 6] > 0.5).astype(int)
    return [(int(i) + 1, "閉" if g[i + 1] == 1 else "開") for i in np.where(np.diff(g) != 0)[0]]


def check_shape(eps):
    c = Check(1, "そろい方 (画像の枚数・画像サイズ・meta の task)")
    tasks, metas, imgs = Counter(), Counter(), Counter()
    for e in eps:
        s, a, n_img = e["state"], e["actions"], len(e["frames"])
        if s.ndim != 2 or s.shape[1] != 7 or a.shape != s.shape:
            c.fail(f"{e['name']}: state{s.shape} / actions{a.shape} が (N,7) で揃っていない")
            continue
        if n_img != len(s):
            c.fail(f"{e['name']}: 画像 {n_img} 枚 ≠ ステップ {len(s)}")
        if e["meta"] is None:
            c.fail(f"{e['name']}: meta.json がない")
        else:
            tasks[str(e["meta"].get("task"))] += 1
            metas[tuple(e["meta"].get("image_size") or ())] += 1
        if n_img:
            bgr = cv2.imread(str(e["frames"][0]))
            if bgr is None:
                c.fail(f"{e['name']}: 画像を読めない: {e['frames'][0].name}")
            else:
                imgs[(bgr.shape[1], bgr.shape[0])] += 1

    if len(tasks) > 1:
        c.fail("meta の task が揃っていない: " + " / ".join(f"{t!r} x{n}" for t, n in tasks.most_common()))
    elif tasks:
        c.note(f"task {list(tasks)[0]!r} ({sum(tasks.values())} 本すべて同じ)")
    if len(imgs) > 1:
        c.fail("画像サイズが揃っていない: " + " / ".join(f"{w}x{h} x{n}" for (w, h), n in imgs.most_common()))
    elif imgs:
        (w, h), n = imgs.most_common(1)[0]
        c.note(f"画像サイズ {w}x{h} ({n} 本すべて同じ)")
    if len(metas) > 1:
        c.fail("meta の image_size が揃っていない: " + " / ".join(f"{list(k)} x{n}" for k, n in metas.most_common()))
    elif metas and imgs:
        (w, h) = imgs.most_common(1)[0][0]
        mw, mh = (list(metas)[0] + (None, None))[:2]
        if (mw, mh) != (w, h):
            c.fail(f"meta の image_size {[mw, mh]} が実際の画像 {w}x{h} と違う")
    if c.status == "PASS":
        c.note(f"画像の枚数 = ステップ数 ({len(eps)} 本すべて一致)")
    return c


def check_stop(eps):
    c = Check(2, f"停止 (連続 {STOP_RUN_FAIL_SEC:.1f} 秒超で FAIL / 割合 {STOP_RATIO_WARN:.0%} 超で WARN)")
    n_stop = n_all = 0
    rows = []
    for e in eps:
        m = stop_mask(e)
        fps = fps_of(e)
        run = longest_run(m)
        ratio = float(m.mean()) if len(m) else 0.0
        n_stop += int(m.sum())
        n_all += len(m)
        rows.append((e["name"], ratio, int(m.sum()), len(m), run, run / fps))
    overall = n_stop / n_all if n_all else 0.0
    c.note(f"全体 {overall:.1%} ({n_stop}/{n_all} ステップ) / "
           f"いちばん長い連続 {max((r[5] for r in rows), default=0.0):.1f} 秒 "
           f"(上限 {STOP_RUN_FAIL_SEC:.1f} 秒 = action_horizon {ACTION_HORIZON} x {1.0 / FPS_DEFAULT:.1f} 秒)")
    if overall > STOP_RATIO_WARN:
        c.warn(f"全体の停止が {overall:.1%} で {STOP_RATIO_WARN:.0%} を超えている "
               "(停止を『動作』として覚える. build_demo_episodes.py --trim-mid-idle で詰める)")
    for name, ratio, n_s, n_t, run, sec in rows:
        msg = f"{name}: 停止 {ratio:5.1%} ({n_s:3d}/{n_t:3d})  最長 {sec:.1f} 秒 ({run} ステップ)"
        if sec > STOP_RUN_FAIL_SEC + 1e-9:
            c.fail(msg)
        elif ratio > STOP_RATIO_WARN:
            c.warn(msg)
        else:
            c.note(msg)
    return c


def check_gripper(eps):
    c = Check(3, "グリッパーの切り替え (各エピソードで「閉 → 開」の 2 回)")
    for e in eps:
        ch = grip_changes(e)
        if [w for _, w in ch] != ["閉", "開"]:
            seq = " → ".join(f"{w}(t={t})" for t, w in ch) or "切り替えなし"
            c.warn(f"{e['name']}: {len(ch)} 回  {seq}")
    if c.status == "PASS":
        c.note(f"{len(eps)} 本すべて 閉 → 開 の 2 回")
    return c


def check_limits(eps):
    c = Check(4, f"肩 j1 <= {J1_SAFE_MAX:.0f}° / j4 は J4_SAFE [{J4_SAFE[0]:+.0f}, {J4_SAFE[1]:+.0f}] の中")
    j1_top, j4_lo, j4_hi = [], [], []
    for e in eps:
        for kind in ("state", "actions"):
            v = e[kind]
            if v.shape[1] < 7:
                continue
            j1 = v[:, 1]
            i = int(j1.argmax())
            j1_top.append((float(j1[i]), e["name"], kind, i))
            if j1[i] > J1_SAFE_MAX:
                c.fail(f"{e['name']}: {kind} の j1 最大 {j1[i]:+.2f}° > {J1_SAFE_MAX:.0f}° (t={i}. "
                       "この指令はアームが黙って捨てる / LOG352)")
            j4 = v[:, 4]
            lo, hi = int(j4.argmin()), int(j4.argmax())
            j4_lo.append((float(j4[lo]), e["name"], kind, lo))
            j4_hi.append((float(j4[hi]), e["name"], kind, hi))
            if j4[lo] < J4_SAFE[0]:
                c.fail(f"{e['name']}: {kind} の j4 最小 {j4[lo]:+.2f}° < {J4_SAFE[0]:+.0f}° (t={lo})")
            if j4[hi] > J4_SAFE[1]:
                c.fail(f"{e['name']}: {kind} の j4 最大 {j4[hi]:+.2f}° > {J4_SAFE[1]:+.0f}° (t={hi})")
    if j1_top:
        v, name, kind, i = max(j1_top)
        c.note(f"j1 の最大 {v:+.2f}° ({name} {kind} t={i})")
    if j4_lo and j4_hi:
        lo, lname, lkind, li = min(j4_lo)
        hi, hname, hkind, hi_t = max(j4_hi)
        c.note(f"j4 の範囲 {lo:+.2f}° ({lname} {lkind} t={li}) .. {hi:+.2f}° ({hname} {hkind} t={hi_t})")
    return c


def check_positions(eps):
    c = Check(5, f"ブロックの位置のばらつき (つかんだ瞬間の j0 を {J0_BIN_DEG:.0f}° 刻み)")
    bins = Counter()
    for e in eps:
        close = [t for t, w in grip_changes(e) if w == "閉"]
        if not close:
            bins["不明"] += 1
            continue
        bins[round(float(e["state"][close[0], 0]) / J0_BIN_DEG) * J0_BIN_DEG] += 1
    total = sum(bins.values())
    for key in sorted(bins, key=lambda k: (isinstance(k, str), k)):
        n = bins[key]
        label = "つかんだ瞬間が不明" if isinstance(key, str) else f"j0 {key:+6.0f}° 付近"
        c.note(f"{label}: {n:2d} 本  {n / total:5.1%}  {'#' * n}")
    top = [(n, k) for k, n in bins.items() if not isinstance(k, str)]
    if top:
        n, key = max(top)
        if n / total > POS_SHARE_WARN:
            c.warn(f"j0 {key:+.0f}° 付近が {n}/{total} ({n / total:.1%}) で半分を超えている "
                   "(同じ場所ばかりだと画像を見ずに手を伸ばす / LOG348)")
    if bins.get("不明"):
        c.warn(f"つかんだ瞬間が分からないエピソードが {bins['不明']} 本 (項目 3 も見る)")
    return c


def check_action_vs_next_state(eps):
    c = Check(6, f"|action[t] - state[t+1]| の最大 (関節 6 列. {ACT_STATE_WARN_DEG}° 超で WARN)")
    worst = []
    for e in eps:
        s, a = e["state"], e["actions"]
        n = min(len(s) - 1, len(a) - 1)
        if n <= 0 or s.shape[1] < 7 or a.shape[1] < 7:
            continue
        d = np.abs(a[:n, :6] - s[1:n + 1, :6])
        t, k = np.unravel_index(int(d.argmax()), d.shape)
        worst.append((float(d[t, k]), e["name"], int(t), int(k)))
        if d[t, k] > ACT_STATE_WARN_DEG:
            c.warn(f"{e['name']}: {d[t, k]:.2f}° (t={t}, j{k}) > {ACT_STATE_WARN_DEG}° "
                   "(action は 0.1 秒後の state のはず. 停止詰めのつなぎ目を確認)")
    if worst:
        v, name, t, k = max(worst)
        c.note(f"全体の最大 {v:.2f}° ({name} t={t} j{k})")
    return c


def main():
    ap = argparse.ArgumentParser(description="π0.5 の学習前に raw_episodes を点検する (読むだけ)")
    ap.add_argument("raw_dir", help="raw_episodes のフォルダ")
    args = ap.parse_args()

    raw_dir = Path(args.raw_dir)
    if not raw_dir.is_dir():
        sys.exit(f"[ERROR] フォルダがない (KIOXIA 未接続 / パスの打ち間違い): {raw_dir}")
    eps = load_episodes(raw_dir)
    steps = sum(len(e["state"]) for e in eps)
    fps_set = sorted({fps_of(e) for e in eps})
    print(f"[DATA  ] {raw_dir}")
    print(f"         {len(eps)} 本 / {steps} ステップ / "
          f"{steps / fps_set[0]:.1f} 秒相当 / fps {'・'.join(f'{f:g}' for f in fps_set)}")
    print()

    checks = [check_shape(eps), check_stop(eps), check_gripper(eps),
              check_limits(eps), check_positions(eps), check_action_vs_next_state(eps)]
    for c in checks:
        c.report()
        print()

    n_fail = sum(1 for c in checks if c.status == "FAIL")
    n_warn = sum(1 for c in checks if c.status == "WARN")
    print("[RESULT] " + "  ".join(f"{c.num}.{c.status}" for c in checks))
    if n_fail:
        print(f"[RESULT] FAIL {n_fail} 項目 / WARN {n_warn} 項目 — このまま学習に出さない")
    elif n_warn:
        print(f"[RESULT] FAIL なし / WARN {n_warn} 項目 — 中身を見て判断する")
    else:
        print("[RESULT] 全項目 PASS")
    return 1 if n_fail else 0


if __name__ == "__main__":
    sys.exit(main())
```

### pi05/convert_to_lerobot.py

```python
#!/usr/bin/env python3
"""convert_to_lerobot.py — raw_episodes (build_demo_episodes.py の出力) を LeRobot 形式にする (段階2).

openpi の環境 (Runpod) で実行する. Mac では openpi が入らないため動かない (Log#3 で確認済み).
  cd /workspace/openpi
  uv run python /workspace/r2r2r/pi05/convert_to_lerobot.py \
      --raw-dir /workspace/data/mecharm_redblock_box_scripted_v1/raw_episodes

出力: $HF_LEROBOT_HOME/local/mecharm_redblock_box_v1  (既定 ~/.cache/huggingface/lerobot)
openpi の学習設定 pi05_mecharm_lora はこの repo_id を読む.
"""
import argparse
import json
import shutil
from pathlib import Path

import numpy as np
from PIL import Image
from lerobot.common.datasets.lerobot_dataset import HF_LEROBOT_HOME
from lerobot.common.datasets.lerobot_dataset import LeRobotDataset

REPO_ID = "local/mecharm_redblock_box_v1"


def main():
    ap = argparse.ArgumentParser()
    ap.add_argument("--raw-dir", required=True)
    ap.add_argument("--repo-id", default=REPO_ID)
    args = ap.parse_args()

    raw = Path(args.raw_dir)
    eps = sorted(p for p in raw.iterdir() if (p / "episode.npz").exists() and (p / "meta.json").exists())
    assert eps, f"エピソードが見つからない: {raw}"
    first_meta = json.loads((eps[0] / "meta.json").read_text())
    w, h = first_meta["image_size"]
    fps = int(first_meta["fps"])

    out = HF_LEROBOT_HOME / args.repo_id
    if out.exists():
        shutil.rmtree(out)
    ds = LeRobotDataset.create(
        repo_id=args.repo_id,
        robot_type="mecharm270",
        fps=fps,
        features={
            "image": {"dtype": "image", "shape": (h, w, 3), "names": ["height", "width", "channel"]},
            "state": {"dtype": "float32", "shape": (7,), "names": ["state"]},
            "actions": {"dtype": "float32", "shape": (7,), "names": ["actions"]},
        },
        image_writer_threads=8,
        image_writer_processes=4,
    )

    total = 0
    for ep in eps:
        meta = json.loads((ep / "meta.json").read_text())
        z = np.load(ep / "episode.npz")
        state, actions = z["state"].astype(np.float32), z["actions"].astype(np.float32)
        frames = sorted((ep / "frames").glob("[!.]*.jpg"))   # ._*.jpg (exFAT の AppleDouble) を除く
        assert len(frames) == len(state) == len(actions), f"長さ不一致: {ep.name}"
        assert tuple(meta["image_size"]) == (w, h), f"画像サイズ不一致: {ep.name}"
        for i in range(len(state)):
            img = np.asarray(Image.open(frames[i]).convert("RGB"))   # jpg は BGR ではなく RGB で読まれる
            ds.add_frame({"image": img, "state": state[i], "actions": actions[i], "task": meta["task"]})
        ds.save_episode()
        total += len(state)
        print(f"  {ep.name}: {len(state)} steps")
    print(f"done: {len(eps)} episodes / {total} frames → {out}")


if __name__ == "__main__":
    main()
```

### pi05/openpi_addon/add_trim_corr_config.py

```python
#!/usr/bin/env python3
"""openpi config.py に trim2 + 補正データ用の学習設定 pi05_mecharm_trim_corr_lora を足す (2026-10-31 依頼 45).

依頼 46: データを corr_v2 (角度の抜けを速度 20 の動きで埋め直したもの) と合わせた
mecharm_redblock_box_teach_v1_trim2_corr_v2 に替えた. corr_v1 の設定が入っている config.py には足さずに止まる
(同じ名前の設定が 2 つになるため. openpi の config.py を git checkout してから入れ直す).
依頼 48: データを corr_v3 (着いたあとの止まりを詰めたもの) と合わせた ..._trim2_corr_v3 に替え,
学習率の予定を続きからの学習用に弱めた (warmup 100 / peak 2.5e-5 / decay_steps 1_500. 下げきる先 decay_lr 5e-6 は
trim2 と同じ). corr_v1 / corr_v2 の設定が入っている config.py には足さずに止まる.

install_addon.py と add_trim_config.py (lab/Log11/pod/) を実行した後に 1 回実行:
  python3 add_trim_corr_config.py /workspace/openpi --steps 4000 --init base
  python3 add_trim_corr_config.py /workspace/openpi --steps 1500 --init /workspace/ckpt/3999/params

pi05_mecharm_trim_lora の設定をそのまま写し, データだけを替える:
  name             pi05_mecharm_trim_lora                     -> pi05_mecharm_trim_corr_lora
  repo_id          local/mecharm_redblock_box_teach_v1_trim2  -> local/mecharm_redblock_box_teach_v1_trim2_corr_v2
  num_train_steps  4_000                                      -> --steps (決めるのはエイイチ. 既定値は置かない)
  lr_schedule      warmup 300 / peak 5e-5 / decay_steps 5_000 -> warmup 100 / peak 2.5e-5 / decay_steps 1_500
                   (decay_lr 5e-6 はそのまま. 依頼 48)
  weight_loader    pi05_base                                  -> --init base ならそのまま (一から)
                                                                 --init <params> なら trim2 の学習済みから続ける
batch 32 などほかは trim2 と同じ. 正規化の値は計算し直さず trim2 の値を置く (pod_prep_trim_corr.sh).
何度実行しても同じ結果 (二重に入れない). 入っている設定と --steps / --init が違うときは止まる.
"""
import argparse
import re
import sys
from pathlib import Path

NAME = "pi05_mecharm_trim_corr_lora"
DATA_TAG = "teach_v1_trim2_corr_v3"
REPO_ID = f"local/mecharm_redblock_box_{DATA_TAG}"
OLD_TAGS = ("teach_v1_trim2_corr_v1", "teach_v1_trim2_corr_v2")   # 前に入れたことのある版 (依頼 45 / 46)
MARK_A = f"    # >>> r2r2r mecharm {DATA_TAG} (train config)\n"
MARK_B = f"    # <<< r2r2r mecharm {DATA_TAG} (train config)\n"
# 学習率の予定 (依頼 48. 3999 からの続きの学習 1,500 ステップ用)
LR_REPS = [
    ("warmup_steps=300,", "warmup_steps=100,"),
    ("peak_lr=5e-5,", "peak_lr=2.5e-5,"),
    ("decay_steps=5_000,", "decay_steps=1_500,"),
]
DECAY_LR = "decay_lr=5e-6,"     # 下げきる先. trim2 と同じ (変えない)
BASE_LOADER = 'weight_loader=weight_loaders.CheckpointWeightLoader("gs://openpi-assets/checkpoints/pi05_base/params"),'


def make_block(s, steps, init):
    A = "    # >>> r2r2r mecharm teach_v1_trim2 (train config)\n"
    B = "    # <<< r2r2r mecharm teach_v1_trim2 (train config)\n"
    assert s.count(A) == 1 and s.count(B) == 1, "先に install_addon.py と add_trim_config.py を実行する"
    block = s[s.index(A):s.index(B) + len(B)]
    reps = [
        (A, MARK_A),
        (B, MARK_B),
        ('name="pi05_mecharm_trim_lora"', f'name="{NAME}"'),
        ('repo_id="local/mecharm_redblock_box_teach_v1_trim2"', f'repo_id="{REPO_ID}"'),
        ("num_train_steps=4_000,", f"num_train_steps={steps},"),
        *LR_REPS,
    ]
    if init != "base":
        reps.append((BASE_LOADER, f'weight_loader=weight_loaders.CheckpointWeightLoader("{init}"),'))
    for a, b in reps:
        assert block.count(a) == 1, f"見つからない/重複: {a!r}"
        block = block.replace(a, b)
    assert block.count(DECAY_LR) == 1, "trim2 の下げきる先 (decay_lr) が見つからない"
    return block


def main(argv=None):
    ap = argparse.ArgumentParser()
    ap.add_argument("openpi_root")
    ap.add_argument("--steps", type=int, required=True, help="学習のステップ数 (num_train_steps)")
    ap.add_argument("--init", required=True,
                    help="base = π0.5 base から一から / それ以外 = 続きから学習する params のパス "
                         "(例 /workspace/ckpt/3999/params)")
    args = ap.parse_args(argv)
    if args.steps <= 0:
        sys.exit("[ERROR] --steps は 1 以上")
    if args.init != "base" and not args.init.rstrip("/").endswith("params"):
        sys.exit(f"[ERROR] --init には checkpoint の params フォルダを渡す: {args.init}")
    cfg = Path(args.openpi_root).resolve() / "src" / "openpi" / "training" / "config.py"
    s = cfg.read_text()
    old = [t for t in OLD_TAGS if f"    # >>> r2r2r mecharm {t} (train config)\n" in s]
    if old:
        sys.exit(f"[ERROR] 前の版 ({', '.join(old)}) の {NAME} が入っている. "
                 "openpi の config.py を git checkout してから入れ直す")
    if MARK_A in s:
        have = s[s.index(MARK_A):]
        have = have[:have.index(MARK_B)]
        m = re.search(r"num_train_steps=(\d+),", have)
        same_steps = m and int(m.group(1)) == args.steps
        same_init = (BASE_LOADER in have) if args.init == "base" else (f'("{args.init}")' in have)
        # codex 推奨 (依頼 48): データ名・学習率の予定も入っているものと同じかを見る
        same_rest = (f'repo_id="{REPO_ID}"' in have and all(b in have for _, b in LR_REPS)
                     and DECAY_LR in have)
        if not same_rest:
            sys.exit("[ERROR] 入っている設定のデータ名・学習率の予定が違う. openpi の config.py を git checkout してから入れ直す")
        if not (same_steps and same_init):
            sys.exit("[ERROR] 別の --steps / --init で入っている. openpi の config.py を git checkout してから入れ直す")
        print("already installed (config.py は変更なし)")
        return 0
    block = make_block(s, args.steps, args.init)
    B = "    # <<< r2r2r mecharm teach_v1_trim2 (train config)\n"
    j = s.index(B) + len(B)
    cfg.write_text(s[:j] + block + s[j:])
    print(f"installed: {NAME} (repo_id={REPO_ID}, {args.steps} steps, init={args.init})")
    return 0


if __name__ == "__main__":
    sys.exit(main())
```

### pi05/openpi_addon/pod_prep_trim_corr.sh

```bash
#!/usr/bin/env bash
# pod_prep_trim_corr.sh — Pod で trim2 + corr_v3 の学習の準備をする (2026-10-31 依頼 46 / 48). 学習は回さない.
#
# 前提: lab_start.sh で Pod を準備してある (openpi・install_addon.py・add_trim_config.py・/workspace/ckpt/3999)
#       Mac から次の 2 つを送ってある:
#         /workspace/data/mecharm_redblock_box_teach_v1_trim2_corr_v3_raw_episodes.tar
#         /workspace/r2r2r/pi05/  (この依頼の版. add_trim_corr_config.py と convert_to_lerobot.py を使う)
#
#   bash /workspace/r2r2r/pi05/openpi_addon/pod_prep_trim_corr.sh <steps> <init>
#   例: bash ... 1500 /workspace/ckpt/3999/params
#
# すること (何度流しても同じ結果):
#   1. tar を /workspace/data/<データ名>/ に広げ, エピソードの本数を出す
#   2. openpi の config.py に pi05_mecharm_trim_corr_lora を足す (--steps / --init)
#   3. LeRobot 形式に変換 (repo_id local/<データ名>)
#   4. 正規化の値は計算し直さず, 3999 の学習で使った trim2 の値をそのまま置く (依頼 48)
#      元: 3999 のモデルの assets (lab_start.sh 3c の hf download が置く)
#        /workspace/ckpt/3999/assets/local/mecharm_redblock_box_teach_v1_trim2/norm_stats.json
#      先: openpi が学習で読む場所 (assets/<設定の名前>/<repo_id>/)
#        assets/pi05_mecharm_trim_corr_lora/local/<データ名>/norm_stats.json
#      Mac の写し (/Volumes/KIOXIA/r2r2r-data/checkpoints/pi05_mecharm_trim_lora_v1/3999/assets/...) と
#      sha256 が同じかを確かめる
#   5. 学習を始めるコマンドを出す (流さない)
set -euo pipefail

STEPS="${1:?学習のステップ数 (例 1500)}"
INIT="${2:?続きから学習する params (例 /workspace/ckpt/3999/params) / 一からなら base}"
NAME=mecharm_redblock_box_teach_v1_trim2_corr_v3
CONFIG=pi05_mecharm_trim_corr_lora
TAR=/workspace/data/${NAME}_raw_episodes.tar
DATA=/workspace/data/$NAME
OPENPI=/workspace/openpi
ADDON=/workspace/r2r2r/pi05/openpi_addon
NORM_SRC=/workspace/ckpt/3999/assets/local/mecharm_redblock_box_teach_v1_trim2/norm_stats.json
NORM_SHA256=80346837eb12ffa6e683416f0fa41a196519fa8459d1f0b666b06cd621c7f61b   # Mac の写しの sha256
NORM_DST=assets/$CONFIG/local/$NAME/norm_stats.json                           # $OPENPI からの相対

[ -f "$TAR" ] || { echo "[ERROR] tar がない: $TAR" >&2; exit 1; }
[ -f "$NORM_SRC" ] || { echo "[ERROR] trim2 の正規化の値がない: $NORM_SRC (lab_start.sh の 3c で 3999 を取る)" >&2; exit 1; }
sha_of() { sha256sum "$1" | cut -d' ' -f1; }
[ "$(sha_of "$NORM_SRC")" = "$NORM_SHA256" ] \
    || { echo "[ERROR] $NORM_SRC が 3999 の学習の値 (sha256 $NORM_SHA256) と違う" >&2; exit 1; }
if [ "$INIT" != base ] && [ ! -d "$INIT" ]; then
    echo "[ERROR] 続きから学習する params がない: $INIT" >&2; exit 1
fi
# shellcheck disable=SC1091
[ -f "$HOME/.local/bin/env" ] && source "$HOME/.local/bin/env"

echo "== 1. tar を広げる → $DATA"
# codex 必須: 前に広げたものへ上書きすると, tar を作り直して減ったエピソードやコマが残る.
# 空の一時フォルダに広げて確かめてから入れ替える (前のものは消す. 元は tar にある)
TMP="$DATA.tmp.$$"
rm -rf "$TMP"
mkdir -p "$TMP"
tar xf "$TAR" -C "$TMP"
N=$(find "$TMP/raw_episodes" -mindepth 2 -maxdepth 2 -name episode.npz | wc -l | tr -d ' ')
[ "$N" -gt 0 ] || { echo "[ERROR] tar にエピソードがない: $TAR" >&2; rm -rf "$TMP"; exit 1; }
rm -rf "$DATA"
mv "$TMP" "$DATA"
echo "   エピソード $N 本 (Mac で作ったときは 24 本)"

cd "$OPENPI"
echo "== 2. 学習設定 $CONFIG を足す (steps=$STEPS init=$INIT)"
python3 "$ADDON/add_trim_corr_config.py" "$OPENPI" --steps "$STEPS" --init "$INIT"

echo "== 3. LeRobot 形式に変換 (local/$NAME)"
uv run python /workspace/r2r2r/pi05/convert_to_lerobot.py --raw-dir "$DATA/raw_episodes" --repo-id "local/$NAME"

echo "== 4. 正規化の値は trim2 の値をそのまま置く (計算し直さない)"
mkdir -p "$(dirname "$NORM_DST")"
cp "$NORM_SRC" "$NORM_DST"
[ "$(sha_of "$NORM_DST")" = "$NORM_SHA256" ] || { echo "[ERROR] 置いた値が違う: $NORM_DST" >&2; exit 1; }
echo "   $NORM_SRC → $OPENPI/$NORM_DST (sha256 ${NORM_SHA256:0:12}…)"

echo "== 5. 準備できました. 学習はこのコマンドで始める (このスクリプトでは流さない):"
echo "   cd $OPENPI && XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py $CONFIG --exp-name=trim_corr_v3 --overwrite 2>&1 | tee /workspace/logs/train_trim_corr_v3.log"
```

### pi05/openpi_addon/hf_upload_ckpt.py

```python
#!/usr/bin/env python3
"""学習の最後のチェックポイントを Hugging Face の非公開リポジトリへ上げる (Pod で動かす. 2026-10-31 依頼 49).

lab_train.sh が学習のあとに Pod で流す:
  python3 hf_upload_ckpt.py --dir /workspace/openpi/checkpoints/<設定>/<exp>/<ステップ> --repo PixelstoMotors/<名前>

上げるもの: train_state/ 以外の全部 (params/・assets/・_CHECKPOINT_METADATA). リポジトリの一番上に置く
(lab_start.sh の 3c が hf download で /workspace/ckpt/3999 に取る 3999 と同じ形).
鍵は hf が読む ~/.cache/huggingface/token (lab_start.sh / lab_train.sh の 3b が置く). 鍵は出さない.

1. リポジトリを非公開で作る (あればそのまま). 非公開でなければ上げずに止まる
2. リポジトリにもうファイルがあれば, 上げるものと名前・バイト数が全部同じなら上げない (same). 違えば止まる
3. upload_folder で 1 回のコミットで上げる
4. リポジトリの一覧 (名前・バイト数) が手元と全部合うかを確かめる

最後の行: HFUP <結果> <説明>. 終了コード 0 = ok / same, 3 = not_private, 4 = other_content, 5 = mismatch, 6 = error
"""
import argparse
import os
import sys

SKIP_TOP = ("train_state",)
SKIP_REMOTE = (".gitattributes",)


def local_files(root):
    """train_state/ を除くファイルの (パス, バイト数) を名前順に"""
    out = []

    def err(e):
        raise e             # 読めないフォルダを黙って飛ばさない

    for d, dirs, files in os.walk(root, onerror=err):
        rel = os.path.relpath(d, root)
        if rel == ".":
            dirs[:] = [x for x in dirs if x not in SKIP_TOP]
        for f in files:
            p = os.path.normpath(os.path.join(rel, f))
            out.append((p, os.path.getsize(os.path.join(d, f))))
    return sorted(out, key=lambda x: x[0].encode())


def remote_files(api, repo):
    """リポジトリのファイルの (パス, バイト数) を名前順に (.gitattributes は数えない)"""
    out = []
    for x in api.list_repo_tree(repo, recursive=True, repo_type="model"):
        size = getattr(x, "size", None)
        if size is None or x.path in SKIP_REMOTE:      # フォルダには size がない
            continue
        out.append((x.path, int(size)))
    return sorted(out, key=lambda x: x[0].encode())


def diff_lines(a, b, n=10):
    da, db = dict(a), dict(b)
    lines = []
    for p in sorted(set(da) | set(db), key=str.encode):
        if da.get(p) != db.get(p):
            lines.append(f"  {p}: 手元 {da.get(p, 'なし')} / リポジトリ {db.get(p, 'なし')}")
    return lines[:n] + ([f"  ほか {len(lines) - n} 件"] if len(lines) > n else [])


def done(kind, msg, code):
    print(f"HFUP {kind} {msg}", flush=True)
    return code


def main(argv=None, api=None):
    ap = argparse.ArgumentParser()
    ap.add_argument("--dir", required=True, help="上げるチェックポイントのフォルダ (<ステップ>/)")
    ap.add_argument("--repo", required=True, help="Hugging Face のリポジトリ (例 PixelstoMotors/pi05-mecharm-trim-corr-lora-v1)")
    ap.add_argument("--message", default="", help="コミットの文")
    args = ap.parse_args(argv)
    if not os.path.isfile(os.path.join(args.dir, "_CHECKPOINT_METADATA")):
        return done("error", f"{args.dir} に _CHECKPOINT_METADATA がない (書き終えたチェックポイントではない)", 6)
    try:
        mine = local_files(args.dir)
    except OSError as e:
        return done("error", f"手元の一覧を作れない: {e}", 6)
    total = sum(s for _, s in mine)
    print(f"[HF    ] 上げるもの: {len(mine)} ファイル {total:,} バイト (train_state/ は上げない)", flush=True)
    try:
        if api is None:
            from huggingface_hub import HfApi
            api = HfApi()
        api.create_repo(args.repo, repo_type="model", private=True, exist_ok=True)
        if not api.model_info(args.repo).private:
            return done("not_private", f"{args.repo} が非公開になっていない. 上げずに止めた", 3)
        have = remote_files(api, args.repo)
        if have:
            if have == mine:
                return done("same", f"{args.repo} にはもう同じ中身がある ({len(mine)} ファイル). 上げ直さない", 0)
            print("\n".join(diff_lines(mine, have)), flush=True)
            return done("other_content", f"{args.repo} に別の中身がある. 上書きしないで止めた", 4)
        api.upload_folder(folder_path=args.dir, repo_id=args.repo, repo_type="model",
                          ignore_patterns=[f"{t}/**" for t in SKIP_TOP] + [f"{t}/*" for t in SKIP_TOP],
                          commit_message=args.message or f"upload {os.path.basename(os.path.normpath(args.dir))}")
        have = remote_files(api, args.repo)
    except Exception as e:      # 鍵は例外の文に入らない (hf はヘッダーの中身を出さない)
        return done("error", f"{type(e).__name__}: {str(e).splitlines()[0] if str(e) else ''}", 6)
    if have != mine:
        print("\n".join(diff_lines(mine, have)), flush=True)
        return done("mismatch", f"上げたあとのリポジトリの一覧が手元と合わない", 5)
    return done("ok", f"{args.repo} に {len(mine)} ファイル {total:,} バイトを上げ, 名前・バイト数が全部合うのを確かめた", 0)


if __name__ == "__main__":
    sys.exit(main())
```

### pi05/test_gap_fill.py

```python
#!/usr/bin/env python3
"""test_gap_fill.py — 実測角の抜けの埋め方 (build_correction_episodes --gap-fill. 依頼 46) の確かめ.

  python3 pi05/test_gap_fill.py -v

ファイルを読まない部分だけ (KIOXIA にもアームにも触らない).
"""
import sys
import unittest
from pathlib import Path

import numpy as np

_HERE = Path(__file__).resolve().parent
sys.path.insert(0, str(_HERE))

import build_correction_episodes as bce  # noqa: E402


def samples():
    """0〜1 秒は 0.1 秒おきに止まって読めている → 1.0〜2.6 秒は送信で抜け (この間に j1 が 6° 動く)
    → 2.6〜3.6 秒はまた 0.1 秒おき."""
    a = np.round(np.arange(0.0, 1.01, 0.1), 3)
    b = np.round(np.arange(2.6, 3.61, 0.1), 3)
    at = np.concatenate([a, b])
    aq = np.zeros((len(at), 6))
    aq[len(a):, 1] = 6.0
    return at, aq


class TestFill(unittest.TestCase):
    def test_linear_is_interp(self):
        at, aq = samples()
        t = np.arange(0.0, 3.6, 0.1)
        q, gaps = bce.fill_motion_gaps(t, at, aq, mode="linear")
        self.assertTrue(np.allclose(q, np.stack([np.interp(t, at, aq[:, k]) for k in range(6)], axis=1)))
        self.assertEqual(len(gaps), 1)

    def test_speed20_moves_then_holds(self):
        at, aq = samples()
        t = np.arange(0.0, 3.6, 0.1)
        q, gaps = bce.fill_motion_gaps(t, at, aq, mode="speed20")
        self.assertAlmostEqual(gaps[0]["move_sec"], 6.0 / bce.SPEED20_DEG_PER_SEC)
        steps = np.abs(np.diff(q[:, 1]))
        self.assertLessEqual(steps.max(), bce.SPEED20_DEG_PER_SEC * 0.1 + 1e-6)   # 1 コマ 3° まで
        i = np.flatnonzero(t >= 1.25)[0]
        self.assertAlmostEqual(q[i, 1], 6.0)                                      # 0.2 秒で着いて止まる
        self.assertTrue(np.allclose(q[t <= 1.0], 0.0))                            # 抜けの前は実測のまま
        self.assertTrue(np.allclose(q[t >= 2.6, 1], 6.0))                            # 抜けのあとも実測のまま
        self.assertTrue(np.allclose(q[:, [0, 2, 3, 4, 5]], 0.0))                  # 動かない関節は動かさない

    def test_speed20_long_move_uses_whole_gap(self):
        at, aq = samples()
        aq[aq[:, 1] > 0, 1] = 90.0                     # 1.6 秒では速度 20 で着かない動き
        t = np.arange(0.0, 3.6, 0.1)
        q1, _ = bce.fill_motion_gaps(t, at, aq, mode="speed20")
        q0, _ = bce.fill_motion_gaps(t, at, aq, mode="linear")
        self.assertTrue(np.allclose(q1, q0))

    def test_unknown_mode(self):
        at, aq = samples()
        with self.assertRaises(ValueError):
            bce.fill_motion_gaps(np.arange(0, 1, 0.1), at, aq, mode="spline")


class TestMatch(unittest.TestCase):
    def test_match_correction_and_chunk(self):
        q0, q1, q2, q3 = (np.zeros(6), np.r_[0, 6, 0, 0, 0, 0.], np.r_[0, 12, 0, 0, 0, 0.],
                          np.r_[2, 12, 0, 0, 0, 0.])
        gaps = [{"ta": 1.0, "tb": 2.6, "move_deg": 6.0, "qb": q1},
                {"ta": 2.7, "tb": 4.3, "move_deg": 6.0, "qb": q2},
                {"ta": 10.0, "tb": 11.6, "move_deg": 2.0, "qb": q3},
                {"ta": 20.0, "tb": 23.6, "move_deg": 0.0, "qb": q3}]     # 爪 (動いていない)
        log = [{"chunk": 0, "t_exec_start": 0.9, "t_exec_end": 4.5,
                "sent_targets": [[0, 6.5, 0, 0, 0, 0], [0, 12, 0, 0, 0, 0]]},
               {"type": "correction", "action": "move", "sent": True, "t": 10.02, "after": [2, 12, 0, 0, 0, 0]},
               {"type": "correction", "action": "accept"}]
        m = bce.match_gaps_to_sends(gaps, log)
        self.assertEqual(m["motion_gaps"], 3)
        self.assertEqual(m["matched_chunk"], 2)
        self.assertEqual(m["matched_correction"], 1)
        self.assertEqual(m["unmatched"], 0)
        self.assertEqual(m["max_arrival_err_deg"], 0.5)

    def test_ambiguous_correction_not_paired(self):
        """codex 推奨: 補正の時刻が 2 つの抜けの候補に入るときは組にしない (差の集計から外す)."""
        gaps = [{"ta": 1.0, "tb": 2.6, "move_deg": 6.0, "qb": np.zeros(6)},
                {"ta": 2.7, "tb": 4.3, "move_deg": 6.0, "qb": np.ones(6) * 9}]
        log = [{"type": "correction", "action": "move", "sent": True, "t": 2.5, "after": [0] * 6}]
        m = bce.match_gaps_to_sends(gaps, log)
        self.assertEqual(m["matched_correction"], 0)
        self.assertEqual(m["ambiguous"], 1)
        self.assertIsNone(m["max_arrival_err_deg"])

    def test_chunk_count_mismatch(self):
        gaps = [{"ta": 1.0, "tb": 2.6, "move_deg": 6.0, "qb": np.zeros(6)}]
        log = [{"chunk": 0, "t_exec_start": 0.9, "t_exec_end": 4.5, "sent_targets": [[0] * 6, [0] * 6]}]
        m = bce.match_gaps_to_sends(gaps, log)
        self.assertEqual(m["chunk_count_mismatch"], 1)
        self.assertEqual(m["unmatched"], 1)


if __name__ == "__main__":
    unittest.main()
```

### pi05/test_recorder_rpc.py

```python
#!/usr/bin/env python3
"""test_recorder_rpc.py — 記録の角度の抜け (依頼 46 B) を偽の daemon で確かめる (アームなし. 2026-10-31).

  python3 pi05/test_recorder_rpc.py          # 全部
  python3 pi05/test_recorder_rpc.py -v

偽の daemon は本物 (mecharm_daemon.py) と同じく 1 本のつながりを 1 件ずつ処理する.
send_angles を受けると, 腕を 速度 20 の速さ (いちばん大きく動く関節 30°/秒) で目標へ動かし始め,
送ったあとの読み直しの分 (READBACK_SEC) 待ってから返事をする. get_angles は 35ms で今の角度を返す.
本体の側は run_policy_client.py の中継点と同じ順 (read_angles → _send_and_wait_arrival → read_angles) で送る.

確かめること:
  - 記録をつけても daemon に届く指令 (cmd・目標・速度・wait) の並びは変わらない
  - send_angles 行 (始めた時刻・目標・やりとりの長さ) と, 本体が読んだ角度の actual 行 (note=main) が残る
  - 動いている間の実測角の間隔 (読み直し 1.6 秒の daemon / 読み直しのない daemon の比較を表で出す)
KIOXIA にもアームにも触らない (一時フォルダと 127.0.0.1 だけ).
"""
import csv
import io
import json
import socket
import sys
import tempfile
import threading
import time
import unittest
from pathlib import Path
from unittest import mock

import numpy as np

_HERE = Path(__file__).resolve().parent
sys.path.insert(0, str(_HERE))

import run_policy_client as rpc  # noqa: E402
import policy_recorder as pr  # noqa: E402
import visual_servo_pick as vsp  # noqa: E402

SPEED_DPS = 30.0
GET_SEC = 0.035
START = [0.0, 10.0, 10.0, 0.0, -10.0, -30.0]
VIAS = [[2.0, 16.0, 14.0, -0.5, -18.0, -29.5],
        [4.0, 22.0, 18.0, -1.0, -26.0, -29.0],
        [6.0, 28.0, 22.0, -1.5, -34.0, -28.5]]


class FakeDaemon:
    """1 本のつながりを 1 件ずつ処理する偽の daemon (腕の動きは時刻で決める)."""

    def __init__(self, readback_sec):
        self.readback_sec = readback_sec
        self.cmds = []
        self.pose0 = np.array(START, dtype=float)
        self.goal = self.pose0.copy()
        self.t_move = 0.0
        self.srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.srv.bind(("127.0.0.1", 0))
        self.srv.listen(1)
        self.port = self.srv.getsockname()[1]
        self.stop = False
        self.th = threading.Thread(target=self._serve, daemon=True)
        self.th.start()

    def pose(self, now=None):
        now = time.time() if now is None else now
        d = float(np.max(np.abs(self.goal - self.pose0)))
        if d <= 0:
            return self.goal.copy()
        f = min(1.0, (now - self.t_move) * SPEED_DPS / d)
        return self.pose0 + f * (self.goal - self.pose0)

    def _handle(self, c):
        cmd = c.get("cmd")
        if cmd == "ping":
            return {"ok": True}
        self.cmds.append({k: c[k] for k in sorted(c)})
        if cmd == "get_angles":
            time.sleep(GET_SEC)
            return {"ok": True, "angles": [round(float(v), 2) for v in self.pose()]}
        if cmd == "send_angles":
            self.pose0 = self.pose()
            self.goal = np.array(c["angles"], dtype=float)
            self.t_move = time.time()
            time.sleep(float(c.get("wait", 0)) + self.readback_sec)   # 送ったあとの読み直しの分
            return {"ok": True, "result": 1, "elapsed_ms": 10.0}
        return {"ok": False, "error": f"unknown cmd: {cmd}"}

    def _serve(self):
        while not self.stop:
            try:
                cs, _ = self.srv.accept()
            except OSError:
                return
            buf = b""
            with cs:
                while not self.stop:
                    data = cs.recv(4096)
                    if not data:
                        break
                    buf += data
                    while b"\n" in buf:
                        line, buf = buf.split(b"\n", 1)
                        resp = self._handle(json.loads(line))
                        cs.sendall((json.dumps(resp) + "\n").encode())

    def close(self):
        self.stop = True
        try:
            self.srv.close()
        except Exception:
            pass


class FakeCap:
    def read(self):
        time.sleep(1 / 30)
        return True, np.full((72, 128, 3), 100, np.uint8)


def run_vias(readback_sec, record):
    """偽の daemon に中継点を 3 つ送る. 戻り値: (daemon に届いた指令, states.csv の行, 動いた窓)."""
    d = FakeDaemon(readback_sec)
    vsp.close_daemon_socket()
    pr.install_daemon_lock()
    windows = []
    with tempfile.TemporaryDirectory() as td, \
            mock.patch.object(vsp, "DAEMON_HOST", "127.0.0.1"), mock.patch.object(vsp, "DAEMON_PORT", d.port), \
            mock.patch("sys.stdout", new=io.StringIO()):
        rec = None
        if record:
            rec = pr.PolicyRecorder(Path(td), FakeCap(), rpc.read_angles_once, lambda f: (f, f),
                                    angles_ok=rpc.wr._is_valid_angles)
            rec.start()
        time.sleep(0.5)
        for i, v in enumerate(VIAS):
            qa = rpc.read_angles()
            t_send = time.time()
            ok, _ = rpc._send_and_wait_arrival(list(v), f"via{i}", 3.0, send_wait_sec=rpc.SEND_WAIT)
            assert ok
            dist = float(np.max(np.abs(np.asarray(v) - qa)))
            windows.append((t_send, t_send + dist / SPEED_DPS))
            rpc.read_angles()
        time.sleep(0.5)
        rows = []
        if rec is not None:
            rec.stop()
            with (Path(td) / "recording" / "states.csv").open(newline="") as f:
                rows = list(csv.DictReader(f))
    vsp.close_daemon_socket()
    d.close()
    return d.cmds, rows, windows


def motion_intervals(rows, windows, include_main):
    """動いている窓にかかる, 続けて残った実測角の間隔 (秒) の最大と, 窓の中に残った実測角の数.
    窓の始まりは send_angles 行の時刻 (daemon へ送り始めた時刻) にそろえる."""
    sends = [float(r["ts"]) for r in rows if r["event_type"] == "send_angles"]
    if len(sends) == len(windows):
        windows = [(s, s + (b - a)) for s, (a, b) in zip(sends, windows)]
    ts = sorted(float(r["ts"]) for r in rows if r["event_type"] == "actual"
                and (include_main or r["note"] != "main"))
    ts = np.array(ts)
    worst, inside = 0.0, 0
    for a, b in windows:
        inside += int(((ts > a) & (ts < b)).sum())
        k0 = max(0, int(np.searchsorted(ts, a)) - 1)
        k1 = min(len(ts) - 1, int(np.searchsorted(ts, b)))
        if k1 > k0:
            worst = max(worst, float(np.max(np.diff(ts[k0:k1 + 1]))))
    return worst, inside


def _strip_gets(cmds):
    return [c for c in cmds if c["cmd"] != "get_angles"]


class TestRecorderRpc(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.res = {rb: run_vias(rb, True) for rb in (1.6, 0.0)}
        cls.plain = run_vias(1.6, False)

    def test_commands_unchanged(self):
        """記録をつけても daemon に届く送信の並び (目標・速度・wait) は記録なしと同じ."""
        with_rec = _strip_gets(self.res[1.6][0])
        without = _strip_gets(self.plain[0])
        self.assertEqual(with_rec, without)
        self.assertEqual(len(with_rec), len(VIAS))
        for c, v in zip(with_rec, VIAS):
            self.assertEqual(c["angles"], v)
            self.assertEqual(c["speed"], rpc.SPEED)
            self.assertEqual(c["wait"], rpc.SEND_WAIT)

    def test_send_rows_and_main_reads(self):
        cmds, rows, _ = self.res[1.6]
        sends = [r for r in rows if r["event_type"] == "send_angles"]
        self.assertEqual(len(sends), len(VIAS))
        for r, v in zip(sends, VIAS):
            self.assertEqual([float(r[f"j{k}"]) for k in range(6)], v)
            self.assertEqual(r["ts"], r["ts_send"])
            rpc_sec = float(r["note"].split("rpc_sec=")[1].split()[0])
            self.assertGreater(rpc_sec, 1.5)          # 読み直しの間, つながりがふさがる
        main = [r for r in rows if r["event_type"] == "actual" and r["note"] == "main"]
        self.assertGreater(len(main), 0)
        # 記録スレッドの分を二重に残さない: main 行 + 記録スレッドの行 = daemon に届いた get_angles の数
        own = [r for r in rows if r["event_type"] == "actual" and r["note"] != "main"]
        self.assertEqual(len(main) + len(own), sum(1 for c in cmds if c["cmd"] == "get_angles"))

    def test_report_intervals(self):
        """動いている間の実測角の間隔を出す (表は標準エラーへ). 読み直し 1.6 秒では抜けが残ることも確かめる."""
        out = []
        for rb in (1.6, 0.0):
            _, rows, win = self.res[rb]
            for inc in (False, True):
                w, n = motion_intervals(rows, win, inc)
                out.append((rb, inc, w, n))
        lines = ["", "daemon の送ったあとの読み直し | 本体の読みも残す | 動いている間の最大の間隔 | 動いている間に残った数"]
        for rb, inc, w, n in out:
            lines.append(f"  {rb:.1f} 秒 | {'する' if inc else 'しない (前)'} | {w:.2f} 秒 | {n}")
        print("\n".join(lines), file=sys.stderr)
        w16 = [w for rb, inc, w, n in out if rb == 1.6]
        self.assertTrue(all(w > 1.0 for w in w16))   # 読み直しの間はだれも読めない
        w0 = [w for rb, inc, w, n in out if rb == 0.0 and inc]
        self.assertLess(w0[0], 0.3)                   # 読み直しがなければ 10Hz 近くで残る


class TestObserverHook(unittest.TestCase):
    """install_daemon_lock の観察口: 返事・例外をそのまま返し, 入れ子の ping は渡さず, 観察の失敗で止まらない."""

    def _install(self, fake):
        saved = vsp._daemon_request
        self.addCleanup(setattr, vsp, "_daemon_request", saved)
        with mock.patch.object(vsp, "_daemon_request", fake):
            pr.install_daemon_lock()
            wrapped = vsp._daemon_request
        return wrapped

    def test_passthrough_nested_and_errors(self):
        seen = []

        def fake(cmd_obj, timeout_override=None):
            if cmd_obj["cmd"] == "get_angles":
                vsp._daemon_request({"cmd": "ping"})     # 再接続の中の ping (入れ子)
                return {"ok": True, "angles": [1, 2, 3, 4, 5, 6]}
            if cmd_obj["cmd"] == "boom":
                raise RuntimeError("daemon timeout")
            return {"ok": True}
        wrapped = self._install(fake)
        with mock.patch.object(vsp, "_daemon_request", wrapped):
            def obs(c, r, t0, t1, e):
                seen.append((c["cmd"], r, e))
            def bad(*a):
                raise ValueError("observer bug")
            pr.add_rpc_observer(bad)
            pr.add_rpc_observer(obs)
            self.addCleanup(pr.remove_rpc_observer, bad)
            self.addCleanup(pr.remove_rpc_observer, obs)
            r = vsp._daemon_request({"cmd": "get_angles"}, timeout_override=1.0)
            self.assertEqual(r["angles"], [1, 2, 3, 4, 5, 6])
            with self.assertRaises(RuntimeError) as cm:
                vsp._daemon_request({"cmd": "boom"})
            self.assertEqual(str(cm.exception), "daemon timeout")
        self.assertEqual([x[0] for x in seen], ["get_angles", "boom"])   # 入れ子の ping は渡さない
        self.assertIsInstance(seen[1][2], RuntimeError)


if __name__ == "__main__":
    unittest.main()
```

### pi05/test_merge_and_config.py

```python
#!/usr/bin/env python3
"""test_merge_and_config.py — 依頼 45 で足した部分の確かめ (KIOXIA にも Pod にも触らない. 一時フォルダだけ).

  python3 pi05/test_merge_and_config.py

中身:
  - merge_raw_episodes: 2 つの raw_episodes を写してまとめる / 元は変えない / ._* を写さない・tar に入れない /
    形が合わない・名前が重なる・出力先がある ときは止まる
  - ._*.jpg (exFAT の AppleDouble) があっても check_compat が画像の枚数を数え違えない
  - _rmtree: 本体と一緒に ._ が消えても止まらない
  - add_trim_corr_config: trim2 の設定を写してデータ・ステップ数・初期の重み・学習率の予定だけ替える / 二重に入れない /
    違う引数での入れ直しは止まる / 前の版 (corr_v1・corr_v2) が入っていたら止まる
  - pod_prep_trim_corr.sh: 正規化の値を計算し直さず trim2 の値を置く (依頼 48)
"""
import ast
import json
import subprocess
import sys
import tarfile
import tempfile
import unittest
from pathlib import Path
from unittest import mock

import cv2
import numpy as np

_HERE = Path(__file__).resolve().parent
sys.path.insert(0, str(_HERE))
sys.path.insert(0, str(_HERE / "openpi_addon"))

import add_trim_corr_config as atc  # noqa: E402
import build_correction_episodes as bce  # noqa: E402
import merge_raw_episodes as mre  # noqa: E402


def write_ep(d, n=5, source="teach", size=(384, 216), appledouble=False):
    (d / "frames").mkdir(parents=True)
    for i in range(n):
        cv2.imwrite(str(d / "frames" / f"{i:06d}.jpg"), np.full((size[1], size[0], 3), 90, np.uint8))
        if appledouble:
            (d / "frames" / f"._{i:06d}.jpg").write_bytes(b"\x00\x05\x16\x07")
    st = np.zeros((n, 7), np.float32)
    np.savez_compressed(d / "episode.npz", t=np.arange(n) / 10.0, t_orig=np.arange(n) / 10.0,
                        state=st, actions=st)
    meta = {"task": "put the red block in the white box", "fps": 10, "steps": n, "image_size": list(size),
            "state_dim": 7, "state_names": ["j0", "j1", "j2", "j3", "j4", "j5", "gripper"], "source": source}
    if source.startswith("pi05_policy"):
        meta.update(correct_steps=2, model_steps=n - 2)
    (d / "meta.json").write_text(json.dumps(meta))
    if appledouble:
        (d / "._episode.npz").write_bytes(b"\x00\x05\x16\x07")


def run_merge(root, *extra):
    argv = ["merge_raw_episodes.py", "--data-root", str(root), "--src", "a", "--src", "b",
            "--dataset", "ab", *extra]
    with mock.patch.object(sys, "argv", argv):
        return mre.main()


class TestMerge(unittest.TestCase):
    def setUp(self):
        self._td = tempfile.TemporaryDirectory()
        self.root = Path(self._td.name)
        ds = self.root / "datasets"
        write_ep(ds / "a" / "raw_episodes" / "run_1", n=5)
        write_ep(ds / "a" / "raw_episodes" / "run_2", n=6)
        write_ep(ds / "b" / "raw_episodes" / "pi05_1", n=4, source="pi05_policy (model + correct)",
                 appledouble=True)

    def tearDown(self):
        self._td.cleanup()

    def test_merge_copies_and_counts(self):
        before = sorted(p.relative_to(self.root) for p in (self.root / "datasets").rglob("*"))
        self.assertEqual(run_merge(self.root, "--tar"), 0)
        out = self.root / "datasets" / "ab"
        self.assertEqual(sorted(p.name for p in (out / "raw_episodes").iterdir()), ["pi05_1", "run_1", "run_2"])
        self.assertEqual(list((out / "raw_episodes").rglob("._*")), [])          # AppleDouble は写さない
        idx = json.loads((out / "index.json").read_text())
        self.assertEqual((idx["total_episodes"], idx["total_steps"]), (3, 15))
        self.assertEqual(idx["sources"]["b"]["correct_steps"], 2)
        self.assertEqual(idx["repo_id"], "local/ab")
        self.assertTrue((out / "code" / "merge_raw_episodes.py").exists())        # データと対のコード
        with tarfile.open(out / "ab_raw_episodes.tar") as t:
            names = t.getnames()
        self.assertFalse([n for n in names if Path(n).name.startswith("._")])
        self.assertEqual(sum(n.endswith(".jpg") for n in names), 15)
        # 元は変わらない (増えたのは ab/ の下だけ)
        after = sorted(p.relative_to(self.root) for p in (self.root / "datasets").rglob("*")
                       if not str(p.relative_to(self.root / "datasets")).startswith("ab"))
        self.assertEqual(before, after)

    def test_refuses_existing_and_duplicates(self):
        self.assertEqual(run_merge(self.root), 0)
        with self.assertRaises(SystemExit):
            run_merge(self.root)                                                  # もうある
        self.assertEqual(run_merge(self.root, "--force"), 0)
        write_ep(self.root / "datasets" / "b" / "raw_episodes" / "run_1", n=3)    # 名前が重なる
        with self.assertRaises(SystemExit):
            run_merge(self.root, "--force")

    def test_refuses_mismatch_without_writing(self):
        write_ep(self.root / "datasets" / "b" / "raw_episodes" / "pi05_2", n=3, size=(320, 180))
        with mock.patch("sys.stdout"):
            self.assertEqual(run_merge(self.root), 1)
        self.assertFalse((self.root / "datasets" / "ab").exists())

    def test_check_compat_ignores_appledouble(self):
        ds = self.root / "datasets"
        self.assertEqual(bce.check_compat(ds / "b" / "raw_episodes", ds / "a" / "raw_episodes"), [])

    def test_rmtree_tolerates_vanished_files(self):
        d = self.root / "x"
        (d / "sub").mkdir(parents=True)
        (d / "sub" / "f").write_text("1")
        real_unlink = __import__("os").unlink

        def unlink(path, *a, **k):     # 1 回目で ._ 相当の 2 つ目も消えたことにする
            real_unlink(path, *a, **k)
            raise FileNotFoundError(path)
        with mock.patch("os.unlink", unlink):
            bce._rmtree(d)
        self.assertFalse(d.exists())


# install_addon.py の TRAIN を元に add_trim_config.py (lab/Log11/pod) と同じ置き換えをした trim2 の設定
def fake_config(root):
    src = (_HERE / "openpi_addon" / "install_addon.py").read_text()
    train = src[src.index("TRAIN = f'''") + len("TRAIN = f'''"):]
    train = train[:train.index("'''")].replace("{MARK}", "# >>> r2r2r mecharm addon")
    trim = (train.replace("# >>> r2r2r mecharm addon (train config)", "# >>> r2r2r mecharm teach_v1_trim2 (train config)")
                 .replace("# <<< r2r2r mecharm addon (train config)", "# <<< r2r2r mecharm teach_v1_trim2 (train config)")
                 .replace('name="pi05_mecharm_lora"', 'name="pi05_mecharm_trim_lora"')
                 .replace('repo_id="local/mecharm_redblock_box_v1"',
                          'repo_id="local/mecharm_redblock_box_teach_v1_trim2"')
                 .replace("num_train_steps=5_000,", "num_train_steps=4_000,"))
    cfg = root / "src" / "openpi" / "training" / "config.py"
    cfg.parent.mkdir(parents=True)
    cfg.write_text("_CONFIGS = [\n" + train + trim + "]\n")
    return cfg


def configs(cfg):
    """config.py の TrainConfig(name=...) ごとの キーワード引数 (文字列のまま)."""
    tree = ast.parse(cfg.read_text())
    out = {}
    for node in ast.walk(tree):
        if isinstance(node, ast.Call) and getattr(node.func, "id", "") == "TrainConfig":
            kw = {k.arg: ast.unparse(k.value) for k in node.keywords}
            out[ast.literal_eval(kw["name"])] = kw
    return out


class TestConfig(unittest.TestCase):
    def test_base_and_resume(self):
        for init, loader in (("base", "gs://openpi-assets/checkpoints/pi05_base/params"),
                             ("/workspace/ckpt/3999/params", "/workspace/ckpt/3999/params")):
            with tempfile.TemporaryDirectory() as td, mock.patch("sys.stdout"):
                cfg = fake_config(Path(td))
                self.assertEqual(atc.main([td, "--steps", "1500", "--init", init]), 0)
                c = configs(cfg)
                self.assertEqual(sorted(c), ["pi05_mecharm_lora", "pi05_mecharm_trim_corr_lora",
                                             "pi05_mecharm_trim_lora"])
                new, trim = c["pi05_mecharm_trim_corr_lora"], c["pi05_mecharm_trim_lora"]
                self.assertIn("local/mecharm_redblock_box_teach_v1_trim2_corr_v3", new["data"])   # 依頼 48
                self.assertEqual(new["num_train_steps"], "1500")
                self.assertIn(loader, new["weight_loader"])
                # 依頼 48: 学習率の予定は続きから用に弱める. 下げきる先は trim2 と同じ
                lr = {k.arg: ast.literal_eval(k.value) for k in ast.parse(new["lr_schedule"]).body[0].value.keywords}
                lr_trim = {k.arg: ast.literal_eval(k.value)
                           for k in ast.parse(trim["lr_schedule"]).body[0].value.keywords}
                self.assertEqual(lr, {"warmup_steps": 100, "peak_lr": 2.5e-5, "decay_steps": 1500,
                                      "decay_lr": lr_trim["decay_lr"]})
                self.assertEqual(lr_trim, {"warmup_steps": 300, "peak_lr": 5e-5, "decay_steps": 5000,
                                           "decay_lr": 5e-6})                  # trim2 の設定は変えない
                # ほかは trim2 と同じ
                for k in set(trim) - {"name", "data", "num_train_steps", "weight_loader", "lr_schedule"}:
                    self.assertEqual(new[k], trim[k], k)
                self.assertEqual(trim["num_train_steps"], "4000")              # trim2 の設定は変えない
                text = cfg.read_text()
                self.assertEqual(atc.main([td, "--steps", "1500", "--init", init]), 0)   # 二重に入れない
                self.assertEqual(cfg.read_text(), text)
                with self.assertRaises(SystemExit):
                    atc.main([td, "--steps", "4000", "--init", init])          # 違う引数では止まる
                # データ名・学習率の予定が違うものは止まる (codex r2 推奨: 5 つとも. 止まったときは書かない)
                for x, y in (("_trim2_corr_v3\"", "_trim2_corr_vX\""), ("warmup_steps=100,", "warmup_steps=300,"),
                             ("peak_lr=2.5e-5,", "peak_lr=5e-5,"), ("decay_steps=1_500,", "decay_steps=5_000,"),
                             ("decay_lr=5e-6,\n        ),\n        num_train_steps=1500",
                              "decay_lr=1e-6,\n        ),\n        num_train_steps=1500")):
                    bad = text.replace(x, y, 1) if x.startswith("decay_lr") else \
                        text[:text.index("pi05_mecharm_trim_corr_lora")] + \
                        text[text.index("pi05_mecharm_trim_corr_lora"):].replace(x, y, 1)
                    self.assertNotEqual(bad, text, x)
                    cfg.write_text(bad)
                    with self.assertRaises(SystemExit):
                        atc.main([td, "--steps", "1500", "--init", init])
                    self.assertEqual(cfg.read_text(), bad)

    def test_refuses_old_corr_blocks(self):
        """依頼 46 / 48: 前の版 (corr_v1・corr_v2) の設定が入っていたら足さずに止まる (同じ名前が 2 つにならない)."""
        for tag in ("teach_v1_trim2_corr_v1", "teach_v1_trim2_corr_v2"):
            with tempfile.TemporaryDirectory() as td, mock.patch("sys.stdout"):
                cfg = fake_config(Path(td))
                s = cfg.read_text()
                cfg.write_text(s.replace("]\n", f"    # >>> r2r2r mecharm {tag} (train config)\n"
                                                f"    # <<< r2r2r mecharm {tag} (train config)\n]\n"))
                before = cfg.read_text()
                with self.assertRaises(SystemExit):
                    atc.main([td, "--steps", "1500", "--init", "/workspace/ckpt/3999/params"])
                self.assertEqual(cfg.read_text(), before)

    def test_requires_trim_first(self):
        with tempfile.TemporaryDirectory() as td:
            cfg = Path(td) / "src" / "openpi" / "training" / "config.py"
            cfg.parent.mkdir(parents=True)
            cfg.write_text("_CONFIGS = []\n")
            with self.assertRaises(AssertionError):
                atc.main([td, "--steps", "10", "--init", "base"])

    def test_cli_requires_steps_and_init(self):
        r = subprocess.run([sys.executable, str(_HERE / "openpi_addon" / "add_trim_corr_config.py"), "/tmp"],
                           capture_output=True, text=True)
        self.assertNotEqual(r.returncode, 0)


class TestPodPrep(unittest.TestCase):
    """依頼 48: pod_prep_trim_corr.sh は正規化の値を計算し直さず, 3999 の学習の trim2 の値を置く."""
    SH = _HERE / "openpi_addon" / "pod_prep_trim_corr.sh"
    MAC_NORM = Path("/Volumes/KIOXIA/r2r2r-data/checkpoints/pi05_mecharm_trim_lora_v1/3999/assets/local/"
                    "mecharm_redblock_box_teach_v1_trim2/norm_stats.json")

    def lines(self):
        return [ln for ln in self.SH.read_text().splitlines() if not ln.lstrip().startswith("#")]

    def test_no_compute_norm_stats(self):
        self.assertFalse(any("compute_norm_stats" in ln for ln in self.lines()))

    def test_places_trim2_norm(self):
        code = "\n".join(self.lines())
        self.assertIn("NAME=mecharm_redblock_box_teach_v1_trim2_corr_v3", code)
        self.assertIn("NORM_SRC=/workspace/ckpt/3999/assets/local/mecharm_redblock_box_teach_v1_trim2/norm_stats.json",
                      code)
        self.assertIn("NORM_DST=assets/$CONFIG/local/$NAME/norm_stats.json", code)   # openpi が学習で読む場所
        self.assertIn('cp "$NORM_SRC" "$NORM_DST"', code)

    def test_sha_matches_mac_copy(self):
        import hashlib
        import re
        m = re.search(r"^NORM_SHA256=([0-9a-f]{64})", self.SH.read_text(), re.M)
        self.assertIsNotNone(m)
        if not self.MAC_NORM.exists():
            self.skipTest("KIOXIA がない")
        self.assertEqual(hashlib.sha256(self.MAC_NORM.read_bytes()).hexdigest(), m.group(1))

    def test_bash_syntax(self):
        self.assertEqual(subprocess.run(["bash", "-n", str(self.SH)]).returncode, 0)


if __name__ == "__main__":
    unittest.main()
```

### pi05/test_trim_hold.py

```python
#!/usr/bin/env python3
"""test_trim_hold.py — 着いたあとの止まりの詰め方 (build_correction_episodes --trim-hold. 依頼 48) の確かめ.

  python3 pi05/test_trim_hold.py -v

ファイルを読まない部分だけ (KIOXIA にもアームにも触らない).
"""
import sys
import unittest
from pathlib import Path

import numpy as np

_HERE = Path(__file__).resolve().parent
sys.path.insert(0, str(_HERE))

import build_correction_episodes as bce  # noqa: E402
import build_demo_episodes as bde  # noqa: E402


def episode(pattern):
    """pattern の 1 文字 = 1 コマ. '#' = j1 が 2° 動く / '.' = 止まる / 'g' = 爪を閉じる指令のコマ (止まったまま).
    戻り値: state, actions (= 次のコマの state. 最後は自分自身. 爪は次の指令)."""
    n = len(pattern) + 1
    s = np.zeros((n, 7))
    for i, c in enumerate(pattern):
        s[i + 1] = s[i]
        if c == "#":
            s[i + 1, 1] += 2.0
        if c == "g":
            s[i + 1, 6] = 1.0
    a = np.concatenate([s[1:], s[-1:]])
    return s, a


def idle_of(s, a):
    return (np.max(np.abs(a[:, :6] - s[:, :6]), axis=1) < bde.MID_IDLE_EPS_DEG) & (a[:, 6] == s[:, 6])


class TestHoldKeep(unittest.TestCase):
    def test_same_as_trim2_when_all_two(self):
        """残す数が全部 MID_IDLE_KEEP_STEPS なら trim2 の mid_idle_keep_mask と同じ."""
        rng = np.random.default_rng(0)
        k = bde.MID_IDLE_KEEP_STEPS
        for _ in range(300):
            n = 80
            s = np.cumsum(rng.choice([0, 0, 0, 0.1, 0.2, 1.5], size=(n, 7)), axis=0)
            s[:, 6] = np.arange(n) > rng.integers(5, 75)
            a = np.concatenate([s[1:], s[-1:]])
            modes = list(rng.choice([bce.MODE_MODEL, bce.MODE_CORRECT], size=n))
            np.testing.assert_array_equal(bce.hold_keep_mask(s, a, modes, k, k, k), bde.mid_idle_keep_mask(s, a))

    def test_model_holds_removed_correct_keeps_one(self):
        s, a = episode("##....##....##....#....#....##")
        n = len(s)
        modes = [bce.MODE_MODEL] * 14 + [bce.MODE_CORRECT] * (n - 14)
        keep = bce.hold_keep_mask(s, a, modes)
        idle = idle_of(s, a)
        regions, i = [], 0
        while i < n:
            if idle[i]:
                j = i
                while j < n and idle[j]:
                    j += 1
                regions.append((i, j))
                i = j
            else:
                i += 1
        for i, j in regions[:-1]:          # 最後の区間はエピソードの終わり (最後のコマは必ず残す)
            want = 1 if modes[i] == bce.MODE_CORRECT else 0
            self.assertEqual(int(keep[i:j].sum()), want, (i, j, modes[i]))
        self.assertTrue(keep[~idle].all())                     # 動いているコマは消さない
        self.assertTrue(keep[0] and keep[-1])

    def test_gripper_neighbors_keep_like_trim2(self):
        """爪の切り替えのすぐ前・すぐ後の止まりは trim2 と同じ先頭 2 コマ (+ 切り替えの前後 1 コマ)."""
        s, a = episode("##......g......##......##")
        modes = [bce.MODE_MODEL] * len(s)
        keep = bce.hold_keep_mask(s, a, modes)
        trim2 = bde.mid_idle_keep_mask(s, a)
        g = int(np.flatnonzero(a[:, 6] != s[:, 6])[0])     # 指令のコマ. 切り替わるのは g + 1
        np.testing.assert_array_equal(keep[:g + 9], trim2[:g + 9])     # 爪の前後は trim2 と同じ
        self.assertEqual(int(keep[2:g].sum()), bde.MID_IDLE_KEEP_STEPS)   # 直前の区間: 先頭 2
        self.assertTrue(keep[g:g + 3].all())                              # 切り替え (g + 1) の前後 1 コマ
        # 直後の区間 (g + 1 〜 g + 6) は先頭 2 コマ (g + 1, g + 2. 前後の保護と重なる) だけ
        self.assertEqual(int(keep[g + 1:g + 7].sum()), bde.MID_IDLE_KEEP_STEPS)
        # 爪から離れた止まり (model) は残さない
        far = idle_of(s, a)
        far[:g + 9] = False
        far[-1] = False
        self.assertFalse(keep[far].any())

    def test_slow_drift_not_trimmed(self):
        """0.2° ずつ動き続ける区間はずれで区切られ, model (残す数 0) でも 0.5° ごとの姿勢が残る (codex 必須)."""
        n = 30
        s = np.zeros((n, 7))
        s[:, 1] = np.arange(n) * 0.2
        a = np.concatenate([s[1:], s[-1:]])
        for mode in (bce.MODE_MODEL, bce.MODE_CORRECT):
            keep = bce.hold_keep_mask(s, a, [mode] * n)
            jump = np.abs(np.diff(s[keep, 1])).max()
            self.assertLessEqual(jump, bde.MID_IDLE_DRIFT_DEG + 0.2 + 1e-9, mode)   # 詰めても 1 コマ 0.7° まで
            self.assertGreaterEqual(int(keep.sum()), n // 3, mode)
        self.assertGreaterEqual(int(bce.hold_keep_mask(s, a, [bce.MODE_CORRECT] * n).sum()),
                                int(bce.hold_keep_mask(s, a, [bce.MODE_MODEL] * n).sum()))

    def test_select_steps_trim_hold(self):
        """select_steps(trim_hold=True) で止まりが減り, actions が「次のコマの state」のまま."""
        t = np.arange(0, 6.0, 0.1)
        q = np.zeros((len(t), 6))
        for k in range(len(t)):            # 0.5 秒ごとに 1 コマで 2° 動いて止まる
            q[k, 1] = 2.0 * (k // 5)
        g = np.where(t >= 3.0, 1.0, 0.0)
        mode_ts, modes = np.array([0.0]), [bce.MODE_MODEL]
        old = bce.select_steps(t, q, g, mode_ts, modes, [], trim_mid_idle=True)
        new = bce.select_steps(t, q, g, mode_ts, modes, [], trim_mid_idle=True, trim_hold=True)
        self.assertLess(len(new["idx"]), len(old["idx"]))
        self.assertLess(idle_of(new["state"], new["actions"]).mean(), idle_of(old["state"], old["actions"]).mean())
        np.testing.assert_array_equal(new["actions"][:-1, :6], new["state"][1:, :6])
        self.assertEqual(new["state"][-1, 1], q[-1, 1])                   # 終わりの姿勢は変わらない
        self.assertEqual(int(np.sum(np.diff(new["state"][:, 6]) != 0)), 1)   # 爪の切り替えは残る


if __name__ == "__main__":
    unittest.main()
```

### pi05/test_hf_upload_ckpt.py

```python
#!/usr/bin/env python3
"""test_hf_upload_ckpt.py — Pod で最後のチェックポイントを Hugging Face へ上げる hf_upload_ckpt.py (依頼 49) の確かめ.

  python3 pi05/test_hf_upload_ckpt.py -v

Hugging Face には触らない (HfApi を偽物にする). 一時フォルダにチェックポイントの形を作って流す.
"""
import io
import sys
import tempfile
import unittest
from contextlib import redirect_stdout
from pathlib import Path
from types import SimpleNamespace

_HERE = Path(__file__).resolve().parent
sys.path.insert(0, str(_HERE / "openpi_addon"))

import hf_upload_ckpt as hu  # noqa: E402

REPO = "PixelstoMotors/pi05-mecharm-trim-corr-lora-v1"


class FakeApi:
    """リポジトリを {パス: バイト数} で持つ偽物. upload_folder は ignore_patterns の train_state を除いて写す"""

    def __init__(self, files=None, private=True, upload_error=None, drop=None):
        self.files = dict(files or {})
        self.private = private
        self.upload_error = upload_error
        self.drop = drop            # 上げたあと, これを落とす (一覧が合わない場合)
        self.calls = []

    def create_repo(self, repo, repo_type, private, exist_ok):
        self.calls.append(("create_repo", repo, private, exist_ok))

    def model_info(self, repo):
        return SimpleNamespace(private=self.private)

    def list_repo_tree(self, repo, recursive, repo_type):
        out = [SimpleNamespace(path=".gitattributes", size=1519)]
        dirs = {p.rsplit("/", 1)[0] for p in self.files if "/" in p}
        out += [SimpleNamespace(path=d) for d in sorted(dirs)]          # フォルダには size がない
        out += [SimpleNamespace(path=p, size=s) for p, s in self.files.items()]
        return out

    def upload_folder(self, folder_path, repo_id, repo_type, ignore_patterns, commit_message):
        self.calls.append(("upload_folder", repo_id, tuple(ignore_patterns), commit_message))
        if self.upload_error:
            raise self.upload_error
        for p, s in hu.local_files(folder_path):
            self.files[p] = s
        if self.drop:
            self.files.pop(self.drop, None)


def make_ckpt(root):
    d = Path(root) / "1499"
    for p, n in [("_CHECKPOINT_METADATA", 426), ("params/_METADATA", 300), ("params/d/abc", 1000),
                 ("assets/local/x/norm_stats.json", 50), ("train_state/opt", 9999)]:
        (d / p).parent.mkdir(parents=True, exist_ok=True)
        (d / p).write_bytes(b"\0" * n)
    return d


def run(api, d):
    buf = io.StringIO()
    with redirect_stdout(buf):
        rc = hu.main(["--dir", str(d), "--repo", REPO, "--message", "m"], api=api)
    return rc, buf.getvalue().strip().splitlines()[-1]


class T(unittest.TestCase):
    def setUp(self):
        self.tmp = tempfile.TemporaryDirectory()
        self.d = make_ckpt(self.tmp.name)

    def tearDown(self):
        self.tmp.cleanup()

    def test_local_files_skip_train_state(self):
        names = [p for p, _ in hu.local_files(self.d)]
        self.assertEqual(names, ["_CHECKPOINT_METADATA", "assets/local/x/norm_stats.json", "params/_METADATA", "params/d/abc"])

    def test_ok(self):
        api = FakeApi()
        rc, last = run(api, self.d)
        self.assertEqual(rc, 0)
        self.assertTrue(last.startswith("HFUP ok "), last)
        self.assertEqual(api.calls[0], ("create_repo", REPO, True, True))     # 非公開で作る
        self.assertIn("train_state/**", api.calls[1][2])
        self.assertNotIn("train_state/opt", api.files)

    def test_not_private_stops_before_upload(self):
        api = FakeApi(private=False)
        rc, last = run(api, self.d)
        self.assertEqual((rc, last.split()[1]), (3, "not_private"))
        self.assertFalse([c for c in api.calls if c[0] == "upload_folder"])

    def test_same_content_skips(self):
        api = FakeApi(files=dict(hu.local_files(self.d)))
        rc, last = run(api, self.d)
        self.assertEqual((rc, last.split()[1]), (0, "same"))
        self.assertFalse([c for c in api.calls if c[0] == "upload_folder"])

    def test_other_content_stops(self):
        api = FakeApi(files={"params/old": 5})
        rc, last = run(api, self.d)
        self.assertEqual((rc, last.split()[1]), (4, "other_content"))
        self.assertEqual(api.files, {"params/old": 5})                       # 上書きしない

    def test_upload_error(self):
        rc, last = run(FakeApi(upload_error=RuntimeError("503 Server Error\nmore")), self.d)
        self.assertEqual((rc, last.split()[1]), (6, "error"))
        self.assertIn("503 Server Error", last)

    def test_mismatch_after_upload(self):
        rc, last = run(FakeApi(drop="params/d/abc"), self.d)
        self.assertEqual((rc, last.split()[1]), (5, "mismatch"))

    def test_unreadable_dir(self):
        locked = self.d / "params" / "locked"
        locked.mkdir()
        locked.chmod(0)
        try:
            rc, last = run(FakeApi(), self.d)
        finally:
            locked.chmod(0o755)
        self.assertEqual((rc, last.split()[1]), (6, "error"))

    def test_no_metadata(self):
        (self.d / "_CHECKPOINT_METADATA").unlink()
        rc, last = run(FakeApi(), self.d)
        self.assertEqual((rc, last.split()[1]), (6, "error"))


if __name__ == "__main__":
    unittest.main()
```


## 費用

| 何に | 借りた時間 | 費用 |
|---|---|---|
| 実機の1〜3回目の Pod（A40） | 23分25秒 | 約0.23ドル（約36円） |
| 実機の4〜8回目とつなぎ直しの Pod（A40） | 39分42秒 | 約0.39ドル（約62円） |
| 学習の Pod（A40） | 201分30秒 | 約1.98ドル（約313円） |
| 合計 | 4時間24分 | 約2.60ドル（約411円） |


## 次に実機で確かめること

依頼52 で、`lab_start.sh` に `--model corr` を足し、学習し直したモデルで推論できるようにしました（コミット eb491c5）。次の実機は、次の1行から始めます。

```
cd ~/r2r2r-scripts
./lab_start.sh --log Log18 --model corr
```

確かめることは3つです。

1. 画面に `[MODEL ] --model corr` と、サーバーの `--policy.dir=/workspace/ckpt/corr_v1_1499` が出ているか
2. つかむ前に j0 を直す回数と量が、前のモデル（成功5回で毎回 +2〜4°）より減るか
3. つかんだあとに j2 を持ち上げる直しが、減るか

直す回数が減らなければ、学習のしかた（一から学習する・ステップ数を増やす）か、データの作り方（動いている間の角度を取れるように常駐プログラムを直す）を見直します。
