Skip to content

Commit

Permalink
Update for General Relativity public release
Browse files Browse the repository at this point in the history
  • Loading branch information
Centri3 committed Dec 16, 2022
1 parent 4a8d745 commit b4d0d60
Showing 1 changed file with 63 additions and 56 deletions.
119 changes: 63 additions & 56 deletions src/handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,18 @@ use windows::Win32::{
};

const VERSION_DATA: [u8; 64usize] = [
0x8du8, 0xb7u8, 0xffu8, 0x4cu8, 0x89u8, 0x6cu8, 0x24u8, 0x78u8, 0xbau8, 0x07u8, 0x00u8, 0x00u8,
0x00u8, 0x48u8, 0x89u8, 0x55u8, 0x80u8, 0x66u8, 0x44u8, 0x89u8, 0x6cu8, 0x24u8, 0x68u8, 0x4cu8,
0x89u8, 0x6cu8, 0x24u8, 0x58u8, 0x48u8, 0x89u8, 0x54u8, 0x24u8, 0x60u8, 0x66u8, 0x44u8, 0x89u8,
0x6cu8, 0x24u8, 0x48u8, 0x32u8, 0xc0u8, 0x45u8, 0x8bu8, 0xf5u8, 0x4cu8, 0x8du8, 0x7du8, 0x90u8,
0x48u8, 0x8du8, 0x75u8, 0xa0u8, 0x48u8, 0x83u8, 0x3eu8, 0x00u8, 0x0fu8, 0x84u8, 0x54u8, 0x01u8,
0x00u8, 0x00u8, 0x44u8, 0x3bu8,
0x48u8, 0x8bu8, 0x54u8, 0x24u8, 0x60u8, 0x48u8, 0x83u8, 0xfau8, 0x08u8, 0x72u8, 0x37u8, 0x48u8,
0x8du8, 0x14u8, 0x55u8, 0x02u8, 0x00u8, 0x00u8, 0x00u8, 0x48u8, 0x8bu8, 0x4cu8, 0x24u8, 0x48u8,
0x48u8, 0x8bu8, 0xc1u8, 0x48u8, 0x81u8, 0xfau8, 0x00u8, 0x10u8, 0x00u8, 0x00u8, 0x72u8, 0x19u8,
0x48u8, 0x83u8, 0xc2u8, 0x27u8, 0x48u8, 0x8bu8, 0x49u8, 0xf8u8, 0x48u8, 0x2bu8, 0xc1u8, 0x48u8,
0x83u8, 0xc0u8, 0xf8u8, 0x48u8, 0x83u8, 0xf8u8, 0x1fu8, 0x0fu8, 0x87u8, 0x24u8, 0x03u8, 0x00u8,
0x00u8, 0xe8u8, 0x62u8, 0x74u8,
];

