d37e6a6763d5

test: pin official cryptographic vectors (v4.1.1)

time
2026-07-26 06:34 UTC · 3 months ago
machine
koh2
parent
9dde66e57d3d
11 files crypto-core/Cargo.lock+7 −1crypto-core/Cargo.toml+5 −1crypto-core/src/lib.rs+227 −1manifest.firefox.json+1 −1manifest.json+1 −1package.json+1 −1src/background/aes.ts+42 −26src/crypto/argon2id.kat.test.ts+11 −13src/crypto/official-vectors.test.ts+57 −0src/shared/noise-core-wasm/peach_noise_core_bg.wasmbinarysrc/shared/noise-core-wasm/peach_noise_core_bytes.ts+24 −24
crypto-core/Cargo.lock+7 −1
@@ -140,6 +140,7 @@140140 checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"141141 dependencies = [142142  "generic-array",143+ "rand_core",143144  "typenum",144145 ]145146 @@ -362,8 +363,10 @@362363 363364 [[package]]364365 name = "peach-noise-core"365-version = "1.0.0"366+version = "1.0.1"366367 dependencies = [368+ "blake2",369+ "chacha20poly1305",367370  "getrandom 0.2.17",368371  "getrandom 0.3.4",369372  "jni",@@ -433,6 +436,9 @@433436 version = "0.6.4"434437 source = "registry+https://github.com/rust-lang/crates.io-index"435438 checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"439+dependencies = [440+ "getrandom 0.2.17",441+]436442 437443 [[package]]438444 name = "rustc_version"

view file

crypto-core/Cargo.toml+5 −1
@@ -1,6 +1,6 @@11 [package]22 name = "peach-noise-core"3-version = "1.0.0"3+version = "1.0.1"44 edition = "2024"55 rust-version = "1.85"66 license = "GPL-3.0-only"@@ -23,6 +23,10 @@2323 [target.'cfg(not(target_arch = "wasm32"))'.dependencies]2424 jni = "=0.21.1"2525 once_cell = "=1.21.4"26+27+[dev-dependencies]28+blake2 = "=0.10.6"29+chacha20poly1305 = "=0.10.1"2630 2731 [profile.release]2832 codegen-units = 1

view file

