mirror of
https://github.com/soywod/himalaya.git
synced 2024-09-29 12:31:13 +00:00
init sub crates (#253)
* init sub crates * doc: update readme * doc: improve main readme * doc: add links, add missing crate task * doc: update emojis
This commit is contained in:
parent
ad7cd28a3c
commit
ae22a62cf7
20
Cargo.lock
generated
20
Cargo.lock
generated
|
@ -226,6 +226,14 @@ dependencies = [
|
||||||
"termcolor",
|
"termcolor",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "everest"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "everest-sync"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fastrand"
|
name = "fastrand"
|
||||||
version = "1.5.0"
|
version = "1.5.0"
|
||||||
|
@ -390,6 +398,10 @@ dependencies = [
|
||||||
"uuid",
|
"uuid",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "himalaya-sync"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hostname"
|
name = "hostname"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
|
@ -574,6 +586,14 @@ dependencies = [
|
||||||
"quoted_printable",
|
"quoted_printable",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "makalu"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "makalu-sync"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "maplit"
|
name = "maplit"
|
||||||
version = "1.0.2"
|
version = "1.0.2"
|
||||||
|
|
|
@ -1,4 +1,11 @@
|
||||||
[workspace]
|
[workspace]
|
||||||
members = [
|
members = [
|
||||||
"email-manager",
|
"email-manager",
|
||||||
|
# "email-synchronizer",
|
||||||
|
# "contact-manager",
|
||||||
|
# "contact-synchronizer",
|
||||||
|
# "calendar-manager",
|
||||||
|
# "calendar-synchronizer",
|
||||||
|
# "task-manager",
|
||||||
|
# "task-synchronizer",
|
||||||
]
|
]
|
||||||
|
|
120
README.md
120
README.md
|
@ -1,86 +1,44 @@
|
||||||
# 📫 Himalaya
|
# :mage: Himalaya
|
||||||
[![gh-actions](https://github.com/soywod/himalaya/workflows/deployment/badge.svg)](https://github.com/soywod/himalaya/actions?query=workflow%3Adeployment)
|
|
||||||
[![gh-actions](https://github.com/soywod/himalaya/workflows/tests/badge.svg)](https://github.com/soywod/himalaya/actions?query=workflow%3Atests)
|
|
||||||
[![gh-actions](https://github.com/soywod/himalaya/workflows/nix-build/badge.svg)](https://github.com/soywod/himalaya/actions?query=workflow%3Anix-build)
|
|
||||||
[![Homebrew](https://img.shields.io/badge/dynamic/json.svg?url=https://formulae.brew.sh/api/formula/himalaya.json&query=$.versions.stable&label=homebrew)](https://formulae.brew.sh/formula/himalaya)
|
|
||||||
|
|
||||||
CLI email manager
|
Himalaya is a suite of independent [Personal Information
|
||||||
|
Management](https://en.wikipedia.org/wiki/Personal_information_manager)
|
||||||
*The project is under active development. Do not use in production before the
|
command-line tools.
|
||||||
`v1.0.0` (see the [roadmap](https://github.com/soywod/himalaya/milestone/5)).*
|
|
||||||
|
|
||||||
![image](https://user-images.githubusercontent.com/10437171/138774902-7b9de5a3-93eb-44b0-8cfb-6d2e11e3b1aa.png)
|
![image](https://user-images.githubusercontent.com/10437171/138774902-7b9de5a3-93eb-44b0-8cfb-6d2e11e3b1aa.png)
|
||||||
|
|
||||||
## Motivation
|
|
||||||
|
|
||||||
Bringing emails to the terminal is a *pain*. First, because they are sensitive
|
|
||||||
data. Secondly, the existing TUIs ([Mutt](http://www.mutt.org/),
|
|
||||||
[NeoMutt](https://neomutt.org/), [Alpine](https://alpine.x10host.com/),
|
|
||||||
[aerc](https://aerc-mail.org/)…) are really hard to configure. They require time
|
|
||||||
and patience.
|
|
||||||
|
|
||||||
The aim of Himalaya is to extract the email logic into a simple (yet solid) CLI
|
|
||||||
API that can be used directly from the terminal, from scripts, from UIs…
|
|
||||||
Possibilities are endless!
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# As root:
|
|
||||||
curl -sSL https://raw.githubusercontent.com/soywod/himalaya/master/install.sh | sudo sh
|
|
||||||
|
|
||||||
# As a regular user:
|
|
||||||
curl -sSL https://raw.githubusercontent.com/soywod/himalaya/master/install.sh | PREFIX=~/.local sh
|
|
||||||
```
|
|
||||||
|
|
||||||
*See the [wiki](https://github.com/soywod/himalaya/wiki) for other installation
|
|
||||||
methods.*
|
|
||||||
|
|
||||||
## Configuration
|
|
||||||
|
|
||||||
```toml
|
|
||||||
# ~/.config/himalaya/config.toml
|
|
||||||
|
|
||||||
name = "Your full name"
|
|
||||||
downloads-dir = "/abs/path/to/downloads"
|
|
||||||
signature = """
|
|
||||||
--
|
|
||||||
Regards,
|
|
||||||
"""
|
|
||||||
|
|
||||||
[gmail]
|
|
||||||
default = true
|
|
||||||
email = "your.email@gmail.com"
|
|
||||||
|
|
||||||
imap-host = "imap.gmail.com"
|
|
||||||
imap-port = 993
|
|
||||||
imap-login = "your.email@gmail.com"
|
|
||||||
imap-passwd-cmd = "pass show gmail"
|
|
||||||
|
|
||||||
smtp-host = "smtp.gmail.com"
|
|
||||||
smtp-port = 465
|
|
||||||
smtp-login = "your.email@gmail.com"
|
|
||||||
smtp-passwd-cmd = "security find-internet-password -gs gmail -w"
|
|
||||||
```
|
|
||||||
|
|
||||||
*See the
|
|
||||||
[wiki](https://github.com/soywod/himalaya/wiki/Configuration:config-file) for
|
|
||||||
all the options.*
|
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- Mailbox listing
|
### :mailbox: [Email](https://github.com/soywod/himalaya/blob/set-up-multi-crate/email-manager/README.md)
|
||||||
- Email listing and filtering
|
|
||||||
- Email composition based on `$EDITOR`
|
|
||||||
- Email manipulation (copy/move/delete)
|
|
||||||
- Multi-accounting
|
|
||||||
- IDLE mode for real-time notifications
|
|
||||||
- Vim plugin
|
|
||||||
- Completions for bash/zsh/fish
|
|
||||||
- JSON output
|
|
||||||
- …
|
|
||||||
|
|
||||||
*See the [wiki](https://github.com/soywod/himalaya/wiki) for all the features.*
|
Himalaya proposes a command-line API to manage your emails (listing, searching,
|
||||||
|
reading, copying, moving, deleting…). It is also shipped with a [Vim
|
||||||
|
plugin](https://github.com/soywod/himalaya/blob/set-up-multi-crate/email-manager/vim/README.md).
|
||||||
|
A [TUI](https://github.com/soywod/himalaya/pull/155) and an [Emacs
|
||||||
|
plugin](https://github.com/soywod/himalaya/issues/142https://github.com/soywod/himalaya/issues/142)
|
||||||
|
are in progress by the community. A
|
||||||
|
[synchronizer](https://github.com/soywod/himalaya/blob/set-up-multi-crate/email-synchronizer/README.md)
|
||||||
|
should also come soon.
|
||||||
|
|
||||||
|
### :card_index: [Contact](https://github.com/soywod/himalaya/blob/set-up-multi-crate/contact-manager/README.md) (TODO)
|
||||||
|
|
||||||
|
Himalaya plans to propose a command-line API to manage your contacts through
|
||||||
|
the [CardDAV](https://en.wikipedia.org/wiki/CardDAV) protocol. It may come in
|
||||||
|
the future with a Vim plugin, an Emacs plugin, a TUI and a synchronizer.
|
||||||
|
|
||||||
|
### :date: [Calendar](https://github.com/soywod/himalaya/blob/set-up-multi-crate/calendar-manager/README.md) (TODO)
|
||||||
|
|
||||||
|
Himalaya plans to propose a command-line API to manage your calendar through
|
||||||
|
the [CalDAV](https://en.wikipedia.org/wiki/CalDAV) protocol. It may come in the
|
||||||
|
future with a Vim plugin, an Emacs plugin, a TUI and a synchronizer.
|
||||||
|
|
||||||
|
### :stopwatch: [Tasks](https://github.com/soywod/himalaya/blob/set-up-multi-crate/task-manager/README.md) (TODO)
|
||||||
|
|
||||||
|
Himalaya plans to propose a command-line API to manage your tasks and your time
|
||||||
|
through the [CalDAV](https://en.wikipedia.org/wiki/CalDAV) protocol. It may
|
||||||
|
come in the future with a Vim plugin, an Emacs plugin, a TUI and a
|
||||||
|
synchronizer. The tool already exists in [another
|
||||||
|
repository](https://github.com/soywod/unfog): it needs to be rewritten and
|
||||||
|
added to the Himalaya suite.
|
||||||
|
|
||||||
## Sponsoring
|
## Sponsoring
|
||||||
|
|
||||||
|
@ -89,13 +47,3 @@ all the options.*
|
||||||
[![ko-fi](https://img.shields.io/badge/-Ko--fi-ff5e5a?logo=Ko-fi&logoColor=ffffff)](https://ko-fi.com/soywod)
|
[![ko-fi](https://img.shields.io/badge/-Ko--fi-ff5e5a?logo=Ko-fi&logoColor=ffffff)](https://ko-fi.com/soywod)
|
||||||
[![buy-me-a-coffee](https://img.shields.io/badge/-Buy%20Me%20a%20Coffee-ffdd00?logo=Buy%20Me%20A%20Coffee&logoColor=000000)](https://www.buymeacoffee.com/soywod)
|
[![buy-me-a-coffee](https://img.shields.io/badge/-Buy%20Me%20a%20Coffee-ffdd00?logo=Buy%20Me%20A%20Coffee&logoColor=000000)](https://www.buymeacoffee.com/soywod)
|
||||||
[![liberapay](https://img.shields.io/badge/-Liberapay-f6c915?logo=Liberapay&logoColor=222222)](https://liberapay.com/soywod)
|
[![liberapay](https://img.shields.io/badge/-Liberapay-f6c915?logo=Liberapay&logoColor=222222)](https://liberapay.com/soywod)
|
||||||
|
|
||||||
## Credits
|
|
||||||
|
|
||||||
- [IMAP RFC3501](https://tools.ietf.org/html/rfc3501)
|
|
||||||
- [Iris](https://github.com/soywod/iris.vim), the himalaya predecessor
|
|
||||||
- [isync](https://isync.sourceforge.io/), an email synchronizer for offline usage
|
|
||||||
- [NeoMutt](https://neomutt.org/), an email terminal user interface
|
|
||||||
- [Alpine](http://alpine.x10host.com/alpine/alpine-info/), an other email terminal user interface
|
|
||||||
- [mutt-wizard](https://github.com/LukeSmithxyz/mutt-wizard), a tool over NeoMutt and isync
|
|
||||||
- [rust-imap](https://github.com/jonhoo/rust-imap), a rust IMAP lib
|
|
||||||
|
|
6
calendar-manager/Cargo.toml
Normal file
6
calendar-manager/Cargo.toml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[package]
|
||||||
|
name = "makalu"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
[dependencies]
|
3
calendar-manager/README.md
Normal file
3
calendar-manager/README.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# :date: Makalu
|
||||||
|
|
||||||
|
TODO
|
3
calendar-manager/src/main.rs
Normal file
3
calendar-manager/src/main.rs
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
fn main() {
|
||||||
|
unimplemented!("The calendar manager is not implemented yet.");
|
||||||
|
}
|
6
calendar-synchronizer/Cargo.toml
Normal file
6
calendar-synchronizer/Cargo.toml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[package]
|
||||||
|
name = "makalu-sync"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
[dependencies]
|
3
calendar-synchronizer/README.md
Normal file
3
calendar-synchronizer/README.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# :date: :repeat: Makalu synchronizer
|
||||||
|
|
||||||
|
TODO
|
3
calendar-synchronizer/src/main.rs
Normal file
3
calendar-synchronizer/src/main.rs
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
fn main() {
|
||||||
|
unimplemented!("The calendar synchronizer is not implemented yet.");
|
||||||
|
}
|
6
contact-manager/Cargo.toml
Normal file
6
contact-manager/Cargo.toml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[package]
|
||||||
|
name = "everest"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
[dependencies]
|
3
contact-manager/README.md
Normal file
3
contact-manager/README.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# :card_index: Everest
|
||||||
|
|
||||||
|
TODO
|
3
contact-manager/src/main.rs
Normal file
3
contact-manager/src/main.rs
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
fn main() {
|
||||||
|
unimplemented!("The contact manager is not implemented yet.");
|
||||||
|
}
|
6
contact-synchronizer/Cargo.toml
Normal file
6
contact-synchronizer/Cargo.toml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[package]
|
||||||
|
name = "everest-sync"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
[dependencies]
|
3
contact-synchronizer/README.md
Normal file
3
contact-synchronizer/README.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# :card_index: :repeat: Everest synchronizer
|
||||||
|
|
||||||
|
TODO
|
3
contact-synchronizer/src/main.rs
Normal file
3
contact-synchronizer/src/main.rs
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
fn main() {
|
||||||
|
unimplemented!("The contact synchronizer is not implemented yet.");
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ description = "CLI email manager"
|
||||||
version = "0.5.1"
|
version = "0.5.1"
|
||||||
authors = ["soywod <clement.douin@posteo.net>"]
|
authors = ["soywod <clement.douin@posteo.net>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
default-run = "himalaya"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
ammonia = "3.1.2"
|
ammonia = "3.1.2"
|
||||||
|
|
92
email-manager/README.md
Normal file
92
email-manager/README.md
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
# :mailbox: Himalaya [![Homebrew](https://img.shields.io/badge/dynamic/json.svg?url=https://formulae.brew.sh/api/formula/himalaya.json&query=$.versions.stable&label=homebrew)](https://formulae.brew.sh/formula/himalaya)
|
||||||
|
|
||||||
|
![image](https://user-images.githubusercontent.com/10437171/138774902-7b9de5a3-93eb-44b0-8cfb-6d2e11e3b1aa.png)
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
Bringing emails to the terminal is a *pain*. First, because they are sensitive
|
||||||
|
data. Secondly, the existing TUIs ([Mutt](http://www.mutt.org/),
|
||||||
|
[NeoMutt](https://neomutt.org/), [Alpine](https://alpine.x10host.com/),
|
||||||
|
[aerc](https://aerc-mail.org/)…) are really hard to configure. They require time
|
||||||
|
and patience.
|
||||||
|
|
||||||
|
The aim of Himalaya is to extract the email logic into a simple (yet solid) CLI
|
||||||
|
API that can be used directly from the terminal, from scripts, from UIs…
|
||||||
|
Possibilities are endless!
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# As root:
|
||||||
|
curl -sSL https://raw.githubusercontent.com/soywod/himalaya/master/email-manager/install.sh | sudo sh
|
||||||
|
|
||||||
|
# As a regular user:
|
||||||
|
curl -sSL https://raw.githubusercontent.com/soywod/himalaya/master/email-manager/install.sh | PREFIX=~/.local sh
|
||||||
|
```
|
||||||
|
|
||||||
|
*See the [wiki](https://github.com/soywod/himalaya/wiki) for other installation
|
||||||
|
methods.*
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
```toml
|
||||||
|
# ~/.config/himalaya/config.toml
|
||||||
|
|
||||||
|
name = "Your full name"
|
||||||
|
downloads-dir = "/abs/path/to/downloads"
|
||||||
|
signature = """
|
||||||
|
--
|
||||||
|
Regards,
|
||||||
|
"""
|
||||||
|
|
||||||
|
[gmail]
|
||||||
|
default = true
|
||||||
|
email = "your.email@gmail.com"
|
||||||
|
|
||||||
|
imap-host = "imap.gmail.com"
|
||||||
|
imap-port = 993
|
||||||
|
imap-login = "your.email@gmail.com"
|
||||||
|
imap-passwd-cmd = "pass show gmail"
|
||||||
|
|
||||||
|
smtp-host = "smtp.gmail.com"
|
||||||
|
smtp-port = 465
|
||||||
|
smtp-login = "your.email@gmail.com"
|
||||||
|
smtp-passwd-cmd = "security find-internet-password -gs gmail -w"
|
||||||
|
```
|
||||||
|
|
||||||
|
*See the
|
||||||
|
[wiki](https://github.com/soywod/himalaya/wiki/Configuration:config-file) for
|
||||||
|
all the options.*
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Mailbox listing
|
||||||
|
- Email listing and filtering
|
||||||
|
- Email composition based on `$EDITOR`
|
||||||
|
- Email manipulation (copy/move/delete)
|
||||||
|
- Multi-accounting
|
||||||
|
- IDLE mode for real-time notifications
|
||||||
|
- Vim plugin
|
||||||
|
- Completions for bash/zsh/fish
|
||||||
|
- JSON output
|
||||||
|
- …
|
||||||
|
|
||||||
|
*See the [wiki](https://github.com/soywod/himalaya/wiki) for all the features.*
|
||||||
|
|
||||||
|
## Sponsoring
|
||||||
|
|
||||||
|
[![github](https://img.shields.io/badge/-GitHub%20Sponsors-fafbfc?logo=GitHub%20Sponsors)](https://github.com/sponsors/soywod)
|
||||||
|
[![paypal](https://img.shields.io/badge/-PayPal-0079c1?logo=PayPal&logoColor=ffffff)](https://www.paypal.com/paypalme/soywod)
|
||||||
|
[![ko-fi](https://img.shields.io/badge/-Ko--fi-ff5e5a?logo=Ko-fi&logoColor=ffffff)](https://ko-fi.com/soywod)
|
||||||
|
[![buy-me-a-coffee](https://img.shields.io/badge/-Buy%20Me%20a%20Coffee-ffdd00?logo=Buy%20Me%20A%20Coffee&logoColor=000000)](https://www.buymeacoffee.com/soywod)
|
||||||
|
[![liberapay](https://img.shields.io/badge/-Liberapay-f6c915?logo=Liberapay&logoColor=222222)](https://liberapay.com/soywod)
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
- [IMAP RFC3501](https://tools.ietf.org/html/rfc3501)
|
||||||
|
- [Iris](https://github.com/soywod/iris.vim), the himalaya predecessor
|
||||||
|
- [isync](https://isync.sourceforge.io/), an email synchronizer for offline usage
|
||||||
|
- [NeoMutt](https://neomutt.org/), an email terminal user interface
|
||||||
|
- [Alpine](http://alpine.x10host.com/alpine/alpine-info/), an other email terminal user interface
|
||||||
|
- [mutt-wizard](https://github.com/LukeSmithxyz/mutt-wizard), a tool over NeoMutt and isync
|
||||||
|
- [rust-imap](https://github.com/jonhoo/rust-imap), a rust IMAP lib
|
6
email-synchronizer/Cargo.toml
Normal file
6
email-synchronizer/Cargo.toml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[package]
|
||||||
|
name = "himalaya-sync"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
[dependencies]
|
3
email-synchronizer/README.md
Normal file
3
email-synchronizer/README.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# :mailbox: :repeat: Himalaya synchronizer
|
||||||
|
|
||||||
|
TODO
|
3
email-synchronizer/src/main.rs
Normal file
3
email-synchronizer/src/main.rs
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
fn main() {
|
||||||
|
unimplemented!("The email synchronizer is not implemented yet.");
|
||||||
|
}
|
6
task-manager/Cargo.toml
Normal file
6
task-manager/Cargo.toml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[package]
|
||||||
|
name = "lhotse"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
[dependencies]
|
3
task-manager/README.md
Normal file
3
task-manager/README.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# :stopwatch: Lhotse
|
||||||
|
|
||||||
|
TODO
|
3
task-manager/src/main.rs
Normal file
3
task-manager/src/main.rs
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
fn main() {
|
||||||
|
println!("Hello, world!");
|
||||||
|
}
|
6
task-synchronizer/Cargo.toml
Normal file
6
task-synchronizer/Cargo.toml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[package]
|
||||||
|
name = "lhotse-sync"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
[dependencies]
|
3
task-synchronizer/README.md
Normal file
3
task-synchronizer/README.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# :stopwatch: :repeat: Lhotse synchronizer
|
||||||
|
|
||||||
|
TODO
|
3
task-synchronizer/src/main.rs
Normal file
3
task-synchronizer/src/main.rs
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
fn main() {
|
||||||
|
println!("Hello, world!");
|
||||||
|
}
|
Loading…
Reference in a new issue