// I have to use the same number of bytes for each opcode because of spaghetti. I hate this
pub const NO_SEARCH_LOCKING_DATA: [(usize, [u8; 18usize], [u8; 18usize]); 3usize] = [
(
0x3e7c26usize,
0x3e7c76usize,
[
0x0fu8, 0xb6u8, 0x8bu8, 0x41u8, 0x66u8, 0x02u8, 0x00u8, 0x8bu8, 0xc7u8, 0x83u8, 0xf9u8,
0x01u8, 0x0fu8, 0x1fu8, 0x00u8, 0xbau8, 0x04u8, 0x00u8,
Expand All @@ -31,7 +31,7 @@ pub const NO_SEARCH_LOCKING_DATA: [(usize, [u8; 18usize], [u8; 18usize]); 3usize
],
),
(
0x3eb24ausize,
0x3eb29ausize,
[
0x0fu8, 0xb6u8, 0xfau8, 0x48u8, 0x8bu8, 0xd9u8, 0x80u8, 0xb9u8, 0x41u8, 0x66u8, 0x02u8,
0x00u8, 0x01u8, 0x0fu8, 0x1fu8, 0x44u8, 0x00u8, 0x00u8,
Expand All @@ -42,7 +42,7 @@ pub const NO_SEARCH_LOCKING_DATA: [(usize, [u8; 18usize], [u8; 18usize]); 3usize
],
),
(
0x3eb472usize,
0x3eb4c2usize,
[
0x80u8, 0xb9u8, 0x41u8, 0x66u8, 0x02u8, 0x00u8, 0x01u8, 0x0fu8, 0x1fu8, 0x44u8, 0x00u8,
0x00u8, 0x0fu8, 0x85u8, 0x82u8, 0x00u8, 0x00u8, 0x00u8,
Expand All @@ -55,13 +55,13 @@ pub const NO_SEARCH_LOCKING_DATA: [(usize, [u8; 18usize], [u8; 18usize]); 3usize
];

pub const CHTHONIA_FILTER_DATA: (usize, [u8; 7usize], [u8; 7usize]) = (
0x3ea6f9usize,
0x3ea749usize,
[0xb8u8, 0x07u8, 0x00u8, 0x00u8, 0x00u8, 0x66u8, 0x90u8],
[0x41u8, 0x8bu8, 0x41u8, 0x08u8, 0x4du8, 0x8bu8, 0xd1u8],
);

pub const ACCURATE_TEMP_FILTER_DATA: (usize, [u8; 1usize], [u8; 1usize]) =
(0x3ea7fbusize, [0x48u8], [0x4cu8]);
(0x3ea84busize, [0x48u8], [0x4cu8]);

type Opcodes = Vec<(usize, Vec<u8>, Vec<u8>)>;

Expand Down Expand Up @@ -147,19 +147,19 @@ impl CompactPatch {
pub struct NoMaxSearchRadius();

impl NoMaxSearchRadius {
const NMSR_DATA_OLD: (usize, u8, u8) = (0x3eb2beusize, 0xebu8, 0x74u8);
const NMSR_DATA_OLD: (usize, u8, u8) = (0x3eb30eusize, 0xebu8, 0x74u8);
const NMSR_DATA_NEW: [(usize, [u8; 8usize], [u8; 8usize]); 2usize] = [
(
0x3eb2c8usize,
0x3eb318usize,
[
0x66u8, 0x0fu8, 0x2fu8, 0x05u8, 0x38u8, 0x52u8, 0xa1u8, 0xffu8,
0x66u8, 0x0fu8, 0x2fu8, 0x05u8, 0xe8u8, 0x51u8, 0xa1u8, 0xffu8,
],
[
0x66u8, 0x0fu8, 0x2fu8, 0x05u8, 0x20u8, 0x0au8, 0x2bu8, 0x00u8,
],
),
(
0x3eb2d4usize,
0x3eb324usize,
// We don't need this
[0x00u8; 8usize],
[
Expand Down Expand Up @@ -307,55 +307,62 @@ pub struct EsiFilter();

impl EsiFilter {
pub const ESI_FILTER_DATA_0: (usize, [u8; 6usize], [u8; 6usize]) = (
0x3ea813usize,
[0xe9u8, 0xe8u8, 0x57u8, 0xa1u8, 0xffu8, 0x90u8],
0x3ea863usize,
[0xe9u8, 0x98u8, 0x57u8, 0xa1u8, 0xffu8, 0x90u8],
[0x41u8, 0x8bu8, 0x01u8, 0x83u8, 0xf8u8, 0x07u8],
);

pub const ESI_FILTER_DATA_1: [u8; 471usize] = [
0x0fu8, 0x87u8, 0xa3u8, 0x92u8, 0x5eu8, 0x00u8, 0x48u8, 0x89u8, 0x1du8, 0xf3u8, 0x0fu8,
pub const ESI_FILTER_DATA_1: [u8; 543usize] = [
0x0fu8, 0x87u8, 0x53u8, 0xacu8, 0x5eu8, 0x00u8, 0x48u8, 0x89u8, 0x1du8, 0xf3u8, 0x0fu8,
0x00u8, 0x00u8, 0x48u8, 0x89u8, 0x0du8, 0xf4u8, 0x0fu8, 0x00u8, 0x00u8, 0x48u8, 0x89u8,
0x15u8, 0xf5u8, 0x0fu8, 0x00u8, 0x00u8, 0x48u8, 0x89u8, 0x3du8, 0xf6u8, 0x0fu8, 0x00u8,
0x00u8, 0x4cu8, 0x89u8, 0x05u8, 0xf7u8, 0x0fu8, 0x00u8, 0x00u8, 0x4cu8, 0x89u8, 0x0du8,
0xf8u8, 0x0fu8, 0x00u8, 0x00u8, 0x4cu8, 0x89u8, 0x15u8, 0xf9u8, 0x0fu8, 0x00u8, 0x00u8,
0x4cu8, 0x89u8, 0x25u8, 0xfau8, 0x0fu8, 0x00u8, 0x00u8, 0x49u8, 0x8bu8, 0xd8u8, 0x49u8,
0x8bu8, 0xc8u8, 0xe8u8, 0xf7u8, 0x36u8, 0x6au8, 0x00u8, 0x0fu8, 0x28u8, 0xf0u8, 0xe8u8,
0xafu8, 0x3au8, 0x6au8, 0x00u8, 0xf3u8, 0x0fu8, 0x10u8, 0x9bu8, 0xa4u8, 0x1cu8, 0x00u8,
0x00u8, 0x0fu8, 0x28u8, 0xf8u8, 0xf2u8, 0x44u8, 0x0fu8, 0x10u8, 0x05u8, 0xbbu8, 0xd0u8,
0x89u8, 0x00u8, 0x0fu8, 0x28u8, 0xd3u8, 0xf3u8, 0x0fu8, 0x5cu8, 0x15u8, 0x90u8, 0xbeu8,
0x89u8, 0x00u8, 0xf3u8, 0x0fu8, 0x58u8, 0x1du8, 0x88u8, 0xbeu8, 0x89u8, 0x00u8, 0xf3u8,
0x44u8, 0x0fu8, 0x10u8, 0x15u8, 0x6bu8, 0xaau8, 0x89u8, 0x00u8, 0xf3u8, 0x44u8, 0x0fu8,
0x10u8, 0x9bu8, 0x48u8, 0x12u8, 0x00u8, 0x00u8, 0x41u8, 0x0fu8, 0x28u8, 0xc2u8, 0xf3u8,
0x0fu8, 0x5eu8, 0xd3u8, 0x0fu8, 0x5au8, 0xcau8, 0x41u8, 0x0fu8, 0x54u8, 0xc8u8, 0x66u8,
0x0fu8, 0x5au8, 0xd1u8, 0xf3u8, 0x0fu8, 0x10u8, 0x0du8, 0xb3u8, 0xa5u8, 0x89u8, 0x00u8,
0xf3u8, 0x0fu8, 0x5cu8, 0xc2u8, 0xe8u8, 0x32u8, 0xaau8, 0x35u8, 0x00u8, 0x44u8, 0x0fu8,
0x28u8, 0xc8u8, 0x0fu8, 0x28u8, 0xceu8, 0xf3u8, 0x0fu8, 0x5cu8, 0x0du8, 0x5bu8, 0xb6u8,
0x89u8, 0x00u8, 0xf3u8, 0x0fu8, 0x58u8, 0x35u8, 0x53u8, 0xb6u8, 0x89u8, 0x00u8, 0x0fu8,
0x57u8, 0xc0u8, 0xf3u8, 0x0fu8, 0x5eu8, 0xceu8, 0xf3u8, 0x0fu8, 0x5au8, 0xc1u8, 0x41u8,
0x0fu8, 0x54u8, 0xc0u8, 0x66u8, 0x0fu8, 0x5au8, 0xc8u8, 0x41u8, 0x0fu8, 0x28u8, 0xc2u8,
0xf3u8, 0x0fu8, 0x5cu8, 0xc1u8, 0xf3u8, 0x0fu8, 0x10u8, 0x0du8, 0x30u8, 0xa6u8, 0x89u8,
0x00u8, 0xe8u8, 0xf3u8, 0xa9u8, 0x35u8, 0x00u8, 0xf3u8, 0x0fu8, 0x10u8, 0x0du8, 0x27u8,
0x4du8, 0xa3u8, 0x00u8, 0x0fu8, 0x28u8, 0xd7u8, 0xf3u8, 0x0fu8, 0x5cu8, 0xd1u8, 0xf3u8,
0x44u8, 0x0fu8, 0x59u8, 0xc8u8, 0x0fu8, 0x57u8, 0xc0u8, 0xf3u8, 0x0fu8, 0x58u8, 0xcfu8,
0xf3u8, 0x0fu8, 0x5eu8, 0xd1u8, 0xf3u8, 0x0fu8, 0x5au8, 0xc2u8, 0x41u8, 0x0fu8, 0x54u8,
0xc0u8, 0x66u8, 0x0fu8, 0x5au8, 0xc8u8, 0x41u8, 0x0fu8, 0x28u8, 0xc2u8, 0xf3u8, 0x0fu8,
0x5cu8, 0xc1u8, 0xf3u8, 0x0fu8, 0x10u8, 0x0du8, 0x64u8, 0xa5u8, 0x89u8, 0x00u8, 0xe8u8,
0xb3u8, 0xa9u8, 0x35u8, 0x00u8, 0x41u8, 0x0fu8, 0x28u8, 0xd3u8, 0xf3u8, 0x44u8, 0x0fu8,
0x59u8, 0xc8u8, 0xf3u8, 0x0fu8, 0x5cu8, 0x15u8, 0x5au8, 0xbbu8, 0x89u8, 0x00u8, 0xf3u8,
0x44u8, 0x0fu8, 0x58u8, 0x1du8, 0x51u8, 0xbbu8, 0x89u8, 0x00u8, 0xf3u8, 0x41u8, 0x0fu8,
0x5eu8, 0xd3u8, 0x0fu8, 0x5au8, 0xcau8, 0x41u8, 0x0fu8, 0x54u8, 0xc8u8, 0x66u8, 0x0fu8,
0x5au8, 0xd1u8, 0xf3u8, 0x0fu8, 0x10u8, 0x0du8, 0xf9u8, 0xaau8, 0x89u8, 0x00u8, 0xf3u8,
0x44u8, 0x0fu8, 0x5cu8, 0xd2u8, 0x41u8, 0x0fu8, 0x28u8, 0xc2u8, 0xe8u8, 0x73u8, 0xa9u8,
0x35u8, 0x00u8, 0xf3u8, 0x44u8, 0x0fu8, 0x59u8, 0xc8u8, 0x41u8, 0x0fu8, 0x28u8, 0xd1u8,
0x48u8, 0x8bu8, 0x1du8, 0x83u8, 0x0eu8, 0x00u8, 0x00u8, 0x48u8, 0x8bu8, 0x0du8, 0x84u8,
0x0eu8, 0x00u8, 0x00u8, 0x48u8, 0x8bu8, 0x15u8, 0x85u8, 0x0eu8, 0x00u8, 0x00u8, 0x48u8,
0x8bu8, 0x3du8, 0x86u8, 0x0eu8, 0x00u8, 0x00u8, 0x4cu8, 0x8bu8, 0x05u8, 0x87u8, 0x0eu8,
0x00u8, 0x00u8, 0x4cu8, 0x8bu8, 0x0du8, 0x88u8, 0x0eu8, 0x00u8, 0x00u8, 0x4cu8, 0x8bu8,
0x15u8, 0x89u8, 0x0eu8, 0x00u8, 0x00u8, 0x4cu8, 0x8bu8, 0x25u8, 0x8au8, 0x0eu8, 0x00u8,
0x00u8, 0xf3u8, 0x0fu8, 0x10u8, 0x05u8, 0x4au8, 0x03u8, 0x00u8, 0x00u8, 0x0fu8, 0x2fu8,
0xc2u8, 0x0fu8, 0x87u8, 0x4au8, 0xaau8, 0x5eu8, 0x00u8, 0x0fu8, 0x2fu8, 0x15u8, 0x3eu8,
0x03u8, 0x00u8, 0x00u8, 0x0fu8, 0x87u8, 0x3du8, 0xaau8, 0x5eu8, 0x00u8, 0x41u8, 0x8bu8,
0x01u8, 0x83u8, 0xf8u8, 0x07u8, 0xe9u8, 0x42u8, 0xa6u8, 0x5eu8, 0x00u8,
0x8bu8, 0xc8u8, 0xe8u8, 0xe7u8, 0xe9u8, 0x69u8, 0x00u8, 0x48u8, 0x8bu8, 0xcbu8, 0x44u8,
0x0fu8, 0x28u8, 0xc0u8, 0xe8u8, 0x9bu8, 0x37u8, 0x6au8, 0x00u8, 0x44u8, 0x0fu8, 0x28u8,
0xc8u8, 0xe8u8, 0xd2u8, 0xe9u8, 0x69u8, 0x00u8, 0xf3u8, 0x0fu8, 0x10u8, 0x3du8, 0x96u8,
0xbeu8, 0x89u8, 0x00u8, 0x48u8, 0x8bu8, 0xcbu8, 0xf3u8, 0x0fu8, 0x10u8, 0xb3u8, 0xf8u8,
0x11u8, 0x00u8, 0x00u8, 0xf3u8, 0x0fu8, 0x5eu8, 0xc7u8, 0xf3u8, 0x0fu8, 0x59u8, 0xc0u8,
0xf3u8, 0x0fu8, 0x5eu8, 0xf0u8, 0xf3u8, 0x0fu8, 0x59u8, 0x35u8, 0xd7u8, 0xb7u8, 0x89u8,
0x00u8, 0xe8u8, 0xa6u8, 0xe9u8, 0x69u8, 0x00u8, 0xf3u8, 0x0fu8, 0x58u8, 0xf6u8, 0xf3u8,
0x0fu8, 0x59u8, 0xc6u8, 0xf3u8, 0x0fu8, 0x59u8, 0x05u8, 0x92u8, 0xbdu8, 0x89u8, 0x00u8,
0xe8u8, 0x91u8, 0xa2u8, 0x7au8, 0x00u8, 0xf3u8, 0x44u8, 0x0fu8, 0x10u8, 0x15u8, 0x44u8,
0xaau8, 0x89u8, 0x00u8, 0x41u8, 0x0fu8, 0x28u8, 0xc8u8, 0xf3u8, 0x44u8, 0x0fu8, 0x10u8,
0x9bu8, 0x48u8, 0x12u8, 0x00u8, 0x00u8, 0xf3u8, 0x0fu8, 0x5cu8, 0xcfu8, 0x0fu8, 0x28u8,
0xf0u8, 0xf3u8, 0x44u8, 0x0fu8, 0x58u8, 0xc7u8, 0xf2u8, 0x0fu8, 0x10u8, 0x3du8, 0x57u8,
0xd0u8, 0x89u8, 0x00u8, 0x41u8, 0x0fu8, 0x28u8, 0xc2u8, 0xf3u8, 0x0fu8, 0x59u8, 0x35u8,
0x1bu8, 0xa3u8, 0x89u8, 0x00u8, 0xf3u8, 0x41u8, 0x0fu8, 0x5eu8, 0xc8u8, 0xf3u8, 0x0fu8,
0x5au8, 0xc9u8, 0x0fu8, 0x54u8, 0xcfu8, 0x66u8, 0x0fu8, 0x5au8, 0xd1u8, 0xf3u8, 0x0fu8,
0x10u8, 0x0du8, 0x6bu8, 0xa5u8, 0x89u8, 0x00u8, 0xf3u8, 0x0fu8, 0x5cu8, 0xc2u8, 0xe8u8,
0xeau8, 0xa9u8, 0x35u8, 0x00u8, 0x44u8, 0x0fu8, 0x28u8, 0xc0u8, 0x41u8, 0x0fu8, 0x28u8,
0xc9u8, 0xf3u8, 0x0fu8, 0x5cu8, 0x0du8, 0x12u8, 0xb6u8, 0x89u8, 0x00u8, 0xf3u8, 0x44u8,
0x0fu8, 0x58u8, 0x0du8, 0x09u8, 0xb6u8, 0x89u8, 0x00u8, 0x0fu8, 0x57u8, 0xc0u8, 0xf3u8,
0x41u8, 0x0fu8, 0x5eu8, 0xc9u8, 0xf3u8, 0x0fu8, 0x5au8, 0xc1u8, 0x0fu8, 0x54u8, 0xc7u8,
0x66u8, 0x0fu8, 0x5au8, 0xc8u8, 0x41u8, 0x0fu8, 0x28u8, 0xc2u8, 0xf3u8, 0x0fu8, 0x5cu8,
0xc1u8, 0xf3u8, 0x0fu8, 0x10u8, 0x0du8, 0xe6u8, 0xa5u8, 0x89u8, 0x00u8, 0xe8u8, 0xa9u8,
0xa9u8, 0x35u8, 0x00u8, 0xf3u8, 0x0fu8, 0x10u8, 0x0du8, 0xddu8, 0x4cu8, 0xa3u8, 0x00u8,
0x0fu8, 0x28u8, 0xd6u8, 0xf3u8, 0x0fu8, 0x5cu8, 0xd1u8, 0xf3u8, 0x44u8, 0x0fu8, 0x59u8,
0xc0u8, 0x0fu8, 0x57u8, 0xc0u8, 0xf3u8, 0x0fu8, 0x58u8, 0xceu8, 0xf3u8, 0x0fu8, 0x5eu8,
0xd1u8, 0xf3u8, 0x0fu8, 0x5au8, 0xc2u8, 0x0fu8, 0x54u8, 0xc7u8, 0x66u8, 0x0fu8, 0x5au8,
0xc8u8, 0x41u8, 0x0fu8, 0x28u8, 0xc2u8, 0xf3u8, 0x0fu8, 0x5cu8, 0xc1u8, 0xf3u8, 0x0fu8,
0x10u8, 0x0du8, 0x1bu8, 0xa5u8, 0x89u8, 0x00u8, 0xe8u8, 0x6au8, 0xa9u8, 0x35u8, 0x00u8,
0x41u8, 0x0fu8, 0x28u8, 0xd3u8, 0xf3u8, 0x44u8, 0x0fu8, 0x59u8, 0xc0u8, 0xf3u8, 0x0fu8,
0x5cu8, 0x15u8, 0x11u8, 0xbbu8, 0x89u8, 0x00u8, 0xf3u8, 0x44u8, 0x0fu8, 0x58u8, 0x1du8,
0x08u8, 0xbbu8, 0x89u8, 0x00u8, 0xf3u8, 0x41u8, 0x0fu8, 0x5eu8, 0xd3u8, 0x0fu8, 0x5au8,
0xcau8, 0x0fu8, 0x54u8, 0xcfu8, 0x66u8, 0x0fu8, 0x5au8, 0xd1u8, 0xf3u8, 0x0fu8, 0x10u8,
0x0du8, 0xb1u8, 0xaau8, 0x89u8, 0x00u8, 0xf3u8, 0x44u8, 0x0fu8, 0x5cu8, 0xd2u8, 0x41u8,
0x0fu8, 0x28u8, 0xc2u8, 0xe8u8, 0x2bu8, 0xa9u8, 0x35u8, 0x00u8, 0xf3u8, 0x44u8, 0x0fu8,
0x59u8, 0xc0u8, 0x41u8, 0x0fu8, 0x28u8, 0xd0u8, 0x48u8, 0x8bu8, 0x1du8, 0x3bu8, 0x0eu8,
0x00u8, 0x00u8, 0x48u8, 0x8bu8, 0x0du8, 0x3cu8, 0x0eu8, 0x00u8, 0x00u8, 0x48u8, 0x8bu8,
0x15u8, 0x3du8, 0x0eu8, 0x00u8, 0x00u8, 0x48u8, 0x8bu8, 0x3du8, 0x3eu8, 0x0eu8, 0x00u8,
0x00u8, 0x4cu8, 0x8bu8, 0x05u8, 0x3fu8, 0x0eu8, 0x00u8, 0x00u8, 0x4cu8, 0x8bu8, 0x0du8,
0x40u8, 0x0eu8, 0x00u8, 0x00u8, 0x4cu8, 0x8bu8, 0x15u8, 0x41u8, 0x0eu8, 0x00u8, 0x00u8,
0x4cu8, 0x8bu8, 0x25u8, 0x42u8, 0x0eu8, 0x00u8, 0x00u8, 0xf3u8, 0x0fu8, 0x10u8, 0x05u8,
0x02u8, 0x03u8, 0x00u8, 0x00u8, 0x0fu8, 0x2fu8, 0xc2u8, 0x0fu8, 0x87u8, 0x52u8, 0xaau8,
0x5eu8, 0x00u8, 0x0fu8, 0x2fu8, 0x15u8, 0xf6u8, 0x02u8, 0x00u8, 0x00u8, 0x0fu8, 0x87u8,
0x45u8, 0xaau8, 0x5eu8, 0x00u8, 0x41u8, 0x8bu8, 0x01u8, 0x83u8, 0xf8u8, 0x07u8, 0xe9u8,
0x4au8, 0xa6u8, 0x5eu8, 0x00u8,
];

pub fn new(handler: &Handler) -> Self {
Expand Down

0 comments on commit b4d0d60

Please sign in to comment.