crypto-core/src/lib.rs+227 −1
@@ -589,7 +589,16 @@589589 590590 #[cfg(test)]591591 mod tests {592-    use super::CoreNoiseSession;592+    use super::{CoreNoiseSession, KK, NK, core_builder};593+    use blake2::{594+        Blake2sMac256,595+        digest::{KeyInit as BlakeKeyInit, Mac},596+    };597+    use chacha20poly1305::{598+        ChaCha20Poly1305, Nonce,599+        aead::{Aead, Payload},600+    };601+    use snow::params::NoiseParams;593602     use x25519_dalek::{PublicKey, StaticSecret};594603 595604     fn keypair(seed: u8) -> ([u8; 32], [u8; 32]) {@@ -598,6 +607,107 @@598607         (private, public)599608     }600609 610+    fn hex(value: &str) -> Vec<u8> {611+        assert!(value.len().is_multiple_of(2));612+        value613+            .as_bytes()614+            .chunks_exact(2)615+            .map(|pair| u8::from_str_radix(std::str::from_utf8(pair).unwrap(), 16).unwrap())616+            .collect()617+    }618+619+    fn official_pair(620+        pattern: &str,621+        initiator_static: Option<&str>,622+        initiator_ephemeral: &str,623+        initiator_remote_static: &str,624+        responder_static: &str,625+        responder_ephemeral: &str,626+        responder_remote_static: Option<&str>,627+    ) -> (CoreNoiseSession, CoreNoiseSession) {628+        let prologue = hex("4a6f686e2047616c74");629+        let responder_private = hex(responder_static);630+        let responder_public = PublicKey::from(&StaticSecret::from(631+            <[u8; 32]>::try_from(&responder_private[..]).unwrap(),632+        ));633+        assert_eq!(634+            responder_public.as_bytes(),635+            &hex(initiator_remote_static)[..]636+        );637+638+        let params: NoiseParams = pattern.parse().unwrap();639+        let initiator_ephemeral = hex(initiator_ephemeral);640+        let initiator_static = initiator_static.map(hex);641+        let responder_ephemeral = hex(responder_ephemeral);642+        let responder_remote_static = responder_remote_static.map(hex);643+        let mut initiator_builder = core_builder(params.clone())644+            .prologue(&prologue)645+            .unwrap()646+            .remote_public_key(responder_public.as_bytes())647+            .unwrap()648+            .fixed_ephemeral_key_for_testing_only(&initiator_ephemeral);649+        if let Some(private) = &initiator_static {650+            initiator_builder = initiator_builder.local_private_key(private).unwrap();651+        }652+653+        let mut responder_builder = core_builder(params)654+            .prologue(&prologue)655+            .unwrap()656+            .local_private_key(&responder_private)657+            .unwrap()658+            .fixed_ephemeral_key_for_testing_only(&responder_ephemeral);659+        if let Some(remote_public) = &responder_remote_static {660+            responder_builder = responder_builder.remote_public_key(remote_public).unwrap();661+        }662+663+        (664+            CoreNoiseSession::handshake(initiator_builder.build_initiator().unwrap()),665+            CoreNoiseSession::handshake(responder_builder.build_responder().unwrap()),666+        )667+    }668+669+    fn assert_cacophony_vector(670+        mut initiator: CoreNoiseSession,671+        mut responder: CoreNoiseSession,672+        handshake_hash: &str,673+        messages: &[(&str, &str)],674+    ) {675+        for (index, (payload, expected_ciphertext)) in messages.iter().enumerate() {676+            let plaintext = hex(payload);677+            let expected = hex(expected_ciphertext);678+            if index < 2 {679+                let (sender, receiver) = if index % 2 == 0 {680+                    (&mut initiator, &mut responder)681+                } else {682+                    (&mut responder, &mut initiator)683+                };684+                let actual = sender.write_handshake(&plaintext).unwrap();685+                assert_eq!(actual, expected, "handshake message {index}");686+                assert_eq!(687+                    receiver.read_handshake(&actual).unwrap(),688+                    plaintext,689+                    "handshake payload {index}",690+                );691+            } else {692+                let (sender, receiver) = if index % 2 == 0 {693+                    (&mut initiator, &mut responder)694+                } else {695+                    (&mut responder, &mut initiator)696+                };697+                let actual = sender.encrypt(&plaintext).unwrap();698+                assert_eq!(actual, expected, "transport message {index}");699+                assert_eq!(700+                    receiver.decrypt(&actual).unwrap(),701+                    plaintext,702+                    "transport payload {index}",703+                );704+            }705+        }706+        let expected_hash = hex(handshake_hash);707+        assert_eq!(initiator.handshake_hash().unwrap(), expected_hash);708+        assert_eq!(responder.handshake_hash().unwrap(), expected_hash);709+    }710+601711     fn complete(initiator: &mut CoreNoiseSession, responder: &mut CoreNoiseSession) {602712         let message1 = initiator.write_handshake(&[]).unwrap();603713         assert!(responder.read_handshake(&message1).unwrap().is_empty());@@ -660,5 +770,121 @@660770         let mut ciphertext = initiator.encrypt(b"vault").unwrap();661771         ciphertext[0] ^= 0x80;662772         assert!(responder.decrypt(&ciphertext).is_err());773+    }774+775+    #[test]776+    fn cacophony_nk_vector_matches_shared_core() {777+        let pair = official_pair(778+            NK,779+            None,780+            "893e28b9dc6ca8d611ab664754b8ceb7bac5117349a4439a6b0569da977c464a",781+            "31e0303fd6418d2f8c0e78b91f22e8caed0fbe48656dcf4767e4834f701b8f62",782+            "4a3acbfdb163dec651dfa3194dece676d437029c62a408b4c5ea9114246e4893",783+            "bbdb4cdbd309f1a1f2e1456967fe288cadd6f712d65dc7b7793d5e63da6b375b",784+            None,785+        );786+        assert_cacophony_vector(787+            pair.0,788+            pair.1,789+            "d7244d974066aae2376f7ba5534f60a6e4e82cd7c9751e226cae3928e6b49f14",790+            &[791+                (792+                    "4c756477696720766f6e204d69736573",793+                    "ca35def5ae56cec33dc2036731ab14896bc4c75dbb07a61f879f8e3afa4c794454ae7612d1724af42adb130160a9a94e67b5b169b4e00c189f6467cd17eb7cad",794+                ),795+                (796+                    "4d757272617920526f746862617264",797+                    "95ebc60d2b1fa672c1f46a8aa265ef51bfe38e7ccb39ec5be34069f144808843986a5c929337e337ac8b4a074af12ab9f76318a5f18c8b599a443af07383ce",798+                ),799+                (800+                    "462e20412e20486179656b",801+                    "550027c7a5d450017bcb5e12b8253b1c53fd2213aeda84891d5f95",802+                ),803+                (804+                    "4361726c204d656e676572",805+                    "dfbce0c38210ccee35e830aca9dd8b8b3997b933e75bfc8864b759",806+                ),807+            ],808+        );809+    }810+811+    #[test]812+    fn cacophony_kk_vector_matches_shared_core() {813+        let pair = official_pair(814+            KK,815+            Some("e61ef9919cde45dd5f82166404bd08e38bceb5dfdfded0a34c8df7ed542214d1"),816+            "893e28b9dc6ca8d611ab664754b8ceb7bac5117349a4439a6b0569da977c464a",817+            "31e0303fd6418d2f8c0e78b91f22e8caed0fbe48656dcf4767e4834f701b8f62",818+            "4a3acbfdb163dec651dfa3194dece676d437029c62a408b4c5ea9114246e4893",819+            "bbdb4cdbd309f1a1f2e1456967fe288cadd6f712d65dc7b7793d5e63da6b375b",820+            Some("6bc3822a2aa7f4e6981d6538692b3cdf3e6df9eea6ed269eb41d93c22757b75a"),821+        );822+        assert_cacophony_vector(823+            pair.0,824+            pair.1,825+            "1362b8627a00907ce11e558aba8ce7cbca88e83f0e84ce7db5159b1c3e25ab59",826+            &[827+                (828+                    "4c756477696720766f6e204d69736573",829+                    "ca35def5ae56cec33dc2036731ab14896bc4c75dbb07a61f879f8e3afa4c7944266a5f53784aa3becb0f7485c2759c328937867a4cbaafef07422b0725e098be",830+                ),831+                (832+                    "4d757272617920526f746862617264",833+                    "95ebc60d2b1fa672c1f46a8aa265ef51bfe38e7ccb39ec5be34069f144808843008aeea5d76d6abcbab87a18502c8a8352d9933ac11e2a7d228038d721e31e",834+                ),835+                (836+                    "462e20412e20486179656b",837+                    "5f92113edf78c3e56e6d67201f5f9e0c8f2930c3e1ffb64ede0358",838+                ),839+                (840+                    "4361726c204d656e676572",841+                    "30ebbd9cdcef7f40d99c8cd11e880dac28f5c9e5032c1059b3b56a",842+                ),843+            ],844+        );845+    }846+847+    #[test]848+    fn rfc_8439_chacha20_poly1305_aead_vector_matches_snow_cipher() {849+        let key = hex("808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f");850+        let nonce = hex("070000004041424344454647");851+        let aad = hex("50515253c0c1c2c3c4c5c6c7");852+        let plaintext = hex(concat!(853+            "4c616469657320616e642047656e746c656d656e206f662074686520636c6173",854+            "73206f66202739393a204966204920636f756c64206f6666657220796f75206f",855+            "6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73",856+            "637265656e20776f756c642062652069742e",857+        ));858+        let expected = hex(concat!(859+            "d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d6",860+            "3dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b36",861+            "92ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc",862+            "3ff4def08e4b7a9de576d26586cec64b6116",863+            "1ae10b594f09e26a7e902ecbd0600691",864+        ));865+        let cipher = ChaCha20Poly1305::new_from_slice(&key).unwrap();866+        assert_eq!(867+            cipher868+                .encrypt(869+                    Nonce::from_slice(&nonce),870+                    Payload {871+                        msg: &plaintext,872+                        aad: &aad,873+                    },874+                )875+                .unwrap(),876+            expected,877+        );878+    }879+880+    #[test]881+    fn blake2_reference_keyed_vector_matches_snow_hash_dependency() {882+        let key: Vec<u8> = (0_u8..32).collect();883+        let mut mac = <Blake2sMac256 as BlakeKeyInit>::new_from_slice(&key).unwrap();884+        Mac::update(&mut mac, &[]);885+        assert_eq!(886+            Mac::finalize(mac).into_bytes().as_slice(),887+            &hex("48a8997da407876b3d79c0d92325ad3b89cbb754d86ab71aee047ad345fd2c49"),888+        );663889     }664890 }

view file

