2026年10月1日 のトップ記事 23:00取得

  1. #1

    Launch HN: Magnitude (YC S25) – エージェント向けの自己最適化推論エンジン

    AIエージェントの推論コストを削減する自己最適化エンジンが注目されている。マグニチュードはエージェントがタスクを繰り返す中で自ら推論を効率化し、長期的な運用コストを下げる。日本のスタートアップもAIエージェントの性能とコストバランスに注目が集まりつつある。

    以下は、Hacker News のコメントから作成した要約です。

    AIコメント要約(全文)

    以下は、Hacker News のコメントから作成した要約です。 **主な議論点** コミュニティの議論は、主に「Magnitude」が既存の推論エンジン(特にllama.cpp) compared でどの程度優れているか、およびその実用性の観点から进行了。具体的には、ローカル環境での性能最適化、メモリ(VRAM/RAM)管理、 large context size におけるパフォーマンス劣化、そして特定の硬件(AMD GPU、Strix Halo)への対応の有無が焦点となった。 **賛否両論** 賛成派は、エージェント用途における推論とツール呼び出しの統合や、温度制御などのランタイム設定の柔軟性を評価した。しかし、反対派は、llama.cppやOllama、llama-cpp-pythonなど、より成熟且つ最適化されたエンジンが既に存在することを指摘し、「llama.cppより速い」という目標は低基準であると批判した。特に、最適なSpeculative Decodingの使用、KVキャッシュのVRAM使用量、 large context における性能低下という3つの「失敗モード」が既存エンジンの課題として挙げられ、Magnitudeがこれらをどう解決するかが問われる。 **注目コメント** 特に洞察のあるコメントとして、以下の点が挙げられる。 1. **実務的なpain point**: 外部ポリシーによるスロットリング(温度制御)や、ツール呼び出しのオーバーヘッド(`ls`に数十秒かかるなど)が実際の作業のボトルネックになっているという具体的な 使用例の報告。 2. **自動最適化への期待**: ユーザーの硬件やコンテキストサイズに応じて最適なモデルバリアントを自動的に選択する機能への関心。これは、現在の手動設定の煩雑さを解消する重要なポイントである。 3. **開発者による自己最適化**: コメント執筆者が自身のllama.cppを自動更新・最適化するエージェントを構築しているという、Magnitudeのコンセプトと重なる高度な使用例の紹介。これは、自己最適化型エンジンの潜在能力を示す一例である。

  2. #2

    コミットメッセージを思考ツールとして使う

    コミットメッセージを「思考の道具」として使うアプローチは、コードだけでなく開発者の思考そのものを記録する試みだ。複雑な設計判断を言葉で整理することで、チーム内の知識共有が深まる。日本の開発文化でalso 'ドキュメント文化'が浸透れば、この方法も自然に受け入れられそうだ。

    「コミットメッセージをコードより先に書くと考えを整理できる」という点が議論の中心で、書くことは思考そのものだと指摘される。

    AIコメント要約(全文)

    「コミットメッセージをコードより先に書くと考えを整理できる」という点が議論の中心で、書くことは思考そのものだと指摘される。一方、説明をドキュメントやADRに置くべきか迷う声もあり、ファイルは普遍的で目に付きやすいが、Git歴史は編集不可かつ特定コミットに紐付く利点があるとされる。そこで注目されたのはgit‑notesの活用で、コミットに隣接しブランチ構造を保ちながら歴史を汚さず注釈を付けられる手法として評価された。さらに、異なるLLMファミリを使ってコミットをレビューしメッセージを生成し、不一致時に手動レビューを挟むワークフローも紹介され、自動支援と人間の判断のバランスが話題となった。

  3. #3

    ブルームバーグターミナルの歴史について

    ブルームバーグターミナルは金融データの専用端末として数十年進化を遂げた。今日のAIやクラウドが金融情報に革命を起こす中、その歴史は「専閲門」と「オープン」の対照を浮き彫りにする。日本の金融ITでも伝統と革新のバランスが問われている。

    ・主な議論点: ビルグンバーグ端末の情報密集的なUIデザインへの評価、HTTP以前の技術を継承しながら現代のChromiumベースに進化した点、バックワード互換性の重要性(1985年の端末でも現在のニュースが表示可能)、そして個人投資家向けの代替ツール不足が指摘された。

    AIコメント要約(全文)

    ・主な議論点: ビルグンバーグ端末の情報密集的なUIデザインへの評価、HTTP以前の技術を継承しながら現代のChromiumベースに進化した点、バックワード互換性の重要性(1985年の端末でも現在のニュースが表示可能)、そして個人投資家向けの代替ツール不足が指摘された。 ・賛否両論: 端末の濃密で効率的な情報表示に対する賛辞が多く、「必要な情報を最小限に」表示する設計哲学が現代の航空機のコックピットディスプレイに似ているとの比喩もなされた。一方で、代替ツールの存在不足や高価なサブスクリプションモデルに対する批判的な意見もあり、Redditのwallstreetbetsコミュニティでの「クラッキング」に関するコメントが場の雰囲気を覆す議論も見られた。 ・注目コメント: ビルグンバーグ社が1985年代の端末ハードウェアを現在のニュースフィードで稼働させているという話題に対し、「彼らのバックワード互換性への執着は技術的な選択ではなく信仰のようなものだ」との指摘があり、企業文化としての深さが浮き彫りになった。また、個人投資家が同等の情報密集型UIを安価に利用できない現状に対する「小規模ショップがこの隙間を埋めようとしているが、真のビルグンバーグ端末の代替とはなっていない」とのコメントも興味深い。

  4. #4

    You Said No MCP

    MCP(Model Context Protocol)に対する懐疑論的見解がまとめられた記事。MCPはAIツール間のインターフェースを統一しようとするが、過度の抽象化は開発者体験を損なう可能性もある。日本のエンジニアにとって「標準化の落とし穴」として参考になる。

    主な議論点は、MCP(Model‑Context‑Protocol)が本当に有用かどうかという点で、一部は自然言語でアプリの設定や自動化が可能になり開発負荷が減ると評価し、macOSアプリやCrank、BetterTouchToolでの実装例を挙げた。

    AIコメント要約(全文)

    主な議論点は、MCP(Model‑Context‑Protocol)が本当に有用かどうかという点で、一部は自然言語でアプリの設定や自動化が可能になり開発負荷が減ると評価し、macOSアプリやCrank、BetterTouchToolでの実装例を挙げた。一方で、過去に「MCPは死んだ」と主張したインフルエンサーが多く、セキュリティや可観測性、チームワークフローへの適用を無視した過度なハイスペック主張が批判された。賛否は、MCPの現状の不完全さ(OpenAIのPromptサポート欠如や実装のばらつき)を許容するか、より最適な別手段を待つかで分かれている。注目コメントでは、MCPはUSB‑CやNVMeのように欠点があるが広く互換性がありエンドユーザーに使いやすいため、時間とともに改善されると評価し、現在の広がりが価値があると指摘した。

  5. #5

    バーニングマンの死亡率 – 統計学の短いレッスン

    バーニングマンの死亡率データを題材にした統計リテラシーの教訓。少数の事故を「メディアの都市伝説」と誤解すると、冷静なリスク分析が歪む。日本でも大規模イベントやカンファレンスの安全管理に、このようなデータ思考が求められている。

    主な議論点は、Burning Manにおける死亡率の統計が選択バイアスにより歪んでいるか、あるいは主催者による安全対策(衛生施設、銃・爆発物禁止、道路網、ゾーニング、レンジャー等)がリスクを実質的に低減しているかという点。

    AIコメント要約(全文)

    主な議論点は、Burning Manにおける死亡率の統計が選択バイアスにより歪んでいるか、あるいは主催者による安全対策(衛生施設、銃・爆発物禁止、道路網、ゾーニング、レンジャー等)がリスクを実質的に低減しているかという点。さらに、参加者は健康・余裕がある層に限られるため一般人口との比較は意味がないという指摘と、イベント外での死亡(搬送先での死や往復道路事故)がカウントされていないことへの批判も見られた。 賛否両論として、選択バイアスを死者数低減の主因だと見る意見に対し、主催者が事故や死亡を契機に段階的に文明的インフラを築き上げてきたという評価がある。また、環境志向を掲げつつ使い捨て文化や過度なルール、排他的な雰囲気を指摘する批判と、そうしたルールが安全を守る必要不可欠な仕組みだと擁護する声が分かれた。 注目コメントとして、「イベント境界外での死亡はカウントされず、搬送先での死や往復道路事故も含まれていない」という指摘が、統計の不備を突く洞察として挙げられた。

  6. #6

    私は17TBのマイクロソフトレコードにアクセスできるでしょう

    マイクロソフトの17TBレコードへのアクセス可能性を追いたたずねるセキュリティ記事。クラウド時代の「最小権限の原則」の重要性を改めて突きつける。日本の企業でもZero TrustやID管理の強化が急務となっている。

    主な議論点は、Microsoftが脆弱性開示記事に編集権を行使し、内容を削除・改変したことへの批判である。

    AIコメント要約(全文)

    主な議論点は、Microsoftが脆弱性開示記事に編集権を行使し、内容を削除・改変したことへの批判である。加えて、賞金5000ドルが他のMSRCバウンティと比べ極めて低く、報酬の妥当性が議論された。さらに、社内にJWT問題を防ぐMicrosoft Identity Service Essentials(MISE)があり、セキュア・フューチャー・イニシアティブで導入が進んでいたにもかかわらず、チームがコンプライアンス警告を意図的に遅らせたという指摘もあった。若手研究者が15歳で最初の報告を行い、今回も大きなインパクトを出したことに称賛が集まり、JWT仕様で「alg:none」が許可されたことへの疑問も見られた。

  7. #7

    TLA+ができることとできないこと

    TLA+が形式検証で可能なことと限界を明快に整理。特に分散システムの設計前にモデル検査を行う価値が強調されている。日本の大規模システム開発でも「検証文化」の普及が求められている。

    主な議論点: TLA+は状態遷移の高レベル correctness 検証に強いが、弱メモリモデルやハードウェア側チャネル、浮動小数点の非結合性など低レベル詳細を直接扱えず、明示的なロジックや外部ツールが必要だという点。

    AIコメント要約(全文)

    主な議論点: TLA+は状態遷移の高レベル correctness 検証に強いが、弱メモリモデルやハードウェア側チャネル、浮動小数点の非結合性など低レベル詳細を直接扱えず、明示的なロジックや外部ツールが必要だという点。 賛否両論: weak memory モデリングについては、手動でキャッシュフラッシュ lógicaを追加するのは誤りやすいとの懸念がある一方で、Quint のような実行可能仕様言語や miri/loom のアナライザーが補完できるとの期待がある。また、形式手法だけで十分だという考えに対し、実際の理解やテストの必要性を強調する声もある。 注目コメント: Quint を紹介し、TLA+ のアクション temporal logic に基づく JavaScript 実行可能仕様としてツールが充実していると評価したコメント;さらに、1996 年の論文と「The Future of TLA+」から引用され、形式手法ではハードウェア側チャネルや浮動小数点非結合性を見つけられないことを指摘した洞察に富んだ意見。

  8. #8

    SDF vs. MSDF vs. スラグ: GPUテキストレンダリング

    GPUテキストレンダリング技術比較。SDFやMSDF、Slug各手法のトレードオフを解説し、パフォーマンスと品質のバランスを議論する。ゲームやVR/AR業界の日本開発者にも直結する技術トピックだ。

    **主な議論点** コミュニティでは、GPUおよびCPU向けのフォントラスタライザのアルゴリズム比較と最適化が中心に議論されました。

    AIコメント要約(全文)

    **主な議論点** コミュニティでは、GPUおよびCPU向けのフォントラスタライザのアルゴリズム比較と最適化が中心に議論されました。特に、Slug、SDF、MSDF、および新たなBezier曲線の分割技術(モノトニックセクションへの分割)についての性能と品質の違いが検討されました。また、距離場(distance field)に基づく手法とピクセル単位の判定手法のトレードオフ、およびヒンティングや中国語・日本語・韓国語などの大規模グリフ集合のメモリ問題に関する解決策も議論対象となりました。 **賛否両論** SDFやMSDFのような距離場技術は、シェーダーで簡単にアウトラインやエッジのソフト化などのエフェクトを追加できる点で評価されています。しかし、スケーリング時の角のシャープさや正確度については意見が分かれています。一方、Slugのような手法は高解像度ディスプレイや大きなサイズで優れた品質を提供する一方、エフェクトの追加やアンチエイリアシングの柔軟性には欠けるという批判もあります。 **注目コメント** ユーザーが提案したモノトニックセクションへのBezier曲線分割技術は、並列処理(GPUのワープ操作やSIMD)に最適化されており、パフォーマンスがSlugや従来の高速ラスタライザと競争できるとの主張が注目されました。さらに、SDFの補間による歪みをシェーダー内で補正可能である指摘や、動的アトラスを用いた大規模グリフのメモリ問題への解決策も興味深い見解として挙げられています。

  9. #9

    室内エネルギーハーベスティングと湿度管理のための moist-electric ワイヤレス

    湿度から電気を取り出すマイクロ波 Wallpapers の研究は、IoTデバイスの電源問題に新たな視点を与える。室内環境を「エネルギーソース」に変える発想は、日本の省電力社会にも応用可能だ。

    ・主な議論点: 久壁紙の概念に対する関心、長期耐久性やコスト、実用性についての疑問、湿度管理が電力生成より有用ではないかとの意見、IoTデバイス向けの応用可能性 ・賛否両論: 良い点としては、小規模IoTデバイスの電源供給や室内湿度管理の可能性が挙げられる。

    AIコメント要約(全文)

    ・主な議論点: 久壁紙の概念に対する関心、長期耐久性やコスト、実用性についての疑問、湿度管理が電力生成より有用ではないかとの意見、IoTデバイス向けの応用可能性 ・賛否両論: 良い点としては、小規模IoTデバイスの電源供給や室内湿度管理の可能性が挙げられる。懐疑的な意見では、耐久性の未検証、外観上の問題、コスト効率の低さが指摘される。また、大量導入時の全体的な湿度低下への懸念も報告された ・注目コメント: 38%から32%までの湿度低下は印象的だが、その部屋のサイズについての疑問や、「vaporware(実現不可能な商品)」とする批判的コメントもある。さらに、個人的な憧望として「自分の屋根で湿気から水を採取するマイクロデューディフェクター」のアイデアが紹介されている

  10. #10

    Bild AI (YC W25) が創業メンバーのプロダクトエンジニアを募集中

    Bild AI が創業メンバーのプロダクトエンジニアを募集中。生成AIスタートアップの競争過熱の証であり、「創業期の技術リーダー」が果たす役割の重要性が伺える。日本のAIスタートアップ界も人材争いにさらされている。

  11. #11

    家族が最後に技術に取って変えられたとき

    家族を技術が「置き換えた」体験談。パーソナルAIやロボットが身近になる中、「人間的つながり」の価値を再考させる物語。日本のICT普及促進も、テクノロジーと人間関係の線量BALANCEが問われている。

    ・主な議論点 AI革命が産業革命以来最大の変化とされる中、実際の労働市場への影響やソフトウェア開発者の再スキル化可能性が議論された。

    AIコメント要約(全文)

    ・主な議論点 AI革命が産業革命以来最大の変化とされる中、実際の労働市場への影響やソフトウェア開発者の再スキル化可能性が議論された。特に、AIによる大規模な雇用喪失の懸念と、個人が対応可能な経済的・時間的余裕の欠如が強Deniedされた。 ・賛否両論 一方で、LLMの影響は過大評価されているとの見方もあり、人間の監督なしでは適切に機能しないため、完全な置き換えはまだ先の話という意見がある。一方、将来的にAIやロボットによって人間にならずになる仕事がほぼなくなるという悲観的見通しも提示された。 ・注目コメント 著者は自身の遠い祖父の歴史的な「職業転換」エピソードを通じて、現代の不安を昔と通算形のものであると感じたが、それでもその時代の人々が抱えた不確実さと類似点を指摘。また、「馬関係の仕事はすべて車に取って代わった」という例を出し、歴史の繰り返しであるとの認識を示した。

  12. #12

    SDF Public Access Unix System ... 設立1987年

    1987年創立のSDF Public Access Unix System は、インターネット黎明期から現在まで続く伝説的コミュニティ。オープンソース文化のルーツを体駱できるliving history*と言える。日本のハッカー文化にも多大な影響を与えてきた。

    主な議論点 SDFの利用実態と提供しているサービスへの関心が話題の中心だった。

    AIコメント要約(全文)

    主な議論点 SDFの利用実態と提供しているサービスへの関心が話題の中心だった。利用者はログインは続けているが、他のメンバーがどのように使っているのか不明だと述べ、MastodonインスタンスやPixelfedといった最新の分散サービスが提供されている事実に驚きや興味を示した。過去のHNスレッドへのリンク共有や、同様のパブリックアクセスUNIXシステムであるtheworld.comとの比較も見られた。 賛否両論 肯定的意見では、SDFがレトロなUnix環境を維持しつつ、現代のオープンソースソフトウェアを活用したサービスを提供している点を称賛し、コミュニティの持続可能性と技術的遺産の価値を強調した。一方、否定的あるいは懐疑的意見として、自身の利用目的がはっきりせず、全体の利用状況が見えにくいことから、SDFが実際にどれほど活用されているのか疑問を呈する声もあった。 注目コメント 「Love SDF. They run some great services for members, like a mastodon instance and pixelfed.」というコメントは、SDFが単なるシェル提供にとどまらず、現代の分散ウェブサービスの基盤として機能している具体例を示しており、歴史あるシステムが今も関連性を保っていることを端的に表している。

  13. #13

    5倍速のEdge Functions: V8 isolates から Firecracker MicroVMs へ

    Edge Function を V8Isolates から Firecracker MicroVMs へ移行し、5倍速にした事例。サーバーレスアーキテクチャの性能とコスト最適化のリアルな模範解答。日本のWebサービス企業でもEdge Computing とコンテナの活用が進んでいる。

    ## 主な議論点 コミュニティはV8 isolateからFirecracker MicroVMへの移行によ benefits について活発に議論しました。

    AIコメント要約(全文)

    ## 主な議論点 コミュニティはV8 isolateからFirecracker MicroVMへの移行によ benefits について活発に議論しました。パフォーマンス向上(5倍高速)やコスト効率改善が主張される一方、新しいアプローチの複雑性やリソースオーバーヘッドについて懸念も報じられました。 ## 賛否両論 **賛成論**:開発者はV8 isolateの制限から解放され、言語機能やライブラリの自由度が増したことを歓迎。特にカスタムランタイムや低レベルシステムアクセスの可能性が高く評価された。 **反対論**:いくつかのコメントは、MicroVMの起動時間やメモリ使用量の増加を懸念。サーバーレス関数のユースケースでは従来の軽量solutionを維持する方が適しているとの意見もある。 ## 注目コメント 「Firecrackerは素晴らしい技術だが、すべてのユースケースに最適とは限らない」とのコメントが特に注目を集めました。このコメントは、技術の進歩と実用性のバランスについて深慮を示しています。

  14. #14

    $35のバックアップカメラディスプレイをリバースエンジニアリング (AMT630A)

    35ドルのバックアップカメラディスプレイを reverse engineering するハードウェアハック。チップレベルの解析方法を解説し、DIYハードウェア文化の面白さを伝える。日本のメーカー・ユーザー双方に刺激を与える内容。

    ・主な議論点:AMT630Aチップのリバースエンジニアリングと、その結果として公開されたArduinoライブラリの有用性。

    AIコメント要約(全文)

    ・主な議論点:AMT630Aチップのリバースエンジニアリングと、その結果として公開されたArduinoライブラリの有用性。コミュニティは、安価な部品から高度なHUD機能を引き出すこのアプローチに高い関心を示した。 ・賛否両論:タイトルにおける「backup camera」という表記に対して、「backup」は名詞(バックアップ) whereas 「back up」は動詞(後退する)であり、形容詞として使う際は「back-up camera」とハイphenatedすべきだという指摘がなされた。これは表記に関する小さな議論である。 ・注目コメント:詳細なドキュメントが書かれたREADMEについて「古典的なリバースエンジニアリングだ。あなたのドキュメントの細かさが大好きだ」というコメントが、作業の質の高さと共有精神を称えるものとして注目された。

  15. #15

    Livenerf: Opus 5.5はnerfedされていますか?

    Opus 5.5 が nerfed されたかを検証する記事は、LLM ユーザーの間で実況される「アップデートの影響」に焦点を当てる。日本でもAIツールの性能変化について議論される場が増えつつある。

    主な議論点は、AnthropicのOpus 5.5が実際に「 nerf」(性能低下)されているかどうかで、Nerf Benchによる定量的追跡と、ユーザーの主観的感覚(「honeymoon効果」や複雑度の天井到達)が衝突していることです。

    AIコメント要約(全文)

    主な議論点は、AnthropicのOpus 5.5が実際に「 nerf」(性能低下)されているかどうかで、Nerf Benchによる定量的追跡と、ユーザーの主観的感覚(「honeymoon効果」や複雑度の天井到達)が衝突していることです。賛否両論として、一部のユーザーはフィードバックポップアップ後の即時劣化や個人的な体験から nerf を主張し、一方で他の参加者はベンチマークが顕著な変化を示さず、数千人のエンジニアによる日常的な微変更やキャッシュ調整が一時的な変動の原因だと指摘しています。注目コメントでは、「キャッシュやトークン最適化の調整が今日の最大の要因」と説明し、さらに「新モデルはリリース当初は余裕があるが、複雑度の上限にすぐ到達し、それが nerf と誤解される」というグラフィックを共有した意見が特に洞察に富んでいました。

  1. #16

    Show HN: JBR-001 – オープンソースの3Dプリンタブルデスクトップロボット

    3Dプリンタブルなデスクトップロボット「JBR-001」は、ハードウェアとソフトウェアの民主化を体現するプロジェクト。オープンソースハードウェアの可能性を広げる。日本のメーカー・ユーザー双方に新たな刺激を与える。

    「主な議論点は、JBR-001が完全オープンソースかつ3Dプリント可能なロボットキットとして提供される点と、それに伴う教育・初学者への恩恵、および同様にオープンソースだったOtto DIYがHPに買収され商業化した経緯と比較して、今後も無償で利用できるかという懸念だ。

    AIコメント要約(全文)

    「主な議論点は、JBR-001が完全オープンソースかつ3Dプリント可能なロボットキットとして提供される点と、それに伴う教育・初学者への恩恵、および同様にオープンソースだったOtto DIYがHPに買収され商業化した経緯と比較して、今後も無償で利用できるかという懸念だ。また、足を備えた見た目だが実際に歩行できない設計について「嘘っぽい」と指摘する意見と、Arduino Uno Qを採用したため廉価なクローンが入手しづらく、アクセシビリティが低下するという批判がある。一方で、親子で組み立てて楽しめるという肯定的な声や、他のオープンソースプロジェクトを探しているという要望も見られた。注目コメントとして、見た目と機能の不一致を倫理的に問題視する意見が特に洞察に富んでおり、オープンハードウェアにおける透明性の重要性を改めて示した。」

  2. #17

    LinkedIn Larpmaxxing

    LinkedIn での「LARPing」(ライフル・アドベンチャー)が問題化。仕事のアイデンティティを演じる行動が信頼を損なう可能性を指摘する。日本でもリモートワーク・副業が増え、個人のブランディングとリアルさの葛onoma が関心を集めている。

    ・主な議論点: LinkedInの有用性について、実際の情報取得ではなくログインページに収束することへの不満、またキャリアアップのための戦略的利用(LARPing)について議論された。

    AIコメント要約(全文)

    ・主な議論点: LinkedInの有用性について、実際の情報取得ではなくログインページに収束することへの不満、またキャリアアップのための戦略的利用(LARPing)について議論された。 ・賛否両論: 業界関俺SNSとしての価値を疑う声と、昇進判断者への影響戦略としての活用を肯定する声が分ある。 ・注目コメント: 「LinkedInはInstagramよりもパフォーマンシブだ」という指摘や、「自分の昇進を決定する人物をフォローし、フィードに現れるようにすることで間接的に影響を与える」という戦略的アプローチがある。

  3. #18

    Factorio Qualityを解決する

    Factorio の Quality システムを「解決」する試みは、ゲーム内経済システムの最適化にゲーム理論を応用する内容。日本のゲーム開発者にも「内部経済モデル」の研究対象になりえる。

    主な議論点: 一つのアセンブラでレシピ切り替えによる最高品質生産の実現可能性と、生産性ボーナス損失や流体制約・設置スペースの問題。

    AIコメント要約(全文)

    主な議論点: 一つのアセンブラでレシピ切り替えによる最高品質生産の実現可能性と、生産性ボーナス損失や流体制約・設置スペースの問題。さらに、Upcycling最適化のための線形ソルバーや速度モジュールの効果、伝説級機械がボトルネックになる点が議論された。 賛否両論: 一部は「驚異的な工夫」「数学的アプローチが洞察に富む」と称賛し、一方で「実用性が低い」「セットアップが煩雑」「伝説級機械のコストが高いため速度モジュールの意味が薄い」と批判的意見があった。 注目コメント: PythonスクリプトとJSアプリで線形ソルバーを用い、速度モジュールをわずか追加するだけで伝説級機械のスループットが大幅に向上すると指摘したコメントが特に洞察深いと注目された。

  4. #19

    Energy Timelines Photovoltaic

    太陽光発電の Energy Timelines についての分析。将来の電力供給シミレーションが、現在の政策や技術開発をどのように導くかを探る。日本の再エネ政策にも示唆が多い。

    ・主な議論点 コミュニティの議論は、主に太陽光発電の導入ペースとその経済的・技術的現実の間のギャップに焦点が当てられた。

    AIコメント要約(全文)

    ・主な議論点 コミュニティの議論は、主に太陽光発電の導入ペースとその経済的・技術的現実の間のギャップに焦点が当てられた。具体的には、太陽光パネルの価格下落と設置拡大の傾向 versus 変換効率の限界、送電網の老朽化・拡張の遅れ、蓄電技術の不足、および希少金属の供給制約等问题が中心となった。 ・賛否両論 賛成派は、太陽光発電の低コストと急速な普及ペースを強調し、早期にエネルギー転換が達成可能と主張した。一方、反対派は、技術的・インフラのボトルネックや経済的現実を指摘し、楽観的な見方を批判した。特に、送電網の更新や大規模蓄電の必要性についての懸念が顕著だった。 ・注目コメント 特に注目されたコメントの一つは、送電網の近代化と蓄電技術の進展が、太陽光発電の実質的普及の鍵となるという洞察だった。このコメントは、単なる発電容量の増加だけでなく、エネルギー系统的全体の統合と安定性の重要性を強調しており、議論の深さを加えた。

  5. #20

    Show HN: Strata – あなたのLLMに「No」と言える表現力のあるセマンティックレイヤー

    LLM に「No」と言えるセマンティックレイヤー「Strata」は、AIの安全性とユーザー制御を両立する試み。日本のAI規制や倫理ガイドライン策定にも関連する技術。

    主な議論点は、Strataが提案する厳密な命名による抽象化と、テーブルを超えたblend keyとしての再利用が集約ロジックをシンプルにする点、そしてドキュメントやランディングページの使い勝手が課題となっていることである。

    AIコメント要約(全文)

    主な議論点は、Strataが提案する厳密な命名による抽象化と、テーブルを超えたblend keyとしての再利用が集約ロジックをシンプルにする点、そしてドキュメントやランディングページの使い勝手が課題となっていることである。賛否両論は、抽象化の設計については「名前の統一が集約解決を容易にし、個人的に同じレベルに到達した」という肯定的意見と、「ランディングページが詳細なインストール手順しかなく、実際に何を行うツールか分からない」という否定的意見に分かれる。注目コメントとして、最初のコメントは「厳密な命名を抽象層としblend keyとして再利用すれば集約解決が大幅に簡素化される」と指摘し、さらにドキュメントの404エラーを挙げてリンク監査を提案した点が特に洞察に富んでいる。

  6. #21

    数学的折紙

    数学的折紙は、幾何とアートの衝撃を生む分野。特に origami エンジニアリングが宇宙・医療などに応用される中、その理論的深さが改めて注目されている。日本発の折紙文化と科学のファンタジーな融合。

    「origami ball」の左下にある図に組み立て方のリンクがないことが最初の話題になり、代わりに「venus kusudama」の動画やサイトを紹介する声が上がった。

    AIコメント要約(全文)

    「origami ball」の左下にある図に組み立て方のリンクがないことが最初の話題になり、代わりに「venus kusudama」の動画やサイトを紹介する声が上がった。次に、ページの立方体が複数ユニットで作られているのに対し、一枚の紙から立方体を折る方法はHaga、Kasahara、Moselyなど複数の人が独立に発見していたことが指摘され、リンクが共有された。さらに、これが本当の折り紙ではなく「ペーパークラフト」やネット図であること、カタラン立体が欠けていることに失望する意見と、kusudamaというキーワードで学べることや、五つ交差する四面体が特に面白いという肯定的な評価が分かれた。最後に、ニッチな層に向けたPolyhydra‑Webのリンクが再投稿され、興味を持つ人が限られていることへの自嘲が添えられた。

  7. #22

    道を開ける: 私のロボティクス速習講座

    著者のロボティクス速習講座は、ハードウェアとソフトの統合にチャレンジする開発者に実践的なヒントを与える。日本のロボット産業でも「ソフトウェアファースト」のトレンドと重なる。

    このコメントスレッドの議論は、主に以下の3つの観点から成り立っています。

    AIコメント要約(全文)

    このコメントスレッドの議論は、主に以下の3つの観点から成り立っています。 **主な議論点** community の核心は、この記事が「ロボット工学の Crash Course」である versus 「LLMを既製のロボットアームに接続しただけの実験」であるという議論です。多くのコメントが、この取り組みが本質的なロボット工学の知識や学習ではなく、LLMの応用に終始していると指摘しています。具体的には、機械学習モデルの設計原理、センサーフュージョン、制御理論などの基础知識の欠如が指摘され、これは「LLMが実際の学習の代わりになっている」という懸念として議論されています。 **賛否賛否両論** 賛否両論の焦点は、このアプローチの有効性と技術的完備性にあります。 * **賛成論**: 簡単な-setup で immediacy な結果を得る点や、 force sensing の代理としての発想は評価されています。また、プロフェッショナルな研究環境に近づいているという指摘もあります。 * **反対論**: 技術的な側面で、特に「較正(calibration)」の問題が厳しく批判されています。具体には、ターゲット(Aprilタグ)を観測するセンサの配置が不適切で、測定したい変数の誤差が大きい、という根本的な設計の問題が指摘されています。これは、結果の信頼性そのものに疑問を投げかけています。 **注目コメント** * **技術的批判**: 「第一の較正の法則:エラー分析-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done-done

  8. #23

    Show HN: Ledge.sh – 実行可能なMarkdownノート

    実行可能な Markdown ノート「Ledge.sh」は、ドキュメントとコードの境界を曖昧にするツール。日本のエンジニアリング組織でも「Documentation as Code」の波が来ている。

    ・主な議論点 Ledge.shはMarkdownにコードブロックを実行できるノートアプリとして注目され、Atuin DesktopやObservable Framework、Notion、Obsidianとの比較や統合の可能性が話題になった。

    AIコメント要約(全文)

    ・主な議論点 Ledge.shはMarkdownにコードブロックを実行できるノートアプリとして注目され、Atuin DesktopやObservable Framework、Notion、Obsidianとの比較や統合の可能性が話題になった。また、過去に同様の試みがあったが広まらなかった理由についても議論された。 ・賛否両論 賛成側は、チームでorg‑babelの使いにくさを解決し、馴染みのあるUIとマークダウン形式で手軽にコードを実行できる点を評価し、実際に試してみたいという声が多い。一方、なぜこれまで同様のアイデアが普及しなかったのか疑問を呈し、機能が限定的か、エコシステムへの組み込みが不十分だと指摘する意見もあった。 ・注目コメント Emacsユーザーは「Ledgeはorg‑babelからマグルにも使えるUIとフォーマットを提供し、チーム利用の最大の不満を解消する」とし、これが最も洞察に富んだ意見として挙げられた。また、Atuin Desktopが記事投稿日にアーカイブされたこともタイミングの象徴として言及された。

  9. #24

    Dots: 常時接続エージェント

    Always-on エージェント「Dots」は、常駐AIアシスタントの可能性を探る。日本のIT企業でもエージェント型AIの業務活用が進み、常時稼動モデルの管理が課題になりつつある。

    主な議論点は、「常時稼働するエージェント(Dots)の実用性と信頼性」についてです。

    AIコメント要約(全文)

    主な議論点は、「常時稼働するエージェント(Dots)の実用性と信頼性」についてです。賛成側は、ドメインごとに分離されたエージェントがコンテキストウィンドウを肥大化させずに専門知識を提供し、個人用・業務用を分けることで信頼の壁を作れるほか、クラウドエージェントと組み合わせればGitのワークツリー問題を解決できると指摘しています。一方で、遅延や推論コストの増加、エージェントの動作が不透明であること、そして誤った操作やデータ漏洩のリスクが依然残っているため、無制限のアクセスを与えるのは危険だと懸念する声が目立ちます。特に注目されたコメントは、エージェントを業務用と個人用に分けることでClaudのようなオールインワン記憶の問題を回避でき、信頼性の向上が実感できるという点でした。全体として、便利さと安全性・コストのトレードオフが議論の中心となっています。

  10. #25

    バーモントが発電所を自宅バッテリーで置き換える

    バーモントが家庭用バッテリーで発電所を代替する動きは、分散型エネルギーの未来を示す。日本の電力構造改革やV2H 技術とも関係し、「エネルギー民主化」の波に乗っている。

    バーモント州では家庭用蓄電池を仮想発電所(VPP)として活用し、ピークタイムの発電所増設を抑える試みが議論されている。

    AIコメント要約(全文)

    バーモント州では家庭用蓄電池を仮想発電所(VPP)として活用し、ピークタイムの発電所増設を抑える試みが議論されている。コメントでは、NCの電力会社が月額約50ドルでバッテリーを制御し、オーストラリアでは卸売価格のスピーク時に売電で利益を挙げる例が挙げられ、経済的メリットやグリッド安定化への期待が示されている。一方で、バッテリー購入費用の負担や、Utilityが家庭のネットワーク・機器への無償アクセスや賠償責任の免除を求める契約内容が批判され、「詐欺的」と指摘する意見もある。さらに、蓄電池は消費側であり固定ネットワークコストの転嫁によりグリッド・デス・スパイラルが懸念される点や、経済的に余裕のない世帯への負担増が指摘されている。注目されたコメントとして、Utilityがコストを消費者に転嫁し、プライバシーや賠償条件が不利であることを詳しく説明した意見や、蓄電池の経済性を送配電コストの裁定に依存するという分析が挙げられた。

  11. #26

    NASAが秘密の再起動を支援するため元SR-71Aスタッフに協力を求めた

    NASA が SR-71A の元スタッフを招き、秘密の再起動を支援した件は、冷戦 era の技術復活への試み。日本の宇宙開発でも過去の技術を「蘇生」する動きが注目されている。

    ・主な議論点 SR‑71Aの再稼働は、極高高度・超高速の有人研究機として将来の技術開発やハイパーソニック研究に役立つと同時に、過去の最先端エンジニアリング知識や組織的自信を失わないための「能力維持」手段として評価されている点が最も議論された。

    AIコメント要約(全文)

    ・主な議論点 SR‑71Aの再稼働は、極高高度・超高速の有人研究機として将来の技術開発やハイパーソニック研究に役立つと同時に、過去の最先端エンジニアリング知識や組織的自信を失わないための「能力維持」手段として評価されている点が最も議論された。 ・賛否両論 賛成側は、こうした難易度の高いプロジェクトを通じて失われつつあるチタン加工や燃料システムなどのノウハウを復活させ、将来の緊急時や予期せぬニーズに備えるべきだと主張。一方、批判側は費用が天文学的であり、実際の科学的成果よりもNASAの予算獲得や国家プレステージプロジェクト(月・火星探査、軍事向けハイパーソニック)への道具として使われていると指摘し、優先順位の誤りを疑問視。 ・注目コメント 一人のコメントでは、祖父とシアトルの博物館でSR‑71を見学し、元空軍のガイドからソ連上空飛行のエピソードを聞いて祖父が笑い合った思い出を語り、機体への個人的な愛着と歴史的価値を強調。また別のコメントでは、2007年に「ジグや工具を破壊した」という主張の実態を掘り下げ、埋設された部品の回収可能性や費用対効果の議論を提起し、技術的復興の現実味を問う洞察が示された。

  12. #27

    Show HN: Dental Scope – インタラクティブ3D歯科解剖学

    インタラクティブ3D 歯科解剛「Dental Scope」は、医療教育のデジタルトランスフォーメーションを体現。日本の歯科医学大学や教科書出版社も3Dコンテンツ開発に動いている。

    歯科解剖学をインタラクティブに学べるオープンソース3Dツール「Dental Scope」の発表に対し、コメントでは主にデスクトップ向けのリッチな3D可視化が再評価されている点が話題になった。

    AIコメント要約(全文)

    歯科解剖学をインタラクティブに学べるオープンソース3Dツール「Dental Scope」の発表に対し、コメントでは主にデスクトップ向けのリッチな3D可視化が再評価されている点が話題になった。さらに、ICU医でシミュレータ開発者であるZeruxe氏が連絡を取りたいと申し出ており、共同開発の可能性が示唆された。一方で、実際の歯科スキャンデータをこのツールに読み込めるかという疑問が投げかけられ、フォーマット対応やデータ連携の課題が指摘された。また、同様のプロジェクト「Human Atlas」と比較され、かつてのライブデプロイが現在利用不可であることから、持続的なメンテナンスの重要性が挙げられた。全体としては教育ツールへの期待と協力への関心が高まっているが、実臨床データへの適用性については未解決の点が残っている。

  13. #28

    Show HN: 動くEnigmaマシンの3Dモデル

    動く Enigma マシンの 3D モデルは、歴史と技術を融合した教育ツール。日本の大学院やテクノロジーミュージアムでも復元プロジェクトが進んでいる。

    主な議論点は、プロジェクトの完成度と教育的価値への称賛と、インタラクション時の動作のもたつきや最適化の課題への指摘だった。

    AIコメント要約(全文)

    主な議論点は、プロジェクトの完成度と教育的価値への称賛と、インタラクション時の動作のもたつきや最適化の課題への指摘だった。賛否両論としては、細部まで再現された3Dモデルと内部構造を示すカットアウェイが高く評価された一方、JavaScript/HTMLでの実装ゆえにパフォーマンスが不安定で、もっと滑らかな動作が望まれるという意見が分かれた。注目コメントとして、自身が2021年に作成したEnigmaシミュレーションへのリンクと、AndroidでのVR利用やインターネット越しのメッセージ交換機能を紹介したもの、そしてWebXRとハンドトラッキングを組み合わせたAR/VRモード(机上に配置するARやガーンジーのドイツ海軍司令部を再現するVR)を提案したコメントが特に洞察に富んでいた。また、ソースコードの公開を求める声も見られた。

  14. #29

    Show HN: Parrot – Mac向けのコパイロットを搭載したオープンソーススマート会議録音機

    Mac 向けオープンソーススマート会議録音機「Parrot」は、プライバシーと便利さの両立を探るツール。日本のハイブリッドワーク推進企業にもニーズが高い。

    製品名に「Co‑Pilot」を使うことがマイクロソフトのCopilotと混同されやすく、誤解を招くと指摘された。

    AIコメント要約(全文)

    製品名に「Co‑Pilot」を使うことがマイクロソフトのCopilotと混同されやすく、誤解を招くと指摘された。賛成側は名前を「Coach」や「Assistant」に変更すればブランド混乱を避けられ、オープンソース感が増すと主張。反対側は、Co‑Pilotという名前はAIアシスタント機能を直感的に示し、認知度があるため変更すると説明コストが増えると懸念。特に注目されたコメントは、「Coach」や「Assistant」など、Copilotと関連付けない名前に変更すべきだと指摘し、命名の誤解を防ぐことがUX向上につながると見ていた。さらに、録音・文字起こしの精度やプライバシー保護を評価する声がある一方で、Mac専用である点を制約とし、クロスプラットフォーム対応を求める意見も見られた。名前の問題は目立ったが、機能への関心は高く、改善点としてマルチプラットフォーム対応と中立的なブランド名が挙げられた。

  15. #30

    アメリカ郵政捜査官が偽造発票ラベルを販売するウェブサイトを閉鎖

    偽造発票ラベルを販売するウェブサイトの閉鎖は、eコマースの信頼性と法規制の課題を浮き彫りにする。日本の通関や消費者保護政策にも参考になる事件。

    主な議論点は、米国の偽造USPSラベルを使ったeBay出品者が偽トラッキング番号で購入者をだまし、中立評価では遅延や再送が目立ちながらポジティブ評価は高評価を保ち、これにより利益を上げている仕組みと、USPISの取り締まりや切手の闇市場、ドイツの印刷ラベル制度との比較だった。

    AIコメント要約(全文)

    主な議論点は、米国の偽造USPSラベルを使ったeBay出品者が偽トラッキング番号で購入者をだまし、中立評価では遅延や再送が目立ちながらポジティブ評価は高評価を保ち、これにより利益を上げている仕組みと、USPISの取り締まりや切手の闇市場、ドイツの印刷ラベル制度との比較だった。 賛否両論については、被害は深刻で厳罰が必要だという意見と、実際に届く限りは被害が小さく容認できるという意見が分かれたほか、切手の闇取引については需要があると指摘する声と、制度改革が必要だという声が対立した。 注目コメントとして、ドイツでは深夜ショップがスキャン可能なコードを印刷しており、これが偽造が極めて困難なため、米国の切手ベースとは根本的に異なるセキュリティモデルであるとの指摘が特に洞察に富んでいた。