helloadhavan/github_issues huggingface dataset:
Repository: nodejs/node
Pull request: Revert "lib: optimize writable stream buffer clearing"

The changes in #59406 were intended to improve performance, but subsequent CI benchmarks showed inconsistent results, including some performance regressions. The observed improvements were not statistically significant due to a high margin of error.

The performance issues and related discussion can be found in the comments of nodejs/node#59676.


Changed files:
filename: lib/internal/streams/writable.js
patch: @@ -784,7 +784,7 @@ function clearBuffer(stream, state) {
     if (i === buffered.length) {
       resetBuffer(state);
     } else if (i > 256) {
-      state[kBufferedValue] = ArrayPrototypeSlice(buffered, i);
+      buffered.splice(0, i);
       state.bufferedIndex = 0;
     } else {
       state.bufferedIndex = i;
Repository: electron/electron
Pull request: ci: set git `core.longpaths` to true

#### Description of Change

This is causing some intermittent failures in CI - see https://github.com/electron/build-tools/pull/727 as well.

#### Checklist
<!-- Remove items that do not apply. For completed items, change [ ] to [x]. -->

- [x] PR description included and stakeholders cc'd
- [x] `npm test` passes
- [x] [PR release notes](https://github.com/electron/clerk/blob/main/README.md) describe the change in a way relevant to app developers, and are [capitalized, punctuated, and past tense](https://github.com/electron/clerk/blob/main/README.md#examples).

#### Release Notes

Notes: none

Changed files:
filename: .github/actions/install-build-tools/action.yml
patch: @@ -11,6 +11,7 @@ runs:
         git config --global core.autocrlf false
         git config --global branch.autosetuprebase always
         git config --global core.fscache true
+        git config --global core.longpaths true
         git config --global core.preloadindex true
       fi
       export BUILD_TOOLS_SHA=0a7f6bef9453ceee45612442660ca16d2c40171b

filename: .github/workflows/pipeline-segment-electron-test.yml
patch: @@ -135,6 +135,7 @@ jobs:
         git config --global core.autocrlf false
         git config --global branch.autosetuprebase always
         git config --global core.fscache true
+        git config --global core.longpaths true
         git config --global core.preloadindex true
         git clone --filter=tree:0 https://chromium.googlesource.com/chromium/tools/depot_tools.git
         # Ensure depot_tools does not update.
Repository: ollama/ollama
Pull request: Fix typos in README.md

- There was a lagging comma instead of a dot
- Some other minor changes

Changed files:
filename: README.md
patch: @@ -1,5 +1,5 @@
 <div align="center">
-  <img alt="ollama" height="200px" src="https://github.com/ollama/ollama/assets/3325447/0d0b44e2-8f4a-4e99-9b52-a5c1c741c8f7">
+ <img alt="ollama" height="200px" src="https://github.com/ollama/ollama/assets/3325447/0d0b44e2-8f4a-4e99-9b52-a5c1c741c8f7">
 </div>
 
 # Ollama
@@ -173,7 +173,7 @@ I'm a basic program that prints the famous "Hello, world!" message to the consol
 The image features a yellow smiley face, which is likely the central focus of the picture.
 ```
 
-### Pass in prompt as arguments
+### Pass the prompt as an argument
 
 ```
 $ ollama run llama3 "Summarize this file: $(cat README.md)"
@@ -294,7 +294,7 @@ See the [API documentation](./docs/api.md) for all endpoints.
 - [RAGFlow: Open-source Retrieval-Augmented Generation engine based on deep document understanding](https://github.com/infiniflow/ragflow)
 - [chat: chat web app for teams](https://github.com/swuecho/chat)
 - [Lobe Chat](https://github.com/lobehub/lobe-chat) with [Integrating Doc](https://lobehub.com/docs/self-hosting/examples/ollama)
-- [Ollama RAG Chatbot: Local Chat with multiples PDFs using Ollama and RAG.](https://github.com/datvodinh/rag-chatbot.git)
+- [Ollama RAG Chatbot: Local Chat with multiple PDFs using Ollama and RAG.](https://github.com/datvodinh/rag-chatbot.git)
 
 ### Terminal
 
@@ -384,4 +384,4 @@ See the [API documentation](./docs/api.md) for all endpoints.
 - [Discord-Ollama Chat Bot](https://github.com/kevinthedang/discord-ollama) (Generalized TypeScript Discord Bot w/ Tuning Documentation)
 
 ### Supported backends 
-- [llama.cpp](https://github.com/ggerganov/llama.cpp) project founded by Georgi Gerganov. 
+- [llama.cpp](https://github.com/ggerganov/llama.cpp) project founded by Georgi Gerganov. 
\ No newline at end of file
Repository: denoland/deno
Pull request: fix(ext/node): handle generateKeyPair 2-arg call and enable PQC tests

## Summary
- `generateKeyPair(type, callback)` without options was throwing
  `ERR_INVALID_ARG_TYPE` because the callback was being treated as the
  options argument. Now properly detects when the second argument is a
  function and shifts it to the callback position.
- Enables 7 PQC node_compat tests (ML-DSA, ML-KEM, SLH-DSA) for keygen,
  key-objects, and sign-verify.

## Test plan
- [x] `cargo test --test node_compat test-crypto-pqc` — all 8 tests pass (7 parallel + 1 pummel)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Changed files:
filename: ext/node/polyfills/internal/crypto/keygen.ts
patch: @@ -568,16 +568,20 @@ export function generateKeyPair(
 export function generateKeyPair(
   type: KeyType,
   options: unknown,
-  callback: (
+  callback?: (
     err: Error | null,
     publicKey: any,
     privateKey: any,
   ) => void,
 ) {
+  if (typeof options === "function") {
+    callback = options;
+    options = undefined;
+  }
   _generateKeyPair(type, options)
     .then(
-      (res) => callback(null, res.publicKey, res.privateKey),
-      (err) => callback(err, null, null),
+      (res) => callback!(null, res.publicKey, res.privateKey),
+      (err) => callback!(err, null, null),
     );
 }
 

filename: tests/node_compat/config.jsonc
patch: @@ -380,6 +380,13 @@
     "parallel/test-crypto-keygen-async-named-elliptic-curve.js": {},
     "parallel/test-crypto-keygen-dh-classic.js": {},
     "parallel/test-crypto-keygen-duplicate-deprecated-option.js": {},
+    "parallel/test-crypto-pqc-key-objects-ml-dsa.js": {},
+    "parallel/test-crypto-pqc-key-objects-ml-kem.js": {},
+    "parallel/test-crypto-pqc-key-objects-slh-dsa.js": {},
+    "parallel/test-crypto-pqc-keygen-ml-dsa.js": {},
+    "parallel/test-crypto-pqc-keygen-ml-kem.js": {},
+    "parallel/test-crypto-pqc-keygen-slh-dsa.js": {},
+    "parallel/test-crypto-pqc-sign-verify-ml-dsa.js": {},
     "parallel/test-crypto-keygen-empty-passphrase-no-error.js": {},
     "parallel/test-crypto-keygen-key-objects.js": {},
     "parallel/test-crypto-keygen-missing-oid.js": {},
Repository: nodejs/node
Pull request: doc: update OpenSSL default security level to 2 in TLS documentation

Fixes https://github.com/nodejs/node/issues/59715

This pull request updates the Node.js TLS documentation to reflect the change in the default OpenSSL security level from 1 to 2, starting with Node.js 24.5 (OpenSSL 3.2+).

The documentation previously stated the default security level was 1.
The default is now 2, which enforces stricter cryptographic requirements.

Changed files:
filename: doc/api/tls.md
patch: @@ -454,7 +454,7 @@ are not enabled by default since they offer less security.
 The OpenSSL library enforces security levels to control the minimum acceptable
 level of security for cryptographic operations. OpenSSL's security levels range
 from 0 to 5, with each level imposing stricter security requirements. The default
-security level is 1, which is generally suitable for most modern applications.
+security level is 2, which is generally suitable for most modern applications.
 However, some legacy features and protocols, such as TLSv1, require a lower
 security level (`SECLEVEL=0`) to function properly. For more detailed information,
 please refer to the [OpenSSL documentation on security levels][].
Repository: vercel/next.js
Pull request: [create-next-app]: add eslint to default template

Sets eslint as the default linter when using recommended defaults. 

Changed files:
filename: packages/create-next-app/index.ts
patch: @@ -234,7 +234,7 @@ async function run(): Promise<void> {
     const defaults: typeof preferences = {
       typescript: true,
       eslint: false,
-      linter: 'none',
+      linter: 'eslint',
       tailwind: true,
       app: true,
       srcDir: false,
Repository: huggingface/transformers
Pull request: Fix video processing channel format

# What does this PR do?

FIxes failing VJEPA test. The test was failing because the video was not permuted to the correct format that torchvision expects `(T, C, H, W)`

Changed files:
filename: src/transformers/video_processing_utils.py
patch: @@ -57,12 +57,12 @@
     VideoInput,
     VideoMetadata,
     group_videos_by_shape,
+    infer_channel_dimension_format,
     is_valid_video,
     load_video,
     make_batched_metadata,
     make_batched_videos,
     reorder_videos,
-    to_channel_dimension_format,
 )
 
 
@@ -338,10 +338,16 @@ def _prepare_input_videos(
         for video in videos:
             # `make_batched_videos` always returns a 4D array per video
             if isinstance(video, np.ndarray):
-                video = to_channel_dimension_format(video, ChannelDimension.FIRST, input_data_format)
                 # not using F.to_tensor as it doesn't handle (C, H, W) numpy arrays
                 video = torch.from_numpy(video).contiguous()
 
+            # Infer the channel dimension format if not provided
+            if input_data_format is None:
+                input_data_format = infer_channel_dimension_format(video)
+
+            if input_data_format == ChannelDimension.LAST:
+                video = video.permute(0, 3, 1, 2).contiguous()
+
             if device is not None:
                 video = video.to(device)
Repository: ollama/ollama
Pull request: metal: add 512MiB to minimum memory, no partial offloading overhead


Changed files:
filename: gpu/gpu_darwin.go
patch: @@ -10,6 +10,12 @@ package gpu
 import "C"
 import (
 	"runtime"
+
+	"github.com/ollama/ollama/format"
+)
+
+const (
+	metalMinimumMemory = 512 * format.MebiByte
 )
 
 func GetGPUInfo() GpuInfoList {
@@ -32,7 +38,7 @@ func GetGPUInfo() GpuInfoList {
 	// TODO is there a way to gather actual allocated video memory? (currentAllocatedSize doesn't work)
 	info.FreeMemory = info.TotalMemory
 
-	info.MinimumMemory = 0
+	info.MinimumMemory = metalMinimumMemory
 	return []GpuInfo{info}
 }
 

filename: llm/memory.go
patch: @@ -88,6 +88,11 @@ func EstimateGPULayers(gpus []gpu.GpuInfo, ggml *GGML, projectors []string, opts
 	graphFullOffload *= uint64(len(gpus))
 	graphPartialOffload *= uint64(len(gpus))
 
+	// on metal there's no partial offload overhead
+	if gpus[0].Library == "metal" {
+		graphPartialOffload = graphFullOffload
+	}
+
 	// memoryRequiredTotal represents the memory required for full GPU offloading (all layers)
 	memoryRequiredTotal := memoryMinimum + graphFullOffload
Repository: ollama/ollama
Pull request: types/model: reintroduce Digest


Changed files:
filename: types/model/name.go
patch: @@ -4,6 +4,7 @@ package model
 
 import (
 	"cmp"
+	"encoding/hex"
 	"errors"
 	"fmt"
 	"log/slog"
@@ -308,3 +309,57 @@ func cutPromised(s, sep string) (before, after string, ok bool) {
 	}
 	return cmp.Or(before, MissingPart), cmp.Or(after, MissingPart), true
 }
+
+type DigestType byte
+
+const (
+	DigestTypeInvalid DigestType = iota
+	DigestTypeSHA256
+)
+
+func (t DigestType) String() string {
+	switch t {
+	case DigestTypeSHA256:
+		return "sha256"
+	default:
+		return "invalid"
+	}
+}
+
+type Digest struct {
+	Type DigestType
+	Sum  [32]byte
+}
+
+func ParseDigest(s string) (Digest, error) {
+	i := strings.IndexAny(s, "-:")
+	if i < 0 {
+		return Digest{}, fmt.Errorf("invalid digest %q", s)
+	}
+	typ, encSum := s[:i], s[i+1:]
+	if typ != "sha256" {
+		return Digest{}, fmt.Errorf("unsupported digest type %q", typ)
+	}
+	d := Digest{
+		Type: DigestTypeSHA256,
+	}
+	n, err := hex.Decode(d.Sum[:], []byte(encSum))
+	if err != nil {
+		return Digest{}, err
+	}
+	if n != 32 {
+		return Digest{}, fmt.Errorf("digest %q decoded to %d bytes; want 32", encSum, n)
+	}
+	return d, nil
+}
+
+func (d Digest) String() string {
+	if d.Type == DigestTypeInvalid {
+		return ""
+	}
+	return fmt.Sprintf("sha256-%x", d.Sum)
+}
+
+func (d Digest) IsValid() bool {
+	return d.Type != DigestTypeInvalid
+}

filename: types/model/name_test.go
patch: @@ -232,6 +232,40 @@ func TestFilepathAllocs(t *testing.T) {
 	}
 }
 
+const (
+	validSha256    = "sha256-1000000000000000000000000000000000000000000000000000000000000000"
+	validSha256Old = "sha256:1000000000000000000000000000000000000000000000000000000000000000"
+)
+
+func TestParseDigest(t *testing.T) {
+	cases := []struct {
+		in   string
+		want string
+	}{
+		{"", ""},           // empty
+		{"sha123-12", ""},  // invalid type
+		{"sha256-", ""},    // invalid sum
+		{"sha256-123", ""}, // invalid odd length sum
+
+		{validSha256, validSha256},
+		{validSha256Old, validSha256},
+	}
+	for _, tt := range cases {
+		t.Run(tt.in, func(t *testing.T) {
+			got, err := ParseDigest(tt.in)
+			if err != nil {
+				if tt.want != "" {
+					t.Errorf("parseDigest(%q) = %v; want %v", tt.in, err, tt.want)
+				}
+				return
+			}
+			if got.String() != tt.want {
+				t.Errorf("parseDigest(%q).String() = %q; want %q", tt.in, got, tt.want)
+			}
+		})
+	}
+}
+
 func FuzzName(f *testing.F) {
 	for s := range testCases {
 		f.Add(s)
Repository: nodejs/node
Pull request: util: remove unnecessary template strings

<!--
Before submitting a pull request, please read:

- the CONTRIBUTING guide at https://github.com/nodejs/node/blob/HEAD/CONTRIBUTING.md
- the commit message formatting guidelines at
  https://github.com/nodejs/node/blob/HEAD/doc/contributing/pull-requests.md#commit-message-guidelines

For code changes:
1. Include tests for any bug fixes or new features.
2. Update documentation if relevant.
3. Ensure that `make -j4 test` (UNIX), or `vcbuild test` (Windows) passes.

If you believe this PR should be highlighted in the Node.js CHANGELOG
please add the `notable-change` label.

Developer's Certificate of Origin 1.1

By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I
    have the right to submit it under the open source license
    indicated in the file; or

(b) The contribution is based upon previous work that, to the best
    of my knowledge, is covered under an appropriate open source
    license and I have the right under that license to submit that
    work with modifications, whether created in whole or in part
    by me, under the same open source license (unless I am
    permitted to submit under a different license), as indicated
    in the file; or

(c) The contribution was provided directly to me by some other
    person who certified (a), (b) or (c) and I have not modified
    it.

(d) I understand and agree that this project and the contribution
    are public and that a record of the contribution (including all
    personal information I submit with it, including my sign-off) is
    maintained indefinitely and may be redistributed consistent with
    this project or the open source license(s) involved.
-->
The result returned by `escapeStyleCode` must be a string and does not need to be wrapped in a template string.


Changed files:
filename: lib/util.js
patch: @@ -181,7 +181,7 @@ function styleText(format, text, { validateStream = true, stream = process.stdou
               // Dim and bold are not mutually exclusive, so we need to reapply
               return `${match}${escapeStyleCode(code[0])}`;
             }
-            return `${escapeStyleCode(code[0])}`;
+            return escapeStyleCode(code[0]);
           }
           return match;
         },
Repository: ollama/ollama
Pull request: Update llama.cpp submodule to `f364eb6`

Also filters out stop words for now from being returned in the API as they will print on older clients

Changed files:
filename: llm/ext_server/server.cpp
patch: @@ -1032,7 +1032,7 @@ struct llama_server_context
             slot.has_next_token = false;
         }
 
-        if (!slot.cache_tokens.empty() && result.tok == llama_token_eos(model))
+        if (llama_token_is_eog(model, result.tok))
         {
             slot.stopped_eos = true;
             slot.has_next_token = false;
@@ -1144,12 +1144,15 @@ struct llama_server_context
 
         res.result_json = json
         {
-            {"content",    tkn.text_to_send},
             {"stop",       false},
             {"slot_id",    slot.id},
             {"multimodal", multimodal}
         };
 
+        if (!llama_token_is_eog(model, tkn.tok)) {
+            res.result_json["content"] = tkn.text_to_send;
+        }
+
         if (slot.sparams.n_probs > 0)
         {
             std::vector<completion_token_output> probs_output = {};

filename: llm/llama.cpp
patch: @@ -1 +1 @@
-Subproject commit f4ab2a41476600a98067a9474ea8f9e6db41bcfa
+Subproject commit f364eb6fb5d46118a76fa045f487318de4c24961
Repository: ggml-org/llama.cpp
Pull request: arg: fix ASAN error on sampler_type_names empty

Fix a bug from https://github.com/ggml-org/llama.cpp/pull/18056 , cc @ServeurpersoCom 


Changed files:
filename: common/arg.cpp
patch: @@ -873,7 +873,9 @@ common_params_context common_params_parser_init(common_params & params, llama_ex
         sampler_type_chars += common_sampler_type_to_chr(sampler);
         sampler_type_names += common_sampler_type_to_str(sampler) + ";";
     }
-    sampler_type_names.pop_back();
+    if (!sampler_type_names.empty()) {
+        sampler_type_names.pop_back(); // remove last semicolon
+    }
 
 
     /**
Repository: ollama/ollama
Pull request: types/model: reduce Name.Filepath allocs from 5 to 2


Changed files:
filename: types/model/name.go
patch: @@ -231,12 +231,12 @@ func (n Name) Filepath() string {
 	if !n.IsFullyQualified() {
 		panic("illegal attempt to get filepath of invalid name")
 	}
-	return filepath.Join(
-		strings.ToLower(n.Host),
-		strings.ToLower(n.Namespace),
-		strings.ToLower(n.Model),
-		strings.ToLower(n.Tag),
-	)
+	return strings.ToLower(filepath.Join(
+		n.Host,
+		n.Namespace,
+		n.Model,
+		n.Tag,
+	))
 }
 
 // LogValue returns a slog.Value that represents the name as a string.

filename: types/model/name_test.go
patch: @@ -2,6 +2,7 @@ package model
 
 import (
 	"reflect"
+	"runtime"
 	"testing"
 )
 
@@ -217,6 +218,20 @@ func TestNameIsValidPart(t *testing.T) {
 
 }
 
+func TestFilepathAllocs(t *testing.T) {
+	n := ParseNameBare("HOST/NAMESPACE/MODEL:TAG")
+	allocs := testing.AllocsPerRun(1000, func() {
+		n.Filepath()
+	})
+	allowedAllocs := 2.0
+	if runtime.GOOS == "windows" {
+		allowedAllocs = 4
+	}
+	if allocs > allowedAllocs {
+		t.Errorf("allocs = %v; allowed %v", allocs, allowedAllocs)
+	}
+}
+
 func FuzzName(f *testing.F) {
 	for s := range testCases {
 		f.Add(s)
Repository: ggml-org/llama.cpp
Pull request: gguf-py : use copy-on-write mode for localtensor

Follow up to #18100

Allows read-only access to files while not triggering PyTorch warning about read-only tensors.

Fixes #18161

Changed files:
filename: gguf-py/gguf/utility.py
patch: @@ -288,7 +288,7 @@ class LocalTensor:
     data_range: LocalTensorRange
 
     def mmap_bytes(self) -> np.ndarray:
-        return np.memmap(self.data_range.filename, mode='r', offset=self.data_range.offset, shape=self.data_range.size)
+        return np.memmap(self.data_range.filename, mode='c', offset=self.data_range.offset, shape=self.data_range.size)
 
 
 class SafetensorsLocal:
Repository: nodejs/node
Pull request: fs: fix wrong order of file names in cpSync error message

<!--
Before submitting a pull request, please read:

- the CONTRIBUTING guide at https://github.com/nodejs/node/blob/HEAD/CONTRIBUTING.md
- the commit message formatting guidelines at
  https://github.com/nodejs/node/blob/HEAD/doc/contributing/pull-requests.md#commit-message-guidelines

For code changes:
1. Include tests for any bug fixes or new features.
2. Update documentation if relevant.
3. Ensure that `make -j4 test` (UNIX), or `vcbuild test` (Windows) passes.

If you believe this PR should be highlighted in the Node.js CHANGELOG
please add the `notable-change` label.

Developer's Certificate of Origin 1.1

By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I
    have the right to submit it under the open source license
    indicated in the file; or

(b) The contribution is based upon previous work that, to the best
    of my knowledge, is covered under an appropriate open source
    license and I have the right under that license to submit that
    work with modifications, whether created in whole or in part
    by me, under the same open source license (unless I am
    permitted to submit under a different license), as indicated
    in the file; or

(c) The contribution was provided directly to me by some other
    person who certified (a), (b) or (c) and I have not modified
    it.

(d) I understand and agree that this project and the contribution
    are public and that a record of the contribution (including all
    personal information I submit with it, including my sign-off) is
    maintained indefinitely and may be redistributed consistent with
    this project or the open source license(s) involved.
-->


Changed files:
filename: src/node_file.cc
patch: @@ -3270,7 +3270,7 @@ static void CpSyncCheckPaths(const FunctionCallbackInfo<Value>& args) {
       std::string message =
           "Cannot overwrite non-directory %s with directory %s";
       return THROW_ERR_FS_CP_DIR_TO_NON_DIR(
-          env, message.c_str(), src_path_str, dest_path_str);
+          env, message.c_str(), dest_path_str, src_path_str);
     }
 
     if (!src_is_dir && dest_is_dir) {

filename: test/parallel/test-fs-cp-sync-copy-directory-to-file-error.mjs
patch: @@ -14,11 +14,11 @@ if (isInsideDirWithUnusualChars) {
 tmpdir.refresh();
 
 {
-  const src = nextdir();
+  const src = nextdir('FIRST_DIRECTORY');
   mkdirSync(src, mustNotMutateObjectDeep({ recursive: true }));
   const dest = fixtures.path('copy/kitchen-sink/README.md');
   assert.throws(
     () => cpSync(src, dest),
-    { code: 'ERR_FS_CP_DIR_TO_NON_DIR' }
+    { code: 'ERR_FS_CP_DIR_TO_NON_DIR', message: /non-directory .*README\.md with directory .*FIRST_DIRECTORY/ }
   );
 }
Repository: ollama/ollama
Pull request: Update llama.cpp

Bump llama.cpp to b2761

Changed files:
filename: llm/ext_server/server.cpp
patch: @@ -2644,18 +2644,18 @@ static void server_params_parse(int argc, char **argv, server_params &sparams,
             if (strncmp(sep, "int:", 4) == 0) {
                 sep += 4;
                 kvo.tag = LLAMA_KV_OVERRIDE_TYPE_INT;
-                kvo.int_value = std::atol(sep);
+                kvo.val_i64 = std::atol(sep);
             } else if (strncmp(sep, "float:", 6) == 0) {
                 sep += 6;
                 kvo.tag = LLAMA_KV_OVERRIDE_TYPE_FLOAT;
-                kvo.float_value = std::atof(sep);
+                kvo.val_f64 = std::atof(sep);
             } else if (strncmp(sep, "bool:", 5) == 0) {
                 sep += 5;
                 kvo.tag = LLAMA_KV_OVERRIDE_TYPE_BOOL;
                 if (std::strcmp(sep, "true") == 0) {
-                    kvo.bool_value = true;
+                    kvo.val_bool = true;
                 } else if (std::strcmp(sep, "false") == 0) {
-                    kvo.bool_value = false;
+                    kvo.val_bool = false;
                 } else {
                     fprintf(stderr, "error: Invalid boolean value for KV override: %s\n", argv[i]);
                     invalid_param = true;

filename: llm/llama.cpp
patch: @@ -1 +1 @@
-Subproject commit 46e12c4692a37bdd31a0432fc5153d7d22bc7f72
+Subproject commit f4ab2a41476600a98067a9474ea8f9e6db41bcfa