ankane / argon2-kdf

Argon2 key derivation for Ruby
MIT License
8 stars 2 forks source link

Fiddle::DLError: dlopen(ruby-2.6.6/gems/argon2-kdf-0.1.4/vendor/libargon2.dylib, 9): no suitable image found. #4

Closed dalezak closed 3 years ago

dalezak commented 3 years ago

I'm getting the error argon2-kdf-0.1.4/vendor/libargon2.dylib, 9): no suitable image found on new MacBook Pro with M1 chip:

Fiddle::DLError: dlopen(/Users/dale/.rvm/gems/ruby-2.6.6/gems/argon2-kdf-0.1.4/vendor/libargon2.dylib, 9): no suitable image found.  Did find:
    /Users/dale/.rvm/gems/ruby-2.6.6/gems/argon2-kdf-0.1.4/vendor/libargon2.dylib: mach-o, but wrong architecture
    /Users/dale/.rvm/gems/ruby-2.6.6/gems/argon2-kdf-0.1.4/vendor/libargon2.dylib: mach-o, but wrong architecture
/Users/dale/.rvm/gems/ruby-2.6.6/gems/argon2-kdf-0.1.4/lib/argon2/kdf/ffi.rb:8:in `<module:FFI>'
/Users/dale/.rvm/gems/ruby-2.6.6/gems/argon2-kdf-0.1.4/lib/argon2/kdf/ffi.rb:3:in `<module:KDF>'
/Users/dale/.rvm/gems/ruby-2.6.6/gems/argon2-kdf-0.1.4/lib/argon2/kdf/ffi.rb:2:in `<module:Argon2>'
/Users/dale/.rvm/gems/ruby-2.6.6/gems/argon2-kdf-0.1.4/lib/argon2/kdf/ffi.rb:1:in `<main>'
/Users/dale/.rvm/gems/ruby-2.6.6/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/Users/dale/.rvm/gems/ruby-2.6.6/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/Users/dale/.rvm/gems/ruby-2.6.6/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/Users/dale/.rvm/gems/ruby-2.6.6/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/Users/dale/.rvm/gems/ruby-2.6.6/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/Users/dale/.rvm/gems/ruby-2.6.6/gems/zeitwerk-2.4.2/lib/zeitwerk/kernel.rb:34:in `require'
/Users/dale/.rvm/gems/ruby-2.6.6/gems/argon2-kdf-0.1.4/lib/argon2/kdf.rb:49:in `kdf'
/Users/dale/.rvm/gems/ruby-2.6.6/gems/argon2-kdf-0.1.4/lib/argon2/kdf.rb:40:in `argon2id'
/Users/dale/.rvm/gems/ruby-2.6.6/gems/blind_index-2.2.0/lib/blind_index.rb:68:in `generate_bidx'
/Users/dale/.rvm/gems/ruby-2.6.6/gems/blind_index-2.2.0/lib/blind_index/extensions.rb:42:in `build'

Is there a known problem with blind_index on M1 chips? Or do you think something else is causing this error?

ankane commented 3 years ago

It looks like it's trying to use the wrong shared library (libargon2.dylib instead of libargon2.arm64.dylib). Can you paste the output of RbConfig::CONFIG["arch"]?

Edit: RbConfig::CONFIG["host_cpu"] would be useful as well.

dalezak commented 3 years ago
RbConfig::CONFIG["arch"]
=> "-darwin20"
RbConfig::CONFIG["host_cpu"]
 => "arm"
dalezak commented 3 years ago
{"DESTDIR"=>"",
 "MAJOR"=>"2",
 "MINOR"=>"6",
 "TEENY"=>"6",
 "PATCHLEVEL"=>"146",
 "INSTALL"=>"/opt/homebrew/opt/coreutils/bin/ginstall -c",
 "EXEEXT"=>"",
 "prefix"=>"/Users/dale/.rvm/rubies/ruby-2.6.6",
 "ruby_install_name"=>"ruby",
 "RUBY_INSTALL_NAME"=>"ruby",
 "RUBY_SO_NAME"=>"ruby.2.6",
 "exec"=>"exec",
 "ruby_pc"=>"ruby-2.6.pc",
 "CC_WRAPPER"=>"",
 "PACKAGE"=>"ruby",
 "BUILTIN_TRANSSRCS"=>" enc/trans/newline.c",
 "MANTYPE"=>"doc",
 "vendorarchhdrdir"=>
  "/Users/dale/.rvm/rubies/ruby-2.6.6/include/ruby-2.6.0/vendor_ruby/-darwin20",
 "sitearchhdrdir"=>
  "/Users/dale/.rvm/rubies/ruby-2.6.6/include/ruby-2.6.0/site_ruby/-darwin20",
 "rubyarchhdrdir"=>
  "/Users/dale/.rvm/rubies/ruby-2.6.6/include/ruby-2.6.0/-darwin20",
 "vendorhdrdir"=>
  "/Users/dale/.rvm/rubies/ruby-2.6.6/include/ruby-2.6.0/vendor_ruby",
 "sitehdrdir"=>
  "/Users/dale/.rvm/rubies/ruby-2.6.6/include/ruby-2.6.0/site_ruby",
 "rubyhdrdir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/include/ruby-2.6.0",
 "RUBY_SEARCH_PATH"=>"",
 "UNIVERSAL_INTS"=>"",
 "UNIVERSAL_ARCHNAMES"=>"",
 "configure_args"=>
  " '--prefix=/Users/dale/.rvm/rubies/ruby-2.6.6' '' '--with-opt-dir=/opt/homebrew/opt/libyaml:/opt/homebrew/opt/libksba:/opt/homebrew/opt/readline:/opt/homebrew/opt/zlib:/opt/homebrew/opt/openssl@1.1' '--disable-install-doc' '--enable-shared' 'build_alias=' 'host_alias=' 'target_alias=' 'CC=gcc'",
 "CONFIGURE"=>"configure",
 "vendorarchdir"=>
  "/Users/dale/.rvm/rubies/ruby-2.6.6/lib/ruby/vendor_ruby/2.6.0/-darwin20",
 "vendorlibdir"=>
  "/Users/dale/.rvm/rubies/ruby-2.6.6/lib/ruby/vendor_ruby/2.6.0",
 "vendordir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/lib/ruby/vendor_ruby",
 "sitearchdir"=>
  "/Users/dale/.rvm/rubies/ruby-2.6.6/lib/ruby/site_ruby/2.6.0/-darwin20",
 "sitelibdir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/lib/ruby/site_ruby/2.6.0",
 "sitedir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/lib/ruby/site_ruby",
 "rubyarchdir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/lib/ruby/2.6.0/-darwin20",
 "rubylibdir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/lib/ruby/2.6.0",
 "ruby_version"=>"2.6.0",
 "sitearch"=>"-darwin20",
 "arch"=>"-darwin20",
 "sitearchincludedir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/include/-darwin20",
 "archincludedir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/include/-darwin20",
 "sitearchlibdir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/lib/-darwin20",
 "archlibdir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/lib/-darwin20",
 "libdirname"=>"libdir",
 "RUBY_EXEC_PREFIX"=>"/Users/dale/.rvm/rubies/ruby-2.6.6",
 "RUBY_LIB_VERSION"=>"",
 "RUBY_LIB_VERSION_STYLE"=>"3\t/* full */",
 "RI_BASE_NAME"=>"ri",
 "ridir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/share/ri",
 "rubysitearchprefix"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/lib/ruby/-darwin20",
 "rubyarchprefix"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/lib/ruby/-darwin20",
 "MAKEFILES"=>"Makefile GNUmakefile",
 "PLATFORM_DIR"=>"",
 "THREAD_MODEL"=>"pthread",
 "SYMBOL_PREFIX"=>"_",
 "EXPORT_PREFIX"=>"",
 "COMMON_HEADERS"=>"",
 "COMMON_MACROS"=>"",
 "COMMON_LIBS"=>"",
 "MAINLIBS"=>"-lpthread -ldl -lobjc",
 "ENABLE_SHARED"=>"yes",
 "DLDSHARED"=>"gcc -dynamiclib",
 "DLDLIBS"=>"",
 "SOLIBS"=>"-lpthread -ldl -lobjc",
 "LIBRUBYARG_SHARED"=>"-lruby.2.6",
 "LIBRUBYARG_STATIC"=>
  "-lruby.2.6-static -framework Security -framework Foundation -lpthread -ldl -lobjc",
 "LIBRUBYARG"=>"-lruby.2.6",
 "LIBRUBY"=>"libruby.2.6.dylib",
 "LIBRUBY_ALIASES"=>"libruby.dylib",
 "LIBRUBY_SONAME"=>"libruby.2.6.dylib",
 "LIBRUBY_SO"=>"libruby.2.6.dylib",
 "LIBRUBY_A"=>"libruby.2.6-static.a",
 "RUBYW_INSTALL_NAME"=>"",
 "rubyw_install_name"=>"",
 "EXTDLDFLAGS"=>"",
 "EXTLDFLAGS"=>"",
 "strict_warnflags"=>"",
 "warnflags"=>
  "-Wall -Wextra -Wdeclaration-after-statement -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wmissing-noreturn -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens",
 "debugflags"=>"-ggdb3",
 "optflags"=>"-Wno-error=implicit-function-declaration",
 "NULLCMD"=>":",
 "ENABLE_DEBUG_ENV"=>"",
 "DLNOBJ"=>"dln.o",
 "INSTALL_STATIC_LIBRARY"=>"no",
 "MJIT_SUPPORT"=>"yes",
 "EXECUTABLE_EXTS"=>"",
 "ARCHFILE"=>"",
 "LIBRUBY_RELATIVE"=>"no",
 "EXTOUT"=>".ext",
 "PREP"=>"miniruby exe/$(PROGRAM)",
 "CROSS_COMPILING"=>"no",
 "TEST_RUNNABLE"=>"yes",
 "rubylibprefix"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/lib/ruby",
 "setup"=>"Setup",
 "ENCSTATIC"=>"",
 "EXTSTATIC"=>"",
 "STRIP"=>"strip -A -n",
 "SOEXT"=>"dylib",
 "TRY_LINK"=>"",
 "PRELOADENV"=>"DYLD_INSERT_LIBRARIES",
 "LIBPATHENV"=>"DYLD_FALLBACK_LIBRARY_PATH",
 "RPATHFLAG"=>"",
 "LIBPATHFLAG"=>" -L%s",
 "LINK_SO"=>
  "\n" +
  "dsymutil $@; { test -z '$(RUBY_CODESIGN)' || codesign -s '$(RUBY_CODESIGN)' -f $@; }",
 "ASMEXT"=>"S",
 "LIBEXT"=>"a",
 "DLEXT2"=>"",
 "DLEXT"=>"bundle",
 "LDSHAREDXX"=>"g++ -dynamic -bundle",
 "LDSHARED"=>"gcc -dynamic -bundle",
 "CCDLFLAGS"=>"-fno-common",
 "STATIC"=>"",
 "ARCH_FLAG"=>"",
 "DLDFLAGS"=>
  "-Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -L/opt/homebrew/opt/libyaml/lib -L/opt/homebrew/opt/libksba/lib -L/opt/homebrew/opt/readline/lib -L/opt/homebrew/opt/zlib/lib -L/opt/homebrew/opt/openssl@1.1/lib",
 "ALLOCA"=>"",
 "MATHN"=>"yes",
 "dsymutil"=>"dsymutil",
 "codesign"=>"codesign",
 "POSTLINK"=>
  "dsymutil $@; { test -z '$(RUBY_CODESIGN)' || codesign -s '$(RUBY_CODESIGN)' -f $@; }",
 "WERRORFLAG"=>"-Werror",
 "CHDIR"=>"cd -P",
 "RMALL"=>"rm -fr",
 "RMDIRS"=>"rmdir -p",
 "RMDIR"=>"rmdir",
 "CP"=>"cp",
 "RM"=>"rm -f",
 "PKG_CONFIG"=>"pkg-config",
 "DOXYGEN"=>"",
 "DOT"=>"",
 "MAKEDIRS"=>"/opt/homebrew/opt/coreutils/bin/gmkdir -p",
 "MKDIR_P"=>"/opt/homebrew/opt/coreutils/bin/gmkdir -p",
 "INSTALL_DATA"=>"/opt/homebrew/opt/coreutils/bin/ginstall -c -m 644",
 "INSTALL_SCRIPT"=>"/opt/homebrew/opt/coreutils/bin/ginstall -c",
 "INSTALL_PROGRAM"=>"/opt/homebrew/opt/coreutils/bin/ginstall -c",
 "SET_MAKE"=>"",
 "LN_S"=>"ln -s",
 "NM"=>"nm",
 "DLLWRAP"=>"",
 "WINDRES"=>"",
 "OBJCOPY"=>":",
 "OBJDUMP"=>"objdump",
 "ASFLAGS"=>"",
 "AS"=>"as",
 "ARFLAGS"=>"-no_warning_for_no_symbols -o ",
 "AR"=>"libtool -static",
 "RANLIB"=>":",
 "try_header"=>"",
 "CC_VERSION_MESSAGE"=>
  "Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/4.2.1\n" +
  "Apple clang version 12.0.0 (clang-1200.0.32.28)\n" +
  "Target: arm64-apple-darwin20.2.0\n" +
  "Thread model: posix\n" +
  "InstalledDir: /Library/Developer/CommandLineTools/usr/bin",
 "CC_VERSION"=>"gcc --version",
 "MJIT_CC"=>"/usr/bin/gcc",
 "CSRCFLAG"=>"",
 "COUTFLAG"=>"-o ",
 "OUTFLAG"=>"-o ",
 "CPPOUTFILE"=>"-o conftest.i",
 "GNU_LD"=>"no",
 "LD"=>"ld",
 "GCC"=>"yes",
 "EGREP"=>"/usr/bin/grep -E",
 "GREP"=>"/usr/bin/grep",
 "CPP"=>"gcc -E",
 "CXXFLAGS"=>
  "-Wno-error=implicit-function-declaration -ggdb3 -Wall -Wextra -Wdeclaration-after-statement -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wmissing-noreturn -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens",
 "CXX"=>"g++",
 "OBJEXT"=>"o",
 "CPPFLAGS"=>
  " -I/opt/homebrew/opt/libyaml/include -I/opt/homebrew/opt/libksba/include -I/opt/homebrew/opt/readline/include -I/opt/homebrew/opt/zlib/include -I/opt/homebrew/opt/openssl@1.1/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT  ",
 "LDFLAGS"=>
  "-L. -fstack-protector-strong -L/opt/homebrew/opt/libyaml/lib -L/opt/homebrew/opt/libksba/lib -L/opt/homebrew/opt/readline/lib -L/opt/homebrew/opt/zlib/lib -L/opt/homebrew/opt/openssl@1.1/lib",
 "CFLAGS"=>
  "-Wno-error=implicit-function-declaration -ggdb3 -Wall -Wextra -Wdeclaration-after-statement -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wmissing-noreturn -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens  -fno-common -pipe",
 "CC"=>"gcc",
 "target_os"=>"darwin20",
 "target_vendor"=>"apple",
 "target_cpu"=>"",
 "target"=>"-apple-darwin20",
 "host_os"=>"darwin20.2.0",
 "host_vendor"=>"apple",
 "host_cpu"=>"arm",
 "host"=>"arm-apple-darwin20.2.0",
 "RUBY_VERSION_NAME"=>"ruby-2.6.0",
 "RUBYW_BASE_NAME"=>"rubyw",
 "RUBY_BASE_NAME"=>"ruby",
 "build_os"=>"darwin20.2.0",
 "build_vendor"=>"apple",
 "build_cpu"=>"arm",
 "build"=>"arm-apple-darwin20.2.0",
 "RUBY_API_VERSION"=>"2.6",
 "RUBY_PROGRAM_VERSION"=>"2.6.6",
 "HAVE_GIT"=>"yes",
 "GIT"=>"git",
 "cxxflags"=>
  "-Wno-error=implicit-function-declaration -ggdb3 -Wall -Wextra -Wdeclaration-after-statement -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wmissing-noreturn -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens",
 "cppflags"=>"",
 "cflags"=>
  "-Wno-error=implicit-function-declaration -ggdb3 -Wall -Wextra -Wdeclaration-after-statement -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wmissing-noreturn -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens",
 "target_alias"=>"",
 "host_alias"=>"",
 "build_alias"=>"",
 "LIBS"=>"",
 "ECHO_T"=>"",
 "ECHO_N"=>"",
 "ECHO_C"=>"\\\\c",
 "DEFS"=>"",
 "mandir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/share/man",
 "localedir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/share/locale",
 "libdir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/lib",
 "psdir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/share/doc/ruby",
 "pdfdir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/share/doc/ruby",
 "dvidir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/share/doc/ruby",
 "htmldir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/share/doc/ruby",
 "infodir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/share/info",
 "docdir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/share/doc/ruby",
 "oldincludedir"=>"/usr/include",
 "includedir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/include",
 "runstatedir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/var/run",
 "localstatedir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/var",
 "sharedstatedir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/com",
 "sysconfdir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/etc",
 "datadir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/share",
 "datarootdir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/share",
 "libexecdir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/libexec",
 "sbindir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/sbin",
 "bindir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/bin",
 "exec_prefix"=>"/Users/dale/.rvm/rubies/ruby-2.6.6",
 "PACKAGE_URL"=>"",
 "PACKAGE_BUGREPORT"=>"",
 "PACKAGE_STRING"=>"",
 "PACKAGE_VERSION"=>"",
 "PACKAGE_TARNAME"=>"",
 "PACKAGE_NAME"=>"",
 "PATH_SEPARATOR"=>":",
 "SHELL"=>"/bin/sh",
 "UNICODE_VERSION"=>"12.1.0",
 "UNICODE_EMOJI_VERSION"=>"12.0",
 "SDKROOT"=>"",
 "archdir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/lib/ruby/2.6.0/-darwin20",
 "topdir"=>"/Users/dale/.rvm/rubies/ruby-2.6.6/lib/ruby/2.6.0/-darwin20"}
ankane commented 3 years ago

Thanks @dalezak! Can you paste Gem::Platform.local and Gem::Platform.local.to_s as well? After looking into it more, I think that may be the cleanest to use.

Edit: Also, how was RVM installed? The arch output seems odd.

dalezak commented 3 years ago
Gem::Platform.local
 => #<Gem::Platform:0x000000012d836458 @cpu="", @os="darwin", @version="20" @cpu="", @os="darwin", @version="20">
Gem::Platform.local.to_s
 => "-darwin-20"
ankane commented 3 years ago

Thanks @dalezak. It looks like Gem::Platform.local uses arch internally (and also JRuby doesn't include the cpu type in arch), so seems like host_cpu is best to use. Just pushed out a new release (0.1.5).

I think the arch may cause issues with gems prepackaged for specific platforms (for instance, there's a arm64-darwin release of Nokogiri, but my guess is it won't be picked up on your machine). If it's a typical RVM install, it may be worth reporting to RVM.

Edit: You can run gem install nokogiri to see if that's the case. Installation should be pretty much instant and it should output nokogiri-1.11.0-arm64-darwin if the prepackaged version is used.

dalezak commented 3 years ago

Thank you @ankane, the 0.1.5 release worked, you are amazing!! 🤩