From d83af55987a94e2fc6b68c105006320e3d715dd6 Mon Sep 17 00:00:00 2001 From: Johannes Date: Tue, 15 Dec 2020 23:00:19 +0100 Subject: [PATCH 1/2] firefox: update to 84.0. --- srcpkgs/firefox/patches/qcms_neon.patch | 65 ------------------ srcpkgs/firefox/patches/rust-configure.patch | 72 ++++++++++++-------- srcpkgs/firefox/patches/sndio.patch | 14 ++-- srcpkgs/firefox/patches/wasm.patch | 62 ----------------- srcpkgs/firefox/template | 6 +- 5 files changed, 54 insertions(+), 165 deletions(-) delete mode 100644 srcpkgs/firefox/patches/qcms_neon.patch delete mode 100644 srcpkgs/firefox/patches/wasm.patch diff --git a/srcpkgs/firefox/patches/qcms_neon.patch b/srcpkgs/firefox/patches/qcms_neon.patch deleted file mode 100644 index 7b19e0c30f7..00000000000 --- a/srcpkgs/firefox/patches/qcms_neon.patch +++ /dev/null @@ -1,65 +0,0 @@ -this is still experimental in rust-1.46 for arm and aarch64 - ---- gfx/qcms/src/lib.rs.orig 2020-11-17 22:03:09.868746869 +0100 -+++ gfx/qcms/src/lib.rs 2020-11-17 22:03:27.795605120 +0100 -@@ -47,8 +47,8 @@ - pub mod transform; - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] - pub mod transform_avx; --#[cfg(any(target_arch = "aarch64", target_arch = "arm"))] --pub mod transform_neon; -+//#[cfg(any(target_arch = "aarch64", target_arch = "arm"))] -+//pub mod transform_neon; - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] - pub mod transform_sse2; - pub mod transform_util; ---- gfx/qcms/src/transform.rs.orig 2020-11-17 22:15:03.413104913 +0100 -+++ gfx/qcms/src/transform.rs 2020-11-17 22:15:17.128996464 +0100 -@@ -21,11 +21,11 @@ - // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - --#[cfg(any(target_arch = "arm", target_arch = "aarch64"))] --use crate::transform_neon::{ -- qcms_transform_data_bgra_out_lut_neon, qcms_transform_data_rgb_out_lut_neon, -- qcms_transform_data_rgba_out_lut_neon, --}; -+//#[cfg(any(target_arch = "arm", target_arch = "aarch64"))] -+//use crate::transform_neon::{ -+// qcms_transform_data_bgra_out_lut_neon, qcms_transform_data_rgb_out_lut_neon, -+// qcms_transform_data_rgba_out_lut_neon, -+//}; - use crate::{ - chain::qcms_chain_transform, - double_to_s15Fixed16Number, -@@ -1424,18 +1424,18 @@ - (*transform).transform_fn = Some(qcms_transform_data_bgra_out_lut_sse2) - } - } -- } else if cfg!(any(target_arch = "arm", target_arch = "aarch64")) && qcms_supports_neon -- { -- #[cfg(any(target_arch = "arm", target_arch = "aarch64"))] -- { -- if in_type == QCMS_DATA_RGB_8 { -- (*transform).transform_fn = Some(qcms_transform_data_rgb_out_lut_neon) -- } else if in_type == QCMS_DATA_RGBA_8 { -- (*transform).transform_fn = Some(qcms_transform_data_rgba_out_lut_neon) -- } else if in_type == QCMS_DATA_BGRA_8 { -- (*transform).transform_fn = Some(qcms_transform_data_bgra_out_lut_neon) -- } -- } -+ // } else if cfg!(any(target_arch = "arm", target_arch = "aarch64")) && qcms_supports_neon -+ // { -+ // #[cfg(any(target_arch = "arm", target_arch = "aarch64"))] -+ // { -+ // if in_type == QCMS_DATA_RGB_8 { -+ // (*transform).transform_fn = Some(qcms_transform_data_rgb_out_lut_neon) -+ // } else if in_type == QCMS_DATA_RGBA_8 { -+ // (*transform).transform_fn = Some(qcms_transform_data_rgba_out_lut_neon) -+ // } else if in_type == QCMS_DATA_BGRA_8 { -+ // (*transform).transform_fn = Some(qcms_transform_data_bgra_out_lut_neon) -+ // } -+ // } - } else if in_type == QCMS_DATA_RGB_8 { - (*transform).transform_fn = Some(qcms_transform_data_rgb_out_lut_precache) - } else if in_type == QCMS_DATA_RGBA_8 { diff --git a/srcpkgs/firefox/patches/rust-configure.patch b/srcpkgs/firefox/patches/rust-configure.patch index 84c385dbc9c..78857179f4d 100644 --- a/srcpkgs/firefox/patches/rust-configure.patch +++ b/srcpkgs/firefox/patches/rust-configure.patch @@ -6,19 +6,19 @@ instead use what is set in RUST_TARGET Skip extra checks on cross builds (broken for arm*) ---- build/moz.configure/rust.configure.orig 2019-10-17 04:19:59.000000000 +0700 -+++ build/moz.configure/rust.configure 2019-10-22 11:48:55.616022140 +0700 -@@ -81,9 +81,6 @@ - +--- build/moz.configure/rust.configure 2020-12-12 01:35:33.000000000 +0100 ++++ build/moz.configure/rust.configure 2020-12-15 19:45:16.467750787 +0100 +@@ -91,9 +91,6 @@ return unwrap --rustc = unwrap_rustup(rustc, 'rustc') --cargo = unwrap_rustup(cargo, 'cargo') + +-rustc = unwrap_rustup(rustc, "rustc") +-cargo = unwrap_rustup(cargo, "cargo") - - set_config('CARGO', cargo) - set_config('RUSTC', rustc) -@@ -225,7 +222,9 @@ + set_config("CARGO", cargo) + set_config("RUSTC", rustc) +@@ -260,7 +257,9 @@ data.setdefault(key, []).append(namespace(rust_target=t, target=info)) return data @@ -26,10 +26,10 @@ Skip extra checks on cross builds (broken for arm*) +@imports('os') +@imports(_from='mozbuild.util', _import='ensure_unicode') +@imports(_from='mozbuild.util', _import='system_encoding') - def detect_rustc_target(host_or_target, compiler_info, arm_target, rust_supported_targets): - # Rust's --target options are similar to, but not exactly the same - # as, the autoconf-derived targets we use. An example would be that -@@ -340,13 +339,13 @@ + def detect_rustc_target( + host_or_target, compiler_info, arm_target, rust_supported_targets + ): +@@ -382,12 +381,12 @@ return None @@ -37,50 +37,60 @@ Skip extra checks on cross builds (broken for arm*) + rustc_target = os.environ['RUST_TARGET'] if rustc_target is None: - die("Don't know how to translate {} for rustc".format( - host_or_target.alias)) + die("Don't know how to translate {} for rustc".format(host_or_target.alias)) - return rustc_target + return ensure_unicode(rustc_target, system_encoding) - @imports('os') -@@ -369,26 +368,6 @@ + @imports("os") +@@ -410,35 +409,6 @@ os.write(in_fd, ensure_binary(source)) os.close(in_fd) - - cmd = [ - rustc, -- '--crate-type', 'staticlib', +- "--crate-type", +- "staticlib", - target_arg, -- '-o', out_path, +- "-o", +- out_path, - in_path, - ] - - def failed(): -- die(dedent('''\ +- die( +- dedent( +- """\ - Cannot compile for {} with {} - The target may be unsupported, or you may not have - a rust std library for that target installed. Try: - - rustup target add {} -- '''.format(host_or_target.alias, rustc, rustc_target))) +- """.format( +- host_or_target.alias, rustc, rustc_target +- ) +- ) +- ) +- - check_cmd_output(*cmd, onerror=failed) - if not os.path.exists(out_path) or os.path.getsize(out_path) == 0: - failed() finally: os.remove(in_path) os.remove(out_path) -@@ -403,20 +382,7 @@ - rustc_target = detect_rustc_target(host, compiler_info, arm_target, - rust_supported_targets) +@@ -462,28 +432,7 @@ + host, compiler_info, arm_target, rust_supported_targets + ) if rustc_target != rustc_host: - if host.alias == rustc_target: - configure_host = host.alias - else: -- configure_host = '{}/{}'.format(host.alias, rustc_target) -- die(dedent('''\ +- configure_host = "{}/{}".format(host.alias, rustc_target) +- die( +- dedent( +- """\ - The rust compiler host ({rustc}) is not suitable for the configure host ({configure}). - - You can solve this by: @@ -88,9 +98,15 @@ Skip extra checks on cross builds (broken for arm*) - mozconfig and adding "ac_add_options --host={rustc}". - * Or, install the rust toolchain for {configure}, if supported, by running - "rustup default stable-{rustc_target}" -- '''.format(rustc=rustc_host, configure=configure_host, rustc_target=rustc_target))) +- """.format( +- rustc=rustc_host, +- configure=configure_host, +- rustc_target=rustc_target, +- ) +- ) +- ) - assert_rust_compile(host, rustc_target, rustc) + return rustc_host return rustc_target - @depends(rustc, target, c_compiler, rust_supported_targets, arm_target, when=rust_compiler) + diff --git a/srcpkgs/firefox/patches/sndio.patch b/srcpkgs/firefox/patches/sndio.patch index c5e5c486dd1..41c97e6e006 100644 --- a/srcpkgs/firefox/patches/sndio.patch +++ b/srcpkgs/firefox/patches/sndio.patch @@ -42,11 +42,11 @@ if CONFIG['OS_TARGET'] == 'Darwin': --- build/moz.configure/old.configure 2020-06-30 12:17:04.087609070 +0200 +++ - 2020-06-30 12:18:26.027756310 +0200 -@@ -210,6 +210,7 @@ +@@ -88,6 +88,7 @@ @old_configure_options( - '--cache-file', - '--datadir', -+ '--enable-sndio', - '--enable-crashreporter', - '--enable-dbus', - '--enable-debug-js-modules', + "--cache-file", + "--datadir", ++ "--enable-sndio", + "--enable-crashreporter", + "--enable-dbus", + "--enable-debug-js-modules", diff --git a/srcpkgs/firefox/patches/wasm.patch b/srcpkgs/firefox/patches/wasm.patch deleted file mode 100644 index a905aaa1f96..00000000000 --- a/srcpkgs/firefox/patches/wasm.patch +++ /dev/null @@ -1,62 +0,0 @@ -From 71597faac0fde4f608a60dd610d0cefac4972cc3 Mon Sep 17 00:00:00 2001 -From: Jonathan Wakely -Date: Tue, 17 Nov 2020 12:56:17 +0000 -Subject: [PATCH] Fix GCC build failure in WasmBaselineCompile.cpp - -GCC does not yet implement C++ Core DR 727, so explicit specializations -at class scope aren't allowed. This replaces it with a different C++17 -feature: using if-constexpr inside the function body and checking the -template argument there. - -See https://bugzilla.mozilla.org/show_bug.cgi?id=1677690 -and https://bugzilla.redhat.com/show_bug.cgi?id=1897675 ---- - js/src/wasm/WasmBaselineCompile.cpp | 24 ++++++++++-------------- - 1 file changed, 10 insertions(+), 14 deletions(-) - -diff --git a/js/src/wasm/WasmBaselineCompile.cpp b/js/src/wasm/WasmBaselineCompile.cpp -index 676dbfa73d33a..b82aa242d3c6b 100644 ---- js/src/wasm/WasmBaselineCompile.cpp -+++ js/src/wasm/WasmBaselineCompile.cpp -@@ -655,15 +655,13 @@ class BaseRegAlloc { - - template - bool hasFPU() { -- return availFPU.hasAny::value>(); -- } -- - #ifdef RABALDR_SIDEALLOC_V128 -- template <> -- bool hasFPU() { -- MOZ_CRASH("Should not happen"); -- } -+ if constexpr (t == MIRType::Simd128) -+ MOZ_CRASH("Should not happen"); -+ else - #endif -+ return availFPU.hasAny::value>(); -+ } - - bool isAvailableGPR(Register r) { return availGPR.has(r); } - -@@ -746,15 +744,13 @@ class BaseRegAlloc { - - template - FloatRegister allocFPU() { -- return availFPU.takeAny::value>(); -- } -- - #ifdef RABALDR_SIDEALLOC_V128 -- template <> -- FloatRegister allocFPU() { -- MOZ_CRASH("Should not happen"); -- } -+ if constexpr (t == MIRType::Simd128) -+ MOZ_CRASH("Should not happen"); -+ else - #endif -+ return availFPU.takeAny::value>(); -+ } - - void freeGPR(Register r) { availGPR.add(r); } - diff --git a/srcpkgs/firefox/template b/srcpkgs/firefox/template index 7d792ca84e7..51ee80d2a5d 100644 --- a/srcpkgs/firefox/template +++ b/srcpkgs/firefox/template @@ -3,15 +3,15 @@ # THIS PKG MUST BE SYNCHRONIZED WITH "srcpkgs/firefox-i18n". # pkgname=firefox -version=83.0 -revision=2 +version=84.0 +revision=1 build_helper="rust" short_desc="Mozilla Firefox web browser" maintainer="Johannes " license="MPL-2.0, GPL-2.0-or-later, LGPL-2.1-or-later" homepage="https://www.mozilla.org/firefox/" distfiles="${MOZILLA_SITE}/${pkgname}/releases/${version}/source/${pkgname}-${version}.source.tar.xz" -checksum=d69e84e8b8449f828683d274c24e03095858362bfed21b08bdd7fe715eea5398 +checksum=23273ef0165b243f5d0908c38e7854d38070282c9b526e8d93b7503cd5f69138 lib32disabled=yes From 661a220a5cb1325cbe87ab85fa662bf603c24695 Mon Sep 17 00:00:00 2001 From: Johannes Date: Tue, 15 Dec 2020 23:02:36 +0100 Subject: [PATCH 2/2] firefox-i18n: update to 84.0. --- srcpkgs/firefox-i18n/template | 194 +++++++++++++++++----------------- 1 file changed, 97 insertions(+), 97 deletions(-) diff --git a/srcpkgs/firefox-i18n/template b/srcpkgs/firefox-i18n/template index 2710c0df861..9cf33c4b1c4 100644 --- a/srcpkgs/firefox-i18n/template +++ b/srcpkgs/firefox-i18n/template @@ -1,6 +1,6 @@ # Template file for 'firefox-i18n' pkgname=firefox-i18n -version=83.0 +version=84.0 revision=1 build_style=meta short_desc="Firefox language packs" @@ -140,99 +140,99 @@ _pkgtmpl() { } } -checksum="e8dcb0ec4400349637b1f333012a4df729080cd5fbdb7478414fc53875b54d16 - e43201660ea435d2b9c9059c012e86514e9c9a20890131847a9f39206b23f657 - a6f12f990523adf3eccbcae2c71f32f8499682f4672d902763c8eb53da450653 - c68247fab37710876f19e6ad5c5a3372b74f24805512c0d99b0b3d6a5590a733 - f8498364d19f34bdf4b34bace6683baf17854975040dfef0e4d88c7eecb2223b - 7f8a503eb25f7960efdc00cc70d4ce4493eec898051e5d2394914925b10a5093 - b733dfa35006b1dca5c82c8945345b0ddf9a8ed653da0b3d65cebacb52cc68a0 - d3aabab8b4dc6ce7c93295f05fb438ba0802435ad963a68947d87e10f8a8bf82 - f73791ddb70e0dd817d5a5b2171cd2f731482eec2c3260023b66699e562fcab9 - a19aa3cb4a08c33ef27493a2e8e4f139b9fbe1c685a2eb6b9c1a8d65fb826854 - 6143acdde106ce3741ff3e9a8728ed9b0b862c86791502803761271ab39c7fdf - 5f99d37dd82f43ffb87110cd531cbbb18d9626747cf7734037bb12b3e8142487 - 11b39e02beb72dc43172a223a51404cd44802017b99ddcae2dcd015f976ecf73 - ba524fbd87c9d2c8202ad5d813f06a37bf663fafec9672a1c1fef081b7b80878 - 2261f199e1f871b2f1f9002e246d66c9daf5abb7663e7e5397acd3d68004dce9 - e0a8adbf1d3016b43e6cf6bc4b3dc3968815b42ddd437bc5663990ef8fde2145 - 8089bc2fb7529b20cbed40e0ecd8945cbf03942207d1e0fbdd1a1dab117c56da - 0abf6811aa5cdb17ea711f9942c0ec31960ab2888d5f444d0352f5ba605ec6de - 3be1ca38db44e1dfe9498d8ef9aef03c0249540385569d4b96ab703ea0d11dad - 7b7ca80ffa8836c8bfa3af5bdc5a0ecef7829abbcdf0f2a7459b7b456d7b385b - 9cbba55711a62cb017e0cfaf74158956e39ef2b5912e50b28ad52eec56032509 - aa0337945a17ddce4e0b67f86a7f92596daf890995a63fdbe9d7f0a1c3cf00b6 - 02ab1b80c16f8eea11a51fe155eebb48799dff08e6369c51ac7195a78ce2a5f4 - 0a5433ab6abb9d6d57feeb6f437c560afd312cd450ec784b4a68a9e9f3c9bd2b - 16334002a2a3c42890547101c35bc7eb64bd220704241475abc4f975e242a42d - 3dac17dde3583cbfcf1e8e62a03e6c5844769a2a5b3d6d2256a9c726cf64b9c7 - c5d974818cfeeaf54a4126270c8867bd5f9164395c0952bbc5050b5bad3ad891 - 0da793b3d786c2073e5230f8110f855e302b71eb1e6c20273e01d15627750ecb - d457f4a168e39bf32ae49388cb9c4acb65eeba898669d4cf024d0782117018d8 - 90081533700831a47d1a8a9f801284269fc8102325294e9c5b9a6ca9f81fb2c6 - 189305fc3ab8627fc2799ab987b6dc5b6508ecbc49490a008c9548559b75e3cd - 70ec3f2c542a50ed2ba97943a55d121af05beb84dca9a6b0e3a8697c645b20b7 - 0d0f882d7b1c99ecb4375f07a6ac442ce04214e1692f879df0f8f472203655c1 - 8d9a8acbb05c4f691a3056069828a893bb9491f48cc235ce200316ac505370bd - 6fa3d4de1b3732601a64743a48411904b0eddb3feeb25f4ce7318ea4991cbc21 - 3bb0201f8ff0ce84cd1968b6e7151db7f526ffdad93eab36f50acd92f18a55d2 - 838e2a7f62edd74b4167b08ae11f13bd8b48964524500534b8dda7dc705d8f3f - 4905047d278100d0b72955e896a6c1f3cc093a52f73e8943b7eaafd05f04e5ae - 31f07b11c9a5348ea4a3f2c3b6e9068c0284b86de158c2bedcc0340f31ef3000 - 17fe88532c0c1712c5905341fe0a7fb6f1383a9b2574e0032b99738aeff9dd66 - 6cc9d24ef3d883acd1751f537497b0ed5f066de5ee5fc5af03d820a9eeae35bc - 9171e1594b89d47da9ee00bd5bbe06868532e0ef2edb7434af4fd3424e090998 - 00d77a69ef4c83ede3264a5214b52bc65c5706fa5185e1371c557cc15684b2e8 - 8224953de8e38141bb32e47d2f76ddca38d30c02e91df8f8122d879cd37300e4 - 5915395bd9697794c015505b0c3a3b2eea5f745a8adcba71589878d93700db76 - 46b9dff874c6d112985548f72da8c32508c61bd690c7403ddfc85fa2156657d2 - 48373d636158147b34a8b18639339f413b718bc5185ac5b487f699598c674aee - 34f74360dc392e736e62ef3d121b7bed9fffc6b2196d27f57a6b136528a35d0b - c8161bef9de35a5b3a976f50ec6b10767614768b97137174dee4b3d151e9a305 - b7dc7748700175786f7035608fa0eb04eae7dfe32515d955f7bde11e0bae3ea1 - 14d3bdd086fecbcc90fededf60253cae9190849ecd077e46df66a460859428a5 - 0b8a38c915d8671638fe179a2719c15f8692700d102db373db5c1cf2a8bd0f5f - a8dabc3940132c08a04017450720b257fd3f27ae3d1ea45a9d0eec1353212697 - 33f51f9389556ce6c8b7a76024f0bc79482abe720e46133200996e927c5f4c7c - 06c4ad53c6ed67b495afbe8d0a684d8fe3663c8c5a09c752891a1f8d423099bd - a2dd11f167c2a4c4a1e034429f58c738bdc692c50f0fb33ebba3a932bb43a6cc - 35af53ee5ee7759cc585f357b67abdc21742c9d86a01442d961f6771097e0955 - b7adf74ec9120aa5ca7b50a0a5226d81e4d8a31081143f6ce59f1a338ae1243f - ae106240d1755965de216251418afce510493b605a2af6c26de5dbc751e4f3f1 - 9de8866f563402f80c92eabc9e654df4f007544303d0630acdadca6502e90144 - d638039dd93a7d2de4413fb31f2262055730a8ae3bf31e6a59a7f69457eb2a35 - d62dd2ed3c450034d1046c6b2e77ee0fefa0527b3ca9ad1c40d64914f3cd8e2f - c99c0f52797ef4cfa30189b7298c3f897da67d09eca63cce9bf8e3f0ca8a7bfb - 42f07cbec3786531f4d77878476f3cccb4313f5af5c7652007f0da8922657e03 - b9dbffbcd7ecb2e1b2cf49632c11c05cc5616cf80b61ef6dd42207c95b3aec80 - b5845bce6f501e7dd6e6cc37fb97de541d8c5c6457b760b6848033c863ccbda4 - 08704f830640d156288dc0e5af77b03279b4ca82536f464518b14c5cde1671cb - 20ae693e61e8daefa77c24c29d4fd2347ab71297cc9b0e3b716d00446b640db7 - c9f69c490740523e2b18205fc894c343444b8a04e1e76fa2bdce768f39f9e7ea - 0af926f8c33f3a6b73eaa43513737f7634c56f0673c8f0adfa9fc089d5331cc3 - 0a0accddc498ac7b758bd0edb50f4d3ceac230f01f5c19162e1d6819589f35ba - b997885fe3097eaca6f23415e41150728a151459cc44fde19d663ffc217a3594 - 263468524dee870b00cc6054b6c537d1995ede6041be6f3351b959b13de81c56 - ab8977b2722001685de28a002b16b0054f1bab1a077c37c7b0281052eeaedc1f - 3261948ebaad55b46371430b42504c653340ed7218c0c7c0256f12028375bdd5 - 83699712c49002716e474335a96b0b5e640b9e5f2d1db89c0bcfe1551fb8d0e9 - e3d4b408a8a4a481d29089a070947e7b2693d97c1c12b5f78c6bc08ee6ab0baf - 83c8c34c30e6466affaa0a272adc7e75c2faa5f5179ae389525ff1aa79c4ecee - 96bdaeb88dbc44aa7e288eb5803775001c12b1829e91e0f0eb63b44aa774b469 - b3dcc7700d15d5d30fe5bab74ae8e4c3467c2a22e6201eeb10a5a79138ed0075 - 0a94c7ce16f7c0cdab3ae0b27cd8ced6875c09d7987e5e68297a1af77d64195f - 94518e0f9e0a2f8e9322d40ca6de2e31ad24eee98eb4beb4551b10c404973275 - 0fe317dcad1bb745116876ff2dc72b50195c668ac88f2dd837c7ff14a35dc1de - 3a6e27019b697c77a3d1b031ebbe05bd0970834d9e9fd384984047001bc8306c - ac957380d3d87da171980516dc308b7dde903d86fa9506b409297f07825c4860 - a7a5df97fe466fc2691d6ba2327df972c15119c78d37d418bd0211dc53285e7b - e41f529f5fa62c2048cdffd0a671e987f51b62e9978ca50d01d78ced4212dca8 - 765e962f4fbc2addcd3a9487de5521358bf5802d92621654b93d510023123eb9 - 0b31e67f55d6f470fa80572678ed6be1700bbe159ca4835faf693a510e1b089c - f5b3f23b8894f6f1268b04d3ce748f6ba0a7f5a56e9a10cac9c8ea840fe6148a - cf15d22f75c77738cd6ba0163ba91d896781ba4ac1e4fd2c1e75d097d458aa12 - 1d8f651cefbbc736af1cd4493eee08159eafeb03ec1fad09e3fd63ca4989afc0 - e45d53f2ab6cc43b4ce084d2a53bd73e4bb56b636936a42c3288ac3b75856c66 - bfecd3e86df2249757a6ea1b14c9ea73384a813f1650a022a95547eaa5e78432 - bbe62efc388950f5a66042f6fb6e075a7920f1a1ed690a705551bee60ff17af4 - a0125e034dd9a495edfd8bf829d057f1a0d5011d1d86fa63ace6339ec5f0ec17" +checksum="94b0bd6f285775715a97145b6c4e8d6feef3b94682d124f161f98c2f2cbd4670 + c4db135e18be2c300f3f27453e83378d35b1c954e0e3d958ab61936aa977883a + 5320df230a7d0a680b4daa6d6908548c2957562823a8229c3f19d5e1183343a7 + cc7a85e929c8f3a01516342ab608f9acbf2aaa03bc43fd5612300b430f5fea29 + 7ef0e96819501ce8dc8d3ebbeb8bb832314201f733710ffb81351318a3f22dfc + 49579dc21ec917694df9509852b8bf919fe0cf38b2a60b0a32460de3c37e97a2 + 93f19f3313008308cd1d4e8eb1f3fbe05210775758a234367713ac3e71e71972 + 47ad3f8ce909feff19ccbcdcf2275dfe697e504b1ca164124a9eec9f1e816836 + 176a3cdfe39084e97b607198200a551cb23789b2cbc43eff460e1221c96e065a + 1910145457eb8833b62d60ff54d735446b9420129f7a6239b993273fa7b94d79 + d070ce5ad03706d3c281bdae7af2ce680671a958113d244413bb862821187d9e + 587301ecdb55992a224e54132e07db16b196b60cf3a75fc47052dfedd1582422 + a9413ab019266b0d3d8d27d08521c235b8ef0214d6ce01e147975d020a673f62 + c6cebc4ee4cce3bb4135f8272d11a42c84383f2be2f45246b4cf454bd0977622 + 13778ed0f750e3218b809f11ba8f7a1521ac0c691cda846822aa8f9198b22cca + 23043540a526e9e36f1afac57840e35059ccfe838079ce0835a56a80a807920e + e1c15d5e6a33df4752e70befc67cd188cef53947f77ab565a537e1424706495e + b37e8cb11a39e65478a674ce73afba192b8f67a97cdf01dda07a52efb54e4956 + 37e8201fdb786753f097d36cd8f4b4724863878c6ae9bfa44bf87d8b5d6a63f8 + 09f3d0305d75e02aca6c9522a5dbb96f325e21bcc744e2b66ad75fc66ba9608d + 53174122dff9e8dcc3469cc559776ff88a75f0f3938abc5913baeca43f2adbbc + e35827598cea81434db5ad8a6d4ce266d911e4fe47367be6710a0a3576c8cfc4 + 0c994ae57e9442251fe1fe2a04705926fbfbc81dfaf858c75c19ae32ad9a1e07 + 7d5ccd03550887d1d79fa5903f2d08bcc18e858eb91170b3818fccd52fb4b97b + a69dd7da11e30951459411e67b02b559b03ccb9d254ce436401f0797461ff630 + 08dcbb4f3175c05d20ce2492d22dbe48f4b367fcdc74ae8192babcb9555b4eb4 + f4656e4fe6aa3ce8662600929b799796cf3ebb09eec861e63a0dedd4cc025c5c + d2b981338c7eb6ee64d6de420f5059787bd9fa2516896fa53d6540a7fd43b377 + addc3c02591e9ed0d75c8c99f79e4495b7ea680243cceed2b5f5c4a829d49e6f + 2968830fe5788a152c9af519ecda0081bda1e303229b188c3e03b99cb89aa284 + c5979d3270b43f616bc3c78cd0afe085eaaa3f8e24b1557d199bc5cee83c1f69 + c6eead14ee828dde3c237157d6743d5d28ffff74d9c5994fe36dc9dd5489b44f + ef5da110ff5db1fa41437587e0d4232ab5ba684615e5878196f6fb3db9fabff5 + 9181e08d987bfdd4e1e6a6090b7b21b1ec7c53e96be248050518c5eab34e5f34 + 96f09ef0e7a68873a2d95794e4ee8302654881df85c21c80bdac02bfd1bab335 + 0d582e6e1cf9cdc694a3e85c4f9cf36a0c59e3bf838953c31ca58ed2d66f5735 + e541c76d34270ef558573339cfd14f5c09a3189f884c2a7265c1c88375c79b58 + e0c1e7cb9f75bed76c388705a5679d1d41bff1107214dcfc9ca910a7c6f571a4 + e909d9dd839cc3890bdcec29e3496b299ae69388fac43674510cd9fae6a4e4b8 + 99258abe42d59457b1fba7638259568ccc218106e9d5827b4def893c29b470a8 + 168466645395d8498f3c13eb09cf13314c9b0b9018d0769f3e613c0e9514506e + 857b392925188807ff5521adeaf0b6a0ff259f99ef09ac3cfec0cc7b1ee32180 + f040bc7b60564d70c25a9296fd4f11e484e9b74808822e85788c06c897bca5b5 + 06134e687b99d7e68bce477cf85c54317dba124dce486352dc5a6a1876e54f67 + a41850d4f690e1580bb7c37d8443c29494f33bc2b5a6d4ffeed22c58ec2ae776 + ef3301a5afdc0f217edcdffc0a959cd7b8a18861f2658d99daa2949a8745ae47 + cdc8e5b18987d6640f782f1dab728f14a80e97d27a680f186b7479c7ed0a76e6 + e1a672a052c72a94dc3ff8816235824aca20b4481bf1c48d60721b49937fe529 + 1a2b88bc6710f07f77f0579d1409d37cb3f7a2d4ec2bdde1f0d4c992d05d9fed + d4e90b3abfd6ed2ddee7a2cf98bf1492e145a83b4be8711d93e094d56423a54d + 120560d88a624c7ba0de23bc23fa996e42b0727c3e97cc0a4c9f667246b868b4 + 010ffa6887ef0c9cf03c81922b22ab04b55c2d0c08d93a3fe683f14d442e9b15 + 8d15fd2f21cbec41cca4151242ca2c15d681b96a1ea12f2fe06f4d17c8670e3c + 6cc51922cee863b11524ed638e1d4a2ed9b2249a76b468791a471051e05e1451 + e0f894c991c0f59133f369b9ec1ad2b68e521705163580025410f09250c26e60 + 488f340d031de8ce7a4a9bb9393390200849f66fb050cbbe7aa6a9c237c1a94e + 0255c4f216257a7bb6da94dabd8c9528ade8b87313c7ab81be9d6e76d02a230b + 62486e6f43cd57dd531a03591b95040ee7d98ba1fc74b6c2dc3364090bb50ea0 + 2b1d994675d33c80cda210b2d3fd88bb3051d26b9c551672aad6cfbf56ac2f1e + 3a7384888b4894f386bf450c39dee9ea423697e4c784d886d8b63fc1826f98e5 + 2dd784fcafb0208279996f0974ed3a89a6ec11faa9dc6865e7e6bb314a93f5b2 + 2beb59d3d2c853dfc77a11d8418b13d297af71b7a83a2daeb7acb0daf5c42d40 + 22f6fdd526430d359c48aa77a1b6e87db15e5cc6f1910f44a19f89e6c9d1f597 + 4fee301a969835ce145fa91dcbee8b0c902e5b3ed4b5890730285c48a577d2f0 + 6312462a704beb7cabfb1dd5e19b4da0221a088484fd39a73197edbb17c3eb6e + 329cace533171098d65139bd9fc056db9fd1cd5bc74917067296b3d22d493bab + 612b4e785458592dc5e53bafac4eacea2058d5a9a474b79318b664fd4ff2d2da + 84e0574c5c0f104a8f18317b26e93b37417aebfb7ff9ef3d53fffa722a241a60 + e3da154704200101eaccefaf982ab663f70fa3c478ca2faa9e32df639309f79d + 9e25eb5d25ade0dd06d5fc04dbe066783bb517df742bbab64aef845552e6c315 + 0c6b239034e21bf2032fe593a861d5ab1d5d65b1b9e15c165519791cf3d6287f + 295ffe3f03bd32f0a7db473a4075fa517c435c15e31f1f4362391a898e15cead + c51f29af4135e6a35c29fb8d253b71ffc512ffd3704bf76c9d9a17f5d40efbd2 + b5329b44f7ca76a6903ebc52e33538fb0c5dd935961c30f517a6d4f4fc97a09e + 378133f57d3858dd76d8f744e62d2812dd4f9235b408ea8d7b718f289827ccb8 + ca9da8481ca8052142ff4b1cf2545f0cf0f51f26ba2ce3191606ce9c4d7b4396 + dada3b72a10ea9699d4c569d8cdb50c36b7077dd18f1c8d13817539848c2e0b9 + 4185f1351051f33a5728be8e177d359e29d933a01e9db99fe330d364e02df00d + 304eccf0e97f56d4c92c3f71abca23c4fcdb9891f2501fb8659f0a634250b245 + 6f506d2af8c13b3319c0c5fb859a719350be94ccc3c93e654cad78234ddda072 + d28f7b9412fce3547865019cfe14349da2afe62224d4b99754c433b4eb58f415 + 9b27ee6728cd386510d9a9ec86e426477ec6595cb1440b04d00d61585abc2bce + 6e3b75e0bc5a8688202eb51990cad69c66e817262c77b4e28b33c488057de1f9 + cd34159677b1870897fb03f1e8f058e95992145f2fb62560f1a93d0783dd6fd0 + 53b1de3ba82b65511cba4999b86d77490e40a332d1d5810627fbc0af8e395e40 + 10fe9582ffbd42de78e436ea0b297aef7459feb825c3d09dceb6d3dcfd8153eb + dcd03f136f7a32002373ad2e0871003d1882bc34ac73ec6bd5625ae3b6c0f5b1 + a4c3e548edc1f3306c4cd07071c94f20a77074c08a2c6669d6930f197dae2b87 + e11f07bcd00e6a3b72f6af2280867783a92ba3dce1cb8cdf786f35bb8c40fae4 + 5316509e6a7360316d35283d3110298a8ea2aab8bc9b2509c8a0fd46354d0052 + 74beeffbd3db2f292b4e2f975e8ce4ea2d997042e4844d7bbb6d28beee9565c6 + fb383a17e945d55310a78a8f42bb1e28380c3686cd3e8ed6a8adff614f1c5ca4 + 3a9d9a4f25b179b31bfb4b33722df6bfda29b432a004446d293d0b15997c55e6 + 67a035724ca388ef134a5a66360b2bfe928869678028714cb778a7ee5a0cd4f2 + ccbf810ee25e84dea7b9f5181dcfc977c060bc985d900e2234c3e1e80a87e4c6 + 1462ec5fd7720af4bfb3faaa4aef3eec6c28c3d86bb90d4830b9d8dbcbfb27b3"