ic-wasm 0.9.10

A library for performing Wasm transformations specific to canisters running on the Internet Computer
Documentation
To regenerate the Wasm file:

* `wat.wasm` is generated from the [dfinity/examples/wasm/counter]https://github.com/dfinity/examples/tree/master/wasm/counter
* `motoko.wasm` is generated from [dfinity/examples/motoko/counter]https://github.com/dfinity/examples/tree/master/motoko/counter
* `motoko-region.wasm` is generated by adding the following in the Motoko counter code:
```motoko
import Region "mo:base/Region";
actor {
  stable let profiling = do {
    let r = Region.new();
    ignore Region.grow(r, 32);
    r;
  };
  ...
}
```
* `rust.wasm` is generated from [dfinity/examples/rust/counter]https://github.com/dfinity/examples/tree/master/rust/counter, and add the following pre/post-upgrade hooks:
```rust
use ic_stable_structures::{
    memory_manager::{MemoryId, MemoryManager},
    writer::Writer,
    DefaultMemoryImpl, Memory,
};
thread_local! {
    static MEMORY_MANAGER: RefCell<MemoryManager<DefaultMemoryImpl>> =
        RefCell::new(MemoryManager::init(DefaultMemoryImpl::default()));
}

const UPGRADES: MemoryId = MemoryId::new(0);

#[ic_cdk::pre_upgrade]
fn pre_upgrade() {
    let bytes = COUNTER.with(|counter| Encode!(counter).unwrap());
    let len = bytes.len() as u32;
    let mut memory = MEMORY_MANAGER.with(|m| m.borrow().get(UPGRADES));
    let mut writer = Writer::new(&mut memory, 0);
    writer.write(&len.to_le_bytes()).unwrap();
    writer.write(&bytes).unwrap();
}
#[ic_cdk::post_upgrade]
fn post_upgrade() {
    let memory = MEMORY_MANAGER.with(|m| m.borrow().get(UPGRADES));
    let mut len_bytes = [0; 4];
    memory.read(0, &mut len_bytes);
    let len = u32::from_le_bytes(len_bytes) as usize;
    let mut bytes = vec![0; len];
    memory.read(4, &mut bytes);
    let value = Decode!(&bytes, Nat).unwrap();
    COUNTER.with(|cell| *cell.borrow_mut() = value);
}
```
* `rust-region.wasm` is generated by adding the following in the Rust counter code:
```rust
const PROFILING: MemoryId = MemoryId::new(100);
#[ic_cdk::init]
fn init() {
    let memory = MEMORY_MANAGER.with(|m| m.borrow().get(PROFILING));
    memory.grow(32);
    ...
}
```
* `classes.wasm` is generated from [dfinity/examples/motoko/classes]https://github.com/dfinity/examples/blob/master/motoko/classes/src/map/Map.mo