<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/60499>60499</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
LLVM stage 3 builds on Alpine fail with OOM even though it's not OOM
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Gelbpunkt
</td>
</tr>
</table>
<pre>
This is a very weird issue that I can consistently reproduce in an Alpine Linux environment, for example with a container.
On Alpine Linux, stage 3 builds will always error after reporting "Out of memory" like so:
```
ninja: job failed: : && /build/build/llvm/stage1/bin/clang++ -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -fprofile-instr-use="/build/build/llvm/profdata.prof" -flto=thin -fno-common -Woverloaded-virtual -Wno-nested-anon-types -O2 -g -DNDEBUG -Wl,--emit-relocs -fuse-ld=/build/build/llvm/stage1/bin/ld.lld -Wl,--color-diagnostics -fprofile-instr-use="/build/build/llvm/profdata.prof" -flto=thin -Wl,--gc-sections tools/clang/tools/clang-import-test/CMakeFiles/clang-import-test.dir/clang-import-test.cpp.o -o bin/clang-import-test -Wl,-rpath,"\$ORIGIN/../lib" lib/libLLVMCore.a lib/libLLVMSupport.a lib/libLLVMTargetParser.a lib/libclangAST.a lib/libclangBasic.a lib/libclangCodeGen.a lib/libclangDriver.a lib/libclangFrontend.a lib/libclangLex.a lib/libclangParse.a lib/libclangSerialization.a lib/libclangDriver.a lib/libLLVMWindowsDriver.a lib/libLLVMOption.a lib/libclangSema.a lib/libclangEdit.a lib/libclangSupport.a lib/libclangAnalysis.a lib/libclangASTMatchers.a lib/libclangAST.a lib/libclangLex.a lib/libclangBasic.a lib/libLLVMCoverage.a lib/libLLVMFrontendHLSL.a lib/libLLVMLTO.a lib/libLLVMExtensions.a lib/libPolly.a lib/libPollyISL.a lib/libLLVMPasses.a lib/libLLVMCoroutines.a lib/libLLVMipo.a lib/libLLVMFrontendOpenMP.a lib/libLLVMLinker.a lib/libLLVMIRPrinter.a lib/libLLVMInstrumentation.a lib/libLLVMVectorize.a lib/libLLVMCodeGen.a lib/libLLVMBitWriter.a lib/libLLVMObjCARCOpts.a lib/libLLVMScalarOpts.a lib/libLLVMAggressiveInstCombine.a lib/libLLVMInstCombine.a lib/libLLVMTarget.a lib/libLLVMTransformUtils.a lib/libLLVMAnalysis.a lib/libLLVMProfileData.a lib/libLLVMSymbolize.a lib/libLLVMDebugInfoPDB.a lib/libLLVMDebugInfoMSF.a lib/libLLVMDebugInfoDWARF.a lib/libLLVMObject.a lib/libLLVMIRReader.a lib/libLLVMBitReader.a lib/libLLVMAsmParser.a lib/libLLVMCore.a lib/libLLVMRemarks.a lib/libLLVMBitstreamReader.a lib/libLLVMMCParser.a lib/libLLVMMC.a lib/libLLVMDebugInfoCodeView.a lib/libLLVMTextAPI.a lib/libLLVMBinaryFormat.a lib/libLLVMTargetParser.a lib/libLLVMSupport.a lib/libLLVMDemangle.a -lrt -ldl -lm /lib/libz.so && :
LLVM ERROR: out of memory
Allocation failed
clang-17: error: unable to execute command: Aborted (core dumped)
```
The issue is that the system is not out of memory at all. I'm building on a system with an AMD Epyc 7402P (24c/48t) and 256GB of RAM. I wrote a very simple python script to ensure that this is NOT an OOM and my eyes looking at `top` did not fool me:
```py
import humanize
import psutil
import sys
import time
way_too_big_integer = 1 * (10 ** 12) # 1TB
smallest_memory_free = way_too_big_integer
smallest_memory_available = way_too_big_integer
highest_memory_used = 0
highest_percent = 0
while True:
memory = psutil.virtual_memory()
smallest_memory_free = min(smallest_memory_free, memory.free)
smallest_memory_available = min(smallest_memory_available, memory.available)
highest_memory_used = max(highest_memory_used, memory.used)
highest_percent = max(highest_percent, memory.percent)
print(f"Highest Used: {humanize.naturalsize(highest_memory_used)} ({highest_percent}%), Smallest Free: {humanize.naturalsize(smallest_memory_free)}, Smallest Available: {humanize.naturalsize(smallest_memory_available)}")
time.sleep(0.1)
```
All it does it collect memory usage information every 0.1s and keeps track of the extreme values.
At the end of the build, it shows:
```
Highest Used: 58.7 GB (36.3%), Smallest Free: 132.6 GB, Smallest Available: 150.6 GB
```
So there *is* enough memory for LLVM!
Here's my container setup:
```bash
podman run \
--rm \
-it \
--name clang \
--privileged \
--pids-limit=-1 \
--ulimit=host \
--ipc=host \
--cgroups=disabled \
--security-opt label=disable \
alpine:edge ash
```
The flags ensure there are zero limitations to CPU and memory usage in the container. I can build AOSP just fine with the same flags, so the allocation failure is definitely not due to the container setup.
These commands reproduce the error in this container:
```bash
$ mkdir /build && cd /build
# System upgrade
$ apk upgrade
# LLVM dependencies
$ apk add clang cmake git linux-headers lld llvm musl-dev ninja python3 git zlib-dev
# LLVM sources
$ git clone https://github.com/llvm/llvm-project.git --depth 1
$ mkdir -p build/llvm/stage1 && cd build/llvm/stage1
# Stage 1
$ cmake \
-G Ninja \
-Wno-dev \
-DCLANG_ENABLE_ARCMT=OFF \
-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
-DCLANG_PLUGIN_SUPPORT=OFF \
-DLLVM_ENABLE_BINDINGS=OFF \
-DLLVM_ENABLE_OCAMLDOC=OFF \
-DLLVM_INCLUDE_DOCS=OFF \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DCMAKE_C_COMPILER=/usr/bin/clang-15 \
-DCMAKE_CXX_COMPILER=/usr/bin/clang++ \
-DLLVM_USE_LINKER=/usr/bin/ld.lld \
-DLLVM_DEFAULT_TARGET_TRIPLE=x86_64-alpine-linux-musl \
-DLLVM_ENABLE_PROJECTS="clang;lld;bolt;compiler-rt" \
-DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
-DCOMPILER_RT_BUILD_CRT=OFF \
-DCOMPILER_RT_BUILD_XRAY=OFF \
-DCOMPILER_RT_BUILD_SANITIZERS=OFF \
-DCOMPILER_RT_BUILD_GWP_ASAN=OFF \
-DLLVM_TARGETS_TO_BUILD=host \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_BUILD_UTILS=OFF \
-DLLVM_ENABLE_BACKTRACES=OFF \
-DLLVM_ENABLE_WARNINGS=OFF \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_ENABLE_TERMINFO=OFF \
-DLLVM_PARALLEL_LINK_JOBS=14 \
/build/llvm-project/llvm
$ ninja
$ mkdir ../stage2 && cd ../stage2
# Stage 2
$ cmake \
-G Ninja \
-Wno-dev \
-DCLANG_ENABLE_ARCMT=OFF \
-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
-DCLANG_PLUGIN_SUPPORT=OFF \
-DLLVM_ENABLE_BINDINGS=OFF \
-DLLVM_ENABLE_OCAMLDOC=OFF \
-DLLVM_INCLUDE_DOCS=OFF \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DCMAKE_AR=/build/build/llvm/stage1/bin/llvm-ar \
-DCMAKE_C_COMPILER=/build/build/llvm/stage1/bin/clang \
-DCLANG_TABLEGEN=/build/build/llvm/stage1/bin/clang-tblgen \
-DCMAKE_CXX_COMPILER=/build/build/llvm/stage1/bin/clang++ \
-DLLVM_USE_LINKER=/build/build/llvm/stage1/bin/ld.lld \
-DLLVM_TABLEGEN=/build/build/llvm/stage1/bin/llvm-tblgen \
-DCMAKE_RANLIB=/build/build/llvm/stage1/bin/llvm-ranlib \
-DLLVM_DEFAULT_TARGET_TRIPLE=x86_64-alpine-linux-musl \
-DLLVM_ENABLE_PROJECTS="clang;lld" \
-DLLVM_TARGETS_TO_BUILD="ARM;AArch64;X86" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_INSTALL_PREFIX=/build/install \
-DLLVM_BUILD_INSTRUMENTED=IR \
-DLLVM_BUILD_RUNTIME=OFF \
-DLLVM_LINK_LLVM_DYLIB=ON \
-DLLVM_VP_COUNTERS_PER_SITE=6 \
-DLLVM_ENABLE_TERMINFO=OFF \
-DLLVM_PARALLEL_LINK_JOBS=14 \
/build/llvm-project/llvm
$ ninja
# Here I do some PGO profiles with Linux kernels
$ apk add bash bison curl coreutils diffutils elfutils-dev findutils flex make openssl-dev patch perl xz
$ git clone https://github.com/ClangBuiltLinux/tc-build.git /build/tc-build
$ /build/tc-build/kernel/build.sh --pgo -t "ARM;AArch64;X86" -b /build/build/llvm
$ ../stage1/bin/llvm-profdata merge -output /build/build/llvm/profdata.prof profiles/*.profraw
# Stage 3
$ mkdir ../stage3 && cd ../stage3
$ cmake \
-G Ninja \
-Wno-dev \
-DCLANG_ENABLE_ARCMT=OFF \
-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
-DCLANG_PLUGIN_SUPPORT=OFF \
-DLLVM_ENABLE_BINDINGS=OFF \
-DLLVM_ENABLE_OCAMLDOC=OFF \
-DLLVM_INCLUDE_DOCS=OFF \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DCMAKE_AR=/build/build/llvm/stage1/bin/llvm-ar \
-DCMAKE_C_COMPILER=/build/build/llvm/stage1/bin/clang \
-DCLANG_TABLEGEN=/build/build/llvm/stage1/bin/clang-tblgen \
-DCMAKE_CXX_COMPILER=/build/build/llvm/stage1/bin/clang++ \
-DLLVM_USE_LINKER=/build/build/llvm/stage1/bin/ld.lld \
-DLLVM_TABLEGEN=/build/build/llvm/stage1/bin/llvm-tblgen \
-DCMAKE_RANLIB=/build/build/llvm/stage1/bin/llvm-ranlib \
-DLLVM_DEFAULT_TARGET_TRIPLE=x86_64-alpine-linux-musl \
-DLLVM_ENABLE_PROJECTS="clang;compiler-rt;lld;polly;bolt" \
-DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
-DCOMPILER_RT_BUILD_CRT=OFF \
-DCOMPILER_RT_BUILD_XRAY=OFF \
-DCOMPILER_RT_BUILD_GWP_ASAN=OFF \
-DLLVM_TARGETS_TO_BUILD="ARM;AArch64;X86" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_INSTALL_PREFIX=/build/install \
-DLLVM_PROFDATA_FILE=/build/build/llvm/profdata.prof \
-DLLVM_ENABLE_LTO=Thin \
-DCMAKE_EXE_LINKER_FLAGS="-Wl,--emit-relocs" \
-DLLVM_ENABLE_TERMINFO=OFF \
-DLLVM_PARALLEL_LINK_JOBS=14 \
/build/llvm-project/llvm
$ ninja
```
I've been using 14 link jobs to try to circumvent this, but it hasn't changed anything compared to 48.
I am guessing that this is somehow related to musl. I vaguely remember that it [has a lower thread stack size than glibc](https://wiki.musl-libc.org/functional-differences-from-glibc.html#Thread_stack_size), would it be possible that this is the reason for the error? Adding `-DCMAKE_EXE_LINKER_FLAGS="-Wl,-z,stack-size=2097152"` doesn't help, but maybe I misunderstand how I would raise the stack size.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsOltz4jizv8bz0iUK7Fwf8mBuWX9LgAKymd0XStiNrYks-UhyEubXn5IMCcYmM7N1vnOrrZrBsdTd6pta3S1TrVkqEO-8y753OfxCS5NJdXePfFOU4tl82chkd7fKmAamgcILqh28IlMJMK1LBJNRAxHEVEAshWbaoDB8BwoLJZMyRmACqICQF0wgTJgo3wDFC1NS5CiM5w9gKxXgG80LjvDKTAbU0jKUCVQdrzv0umH1O6vTsbja0BQhgE3JeKLhlXEOlL_SnQZUSiqgW4PKsiOVYSIFz_dnpQG5hRxzqXae7wNnzwhaekF4vJp31d3_c6-CiW_UC0L4JjewpYxjYt_cf__K86_A88eOjaMn5y-5548dlz07zoTnj2NORer5fc_vA9nOowGQrZBEY06FYTFhwqAqpGaGSQFk-8I02zDOzI4wwZlATTKWJCiAPDkpvWCYUIPEsByPxkqRllQlmBD6QhmnexoCX4E8Uc4t6JtRFMiTkKQUpcaEFFTRHK3SyNOrYgaJNoqJVAN5iqk25D9KajFzpjUTKdky5AlhghlGOfuOSgMpMHGSVIS5FKn7sRQqsW9vSCzzghriGLCiMyBPLC84i5khW8q5yZQs08wiyRdUmBD9ykyckQS3tOSmIi4kvsVYGGJ2BbohQV6YMiXlJDHSSpEgR4OkZUaXaYraEEtfsaTCt5xZ17TzTnISS_GCSjtjWLk50sSOM5GgMLSy0lNsaEJyutsgKYUuC-txmADZJoymQmrDYk1iye3K220pYotHNLqntnDU0OP3Qskt40iY0EaRUqMXDD3fP-9mFsES6dg_rGOTLTfSC4YmY6LyMSub49aKzCW1zrFXyl6fqI11GKstq1INZOYDSYEMp8NR__EeyBP3_AEhmDNDFHIZW2ZLjYQnjsOf3AU86XCevJNzmiFHuvo3aGC_VBp_qNlIyfXHnhzX3gnLrRWJQW08fzx4oM84ZhxbAToJU63jcVF0JBAJR7v_GAAOjKmCmszzB1bEy4HnX8wW0X009fxxp2NlZBsrErinfZtM_ngYSIUdWh9bVs7XoSewK6pSNHOqNKrapGMpXK6OCbmxPtUsboIOZIL3KJoTQ8VeHO368FhJYVAkTYQJvjUHHYcNIktULsK4_fbJ0nWZn5hI5KtuMmYnZ0U7rSXmtDk6SphpctWi60qdgvKdZrpV0Q_UxBkq3SBXGeFnlHQwzYk3vKCiKTbUcLDAb5PlpDE5Wc1OCY3eDAob8er8zyXnu-ZI5IjWCMyp1qgbSw2kkqWxR1hjihXylMiB61mB4mHe5JuJ5xaTR4u5ckfoKbnIhpEyP8TsBuIfGBup2Pem-j4cvjbcZ-bJHpFNHmabb4NwMZgVpinoMqacqv1UbSZMU4Vasxe0rA5kvmGiyUx9rmWHNze-okJvpcofDeNNho5ctW7DKvwObUBtCLHLN5K36WqImzKNxFbOh_1Tiu9zD8vxecThU7hoTs823zA2DZsuFkiTFgv0mTkzE-r8PQa2xdL64AJzqp6bSuszo41Cmr-vUpt-GLTE2WrivODWzf5g-NowK76ZcB618CCo2o2lyukPo_1PnRBDm4Km3GmBcGWPJp5w-5sDHI4g-_u9o-V73nvImy0FGC0Ws4XNimUtzXYAIecyrvKlfQbthqsTsXdtsfa5awiloBuOYCTgG8alQbC5CxUu6w43VXLl-TexVAhJmReYeP5ta-pe_a4y3BctTFd1i8kQ9E4bzO2QkKbOM1ADlPMORJ5_nVclhi0hpAB6wKvqFQHhwxBGxS6G64uuP7d8-Rex548vbozn3wIVCfiXV_d9S30RPnQgglclDR5qKs1c-VPsTCYF6FixwjjZhS4VHtityrDpbGWXnM0eHN18B7hDDVzKZ8seNeBddY0svKsuJCxxgm2l5JDjR4lz0FCxN02Vj0BW5lSw71gbLHRpGK8N6Z2uvdvK41jZr3S3NlKuNyxd21icogIvGEIPPN8WTDe9rv3LvvR8qyHPD6C36lfYOqecozbryhDrrUJ06C1k2zH2BQ__AVrG0uwIyxZADqFbny5QxbYiOJrai5kxjrBS5YdmAeDgPxa80l1nn2OvD0XnzYevVlhnRc5t0njTNm3r3-q1U73enqFVV0Y7wXeYI6pHY7cfwp3TWU7fPP-mZfaIYvXaQuxYw3VC-5kjIu8jdQ0CQGHPfc-_san_bxU-POp9oX7dPzh3R1BTKsq1dfQzLN9610PrpxbthJProedfWgh_AMu9GmFsLfDpMu0mvHXkjgiF70r_JWo1W11XVVJdP3aLdjRHLDz_ptvpnYuWIefADCQStX3GknOMzcGnS01TBCa27tCxkRxdAOt2etqFo2fEQoNRNH62wc7GWFvjY47wQnmJutbSCasojCI5AO8ruoFdW2fyVTdjVvV6auDLm8413Pet0YKrTvCJjXqB37mC-_55vfcuuxXE-eNkKS27Cm0YY9oGMhSuX7FX1FYqsAei5_fgGO83VOj519rG7fc2F2g0ZdGUdEN1Vg0VMsmpAFUKsLXhu8sTovKTEWZOQQTNEdwpezpTKPbCOKZ2D5_MsEQTznJmvGBIeqfT5WEqk7qxHivi5gwhcapkWWgvGCZMW1U3FtUYl4qZHZGFAU43yD-Aj2Cp6wJ6QYhJivCuoxM72QN_y2mqP05Ray-qEL6jkuAkoIc2AAzmj9V5Wnd055Qf_ch9s9N5KYSz5Ry-ldrAlol989IlFVbfbmnXo3SeYlOJ4-THMsQ0JLhlghnkO3dOJ6VLeWprVs7ROcll9HtCpI-6rW4zucan45zpDzKfeZfnX0D-nDD13sQ8JHdx8tHX3IMGsKySn7JIFU3wgwQtnk8HA7cJIMECRYIiZqjr8DRJ9q4Z5_QZIWUGOBPlG8lcYq2B8wQ4f8khLzUnCb6A68Xuk6XAYXznbGOnTpbVslTx8YoWNuZSIGTGFC62-GPPH6fMZOWmE8v8o5lkH6RQ0pUdFpGQBAuTQe9UaaSA1l7XkRLbe2HH7WarV9fNPiJfqeRoD93D1Mle3zdPQjq91EeHg0k4vV-PpmF_MlqHi8HDyguGs_H4mGAdaLkKV9FgHU7DyZ9_jRYN8COy88njfTRdLx_n89miSdhBWhscSPej6TCa3i9_DDkbhA-T4WzwCWQ0HUweh6P1cDb4jOABbPQ1fJhPRmdABw_h76P1YD2YPcyjiZPa88elVvWGPeld1hVXoX39-iPEfaf_GNdx97gcrSfR9Pc2xH1ztIEzHI3Dx8lqvQoX96PVerWI5pORFwzfbq7WVxekCoyk2j92uzQp7JU8X8z-NRqsllVHteIz6HOeeEF_I7nxgn4s84JxVEQZz_frsu8lXi9W6_5jNBmuJ1F__PjXeZ9pIAzOOU0T9Osi_LPNcxuAy3AaraK_Rotzlm5g3D_N1-EynH7iRJWql-vVrMJpP_P27lBRXf05t0ZZIEeqsZVqBfi4iiY_sSP64eD31SIcnPPgY9incDH9wT47bIvVaLn6CYqr0eIhmo5nn0DOw0U4mYwmzp_X_5r1LdneRR32pF1_CK2HoPge9KqbtlpoPARa1wd3sdM_iq1Ho-0R1T8fUa0M_wTVf1dQDRe_dCNkvYKqtih7EmN_4Z61xS4rq5H70fSXaRGz4SmKnzoGfv0q-IcHxC_dqzWo_R2pnUXOCr0Ip5Oo_8v0FBWcbf5HzraTY-xcfPd8P1w8eEE_DFWcXV14Qf_rzVXjEGyN-E_MZEPcRGIrW6Cj6XIVTibr-WI0jr7WVceENpTzT44Li714fBhNVyPLZrT4BHbxOF1FD6NPNrKL1ZXm_6zsOJs21fPHfD2YPU5Xo8VyPR8t1stoZYle_a0T47_puAjAVtkQQSJByxxhfj-D_WWyrsq06kuUZ1QCeUtFYksj2DAtBcSl4hBLhaVhXEPCttvqL-TVH-6U2DKRVMNbjm_gThlZoND7kqWgJs6gQMXh7fsv1iMDd99XMm72372MTUycblxZcqSow_jHAm2T_riS-zDX0Zkt-FMJxFI75_tkc_YTl5PD-uNAPtn6h_t5yFGlCESWpijNJ1_O1C70303odBS6MUVf28_84EcZRNCaQTTQfi5h-Cdb-Cdb-Cdb-H-ULRwXv4e6uJCc7w718f-Nivhsffu_P_k55AqL2XgYrsL1OHL2_dmz4py5Jyublqwy1uajo6-HPbQeT8L7vU-0fPHWmkn-V9bLfyf7qbe_I8-_fkHYIAooNRMp9C6AM_EM3-TGdbyN2tlHzFRc5i8oqitmzx_ApjTADGRUC8-_NhBnVKSYABU7k1lS7utNhYnFv7ip9aYjoDmkJbrPQ-s31zYXy-QrKOTUVMh2a3Ygghealug-HM4x36CqEN1VRj-jGihw-eqGFdIEtKHxM2j23d2NC0g528Te5dDzb-qJ1Ct7Zh3XOLYQHalSzx8fvr6knNh0DhWKGDXZKpkTR6mTmZx7frByq63dauvq5s1dKb3KkieWuw1CIbVm7lOFY1FNhqCQ2gRyK9VHX94LxhAm7jsC76r7U3733fMHjgPiOAiGfvf2unfpe77vrvgl7q2UIS8O1nMfokIEOdOlSFBpQ0UCVvnRnntFma4uDD6U2fmS3AXJbXBLv-Bd7-r6MrgNLq6CL9ndprfZYrK5uukmvZ4f3PQCet1Lbm-62wufxpc3X9id3_WDrt8NukH3wg86vSAIguuroHuNt5se9b2LLuaU8Y51YGuIL-5rjLur7sXt7Rd32aMP36GrO-f0mzLV3kWXM230B5phhuNd1d-vf_4t3z8Q31LGq0R_NnsAfEEBJnPXc8y42zchjZ36Uip-92tXATZYWcZtFup4_88AAAD__34lhNg">