use async_compression::tokio_02::bufread::ZstdDecoder;
use async_compression::tokio_02::write::GzipEncoder;
use std::io::Result;
use tokio_02::io::stderr;
use tokio_02::io::stdin;
use tokio_02::io::stdout;
use tokio_02::io::AsyncReadExt as _; use tokio_02::io::AsyncWriteExt as _; use tokio_02::io::BufReader;
use tokio_02 as tokio; #[tokio_02::main]
async fn main() -> Result<()> {
let mut reader = ZstdDecoder::new(BufReader::new(stdin()));
let mut x: Vec<u8> = vec![];
reader.read_to_end(&mut x).await?;
let mut error = stderr();
error.write_all(x.len().to_string().as_bytes()).await?;
error.shutdown().await?;
let mut writer = GzipEncoder::new(stdout());
writer.write_all(&x).await?;
writer.shutdown().await?;
let mut res = writer.into_inner();
res.flush().await?;
Ok(())
}