manifest.firefox.json+1 −1
@@ -1,7 +1,7 @@11 {22   "manifest_version": 3,33   "name": "Peach Password Manager",4-  "version": "4.1.0",4+  "version": "4.1.1",55   "description": "Zero-knowledge password manager",66   "browser_specific_settings": {77     "gecko": {

view file

manifest.json+1 −1
@@ -1,7 +1,7 @@11 {22   "manifest_version": 3,33   "name": "Peach Password Manager",4-  "version": "4.1.0",4+  "version": "4.1.1",55   "description": "Zero-knowledge password manager",66   "action": {77     "default_popup": "src/popup/index.html",

view file

package.json+1 −1
@@ -1,6 +1,6 @@11 {22   "name": "peach",3-  "version": "4.1.0",3+  "version": "4.1.1",44   "description": "Zero-knowledge password manager",55   "license": "GPL-3.0-only",66   "type": "module",

view file

src/background/aes.ts+42 −26
@@ -87,33 +87,10 @@8787   tag: string,8888   aadTag?: string8989 ): Promise<string> {90-  const key = await crypto.subtle.importKey(91-    "raw",92-    keyBytes.buffer as ArrayBuffer,93-    { name: "AES-GCM" },94-    false,95-    ["decrypt"]96-  );97-98-  const cipherBytes = unhex(ciphertext);99-  const tagBytes = unhex(tag);100-  const combined = new Uint8Array(cipherBytes.length + tagBytes.length);101-  combined.set(cipherBytes);102-  combined.set(tagBytes, cipherBytes.length);103-104-  const tryDecrypt = async (aad: Uint8Array): Promise<string> => {105-    const raw = await crypto.subtle.decrypt(106-      {107-        name: "AES-GCM",108-        iv: unhex(nonce).buffer as ArrayBuffer,109-        additionalData: aad.buffer.slice(aad.byteOffset, aad.byteOffset + aad.byteLength) as ArrayBuffer,110-        tagLength: 128,111-      },112-      key,113-      combined.buffer as ArrayBuffer90+  const tryDecrypt = async (aad: Uint8Array): Promise<string> =>91+    new TextDecoder().decode(92+      await decryptWithAadBytes(keyBytes, nonce, ciphertext, tag, aad),11493     );115-    return new TextDecoder().decode(raw);116-  };11794 11895   try {11996     return await tryDecrypt(aadFor(aadTag));@@ -128,6 +105,45 @@128105     throw err;129106   }130107 }108+109+async function decryptWithAadBytes(110+  keyBytes: Uint8Array,111+  nonce: string,112+  ciphertext: string,113+  tag: string,114+  aad: Uint8Array,115+): Promise<Uint8Array> {116+  const key = await crypto.subtle.importKey(117+    "raw",118+    keyBytes.buffer as ArrayBuffer,119+    { name: "AES-GCM" },120+    false,121+    ["decrypt"]122+  );123+124+  const cipherBytes = unhex(ciphertext);125+  const tagBytes = unhex(tag);126+  const combined = new Uint8Array(cipherBytes.length + tagBytes.length);127+  combined.set(cipherBytes);128+  combined.set(tagBytes, cipherBytes.length);129+130+  const raw = await crypto.subtle.decrypt(131+    {132+      name: "AES-GCM",133+      iv: unhex(nonce).buffer as ArrayBuffer,134+      additionalData: aad.buffer.slice(135+        aad.byteOffset,136+        aad.byteOffset + aad.byteLength,137+      ) as ArrayBuffer,138+      tagLength: 128,139+    },140+    key,141+    combined.buffer as ArrayBuffer,142+  );143+  return new Uint8Array(raw);144+}145+146+export const _testSeam = { decryptWithAadBytes };131147 132148 export function zeroKey(keyBytes: Uint8Array): void {133149   keyBytes.fill(0);

view file

src/crypto/argon2id.kat.test.ts+11 −13
@@ -13,8 +13,8 @@1313 // re-encrypts everything on save).1414 //1515 // The KAT approach:16-//   - Pick a deterministic (password, salt) pair and compute the expected17-//     Argon2id output offline (reference value below).16+//   - Pin a deterministic production-profile (password, salt) pair to the17+//     same output in hash-wasm and Android's independent Bouncy Castle path.1818 //   - Assert the actual output matches byte-for-byte.1919 //   - If any parameter silently changes (m, t, p, or hashLength), the output2020 //     hash changes and this test fails.@@ -23,7 +23,8 @@2323 //   password = "testpassword"   (NFC-normalized — same as ASCII, no change)2424 //   salt     = 16 × 0xAB2525 //   m=65536, t=3, p=4, hashLength=3226-//   Expected output: computed via hash-wasm argon2id (see script below)26+//   Expected output: cross-checked by peach-android's27+//   OfficialCryptoVectorsTest using the same UTF-8 input and parameters.2728 //2829 //   To re-derive (run once in Node to get the canonical value):2930 //     import { argon2id } from "hash-wasm";@@ -41,17 +42,14 @@4142 // KAT vector4243 // ---------------------------------------------------------------------------4344 44-// This hex string is the authoritative expected Argon2id output for the test45-// vector below. It must be re-derived if the hash-wasm library version changes46-// (major version bump) or if a KAT discrepancy is found.45+// This hex string is the coordinated browser/Android production-profile46+// output. A change breaks vault compatibility and must never be accepted by47+// regenerating only one implementation's expected value.4748 //48-// Instructions to regenerate:49-//   1. Run `npx tsx scripts/gen-argon2id-kat.ts` (or the Node snippet above).50-//   2. Paste the output here.51-//   3. Commit with message "update Argon2id KAT vector for hash-wasm vX.Y.Z".52-//53-// DO NOT change this value without the regeneration process above. A change54-// here means the KDF output has changed, which would break existing vaults.49+// RFC 9106's published Argon2id vector includes associated data, which50+// hash-wasm cannot represent. Android separately executes that full RFC vector;51+// this cross-implementation vector covers Peach's actual no-associated-data52+// production profile on both platforms.5553 const KAT_EXPECTED_HEX = "df187c8d241e8f3fd42810e1379660605aad1119dcb133d8ff916f87160d6a33";5654 5755 // If you have not yet run the generation script, mark this test as skipped

view file

src/crypto/official-vectors.test.ts+57 −0
@@ -0,0 +1,57 @@1+import { describe, expect, it } from "vitest";2+import { blake3 } from "hash-wasm";3+4+import { _testSeam as aesTestSeam } from "../background/aes";5+6+function unhex(value: string): Uint8Array {7+  const output = new Uint8Array(value.length / 2);8+  for (let index = 0; index < value.length; index += 2) {9+    output[index / 2] = Number.parseInt(value.slice(index, index + 2), 16);10+  }11+  return output;12+}13+14+function hex(value: Uint8Array): string {15+  return Array.from(value, (byte) => byte.toString(16).padStart(2, "0")).join("");16+}17+18+describe("official cryptographic vectors", () => {19+  // NIST CAVP gcmDecrypt256.rsp, PTlen=128, AADlen=0, Taglen=128, Count=0.20+  // Source archive SHA-256 is pinned in docs/CRYPTOGRAPHIC-TEST-VECTORS.md.21+  it("decrypts the NIST AES-256-GCM CAVP vector and rejects a bad tag", async () => {22+    const key = unhex(23+      "4c8ebfe1444ec1b2d503c6986659af2c94fafe945f72c1e8486a5acfedb8a0f8",24+    );25+    const nonce = "473360e0ad24889959858995";26+    const ciphertext = "d2c78110ac7e8f107c0df0570bd7c90c";27+    const tag = "c26a379b6d98ef2852ead8ce83a833a7";28+29+    const plaintext = await aesTestSeam.decryptWithAadBytes(30+      key,31+      nonce,32+      ciphertext,33+      tag,34+      new Uint8Array(),35+    );36+    expect(hex(plaintext)).toBe("7789b41cb3ee548814ca0b388c10b343");37+38+    await expect(39+      aesTestSeam.decryptWithAadBytes(40+        key,41+        nonce,42+        ciphertext,43+        `${tag.slice(0, -2)}a6`,44+        new Uint8Array(),45+      ),46+    ).rejects.toThrow();47+  });48+49+  // BLAKE3 official test_vectors.json, input_len=1024. The reference input is50+  // byte i % 251 and the first 32 output bytes are the production digest size.51+  it("matches the BLAKE3 reference vector across a chunk boundary", async () => {52+    const input = Uint8Array.from({ length: 1024 }, (_, index) => index % 251);53+    expect(await blake3(input)).toBe(54+      "42214739f095a406f3fc83deb889744ac00df831c10daa55189b5d121c855af7",55+    );56+  });57+});

view file

src/shared/noise-core-wasm/peach_noise_core_bg.wasmbinary

binary file, not shown

view file

src/shared/noise-core-wasm/peach_noise_core_bytes.ts+24 −24
@@ -7,7 +7,7 @@77   "YmcuanMnX193YmdfX193YmluZGdlbl90aHJvd18zNDRmNDJkMzIxMWM0NzY1AAMYLi9wZWFjaF9ub2lzZV9jb3JlX2JnLmpzHF9fd2JnX0Vycm9yXzkyYjI5",88   "YjA1NDhmOGI3NDYABAO4A7YDAwUVBwIFBQUQEBIJBQsNBAsJBAMIBQMCAwMNCwMBAwwFAwUFBQYFBggFAQEHAwkDBAUDBwMEBQMMBQMFAQcHBQUEFgUDEBAF",99   "DQ0UAwsCDQMNAwMNDQ0EBwsNAwcOBwUEARYEBQMECQMDDRQJCQkJBQMRERERBQoFCQcEDwUFBAULBQUJAwMJBQMFBwULCQMDBwcHBwUFAwsFBAsBDwUNBQsL",10-  "AwMDAQEECwEDCQkFAw0NEBAJBA0JAwUFCQMHBwcHBwMHBwcDAwMJBQUFAwMHBQEDAwMFBQUEBAUTAwoDAwMDAwEDBQUDAwsDBQkDAQEDAwYBBgMDBQUFBwYD",10+  "AwMDAQEECwEDCQkFAxANDRAJBA0JAwUFCQMHBwcHBwMHBwcDAwMJBQUFAwMHBQEDAwMFBQUEBAUTAwoDAwMDAwEDBQUDAwsDBQkDAQEDAwYBBgMDBQUFBwYD",1111   "AwEBAwQDCQQBAQEEAwIGAwMHAwMJAwkBDgUJAwMDAwUBBwcNBQUBBQUDAwQLCgEBAQMBFQMBAwQEAQUJBAQCAQEDBQkBCQEBAwEDAwEIBQEBAQEEBAQDAQQB",1212   "AQEDBAUEBQMBBQIDAwYCAgkEAQICAggDAwMDAwMDAwMDAwEDBAQEBgUCAgMGAAYBAQYCBAEEBAQDAwQBAQADAAEDAwMEAwQEBgMDBAMBAQEDAwEBBAACAgIC",1313   "AgIAAQABBAUBcAFwcAUDAQARBhkDfwFBgIDAAAt/AEHI3MIAC38AQfDcwgALB+MFFwZtZW1vcnkCABtfX3diZ193YXNtbm9pc2VzZXNzaW9uX2ZyZWUA6wEY",@@ -1031,11 +1031,11 @@10311031   "ACgCHHdxNgKs4EILlgMBAX8jAEHgEmsiCSQAIAkgAjYCBCAJIAE2AgAgCSADNgIIIAkgBDYCDCAJIAU2AhAgCSAGNgIUIAkgBzYCGCAJIAg2AhwgCSAJQd8S",10321032   "ajYC7AYgCSAJQd8SajYC6AYgCSAJQRxqNgLkBiAJIAlBGGo2AuAGIAkgCUHfEmo2AtwGIAkgCUHfEmo2AtgGIAkgCUEUajYC1AYgCSAJQRBqNgLQBiAJIAlB",10331033   "3xJqNgLMBiAJIAlB3xJqNgLIBiAJIAlBDGo2AsQGIAkgCUEIajYCwAYgCSAJQd8SajYCvAYgCSAJQd8SajYCuAYgCSAJQQRqNgK0BiAJIAk2ArAGIAlBIGog",1034-  "CUGwBmoQiQECQAJAIAkoAiBBg4CAgHhHDQBBASECIAkoAiQhAQwBCyAJQcgMakEEaiAJQSBqQZAG/AoAAEEAIQIgCUEANgKwBiAJQbAGakEEciAJQcgMakGU",1034+  "CUGwBmoQiAECQAJAIAkoAiBBg4CAgHhHDQBBASECIAkoAiQhAQwBCyAJQcgMakEEaiAJQSBqQZAG/AoAAEEAIQIgCUEANgKwBiAJQbAGakEEciAJQcgMakGU",10351035   "BvwKAAAgCUGwBmoQvgJBCGohAQsgACACNgIIIAAgAUEAIAIbNgIEIABBACABIAIbNgIAIAlB4BJqJAALlgMBAX8jAEHgEmsiCSQAIAkgAjYCBCAJIAE2AgAg",10361036   "CSADNgIIIAkgBDYCDCAJIAU2AhAgCSAGNgIUIAkgBzYCGCAJIAg2AhwgCSAJQd8SajYC7AYgCSAJQd8SajYC6AYgCSAJQRxqNgLkBiAJIAlBGGo2AuAGIAkg",10371037   "CUHfEmo2AtwGIAkgCUHfEmo2AtgGIAkgCUEUajYC1AYgCSAJQRBqNgLQBiAJIAlB3xJqNgLMBiAJIAlB3xJqNgLIBiAJIAlBDGo2AsQGIAkgCUEIajYCwAYg",1038-  "CSAJQd8SajYCvAYgCSAJQd8SajYCuAYgCSAJQQRqNgK0BiAJIAk2ArAGIAlBIGogCUGwBmoQiAECQAJAIAkoAiBBg4CAgHhHDQBBASECIAkoAiQhAQwBCyAJ",1038+  "CSAJQd8SajYCvAYgCSAJQd8SajYCuAYgCSAJQQRqNgK0BiAJIAk2ArAGIAlBIGogCUGwBmoQiQECQAJAIAkoAiBBg4CAgHhHDQBBASECIAkoAiQhAQwBCyAJ",10391039   "QcgMakEEaiAJQSBqQZAG/AoAAEEAIQIgCUEANgKwBiAJQbAGakEEciAJQcgMakGUBvwKAAAgCUGwBmoQvgJBCGohAQsgACACNgIIIAAgAUEAIAIbNgIEIABB",10401040   "ACABIAIbNgIAIAlB4BJqJAALuQMBAn8jAEGgAmsiAyQAAkACQAJAAkACQAJAAkACQAJAIAItAAAOBAABAgMACxCvA0HwAEEIEI8DIgJFDQQgAkEoakEAQcEA",10411041   "/AsAIAJCADcDICACQQApA7DCQDcDGCACQQApA6jCQDcDECACQQApA6DCQDcDCCACQQApA5jCQDcDAEHkw8AAIQQMAwsQrwNB4AFBEBCPAyICRQ0EIAJB0ABq",@@ -1090,7 +1090,7 @@10901090   "QCAEIANBHXZBBHFqIgUoAhAiAkUNAiADQQF0IQMgAiEEIAIoAgRBeHEgAUcNAAsLIAIoAggiAyAANgIMIAIgADYCCCAAQQA2AhggACACNgIMIAAgAzYCCA8L",10911091   "IAVBEGogADYCACAAIAQ2AhggACAANgIMIAAgADYCCAvdAgEBfyMAQeASayIHJAAgByACNgIMIAcgATYCCCAHIAM2AhAgByAENgIUIAcgBTYCGCAHIAY2Ahwg",10921092   "ByAHQd8SajYC3AYgByAHQd8SajYC2AYgByAHQRxqNgLUBiAHIAdBGGo2AtAGIAcgB0HfEmo2AswGIAcgB0HfEmo2AsgGIAcgB0EUajYCxAYgByAHQRBqNgLA",1093-  "BiAHIAdB3xJqNgK8BiAHIAdB3xJqNgK4BiAHIAdBDGo2ArQGIAcgB0EIajYCsAYgB0EgaiAHQbAGahCoAQJAAkAgBygCIEGDgICAeEcNAEEBIQIgBygCJCEB",1093+  "BiAHIAdB3xJqNgK8BiAHIAdB3xJqNgK4BiAHIAdBDGo2ArQGIAcgB0EIajYCsAYgB0EgaiAHQbAGahCmAQJAAkAgBygCIEGDgICAeEcNAEEBIQIgBygCJCEB",10941094   "DAELIAdByAxqQQRqIAdBIGpBkAb8CgAAQQAhAiAHQQA2ArAGIAdBsAZqQQRyIAdByAxqQZQG/AoAACAHQbAGahC+AkEIaiEBCyAAIAI2AgggACABQQAgAhs2",10951095   "AgQgAEEAIAEgAhs2AgAgB0HgEmokAAvdAgEBfyMAQeASayIHJAAgByACNgIMIAcgATYCCCAHIAM2AhAgByAENgIUIAcgBTYCGCAHIAY2AhwgByAHQd8SajYC",10961096   "3AYgByAHQd8SajYC2AYgByAHQRxqNgLUBiAHIAdBGGo2AtAGIAcgB0HfEmo2AswGIAcgB0HfEmo2AsgGIAcgB0EUajYCxAYgByAHQRBqNgLABiAHIAdB3xJq",@@ -1098,7 +1098,7 @@10981098   "QQRqIAdBIGpBkAb8CgAAQQAhAiAHQQA2ArAGIAdBsAZqQQRyIAdByAxqQZQG/AoAACAHQbAGahC+AkEIaiEBCyAAIAI2AgggACABQQAgAhs2AgQgAEEAIAEg",10991099   "Ahs2AgAgB0HgEmokAAvdAgEBfyMAQeASayIHJAAgByACNgIMIAcgATYCCCAHIAM2AhAgByAENgIUIAcgBTYCGCAHIAY2AhwgByAHQd8SajYC3AYgByAHQd8S",11001100   "ajYC2AYgByAHQRxqNgLUBiAHIAdBGGo2AtAGIAcgB0HfEmo2AswGIAcgB0HfEmo2AsgGIAcgB0EUajYCxAYgByAHQRBqNgLABiAHIAdB3xJqNgK8BiAHIAdB",1101-  "3xJqNgK4BiAHIAdBDGo2ArQGIAcgB0EIajYCsAYgB0EgaiAHQbAGahCmAQJAAkAgBygCIEGDgICAeEcNAEEBIQIgBygCJCEBDAELIAdByAxqQQRqIAdBIGpB",1101+  "3xJqNgK4BiAHIAdBDGo2ArQGIAcgB0EIajYCsAYgB0EgaiAHQbAGahCoAQJAAkAgBygCIEGDgICAeEcNAEEBIQIgBygCJCEBDAELIAdByAxqQQRqIAdBIGpB",11021102   "kAb8CgAAQQAhAiAHQQA2ArAGIAdBsAZqQQRyIAdByAxqQZQG/AoAACAHQbAGahC+AkEIaiEBCyAAIAI2AgggACABQQAgAhs2AgQgAEEAIAEgAhs2AgAgB0Hg",11031103   "EmokAAv6AgECfyMAQRBrIgIkACAAQQFqIQMCQAJAAkACQAJAAkACQAJAAkAgAC0AAA4IAAECAwQFBgcACyACIAM2AgQgAkEXNgIMIAIgAkEEajYCCCABKAIA",11041104   "IAEoAgRByITAACACQQhqECwhAAwHCyACIAM2AgQgAkEYNgIMIAIgAkEEajYCCCABKAIAIAEoAgRB2oTAACACQQhqECwhAAwGCyACIAM2AgQgAkEZNgIMIAIg",@@ -1247,7 +1247,7 @@12471247   "DCIGRQ0AIAUoAgghCAJAAkAgAg0AAkAgCEUNACAJIAggBhCCAwsgASADNgIEDAELIAQgAmwhBwJAAkACQCAEDQAgCEUNASAJIAggBhCCAwwBCyAJIAggBiAH",12481248   "EPACIQQMAQsgBiEECyAERQ0CIAEgBDYCBAsgASACNgIAC0GBgICAeCEGCyAAIAc2AgQgACAGNgIAIAVBEGokAAv+AQEIfyMAQSBrIgIkACACQRhqIAEoAgAo",12491249   "AgAgASgCBCgCABCZAiACKAIcIQMgAigCGCEEIAJBEGogASgCECgCACABKAIUKAIAEJkCIAIoAhQhBSACKAIQIQYgAkEIaiABKAIgKAIAIAEoAiQoAgAQmQIg",1250-  "AigCDCEHIAIoAgghCCACIAEoAjAoAgAgASgCNCgCABCZAiAAIAQgAyAGIAUgCCAHIAIoAgAiCSACKAIEIgEQtQECQCABRQ0AIAkgAUEBEIIDCwJAIAdFDQAg",1250+  "AigCDCEHIAIoAgghCCACIAEoAjAoAgAgASgCNCgCABCZAiAAIAQgAyAGIAUgCCAHIAIoAgAiCSACKAIEIgEQswECQCABRQ0AIAkgAUEBEIIDCwJAIAdFDQAg",12511251   "CCAHQQEQggMLAkAgBUUNACAGIAVBARCCAwsCQCADRQ0AIAQgA0EBEIIDCyACQSBqJAAL/gEBCH8jAEEgayICJAAgAkEYaiABKAIAKAIAIAEoAgQoAgAQmQIg",12521252   "AigCHCEDIAIoAhghBCACQRBqIAEoAhAoAgAgASgCFCgCABCZAiACKAIUIQUgAigCECEGIAJBCGogASgCICgCACABKAIkKAIAEJkCIAIoAgwhByACKAIIIQgg",12531253   "AiABKAIwKAIAIAEoAjQoAgAQmQIgACAEIAMgBiAFIAggByACKAIAIgkgAigCBCIBELYBAkAgAUUNACAJIAFBARCCAwsCQCAHRQ0AIAggB0EBEIIDCwJAIAVF",@@ -1279,12 +1279,12 @@12791279   "EGoQzwIgAiACKQMINwMYIAIgAikDADcDECACQTBqIAEgAkEQahAtIAIgAikAOCIHNwMIIAIgAikAMCIINwMAIAIgBzcDGCACIAg3AxBBDyEDIAJBEGohBANA",12801280   "IAQtAAAhBSAEIAJBEGogA2oiBi0AADoAACAGIAU6AAAgBEEBaiEEIANBf2oiA0EHRw0ACyACQTBqIAJBEGoQgAIgAEHgA2ogAkEwakIAQgAQswIgACABQeAD",12811281   "/AoAACACQdAAaiQAC9wBAQJ/IwBBwABrIgQkACAEIAM2AhggBCACNgIUIAQgATYCOCAEIARBP2o2AjQgBCAEQT9qNgIwIAQgBEEYajYCLCAEIARBFGo2Aigg",1282-  "BEEcaiAEQShqEOQBAkACQCAEKAIcQYCAgIB4Rw0AQQEhA0EAIQIgBCgCICEBQQAhBQwBCyAEIAQoAiQ2AjAgBCAEKQIcNwMoIARBCGogBEEoahDnAUEAIQEg",1282+  "BEEcaiAEQShqEOMBAkACQCAEKAIcQYCAgIB4Rw0AQQEhA0EAIQIgBCgCICEBQQAhBQwBCyAEIAQoAiQ2AjAgBCAEKQIcNwMoIARBCGogBEEoahDnAUEAIQEg",12831283   "BCgCCCECIAQoAgwhBUEAIQMLIAAgAzYCDCAAIAE2AgggACAFNgIEIAAgAjYCACAEQcAAaiQAC9wBAQJ/IwBBwABrIgQkACAEIAM2AhggBCACNgIUIAQgATYC",1284-  "OCAEIARBP2o2AjQgBCAEQT9qNgIwIAQgBEEYajYCLCAEIARBFGo2AiggBEEcaiAEQShqEOMBAkACQCAEKAIcQYCAgIB4Rw0AQQEhA0EAIQIgBCgCICEBQQAh",1284+  "OCAEIARBP2o2AjQgBCAEQT9qNgIwIAQgBEEYajYCLCAEIARBFGo2AiggBEEcaiAEQShqEOIBAkACQCAEKAIcQYCAgIB4Rw0AQQEhA0EAIQIgBCgCICEBQQAh",12851285   "BQwBCyAEIAQoAiQ2AjAgBCAEKQIcNwMoIARBCGogBEEoahDnAUEAIQEgBCgCCCECIAQoAgwhBUEAIQMLIAAgAzYCDCAAIAE2AgggACAFNgIEIAAgAjYCACAE",12861286   "QcAAaiQAC9wBAQJ/IwBBwABrIgQkACAEIAM2AhggBCACNgIUIAQgATYCOCAEIARBP2o2AjQgBCAEQT9qNgIwIAQgBEEYajYCLCAEIARBFGo2AiggBEEcaiAE",1287-  "QShqEOIBAkACQCAEKAIcQYCAgIB4Rw0AQQEhA0EAIQIgBCgCICEBQQAhBQwBCyAEIAQoAiQ2AjAgBCAEKQIcNwMoIARBCGogBEEoahDnAUEAIQEgBCgCCCEC",1287+  "QShqEOQBAkACQCAEKAIcQYCAgIB4Rw0AQQEhA0EAIQIgBCgCICEBQQAhBQwBCyAEIAQoAiQ2AjAgBCAEKQIcNwMoIARBCGogBEEoahDnAUEAIQEgBCgCCCEC",12881288   "IAQoAgwhBUEAIQMLIAAgAzYCDCAAIAE2AgggACAFNgIEIAAgAjYCACAEQcAAaiQAC9wBAQJ/IwBBwABrIgQkACAEIAM2AhggBCACNgIUIAQgATYCOCAEIARB",12891289   "P2o2AjQgBCAEQT9qNgIwIAQgBEEYajYCLCAEIARBFGo2AiggBEEcaiAEQShqEOUBAkACQCAEKAIcQYCAgIB4Rw0AQQEhA0EAIQIgBCgCICEBQQAhBQwBCyAE",12901290   "IAQoAiQ2AjAgBCAEKQIcNwMoIARBCGogBEEoahDnAUEAIQEgBCgCCCECIAQoAgwhBUEAIQMLIAAgAzYCDCAAIAE2AgggACAFNgIEIAAgAjYCACAEQcAAaiQA",@@ -1321,12 +1321,12 @@13211321   "IAU2AgRBgYCAgHghBwsgACAINgIEIAAgBzYCACAGQRBqJAALtgEBA38jAEEQayIGJABBACEHAkACQCAFDQAMAQsgAyACaiICIANJDQAgBkEEaiABIAIgASgC",13221322   "AEEBdCIHIAIgB0sbIgdBCEEEQQEgBUGBCEkbIAVBAUYbIgggByAISxsiByAEIAUQcAJAIAYoAgRBAUcNACAGKAIMIQggBigCCCEHDAELIAYoAgghBSABIAc2",13231323   "AgAgASAFNgIEQYGAgIB4IQcLIAAgCDYCBCAAIAc2AgAgBkEQaiQAC8YBAQZ/IwBBIGsiAiQAIAJBGGogASgCACgCACABKAIEKAIAEJkCIAIoAhwhAyACKAIY",1324-  "IQQgAkEQaiABKAIQKAIAIAEoAhQoAgAQmQIgAigCFCEFIAIoAhAhBiACQQhqIAEoAiAoAgAgASgCJCgCABCZAiAAIAQgAyAGIAUgAigCCCIHIAIoAgwiARC5",1324+  "IQQgAkEQaiABKAIQKAIAIAEoAhQoAgAQmQIgAigCFCEFIAIoAhAhBiACQQhqIAEoAiAoAgAgASgCJCgCABCZAiAAIAQgAyAGIAUgAigCCCIHIAIoAgwiARC0",13251325   "AQJAIAFFDQAgByABQQEQggMLAkAgBUUNACAGIAVBARCCAwsCQCADRQ0AIAQgA0EBEIIDCyACQSBqJAALxgEBBn8jAEEgayICJAAgAkEYaiABKAIAKAIAIAEo",13261326   "AgQoAgAQmQIgAigCHCEDIAIoAhghBCACQRBqIAEoAhAoAgAgASgCFCgCABCZAiACKAIUIQUgAigCECEGIAJBCGogASgCICgCACABKAIkKAIAEJkCIAAgBCAD",1327-  "IAYgBSACKAIIIgcgAigCDCIBELMBAkAgAUUNACAHIAFBARCCAwsCQCAFRQ0AIAYgBUEBEIIDCwJAIANFDQAgBCADQQEQggMLIAJBIGokAAvGAQEGfyMAQSBr",1327+  "IAYgBSACKAIIIgcgAigCDCIBELUBAkAgAUUNACAHIAFBARCCAwsCQCAFRQ0AIAYgBUEBEIIDCwJAIANFDQAgBCADQQEQggMLIAJBIGokAAvGAQEGfyMAQSBr",13281328   "IgIkACACQRhqIAEoAgAoAgAgASgCBCgCABCZAiACKAIcIQMgAigCGCEEIAJBEGogASgCECgCACABKAIUKAIAEJkCIAIoAhQhBSACKAIQIQYgAkEIaiABKAIg",1329-  "KAIAIAEoAiQoAgAQmQIgACAEIAMgBiAFIAIoAggiByACKAIMIgEQtAECQCABRQ0AIAcgAUEBEIIDCwJAIAVFDQAgBiAFQQEQggMLAkAgA0UNACAEIANBARCC",1329+  "KAIAIAEoAiQoAgAQmQIgACAEIAMgBiAFIAIoAggiByACKAIMIgEQuQECQCABRQ0AIAcgAUEBEIIDCwJAIAVFDQAgBiAFQQEQggMLAkAgA0UNACAEIANBARCC",13301330   "AwsgAkEgaiQAC7kBAQJ/IwBB4ABrIgEkACABQQhqQQBBMPwLACAAQn9BAUEAQfS2wABBICABQQhqQTAQZSECIAFBMDYCPCABIAI2AjgCQCACQTBHDQAgAUIA",13311331   "NwNYIAFCADcDUCABQgA3A0ggAUIANwNAIAFBwABqQSAgAUEIakEgQZS3wAAQwwIgAEEgIAFBwABqQSBBhMHAABDDAiABQeAAaiQADwtBACABQThqIAFBPGpB",13321332   "pLfAAEHNAEHMt8AAEKwCAAu5AQECfyMAQeAAayIBJAAgAUEIakEAQTD8CwAgAEJ/QQFBAEH0tsAAQSAgAUEIakEwEEYhAiABQTA2AjwgASACNgI4AkAgAkEw",@@ -1346,13 +1346,13 @@13461346   "AWpBKGogAUEoakEo/AoAACADQagBakHQAGogAUHQAGpBKPwKAAAgA0GoAWogAUEo/AoAAAJAIAJBf2oiAUUNAANAIANBCGogA0GoAWoQUyADQagBaiADQQhq",13471347   "ELQCIAFBf2oiAQ0ACwsgA0GgAmogA0GoAWoQUyAAIANBoAJqEIwCIANBwANqJAALlAEBA39BACECIABBAEHAAPwLAANAIAAgAmoiA0EBaiABLQAAIgRBBHY6",13481348   "AAAgAyAEQQ9xOgAAIAFBAWohASACQQJqIgJBwABHDQALIAAtAAAhAUEAIQIDQCAAIAJqIgMgASABQQhqIgRB8AFxazoAACADQQFqIgEgAS0AACAEwEEEdWoi",1349-  "AToAACACQQFqIgJBP0cNAAsLpAEBAX8jAEGgBmsiByQAIAcgASACIAMgBCAFIAZBACAHEA0CQAJAIAcoAgAiBkGDgICAeEcNACAHIAdBBHIiBSkCADcDkAYg",1350-  "ByAFKAIIIgU2ApgGIAcoApQGIAUQpQMhBSAHQZAGahC5AyAHQZAGahCaAwwBCyAHKAIEIQUgAEEIaiAHQQhqQYgG/AoAAAsgACAGNgIAIAAgBTYCBCAHQaAG",1349+  "AToAACACQQFqIgJBP0cNAAsLpAEBAX8jAEGgBmsiCSQAIAkgASACIAMgBCAFIAYgByAIEAwCQAJAIAkoAgAiCEGDgICAeEcNACAJIAlBBHIiBykCADcDkAYg",1350+  "CSAHKAIIIgc2ApgGIAkoApQGIAcQpQMhByAJQZAGahC5AyAJQZAGahCaAwwBCyAJKAIEIQcgAEEIaiAJQQhqQYgG/AoAAAsgACAINgIAIAAgBzYCBCAJQaAG",13511351   "aiQAC6QBAQF/IwBBoAZrIgckACAHIAEgAiADIAQgBSAGQQAgBxAMAkACQCAHKAIAIgZBg4CAgHhHDQAgByAHQQRyIgUpAgA3A5AGIAcgBSgCCCIFNgKYBiAH",13521352   "KAKUBiAFEKUDIQUgB0GQBmoQuQMgB0GQBmoQmgMMAQsgBygCBCEFIABBCGogB0EIakGIBvwKAAALIAAgBjYCACAAIAU2AgQgB0GgBmokAAukAQEBfyMAQaAG",1353-  "ayIJJAAgCSABIAIgAyAEIAUgBiAHIAgQDQJAAkAgCSgCACIIQYOAgIB4Rw0AIAkgCUEEciIHKQIANwOQBiAJIAcoAggiBzYCmAYgCSgClAYgBxClAyEHIAlB",1354-  "kAZqELkDIAlBkAZqEJoDDAELIAkoAgQhByAAQQhqIAlBCGpBiAb8CgAACyAAIAg2AgAgACAHNgIEIAlBoAZqJAALpAEBAX8jAEGgBmsiCSQAIAkgASACIAMg",1355-  "BCAFIAYgByAIEAwCQAJAIAkoAgAiCEGDgICAeEcNACAJIAlBBHIiBykCADcDkAYgCSAHKAIIIgc2ApgGIAkoApQGIAcQpQMhByAJQZAGahC5AyAJQZAGahCa",1353+  "ayIHJAAgByABIAIgAyAEIAUgBkEAIAcQDQJAAkAgBygCACIGQYOAgIB4Rw0AIAcgB0EEciIFKQIANwOQBiAHIAUoAggiBTYCmAYgBygClAYgBRClAyEFIAdB",1354+  "kAZqELkDIAdBkAZqEJoDDAELIAcoAgQhBSAAQQhqIAdBCGpBiAb8CgAACyAAIAY2AgAgACAFNgIEIAdBoAZqJAALpAEBAX8jAEGgBmsiCSQAIAkgASACIAMg",1355+  "BCAFIAYgByAIEA0CQAJAIAkoAgAiCEGDgICAeEcNACAJIAlBBHIiBykCADcDkAYgCSAHKAIIIgc2ApgGIAkoApQGIAcQpQMhByAJQZAGahC5AyAJQZAGahCa",13561356   "AwwBCyAJKAIEIQcgAEEIaiAJQQhqQYgG/AoAAAsgACAINgIAIAAgBzYCBCAJQaAGaiQAC30BAn4gACADKQMAIAEpAwAiBXwgAikDCCIGQj+JIAZCOImFIAZC",13571357   "B4iFfCAEKQMAIgZCLYkgBkIDiYUgBkIGiIV8NwMAIAAgBUI/iSAFQjiJhSAFQgeIhSABKQMIfCADKQMIfCAEKQMIIgVCLYkgBUIDiYUgBUIGiIV8NwMIC5gB",13581358   "AQR/IwBBEGsiAiQAQQEhAwJAIAEoAgAiBEEnIAEoAgQiBSgCECIBEQQADQAgAiAAKAIAQYECECgCQAJAIAItAA0iA0GBAUkNACAEIAIoAgAgAREEAEUNAUEB",@@ -1370,10 +1370,10 @@13701370   "BUGgBmokAAuPAQECfyMAQaAGayICJAACQAJAIAFFDQAgAUF4aiIDKAIAQQFHDQEgAkEIaiABQZgG/AoAACADQQA2AgACQCADQX9GDQAgAUF8aiIBIAEoAgBB",13711371   "f2oiATYCACABDQAgA0GgBkEIEIIDCyAAIAJBEGpBkAb8CgAAIAJBoAZqJAAPCxCXAwALQamAwABBPxCYAwALjwEBBH8jAEEQayIEJAAgBCADNgIMIAQgAjYC",13721372   "CAJAIAEoAhAiBQ0AQeinwAAQigMACyABKAIMIQYgBEEIahDoAiEHIABBADYCHCAAIAM2AhggACACNgIUIAAgASgCEDYCECAAIAEpAgg3AgggACABKQIANwIA",1373-  "IAAgByAGIAVuIgEgByABSRs2AiAgBEEQaiQAC48BAQF/IwBBIGsiBCQAIAQgASACIAMQMCAEQQRqIQMCQAJAIAQoAgBBAUcNACAEIAMpAgA3AxAgBCADKAII",1373+  "IAAgByAGIAVuIgEgByABSRs2AiAgBEEQaiQAC48BAQF/IwBBIGsiBCQAIAQgASACIAMQQSAEQQRqIQMCQAJAIAQoAgBBAUcNACAEIAMpAgA3AxAgBCADKAII",13741374   "IgM2AhggBCgCFCADEKUDIQMgBEEQahC5AyAEQRBqEJoDIABBgICAgHg2AgAgACADNgIEDAELIAAgAygCCDYCCCAAIAMpAgA3AgALIARBIGokAAuPAQEBfyMA",1375-  "QSBrIgQkACAEIAEgAiADEEEgBEEEaiEDAkACQCAEKAIAQQFHDQAgBCADKQIANwMQIAQgAygCCCIDNgIYIAQoAhQgAxClAyEDIARBEGoQuQMgBEEQahCaAyAA",1376-  "QYCAgIB4NgIAIAAgAzYCBAwBCyAAIAMoAgg2AgggACADKQIANwIACyAEQSBqJAALjwEBAX8jAEEgayIEJAAgBCABIAIgAxBCIARBBGohAwJAAkAgBCgCAEEB",1375+  "QSBrIgQkACAEIAEgAiADEEIgBEEEaiEDAkACQCAEKAIAQQFHDQAgBCADKQIANwMQIAQgAygCCCIDNgIYIAQoAhQgAxClAyEDIARBEGoQuQMgBEEQahCaAyAA",1376+  "QYCAgIB4NgIAIAAgAzYCBAwBCyAAIAMoAgg2AgggACADKQIANwIACyAEQSBqJAALjwEBAX8jAEEgayIEJAAgBCABIAIgAxAwIARBBGohAwJAAkAgBCgCAEEB",13771377   "Rw0AIAQgAykCADcDECAEIAMoAggiAzYCGCAEKAIUIAMQpQMhAyAEQRBqELkDIARBEGoQmgMgAEGAgICAeDYCACAAIAM2AgQMAQsgACADKAIINgIIIAAgAykC",13781378   "ADcCAAsgBEEgaiQAC48BAQF/IwBBIGsiBCQAIAQgASACIAMQNyAEQQRqIQMCQAJAIAQoAgBBAUcNACAEIAMpAgA3AxAgBCADKAIIIgM2AhggBCgCFCADEKUD",13791379   "IQMgBEEQahC5AyAEQRBqEJoDIABBgICAgHg2AgAgACADNgIEDAELIAAgAygCCDYCCCAAIAMpAgA3AgALIARBIGokAAuGAQEBfyMAQTBrIgIkACACQgA3AxAg",@@ -1401,9 +1401,9 @@14011401   "CGoQJSADQQhqIANBMGoQayACQX9qIgINAAsLIAAgA0EIakEo/AoAACADQYABaiQAC4oBAQN/IwBBEGsiASQAAkAgACgCACICKAIEIgNBAXFFDQAgAigCACEC",14021402   "IAEgA0EBdjYCBCABIAI2AgAgAUG4wsIAIAAoAgQgACgCCCIALQAIIAAtAAkQigEACyABQYCAgIB4NgIAIAEgADYCDCABQdTCwgAgACgCBCAAKAIIIgAtAAgg",14031403   "AC0ACRCKAQALhgEAIABBADYCNCAAQgA3AiwgAEIANwIkIAAgASkAGDcCCCAAIAEpABA3AgAgACABKAAAQf///x9xNgIQIAAgASgADEEIdkH//z9xNgIgIAAg",1404-  "ASgACUEGdkH//8AfcTYCHCAAIAEoAAZBBHZB/4H/H3E2AhggACABKAADQQJ2QYP+/x9xNgIUC3wBAn8jAEEgayICJAAgAkEEaiABEPkBAkACQCACKAIEQYCA",1404+  "ASgACUEGdkH//8AfcTYCHCAAIAEoAAZBBHZB/4H/H3E2AhggACABKAADQQJ2QYP+/x9xNgIUC3wBAn8jAEEgayICJAAgAkEEaiABEPgBAkACQCACKAIEQYCA",14051405   "gIB4Rw0AQQAhAQwBCyACIAIpAgQ3AxAgAiACKAIMIgE2AhggAigCFCABEKUDIQMgAkEQahC5AyACQRBqEJoDQQEhAQsgACADNgIEIAAgATYCACACQSBqJAAL",1406-  "fAECfyMAQSBrIgIkACACQQRqIAEQ+AECQAJAIAIoAgRBgICAgHhHDQBBACEBDAELIAIgAikCBDcDECACIAIoAgwiATYCGCACKAIUIAEQpQMhAyACQRBqELkD",1406+  "fAECfyMAQSBrIgIkACACQQRqIAEQ+QECQAJAIAIoAgRBgICAgHhHDQBBACEBDAELIAIgAikCBDcDECACIAIoAgwiATYCGCACKAIUIAEQpQMhAyACQRBqELkD",14071407   "IAJBEGoQmgNBASEBCyAAIAM2AgQgACABNgIAIAJBIGokAAt/AQF/IAItAAAhAxCvA0EgQQEQjwMhAgJAAkACQCADQQFHDQACQCACRQ0AQbTFwAAhAwwCC0EB",14081408   "QSAQnwMACyACRQ0BQZTFwAAhAwsgAkIANwAYIAJCADcAECACQgA3AAggAkIANwAAIAAgAzYCBCAAIAI2AgAPC0EBQSAQnwMAC4ABAQF/IwBBMGsiAyQAIAIg",14091409   "Ai0AAEH4AXE6AAAgAiACLQAfQT9xQcAAcjoAHyADIAIpAAg3AwggAyACKQAQNwMQIAMgAikAADcDACADIAIpABg3AxggA0EBNgIsIANCgICAgIAgNwIkIAMg",@@ -1464,8 +1464,8 @@14641464   "AvTcQkEBajYC9NxCQQIhAQsgAQtFAQF/IAAgAhDKAiAAKAIIIQMCQCACRQ0AAkAgAkUNACAAKAIEIANqIAEgAvwKAAALIAAoAgghAwsgACADIAJqNgIIQQAL",14651465   "QwIBfwF+IwBBIGsiAiQAIAJBFGogARD0ASACQQhqIAIoAhQQ1gEgAikDCCEDIAJBFGoQrgIgACADNwMAIAJBIGokAAtDAgF/AX4jAEEgayICJAAgAkEUaiAB",14661466   "EPQBIAJBCGogAigCFBDXASACKQMIIQMgAkEUahCuAiAAIAM3AwAgAkEgaiQAC0UBAX8jAEEQayIEJAAgBEEIaiABKAIAIAIgAyABKAIEKAIcEQcAIAQtAAkh",1467-  "ASAAIAQtAAg6AAAgACABOgABIARBEGokAAtAAQJ/IwBBEGsiAiQAIAJBCGogARCQAiACKAIMIQEgACACKAIIIgM2AgQgACABQQAgA0EBcRs2AgAgAkEQaiQA",1468-  "C0ABAn8jAEEQayICJAAgAkEIaiABEI8CIAIoAgwhASAAIAIoAggiAzYCBCAAIAFBACADQQFxGzYCACACQRBqJAALRAEBfyMAQRBrIgUkACAFQQhqIAAgASAC",1467+  "ASAAIAQtAAg6AAAgACABOgABIARBEGokAAtAAQJ/IwBBEGsiAiQAIAJBCGogARCPAiACKAIMIQEgACACKAIIIgM2AgQgACABQQAgA0EBcRs2AgAgAkEQaiQA",1468+  "C0ABAn8jAEEQayICJAAgAkEIaiABEJACIAIoAgwhASAAIAIoAggiAzYCBCAAIAFBACADQQFxGzYCACACQRBqJAALRAEBfyMAQRBrIgUkACAFQQhqIAAgASAC",14691469   "IAMgBBCkAQJAIAUoAggiBEGBgICAeEYNACAEIAUoAgwQ3AIACyAFQRBqJAALRwEBfyMAQaABayICJAAgASABLQAAQfgBcToAACABIAEtAB9BP3FBwAByOgAf",14701470   "IAJBoNLAACABEEMgACACEK4BIAJBoAFqJAALRAEBfyMAQRBrIgUkACAFQQhqIAAgASACIAMgBBClAQJAIAUoAggiBEGBgICAeEYNACAEIAUoAgwQ3AIACyAF",14711471   "QRBqJAALUQEBfwJAAkACQCAAKAIAIgFBgICAgHggAUGAgICAeEsbQf////8HcQ4CAAECCyABQYCAgIB4Rg0BIAAQrQEPCyAAQQhqELACIABBIGoQsAILCz8B",

view file